Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion go/core/internal/mcp/mcp_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
authimpl "github.com/kagent-dev/kagent/go/core/internal/httpserver/auth"
"github.com/kagent-dev/kagent/go/core/internal/version"
"github.com/kagent-dev/kagent/go/core/pkg/auth"
"github.com/kagent-dev/kagent/go/core/pkg/env"
mcpsdk "github.com/modelcontextprotocol/go-sdk/mcp"
"k8s.io/apimachinery/pkg/types"
"sigs.k8s.io/controller-runtime/pkg/client"
Expand Down Expand Up @@ -102,11 +103,15 @@ func NewMCPHandler(kubeClient client.Client, a2aBaseURL string, authenticator au
)

// Create HTTP handler
var httpOpts *mcpsdk.StreamableHTTPOptions
if env.KagentMCPStateless.Get() {
httpOpts = &mcpsdk.StreamableHTTPOptions{Stateless: true}
}
Comment on lines +106 to +109
handler.httpHandler = mcpsdk.NewStreamableHTTPHandler(
func(*http.Request) *mcpsdk.Server {
return server
},
nil,
httpOpts,
)

return handler, nil
Expand Down
10 changes: 10 additions & 0 deletions go/core/pkg/env/kagent.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,16 @@ var (
ComponentController,
)

KagentMCPStateless = RegisterBoolVar(
"KAGENT_MCP_STATELESS",
false,
"When true, the MCP server operates in stateless mode (no session persistence). "+
"Use when the network path does not provide sticky session routing based on the Mcp-Session-Id header. "+
"Note: stateless mode disables server-initiated notifications; clients will not receive "+
"resources/updated events.",
ComponentController,
)

// Variables injected into agent pods (not read by the controller itself).

KagentName = RegisterStringVar(
Expand Down
Loading