MCP 协议火了之后,各种 MCP Server 层出不穷,但大多数是通用工具(文件系统、数据库、浏览器)。真正有价值的是领域专属的 MCP Skills——把你所在行业的专业知识和业务能力封装成 MCP 服务,让大模型能像领域专家一样工作。2025年我们基于 FastMCP 构建了招聘领域的 MCP Skills 服务,今天把完整开发过程分享出来。
一、什么是 MCP Skills
先明确概念:
- MCP Server:实现了 MCP 协议的服务端,提供 Tools/Resources/Prompts
- Skills:MCP Server 里的具体能力集合,通常围绕一个领域或场景
- FastMCP:Python 的 MCP 开发框架,类似 FastAPI,用装饰器快速定义工具
一个 MCP Server 可以包含多个 Skills,比如我们的招聘 MCP Server 包含:简历搜索 Skill、职位管理 Skill、人才匹配 Skill、面试评估 Skill。
二、技术选型
| 维度 | 选择 | 原因 |
|---|---|---|
| 语言 | Python 3.11 | FastMCP 是 Python 框架,AI 生态好 |
| 框架 | FastMCP | 类似 FastAPI,开发效率高,社区活跃 |
| 部署 | Docker + K8s | HTTP/SSE 模式,弹性扩缩容 |
| 鉴权 | API Key + JWT | 企业级服务,多租户隔离 |
| 缓存 | Redis | 工具结果缓存,减少重复计算 |
| 监控 | Prometheus + Grafana | 调用量、延迟、错误率监控 |
三、项目结构
四、核心开发
4.1 MCP Server 初始化
| |
4.2 简历搜索 Skill
这是最核心的 Skill,让大模型能搜索招聘平台的简历库。
| |
关键点:
- description 要详细:工具描述、参数描述、使用场景、示例都要写清楚,模型靠这个理解什么时候用、怎么用
- Pydantic 模型:用 Pydantic 定义返回数据结构,类型安全,模型能理解返回字段含义
- 敏感信息脱敏:手机号、邮箱等敏感信息必须脱敏,不能直接返回给模型
- 参数约束:用 Field 的 ge/le 限制参数范围,防止模型传入不合理的值
- 分页限制:page_size 最大 50,防止模型一次请求太多数据
4.3 人才匹配 Skill
| |
4.4 Resources:职位 JD 资源
除了 Tools,还可以定义 Resources,让模型能读取职位 JD 作为上下文。
| |
4.5 Prompts:面试评估提示词模板
| |
五、中间件
鉴权中间件
| |
限流中间件
| |
六、部署
Dockerfile
| |
K8s 部署
| |
七、在 Claude/Cursor 中使用
Claude Desktop 配置
在 Claude Desktop 的配置文件 ~/.claude.json 里添加:
| |
重启 Claude Desktop,就能在对话里使用招聘 Skills 了。
Cursor 配置
Cursor Settings → MCP → Add new MCP server:
| |
使用示例
在 Claude 里输入:“帮我搜索杭州的 Go 开发工程师,5年以上经验,然后分析前3个候选人的匹配度”
Claude 会自动:
- 调用
search_resumes(keyword="Go开发", city="杭州", experience_min=5) - 拿到结果后,对前3个简历调用
get_resume_detail(resume_id=...) - 调用
analyze_match(resume_id=..., job_id=...)分析匹配度 - 生成综合分析报告
整个过程不需要用户手动调用工具,Claude 自主规划和执行。
八、踩坑经验
- Tool description 决定一切:初期 description 写得简单,模型不知道什么时候用这个工具。后来加了使用场景、示例、注意事项,模型调用准确率从 60% 提升到 95%
- 返回结果要精简:初期返回完整简历(几千字),模型上下文很快就满了。改成返回摘要 + 详情按需获取,上下文占用减少 80%
- 参数默认值很重要:没有默认值的参数,模型每次都要"猜",容易传错。常用参数(page、page_size、city)都给默认值
- 错误信息要友好:工具执行失败时,返回"搜索失败"模型不知道怎么处理。改成"搜索失败:城市’杭州’不存在,请检查城市名称",模型会自动修正参数重试
- 敏感信息必须脱敏:初期返回了真实手机号,有数据泄露风险。加了统一脱敏中间件,所有返回结果自动脱敏
- 限流不能少:模型有时会循环调用工具(比如分页搜索时陷入死循环),加了每分钟100次的限流,防止滥用
- 日志要完整:MCP 调用是黑盒,出问题不知道模型调了什么、传了什么参数。加了完整的调用日志(工具名、参数、结果、耗时),方便排查
- 版本管理:工具接口变更会影响所有使用者,不能随便改。加了版本号(v1/search_resumes),新版本不兼容时保留旧版本一段时间
九、总结
MCP Skills 开发核心:
- 领域知识是核心价值:通用工具谁都能做,领域专属的 Skills 才是护城河。把招聘领域的专业知识(简历搜索、人才匹配、面试评估)封装成 MCP,让大模型成为招聘专家
- FastMCP 开发效率高:类似 FastAPI 的装饰器模式,定义工具、资源、提示词都很简单,专注业务逻辑
- Tool description 要写好:这是 MCP 开发最重要的事,description 决定模型会不会用、用得对不对
- 返回结果要精简:大模型上下文有限,返回摘要 + 详情按需获取,不要一次返回全部
- 安全不能忽视:鉴权、限流、脱敏、审计,企业级 MCP 服务这些都是必须的
- 部署 HTTP/SSE 模式:适合远程部署、多用户共享,比 stdio 模式更适合企业级服务
- 日志和监控:MCP 调用是黑盒,完整的日志和监控是排查问题的基础
- 版本管理:接口变更要兼容,不能随便改,用版本号管理
MCP 的价值在于"把专业能力标准化、可复用"。以前你要为每个 AI 应用单独对接业务系统,现在封装成 MCP Skills,任何支持 MCP 的 AI 工具(Claude、Cursor、ChatGPT、自研 Agent)都能直接用,一次开发处处使用。对于企业来说,把内部业务能力封装成 MCP Skills,是让 AI 真正落地业务的关键一步。