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.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.