Skip to content

Commit a549601

Browse files
authored
Add Streamable HTTP and update clients table (#22)
* Add Streamable HTTP support * Update supported clients * Add http example for Copilot in JetBrains
1 parent f9d311a commit a549601

File tree

5 files changed

+93
-44
lines changed

5 files changed

+93
-44
lines changed
Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1-
| Client | Supported | Auto-discovery | Notes |
2-
| -------------------------- | --------- | -------------- | ----------------------------------------- |
3-
| GitHub Copilot (VS Code) ||| v1.99.0+ or Insiders version |
4-
| Cursor ||| v0.47.0+ |
5-
| Roo Code ||| v3.9.0+ |
6-
| Cline ||| v3.8.5+ |
7-
| Claude Code ||| v0.2.54+ |
8-
| PydanticAI ||| |
9-
| Continue ||| Pre-release extension v1.39+ ([issue][1]) |
10-
| GitHub Copilot (JetBrains) ||| No support for HTTP/SSE MCPs ([issue][2]) |
11-
| Claude Desktop ||| No support for HTTP/SSE MCPs ([issue][3]) |
1+
| Client | Supported | Auto-configuration | Notes |
2+
| -------------------------- | :-------: | :----------------: | ---------------------------------------------- |
3+
| GitHub Copilot (VS Code) ||| v1.100+ or Insiders version |
4+
| Cursor ||| v0.50.0+ |
5+
| Roo Code (VS Code) ||| v3.19.2+ |
6+
| Cline (VS Code) ||| v3.8.5+ (sse only; streamable-http [issue][2]) |
7+
| Claude Code CLI ||| v1.0.27+ |
8+
| GitHub Copilot (JetBrains) ||| v1.5.47+ |
9+
| Continue (VS Code) ||| v1.0.14+ |
10+
| Continue (JetBrains) ||| v1.0.23+ |
11+
| PydanticAI ||| v0.2.18+ |
12+
| ChatGPT Desktop ||| No support for HTTP/SSE MCPs |
13+
| Claude Desktop ||| No support for HTTP/SSE MCPs ([issue][1]) |
1214

13-
[1]: https://github.com/continuedev/continue/issues/5359
14-
[2]: https://github.com/microsoft/copilot-intellij-feedback/issues/224
15-
[3]: https://github.com/orgs/modelcontextprotocol/discussions/16
15+
[1]: https://github.com/orgs/modelcontextprotocol/discussions/16
16+
[2]: https://github.com/cline/cline/issues/4391

docs/toolhive/guides-cli/client-configuration.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ You can configure clients with ToolHive in three ways:
1717
clients.
1818
2. **Manual registration**: Register specific clients for ToolHive to manage.
1919
3. **Custom configuration**: For unsupported clients or custom setups, configure
20-
them to connect to ToolHive-managed MCP servers using the SSE protocol.
20+
them to connect to ToolHive-managed MCP servers using the SSE or Streamable
21+
HTTP protocol.
2122

2223
With the first two methods, ToolHive automatically updates client configuration
2324
when you start or remove an MCP server. For a complete list of supported clients
@@ -113,8 +114,8 @@ thv config remove-client <client-name>
113114

114115
If you have other clients or development libraries that ToolHive doesn't
115116
directly support, you can still configure them to use ToolHive-managed MCP
116-
servers as long as they support the SSE protocol. Check your client or library
117-
documentation for configuration details.
117+
servers as long as they support the SSE or Streamable HTTP protocol. Check your
118+
client or library documentation for configuration details.
118119

119120
List your running MCP servers to get the URL:
120121

docs/toolhive/guides-cli/run-mcp-servers.mdx

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -164,14 +164,22 @@ ToolHive supports the following transport methods:
164164
doesn't have direct access to the network or the host machine.
165165

166166
- **HTTP with SSE (server-sent events)** (`sse`):\
167-
ToolHive creates a reverse proxy that forwards requests to the container. This
168-
means the container itself doesn't directly expose any ports.
167+
ToolHive creates a reverse proxy that forwards requests to the container using
168+
the HTTP/SSE protocol.
169169

170-
- **Streamable HTTP** - coming soon!\
171-
The March 2025 revision of the MCP specification replaced the HTTP+SSE
172-
transport with Streamable HTTP. Follow the
173-
[GitHub issue](https://github.com/stacklok/toolhive/issues/54) to be notified
174-
when this feature is available in ToolHive.
170+
- **Streamable HTTP** (`streamable-http`):\
171+
ToolHive creates a reverse proxy that forwards requests to the container using
172+
the Streamable HTTP protocol, which replaced SSE in the MCP specification as
173+
of the `2025-03-26` revision.
174+
175+
:::info
176+
177+
We are actively monitoring the adoption of the Streamable HTTP protocol across
178+
the client ecosystem. Once we confirm that ToolHive's supported clients support
179+
Streamable HTTP, we will make it the default proxy transport method for stdio
180+
servers.
181+
182+
:::
175183

176184
### Run a server from a Docker image
177185

@@ -181,15 +189,15 @@ name for the server instance, the transport method, and any additional arguments
181189
required by the MCP server.
182190

183191
```bash
184-
thv run [--name <friendly-name>] [--transport <stdio/sse>] <image-name:tag> -- <server-args>
192+
thv run [--name <friendly-name>] [--transport <stdio/sse/streamable-http>] <image-name:tag> -- <server-args>
185193
```
186194

187195
For example, to run an MCP server from a Docker image named
188-
`my-mcp-server-image` that uses the SSE transport method and takes additional
189-
arguments:
196+
`my-mcp-server-image` that uses the Streamable HTTP transport method and takes
197+
additional arguments:
190198

191199
```bash
192-
thv run --name my-mcp-server --transport sse my-mcp-server-image:latest -- --arg1 value1 --arg2 value2
200+
thv run --name my-mcp-server --transport streamable-http my-mcp-server-image:latest -- --arg1 value1 --arg2 value2
193201
```
194202

195203
Check your MCP server's documentation for the required arguments.
@@ -207,8 +215,8 @@ When you run an MCP server from a Docker image, ToolHive:
207215
toolhive: true
208216
toolhive-name: my-mcp-server
209217
```
210-
4. Sets up the specified transport method (`--transport stdio` or
211-
`--transport sse`).
218+
4. Sets up the specified `--transport` method (`stdio`, `sse`, or
219+
`streamable-http`).
212220

213221
:::
214222

docs/toolhive/index.mdx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,23 +57,26 @@ with sensible security controls and container-native simplicity.
5757

5858
## Architecture overview
5959

60-
ToolHive exposes an HTTP/SSE proxy to forward requests to MCP servers running in
60+
ToolHive exposes an HTTP proxy to forward requests to MCP servers running in
6161
containers. The proxy communicates with MCP servers via standard input/output
62-
(stdio) or server-sent events (SSE). The ToolHive CLI interacts with Docker or
63-
Podman via the Docker socket API, letting it manage containers and their
64-
configurations.
62+
(stdio), server-sent events (SSE), or Streamable HTTP. The ToolHive CLI
63+
interacts with Docker or Podman via the Docker socket API, letting it manage
64+
containers and their configurations.
6565

6666
```mermaid
6767
flowchart LR
6868
subgraph container["**Docker/Podman**"]
6969
direction LR
7070
mcp1["MCP server<br>container"]
7171
mcp2["MCP server<br>container"]
72+
mcp3["MCP server<br>container"]
7273
end
7374
proxy1["SSE proxy"] -- stdio --> mcp1
7475
proxy2["SSE proxy"] -- SSE --> mcp2
76+
proxy3["HTTP proxy"] -- Streamable<br>HTTP --> mcp3
7577
T["ToolHive CLI"] -- Socket API --> container
7678
C["Client"] -- HTTP/SSE --> proxy1 & proxy2
79+
C -- HTTP --> proxy3
7780
T ~~~ C
7881
```
7982

docs/toolhive/reference/client-compatibility.mdx

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@ We've tested ToolHive with these clients:
1616

1717
<ClientTable />
1818

19+
The minimum versions listed are the earliest versions that support the
20+
Streamable HTTP transport protocol.
21+
1922
You can also use other clients and development libraries that support the SSE
20-
protocol, but you'll need to configure them manually.
23+
and/or Streamable HTTP protocol, but you'll need to configure them manually.
2124

2225
## Client requirements
2326

@@ -67,7 +70,8 @@ Example configuration:
6770
"mcp": {
6871
"servers": {
6972
"github": { "url": "http://localhost:19046/sse#github", "type": "sse" },
70-
"fetch": { "url": "http://localhost:43832/sse#fetch", "type": "sse" }
73+
"fetch": { "url": "http://localhost:43832/sse#fetch", "type": "sse" },
74+
"osv": { "url": "http://localhost:51712/mcp", "type": "http" }
7175
}
7276
}
7377
}
@@ -105,11 +109,14 @@ Example configuration:
105109
{
106110
"mcpServers": {
107111
"github": { "url": "http://localhost:19046/sse#github" },
108-
"fetch": { "url": "http://localhost:43832/sse#fetch" }
112+
"fetch": { "url": "http://localhost:43832/sse#fetch" },
113+
"osv": { "url": "http://localhost:51712/mcp" }
109114
}
110115
}
111116
```
112117

118+
Cursor automatically detects the transport mode for HTTP MCP servers.
119+
113120
When you register Cursor as a client or enable auto-discovery, ToolHive
114121
automatically updates the global MCP configuration file whenever you run an MCP
115122
server. You can also
@@ -131,7 +138,8 @@ Example configuration:
131138

132139
"mcpServers": {
133140
"github": { "url": "http://localhost:19046/sse#github", "type": "sse" },
134-
"fetch": { "url": "http://localhost:43832/sse#fetch", "type": "sse" }
141+
"fetch": { "url": "http://localhost:43832/sse#fetch", "type": "sse" },
142+
"osv": { "url": "http://localhost:51712/mcp", "type": "http" }
135143
}
136144
}
137145
```
@@ -172,8 +180,9 @@ Example configuration:
172180
```json
173181
{
174182
"mcpServers": {
175-
"github": { "url": "http://localhost:19046/sse#github" },
176-
"fetch": { "url": "http://localhost:43832/sse#fetch" }
183+
"github": { "url": "http://localhost:19046/sse#github", "type": "sse" },
184+
"fetch": { "url": "http://localhost:43832/sse#fetch", "type": "sse" },
185+
"osv": { "url": "http://localhost:51712/mcp", "type": "streamable-http" }
177186
}
178187
}
179188
```
@@ -194,15 +203,20 @@ the MCP server URL manually.
194203
For [PydanticAI](https://ai.pydantic.dev/), set the MCP server URL in your code:
195204

196205
```python
197-
from pydantic_ai.mcp import MCPServerHTTP
206+
from pydantic_ai.mcp import MCPServerSSE
207+
from pydantic_ai.mcp import MCPServerStreamableHTTP
198208

199-
server = MCPServerHTTP(url='http://localhost:43832/sse#fetch')
209+
# For Server-Sent Events (SSE)
210+
server = MCPServerSSE(url='http://localhost:43832/sse#fetch')
211+
212+
# For Streamable HTTP
213+
server = MCPServerStreamableHTTP(url='http://localhost:51712/mcp')
200214
```
201215

202216
### Example: Continue
203217

204-
For the [Continue](https://continue.dev) extension in VS Code, edit your
205-
`~/.continue/config.yaml` file or project-specific
218+
For the [Continue](https://continue.dev) extension in VS Code or JetBrains, edit
219+
your `~/.continue/config.yaml` file or project-specific
206220
`.continue/mcpServers/<name>.yaml` file to include the MCP server URL:
207221

208222
```yaml
@@ -212,6 +226,28 @@ mcpServers:
212226
url: http://localhost:43832/sse#fetch
213227
```
214228
229+
Continue supports SSE (`type: sse`) and Streamable HTTP
230+
(`type: streamable-http`) transports.
231+
232+
### Example: Copilot for JetBrains IDEs
233+
234+
For the
235+
[GitHub Copilot plugin in JetBrains IDEs](https://plugins.jetbrains.com/plugin/17718-github-copilot)
236+
(IntelliJ, Pydantic, etc.), edit your `~/.config/github-copilot/mcp.json` file
237+
to include the MCP server URL:
238+
239+
```json
240+
{
241+
"servers": {
242+
"fetch": { "url": "http://localhost:43832/sse#fetch", "type": "sse" },
243+
"osv": { "url": "http://localhost:51712/mcp", "type": "http" }
244+
}
245+
}
246+
```
247+
248+
Copilot for JetBrains supports SSE (`"type": "sse"`) and Streamable HTTP
249+
(`"type": "streamable-http"`) transports.
250+
215251
## Related information
216252

217253
- [Client configuration](../guides-cli/client-configuration.md)

0 commit comments

Comments
 (0)