Skip to content

Commit a9d7a82

Browse files
committed
fix: propagate MCPServer CRD timeout to RemoteMCPServer
Signed-off-by: skhedim <sebastien.khedim@gmail.com>
1 parent a8ba3e5 commit a9d7a82

4 files changed

Lines changed: 20 additions & 10 deletions

File tree

go/go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,3 +184,5 @@ require (
184184
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
185185
sigs.k8s.io/randfill v1.0.0 // indirect
186186
)
187+
188+
replace github.com/kagent-dev/kmcp => github.com/skhedim/kmcp v0.0.0-20260210142932-adddd74a3846

go/go.sum

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,6 @@ github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8Hm
165165
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
166166
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
167167
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
168-
github.com/kagent-dev/kmcp v0.2.2 h1:uvbKmo9IT6OT9RBNXYwGX0PWyxBLfAW1F9yWd5/wxaI=
169-
github.com/kagent-dev/kmcp v0.2.2/go.mod h1:g7wS/3m2wonRo/1DMwVoHxnilr/urPgV2hwV1DwkwrQ=
170-
github.com/kagent-dev/kmcp v0.2.5 h1:Em5A2vROJuR5JpMe5luSMe2vQJTwxX93AMXJm6Lg/E0=
171-
github.com/kagent-dev/kmcp v0.2.5/go.mod h1:g7wS/3m2wonRo/1DMwVoHxnilr/urPgV2hwV1DwkwrQ=
172168
github.com/kagent-dev/mockllm v0.0.3 h1:hk6Oa/vxHoBrGqRig4GCzox8EqRQYXM4c3oFPP/k9Tg=
173169
github.com/kagent-dev/mockllm v0.0.3/go.mod h1:tDLemRsTZa1NdHaDbg3sgFk9cT1QWvMPlBtLVD6I2mA=
174170
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
@@ -262,6 +258,8 @@ github.com/sahilm/fuzzy v0.1.1 h1:ceu5RHF8DGgoi+/dR5PsECjCDH1BE3Fnmpo7aVXOdRA=
262258
github.com/sahilm/fuzzy v0.1.1/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y=
263259
github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0=
264260
github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
261+
github.com/skhedim/kmcp v0.0.0-20260210142932-adddd74a3846 h1:sCj20Ly5evtO5aWd0PS9rhlHl9xGzA2yJc5k/Ljz3gA=
262+
github.com/skhedim/kmcp v0.0.0-20260210142932-adddd74a3846/go.mod h1:g7wS/3m2wonRo/1DMwVoHxnilr/urPgV2hwV1DwkwrQ=
265263
github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I=
266264
github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg=
267265
github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=

go/internal/controller/translator/agent/adk_api_translator.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1259,16 +1259,25 @@ func ConvertMCPServerToRemoteMCPServer(mcpServer *v1alpha1.MCPServer) (*v1alpha2
12591259
return nil, NewValidationError("cannot determine port for MCP server %s", mcpServer.Name)
12601260
}
12611261

1262-
return &v1alpha2.RemoteMCPServer{
1262+
remoteMCP := &v1alpha2.RemoteMCPServer{
12631263
ObjectMeta: metav1.ObjectMeta{
12641264
Name: mcpServer.Name,
12651265
Namespace: mcpServer.Namespace,
12661266
},
12671267
Spec: v1alpha2.RemoteMCPServerSpec{
1268-
URL: fmt.Sprintf("http://%s.%s:%d/mcp", mcpServer.Name, mcpServer.Namespace, mcpServer.Spec.Deployment.Port),
1269-
Protocol: v1alpha2.RemoteMCPServerProtocolStreamableHttp,
1268+
URL: fmt.Sprintf("http://%s.%s:%d/mcp", mcpServer.Name, mcpServer.Namespace, mcpServer.Spec.Deployment.Port),
1269+
Protocol: v1alpha2.RemoteMCPServerProtocolStreamableHttp,
1270+
TerminateOnClose: ptr.To(true),
12701271
},
1271-
}, nil
1272+
}
1273+
1274+
// Propagate the timeout from the MCPServer CRD (which has a kubebuilder
1275+
// default of "30s") to the generated RemoteMCPServer spec.
1276+
if mcpServer.Spec.Timeout != nil {
1277+
remoteMCP.Spec.Timeout = mcpServer.Spec.Timeout
1278+
}
1279+
1280+
return remoteMCP, nil
12721281
}
12731282

12741283
func (a *adkApiTranslator) translateRemoteMCPServerTarget(ctx context.Context, agent *adk.AgentConfig, remoteMcpServer *v1alpha2.RemoteMCPServer, mcpServerTool *v1alpha2.McpServerTool, agentHeaders map[string]string, proxyURL string) error {

go/internal/controller/translator/agent/testdata/outputs/agent_with_proxy_mcpserver.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"headers": {
2626
"x-kagent-host": "test-mcp-server.test"
2727
},
28+
"terminate_on_close": true,
2829
"url": "http://proxy.kagent.svc.cluster.local:8080/mcp"
2930
},
3031
"tools": [
@@ -69,7 +70,7 @@
6970
},
7071
"stringData": {
7172
"agent-card.json": "{\"name\":\"agent_with_proxy_mcpserver\",\"description\":\"\",\"url\":\"http://agent-with-proxy-mcpserver.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[]}",
72-
"config.json": "{\"model\":{\"type\":\"openai\",\"model\":\"gpt-4o\",\"base_url\":\"\"},\"description\":\"\",\"instruction\":\"You are an agent that uses proxies.\",\"http_tools\":[{\"params\":{\"url\":\"http://proxy.kagent.svc.cluster.local:8080/mcp\",\"headers\":{\"x-kagent-host\":\"test-mcp-server.test\"}},\"tools\":[\"test-tool\"]}],\"sse_tools\":null,\"remote_agents\":null,\"stream\":false}"
73+
"config.json": "{\"model\":{\"type\":\"openai\",\"model\":\"gpt-4o\",\"base_url\":\"\"},\"description\":\"\",\"instruction\":\"You are an agent that uses proxies.\",\"http_tools\":[{\"params\":{\"url\":\"http://proxy.kagent.svc.cluster.local:8080/mcp\",\"headers\":{\"x-kagent-host\":\"test-mcp-server.test\"},\"terminate_on_close\":true},\"tools\":[\"test-tool\"]}],\"sse_tools\":null,\"remote_agents\":null,\"stream\":false}"
7374
}
7475
},
7576
{
@@ -138,7 +139,7 @@
138139
"template": {
139140
"metadata": {
140141
"annotations": {
141-
"kagent.dev/config-hash": "4693175952507523169"
142+
"kagent.dev/config-hash": "13266959587278403848"
142143
},
143144
"labels": {
144145
"app": "kagent",

0 commit comments

Comments
 (0)