MCP spec: token in the header on every request, never the URL
The 2025-11-25 MCP spec forbids access tokens in the URL query string and wants a Bearer header on every request. Keep the Sume key in headers, not the URL.

Do not put a Sume credential in the MCP server URL. The 2025-11-25 authorization section of the MCP specification says access tokens must not be sent in the URI query string, and that the Authorization: Bearer header goes on every HTTP request, including each one in the same session. A URL such as https://mcp.sume.com/mcp?key=... would break the first rule, and it would also put the key in proxy logs, browser history and shell history.
What the spec asks, what Sume accepts
| Topic | Spec | Sume |
|---|---|---|
| Token location | Authorization: Bearer on every request; never in the query string | API key as Authorization: Bearer or x-api-key; OAuth metadata lists the header method only |
| Resource parameter | Clients send the RFC 8707 resource parameter in authorization and token requests | Audience is https://mcp.sume.com/mcp |
| PKCE | S256; clients refuse a server that does not advertise it | S256 is the supported method |
| Redirect URIs | localhost or HTTPS | https anywhere, or http on localhost and 127.0.0.1 |
| Insufficient scope | 403 insufficient_scope; retry only a few times | Write tools return insufficient_scope with required_scope mcp:write |
Why the query string is worse than it looks
A URL is copied everywhere a header is not. Web servers and CDNs log request lines, error trackers capture the URL of a failed request, and people paste URLs into chat. A token in the query string therefore leaks through channels nobody treats as secret storage.
Some tools that wrap MCP, such as automation platforms, offer a URL field and no header field. If yours is one of them, prefer a client that supports OAuth or a custom header over embedding the key. The Sume docs say not to paste API keys into chat either, and OAuth is the preferred path for interactive clients.
Checklist for a new client
If the client fully supports the authorization section, you should not need a key at all: it discovers Sume's protected resource metadata, registers, and signs you in with PKCE. The access token lasts one hour, and Sume does not issue refresh tokens, so a new sign-in follows.
- Confirm the client sends the key in a header, not a URL parameter.
- Use x-api-key if the client cannot set an Authorization header.
- Treat any URL that contains a key as already leaked and rotate the key.
- After connecting, call mcp_health to see which credential and scopes the session has.
If a key already leaked in a URL
Assume the key is exposed from the moment it appeared in a URL that anything else could have logged. Create a new key in the dashboard, switch your clients to it in a header, and revoke the old one. Then check where the URL was saved: shell history, chat threads, issue trackers and CI logs are the usual places.
Sume's safe-automation guidance lists API keys and signed URLs among the things that should never be logged, so scrub them from your own logs as well as from the client config.
Sources
Related posts
More in Integrations
- MCP spec: tool annotations are untrusted. What that means for Sume
The MCP spec says clients must treat tool annotations as untrusted unless they come from a trusted server. Treat Sume as trusted only for your own workspace.
- MCP tool error or JSON-RPC error: where Sume's failures land
Sume returns tool failures as results with isError true and keeps JSON-RPC errors for protocol faults, per the 2025-11-25 MCP spec. Here is the split.
- Perplexity Agent API MCP tool: server_label rules for Sume
Perplexity MCP tool: server_label must match ^[a-zA-Z0-9_-]{1,64}$. A Sume entry that passes, with authorization, headers and allowed_tools.
- Perplexity MCP authorization field with Sume: one-hour token
Perplexity passes the authorization value to the MCP server as an access token. A Sume OAuth token lasts one hour with no refresh, so use an API key unattended.
Written by Sume