job-search-mcp
Discovers job listings via Google Jobs search.
Fetches exact application fields from Greenhouse ATS to generate tailored applications.
Allows searching and discovering job listings from Indeed, a major job board.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@job-search-mcpFind new job listings matching my profile."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
job-search-mcp
Infrastructure for running a job search with Claude Code. Point it at a folder with your CV + a small config; it discovers roles, fetches each company's exact application fields, drafts non-trivial applications (positioning, not just autofill), and renders a navigable, offline dashboard with one-click copy for every field. Nothing is auto-submitted — you review and send.
Works two ways: as a set of Claude Code skills + an MCP server (talk to Claude), or as a CLI.
What it does
Step | Module | Output |
CV → structured profile JSON |
|
|
Discover roles (LinkedIn/Indeed/Naukri/Google) |
|
|
Fetch a job's exact required fields |
| Greenhouse + Ashby = full; Lever/Workday = standard |
Fill an application against those fields |
|
|
Make it non-trivial (reframe + product teardown + proof-map) |
| a |
Render everything to one offline page |
|
|
Design principle — human-in-the-loop. It prepares applications; you submit them. Fully-automated apply bots violate LinkedIn policy (permanent-ban risk) and are out of scope by design.
Related MCP server: Job Search MCP Server
Your data folder
You keep your inputs and outputs in one folder, separate from this repo. Point the tool at it with
--data-dir or the JOBSEARCH_DATA env var.
my-jobsearch/
profile.json # from parse-cv, or copy examples/profile.example.json
config.json # optional; copy examples/config.example.json
companies.json # optional; a curated target list (Claude can research one)
nontrivial_kits.json # optional; pre-authored per-company kits
output/jobs.json # written by the tool
applications/*.json # written by the tool
dashboard.html # written by the toolSetup
python3 -m venv .venv && source .venv/bin/activate # Python 3.10+
pip install -r requirements.txt
export ANTHROPIC_API_KEY=… # optional: LLM CV-parsing + auto-drafted non-trivial kitsUse it — CLI
D=~/my-jobsearch
python -m src.cli --data-dir $D parse-cv --cv ~/MyCV.pdf # CV -> profile.json
python -m src.cli --data-dir $D scrape # -> output/jobs.json
python -m src.cli --data-dir $D apply --url "<job_url>" # -> applications/<company>.json (+ non-trivial kit)
python -m src.cli --data-dir $D dashboard # -> dashboard.html
open $D/dashboard.html # or: python -m http.server -d $DUse it — Claude Code (MCP + skills)
Add the MCP server (see
.mcp.json) and setJOBSEARCH_DATAto your folder.In a Claude Code session in this repo, just ask: "find jobs", "apply to ", "make this application non-trivial", "build my dashboard". The skills in
.claude/skills/drive the backend; the MCP server (src/mcp_server.py) exposes the same as callable tools (get_profile,read_jobs,refresh_jobs,get_application_fields,generate_application,make_nontrivial,score_triviality,build_dashboard,list_companies).
What "non-trivial" means
A trivial application restates your CV in the form's fields — the axis an ATS reduces to keywords.
A non-trivial one changes what the reader thinks they're hiring for: it reframes the role onto
an axis where you win, carries a witness only you could produce (a short teardown of their
product through your lens), and maps every claim to a real fact in your CV (the honesty gate —
unbacked claims are flagged, never invented). See src/nontrivial.py and the make-nontrivial skill.
Tests
python -m tests.adversarial # offline
python -m tests.adversarial --net # + live ATS probesHonest caveats
Scraping ToS: Naukri/LinkedIn/Indeed prohibit automated scraping. For personal, low-volume use the practical risk is IP rate-limiting, not litigation — run modestly and pair with each board's own saved-search alerts. If a board returns nothing, it's likely a temporary block.
Fetch failures are surfaced, never hidden. If a company's real form can't be loaded, the template is flagged
fetch_failedand the dashboard shows a red banner — verify on the apply page.Salary/notice/relocation are marked
TODO_CONFIRMand surfaced for review; the tool never guesses them.
This server cannot be deployed
Maintenance
Related MCP Connectors
Job search for Claude, ChatGPT, Cursor. 250K+ jobs, 5,400+ companies. OAuth or stdio.
AI job search MCP — fact-checked jobs, application tracker, alerts. ChatGPT, Claude, Cursor.
Manage job applications — jobs, companies, boards, notes, and profile — from your AI client.
AI resume triage for recruiters. Query your candidate pool from Claude or ChatGPT.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables users to search for jobs, prefill applications using AI, and automate submissions across major platforms like Lever and Ashby directly from Claude or Cursor. It provides a full suite of tools for managing job queues, profile data, and resumes within a chat interface.36MIT
- FlicenseNot gradedqualityDmaintenanceEnables Claude to search AI/ML jobs across Greenhouse, Lever, and Adzuna, with resume tailoring and referral outreach assistance.5-
- AlicenseAqualityBmaintenanceClaude-powered job fit analyzer that analyzes job fit based on GitHub portfolio, resume, and preferences, tracks applications locally.2027 PyPI2MIT
- FlicenseAqualityDmaintenanceTransforms Claude into an AI job-hunting assistant that searches remote job boards, scores roles against your CV, generates tailored cover letters, and logs everything to a Notion tracker.11-