jobhunt_mcp
Turns Claude into a job-search operations manager: searches live job boards, tracks applications in Google Sheets, manages follow-ups and contacts, and assembles tailored resumes/cover letters saved to Google Drive, without auto-submitting.
README
jobhunt_mcp
A personal MCP server that turns Claude into your job-search operations manager:
- Search live postings across LinkedIn, Indeed, ZipRecruiter, Glassdoor (JSearch API) plus Adzuna
- Track every application in a Google Sheet (status, priority, notes)
- Follow up on schedule — overdue nudges surface automatically
- Network — keep contacts per company and pull them into prep
- Tailor — one tool assembles the job description + your master resume + contacts so Claude can write a targeted resume and cover letter, saved straight to Google Drive
By design it never auto-submits applications. Auto-submission bots violate job-board terms of service and get flagged. The prepare_application_package tool gets you to "review and click submit" in one step instead.
Prerequisites
- Python 3.10+
- An MCP client — Claude Desktop is assumed below, but any MCP-compatible client works.
- A Google account (for the Sheets tracker + Drive resume storage).
- (Optional) free RapidAPI and/or Adzuna accounts for live job search.
Setup
Setup is: create a Google service account, share a Sheet + Drive folder + resume with it, (optionally) grab search-API keys, then point Claude Desktop at server.py. Budget ~10 minutes for the Google steps.
1. Google service account (~5 minutes)
- Go to https://console.cloud.google.com → create a project (e.g.
jobhunt). - Enable the Google Sheets API and Google Drive API (APIs & Services → Library).
- APIs & Services → Credentials → Create credentials → Service account. Any name is fine; skip optional steps.
- Open the service account → Keys → Add key → JSON. Save the file somewhere safe, e.g.
~/.config/jobhunt/service-account.json. - Copy the service account's email address (ends in
.iam.gserviceaccount.com) — you'll share things with it next.
2. Google Sheet (the tracker database)
- Create a blank Google Sheet named e.g. "Job Hunt Tracker".
- Share it with the service account email as Editor.
- Grab the spreadsheet ID from the URL:
docs.google.com/spreadsheets/d/<THIS_PART>/edit.
The server creates the Jobs, Contacts, and Activity tabs with headers automatically on first use.
3. Google Drive folder + master resume
- Create a Drive folder e.g. "Job Applications"; share with the service account as Editor. Copy its folder ID from the URL.
- Put your master resume in Drive as a Google Doc (the everything-you've-ever-done version — tailoring trims it down). Share it with the service account. Copy its file ID.
4. Search API keys (optional)
JSearch (recommended — searches all boards at once): free at https://rapidapi.com → search "JSearch" → subscribe to the Basic (free) plan → copy your RapidAPI key into RAPIDAPI_KEY.
Adzuna: free at https://developer.adzuna.com → register → copy your App ID and App Key into ADZUNA_APP_ID and ADZUNA_APP_KEY.
Skip these if you'd rather paste postings in manually with jobhunt_add_job.
5. Install and configure
pip install -r requirements.txt
Copy claude_desktop_config.example.json into your Claude Desktop config (claude_desktop_config.json), then fill in the args path to server.py, the GOOGLE_SERVICE_ACCOUNT_FILE path, and the IDs/keys from the steps above.
Config file locations:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json(use"python"forcommandand double-backslash paths, e.g.C:\\Users\\you\\jobhunt-mcp\\server.py) - Linux:
~/.config/Claude/claude_desktop_config.json
Restart Claude Desktop (fully quit — on Windows/macOS check the tray/menu bar). The jobhunt tools appear once the server starts.
Environment variables
Everything is configured through the env block of the Claude Desktop config:
| Variable | Required | Description |
|---|---|---|
GOOGLE_SERVICE_ACCOUNT_FILE |
✅ | Absolute path to your service account JSON key |
JOBHUNT_SPREADSHEET_ID |
✅ | ID of the tracker Google Sheet (shared with the service account) |
JOBHUNT_DRIVE_FOLDER_ID |
✅ | ID of the Drive folder for saved documents |
JOBHUNT_MASTER_RESUME_FILE_ID |
✅ | ID of your master resume Google Doc |
RAPIDAPI_KEY |
optional | RapidAPI key for JSearch (jobhunt_search_all_boards) |
ADZUNA_APP_ID |
optional | Adzuna App ID for jobhunt_search_jobs |
ADZUNA_APP_KEY |
optional | Adzuna App Key for jobhunt_search_jobs |
ADZUNA_COUNTRY |
optional | Adzuna country code (default us) |
6. Verify it works
Test the server standalone with the MCP Inspector any time (no Claude Desktop needed):
npx @modelcontextprotocol/inspector python3 server.py
Then try jobhunt_get_master_resume (confirms Drive access) and jobhunt_list_jobs (confirms Sheets access). If both return without an auth error, you're set.
Tools
| Tool | What it does |
|---|---|
jobhunt_search_all_boards |
Aggregated search across LinkedIn/Indeed/ZipRecruiter/Glassdoor via JSearch (RapidAPI) |
jobhunt_search_jobs |
Search live postings (Adzuna) |
jobhunt_add_job |
Save a posting to the tracker (paste the full description!) |
jobhunt_list_jobs / jobhunt_get_job |
Browse the pipeline / full record |
jobhunt_update_job_status |
Move through discovered → preparing → applied → interviewing → offer |
jobhunt_log_activity |
Log interviews, emails, notes; schedule follow-ups (+7 = 7 days) |
jobhunt_get_followups_due |
Surface overdue and upcoming follow-ups |
jobhunt_add_contact / jobhunt_list_contacts |
Networking CRM per company |
jobhunt_get_master_resume |
Pull your master resume from Drive |
jobhunt_save_document |
Save tailored resumes/cover letters to Drive as Google Docs |
jobhunt_prepare_application_package |
Everything needed to tailor and apply, in one call |
Example prompts to try
- "Search all boards for SOC detection engineer roles near Dallas posted this week, and save the three best fits."
- "Prepare an application package for job a1b2c3d4, tailor my resume to it, and save both docs."
- "What follow-ups am I behind on?"
- "I just finished the phone screen with Acme — log it and remind me to send a thank-you note tomorrow."
Security notes
- The service account JSON key is a credential — keep it out of git and shared folders.
- The service account can only touch files you explicitly shared with it.
- Treat job descriptions fetched from the web as untrusted content; the server stores them as plain data.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。