Skip to content

Commit 89f9cab

Browse files
committed
docs: adds streamablehttp docs for K8s
Signed-off-by: ChrisJBurns <[email protected]>
1 parent ae16233 commit 89f9cab

File tree

1 file changed

+31
-5
lines changed

1 file changed

+31
-5
lines changed

docs/toolhive/guides-k8s/run-mcp-k8s.md

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,33 @@ flowchart LR
9292
MCPService --> MCPPod
9393
```
9494

95+
### StreamableHTTP transport flow
96+
97+
For MCP servers using StreamableHTTP transport, the proxy creates both
98+
a pod and a headless service. This allows direct HTTP communication between
99+
the proxy and MCP server while maintaining network isolation and service
100+
discovery.
101+
102+
```mermaid
103+
flowchart LR
104+
subgraph Proxy["Created by Operator"]
105+
direction TB
106+
ProxyService["SVC: ToolHive-Proxy"]
107+
ProxyPod["POD: ToolHive-Proxy"]
108+
ProxyService --> ProxyPod
109+
end
110+
111+
subgraph MCP["Created by Proxy"]
112+
direction TB
113+
MCPService["SVC: MCP-Headless"]
114+
MCPPod["POD: MCP Server"]
115+
end
116+
117+
Client["Client"] -->|HTTP/StreamableHTTP| Proxy
118+
Proxy -->|HTTP/StreamableHTTP| MCP
119+
MCPService --> MCPPod
120+
```
121+
95122
## Create an MCP server
96123

97124
You can create `MCPServer` resources in namespaces based on how the operator was
@@ -117,7 +144,7 @@ metadata:
117144
namespace: my-namespace # Update with your namespace
118145
spec:
119146
image: ghcr.io/stackloklabs/osv-mcp/server
120-
transport: sse
147+
transport: streamable-http
121148
port: 8080
122149
permissionProfile:
123150
type: builtin
@@ -153,7 +180,7 @@ When you apply an `MCPServer` resource, here's what happens:
153180
service to handle client connections
154181
4. The proxy creates the actual `MCPServer` pod containing your specified
155182
container image
156-
5. For STDIO transport, the proxy attaches directly to the pod; for SSE
183+
5. For STDIO transport, the proxy attaches directly to the pod; for SSE and StreamableHTTP
157184
transport, a headless service is created for direct pod communication
158185
6. Clients can now connect through the service → proxy → MCP server chain to use
159186
the tools and resources (note: external clients will need an ingress
@@ -217,9 +244,8 @@ metadata:
217244
namespace: development # Can be any namespace
218245
spec:
219246
image: ghcr.io/stackloklabs/gofetch/server
220-
transport: sse
247+
transport: streamable-http
221248
port: 8080
222-
targetPort: 8080
223249
permissionProfile:
224250
type: builtin
225251
name: network
@@ -474,7 +500,7 @@ Common causes include:
474500
selectors
475501
- **Port configuration**: Verify the `port` field matches the MCP server's
476502
listening port
477-
- **Transport mismatch**: Ensure the `transport` field (stdio/sse) matches the
503+
- **Transport mismatch**: Ensure the `transport` field (stdio/sse/streamable-http) matches the
478504
MCP server's capabilities
479505
- **Network policies**: Check if network policies are blocking communication
480506

0 commit comments

Comments
 (0)