@@ -12,10 +12,12 @@ import (
1212 a2atype "github.com/a2aproject/a2a-go/v2/a2a"
1313 a2aclientv2 "github.com/a2aproject/a2a-go/v2/a2aclient"
1414 "github.com/a2aproject/a2a-go/v2/a2aclient/agentcard"
15+ "github.com/google/jsonschema-go/jsonschema"
1516 "github.com/kagent-dev/kagent/go/api/v1alpha2"
1617 "github.com/kagent-dev/kagent/go/core/internal/a2a"
1718 "github.com/kagent-dev/kagent/go/core/internal/version"
1819 "github.com/kagent-dev/kagent/go/core/pkg/auth"
20+ "github.com/kagent-dev/kagent/go/core/pkg/env"
1921 mcpsdk "github.com/modelcontextprotocol/go-sdk/mcp"
2022 "k8s.io/apimachinery/pkg/types"
2123 "sigs.k8s.io/controller-runtime/pkg/client"
@@ -82,12 +84,21 @@ func NewMCPHandler(kubeClient client.Client, a2aBaseURL string, authenticator au
8284 server := mcpsdk .NewServer (impl , nil )
8385 handler .server = server
8486
85- // Add list_agents tool
87+ // Add list_agents tool.
88+ // InputSchema is set explicitly (rather than reflected from the empty
89+ // ListAgentsInput struct) so the serialized schema includes "properties": {}.
90+ // OpenAI strict mode rejects object schemas without a properties key.
91+ // See https://github.com/kagent-dev/kagent/issues/1889.
8692 mcpsdk .AddTool [ListAgentsInput , ListAgentsOutput ](
8793 server ,
8894 & mcpsdk.Tool {
8995 Name : "list_agents" ,
9096 Description : "List invokable kagent agents (accepted + deploymentReady)" ,
97+ InputSchema : & jsonschema.Schema {
98+ Type : "object" ,
99+ Properties : map [string ]* jsonschema.Schema {},
100+ AdditionalProperties : & jsonschema.Schema {Not : & jsonschema.Schema {}},
101+ },
91102 },
92103 handler .handleListAgents ,
93104 )
@@ -103,11 +114,15 @@ func NewMCPHandler(kubeClient client.Client, a2aBaseURL string, authenticator au
103114 )
104115
105116 // Create HTTP handler
117+ var httpOpts * mcpsdk.StreamableHTTPOptions
118+ if env .KagentMCPStateless .Get () {
119+ httpOpts = & mcpsdk.StreamableHTTPOptions {Stateless : true }
120+ }
106121 handler .httpHandler = mcpsdk .NewStreamableHTTPHandler (
107122 func (* http.Request ) * mcpsdk.Server {
108123 return server
109124 },
110- nil ,
125+ httpOpts ,
111126 )
112127
113128 return handler , nil
0 commit comments