Fetch an MCP endpoint
const url = 'https://example.com/v1/mcp/endpoints/example';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/v1/mcp/endpoints/example \ --header 'Authorization: Bearer <token>'Returns the wire-safe MCPEndpoint (secrets never cross the wire — secretRef, auth and secretEnv name secrets the runtime resolves inside the deployment). A stdio endpoint’s config.env values read back as [redacted], their names kept.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”MCPEndpointId — deployment-stable string identifier chosen by the caller.
Responses
Section titled “Responses”MCP endpoint.
object
Human-readable display name.
MCP transport variant. stdio — local subprocess (spawn a command). http-sse — the older MCP HTTP+SSE transport (separate POST + SSE endpoints). streamable-http — the Streamable HTTP transport (single endpoint, session id via header).
object
Variables for the server’s process, stored as given. Not for a credential: a name config.headers would refuse, its parts split on _ as well as - (GITHUB_TOKEN, OPENAI_API_KEY, AWS_SECRET_ACCESS_KEY, SLACK_BOT_TOKEN), is refused (invalid-mcp-endpoint, reason credential-in-env). Give it by reference through secretEnv. An empty name, a name with = or a NUL, a value with a NUL, or a value of [redacted] is refused too (reason invalid-stdio-env). Every value reads back as [redacted], its name kept, on endpoints registered before as well, so an export holds the names, not the values.
object
object
Optional distinct SSE endpoint if the server splits them.
Headers sent with every request, as given. Not for a credential: a header named Authorization, Proxy-Authorization or Cookie, or with a -/_-separated part token, secret, password, passwd, apikey, credential, credentials, signature, session, auth, authorization or authentication, or the parts api-key, access-key, private-key, auth-key, subscription-key, functions-key, application-key, app-key, master-key, client-key or partner-key (X-Api-Key, X-Auth-Token), is refused (invalid-mcp-endpoint, reason credential-in-headers). Send it by reference: auth with scheme: header, or secretRef for a bearer. An endpoint registered with one before keeps working, and its value reads back as [redacted].
object
object
Headers sent with every request, as given. Not for a credential: a header named Authorization, Proxy-Authorization or Cookie, or with a -/_-separated part token, secret, password, passwd, apikey, credential, credentials, signature, session, auth, authorization or authentication, or the parts api-key, access-key, private-key, auth-key, subscription-key, functions-key, application-key, app-key, master-key, client-key or partner-key (X-Api-Key, X-Auth-Token), is refused (invalid-mcp-endpoint, reason credential-in-headers). Send it by reference: auth with scheme: header, or secretRef for a bearer. An endpoint registered with one before keeps working, and its value reads back as [redacted].
object
The secret sent as the endpoint’s bearer. HTTP transports only: on a stdio endpoint it’s refused (invalid-mcp-endpoint, reason secret-ref-on-stdio), since a stdio server gets no headers; give it its secret through secretEnv. An endpoint registered with one before keeps it, and the runtime reads it for no one.
object
HTTP Basic: the runtime sends Authorization: Basic base64(<username>:<secret>), with the secret secretRef names (a WordPress Application Password, for one).
object
The user name. Not a secret, and without :.
The secret an MCP endpoint authenticates with: a name in the deployment’s secrets store, resolved at the endpoint’s tenant scope by the runtime (the shape webhooks and providers use). As the endpoint’s own secretRef, it is sent as its bearer; inside auth, it is the scheme’s password, client secret or header value; in secretEnv, a variable’s value for a stdio server. The endpoint keeps only this reference.
object
OAuth 2 client credentials: the runtime asks tokenUrl for an access token (grant_type=client_credentials) as clientId, with the client secret secretRef names, sends it as the endpoint’s bearer, and asks for a new one before it expires (Drupal’s Simple OAuth, for one). The token is never stored.
object
The token endpoint: https, or http to a loopback host (localhost, 127.0.0.1, [::1]).
The secret an MCP endpoint authenticates with: a name in the deployment’s secrets store, resolved at the endpoint’s tenant scope by the runtime (the shape webhooks and providers use). As the endpoint’s own secretRef, it is sent as its bearer; inside auth, it is the scheme’s password, client secret or header value; in secretEnv, a variable’s value for a stdio server. The endpoint keeps only this reference.
object
The scopes to ask for, space-separated, sent as-is. Absent: none asked for.
An audience parameter, for identity providers that need one. Absent: none sent.
How the client authenticates to the token endpoint (RFC 6749 §2.3.1): client_secret_basic (an Authorization: Basic header, the default) or client_secret_post (client_id and client_secret in the form).
Headers of the server’s own, each with a secret: an API key in X-Api-Key, a key and a secret in two headers, or Authorization with a prefix other than Bearer (Token …). The runtime resolves each secretRef when it connects, and refuses to follow a redirect with them, as it does for every auth.
object
One header a header auth sends: <name>: <prefix><secret>.
object
An HTTP header name, once per auth (case-insensitive). Not one the MCP transport or HTTP sets itself (Host, Content-Type, Content-Length, Accept, Connection, Mcp-Session-Id, Mcp-Protocol-Version, Last-Event-ID, traceparent, tracestate, …): reason invalid-auth.
The secret an MCP endpoint authenticates with: a name in the deployment’s secrets store, resolved at the endpoint’s tenant scope by the runtime (the shape webhooks and providers use). As the endpoint’s own secretRef, it is sent as its bearer; inside auth, it is the scheme’s password, client secret or header value; in secretEnv, a variable’s value for a stdio server. The endpoint keeps only this reference.
object
Text sent before the secret, such as Token or ApiKey , without control characters. Absent: none. Not a secret: it reads back as registered.
A stdio server’s secrets, as variables of its process: each variable’s name (GITHUB_TOKEN) with the secret its value is read from, at the endpoint’s recorded scope, when the runtime starts the server. The value is never stored or answered. 1 to 16 variables, each name without =, and none also in config.env (invalid-mcp-endpoint, reason secret-env-twice); otherwise reason invalid-secret-env. Each secret counts for the provider-key guard and the env a runtime serves, as secretRef’s does. stdio only: on an HTTP endpoint it’s refused (reason secret-env-on-http). An older runtime refuses the field as unknown. A runtime rolled back to one without it starts the server without these variables, so the server fails its own calls; no value is exposed.
object
The secret an MCP endpoint authenticates with: a name in the deployment’s secrets store, resolved at the endpoint’s tenant scope by the runtime (the shape webhooks and providers use). As the endpoint’s own secretRef, it is sent as its bearer; inside auth, it is the scheme’s password, client secret or header value; in secretEnv, a variable’s value for a stdio server. The endpoint keeps only this reference.
object
Optional pass-through to the MCP client serverInfo.instructions.
Optional caller-defined metadata bag.
object
Send the W3C traceparent of the run calling a tool to this endpoint, as a request header, so the server’s logs can be matched to the run. Ids only, never content. Default false. HTTP transports only: true on a stdio endpoint is refused (invalid-mcp-endpoint, reason invalid-send-traceparent). An older runtime ignores it and sends none.
Where each secret it names is read, by name: recorded by the server when it was registered, never sent by a caller. null: none usable (the registrant administers no scope the secret could be read at), until an admin records it again: a tool by publishing a new version, an MCP endpoint by unregistering it and registering it again. Absent on items registered before it was recorded, or on a runtime without a secrets store.
Example
{ "transport": "stdio", "config": { "transport": "stdio" }, "auth": { "scheme": "basic" }, "secretScopes": { "additionalProperty": { "kind": "tenant" } }}Missing / malformed / expired / revoked bearer token.
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}No MCP endpoint with that id under this workspace.
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}The database was too busy to answer in time (database-busy); Retry-After (whole seconds) says when to try again.
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}