Your agent alreadyknows how to call this.
A tool you deploy answers MCP over Streamable HTTP and plain REST. Anything that speaks either one reaches it with a URL and a key, and no code from us.
Every tool listed below works today. Nothing here is planned.
Claude Code
MCPOne `claude mcp add --transport http` command with the key as a header.
Claude Desktop
MCPAdd the server to its JSON config with an Authorization header.
Some clients spell the block "servers" rather than "mcpServers", and some want "type": "http".
Cursor
MCPSame JSON config as Claude Desktop.
Windsurf
MCPSame JSON config as Claude Desktop.
n8n
MCPMCP Client Tool node, transport HTTP Streamable, Bearer authentication.
Make sure the transport really is HTTP Streamable. A tool offers no SSE stream, so a client that quietly falls back to SSE connects and then finds nothing.
Dify
MCPAdd the endpoint as an MCP server with a Bearer token.
Flowise
MCPCustom MCP server: the URL plus an Authorization header.
LangChain
MCPMultiServerMCPClient with transport streamable_http and a headers dict.
OpenAI Agents SDK
MCPMCPServerStreamableHttp with the URL and headers.
Claude API, tool use
RESTRead the tool's schema, hand it to the model as a tool, POST what it asks for.
Anything else
RESTOne POST with a JSON body. No SDK, no client library.
The exact snippet for each, with your tool's URL and a key, is on the tool's page in the app once you deploy one. See what the platform does.
Two things that look like a broken server
Both are the MCP specification working as intended, and both cost people an afternoon.
- Accept has to list both types
- A request must say it accepts application/json and text/event-stream, even though a tool always answers with JSON and never opens a stream. Without both, the answer is 406.
- GET answers 405, and should
- A tool has no event stream to open, and the spec says a server that offers none must say so with 405. A client that treats that as a failure is looking for the older transport.