mirror of
https://github.com/openshift/openshift-mcp-server.git
synced 2025-10-17 14:27:48 +03:00
fix(mcp): InputSchema schema with empty properties for no-arg tools (#341)
Signed-off-by: Marc Nuri <marc@marcnuri.com>
This commit is contained in:
@@ -30,6 +30,12 @@ func ServerToolToM3LabsServerTool(s *Server, tools []api.ServerTool) ([]server.S
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to marshal tool input schema for tool %s: %v", tool.Tool.Name, err)
|
return nil, fmt.Errorf("failed to marshal tool input schema for tool %s: %v", tool.Tool.Name, err)
|
||||||
}
|
}
|
||||||
|
// TODO: temporary fix to append an empty properties object (some client have trouble parsing a schema without properties)
|
||||||
|
// As opposed, Gemini had trouble for a while when properties was present but empty.
|
||||||
|
// https://github.com/containers/kubernetes-mcp-server/issues/340
|
||||||
|
if string(schema) == `{"type":"object"}` {
|
||||||
|
schema = []byte(`{"type":"object","properties":{}}`)
|
||||||
|
}
|
||||||
m3labTool.RawInputSchema = schema
|
m3labTool.RawInputSchema = schema
|
||||||
}
|
}
|
||||||
m3labHandler := func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
m3labHandler := func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
||||||
|
|||||||
@@ -125,6 +125,28 @@ func (s *ToolsetsSuite) TestGranularToolsetsTools() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *ToolsetsSuite) TestInputSchemaEdgeCases() {
|
||||||
|
//https://github.com/containers/kubernetes-mcp-server/issues/340
|
||||||
|
s.Run("InputSchema for no-arg tool is object with empty properties", func() {
|
||||||
|
s.InitMcpClient()
|
||||||
|
tools, err := s.ListTools(s.T().Context(), mcp.ListToolsRequest{})
|
||||||
|
s.Run("ListTools returns tools", func() {
|
||||||
|
s.NotNil(tools, "Expected tools from ListTools")
|
||||||
|
s.NoError(err, "Expected no error from ListTools")
|
||||||
|
})
|
||||||
|
var namespacesList *mcp.Tool
|
||||||
|
for _, tool := range tools.Tools {
|
||||||
|
if tool.Name == "namespaces_list" {
|
||||||
|
namespacesList = &tool
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s.Require().NotNil(namespacesList, "Expected namespaces_list from ListTools")
|
||||||
|
s.NotNil(namespacesList.InputSchema.Properties, "Expected namespaces_list.InputSchema.Properties not to be nil")
|
||||||
|
s.Empty(namespacesList.InputSchema.Properties, "Expected namespaces_list.InputSchema.Properties to be empty")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func (s *ToolsetsSuite) InitMcpClient() {
|
func (s *ToolsetsSuite) InitMcpClient() {
|
||||||
var err error
|
var err error
|
||||||
s.mcpServer, err = NewServer(Configuration{StaticConfig: s.Cfg})
|
s.mcpServer, err = NewServer(Configuration{StaticConfig: s.Cfg})
|
||||||
|
|||||||
Reference in New Issue
Block a user