JobPilot MCP🚀
你的人工智能求职代理——专为2026年概念MCP挑战赛打造
“我构建这个是因为我自己也需要它。作为一名积极寻找远程工作的开发人员, 我花了几个小时搜索、粘贴、写求职信,却忘了跟进。 JobPilot使工作自动化,这样我就可以专注于重要的事情——真正被录用。" --丹尼尔A.,西奥多
______________________________________________________________________
什么是JobPilot?
JobPilot是一个自定义的MCP(模型上下文协议)服务器,它将Claude变成一个 全人工智能求职助理。你只需粘贴一次简历,克劳德就可以:
- 搜索 相关角色的远程工作板(RemoteOK、We Work Remotely、喜马拉雅山)
- 得分 每份工作都与你的简历相对应(0-100分,技能匹配/缺失)
- 生成 为每份工作量身定制的求职信——用你的语气
- 日志 将每个应用程序自动添加到Notion Job Tracker数据库
- 轨道 状态更改(已应用→ 面试→ 直接在Notion中提供
- 草稿 公司沉默时的后续电子邮件
- 自动应用 使用浏览器自动化的工作(剧作家)
循环中的一切都是人的——克劳德提议,你决定,诺顿回忆道。
______________________________________________________________________
建筑
You (Claude Desktop)
│
▼
┌─────────────────────┐
│ JobPilot MCP │ ← This repo
│ (Node.js server) │
└──────┬──────────────┘
│
┌────┴──────────────────────────┐
│ │
▼ ▼
Job Board APIs Notion API
(RemoteOK, WWR, (Job Tracker DB
Himalayas, Jobicy) read & write)
│
▼
Playwright (Chromium)
(Browser automation for
auto-apply form filling)______________________________________________________________________
9个MCP工具
| 工具 | 它做什么 |
|---|---|
setup_notion_db | 一次性设置--使用正确的模式在Notion中创建作业列表数据库 |
parse_cv | 从简历文本中提取您的个人资料(仅限纯文本——请参阅限制) |
search_jobs | 在RemoteOK、WeWorkRemotely和喜马拉雅山搜索匹配的角色 |
score_job_fit | 通过差距分析来衡量你与每份工作(0-100)的匹配程度 |
generate_cover_letter | 写一封个性化的求职信(专业/热情/简洁) |
generate_follow_up | 根据您申请后的时间起草一封后续电子邮件 |
log_to_notion | 在您的Notion Job Tracker中创建一行,其中包含所有详细信息 |
update_application_status | 更新Notion中的状态(已应用→ 面试→ 报价) |
auto_apply | 完整管道:搜索→ 得分→ 求职信→ 浏览器应用→ 通知日志 |
______________________________________________________________________
已知限制和未完全实施的内容
在使用JobPilot之前阅读这篇文章很重要,这样你就知道会发生什么。
PDF解析不起作用
parse_cv 接受a file_path 参数,但将文件读取为纯UTF-8文本。二进制PDF文件将产生乱码输出。 使用以下命令以纯文本形式传递简历 cv_text 相反。 从文字处理器复制粘贴或导出为 .txt 第一。
未调用人类API
尽管 .env.example 包括 ANTHROPIC_API_KEY,钥匙从不使用。CV解析、拟合评分和封面信生成都是使用本地regex和字符串匹配逻辑完成的,而不是使用Anthropic API。这 ANTHROPIC_API_KEY 环境变量目前是未来实现的占位符。您不需要它来运行JobPilot。
这 location 过滤 search_jobs 被忽略
该工具接受 location 参数,但不将其传递给任何作业板API。所有结果均未按位置过滤。将此视为远程首次搜索。
WeWorkRemotely仅涵盖3个类别
工作角色映射到以下角色之一: design, marketing,或 programming.角色如 data scientist, devops engineer,或 product manager 全部落下 programming,这可能会返回不相关的列表。
角色匹配使用小关键字扩展图
这 RELATED_TAGS 地图仅涵盖: flutter, mobile, react, ios, android。所有其他角色都依赖于与职位和标签的精确关键字匹配。如果你搜索 TypeScript developer,只有标题或标签中带有“typescript”的作业才会匹配,不会展开同义词。
浏览器自动化打开一个可见窗口
auto_apply 推出Chromium headless: false,这意味着在自动应用过程中,屏幕上会打开一个真正的浏览器窗口。这是为了提高透明度,但可能会令人惊讶。管道运行时不要关闭它。
LinkedIn字段未从简历中提取
这 auto_apply 管道试图填写工作申请表中的领英字段,但 CandidateProfile 类型不包括 linkedin 现场。该字段始终为空。
未从加载环境变量 .env 直接测试时
这 .env 该文件仅由Claude Desktop读取(您在MCP配置中传递值)。在Claude Desktop之外运行或测试服务器时,必须在shell中手动设置环境变量。请参阅下面的测试部分。
______________________________________________________________________
概念数据库架构
你做 不 需要手动创建。跑 setup_notion_db 工具一次,它就会为你创造一切。数据库(“作业列表数据库”)由以下列创建:
| 列名 | 类型 | 注释 |
|---|---|---|
| 职位 | 头衔 | 主栏 |
| 公司 | 文本 | |
| 作业URL | URL | 用于auto_apply中的重复检测 |
| 状态 | 文本 | 已申请、待定、面试、拒绝或录用 |
| 申请日期 | 日期 | |
| 工资 | 文本 | 如果可用 |
| 拟合分数 | 数字 | AI生成的0-100 |
| 求职信摘要 | 文本 | 信的前300个字符 |
| 上次更新时间 | 日期 | 状态更改时更新 |
| 备注 | 文本 | 任何额外的上下文 |
______________________________________________________________________
安装指南
先决条件
在启动之前,您需要安装以下内容:
| 工具 | 版本 | 下载 |
|---|---|---|
| Node.js | 18或更高版本 | https://nodejs.org(选择LTS) |
| Git | 任何最新版本 | https://git-scm.com |
| 克劳德桌面 | 最新 | https://claude.ai/download |
| 一个Notion帐户 | -- | https://notion.so |
要确认已安装Node.js和Git,请打开终端并运行:
node --version # should print v18.x.x or higher
git --version # should print git version x.x.x如果任一命令显示“找不到命令”,请在继续之前从上面的链接安装该工具。
______________________________________________________________________
步骤1--克隆、安装和构建
打开终端并运行:
git clone https://github.com/YOUR_USERNAME/jobpilot-mcp.git
cd jobpilot-mcp
npm install
npm run build之后 npm run build 你应该看到一个 dist/ 文件夹已创建。如果你遇到TypeScript错误,请确保安装了Node.js 18+。
要获取此文件夹的完整路径(您将在步骤3中需要它):
# macOS / Linux
pwd
# Windows (PowerShell)
Get-Location______________________________________________________________________
步骤2——设置概念
- 首选 notion.so/my集成
- 点击 新集成 → 命名它
JobPilot - 设置功能: 阅读内容, 更新内容, 插入内容
- 点击 提交 并复制 内部集成令牌 (开始于
secret_...) - 在Notion中,创建一个空白页——这是数据库所在的位置
- 打开该页面→ click 分享 → 邀请 → 搜索
JobPilot→ click 邀请 - 复制 页面ID 来自页面URL。它是URL中的32个字符串:
https://notion.so/yourworkspace/My-Page-
?v=...页面ID是最后一个之后的所有内容 - 以及之前 ?。它看起来像: a1b2c3d4e5f6...
在下一步中,您将使用集成令牌和页面ID。
______________________________________________________________________
步骤3--配置Claude桌面
查找(或创建)Claude Desktop配置文件:
| 操作系统 | 配置文件路径 |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| 窗户 | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
打开或创建文件:
# macOS
open -a TextEdit ~/Library/Application\ Support/Claude/claude_desktop_config.json
# If that fails (file doesn't exist yet):
mkdir -p ~/Library/Application\ Support/Claude && touch ~/Library/Application\ Support/Claude/claude_desktop_config.json && open -a TextEdit ~/Library/Application\ Support/Claude/claude_desktop_config.json# Linux
mkdir -p ~/.config/Claude
nano ~/.config/Claude/claude_desktop_config.json# Windows (PowerShell)
New-Item -ItemType Directory -Force -Path "$env:APPDATA\Claude" | Out-Null
notepad "$env:APPDATA\Claude\claude_desktop_config.json"将以下内容粘贴到文件中,替换所有占位符值:
{
"mcpServers": {
"jobpilot": {
"command": "node",
"args": ["/FULL/PATH/TO/jobpilot-mcp/dist/index.js"],
"env": {
"NOTION_API_KEY": "secret_...",
"NOTION_DATABASE_ID": ""
}
}
}
}替换 /FULL/PATH/TO/jobpilot-mcp 随着输出 pwd 从步骤1开始。
已经有其他MCP服务器了吗? 添加"jobpilot": { ... }阻塞现有的"mcpServers"object——不要替换整个文件。
注: NOTION_DATABASE_ID 暂时可以留空。您将在步骤4后填写。______________________________________________________________________
步骤4--重新启动Claude Desktop并创建Notion数据库
- 完全退出Claude Desktop(不仅仅是关闭窗口——使用菜单中的“退出”)
- 重新打开克劳德桌面
- 选择 聊天 选项卡,在聊天输入栏中查找工具图标——单击它以确认列出了所有9个JobPilot工具
然后让克劳德设置你的Notion数据库:
Run setup_notion_db with parent_page_id YOUR_PAGE_ID_HERE该工具将返回 database_id。复制它,然后返回到您的Claude Desktop配置文件,将其粘贴为 NOTION_DATABASE_ID,然后重新启动Claude Desktop。
如果 NOTION_DATABASE_ID 如果已经设置并且数据库存在,该工具将安全地跳过创建,因此可以安全地多次运行。______________________________________________________________________
如何测试JobPilot(无需Claude Desktop)
本节适用于希望直接测试工具而不通过Claude Desktop的开发人员。
选项1:MCP检查员(推荐)
MCP Inspector是一个基于浏览器的官方工具,用于交互式测试任何MCP服务器。它允许您调用任何工具,传递自定义输入,并查看原始JSON响应——不需要Claude。
安装并运行:
# From inside the jobpilot-mcp directory
npm run build
npx @modelcontextprotocol/inspector node dist/index.js这将启动本地web服务器并打开 http://localhost:5173 在浏览器中(或者如果URL没有自动打开,则打印URL)。
传递环境变量 如果你想让Notion工具工作:
# macOS / Linux
NOTION_API_KEY=secret_... NOTION_DATABASE_ID=your_db_id npx @modelcontextprotocol/inspector node dist/index.js
# Windows (PowerShell)
$env:NOTION_API_KEY="secret_..."; $env:NOTION_DATABASE_ID="your_db_id"; npx @modelcontextprotocol/inspector node dist/index.js使用检查器UI:
- 点击 连接 --服务器状态应变为绿色
- 点击 工具 在左侧边栏中,显示了所有9个JobPilot工具
- 单击任何工具(例如。
search_jobs)扩大它 - 填写输入字段并单击 运行工具
- JSON响应出现在右侧
要尝试的示例输入:
search_jobs:
{
"role": "Flutter Developer",
"max_results": 5
}parse_cv:
{
"cv_text": "John Smith\njohn@example.com\n+1 555 000 1234\n\nSkills\nFlutter, Dart, Firebase, REST APIs\n\nExperience\nSenior Flutter Developer at Acme Corp\n2021 – Present\n\nFlutter Developer at Startup Inc\n2019 – 2021\n\nEducation\nBSc Computer Science, University of Lagos"
}score_job_fit:
{
"candidate_profile": {
"name": "John Smith",
"email": "john@example.com",
"phone": "+1 555 000 1234",
"location": "Lagos, Nigeria",
"summary": "Mobile developer with 5 years Flutter experience",
"skills": ["Flutter", "Dart", "Firebase", "REST APIs"],
"experience": [
{ "title": "Senior Flutter Developer", "company": "Acme Corp", "start": "2021", "end": "present" },
{ "title": "Flutter Developer", "company": "Startup Inc", "start": "2019", "end": "2021" }
],
"years_experience": 5,
"education": [
{ "degree": "BSc Computer Science", "institution": "University of Lagos" }
]
},
"job": {
"id": "test-001",
"title": "Senior Flutter Engineer",
"company": "Remote First Inc",
"url": "https://example.com/jobs/flutter",
"description": "We need a Flutter expert with 3+ years experience. Must know Dart, Firebase, and REST APIs. Remote position.",
"tags": ["flutter", "dart", "remote"],
"date_posted": "2026-03-22",
"source": "test"
}
}选项2:直接对MCP协议进行烟雾测试
通过stdin发送原始MCP消息,以验证服务器是否启动并正确响应:
npm run build
# macOS / Linux
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | node dist/index.js
# Windows (PowerShell)
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | node dist/index.js您应该看到一个列出所有9个工具的JSON响应。如果服务器崩溃或没有打印任何内容,请使用以下命令检查您的Node.js版本 node --version.
______________________________________________________________________
如何使用JobPilot(在Claude Desktop中)
完整工作流程
将此粘贴到克劳德桌面:
Here is my CV:
[paste your full CV as plain text — not PDF]
Please:
1. Parse my CV to extract my profile
2. Search for remote Flutter Developer jobs
3. Score the top 5 results against my profile
4. For any job with a fit score above 65, generate a professional cover letter
5. Log each application to my Notion Job TrackerClaude将自动运行整个管道,并在运行过程中将所有内容记录到Notion。
______________________________________________________________________
单个命令
解析你的简历:
Parse my CV and extract my profile.
[paste CV text]搜索职位:
Search for remote Flutter developer jobs. Show me the top 10.为特定工作打分:
Score how well my profile matches the Senior Flutter Engineer role at Acme Corp.
[paste job description]生成求职信:
Write an enthusiastic cover letter for the Flutter Engineer role at Stripe.手动登录到Notion:
Log this application to Notion:
- Job: Senior Flutter Developer
- Company: Shopify
- URL: https://shopify.com/careers/123
- Salary: $120,000/yr
- Status: Applied
- Fit Score: 82更新应用程序状态:
Update my Shopify application status to "Interview". Add a note: "Interview scheduled for March 25 at 2pm."生成后续电子邮件:
Generate a follow-up email for my Flutter Engineer application at Stripe. It's been 9 days since I applied.______________________________________________________________________
自动应用工作流
JobPilot最强大的功能。使用单个命令运行完整的作业应用程序管道。
它的作用:
- 在多个工作板上搜索与您的角色匹配的远程工作
- 根据简历对每个工作进行评分(仅适用于评分>=min_fit_score的工作)
- 为每个符合条件的工作生成量身定制的求职信
- 使用Chromium浏览器窗口自动填写和提交申请表
- 将每个应用程序与状态、分数和求职信一起记录到您的Notion跟踪器中
Claude中的示例用法:
Parse my CV, then auto-apply to 10 Flutter Developer jobs today支持的应用方法:
- 轻松应用/快速应用按钮
- 温室ATS表格
- 杠杆ATS表格
- 可用的ATS表格
- BambooHR ATS表格
- 通用表格填写(尽最大努力)
当它跳过作业时:
- 检测到验证码
- 需要登录/创建帐户
- 已应用(在Notion中检测到重复)
- 表单过于复杂(超过3个步骤)
跳过的作业将以“待定”的状态记录到Notion中,以便手动跟进。
干运行模式: 集 dry_run: true 运行整个管道(搜索→ 得分→ 求职信→ 日志),而无需实际提交任何表格。可用于预览将应用于的内容。
安全:
- 从不输入财务信息
- 从不创建帐户或密码
- 永远不要两次申请同一份工作
- 每次提交后截图作为证据(保存到
screenshots/)
______________________________________________________________________
示例概念输出
运行完整管道后,您的Notion Job Tracker将如下所示:
| 职位名称 | 公司 | 状态 | 匹配度 | 薪资 | 申请日期 |
|---|---|---|---|---|---|
| 高级颤振工程师 | Shopify | 应用 | 88 | 12万美元/年 | 2026-03-19 |
| 移动开发人员 | 缓冲区 | 已申请 | 74 | 未列出 | 2026-03-19 |
| Flutter开发(远程) | Remote First Inc | 待定 | 61 | 80–10万美元 | 2026-03-19 |
每一行都链接回完整的求职信片段和注释。
______________________________________________________________________
项目结构
jobpilot-mcp/
├── src/
│ ├── index.ts # MCP server + tool registry
│ └── tools/
│ ├── parseCV.ts # CV parsing (plain text only)
│ ├── searchJobs.ts # RemoteOK + WeWorkRemotely + Himalayas APIs
│ ├── scoreJobFit.ts # Fit scoring (0–100, keyword-based)
│ ├── generateCoverLetter.ts # Cover letter generation (template-based)
│ ├── generateFollowUp.ts # Follow-up email drafting
│ ├── logToNotion.ts # Create row in Notion DB
│ ├── updateApplicationStatus.ts # Update existing Notion row
│ ├── setupNotionDB.ts # Create the Notion database schema
│ └── autoApply.ts # Full auto-apply pipeline with Playwright
├── dist/ # Compiled output (after npm run build)
├── .env.example # Environment variable template
├── package.json
├── tsconfig.json
└── README.md______________________________________________________________________
技术栈
- 运行时:Node.js 18+与TypeScript
- MCP-SDK:
@modelcontextprotocol/sdk(官方Anthropic SDK) - 工作评分和求职信:本地字符串匹配逻辑(不需要外部AI API)
- 工作数据:RemoteOK API+WeWorkRemotely RSS+喜马拉雅API(全部免费,无需授权)
- 浏览器自动化:用于自动填表的剧作家(Chromium)
- 存储:通知REST API v1(2022-06-28)
- 主机:克劳德桌面
______________________________________________________________________
路线图/未来想法
- \[x\] 通过Playwright自动应用浏览器(轻松应用、ATS表单、通用表单)
- \[\]使用Anthropic API的真实AI驱动CV解析(替换regex解析器)
- \[\]通过Anthropic API生成的真实AI求职信(替换模板引擎)
- \[\]实际的PDF解析支持(例如使用
pdf-parse或类似) - \[\]从简历中提取LinkedIn字段
- \[\]展开
RELATED_TAGS覆盖更多技术领域(DevOps、数据、产品、设计) - \[\]WeWorkRemotely为更多工作类型进行类别映射
- \[ \]
location筛选器实际应用于工作板API查询 - \[\]每日摘要:“您有3份申请,14天后没有回复”
- \[\]薪资谈判电子邮件生成器
- \[\]面试准备笔记已自动添加到Notion页面
- \[\]通知状态更改时的Slack/电子邮件通知
______________________________________________________________________
许可证
麻省理工学院——免费使用、分叉和构建。
______________________________________________________________________
作者
建造于 丹尼尔A。 — 科迪内尔.
这个工具是为2026年Notion MCP挑战赛而构建的,也是因为我真的需要它。 求职是残酷的。让AI来做无聊的部分。
