Each description is read in full and judged against the profile you saved, with a one-line reason attached, which is what makes bulk triage like dismissing everything under 60 a reasonable instruction rather than an arbitrary one. A deterministic formula exists as a fallback for weaker local models and is off by default. Two habits shape daily use: the board will not show the same listing twice inside six months, so repeat searches surface genuinely new postings, and all of it lives in one JSON file on your machine with nothing leaving except the requests to the job boards themselves. Coverage is US software engineering — other fields and regions come back thin.
A local job-search assistant for Claude Desktop. It searches LinkedIn plus eight ATS and job sources, scores each posting 0-100 for fit against the profile you saved, and renders a ranked board inside the conversation with Apply and Skip on every card. Everything runs on your machine, with no API keys and no accounts, and it is tuned for US software-engineering roles.
- find_jobs searches LinkedIn, Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Hacker News, RemoteOK and Remotive, with filters for seniority, type, recency, remote, salary, applicant count and source
- evaluate_jobs runs straight after a search: the model reads each full description and returns a 0-100 fit score with a one-line reason, weighing your skills, years of experience, seniority and target role
- save_profile turns a pasted resume into the skills, roles, years and location that drive both the searching and the scoring
- show_board renders the ranked shortlist, set_status applies or skips a single job, and bulk_status triages many at once by score or source
- review_saved is the tracker of what you applied to, whats_promising lists the board as text, rescore_board re-scores everything from scratch, and clear_jobs clears leftovers without touching applied or dismissed entries
- The board deduplicates for you: a listing already on it, in the tracker, dismissed, or shown in the last 6 months will not come back
Runs over stdio as npx -y @servation/job-search-mcp, with no keys and no account. The board is an MCP App UI, so the client has to both launch a local server and render that UI — it is built and tested on Claude Desktop, and remote-only clients cannot start it at all. State is a single JSON file at ~/.job-search-mcp/jobs.json, relocatable with JOB_SEARCH_MCP_DATA. LINKEDIN_LI_AT and LINKEDIN_JSESSIONID are optional and switch LinkedIn from its public guest endpoints to your logged-in account; the publisher notes this is against LinkedIn's User Agreement and can get an account flagged, that the cookies expire about monthly, and that a failure falls back to guest mode automatically.
One command — npx -y @servation/job-search-mcp
