Skip to main content
jobo-job-search-mcp is a remote MCP server over Jobo’s live job index: millions of listings from employer career sites and 200+ applicant tracking systems. Clients sign in with a Jobo account through OAuth instead of pasting an API key.
This is the jobs MCP server. The analytics MCP server at https://mcp.jobo.world/mcp is a separate product for aggregate, SQL-style queries (product page). Use this one when an assistant should search and cite individual listings.

Get the server

npmjs.com/package/jobo-job-search-mcp
For what all connectors share, see the connectors overview.

Add the hosted server to your client

The hosted server runs at https://jobs-mcp.jobo.world/mcp over Streamable HTTP:
In Claude Desktop, add it under Settings → Connectors. In ChatGPT, add it as a connector in the connector settings. Any other MCP client that supports Streamable HTTP takes the same URL.

Sign in (OAuth)

The first tool call opens a Jobo login in your browser. Approve access, and the client refreshes the token from then on, so there’s no key to copy or rotate.

Self-hosting

This starts the server on $PORT (default 3002). Point your client at http://localhost:3002/mcp, or wherever you deploy it, instead of the hosted URL. Self-hosting does not switch the server to API-key auth. It’s still an OAuth 2.1 resource server gated on Jobo account sign-in. The upstream API validates every token against Jobo’s authorization server, whichever copy of the server forwards it. Configure it with environment variables:

Tools

  • search and fetch follow the ChatGPT Deep Research contract and take only its minimum arguments. Deep Research reads fetch’s text directly and never opens the URL, so text is self-contained prose built from the extracted job fields.
  • search_jobs takes the same filters as POST /api/jobs/search: query, location, sources, companies, work model, employment type, experience level, language, skills, industries, company categories, job categories, job subcategories, occupations, salary, posting and discovery dates, sort, include_facets, and paging. Companies, skills, industries, company categories, job categories, job subcategories, and occupations each have an exclude_ version. Set search_description: false for title-only matching.
  • find_companies turns a company name or domain into its ids. One company can have several ids, one per careers board, and the assistant passes all of them as companies.
  • find_filter_values lists the values of an open-ended filter, such as occupations, job categories, skills, or ATS sources. It turns “registered nurse” into the occupation id search_jobs takes.
  • get_job_details returns the same data as fetch for clients that don’t use the Deep Research contract. include_description appends the raw employer description.

Cost

Searches bill like GET /api/jobs: per job returned, not per tool call. One search call bills at most 20 jobs and one search_jobs call at most 50; an empty result costs nothing. The Unlimited plan doesn’t cover MCP searches (cost model). No subscription is required: a wallet balance is enough. MCP search shares your account’s rate limits and included jobs with REST search. When included jobs and the wallet can’t cover a search, nothing is billed. The tool returns a message with the credits needed and a link that opens a top-up for the amount you’re short. You can also top up under Account → Billing in the dashboard.

Troubleshooting


Related: n8n node

For a scheduled workflow instead of a conversational assistant, the n8n node covers the same search plus a polling trigger.