从 PDF 到 MCP:让 AI Agent 按需查询你的简历
起因
越来越多公司用 AI 做简历初筛,HR 把 JD 扔给 Agent,Agent 去匹配候选人。但简历本质上是一张 PDF(或者一个网页),AI 读起来其实很费劲 ------ 排版干扰、信息分散、无法精确查询。
那我为什么不直接把简历变成 AI 原生可读 的?不是"AI 友好"那种废话,而是真的让 AI Agent 能连上来、按需查询、做结构化分析的那种。
于是我做了一个东西:给自己的简历加了一个 MCP Server。访问我的公开页,AI Agent 能自动发现这个端点,连上来之后可以搜索经历、分析岗位匹配度、查询技能熟练度。
整个项目开源了:github.com/Leeson-Wong...
这篇文章不吹技术实现有多厉害(说实话就是个基础实现),重点聊聊 简历 + MCP 这个组合本身意味着什么。
什么是 MCP?
MCP(Model Context Protocol)是 Anthropic 提出的开放协议,让 AI Agent 能以标准化方式连接外部数据源和工具。你可以把它理解为"AI 时代的 API"------区别在于 MCP 是自描述的(工具自带 name、description、inputSchema),AI Agent 能自动理解怎么用,不需要写对接文档。
先看效果
招聘方的 AI Agent 连上之后能做什么:
问:搜索一下大数据相关的经历
css
search_resume({ query: "大数据" })
→ 返回:相关经历片段 + 来源模块 + 相关性评分
问:这个候选人适合我们这个岗位吗?
css
evaluate_fit({
job_description: "高级全栈工程师,5年+经验,React/Node.js,
有大数据平台开发经验,熟悉 DevOps"
})
→ {
score: 82,
matched: ["react", "node", "big data", "devops", ...],
missing: ["Kubernetes"],
recommendation: "Strong match! ..."
}
问:给我一个全面评估
css
get_career_summary({})
→ {
seniority: "senior",
totalYears: 6,
domains: ["大数据云服务", "跨端应用开发", "独立产品开发"],
coreStrengths: ["多技术栈适应能力", "独立产品交付", "AI 协议设计"],
topSkills: [{ name: "React", level: 4, yearsUsed: 5 }, ...]
}
这些都是结构化 JSON,AI Agent 可以直接程序化处理,不需要去解析 PDF 或者网页。
关键不是技术,是产品逻辑
投简历的方式变了
传统流程:投 PDF → HR 人肉扫 → 可能转给 AI 辅助判断
新的流程:给 HR 一个链接 + 邀请码 → HR 的 AI Agent 连上 MCP → Agent 自己决定查什么、怎么分析
区别在于:信息查询的主动权从 HR 转移到了 AI Agent。Agent 可以根据自己关心的问题动态查询,而不是被动读一份固定格式的文档。
邀请码 = 反向筛选
这个设计是我最满意的部分。
投简历时给 HR 「链接 + 邀请码」。HR 需要把邀请码配置到 AI 客户端,Agent 才能查到深度信息。
这个流程本身就是一道筛选:AI 素养不够的团队根本走不通。能走通说明这个团队已经在用 AI Agent 做招聘了,大概率也是个更现代化的团队。
而且邀请码支持追踪 ------ 能看到对方的 Agent 具体查了哪些工具、什么时候查的。这比"简历被查看"这种通知有价值多了,你能知道对方 真正关心什么。
隐私分级
公开页和 MCP 返回的信息是分级的:
| 层级 | 什么能看到 | 渠道 |
|---|---|---|
| 公开 | 姓名、title、技能标签、工作经历 | / 公开页 |
| MCP 查询 | 项目细节、技能熟练度、匹配分析 | /mcp(需邀请码) |
| 隐私 | 邮箱、手机号 | 不通过 MCP 暴露 |
不是所有信息都值得给 AI 看。联系方式这种东西就该留在人工沟通阶段。
三层发现机制
AI Agent 怎么知道我的简历有 MCP 服务?这是整个设计里最关键的一环 ------ 发现要比连接更重要。
bash
AI Agent 访问 https://your-domain.com
↓
解析 HTML,发现 <link rel="mcp" href="/mcp">
↓
请求 /.well-known/mcp 获取完整元数据(工具列表、认证方式)
↓
使用邀请码通过 Authorization header 连接
↓
开始查询
三层发现,由浅到深:
第一层:HTML 注入 --- 公开页自动注入,零维护成本
html
<link rel="mcp" href="/mcp">
<link rel="llms-txt" href="/llms.txt">
<script type="application/ld+json">
{ "@type": "Person", "name": "...", "knowsAbout": [...] }
</script>
第二层:/.well-known/mcp --- 标准的 well-known 端点,机器可读的完整 MCP 配置
json
{
"mcp": {
"endpoint": "/mcp",
"transport": "http",
"auth": { "type": "bearer" },
"tools": [...]
}
}
第三层:/llms.txt --- 遵循 llms.txt 标准,Markdown 格式的 AI 友好描述
这三层都是服务端自动生成的,数据来源于同一份 resume.json。改了简历,所有发现信息自动更新。
架构设计
项目是一个自托管的全栈应用,不是 SaaS。单用户,部署在你自己的服务器上。
bash
/ → 公开页(任何人可见,注入 MCP 发现信息)
/mcp → MCP endpoint(邀请码认证,给 AI Agent 用)
/edit → 简历编辑器(认证码认证,给自己用)
核心原则:数据只有一份 resume.json,编辑器和 MCP 共享同一数据源。MCP 每次请求都实时读取最新数据,不存在缓存不同步的问题。
技术栈没什么好吹的:React 19 + Vite 7 + Tailwind 4 做编辑器,Node.js 原生 HTTP 做服务端,MCP SDK 做协议层,Zod 做数据校验。搜索用的是自实现的 TF 评分 + 中英混合分词,够用但不上不下 ------ 也就关键词匹配的水平,跟真正的语义搜索差得远。
工具一共 8 个:
| 工具 | 干什么的 |
|---|---|
get_profile |
公开信息,隐私字段不过 MCP |
get_experience |
工作经历,可按关键词过滤 |
get_projects |
项目经历,可按技术栈过滤 |
get_skills |
技能列表,带熟练度和年限 |
get_education |
教育背景 |
search_resume |
全文搜索,TF 相关性评分 |
evaluate_fit |
给一段 JD,输出匹配分 + 缺失技能 |
get_career_summary |
职业概览:资级、领域、核心优势 |
每个工具支持 format: 'text' | 'json',text 给人看,json 给程序处理。
一些工程选择
不展开讲了,列几个我觉得值得提的决策:
原子写入而不是数据库 --- 简历数据就 2KB,用 SQLite 都嫌重。write-to-temp + rename 是原子操作,加上写队列防并发,够用。
MCP 请求时实时创建 Server 实例 --- 不是启动时建一个长驻的 MCP Server,而是每次请求 createMcpServer(currentResume)。这样保证读到的永远是最新数据,编辑器保存后 MCP 立刻能看到变化。
Zod schema 校验 --- 读写数据前都做验证。前端编辑器理论上也会校验,但后端不信任前端输入是基本素养。
stdio 模式 --- 除了 HTTP 还支持 start:stdio,可以直接在 Claude Desktop 里配置,本地开发不用起服务器。
部署
bash
# Docker 一键部署
cp config.example.json config.json # 设置 authCode
docker compose up -d
或者 Claude Desktop 直连:
json
{
"mcpServers": {
"resume": {
"command": "npx",
"args": ["tsx", "server/stdio.ts"],
"cwd": "/path/to/resume-maker"
}
}
}
说点真话
这个项目的搜索和匹配算法确实一般。TF 评分就是关键词频率统计,技能标准化就是个查表映射,evaluate_fit 的匹配逻辑本质上还是字符串包含检测。这些离"精准理解个人数据"差得远。
但这个项目真正有趣的地方不在这里。
有趣的是 "简历 + MCP" 这个组合产生的新可能性:
- 信息获取方式变了 --- 从"读一份固定文档"变成"AI 按需查询结构化数据"
- 筛选逻辑变了 --- 邀请码机制反向筛选了招聘方的 AI 素养
- 数据所有权变了 --- 数据在你自己的服务器上,你控制谁能看什么
这三个变化跟技术实现复杂度无关,是 产品形态 层面的创新。
MCP 现在还早期,真正会用 AI Agent 去连 MCP 的招聘方几乎没有。但方向是对的 ------ 当 AI 越来越多地介入招聘流程,简历就应该从"给人看的文档"进化成"给 AI 查的数据源"。
如果你也在玩 MCP,或者对"AI 原生的个人信息展示"有兴趣,欢迎来交流。
在线体验 :http://47.97.101.194:965 (邀请码:qm8vvf,可连接 MCP 端点实际体验所有工具)
项目地址 :github.com/Leeson-Wong...
觉得有意思的话,给个 Star。
另一个项目:搬砖生存指南(BrickLife)
顺便推一下我做的另一个东西 ------ 模拟经营类小游戏《搬砖生存指南》
试玩:http://47.97.101.194 (手机打开体验最佳)
本文由 Claude Code + GLM-5.1 协作撰写。