Remote Jobs Center
by mdwells
README.md
# Remote Jobs Center MCP Server
A hosted [Model Context Protocol](https://modelcontextprotocol.io) server for searching
current **remote / work-from-home jobs** — by category, region, perk, or company. Built so
any MCP-enabled assistant or agent can query the [Remote Jobs Center](https://remotejobscenter.com)
corpus directly and return ready-to-apply links.
Unlike single-board servers, the corpus is **aggregated and deduped from multiple vetted remote
job boards and employer career sites**, then enriched with perks, skills, seniority, and AI-role
flags — so a single query spans the whole remote market, not one source.
- **Endpoint:** `https://remotejobscenter.com/mcp`
- **Transport:** Streamable HTTP (JSON-RPC 2.0 over POST) — stateless, no auth
- **Registry:** [`com.remotejobscenter/remote-jobs`](https://registry.modelcontextprotocol.io/v0/servers?search=remotejobscenter) (official MCP registry)
## Connect
**Claude (web/desktop):** Settings → Connectors → **Add custom connector** → URL `https://remotejobscenter.com/mcp`. No authentication required.
**Any MCP client** that supports Streamable HTTP: point it at the endpoint above.
## Tools
| Tool | Parameters | Returns |
|------|-----------|---------|
| `search_remote_jobs` | `query`, `category`, `region`, `perk`, `company`, `limit` (all optional) | `{ total, returned, jobs[] }` |
| `get_job` | `slug` (required) | `{ job }` or `{ error }` |
| `list_categories` | — | `{ categories: [{ category, count, url }] }` |
| `list_collections` | — | `{ collections: [{ perk, count, url }] }` |
| `list_companies` | `category` (optional) | `{ companies: [{ company, count }] }` |
**Filter values**
- `category`: `software`, `data`, `design`, `marketing`, `sales`, `support`, `writing`, `product`, `finance`, `hr`
- `region`: `us`, `uk`, `europe`, `canada`, `latam`, `apac`, `worldwide`
- `perk`: `tuition-reimbursement`, `six-figure`, `no-degree`, `entry-level`, `four-day-week`, `visa-sponsorship`, `async`, `equity`, `unlimited-pto`
- `limit`: default `20`, max `50`
## Job shape
```json
{
"slug": "acme-senior-backend-engineer",
"title": "Senior Backend Engineer",
"company": "Acme",
"category": "software",
"region": "us",
"location": "United States (Remote)",
"salaryMin": 140000,
"salaryMax": 180000,
"perks": ["six-figure", "equity"],
"source": "Employer careers",
"postedAt": "2026-06-10T00:00:00.000Z",
"applyUrl": "https://...",
"url": "https://remotejobscenter.com/jobs/acme-senior-backend-engineer/"
}
```
`get_job` additionally includes a short `excerpt`.
## Request / response examples
All requests are JSON-RPC 2.0 over `POST https://remotejobscenter.com/mcp`.
**Initialize**
```bash
curl -s https://remotejobscenter.com/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05"}}'
```
**List tools**
```bash
curl -s https://remotejobscenter.com/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
```
**Search**
```bash
curl -s https://remotejobscenter.com/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"search_remote_jobs","arguments":{"query":"python","region":"us","limit":5}}}'
```
A `tools/call` result wraps the tool's JSON output in a text content block:
```json
{ "jsonrpc": "2.0", "id": 3, "result": {
"content": [ { "type": "text", "text": "{\"total\":42,\"returned\":5,\"jobs\":[...]}" } ]
} }
```
## Run locally (stdio)
The hosted endpoint above is the canonical deployment. For local use or registry introspection,
this repo also ships a standalone **stdio** MCP server with the same tools and data source.
```bash
npm install
npm start # runs src/server.mjs over stdio
```
Point any stdio MCP client at `node /path/to/remotejobscenter-mcp/src/server.mjs`.
### Docker
```bash
docker build -t remotejobscenter-mcp .
docker run -i --rm remotejobscenter-mcp
```
The container speaks MCP over stdio, so registries (e.g. Glama) and MCP clients can start it and
introspect its tools directly.
## Implementation
Two equivalent surfaces, one data source:
- **Hosted** — a single [Cloudflare Pages Function](functions/mcp.js) deployed at `/mcp`, speaking
Streamable HTTP (JSON-RPC 2.0 over POST). Stateless, read-only, no auth. A `GET` with
`Accept: text/event-stream` returns `405` (per the Streamable HTTP spec, since the server does
not stream); a plain `GET` returns a small info document.
- **Local / containerized** — [`src/server.mjs`](src/server.mjs), a stdio MCP server using the
official [`@modelcontextprotocol/sdk`](https://github.com/modelcontextprotocol/typescript-sdk).
Both read the same public corpus the website publishes at
`https://remotejobscenter.com/api/jobs.json` (cached ~10 minutes), so there is one source of truth.
## License
MIT — see [LICENSE](LICENSE).
TDQS
A4.2/5.0
Scored across 5 tools
Disambiguation5/5
Each tool targets a distinct entity: categories, jobs, collections, and companies. The purposes are clearly separated, with search_remote_jobs as the primary discovery mechanism and get_job for details.
Naming Consistency5/5
All tools follow a consistent verb_noun pattern (list_*, search_*, get_*). The naming is predictable and uniform, making the API easy to navigate.
Tool Count5/5
Five tools is well-scoped for a remote job board, covering both browsing (categories, collections, companies) and job-specific actions (search, get). No redundancy or bloat.
Completeness5/5
The surface covers the full discovery-to-detail flow: list reference data, search jobs, and retrieve full job details. There are no obvious dead ends or missing critical operations.
Maintenance
ActivityInactive
ResponsivenessNo issues