MCP endpoint
Discover and invoke the caller-specific CoreSpeed tool surface through one authenticated Streamable HTTP endpoint.
Every connector and built-in tool is served through one MCP endpoint:
POST https://api.corespeed.io/mcpAuthenticate with browser sign-in, a CoreSpeed key, or a user session JWTConnect with OAuth (browser sign-in)
Modern MCP clients — Claude Code, Cursor, VS Code — connect with only the URL:
on the first call they receive a 401 that advertises CoreSpeed's
protected-resource metadata, which names the authorization server; the client
registers itself, opens your browser to sign in, and stores the token. Nothing
to copy or rotate.
{
"mcpServers": {
"corespeed": {
"type": "http",
"url": "https://api.corespeed.io/mcp"
}
}
}POST /mcp with no token returns a WWW-Authenticate header pointing at the RFC 9728 protected-resource metadata
the client registers with the authorization server (via CIMD or DCR where enabled) and you approve access in the browser
the client calls /mcp with the issued token; organization and budget resolve as usual
The gateway issues no tokens itself — the authorization server owns
registration, consent, and issuance. The token is scoped to this /mcp
resource (RFC 8707), so it cannot be replayed against another server.
Connect with an API key
Headless and CI clients send a long-lived CoreSpeed key or a user session JWT
in the Authorization header instead of running the browser flow:
{
"mcpServers": {
"corespeed": {
"type": "http",
"url": "https://api.corespeed.io/mcp",
"headers": {
"Authorization": "Bearer sk-cs-..."
}
}
}
}The transport is Streamable HTTP and stateless. Send one JSON-RPC call per HTTP request; JSON-RPC batches are rejected.
Tool identity
Wire tool names use <capability-id>__<operation> with a double underscore.
Examples include memory__remember and memory__search_memory; connected
software follows the same convention.
Never construct a complete tool inventory in application code. Run
tools/list after authentication and use the returned names and input schemas.
The result is filtered for the caller's connected accounts and enabled
built-ins.
Call a tool
Organization billing holds, suspensions, and API-key spend caps are checked
before a metered tool executes. These failures can be returned as an MCP
isError result inside an HTTP 200 response — the HTTP status stays 200, so
check result.isError too.
The request body, response fields, and every status code live in the tools/call reference, with samples in curl, TypeScript, Python, and Go.