Skip to main content
Glama
mdwells

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