🚀 CV Forge
CV Forge 是一款强大的工具,它能根据任何职位要求量身打造出符合 ATS(申请人跟踪系统)的简历。它是一个智能的 MCP(模型上下文协议)服务器,能够分析招聘信息,并生成与之完美匹配的简历。
✨ 主要特性
- 解析职位要求:从招聘信息中提取关键技能、任职资格、电子邮件地址和招聘经理姓名。
- 生成定制简历:根据用户资料和职位要求创建定制的简历内容。
- 生成求职信:为特定的职位申请生成个性化的求职信。
- 创建电子邮件模板:创建专业的电子邮件模板,并自动检测电子邮件地址。
- 生成完整申请包:通过一个命令生成简历、求职信和电子邮件模板。
- 默认生成 PDF:在未指定格式时,自动生成专业的 PDF 文档。
- 支持多种输出格式:可生成 PDF(默认)、HTML、Markdown 和纯文本格式的文档。
- 生成专业 PDF:创建具有专业样式、可用于发布的 PDF 文档。
- 适配 ATS:通过合理放置关键词,优化简历以适应申请人跟踪系统。
- 智能提取联系人信息:自动从职位描述中提取电子邮件地址和招聘经理姓名。
📦 安装指南
通过 npm(推荐)
全局安装:
npm install -g cv-forge
或者在项目中本地安装:
npm install cv-forge
从源代码安装
- 克隆此仓库。
- 安装依赖项:
npm install
- 构建项目:
npm run build
💻 使用示例
连接到 Claude Desktop
要将此 MCP 服务器与 Claude Desktop 一起使用,您需要将其添加到 Claude 配置文件中。
步骤 1:安装 cv-forge
npm install -g cv-forge
步骤 2:找到您的 Claude Desktop 配置文件
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Linux:
~/.config/Claude/claude_desktop_config.json
步骤 3:将 MCP 服务器添加到您的配置中
对于全局安装,将以下内容添加到您的 claude_desktop_config.json 文件中:
{
"mcpServers": {
"cv-forge": {
"command": "cv-forge"
}
}
}
如果是本地安装,请指定完整路径:
{
"mcpServers": {
"cv-forge": {
"command": "node",
"args": ["d:/TopSecret/cv-forge/build/index.js"],
"cwd": "d:/TopSecret/cv-forge"
}
}
}
步骤 4:(可选)添加环境配置
您可以使用环境变量自定义服务器:
{
"mcpServers": {
"cv-forge": {
"command": "cv-forge",
"env": {
"DEFAULT_OUTPUT_PATH": "D:/CV",
"PDF_BASE_FONT_SIZE": "12px",
"PDF_LINE_HEIGHT": "1.4"
}
}
}
}
步骤 5:重启 Claude Desktop
添加配置后,重启 Claude Desktop 应用程序。
步骤 6:验证连接
在 Claude Desktop 中,您应该可以看到 CV Forge 工具。您可以要求 Claude 使用以下工具:
- “帮我解析这份招聘信息”
- “根据我的资料和这份职位生成一份定制简历”
- “将我的简历保存为 PDF 文件”
独立运行 MCP 服务器(用于测试)
您也可以直接运行服务器进行测试:
npm start
服务器通过标准输入输出运行,并通过模型上下文协议进行通信。
可用工具
1. parse_job_requirements
解析职位要求并提取用于定制简历的关键信息。
参数:
jobTitle(字符串,必填):职位名称。
company(字符串,必填):公司名称。
jobDescription(字符串,必填):完整的职位描述文本。
requirements(数组,可选):如果有单独列出的特定要求。
preferredSkills(数组,可选):如果有单独列出的首选技能。
location(字符串,可选):工作地点。
salaryRange(字符串,可选):如果提供了薪资范围。
2. generate_cv_data
根据用户资料和职位要求生成定制的简历内容。
参数:
userProfile(对象,必填):完整的用户资料信息。
jobRequirements(对象,必填):职位要求对象。
用户资料结构:
{
"personalInfo": {
"fullName": "John Doe",
"email": "john@example.com",
"phone": "+1-555-0123",
"location": "City, State",
"linkedIn": "linkedin.com/in/johndoe",
"github": "github.com/johndoe",
"website": "johndoe.com"
},
"summary": "Professional summary text...",
"experience": [
{
"jobTitle": "Software Engineer",
"company": "Tech Corp",
"location": "City, State",
"startDate": "2020-01",
"endDate": "2023-12",
"description": "Job description...",
"achievements": [
"Achievement 1",
"Achievement 2"
]
}
],
"education": [
{
"degree": "Bachelor of Science in Computer Science",
"institution": "University Name",
"location": "City, State",
"graduationYear": "2020",
"gpa": "3.8",
"honors": ["Magna Cum Laude"]
}
],
"skills": {
"technical": ["JavaScript", "Python", "React"],
"soft": ["Leadership", "Communication"],
"languages": ["English", "Spanish"],
"certifications": ["AWS Certified"]
},
"projects": [
{
"name": "Project Name",
"description": "Project description...",
"technologies": ["React", "Node.js"],
"url": "github.com/johndoe/project"
}
]
}
3. save_cv_text
将简历内容保存为格式化的文本文件。
参数:
cvData(对象,必填):定制的简历数据对象(来自 generate_cv_data)。
outputPath(字符串,必填):简历应保存的目录路径。
fileName(字符串,可选):自定义文件名(不带扩展名),默认为 "generated_cv"。
4. generate_cv(推荐 - 主要简历生成工具)
生成定制简历并保存到指定位置或默认文件夹。如果未指定格式,默认使用 PDF 格式。
参数:
userProfile(对象,必填):完整的用户资料信息。
jobRequirements(对象,必填):职位要求对象。
outputPath(字符串,可选):简历应保存的目录路径(如果未提供,则使用 DEFAULT_OUTPUT_PATH)。
fileName(字符串,可选):自定义文件名(不带扩展名),默认为 "professional_cv"。
format(字符串,可选):输出格式 - "pdf"(默认)、"html" 或 "markdown"。
pageSize(字符串,可选):PDF 页面大小(例如,'A4'、'Letter'、'Legal') - 如果未提供,则使用 PDF_PAGE_SIZE 环境变量。
margins(对象,可选):PDF 边距,包含 top、right、bottom、left 属性(例如,'10mm'、'0.8in') - 如果未提供,则使用 PDF_MARGIN_* 环境变量。
5. generate_and_save_cv_pdf(旧版 - 建议使用 generate_cv)
生成定制简历并直接保存为专业的 PDF(将简历生成和 PDF 创建合并为一步)。
参数:
userProfile(对象,必填):完整的用户资料信息。
jobRequirements(对象,必填):职位要求对象。
outputPath(字符串,可选):简历应保存的目录路径(如果未提供,则使用 DEFAULT_OUTPUT_PATH)。
fileName(字符串,可选):自定义文件名(不带扩展名),默认为 "professional_cv"。
6. generate_and_save_cv_markdown(推荐)
生成定制简历并直接保存为 Markdown(将简历生成和 Markdown 创建合并为一步)。
参数:
userProfile(对象,必填):完整的用户资料信息。
jobRequirements(对象,必填):职位要求对象。
outputPath(字符串,必填):简历应保存的目录路径。
fileName(字符串,可选):自定义文件名(不带扩展名),默认为 "cv_markdown"。
7. generate_and_save_cv_html(推荐)
生成定制简历并直接保存为 HTML(将简历生成和 HTML 创建合并为一步)。
参数:
userProfile(对象,必填):完整的用户资料信息。
jobRequirements(对象,必填):职位要求对象。
outputPath(字符串,必填):简历应保存的目录路径。
fileName(字符串,可选):自定义文件名(不带扩展名),默认为 "cv_html"。
8. generate_cv_pdf(高级)
根据预先生成的简历数据生成并保存简历为专业的 PDF 文档。
参数:
cvData(对象,必填):定制的简历数据对象(来自 generate_cv_data)。
outputPath(字符串,必填):简历应保存的目录路径。
fileName(字符串,可选):自定义文件名(不带扩展名),默认为 "professional_cv"。
9. generate_cv_markdown(高级)
根据预先生成的简历数据以 Markdown 格式生成简历。
参数:
cvData(对象,必填):定制的简历数据对象(来自 generate_cv_data)。
outputPath(字符串,必填):简历应保存的目录路径。
fileName(字符串,可选):自定义文件名(不带扩展名),默认为 "cv_markdown"。
10. generate_cv_html(高级)
根据预先生成的简历数据生成样式化的 HTML 简历文档。
参数:
cvData(对象,必填):定制的简历数据对象(来自 generate_cv_data)。
outputPath(字符串,必填):简历应保存的目录路径。
fileName(字符串,可选):自定义文件名(不带扩展名),默认为 "cv_web"。
求职信和电子邮件模板工具
11. generate_cover_letter(推荐)
为特定的职位申请生成定制的求职信。返回格式化的文本,可在屏幕上显示或保存为 PDF。
参数:
userProfile(对象,必填):完整的用户资料信息。
jobRequirements(对象,必填):职位要求对象。
hiringManagerName(字符串,可选):如果知道招聘经理的姓名。
format(字符串,可选):输出格式 - "text"(默认)用于屏幕显示,"html" 用于样式化查看。
12. save_cover_letter_pdf
生成求职信并将其保存为 PDF 到指定位置。自动从职位描述中提取电子邮件地址和招聘经理姓名。
参数:
userProfile(对象,必填):完整的用户资料信息。
jobRequirements(对象,必填):职位要求对象。
outputPath(字符串,可选):求职信应保存的目录路径。
fileName(字符串,可选):自定义文件名(不带扩展名),默认为 "cover_letter"。
hiringManagerName(字符串,可选):如果知道招聘经理的姓名。
pageSize(字符串,可选):PDF 页面大小(例如,'A4'、'Letter'、'Legal')。
margins(对象,可选):PDF 边距,包含 top、right、bottom、left 属性。
13. generate_email_template
为职位申请生成专业的电子邮件模板。自动从职位描述中检测电子邮件地址。
参数:
userProfile(对象,必填):完整的用户资料信息。
jobRequirements(对象,必填):职位要求对象。
templateType(字符串,可选):电子邮件模板类型 - "application"(默认)、"follow_up"、"inquiry"、"thank_you"。
recipientEmail(字符串,可选):收件人电子邮件地址(可选,如果可用,将使用从职位描述中提取的电子邮件)。
hiringManagerName(字符串,可选):如果知道招聘经理的姓名。
14. draft_complete_application(推荐 - 一站式解决方案)
起草完整的职位申请包:简历、求职信和电子邮件模板。如果在职位描述中找到电子邮件地址,将自动生成 PDF 简历和求职信,以及电子邮件模板。
参数:
userProfile(对象,必填):完整的用户资料信息。
jobRequirements(对象,必填):职位要求对象。
outputPath(字符串,可选):文件应保存的目录路径。
baseFileName(字符串,可选):生成文件的基本文件名(不带扩展名),默认为 "job_application"。
hiringManagerName(字符串,可选):如果知道招聘经理的姓名。
📚 详细文档
配置
环境变量
MCP 服务器通过 Claude Desktop 配置中的环境变量支持各种配置选项:
{
"mcpServers": {
"cv-forge": {
"command": "node",
"args": ["path/to/cv-forge/build/index.js"],
"cwd": "path/to/cv-forge",
"env": {
"DEFAULT_OUTPUT_PATH": "D:/CV",
"TEMP_DIR": "C:/Users/YourName/AppData/Local/Temp/cv-maker",
"PDF_TIMEOUT": "300000",
"PDF_PAGE_SIZE": "A4",
"PDF_MARGIN_TOP": "10mm",
"PDF_MARGIN_RIGHT": "10mm",
"PDF_MARGIN_BOTTOM": "10mm",
"PDF_MARGIN_LEFT": "10mm",
"PDF_BASE_FONT_SIZE": "12px",
"PDF_LINE_HEIGHT": "1.4",
"PDF_H1_FONT_SIZE": "20px",
"PDF_H2_FONT_SIZE": "15px",
"PDF_H3_FONT_SIZE": "13px",
"PDF_PARAGRAPH_SPACING": "8px",
"PDF_SECTION_SPACING": "12px"
}
}
}
}
配置选项:
DEFAULT_OUTPUT_PATH:保存简历文件的默认目录(当 outputPath 未提供或为 "./" 时)。
TEMP_DIR:PDF 生成过程中临时文件的目录。
PDF_TIMEOUT:PDF 生成的超时时间(以毫秒为单位)。
PDF_PAGE_SIZE:默认的 PDF 页面大小 - 默认为 'A4'。
- 常见大小:'A4'(210×297mm)、'Letter'(8.5×11 英寸)、'Legal'(8.5×14 英寸)。
PDF_MARGIN_*:PDF 页面边距(上、右、下、左) - 默认为 '10mm'。
PDF_BASE_FONT_SIZE:简历正文文本的基本字体大小(12px ≈ MS Word 9pt,13px ≈ 10pt)。
PDF_LINE_HEIGHT:文本的行高(推荐 1.4 以实现紧凑布局)。
PDF_H1_FONT_SIZE:姓名/标题的字体大小。
PDF_H2_FONT_SIZE:章节标题的字体大小。
PDF_H3_FONT_SIZE:职位名称和子章节的字体大小。
PDF_PARAGRAPH_SPACING:段落间距。
PDF_SECTION_SPACING:主要章节之间的间距。
使用 Claude Desktop 的示例
连接到 Claude Desktop 后,您可以使用自然语言与简历生成器进行交互:
1. 解析职位要求
“帮我解析这份招聘信息:
职位名称:高级软件工程师
公司:TechCorp Inc
描述:我们正在寻找一名具有 5 年以上 JavaScript、React 和 Node.js 经验的高级软件工程师。必须具备云平台和敏捷方法的经验。需要具备较强的沟通能力。”
2. 生成定制简历(简单的一步流程 - 默认生成 PDF)
“根据这份招聘信息为我生成一份定制简历:
职位名称:高级软件工程师
公司:TechCorp Inc
职位描述:我们正在寻找一名具有 5 年以上 JavaScript、React 和 Node.js 经验的高级软件工程师。必须具备云平台和敏捷方法的经验。
我的资料:
- 全名:John Doe
- 电子邮件:john@example.com
- 电话:+1-555-0123
- 经验:在多家公司担任软件工程师 6 年
- 技能:JavaScript、Python、React、Node.js、AWS、Docker
- 教育背景:州立大学计算机科学学士学位
请将其保存到 C:\Users\John\Documents\CVs,文件名为 'john_doe_senior_engineer_techcorp'”
注意:除非您指定其他格式,否则这将自动生成一个 PDF 文件(默认格式)。
3. 生成不同格式的简历
“你能为我生成多种格式的简历吗?我需要:
1. 一份用于申请的专业 PDF(默认格式)
2. 一份用于我的 GitHub 的 Markdown 版本
3. 一份用于我的网站的 HTML 版本
将它们全部保存到 C:\Users\John\Documents\CVs,基本文件名为 'john_doe_cv'”
或者明确指定格式:
“以 HTML 格式生成我的简历并保存到 C:\Users\John\Documents\CVs”
或者为 PDF 指定自定义页面大小和边距:
“以 Letter 页面大小和四周 1 英寸的边距将我的简历生成 PDF,保存到 C:\Users\John\Documents\CVs”
4. 生成求职信
“为 TechCorp Inc 的高级软件工程师职位生成一封求职信。职位描述中提到招聘经理是 Sarah Johnson,申请应发送至 careers@techcorp.com。”
5. 生成电子邮件模板
“为申请 TechCorp Inc 的高级软件工程师职位创建一个电子邮件模板。招聘信息中包含电子邮件 careers@techcorp.com,并提到 Sarah Johnson 是招聘经理。”
6. 起草完整申请包(推荐)
“为 TechCorp Inc 的高级软件工程师职位起草一个完整的职位申请包。包括简历、求职信和电子邮件模板。将所有内容保存到 C:\Users\John\Documents\Applications,基本文件名为 'techcorp_application'。”
这将生成:
techcorp_application_CV.pdf - 定制简历
techcorp_application_Cover_Letter.pdf - 专业求职信
techcorp_application_Email_Template.txt - 电子邮件模板(如果在招聘信息中找到电子邮件地址)
7. 生成跟进电子邮件模板
“为我上周申请的 TechCorp Inc 的高级软件工程师职位生成一个跟进电子邮件模板。”
直接使用工具的示例
如果您想直接使用工具(高级用法):
- 解析招聘信息:
{
"tool": "parse_job_requirements",
"args": {
"jobTitle": "Senior Software Engineer",
"company": "TechCorp Inc",
"jobDescription": "We are looking for a Senior Software Engineer with 5+ years of experience in JavaScript, React, and Node.js. Must have experience with cloud platforms and agile methodologies."
}
}
- 生成定制简历:
{
"tool": "generate_cv_data",
"args": {
"userProfile": { },
"jobRequirements": { }
}
}
- 生成 PDF 简历:
{
"tool": "generate_cv_pdf",
"args": {
"cvData": { },
"outputPath": "C:\\Users\\YourName\\Documents\\CVs",
"fileName": "senior_engineer_techcorp_cv"
}
}
- 生成 Markdown 简历:
{
"tool": "generate_cv_markdown",
"args": {
"cvData": { },
"outputPath": "C:\\Users\\YourName\\Documents\\CVs",
"fileName": "cv_for_github"
}
}
- 生成 HTML 简历:
{
"tool": "generate_cv_html",
"args": {
"cvData": { },
"outputPath": "C:\\Users\\YourName\\Documents\\CVs",
"fileName": "web_resume"
}
}
- 将简历保存为文本文件:
{
"tool": "save_cv_text",
"args": {
"cvData": { },
"outputPath": "C:\\Users\\YourName\\Documents\\CVs",
"fileName": "senior_engineer_techcorp_cv"
}
}
🔧 技术细节
工作原理
- 职位分析:服务器解析职位描述以提取:
- 所需的技术技能
- 首选的任职资格
- 公司行业和规模
- 经验水平要求
- 简历定制:基于分析结果,它会:
- 优先考虑相关技能和经验
- 调整专业摘要
- 重新排序并强调匹配的成就
- 融入特定职位的关键词以优化 ATS
- 输出生成:创建格式良好的文本简历,该简历:
- 使用适合 ATS 的格式
- 包含相关关键词
- 保持专业结构
- 突出最相关的资格
文件结构
cv-forge/
├── src/
│ ├── index.ts # 主 MCP 服务器
│ └── lib/
│ ├── job-parser.ts # 职位要求解析逻辑
│ ├── cv-generator.ts # 简历定制算法
│ ├── document-generator.ts # 多格式文档生成
│ └── word-generator.ts # (未来)Word 文档生成
├── build/ # 编译后的 JavaScript 文件
├── package.json # 项目配置
├── tsconfig.json # TypeScript 配置
├── claude_desktop_config.example.json # 示例配置
└── README.md # 本文件
开发
构建
npm run build
启动开发服务器
npm run dev
项目结构
src/index.ts:带有工具注册的主 MCP 服务器。
src/lib/job-parser.ts:解析职位要求,提取关键信息、电子邮件和招聘经理姓名。
src/lib/cv-generator.ts:根据职位要求生成定制的简历内容。
src/lib/cover-letter-generator.ts:为职位申请生成个性化的求职信。
src/lib/email-template-generator.ts:为各种申请场景创建专业的电子邮件模板。
src/lib/document-generator.ts:多格式文档生成(PDF、HTML、Markdown)。
src/lib/word-generator.ts:(未来)Word 文档生成功能。
故障排除
PDF 未保存到配置的位置
- 确保在您的 Claude Desktop 配置中设置了
DEFAULT_OUTPUT_PATH。
- 更改配置后重启 Claude Desktop。
- 检查路径是否存在,或者应用程序是否有权限创建该路径。
字体大小过大或过小
- 在环境变量中调整
PDF_BASE_FONT_SIZE(12px ≈ 9pt,13px ≈ 10pt MS Word)。
- 修改
PDF_LINE_HEIGHT 以调整间距。
- 更改后重启 Claude Desktop。
PDF 生成失败
- 检查输出目录是否存在且可写。
- 验证
TEMP_DIR 路径是否有效。
- 确保有足够的磁盘空间。
自定义页面大小不起作用
- 确保页面大小是有效的格式(A4、Letter、Legal、A3、A5 等)。
- 检查 PDF 生成器是否支持该页面大小。
- 使用标准的页面大小名称(区分大小写)。
自定义边距未应用
- 使用正确的单位:'mm'、'cm'、'in'、'px'、'pt'。
- 示例:'10mm'、'0.8in'、'72pt'。
- 更改环境变量后重启 Claude Desktop。
📄 许可证
本项目采用 MIT 许可证。
🤝 贡献
欢迎贡献!请随时提交拉取请求或提出问题以报告错误和提出功能请求。