About Unified Jobs MCP Server
Unified Jobs MCP Server searches public jobs across ATS platforms, LinkedIn guest search, and Hacker News, then merges duplicate listings into canonical records. It is for agents that need a consolidated feed with source details and combined posting data.
Key features
- 01Search ATS, LinkedIn, and Hacker News
- 02Merge duplicate roles across sources
- 03Retain source links and merged fields
- 04Continue with results when a source fails
Use cases
- 01Search several job sources in one call
- 02Reduce duplicate results for the same role
- 03Compare source links and salary details
- 04Retrieve available results despite a source outage
MCP support
It exposes unified job search, Hacker News search, and source-listing tools to MCP clients. Search results can combine multiple sources into deduplicated records.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://assetfactory-jobs-x402.sigrunner.workers.dev/mcp/unifiedclaude mcp add --transport http rezearcher-unified-jobs https://assetfactory-jobs-x402.sigrunner.workers.dev/mcp/unified{"mcpServers":{"rezearcher-unified-jobs":{"type":"http","url":"https://assetfactory-jobs-x402.sigrunner.workers.dev/mcp/unified"}}}Open in Cursor{"servers":{"rezearcher-unified-jobs":{"type":"http","url":"https://assetfactory-jobs-x402.sigrunner.workers.dev/mcp/unified"}}}Open in VS Code{"mcpServers":{"rezearcher-unified-jobs":{"type":"http","url":"https://assetfactory-jobs-x402.sigrunner.workers.dev/mcp/unified"}}}{"mcpServers":{"rezearcher-unified-jobs":{"serverUrl":"https://assetfactory-jobs-x402.sigrunner.workers.dev/mcp/unified"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
Details
From the project READMEUnified 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
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.