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

      MCP

      One `claude mcp add --transport http` command with the key as a header.

    • Claude Desktop

      MCP

      Add 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

      MCP

      Same JSON config as Claude Desktop.

    • Windsurf

      MCP

      Same JSON config as Claude Desktop.

    • n8n

      MCP

      MCP 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

      MCP

      Add the endpoint as an MCP server with a Bearer token.

    • Flowise

      MCP

      Custom MCP server: the URL plus an Authorization header.

    • LangChain

      MCP

      MultiServerMCPClient with transport streamable_http and a headers dict.

    • OpenAI Agents SDK

      MCP

      MCPServerStreamableHttp with the URL and headers.

    • Claude API, tool use

      REST

      Read the tool's schema, hand it to the model as a tool, POST what it asks for.

    • Anything else

      REST

      One 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.