从 PDF 到 MCP:让 AI Agent 按需查询你的简历

从 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" 这个组合产生的新可能性:

  1. 信息获取方式变了 --- 从"读一份固定文档"变成"AI 按需查询结构化数据"
  2. 筛选逻辑变了 --- 邀请码机制反向筛选了招聘方的 AI 素养
  3. 数据所有权变了 --- 数据在你自己的服务器上,你控制谁能看什么

这三个变化跟技术实现复杂度无关,是 产品形态 层面的创新。

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 协作撰写。

相关推荐
Raink老师1 小时前
【AI面试临阵磨枪-34】单 Agent 与多 Agent(Multi-Agent)架构区别、适用场景、挑战
人工智能·ai 面试
灵机一物1 小时前
灵机一物AI原生电商小程序、PC端(已上线)-【AI 技术周报】2026 年 4 月第 4 周|模型、算力、商业化、安全全景梳理
人工智能
redreamSo1 小时前
一个只有70行的文件,凭什么拿下GitHub 10万星?
人工智能·开源
互联网志1 小时前
政策赋能校产融合 推动高校科技成果落地生根
大数据·人工智能·物联网
qcx231 小时前
Warp源码深度解析(四):AI Agent原生集成——MCP协议、代码索引与Skills系统
人工智能·ai·agent·源码解析·wrap
Narrastory1 小时前
Note:强化学习(六)
人工智能·深度学习·强化学习
智枢圈1 小时前
Embedding 与向量数据库
人工智能
羑悻1 小时前
深入 LangChain 内存向量存储(Memory Vector Stores):架构解析与优化
人工智能
沫儿笙1 小时前
安川机器人焊接节气装置
人工智能·机器人