Skip to main content
Glama

resume-mcp

把「AI 简历生成 / 优化」做成一个独立的 MCP(Model Context Protocol)Server, 让 Claude CodeOpenHandsClaude Desktop 等任意 MCP 客户端直接调用。

Python License

是什么

一个纯 stdio 的 MCP 工具服务,核心链路:

上传简历 / 粘贴背景  →  提取文本  →  LLM 优化或生成  →  渲染 .docx + .pdf
  • 从现有简历文件(PDF / Word)出发优化,或从零散背景信息从零生成

  • 内置中文简历 prompt(STAR 法则 + 量化数据 + ATS 关键词)

  • 产出排版好的 .docx(微软雅黑)和 .pdf(内置中文字体),并把文件绝对路径回传给调用方

  • 无鉴权、无数据库、无历史记录 —— 一个「即插即用」的独立工具

Related MCP server: resume-mcp

提供的工具

optimize_resume — 优化已有简历

参数

必填

说明

resume_file_path

本地简历文件绝对路径(.pdf / .docx / .doc

job_position

目标岗位,如「高级前端工程师」

requirements

额外要求,如「突出项目管理经验」

output_dir

输出目录,默认写到输入文件所在目录

generate_resume — 从背景信息生成简历

参数

必填

说明

background

背景信息(教育 / 工作 / 项目 / 技能等自由文本)

job_position

目标岗位

requirements

额外要求

output_dir

输出目录,默认写到当前工作目录

两者都返回:优化/生成说明、结构化 JSON,以及 .docx / .pdf 的绝对路径。

快速开始

1. 安装

需要 Python 3.10+。任选其一:

# 方式 A:uv(推荐)
uv tool install git+https://github.com/xiangwang331-boop/resume-mcp.git

# 方式 B:pipx
pipx install git+https://github.com/xiangwang331-boop/resume-mcp.git

# 方式 C:本地源码 + venv
git clone https://github.com/xiangwang331-boop/resume-mcp.git
cd resume-mcp
python -m venv .venv
.venv/Scripts/python -m pip install -e .      # Windows
# .venv/bin/python -m pip install -e .         # macOS / Linux

安装后会得到一个 resume-mcp 命令行入口。

2. 配置 LLM

简历的实际优化/生成由一个 LLM 完成(默认 DeepSeek,兼容任意 OpenAI 风格端点)。 按优先级读取以下来源:

  1. 进程环境变量 LLM_MODEL / LLM_API_KEY / LLM_BASE_URL

  2. RESUME_ENV_FILE 指定的 .env 文件

  3. 当前目录下的 .env

  4. 源码根目录下的 .env(本地开发用)

未配置 LLM_API_KEY 时,工具会返回明确的报错提示。

3. 接入客户端

Claude Code

# 用 -e 把 LLM 配置传给 server(推荐,无需落盘 .env)
claude mcp add resume -- resume-mcp \
  -e LLM_MODEL=deepseek/deepseek-v4-pro \
  -e LLM_API_KEY=sk-xxxx \
  -e LLM_BASE_URL=https://api.deepseek.com

重启后 /mcp 应能看到 resume 及其两个工具,然后直接说:

用 generate_resume 根据这份背景生成一份「后端开发工程师」简历:……

OpenHands

设置 → MCP servers → 添加自定义 server → 类型选 stdio

  • Commandresume-mcp(或该命令的绝对路径)

  • envLLM_MODELLLM_API_KEYLLM_BASE_URL

点「Test connection」应列出 optimize_resumegenerate_resume 两个工具。

Claude Desktop / 其它 MCP 客户端

claude_desktop_config.json(或对应客户端的 mcpServers)里加:

{
  "mcpServers": {
    "resume": {
      "command": "resume-mcp",
      "env": {
        "LLM_MODEL": "deepseek/deepseek-v4-pro",
        "LLM_API_KEY": "sk-xxxx",
        "LLM_BASE_URL": "https://api.deepseek.com"
      }
    }
  }
}

项目结构

resume-mcp/
├── pyproject.toml        # 依赖 + resume-mcp 命令行入口
├── resume_mcp/
│   ├── config.py         # LLM 配置加载
│   ├── engine.py         # 核心:提取文本 / LLM 调用 / 渲染 docx+pdf
│   └── server.py         # FastMCP server + 两个工具
├── .env.example
└── LICENSE

常见问题

'Server' object has no attribute 'list_tools'

MCP Python SDK 2.0.0 移除了 FastMCP / list_tools。本项目已固定 mcp>=1.2,<2.0, 如你在自己的环境里遇到此问题,把 mcp 降到 <2 即可。

生成的简历文件在哪里?

MCP 工具运行在客户端进程所在的那台机器(不在沙箱 / 容器里)。文件写到 output_dir 指定目录(或默认目录),工具返回值里会带上绝对路径。

终端里中文显示乱码,但文件正常?

Windows 控制台默认 GBK 编码,print 输出会乱码;这不影响 .docx / .pdf 的实际内容(内置微软雅黑 / STSong-Light 中文字体)。

与 resume-generator 的关系

核心逻辑抽取自 resume-generator 后端 backend/app/routers/resume.py (去掉了 FastAPI / JWT / 数据库)。resume_mcp/engine.py 是纯逻辑副本, 二者可能漂移;如需长期共用,可把 engine 提成独立包。

License

MIT

Available Tools

2 tools
generate_resumeA

根据零散背景信息,从零生成一份针对目标岗位的简历。

参数: background: 用户背景信息(教育、工作/实习、项目、技能等自由文本)。 job_position: 目标岗位,例如「后端开发工程师」。 requirements: 可选的额外要求。 output_dir: 输出目录;留空则写到当前工作目录。

返回:生成说明、结构化 JSON,以及生成的 .docx / .pdf 绝对路径。

ParametersJSON Schema
NameRequiredDescriptionDefault
backgroundYes
output_dirNo
job_positionYes
requirementsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the return format (generation explanation, structured JSON, absolute paths) and the default behavior of output_dir, but it does not mention whether files are overwritten, if directories are created, or any required permissions. There is room for more transparency, but the core behavior is reasonably clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a lead sentence stating the purpose, a bulleted list of parameters with clear semantics, and a final line describing the return values. It is front-loaded with the purpose, and every sentence contributes meaningful information without unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, but the description still provides adequate context about the generation process and return values. It covers the two required parameters and their defaults, and explains the output_dir behavior. Minor gaps exist (e.g., file overwriting behavior), but for a resume-generation tool, the description is sufficiently complete for an agent to understand the expected flow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since schema description coverage is 0%, the description fully compensates by explaining each parameter's meaning, including the type of content expected for background, the purpose of job_position, and the optional nature of requirements and output_dir with its default behavior. This adds significant value beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to generate a resume from scratch (从零生成) targeting a specific job position, based on scattered background info. This verb+resource+scope phrasing distinguishes it from the sibling tool optimize_resume, which presumably enhances an existing resume.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when you have scattered background info and need a new resume for a target position. It does not explicitly name optimize_resume as an alternative for existing resumes, so the differentiation is slightly implicit, but the context is clear enough for an AI agent to infer the appropriate use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

optimize_resumeA

根据目标岗位优化一份已有简历(PDF / .docx / .doc)。

参数: resume_file_path: 简历文件的本地绝对路径(PDF、.docx 或 .doc)。 job_position: 目标岗位,例如「高级前端工程师」。 requirements: 可选的额外要求(如「突出项目管理经验」)。 output_dir: 输出目录;留空则写到输入文件所在目录。

返回:优化说明、结构化 JSON,以及生成的 .docx / .pdf 绝对路径。

ParametersJSON Schema
NameRequiredDescriptionDefault
output_dirNo
job_positionYes
requirementsNo
resume_file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It discloses the input (resume file path), processing (optimization for job position), and outputs (optimization description, structured JSON, generated .docx/.pdf paths). It does not explicitly state whether the original file is modified, but the mention of 'generated' files suggests non-destructive behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured: a one-sentence purpose, a bulleted parameter list, and a one-sentence return summary. Every line adds value, and the structure makes it easy to scan. No redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a tool with 4 parameters and an output schema: it covers purpose, all parameters, and return values. It could add explicit notes about side-effects (e.g., whether the input file is overwritten) or error conditions, but these are likely covered by the output schema and the tool's non-destructive design.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameter descriptions (0% coverage), so the description must compensate. It does so comprehensively: each of the 4 parameters is explained with types, defaults, and an example for job_position. This fully covers the semantic meaning beyond the schema's bare titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Optimize an existing resume based on target job position' (translated). The verb 'optimize' with the resource 'resume' is specific, and it distinguishes itself from the sibling tool 'generate_resume' by explicitly targeting existing resumes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by noting the tool works on an existing resume (PDF/.docx/.doc) and includes parameter details for target position and optional requirements. However, it does not explicitly mention when not to use it or name the sibling tool 'generate_resume' as the alternative for creating new resumes, though this is strongly implied by the wording.

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. Dates show when Glama detected each change.

  1. 2 tool updatesv0.1.0
    • First observedgenerate_resume
    • First observedoptimize_resume

TDQS

A4.5/5.0
Disambiguation5/5

The two tools have clearly distinct purposes: one optimizes an existing resume, the other generates a new one from scratch. There is no overlap or ambiguity in their scopes.

Naming Consistency5/5

Both tool names follow the same verb_noun pattern (optimize_resume, generate_resume), making them predictable and consistent.

Tool Count4/5

With only two tools, the server is on the low end of the typical range, but the tools cover the two primary resume workflows (create and optimize). The count is slightly under but reasonable for the focused purpose.

Completeness5/5

The tool set covers the full lifecycle from generating a resume from raw background to optimizing an existing one. There are no obvious missing operations for the stated domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/xiangwang331-boop/resume-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server