jobsearch
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., "@jobsearchtailor my CV and cover letter for this job: https://jobs.example.com/123"
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.
jobsearch turns your AI agent into a careful career assistant. You describe your experience once; for each posting it scores your fit with the gaps left visible, drafts a CV and cover letter that follow the target country's conventions, and refuses to ship anything it cannot trace back to your profile or that fails the document checks.
It is one self-contained plugin for Claude Code, Hermes, OpenCode, OpenClaw and Pi, and an MCP server for any other client. The model writes; deterministic TypeScript decides what is allowed out the door.
Community project, not affiliated with or endorsed by Anthropic or any of the hosts above.
Why it exists
Asking a chatbot for a tailored CV fails in three predictable ways. jobsearch is built around each of them.
The usual problem | What jobsearch does instead |
The model invents skills, numbers and titles to match the posting. | Every sentence in a draft cites an evidence ID from your profile. |
The PDF looks fine but an applicant-tracking system reads garbage. | The shipping gate extracts the text layer the way an ATS does, checks contact details are literal text, counts pages, and rasterises every page to catch clipping and overlap. |
One generic CV format for every country. | 15 country profiles (page count, photo, section order, language) drive both template choice and the drafting prompt. The posting always overrides the default. |
Related MCP server: decroche-mcp
Quick start
Requirements: Bun. To compile and gate documents you also need Typst and Poppler (pdftotext, pdfinfo). jobsearch status tells you what is missing.
Claude Code
claude plugin marketplace add RohiRIK/jobsearch-plugin
claude plugin install job-search@rohirikThen, inside Claude Code:
/job-search:setup # build your profile from a CV, LinkedIn export or notes
/job-search:apply <posting URL> # triage → draft → review → render → gateHermes, OpenCode, OpenClaw, Pi, or any MCP client
git clone https://github.com/RohiRIK/jobsearch-plugin.git
cd jobsearch-plugin
job-search/scripts/jobsearch hosts-install --host hermes --dry-run # shows every change first
job-search/scripts/jobsearch hosts-install --host hermes --yes--host is one of hermes, opencode, openclaw, pi or mcp. The installer refuses to overwrite anything it did not create, a second run is a no-op, and hosts-uninstall removes only its own changes. Per-host details are in docs/AGENTS-INTEGRATION.md.
Your data
Your profile, tracker and generated documents live in a workspace: $JOB_SEARCH_HOME, a repository checkout, or ~/.local/share/job-search. They are never stored inside the plugin folder, which hosts delete on uninstall. jobsearch data-where shows the path and jobsearch data-backup copies it.
How it works
Only step 3 uses a language model, and its output is checked by step 4. Everything else is deterministic: the same posting and profile give the same score, the same template and the same gate verdict. Each step is a command your agent can call on its own, so a host without the skills can still run the whole flow.
Built for agents
The screenshot above is unedited output for a fictional candidate. triage returns the job summary, fit score, market conventions, template choice and next step in one call of about 1.2 KB. Before this CLI, the same answer took an agent up to five tool calls and around 13 KB.
Every jobsearch command follows the same contract:
One JSON envelope on stdout:
{"ok":true,"data":…}or{"ok":false,"error":{code,type,message,recoverable,suggestions}}.rankstreams NDJSON. Diagnostics go to stderr only.Exit codes with meaning:
0ok ·1negative verdict ·2usage or confirmation needed ·3not found ·5conflict ·10dry run ·20dependency unavailable ·30internal.Safe writes: a mutation refuses without
--yesand previews with--dry-run. Over MCP, writes go through a single tool that requiresconfirm: true.Self-describing:
jobsearch --help-jsonprints every command, flag and exit code. The same command table generates the seven MCP tools, so the CLI and MCP never drift apart.
What you get
Area | What's included |
Find roles | Portal scrapers for Israel (AllJobs, Drushim, JobMaster), Denmark (Jobindex, Jobbank, Jobnet, Jobdanmark), the EU (Arbeitnow) and remote boards (Remote OK, Remotive, We Work Remotely). Duplicates are dropped across runs, and |
Assess fit | A 0–100 score across skills, experience, sector, location and language. Gaps are listed, unknowns score neutral and say so, and eligibility (remote work and office-day limits from your preferences) is reported separately from fit. |
Write | Market-aware CV and cover-letter drafting against an evidence contract. Portfolio projects are matched to the role by domain, so a device-management project does not land on a machine-learning CV. |
Ship | Typst templates on a shared design system, convention-named output ( |
Track | SQLite application tracker, follow-up reminders, outcome analysis by channel and template, interview prep, and a local dashboard with a REST API. |
Operate | A |
Country conventions: Israel, Denmark, Sweden, Norway, Germany, Austria, Switzerland, the Netherlands, Belgium, the UK, Ireland, France, Spain, Italy and the US. Inspect any of them with jobsearch run markets show <code>.
Architecture
src/: shared modules (scoring, templates, markets, project matching, naming, tracker, paths).scripts/: thin CLIs over those modules.job-search/: the plugin itself, with skills, commands, manifests for each host, and a prebuilt bundle indist/. The bundle is committed because marketplace installs never run a build, and a test fails if it is out of date.templates/: Typst CV and cover-letter templates. Each has ameta.jsonthat the template engine scores.
docs/architecture.md covers the rest.
Host support
Host | Packaging | Status |
Claude Code | marketplace plugin: skills, commands, MCP, reviewer agent | Validated with |
Hermes Agent |
| Format checked against Hermes source; installer tested |
OpenCode | skills + MCP entry in | Format checked; installer tested |
OpenClaw | skills + MCP via its CLI | Format checked; installer tested |
Pi | local package ( | Format checked; installer tested |
Any MCP client |
| Covered by tests |
"Format checked" means the files match the host's documented format and an installer test passes on a simulated home directory. A live session on that host has not been run yet. Reports from real setups are welcome.
Development
bun install
bunx tsc --noEmit # strict typecheck
bun test tests/ # full suite
bun run gates # typecheck + tests + bundle freshness + personal-data scan
bun run hooks:install # run the personal-data scanner and gates before every commit and pushAfter changing anything under src/, scripts/ or templates/, run bun run plugin:build to refresh the committed bundle. Commits follow Conventional Commits. Before opening a pull request, run bun run gates.
Never commit personal data. data/profile.json, the tracker, scraped postings and everything under assets/applications/ are git-ignored. The scanner blocks real emails, phone numbers and LinkedIn URLs in commits; add placeholders to its allow-list rather than weakening a pattern.
Documentation
Guide | Contents |
Every command, the pipeline and Docker | |
Evidence-grounded drafting, review and the gate, step by step | |
Per-host install, verification and uninstall; MCP and REST reference | |
Adding templates, job portals and salary data | |
Modules, data flow and state | |
Prerequisites in detail | |
Release history |
Credits
This project began as a fork of MadsLorentzen/ai-job-search by Mads Lorentzen, whose original idea and templates it builds on. If it helps you, consider buying Mads a coffee. Bundled fonts and third-party components are listed in THIRD_PARTY.md.
License
MIT. Copyright © 2026 Mads Lorentzen (original project) and Rohi Rikman (the job-search plugin, the jobsearch CLI and later changes).
This server cannot be deployed
Maintenance
Related MCP Connectors
A job-search companion: tailor your CV to a role, score fit, fix ATS issues. Also via MCP.
Tailor a CV to a job posting: score the match, propose a reviewable rewrite, export PDF or Word.
CareerProof MCP gives AI agents direct access to a professional-grade career and workforce intelligence platform. Two namespaces: atlas_* for HR/TA teams (candidate evaluation, batch shortlisting, competency scoring, interview generation, JD analysis, custom eval frameworks, research reports) and ceevee_* for professionals (CV optimization, career positioning, salary intelligence, market reports). Backed by RAG knowledge from 50+ premium research sources (McKinsey, BCG, HBR, Gartner, WEF)
JobsPipe — data pipeline of every job posting on the web. Search live, normalized job postings from 30+ ATS feeds and job boards for AI agents via MCP.
Related MCP Servers
- AlicenseAqualityDmaintenanceAI cover letter generation for agents. 5 composable tools that analyze job postings (15+ structured fields), match candidate profiles against roles, generate story-driven cover letters using narrative archetypes, and quality-score the results. Supports English, German, Spanish, and Portuguese. The first production MCP server for job applications.51 npmMIT
- AlicenseBqualityDmaintenanceDeterministic MCP server for job-landing pipeline that parses CVs into validated JSON Resume, detects sections, scores parse confidence, and exposes FR/US market profiles to help beat ATS and LLM screeners honestly.75MIT
- AlicenseAqualityAmaintenanceAn MCP server that exposes a perpetual, honest job-application pipeline as typed tools an LLM agent can call, with fit scoring, verified resume building, and a submission planner enforced by code, not prompts.16MIT
- AlicenseNot gradedqualityAmaintenanceA local-first, open-source MCP server that analyzes jobs, matches your CV, tailors documents, and tracks applications — all on your machine with no data uploaded.AGPL 3.0