jobstack-mcp
RemoteAbout jobstack-mcp
jobstack-mcp is a remote MCP adapter for JobStack, for clients that need to search and retrieve job postings from unified feeds and public ATS boards. It combines six source engines into a common job format and provides two read-only tools.
Key features
- 01Search jobs across six source engines
- 02Filter by keywords and location
- 03Filter for remote roles
- 04Paginate and sort search results
- 05Retrieve a job by source and ID
Use cases
- 01Search roles across job feeds and ATS boards
- 02Narrow listings by location or remote status
- 03Retrieve details for a job from search results
MCP support
Exposes JobStack's search and job-retrieval endpoints as two read-only MCP tools over streamable HTTP at `/mcp`. Calls are forwarded to the jobs API, and its JSON response is returned as the tool result.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://jobstack-mcp.vercel.app/mcpclaude mcp add --transport http isaiahdupree-jobstack https://jobstack-mcp.vercel.app/mcp{"mcpServers":{"isaiahdupree-jobstack":{"type":"http","url":"https://jobstack-mcp.vercel.app/mcp"}}}Open in Cursor{"servers":{"isaiahdupree-jobstack":{"type":"http","url":"https://jobstack-mcp.vercel.app/mcp"}}}Open in VS Code{"mcpServers":{"isaiahdupree-jobstack":{"type":"http","url":"https://jobstack-mcp.vercel.app/mcp"}}}{"mcpServers":{"isaiahdupree-jobstack":{"serverUrl":"https://jobstack-mcp.vercel.app/mcp"}}}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
2| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | integer | No | Max results in the merged page, clamped 1-100. Default 20. |
| offset | integer | No | Zero-based offset into the merged result set for pagination. Default 0. |
| remote | boolean | No | Filter to remote roles when true. Only sources that expose an explicit remote signal apply it; others ignore it. |
| sources | string | No | Comma-separated engine keys to restrict the fan-out to. Any of: usajobs, adzuna, jooble, themuse, reed, ats. Omit for all six. |
| keywords | string | No | Free-text search terms (job title, skill, company, etc.). Optional — omit to browse the latest postings. |
| location | string | No | Free-text location filter (e.g. "Washington, DC" or "London"). Applied upstream where the source supports it. |
Details
From the project READMEjobstack-mcp
A remote MCP (Model Context Protocol) connector for JobStack — the unified jobs-search API (jobs-api) that fuses official job-board feeds and public ATS boards (USAJOBS, Adzuna, Jooble, The Muse, Reed, and Greenhouse/Lever/Ashby/Workable/SmartRecruiters behind one ats engine) into one flat Job shape.
Live: https://jobstack-mcp.vercel.app/mcp — 2 tools, exposed over the MCP streamable-HTTP transport. Since the upstream jobs-api deployment is metered (RapidAPI/Apify) and its /v1/* routes sit behind a RapidAPI proxy-secret guard, this connector authenticates its own outbound calls with that same secret (JOBSTACK_MCP_PROXY_SECRET, sent as the X-RapidAPI-Proxy-Secret header) and applies a soft per-IP rate limit (JOBSTACK_MCP_RATE_LIMIT, default 30 tool-calls/hour, in-memory) so the free MCP tier stays a discovery channel rather than an unmetered bypass of the paid listing — see lib/ratelimit.js.
What this is
JobStack is a plain REST API. This repo is a thin adapter that exposes each endpoint as a discoverable, typed MCP tool so MCP clients (Claude, ChatGPT, any MCP-aware agent) can call it directly, speaking the MCP streamable-HTTP transport at a single /mcp endpoint. It has no business logic of its own — every tool call is a pass-through fetch to jobs-api, and the JSON response is handed back verbatim as the tool result.
Tools
| Tool | JobStack endpoint | Description |
|---|---|---|
search_jobs | GET /v1/jobs/search | Search + merge job postings across all (or a sources= subset of) engines, sorted newest-first, paginated. |
get_job | GET /v1/jobs/{source}/{id} | Fetch one job by its source engine + native id (composite board:company:nativeId for ats). |
Both tools are read-only and annotated { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }.
search_jobs inputs
keywords(string, optional) — free-text search terms.location(string, optional) — free-text location filter.remote(boolean, optional) — filter to remote roles where the source signals it.sources(string, optional) — comma list of engine keys:usajobs, adzuna, jooble, themuse, reed, ats. Omit for all six.limit(int 1-100, optional, default 20).offset(int ≥0, optional, default 0).
get_job inputs
source(enum:usajobs | adzuna | jooble | themuse | reed | ats).id(string) — native upstream id from a search result; forats, the compositeboard:company:nativeIdstring.
Config
JOBSTACK_MCP_API_BASE_URL— upstream base URL. Defaulthttps://jobs-api-gamma.vercel.app.JOBSTACK_MCP_PROXY_SECRET— the RapidAPI proxy secret forwarded asX-RapidAPI-Proxy-Secreton outbound calls (needed for the production origin, which guards/v1/*).JOBSTACK_MCP_RATE_LIMIT— soft per-IP tools/call cap per hour. Default 30.
Local development
npm install
npm run dev # starts local-server.js on http://localhost:3900
npm run smoke # in another terminal — real HTTP/JSON-RPC smoke test
test/smoke.mjs drives the running server over real HTTP/JSON-RPC and verifies GET /health, initialize (serverInfo.name === "jobstack"), and tools/list (the 2 tools with their zod-derived schemas), then attempts a live search_jobs tools/call. Without JOBSTACK_MCP_PROXY_SECRET set locally the upstream origin returns 403 (its RapidAPI guard) — an expected upstream-auth condition the smoke test reports as a soft warning while still verifying the full protocol surface.
Deploy
cd /Users/isaiahdupree/Software/jobstack-mcp
npx vercel --yes --prod
After deploy, the MCP connector URL to register in Claude/ChatGPT/any MCP client is https://<deployment-domain>/mcp.
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.