Resume Optimizer
The repository is cloned using git.
The server source is hosted on GitHub and cloned from there for installation.
Imports and exports resumes in Markdown, using Markdown as the unified intermediate format.
Dependencies are installed via npm.
Optionally uses an OpenAI-compatible API (via OPENAI_API_KEY) to let the Agent perform resume polishing independently without relying on the host model.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Resume OptimizerOptimize my resume /Users/me/resume.docx for this job description: backend engineer, Python, AWS"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Resume Optimizer Agent · 程序员简历优化 Agent
一个跨应用的简历优化 Agent: 以 MCP Server 为核心, 兼容 ZCode / Cursor / Claude Desktop 等所有支持 MCP 的应用, 同时以 DeepSeek / OpenAI 兼容 API 独立运行; 附带 ZCode 插件打包。
诚实声明(重要): 本 Agent 帮你把真实经历表达得最好(STAR 法则、量化成果、JD 关键词对齐、专业措辞), 但不虚构公司、职位、时间、学历或数据。伪造经历会在入职背调(前雇主核实、社保记录比对)中暴露, 导致 offer 作废甚至行业拉黑——这条路我们不帮用户走。
功能
功能 | 说明 |
多格式导入 |
|
完整度分析 | 分区识别(中英双语)、0-100 评分、缺失/偏弱项、真实信息补充问题清单 |
JD 关键词匹配 | 提取 JD 关键词(含中文), 报告简历中缺失的关键词 |
AI 润色 | 不编造事实的前提下: 强动词、STAR、量化表达、技能分层、关键词对齐 |
多格式导出 | Markdown / PDF(自动探测系统中文字体) / Word(.docx) |
Related MCP server: resume-processor-mcp
四个 MCP 工具
工具 | 作用 |
| 导入简历文件 → Markdown |
| 结构/完整度分析 + 补充信息问题清单 + JD 关键词匹配 |
| 润色简历(有 API Key 时直接调用 LLM; 否则返回指令由宿主模型执行) |
| 导出 md / pdf / docx |
快速开始
1. 获取并安装依赖
git clone https://github.com/zhoubiao188/resume-optimizer-agent.git
cd resume-optimizer-agent
npm install --omit=dev2. 接入你的应用
ZCode(MCP 配置或插件方式, 见下) / Cursor ~/.cursor/mcp.json:
{
"mcpServers": {
"resume-optimizer": {
"command": "node",
"args": ["/绝对路径/resume-optimizer-agent/src/server.mjs"]
}
}
}Claude Desktop (claude_desktop_config.json)、WorkBuddy 等其他支持 MCP 的应用同理: command: node, args: [src/server.mjs 的绝对路径]。
3. (可选) 让 Agent 自带大脑
不配置时, 润色由宿主应用中的模型完成(工具会返回完整润色指令)。配置任一 API Key 后, Agent 独立完成润色:
export DEEPSEEK_API_KEY=sk-xxx # 或
export OPENAI_API_KEY=sk-xxx # 兼容任何 OpenAI 协议端点
export OPENAI_BASE_URL=https://xxx/v1 # 可选4. 作为 ZCode 插件安装
本仓库同时是一个标准 ZCode 插件(skill + MCP server 双组件):
# 克隆后在 ZCode 中: 插件市场 → 添加 → 添加插件市场 → 选择本仓库克隆目录
# 然后在市场中安装 "程序员简历优化 Agent"使用示例(在支持 MCP 的对话应用中)
帮我优化这份简历 /Users/me/resume.docx, 目标岗位 JD 如下: ……
Agent 会: 导入 → 分析(告知缺失项) → 向你提问补充真实信息 → 润色 → 按需导出 pdf/docx。
开发
npm install
npm test # 端到端: 导入→分析→导出(md/pdf/docx)→回读验证 + MCP 协议握手/工具调用目录结构
src/server.mjs MCP Server 入口(4 个工具)
src/importer.mjs md/txt/docx/pdf 导入
src/exporter.mjs md/pdf/docx 导出(PDF 内置中文字体探测)
src/analyzer.mjs 结构分析/评分/问题清单/JD 关键词
src/optimizer.mjs LLM 润色(DeepSeek/OpenAI 兼容) + 宿主指令生成
skills/ ZCode 插件技能定义(工作流程 + 诚信约束)
.zcode-plugin/ ZCode 插件清单
docs/publish-guide.md 各应用市场接入状态与步骤License
MIT
Available Tools
4 toolsanalyze_resume分析简历A
分析简历结构与完整度: 分区识别、完整度评分(0-100)、缺失/偏弱项、需要用户补充真实信息的问题清单、占位符检测; 可选传入目标岗位 JD 做关键词匹配。Analyze resume completeness and JD keyword match.
| Name | Required | Description | Default |
|---|---|---|---|
| jd | No | 目标岗位 JD 全文(可选), 用于关键词匹配 | |
| path | No | 简历文件路径; 与 content 二选一 | |
| content | No | 简历 Markdown 全文; 与 path 二选一 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the shape of the result (a completeness score, a list of missing/weak items, follow-up questions, placeholder detection), which implies a non-mutating read. However, it never states that the resume is left unmodified or how it behaves on unreadable/missing files, which matters because optimize_resume is a sibling that does mutate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded and dense, with the core purpose first and the optional JD behavior last. The trailing English sentence partially restates the Chinese clause, which is mild redundancy rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description compensates by enumerating the report contents an agent should expect. Combined with the schema's mutual-exclusion note for path/content, an agent has enough to invoke it correctly; only edge-case behavior (file not found, non-resume input) is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: jd, path and content are each documented, including the 与 content 二选一 / 与 path 二选一 constraint. The description restates only the optional JD keyword-matching role and adds no format or resolution detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource (分析简历结构与完整度) and enumerates concrete outputs: 分区识别, 完整度评分 0-100, 缺失/偏弱项, 问题清单, 占位符检测, plus optional JD 关键词匹配. This makes it unmistakably an analysis (not a mutation) operation, distinguishable in kind from import_resume/optimize_resume/export_resume. It never names a sibling or states the boundary explicitly, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the tool is for assessing a resume, and the optional JD parameter is flagged as 可选 for keyword matching. There is no guidance on when to pick this over optimize_resume (e.g., analyze first, then optimize) or on preconditions such as the resume already being imported.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_resume导出简历B
把 Markdown 简历导出为 md / pdf / docx 文件。PDF 内置中文字体自动探测(PingFang/Noto/雅黑等)。Export markdown resume to md/pdf/docx file at out_path.
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | 导出格式 | |
| content | Yes | 简历 Markdown 全文 | |
| out_path | Yes | 输出文件路径(含扩展名) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that PDF export auto-detects Chinese fonts (PingFang/Noto/雅黑), but never states that it writes/overwrites a file on disk, whether parent directories are created, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded, with the core operation stated first. The English sentence largely re-states the Chinese one, which is mild redundancy but keeps the definition compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-required-param write tool with no annotations and no output schema, key facts are missing: overwrite behavior at out_path, directory creation, and what the call returns. The font-detection note is a nice touch but does not close those gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (format, content, out_path) are already documented in the schema. The description only restates out_path and the format list, adding no syntax, path, or constraint detail beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (导出/export) plus the resource (Markdown 简历) and enumerates the exact output formats (md/pdf/docx). That is naturally distinguishable from the siblings import_resume, analyze_resume, and optimize_resume without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to choose export over its siblings, nor any prerequisites or exclusions. Apart from the format options and the font note, the agent gets no routing guidance at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_resume导入简历A
导入简历文件并转为 Markdown。支持 .md/.markdown/.txt/.docx/.pdf。返回 {markdown, sourceFormat, warnings}。Import a resume file (markdown/PDF/Word) and convert it to markdown text.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | 简历文件的绝对路径或相对路径, 支持 .md/.markdown/.txt/.docx/.pdf |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the return shape {markdown, sourceFormat, warnings}, which hints at partial-failure handling, but says nothing about path resolution requirements, permission/auth needs, file size limits, or error behavior for unsupported or unreadable files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and formats, then the return shape. The English sentence largely duplicates the Chinese one and adds only 'PDF/Word' phrasing, which is minor redundancy rather than waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter import tool with no annotations and no output schema, the definition covers what it does, which formats it accepts, and what it returns. Remaining gaps are secondary details like error handling for unsupported or corrupted files.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'path' parameter is fully documented in the schema, including the supported extensions. The description merely restates the same format list, adding no new semantics such as whether relative paths resolve against a workspace root. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Import a resume file and convert it to markdown text') and enumerates supported formats, so the tool's job is unambiguous. It does not explicitly contrast itself with siblings analyze_resume/optimize_resume/export_resume, though the import/convert framing is distinctive enough to separate it from those.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the format list (.md/.markdown/.txt/.docx/.pdf) tells the agent which inputs qualify, and 'import' suggests this is the entry step before analyze/optimize. There is no explicit when-to-use, when-not-to-use, or named alternative among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimize_resume优化简历A
润色优化简历(不编造事实)。配置了 DEEPSEEK_API_KEY 或 OPENAI_API_KEY 时直接调用 LLM 返回润色结果; 否则返回 mode=host-llm 与完整润色指令, 由宿主应用中的模型按指令执行。Polish a resume honestly (STAR, quantification, JD alignment). Never fabricates employers or numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| jd | No | 目标岗位 JD(可选) | |
| content | Yes | 简历 Markdown 全文 | |
| extra_info | No | 用户补充的真实信息(可选), 输出会优先采用 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the credential-dependent branching, the mode=host-llm fallback payload, and the honesty constraint against fabricating employers or numbers. Missing details are minor (no note on output format length, cost, or latency of the LLM path).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and the honesty constraint are front-loaded, and the bilingual restatement is compact rather than padded. The Chinese and English halves overlap considerably, which is slight redundancy but not enough to hurt selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter, no-annotation, no-output-schema tool, the description covers what matters: what it does, how it behaves with and without API keys, and what comes back in each mode. An agent can call it correctly without further reading.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema documents all three parameters (jd, content, extra_info) in Chinese. The description only gestures at parameters indirectly via 'JD alignment' and the no-fabrication rule; it adds no syntax, format, or priority detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (polish/optimize a resume) and qualifies the scope with concrete techniques — STAR, quantification, JD alignment — plus the hard constraint 'never fabricates employers or numbers'. It does not explicitly name a sibling to contrast with (analyze_resume is the closest overlap), so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the two execution paths clearly: call the LLM directly when DEEPSEEK_API_KEY/OPENAI_API_KEY is configured, otherwise return mode=host-llm with instructions for the host model. That is useful environmental context, but there is no guidance on when to pick this tool over analyze_resume or import_resume, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v1.0.0- First observed
analyze_resume - First observed
export_resume - First observed
import_resume - First observed
optimize_resume
TDQS
Scored across 4 tools
Each tool maps to a distinct pipeline stage: import (convert to markdown), analyze (structure/completeness), optimize (polish), export (write file). There is no overlap in purpose and the input/output types are clearly separated, so an agent can select unambiguously.
All four tools follow a strict verb_noun pattern (import_resume, analyze_resume, optimize_resume, export_resume) with a single shared noun. The convention is perfectly predictable.
Four tools is a tight, well-scoped set that maps cleanly onto a linear resume workflow. It is slightly on the lean side, but every tool earns its place with no redundancy.
The surface covers the full import → analyze → optimize → export lifecycle with no dead ends, which is strong for the stated purpose. Minor gaps exist (e.g. no versioning/template management or re-import of an optimized doc), but these are peripheral to the core workflow.
Maintenance
Related MCP Connectors
Resume builder with native MCP — create and edit resumes from your AI assistant.
Tailor a CV to a job posting: score the match, propose a reviewable rewrite, export PDF or Word.
Build, version and render resumes as PDFs from Claude or any MCP client.
A job-search companion: tailor your CV to a role, score fit, fix ATS issues. Also via MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn intelligent, zero-cost MCP server that securely parses local resumes and compares them against live job postings for ATS scoring, skill gap analysis, and interview prep.MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for processing Markdown resumes into multiple formats (PDF, LinkedIn templates) with AI analysis and Claude integration.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server to score, tailor, and edit resumes on JuicedResume from any MCP client.24 npmMIT
- AlicenseNot gradedqualityBmaintenanceMCP server that evaluates, compares, aligns, generates, and validates resume materials against specific job postings, including ATS parseability checks, match scoring, and gap analysis.Apache 2.0