Greenhouse Jobs MCP Server
[smoke]
[MCP]
[deps]
A Model Context Protocol server that gives any MCP client — Claude Desktop, Cursor, Cline,
Continue, or your own agent — live, normalized job postings straight from a company's
Greenhouse board (the most-requested ATS feed), plus seven more applicant-tracking systems
in one clean schema.
One tool call, Greenhouse + seven more ATS platforms, one clean schema:
Greenhouse · Lever · Ashby · SmartRecruiters · Workday · Recruitee · Workable · BambooHR
Give it a bare company name (stripe), a domain (stripe.com), or an explicit board
(greenhouse:stripe, workday:nvidia.wd5:NVIDIAExternalCareerSite) — the server detects the ATS
and board token for you and returns postings with stable field names across every platform.
- Zero dependencies. No MCP SDK, no transitive package tree — the server is one file plus a
vendored adapter core. It installs and boots instantly under
npx, and drags nothing into your
agent's trust boundary. (For an agent tool, the supply chain is the attack surface.)
- Zero keys, zero account. Every source is a public ATS JSON endpoint.
- Normalized schema.
title · company · location · remote · employment_type · department · posted_at (ISO) · salary · url · source_platform — same shape whoever the employer uses.
- Auto-detect. Pass a slug or domain; the ATS and token are resolved for you.
- Plus Hacker News "Who is hiring?" The
search_hn_hiring tool reads the current month's thread
into the same schema, and finds next month's thread by itself when it is posted.
Install
Requires Node.js ≥ 18.
Claude Desktop
Add to claude_desktop_config.json (Settings → Developer → Edit Config):
Cursor / Cline / Continue
Point the client at the same command (npx -y github:rezearcher/jobs-mcp-server) as a stdio
server. In Cursor: Settings → MCP → Add new server → type command.
From source
Tools
Free vs. metered
The four search tools above are free and read the live boards directly. Two derived layers are
heavier to keep correct — pay-transparency text drifts, cross-ATS comp needs normalizing — so they
are served pay-per-call over the x402 rail (USDC on Base, no API key): a few
tenths of a cent per call. Call get_premium_access for the exact endpoints, prices, and payment
handshake, or hit the free preview first: https://assetfactory-jobs-x402.sigrunner.workers.dev/jobs/preview?companies=stripe.com.
Example
Ask your assistant: "Use the jobs tool to list open engineering roles at Stripe and Palantir."
The model calls:
and gets back a jobs[] array plus a resolutions[] log showing how each company was resolved.
Or, to sweep the whole Hacker News hiring thread: "Find remote Rust roles in this month's HN
who-is-hiring thread." →
Addressing a company
Why a maintained server (and not a one-off script)
ATS JSON shapes drift and companies migrate between vendors. This server is the public face of a
continuously maintained adapter layer: each platform is isolated so a shape change touches one
adapter, and a scheduled canary (.github/workflows/smoke.yml) exercises a live board on every push
and daily, failing loudly the moment an adapter stops returning rows. That upkeep is the point — it
is why the feed keeps working after the day you install it.
License
MIT © Grey Ridge Signals Group LLC. Job content belongs to the respective employers and their ATS
providers; this tool only retrieves and normalizes publicly listed postings. Respect each source's
terms and rate limits.
Related tools (same maintained engine)
Prefer a plain CLI, or a company-level signal instead of an MCP tool?
- ats-jobs-scraper-cli — the same 8-ATS feed as a zero-dependency command-line tool.
- unified-jobs-scraper-cli — adds LinkedIn public postings and cross-source dedup.
- company-enrichment-cli — domain → one clean company record (firmographics, contacts, tech stack) with a rolled-up hiring-intensity signal from the same ATS engine; sales/prospecting buying-intent rather than a raw job feed.