Hired MCP
A Model Context Protocol server that scrapes nine German job platforms, lets Claude match and score listings against your CV, and tracks every application in a Google Sheet.
Overview
Job hunting across the German market means checking nine different portals, each with its own format, and manually keeping score of what you applied to. Hired MCP hands that research work to an AI agent while deliberately keeping the human in the loop: the server finds and structures the data, Claude reasons over it, and you still press “apply” yourself. No automated form submission — that line was drawn on purpose.
Key Features
- Nine platforms in parallel: Bundesagentur für Arbeit and EURES via official REST APIs, LinkedIn via its public guest API, plus StepStone, XING, Berlin Startup Jobs, MeineStadt, EnglishJobsGermany, and GermanTechJobs via JSON-LD and HTML scraping.
- A clean tool surface for the agent:
search_jobs,get_job_details,get_cv_text,log_application,list_applications,update_application, andget_application_stats— enough for Claude to research, score, and track without any bespoke prompting. - CV matching: Loads your CV from PDF, DOCX, TXT, or Markdown and lets the model score each listing against it, so only the genuinely relevant roles get logged.
- LLM fallback for brittle scrapers: Where CSS selectors break — StepStone, GermanTechJobs, XING — extraction falls back to a locally deployed Ollama instance running
llama3.2, bundled as a Docker Compose sidecar. - Google Sheets tracker: Auto-creates a 15-column applications sheet covering title, company, platform, location, URL, match score, status, CV/cover-letter state, salary, remote, deadline, and notes.
Technologies Used
- Node.js 22 + TypeScript, ESM: Runtime and type system.
- @modelcontextprotocol/sdk: MCP server implementation and tool definitions.
- Axios + Cheerio: HTTP and HTML parsing for the scraping layer.
- pdf-parse v2 + Mammoth: CV ingestion across document formats.
- googleapis with service account auth: Sheets as the persistence layer.
- Ollama (
llama3.2): Local, no-API-cost fallback extraction. - Docker: Multi-stage build with an Ollama sidecar via Compose.
Challenges and Learnings
Scrapers rot. The interesting design decision was accepting that up front and building a graceful degradation path — when a selector stops matching, a local model reads the page instead of the pipeline failing silently. Running that fallback on Ollama rather than a hosted API kept the cost of a flaky selector at zero. The other lesson was in tool design: an MCP tool surface is a prompt. Naming the tools and shaping their arguments well did more for the agent’s behaviour than any amount of system-prompt tuning.
Outcome
The result is a research assistant that does the tedious half of a job search — finding, structuring, scoring, and record-keeping — while leaving judgment and the actual application to the person it belongs to.