[mcp] server handler for streamable HTTP transport#59499
Conversation
| go func() { | ||
| // Make sure handler returns if ctx is canceled. | ||
| <-ctx.Done() | ||
| waitConn.Close() |
There was a problem hiding this comment.
This works, but I wonder if we can pass ctx somewhere to have this automated?
There was a problem hiding this comment.
this is a tough one. i updated the code to pass the ctx as base context. but even then, it's up to many parts of the handler flow to honor the ctx or not. So i kept the go routine just to be sure. ebdad41
There was a problem hiding this comment.
Given that we're closing the connection after the function returns (due to defer cancel()), wouldn't it make sense to have it all on a single defer call?
defer func() {
cancel() // relevant to handler.
waitConn.Close() // Ensure connection is closed
}()There was a problem hiding this comment.
Given that we're closing the connection after the function returns (due to
defer cancel()), wouldn't it make sense to have it all on a singledefercall?defer func() { cancel() // relevant to handler. waitConn.Close() // Ensure connection is closed }()
the situation we are trying to resolve is when the input ctx is canceled outside this handler func. there is a long chain of functions from http server to mcputils through all the connection handling. when things implemented correctly, everything shuts down when parent ctx is canceled. again, if implemented correctly. so I just don't want to risk that so i explicitly close the connection when input context is canceled.
gabrielcorado
left a comment
There was a problem hiding this comment.
LGTM just some minor comments.
* [mcp] server handler for streamable hTTP transport * review comments round 1 * add comments and fix flaky test Signed-off-by: Tim Ross <tim.ross@goteleport.com>
* [mcp] server handler for streamable hTTP transport * review comments round 1 * add comments and fix flaky test
* [MCP] server-side SSE support (#56051) * MCP access part 12: server-side SSE support * parse uri for determining transport type * fix pointer, atomic, and parse error � Conflicts: � lib/srv/mcp/server.go * fix schema, etc * switch to golang internal mcp sse parsing * remove ParentCtx from logging * fix build and address comments * [mcp] refactor jwt token and app header rewrite logic (#58601) * [mcp] mcputils for streamable http (#58764) * [mcp] mcputils for streamable http * fix flaky test * use utils.ReadAtMost and fmt.Appendf * add a marshal function for event * fix spell * [mcp] update audit events for streamable HTTP transport (#59155) * [mcp] update audit events for streamable HTTP transport * nolint for unused functions for now, they will be used in next PR * [mcp] server handler for streamable HTTP transport (#59499) * [mcp] server handler for streamable hTTP transport * review comments round 1 * add comments and fix flaky test * [mcp] bump mcp-go version (#59500) * [mcp] bump mcp-go version * fix IO transport by explicit start * [mcp] add server prometheus metrics (#59773) * [mcp] add server prometheus metrics * remove TODO and nolint * use counter where possible and limit known methods * move reporting test to individual tests * nolint for "cancelled" * Fix an issue docker container launched by MCP commands are not removed sometimes (#59879) * Fix an issue docker container launched by MCP commands are not removed sometimes * switch to math/rand/v2 * add "tsh proxy mcp" command (#59968) * [refactor] client.NewMCPServerDialer (#60020) * [refactor] client.NewMCPServerDialer * TestVerifyTLSCertLeafExpiry * TestMatchResourcesByFilters * fix typo * fix lint * mcputils for streamable HTTP transport conversion (#60024) * mcputils for streamable HTTP transport conversion * remove need of context from mcptest functions * add test for notification * [mcp] "tsh mcp connect" support for streamable HTTP (#60120) * implement "tsh mcp connect" for streamable HTTP * wait for 5s just to be conservative * [mcp] Web UI and Teleport Connect adjustments for SSE and Streamable HTTP MCP servers (#60281) * [mcp] Web UI and Teleport Connect adjustments for SSE and Streamable HTTP MCP servers * review comments * [mcp] fix some edge cases for streamable HTTP (#60286) * [mcp] add JWT and rewrite headers support for SSE MCP servers (#60320) * fix go.mod to match master * fix lint and ut
* [mcp] server handler for streamable hTTP transport * review comments round 1 * add comments and fix flaky test
Part of:
Run a MCP server in streamable HTTP transport, for example:
App definition:
Start local proxy:
Connect with inspector (

npx @modelcontextprotocol/inspector):Connect with Claude Desktop
{ "mcpServers": { "teleport-mcp-everything-http": { "command": "npx", "args": [ "mcp-remote", "http://localhost:8888/mcp", "--transport", "http-only" ] } } }