Claude Code
Run in your terminal (add --scope user to use it in every project):
claude mcp add --transport http joa \
https://api.jobopportunitiesapi.org/mcp \
--header "Authorization: Bearer YOUR_API_KEY"Job Opportunities API
Let Claude, Cursor, VS Code and other AI assistants search live job postings.
Remote server at https://api.jobopportunitiesapi.org/mcp (Streamable HTTP) · key only in the Authorization header
You need a free API key (no card) — get one here.
Register for a free key. Two tools, market_signals and coverage, work without one; search_jobs, get_job, company_hiring and changes_since use it.
Pick your client below and copy its config. The key goes only in the Authorization: Bearer header of the connection, never in the URL or a tool argument.
Try: "Find remote data engineering jobs in the Netherlands posted this week and give me the apply links." The agent calls search_jobs and answers with the employer's own apply_url.
Replace YOUR_API_KEY with your key. More detail, including raw JSON-RPC examples, is on the MCP server page.
Run in your terminal (add --scope user to use it in every project):
claude mcp add --transport http joa \
https://api.jobopportunitiesapi.org/mcp \
--header "Authorization: Bearer YOUR_API_KEY"Settings → Connectors → Add custom connector. Name it Job Opportunities API, paste the URL below, and under Request headers add Authorization with the value Bearer YOUR_API_KEY.
https://api.jobopportunitiesapi.org/mcpPrefer a config file? Claude Desktop can also reach the server through mcp-remote, in claude_desktop_config.json:
claude_desktop_config.json — the header value is passed through env because some clients mangle spaces inside args:
{
"mcpServers": {
"joa": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://api.jobopportunitiesapi.org/mcp",
"--header", "Authorization:${JOA_AUTH_HEADER}"],
"env": { "JOA_AUTH_HEADER": "Bearer YOUR_API_KEY" }
}
}
}Project .cursor/mcp.json, or ~/.cursor/mcp.json for every project:
{
"mcpServers": {
"joa": {
"url": "https://api.jobopportunitiesapi.org/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}.vscode/mcp.json in your workspace. VS Code asks for the key once and stores it securely:
{
"inputs": [
{ "type": "promptString", "id": "joa-key", "description": "Job Opportunities API key", "password": true }
],
"servers": {
"joa": {
"type": "http",
"url": "https://api.jobopportunitiesapi.org/mcp",
"headers": { "Authorization": "Bearer ${input:joa-key}" }
}
}
}mcp_config.json (~/.config/devin/mcp_config.json in current versions; ~/.codeium/windsurf/mcp_config.json in older ones). The key can come from an environment variable:
{
"mcpServers": {
"joa": {
"serverUrl": "https://api.jobopportunitiesapi.org/mcp",
"headers": { "Authorization": "Bearer ${env:JOA_API_KEY}" }
}
}
}ChatGPT connects remote MCP servers through developer mode (Business and Enterprise/Edu workspaces; Pro with read/fetch access): Settings → Apps → Create, paste the server URL and choose the authentication. ChatGPT's setup offers OAuth or no authentication and documents no way to send a fixed API-key header, so with no authentication ChatGPT gets the two keyless tools, market_signals (salary and time-to-fill statistics) and coverage. Job search needs a client that sends the Authorization header, such as Claude, Cursor or VS Code above.
https://api.jobopportunitiesapi.org/mcpA board owner asks Claude "which employers in Lisbon posted product design roles this month, and how fast does that market fill roles?" before deciding which niche to launch next; market_signals answers the second half without a key.
A recruiting agent in Cursor or VS Code calls search_jobs with country, category and remote filters, then get_job for the full advert text of the shortlisted roles, and drafts outreach with the employer's apply_url. company_hiring adds each employer's open-roles trend.
Straight answers about plans, metering and what to show.
market_signals and coverage work with no key. search_jobs, get_job and company_hiring use your normal key and plan; changes_since needs the Growth plan or above, like /v1/changes.
Every job row the API returns counts against your plan's monthly record allowance, exactly as a direct API call would. The free key has a small monthly allowance and needs no card, so start with small page sizes and a daily schedule rather than polling every few minutes. Your key's largest page size is in GET /v1/me (limits.max_page_size).
No. The server accepts the key only as an Authorization: Bearer header on the MCP connection. A key in the URL or a tool argument is ignored, which keeps it out of logs and prompts.
On the employer's own site. Every job carries apply_url, the employer's application page or applicant-tracking-system link. Job Opportunities API never sits between the candidate and the employer, so always use apply_url as the apply button.
Yes, one line where listings are shown publicly: a visible credit "Data: Job Opportunities API" linking to https://jobopportunitiesapi.org (see /terms — storing, displaying, reselling and redistributing within your key's plan limits are all allowed). In addition, jobs listed through Erioun for Teams carry an attribution field (for example "via Erioun for Teams") and a canonical_url: when attribution is present, show it with the listing and link to canonical_url.
No card. The same key works for every integration on this site.