Skip to content

Implement MCP Streamable HTTP Support in same manner as SSE & stdio #4218

@taylorwilsdon

Description

@taylorwilsdon

What problem does this proposed feature solve?

The Model Context Protocol spec deprecated Server-Sent Events (SSE) in favor of Streamable HTTP back in march and many servers have made the move. Until released, Roo code cannot interact with these servers.

A number of people are requesting this, in issues #4216, #3627 and #2131 as well as places like reddit

Describe the proposed solution in detail

The existing pinned version of the client SDK already supports Streamable HTTP transport—this would simply expose that capability in our extension alongside the existing stdio and SSE options.

New transport type streamable-http is now accepted in workspace settings and validated just like stdio and sse.

Runtime parity – McpHub can create, monitor, and recover Streamable HTTP connections with the same UX feedback you’re used to for SSE and stdio.

Zero-config upgrades – projects already running an MCP server in Streamable HTTP mode can adopt this feature by adding

{
  "mcpServers": {
     "Example": {
      "type": "streamable-http",
      "url": "http://localhost:8000/mcp/"
      }
  }
}

to their server block—no extension upgrade to the server itself is needed.

Technical considerations or implementation details (optional)

Area Summary
Schema validation ServerConfigSchema now recognises streamable-http and enforces the presence of url/headers while forbidding command/args/env.
Runtime wiring New branch in McpHub.connect() instantiates StreamableHTTPClientTransport, wires onerror/onclose, and updates connection status handling.
DX improvements Clear error messages for mixed or missing fields, and explicit guidance to set type when a url is provided.
+ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
...
- const typeErrorMessage = "Server type must be either 'stdio' or 'sse'"
+ const typeErrorMessage = "Server type must be 'stdio', 'sse', or 'streamable-http'"
...
- transport: StdioClientTransport | SSEClientTransport
+ transport: StdioClientTransport | SSEClientTransport | StreamableHTTPClientTransport
...
+   } else if (configInjected.type === "streamable-http") {
+       transport = new StreamableHTTPClientTransport(new URL(configInjected.url), { … })
+       …
+   }

Describe alternatives considered (if any)

None are applicable

Additional Context & Mockups

Migration / Breaking changes:
None—existing stdio and SSE configurations remain untouched.

Preview:

Image

Proposal Checklist

  • I have searched existing Issues and Discussions to ensure this proposal is not a duplicate.
  • This proposal is for a specific, actionable change intended for implementation (not a general idea).
  • I understand that this proposal requires review and approval before any development work begins.

Are you interested in implementing this feature if approved?

  • Yes, I would like to contribute to implementing this feature.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions