No API key 5 live boards MIT license Python 3.9+

Give any AI agent live remote-job data — the Remote Jobs MCP server

A Model Context Protocol (MCP) server that plugs any MCP client — Claude Desktop, Cursor, Claude Code, or your own agent — directly into Remote Jobs API: live, normalized remote-job listings from 5 boards, one keyless endpoint, a skill fit-score, and a live salary band per query.

Live jobs right now
340
Source boards
5
Auth required
None
Tools exposed
3

Why an agent wants this

Most agents can already reach the web, but raw job-board pages are inconsistent, unstructured, and rate-limited. Remote Jobs API normalizes them into one stable JSON schema with parsed salaries and a skill fit-score. The MCP server wraps that endpoint as three clean tools, so an agent can ask — "what do senior Python backend roles pay remote?" — and get a structured answer in one call, no scraping, no key, no signup.

Three tools

ToolWhat it returnsExample question it answers
search_jobsLive jobs filtered by skills and a salary floor, ranked by fit-score"Find senior backend Python roles paying $100k+"
salary_bandMin / median / max annual salary floor for a skill set"What does a remote data engineer pay right now?"
market_statsFeed health: which boards are live and how many jobs total"How many remote jobs are on the feed this second?"

Install & connect

One dependency (the official mcp Python SDK), then point your client at the stdio server:

pip install mcp remote-jobs-api
remote-jobs-api-mcp   # launches the MCP server over stdio

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "remote-jobs": {
      "command": "remote-jobs-api-mcp",
      "env": { "RJA_BASE_URL": "https://remote-jobs-api.tten.no" }
    }
  }
}

Any MCP client that spawns a stdio server (Cursor, Claude Code, OpenRouter harnesses, custom agents) uses the same entry point. Override RJA_BASE_URL to self-host; the default is the free public, keyless instance.

What an agent actually gets (live this page)

From search_jobs("python,backend", min_salary=100000) — real listings, live at page build time:

[
  {"title": "Senior Software Engineer Case Execution", "company": "Pivotal Health", "fit_score": 30, "salary_min": 190000},
  {"title": "Staff Software Development Engineer SDM", "company": "Delinea", "fit_score": 15, "salary_min": 150000},
  {"title": "Senior Director, Community", "company": "HackerOne", "fit_score": 0, "salary_min": 247000}
]

fit_score is how well a listing matches the skills you passed (0–100); the feed also discloses structured salary_min/salary_max so salary questions are answerable, not guesswork.

Under the hood

Self-host (optional) — the MCP server calls a base URL, so you can run your own feed and point any client at it:
git clone https://github.com/earnnova-dev/remote-jobs-api
cd remote-jobs-api
docker compose up -d      # serves the API
RJA_BASE_URL=http://localhost:8000 remote-jobs-api-mcp