https://api.routeur.app/mcp, add the key header, and it will find 38 tools, 7 resources plus one template, and 3 prompts. This page shows the protocol at the level of HTTP requests, so you can check a client’s behaviour or write your own, and the mcp-remote bridge for clients that only launch stdio servers. Every example was run against the live server on 2026-09-17.
The endpoint
POST https://api.routeur.app/mcp, JSON-RPC 2.0 over Streamable HTTP. The server is stateless: it sets no Mcp-Session-Id, keeps nothing between requests, answers GET /mcp with 405, and returns plain application/json rather than an event stream because no tool streams.
The protocol with curl
Initialize
instructions text is the full three-paragraph summary the server gives every client):
2026-07-28 is answered with 2025-11-25; the server negotiates down to the newest revision both sides speak. Because the server is stateless, the notifications/initialized message is accepted (202, no body) but changes nothing, and initialize itself is not required before tools/call: every example on this page was run as a single request.
List the tools
name, title, description, inputSchema and annotations {"readOnlyHint": true, "idempotentHint": true, "destructiveHint": false, "openWorldHint": false}. Tool descriptions state what each call costs. tools/list is authenticated but not metered.
Call a tool
content[0].text for clients that only read text, and as structuredContent for clients that read objects.
next_cursor back as cursor for the next page. Endpoint tools (get_market, list_relations, …) return the REST body unchanged, including its data envelope and graph_run.
Errors are tool results, not protocol errors
A failed call comes back withisError: true and a readable message, so the model can act on it; the HTTP status is still 200. Observed:
Protocol-level mistakes are reported differently, as observed:
Resources and prompts
resources/list returns routeur://categories, routeur://concepts/glossary, routeur://concepts/leads-and-fees, routeur://concepts/prices, routeur://concepts/relations, routeur://openapi.json and routeur://topics; concept pages are text/markdown, the rest application/json. prompts/get returns one user message whose text is a numbered plan naming the tools to call and the caveats to state.
SDK clients
Any MCP SDK works: use its Streamable HTTP transport and add the header.TypeScript
Go
go-sdk v1.8.0; the TypeScript transport options are the SDK’s documented requestInit form.
stdio-only clients
Clients that can only launch a local process reach the server throughmcp-remote, which speaks stdio to the client and Streamable HTTP to Routeur. Pass the header through an environment variable: several clients do not escape spaces inside args, and Authorization: Bearer ... has one.
--transport http-only skips the fallback to the older SSE transport, which Routeur does not serve. mcp-remote runs on your machine and holds the key in its process; the traffic still goes to api.routeur.app over TLS. Prefer a native remote connection where your client supports one.
Discovery
https://api.routeur.app/.well-known/mcp.json (also served at /.well-known/mcp/server-card.json, and mirrored at https://routeur.app/.well-known/mcp.json) describes the server without a key: endpoint, transport, protocol versions, how to authenticate, capabilities {tools, resources, prompts, readOnly} and the name and first line of every tool. https://routeur.app/llms.txt and /llms-full.txt say the same in plain text for agents that read a site before using it.
Related
- Agents & MCP: what a tool call costs and the three surfaces.
- Tool reference: every tool’s arguments, defaults and ranges.
- Authentication, Rate limits, Errors and conventions.