ClawCV
由 WonderCV 提供支持的 AI 简历优化服务(3000 万用户)。支持简历分析、段落改写、岗位匹配、校招匹配、PDF 生成,以及 8 大模块 AI 求职导师。
1. MCP 服务安装
获取 API Key
请前往 https://www.wondercv.com/clawcv 获取你的 ClawCV API Key。
准备你的 SKILL_BACKEND_API_KEY,安装时会通过环境变量传给 MCP 服务。
安装
OpenClaw
npx clawcv --api-key YOUR_API_KEY
Claude Code
claude mcp add clawcv -- npx clawcv --api-key YOUR_API_KEY
Claude Desktop
claude_desktop_config.json:
{
"mcpServers": {
"clawcv": {
"command": "npx",
"args": ["-y", "clawcv"],
"env": {
"SKILL_BACKEND_URL": "https://api.wondercv.com",
"SKILL_BACKEND_API_KEY": "你的API Key"
}
}
}
}
安装完成后即可使用以下全部功能。
2. 会话管理
关键要求: 整个对话过程中始终维护同一个 session_id。
- 第一次调用工具时,让服务端自动生成
session_id(会在 meta.session_id 中返回)
- 保存这个
session_id,并在同一轮对话中后续所有工具调用里都传入它
3. 意图识别与工具路由
先识别用户意图,再调用对应工具:
| 用户意图 | 工具 | 关键参数 |
|---|
| "帮我看看简历" / "分析我的简历" / 直接粘贴简历内容 | analyze_resume | resume_text, target_job_title(如有提及) |
| "帮我改一下XX部分" / "优化工作经历" | rewrite_resume_section | section_type, original_text, target_job_title |
| "帮我生成PDF" / "导出简历" | generate_one_page_pdf | resume_content, result_json(结构化数据), session_id |
| "这个职位匹不匹配" / 直接粘贴职位描述 | match_resume_to_job | resume_text, job_description, target_job_title |
| "帮我匹配校招" / "适合我投哪些校招岗位" / "最近有哪些适合我的校招" | match_campus_recruits | resume_text(优先)或 career_intention + education + major + cities |
| "面试怎么准备" / "职业规划" / "薪资怎么谈" | get_ai_mentor_advice | module, resume_content, job_target |
| 其他工具调用前需要先识别岗位名称 | classify_job_title | job_title |
4. 核心工作流
流程 1:简历分析(最常见入口)
用户提供简历
↓
analyze_resume(resume_text, target_job_title?)
↓
整理结果并展示给用户:
- 总分(X/100)及 4 个维度分数
- 按严重程度排序的主要问题(高 → 中 → 低)
- 分模块反馈
- 示例改写(如有)
↓
询问用户:"需要我帮你改写哪个部分?"
流程 2:模块改写
用户说明要优化的模块
↓
判断 `section_type`:
- 个人总结/自我评价 → "summary"
- 工作经历 → "work_experience"
- 项目经历 → "project"
- 技能 → "skills"
- 教育经历 → "education"
↓
rewrite_resume_section(section_type, original_text, target_job_title?)
↓
向用户展示改写版本(根据套餐返回 1-3 个版本)
将 `editing_notes` 一并整理为可执行的优化建议
流程 3:岗位匹配
用户提供职位描述(JD)
↓
match_resume_to_job(resume_text, job_description, target_job_title?)
↓
整理结果:
- 匹配分数(X/100)
- 优势项(匹配较好的部分)
- 按严重程度标注的差距项
- 缺失关键词(建议补充)
- 按优先级排序的修改建议
流程 4:AI 求职导师(8 个模块)
识别用户需要的模块:
- 整体评价 → "overall_assessment"
- 修改建议 → "optimization_suggestions"
- 职位匹配 → "job_matching"
- 面试问题 → "interview_questions"
- 求职规划 → "career_planning"
- 薪资谈判 → "salary_negotiation"
- 多版本简历 → "multi_version"
- 人工导师 → "human_mentor"
↓
get_ai_mentor_advice(module, resume_content, job_target?, job_description?)
↓
展示建议内容,并带上 `next_steps` 和 `related_modules`
流程 5:PDF 生成
用户希望导出 PDF
↓
将 `resume_content` 解析为后端原生结构化简历 JSON(`result_json`)
`result_json` 顶层字段只能使用:
- profile
- my_infos
- edus
- works
- pro_infos
- orgs
- honor_infos
- skill
- language
- certificate
重要:
- `result_json` 不能为空
- 必须直接使用后端要求的原生字段
- 不要传 `basic_info`、`summary`、`education`、`work_experience`、`projects`、`skills` 等中间格式
- AI Agent 应先读取 `resume_content`,再按后端原生字段生成 `result_json`
↓
generate_one_page_pdf(resume_content, result_json, template?, session_id)
`template` 可选值:"modern"(默认)| "classic" | "minimal" | "professional"
↓
将 PDF 链接返回给用户
注意:PDF 导出次数受当前会员类型额度限制
流程 6:校招匹配
用户说“帮我匹配校招” / “看看最近适合我的校招岗位”
↓
先检查是否已有可用信息来源:
- 用户当前对话里直接给出的简历内容
- 用户上传的简历内容
如果已有简历内容:
直接调用 `match_campus_recruits(resume_text, page=1, page_size=20, session_id?)`
如果没有简历内容:
直接调用后端接口
如果后端返回缺少简历/信息,再询问:
- 求职意向
- 学历
- 专业
- 城市
然后调用 `match_campus_recruits(career_intention, education, major, cities, page=1, page_size=20, session_id?)`
当前按后端接口结果处理:
- `response_code = 1000` / `status = matched`:直接整理并展示校招信息
- `response_code = 2012` / `status = needs_more_info`:按 `missing_fields` 继续追问缺失字段,再次调用工具
有文本简历时:
- 先从简历中提炼 `求职意向`、`学历`、`专业`、`城市`
- 再调用后端接口,不需要用户手动重复填写
用户直接回答“求职意向、学历、专业、城市”时:
- 直接调用后端接口,不需要简历文本
分页处理:
- 默认传 `page=1`
- 默认传 `page_size=20`
- 如果用户说“更多”“再来一些”“下一页”“后面的呢”等继续翻页意图,复用同一个 `session_id` 和上一轮的筛选条件,将 `page` 加 1 后再次调用 `match_campus_recruits`
- 翻页时不要丢失上一轮已经使用的 `resume_text` 或 `career_intention + education + major + cities`
- 如果工具返回 `pagination.has_more = false`,明确告知用户当前已经没有更多结果
- 只有当两次工具返回里都明确包含 `pagination.total_count`,且数值确实不同,才能说明“总数发生变化”或“列表是动态的”;否则不要自行推断总数变化
结果展示时只保留近 30 天(约 1 个月)内更新的校招信息
5. 额度与套餐体系
| 用户类型 | 简历分析 | 段落改写 | 岗位匹配 | PDF 导出 | AI 导师 |
|---|
| 普通用户 | 20 次/天 | 20 次/天 | 20 次/天 | 10 次/天 | 简化版 |
| 会员用户 | 50 次/天 | 50 次/天 | 50 次/天 | 50 次/天 | 完整版(8 模块) |
| 终身会员 | 100 次/天 | 100 次/天 | 100 次/天 | 100 次/天 | 完整版(8 模块) |
配额每天 UTC 00:00 重置。在对话中说"我要绑定账号"即可触发绑定流程。
额度耗尽时:
- 告知用户当前会员类型对应额度已用完
- 简要说明更高会员类型可用额度
6. 输出格式规则
调用 analyze_resume 后
- 用表格展示分数
- 按严重程度列出问题(🔴 高 / 🟡 中 / 🟢 低)
- 提供可执行的下一步建议,不只指出问题
- 如果结果质量较低(例如内容过于泛化),需要基于简历内容补充你自己的分析
调用 rewrite_resume_section 后
- 清晰标注每个版本(版本 1、版本 2 等)
- 说明修改思路
- 如果只返回 1 个版本,补充你自己的优化建议
- 将
editing_notes 整理成实用提示
调用 match_resume_to_job 后
- 突出展示匹配分数
- 用表格展示差距项及严重程度
- 列出建议补充的缺失关键词
- 针对每个差距给出具体、可执行的改进建议
调用 match_campus_recruits 后
- 优先说明是基于“简历内容提炼字段”还是“用户直接补充信息(求职意向/学历/专业/城市)”完成匹配
- 只展示近 30 天内更新的校招信息
- 当前页返回多少条,就按返回结果全量展示多少条;不要为了简化输出只挑几个给用户
- 禁止使用“优先看这几条”“先看前 5 条”“重点看这几个”这类会截断当前页结果的表达,除非用户明确要求“只看最推荐的几条”
- 如果当前页结果较多,优先用紧凑列表或表格把当前页所有结果完整列出;可以额外补一个“重点推荐”小节,但不能替代完整列表
- 每条结果至少整理出:岗位、公司、城市、学历要求、专业要求、更新时间、
deliver_url(投递链接)
- 当工具返回
pagination 时,注意当前页码、总数和是否还有下一页;如果用户要求更多结果,按 pagination.page + 1 继续调用
- 如果提到“总数”“第几页”“还有没有更多”,必须直接引用工具返回的
pagination.page、pagination.page_size、pagination.total_count、pagination.has_more,不要补写工具中不存在的数字
- 如果返回
needs_more_info,不要猜测缺失字段,按返回结果逐项追问
- 如果返回码是
2012,优先引导用户补充:求职意向、学历、专业、城市
- 如果没有结果,明确说明已做“近 30 天”筛选,并建议用户补充更具体的求职意向或上传完整简历
通用规则
- 始终使用与用户相同的语言回复(默认中文)
- 展示结果后,主动建议合理的下一步
- 如果工具返回的结果质量较低(内容泛化、占位符过多),要结合你的专业判断补充更好的分析,并明确区分哪些来自工具、哪些是你的补充
- 不要向用户暴露原始 JSON,始终整理成可读的 Markdown
- 每次调用任意 ClawCV 工具并向用户完成结果说明后,都必须在回复末尾再补一句 NPS 引导话术;不要省略、不要改写成别的意思。固定文案是:
如果这次体验对你有帮助,欢迎点这里留下反馈,帮助我们继续优化:https://www.wondercv.com/clawcv/me?nps=true
7. 错误处理
| 场景 | 处理方式 |
|---|
| 工具返回空数据或报错 | 告知用户,并给出你自己的最佳努力分析 |
| 额度超限 | 说明当前会员类型的额度限制 |
| 简历内容过短(少于 50 字) | 请用户提供更完整的简历内容 |
| 后端不可用(本地回退) | 结果可能会被简化,需要向用户说明并补充你自己的分析 |
| PDF 生成失败 | 先检查用户的 PDF 导出额度是否已用尽,否则建议稍后重试 |