Skip to content

Commit 911ca28

Browse files
committed
fix: propagate MCPServer CRD timeout to RemoteMCPServer with 30s default
1 parent a9d7a82 commit 911ca28

29 files changed

Lines changed: 464 additions & 9 deletions

go/go.mod

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ require (
1414
github.com/gorilla/mux v1.8.1
1515
github.com/hashicorp/go-multierror v1.1.1
1616
github.com/jedib0t/go-pretty/v6 v6.7.8
17-
github.com/kagent-dev/kmcp v0.2.5
17+
github.com/kagent-dev/kmcp v0.2.6-0.20260210193153-3ba0e2e7f39d
1818
github.com/kagent-dev/mockllm v0.0.3
1919
github.com/modelcontextprotocol/go-sdk v1.2.0
2020
github.com/muesli/reflow v0.3.0
@@ -184,5 +184,3 @@ 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 & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ 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.6-0.20260210193153-3ba0e2e7f39d h1:+BN03C8JGZIJ3uMNBopXcNROHpPQdovffYQhY+toBHU=
169+
github.com/kagent-dev/kmcp v0.2.6-0.20260210193153-3ba0e2e7f39d/go.mod h1:g7wS/3m2wonRo/1DMwVoHxnilr/urPgV2hwV1DwkwrQ=
168170
github.com/kagent-dev/mockllm v0.0.3 h1:hk6Oa/vxHoBrGqRig4GCzox8EqRQYXM4c3oFPP/k9Tg=
169171
github.com/kagent-dev/mockllm v0.0.3/go.mod h1:tDLemRsTZa1NdHaDbg3sgFk9cT1QWvMPlBtLVD6I2mA=
170172
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
@@ -258,8 +260,6 @@ github.com/sahilm/fuzzy v0.1.1 h1:ceu5RHF8DGgoi+/dR5PsECjCDH1BE3Fnmpo7aVXOdRA=
258260
github.com/sahilm/fuzzy v0.1.1/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y=
259261
github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0=
260262
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=
263263
github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I=
264264
github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg=
265265
github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"slices"
1515
"strconv"
1616
"strings"
17+
"time"
1718

1819
"github.com/kagent-dev/kagent/go/api/v1alpha2"
1920
"github.com/kagent-dev/kagent/go/internal/adk"
@@ -1271,10 +1272,14 @@ func ConvertMCPServerToRemoteMCPServer(mcpServer *v1alpha1.MCPServer) (*v1alpha2
12711272
},
12721273
}
12731274

1274-
// Propagate the timeout from the MCPServer CRD (which has a kubebuilder
1275-
// default of "30s") to the generated RemoteMCPServer spec.
1275+
// Propagate the timeout from the MCPServer CRD to the generated
1276+
// RemoteMCPServer spec. Fall back to 30s for MCPServer objects created
1277+
// before the CRD default was introduced, so the ADK never uses its own
1278+
// 5s default which is too short for sidecar gateway cold starts.
12761279
if mcpServer.Spec.Timeout != nil {
12771280
remoteMCP.Spec.Timeout = mcpServer.Spec.Timeout
1281+
} else {
1282+
remoteMCP.Spec.Timeout = &metav1.Duration{Duration: 30 * time.Second}
12781283
}
12791284

12801285
return remoteMCP, nil
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
operation: translateAgent
2+
targetObject: agent-with-proxy-mcpserver-timeout
3+
namespace: test
4+
proxyURL: http://proxy.kagent.svc.cluster.local:8080
5+
objects:
6+
- apiVersion: v1
7+
kind: Secret
8+
metadata:
9+
name: openai-secret
10+
namespace: test
11+
data:
12+
api-key: c2stdGVzdC1hcGkta2V5 # base64 encoded "sk-test-api-key"
13+
- apiVersion: kagent.dev/v1alpha2
14+
kind: ModelConfig
15+
metadata:
16+
name: default-model
17+
namespace: test
18+
spec:
19+
provider: OpenAI
20+
model: gpt-4o
21+
apiKeySecret: openai-secret
22+
apiKeySecretKey: api-key
23+
- apiVersion: kagent.dev/v1alpha1
24+
kind: MCPServer
25+
metadata:
26+
name: test-mcp-server
27+
namespace: test
28+
spec:
29+
deployment:
30+
port: 8084
31+
timeout: 60s
32+
- apiVersion: kagent.dev/v1alpha2
33+
kind: Agent
34+
metadata:
35+
name: agent-with-proxy-mcpserver-timeout
36+
namespace: test
37+
spec:
38+
type: Declarative
39+
declarative:
40+
description: An agent with proxy configuration and MCPServer with custom timeout
41+
systemMessage: You are an agent that uses proxies.
42+
modelConfig: default-model
43+
tools:
44+
- type: MCPServer
45+
mcpServer:
46+
name: test-mcp-server
47+
kind: MCPServer
48+
toolNames:
49+
- test-tool

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,10 @@
172172
}
173173
}
174174
},
175+
{
176+
"name": "OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE",
177+
"value": "delta"
178+
},
175179
{
176180
"name": "KAGENT_NAMESPACE",
177181
"valueFrom": {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,10 @@
164164
}
165165
}
166166
},
167+
{
168+
"name": "OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE",
169+
"value": "delta"
170+
},
167171
{
168172
"name": "KAGENT_NAMESPACE",
169173
"valueFrom": {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,10 @@
177177
}
178178
}
179179
},
180+
{
181+
"name": "OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE",
182+
"value": "delta"
183+
},
180184
{
181185
"name": "KAGENT_NAMESPACE",
182186
"valueFrom": {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,10 @@
132132
}
133133
}
134134
},
135+
{
136+
"name": "OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE",
137+
"value": "delta"
138+
},
135139
{
136140
"name": "KAGENT_NAMESPACE",
137141
"valueFrom": {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,10 @@
171171
}
172172
}
173173
},
174+
{
175+
"name": "OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE",
176+
"value": "delta"
177+
},
174178
{
175179
"name": "KAGENT_NAMESPACE",
176180
"valueFrom": {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,10 @@
167167
}
168168
}
169169
},
170+
{
171+
"name": "OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE",
172+
"value": "delta"
173+
},
170174
{
171175
"name": "KAGENT_NAMESPACE",
172176
"valueFrom": {

0 commit comments

Comments
 (0)