Unified Jobs MCP Server
Cross-source deduplicated jobs feed: merge a role across ATS, LinkedIn & HN into one record.
Installation
Les étapes d'installation sont dans la documentation ci-dessous. Documentation
Documentation
Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.
Unified Jobs MCP Server
A zero-dependency Model Context Protocol server that gives an AI
agent one thing no single-source jobs tool does: a cross-source, deduplicated jobs feed. It
queries applicant-tracking systems, the LinkedIn public guest search, and the Hacker News
"Who is hiring?" thread, then collapses the same role seen on several sources into one canonical
record — with a sources[] array and a union of the richest salary, longest description, and
earliest post date. The agent gets a clean list instead of three overlapping ones plus a dedup
problem of its own.
- No API key, no account, no login. All data comes from keyless public endpoints.
- Zero dependencies. Hand-rolled spec-conformant JSON-RPC 2.0 over stdio — no SDK, no transitive
package tree in your agent's trust boundary. Installs and boots instantly under
npx. - Public postings only. No member data, no PII beyond public job fields.
Install
Claude Desktop (claude_desktop_config.json) / Cursor / Cline / Continue:
{
"mcpServers": {
"unified-jobs": {
"command": "npx",
"args": ["-y", "github:rezearcher/unified-jobs-mcp"]
}
}
}
Or run it directly:
npx -y github:rezearcher/unified-jobs-mcp
Tools
search_unified_jobs
The cross-source feed. Pull one or more companies' ATS boards (companies[]), search LinkedIn
(keywords + location), and/or the current HN thread — in a single call — and get back one
deduplicated list. The same role on several sources merges into one record:
{
"title": "Backend Software Engineer - Infrastructure",
"company": "Palantir",
"location": "United States",
"salary": "$135,000 - $200,000 / yr",
"posted_at": "2026-10-14T00:00:00.000Z",
"sources": [
{ "source_platform": "lever", "url": "https://jobs.lever.co/palantir/..." },
{ "source_platform": "linkedin", "url": "https://www.linkedin.com/jobs/view/..." }
],
"primary_url": "https://jobs.lever.co/palantir/...",
"merged": true
}
Every result set reports dedup stats: raw_source_hits, canonical_jobs, cross_source_merges,
collapsed, per_source_hits.
| field | notes |
|---|---|
companies | ATS companies: bare slug ("stripe"), domain ("stripe.com"), or "platform:token" ("lever:palantir", "workday:tenant.wd5:Site"). ATS + token auto-detected for slugs/domains. |
keywords, location | LinkedIn search (and keywords also filters HN). |
sources | subset of ["ats","linkedin","hn"]. Default: all three. |
maxPerSource | cap rows per source before merge (default 25, max 200). |
maxResults | cap canonical records after merge (optional). |
remoteOnly, dedupe, includeDescription | booleans; dedupe defaults on. |
search_hn_hiring
Just the current month's Hacker News "Ask HN: Who is hiring?" thread, normalized into the same
schema. The monthly thread id is auto-discovered (it rotates on the 1st of every month) and each
free-text post header is parsed into structured fields. Optional query / remoteOnly filters.
list_sources
The source families, how to address ATS companies, and exactly how the cross-source dedup behaves. No network call.
Sources
| family | coverage | keyless |
|---|---|---|
| ats | Greenhouse, Lever, Ashby, SmartRecruiters, Workday, Recruitee, Workable | ✅ |
| public guest job search (keywords + location) | ✅ (rate-limited on cloud IPs → degrades open) | |
| hn | "Who is hiring?" current-month thread | ✅ |
Every source is wrapped so a single source failing (e.g. LinkedIn's guest endpoint rate-limiting a cloud IP) never fails the whole call — you get the sources that did return. The hosted metered version adds Indeed and rotating residential proxies for volume.
How the dedup works
- Canonical key:
company | title | city, with legal suffixes stripped but seniority and role qualifiers kept — soBackend - InfrastructureandBackend - Defensestay distinct. - Merge: scalar fields are first-non-null in source-rank order; salary is taken whole from the
single richest source (kept internally consistent);
posted_atis the earliest; description is the longest;sources[]accumulates every origin. - Degrade open: a row with no derivable key is emitted as its own record with
merged: false— never silently dropped.
Maintenance
A GitHub Actions smoke workflow runs a real MCP client handshake plus a live cross-source pull on every push and daily. The ATS and HN families gate it; LinkedIn is advisory (cloud-IP rate limits). A genuine upstream shape change fails the roundtrip and opens a tracking issue automatically — the feed is kept working, not left to rot.
License
MIT © Grey Ridge Signals Group LLC
Questions fréquentes
Qu'est-ce que Unified Jobs MCP Server ?
Cross-source deduplicated jobs feed: merge a role across ATS, LinkedIn & HN into one record.
Comment installer Unified Jobs MCP Server ?
Suivez les étapes d'installation de sa documentation, affichée sur cette page et dans son dépôt.
Unified Jobs MCP Server est-il open source ?
Oui. Son code est sur GitHub sous licence MIT.
Qui maintient Unified Jobs MCP Server ?
Il est publié par rezearcher. AI.tn le référence sans le maintenir ni le recommander.
Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.