MCP server Streamable HTTP
Give your assistant a way to search the RemoteJobs.org catalog. Connect once, discover the tools, and find opportunities in conversation.
Free, read-only access. No API key.
{
"name": "discover_jobs",
"arguments": {
"search": {
"text": "react",
"filters": {
"category": "programming"
}
},
"take": 5
}
}01 / Connection
In a client that supports remote MCP servers, add an HTTP server named RemoteJobs and paste this endpoint. Choose Streamable HTTP. Public catalog searches need no authentication. To use private Career Agent tools, connect your account through the authorization page your client opens.
https://remotejobs.org/mcpLong lines scroll horizontally.Clients use different configuration formats. This mcpServers example works in clients that accept type: "http"; consult your client’s documentation for its exact format.
{
"mcpServers": {
"remotejobs": {
"type": "http",
"url": "https://remotejobs.org/mcp"
}
}
}Long lines scroll horizontally.Use the RemoteJobs.org endpoint above. The JSON API lives at a separate URL: see the API guide.
02 / Tools
| Tool | What it returns |
|---|---|
discover_jobs | Compact job summaries, listing links, ranking metadata, and cursor continuation. The total is unknown; coverage describes a bounded result window. |
get_job | Selected public sections for one job: summary, description, and requirements. Descriptions use Markdown. |
search_jobs | The existing paginated job search with descriptions, company details, and an exact indexed total. Its arguments and response remain supported. |
list_categories | Available category names and slugs. Takes no arguments. Use a returned slug in a search filter. |
| Argument | Usage |
|---|---|
search | An object with optional text (up to 500 characters) and filters, such as category, type, country, and salary criteria. Use tool discovery for the complete schema. |
take | From 1 to 20 summaries; defaults to 10. A response may contain fewer summaries to stay within its byte limit. |
cursor | For continuation, pass the returned next_cursor with the same search and take. Do not construct an offset or modify the cursor. |
Discovery returns jobs, next_cursor, previous_cursor, total: { kind: "unknown" }, and coverage. Stop when next_cursor is null. This exhausts the retained result window, not the entire matching catalog.
Call get_job with one returned id and the sections you need. Its structured payload is bounded to 32 KiB. For a continued Markdown description, pass its next_cursor with the same id and sections. Join description text in order; the returned offsets count Unicode code points, and complete identifies the final part.
Cursors expire after ten minutes. If a discovery or detail call reports status 409 (results changed) or 410 (expired), restart without a cursor. Errors appear as isError: true with structured error.status; they are not empty results. The existing search_jobs tool uses the v1 query arguments and response fields, including limit and offset.
03 / Career Agent
Career Agent tools use the same server URL. A client with OAuth support opens your private account to request permission. Review its identity, callback address, and requested access before connecting. You can revoke it from Connected apps.
Connected tools can read your access and profile, propose fact corrections, find matches, prepare and update applications, request your review, follow operations, and cancel pending work. Preparation and submission require current Career Agent access and processing allowance. Review the offer and supported forms.
You approve the facts and the exact application on RemoteJobs. A tool cannot confirm facts or approve its own submission. Your approval identifies the connected client, employer, materials, and answers. An uncertain outcome is never permission to send another application.
Use the server’s tool discovery for current argument schemas. Every mutation needs a stable idempotency key. Keep the same key when retrying an ambiguous response, and read the returned operation before attempting anything else.
04 / First search
Try: “Use RemoteJobs to find five React roles in programming. Include company names, locations, and listing links.” Your client discovers the tools and decides which calls to make.
Review the listing before applying. Remote can still mean a specific country or time zone. Salary and location may be missing. Public search provides listings and links. Private Career Agent submission is a separate authorized workflow.
Install @modelcontextprotocol/sdk in your Node.js project, then connect with its Streamable HTTP transport.
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const client = new Client({ name: "my-job-tool", version: "1.0.0" });
await client.connect(new StreamableHTTPClientTransport(
new URL("https://remotejobs.org/mcp")
));
try {
const search = { text: "react", filters: { category: "programming" } };
const result = await client.callTool({
name: "discover_jobs", arguments: { search, take: 5 }
});
if (result.isError) throw new Error(JSON.stringify(result.content));
const page = result.structuredContent;
console.log(page.jobs); // Compact summaries; total.kind is "unknown".
if (page.next_cursor) {
const next = await client.callTool({
name: "discover_jobs",
arguments: { search, take: 5, cursor: page.next_cursor }
});
if (next.isError) throw new Error(JSON.stringify(next.content));
console.log(next.structuredContent.jobs);
}
if (page.jobs.length) {
const detail = await client.callTool({
name: "get_job",
arguments: { id: page.jobs[0].id, sections: ["summary", "description"] }
});
if (detail.isError) throw new Error(JSON.stringify(detail.content));
console.log(detail.structuredContent);
}
} finally {
await client.close();
}Long lines scroll horizontally.05 / Limits & behavior
The server supports Streamable HTTP with JSON responses. It has no persistent MCP transport sessions or event stream. Private Career Agent operations retain their workflow state independently. Client and server negotiate a supported protocol version, including 2025-11-25.
Keep usage below 200 requests per hour per IP address. Rate limiting is best-effort; this is not a guaranteed quota. All MCP POST requests count, including connection and discovery. API and MCP requests are limited separately. Authenticated MCP requests share a limit for the account and connected client, while processing and submission allowances are enforced separately.
A failed query returns a tool error, not an empty list. HTTP 429 includes Retry-After. Discovery has an unknown total and a bounded result window; follow its cursors. The existing search_jobs tool returns an exact indexed total or an error. Its pages and totals can change between calls.
New searches read current indexed listings. Discovery and detail continuations retain a result window for up to ten minutes and validate returned jobs before serving them. Listings can change, and new or updated listings may take time to appear.
Keep listing links intact and credit RemoteJobs.org when displaying results. Our terms of service apply to both interfaces.