Skip to content

Commit 15ed00f

Browse files
authored
Updated tools (#81)
1 parent ec8ccc2 commit 15ed00f

2 files changed

Lines changed: 28 additions & 0 deletions

File tree

mcp/server/tool.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
sdkmcp "github.com/modelcontextprotocol/go-sdk/mcp"
1111
llm "github.com/mutablelogic/go-llm"
1212
schema "github.com/mutablelogic/go-llm/kernel/schema"
13+
jsonschema "github.com/mutablelogic/go-server/pkg/jsonschema"
1314
types "github.com/mutablelogic/go-server/pkg/types"
1415
trace "go.opentelemetry.io/otel/trace"
1516
)
@@ -44,6 +45,9 @@ func (s *Server) RemoveTools(names ...string) {
4445
func sdkToolFromTool(t llm.Tool, tracer trace.Tracer) (*sdkmcp.Tool, sdkmcp.ToolHandler, error) {
4546
// Build input schema — SDK accepts any JSON-marshalable value.
4647
inputSchema := t.InputSchema()
48+
if inputSchema == nil {
49+
inputSchema = jsonschema.MustFor[struct{}]()
50+
}
4751
var err error
4852
inputSchemaRaw, err := json.Marshal(inputSchema)
4953
if err != nil {

mcp/server/tool_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
// Packages
1212
sdkmcp "github.com/modelcontextprotocol/go-sdk/mcp"
13+
llm "github.com/mutablelogic/go-llm"
1314
homeassistant "github.com/mutablelogic/go-llm/homeassistant/connector"
1415
schema "github.com/mutablelogic/go-llm/kernel/schema"
1516
mock "github.com/mutablelogic/go-llm/mcp/mock"
@@ -285,6 +286,29 @@ func TestAddToolsBadInputSchema(t *testing.T) {
285286
}
286287
}
287288

289+
type nilInputSchemaTool struct{}
290+
291+
func (nilInputSchemaTool) Name() string { return "nil_input_schema" }
292+
func (nilInputSchemaTool) Description() string { return "tool with nil input schema" }
293+
func (nilInputSchemaTool) InputSchema() *jsonschema.Schema { return nil }
294+
func (nilInputSchemaTool) OutputSchema() *jsonschema.Schema {
295+
return nil
296+
}
297+
func (nilInputSchemaTool) Meta() llm.ToolMeta { return llm.ToolMeta{} }
298+
func (nilInputSchemaTool) Run(context.Context, json.RawMessage) (any, error) {
299+
return map[string]any{"ok": true}, nil
300+
}
301+
302+
func TestAddToolsNilInputSchemaDefaultsToEmptyObject(t *testing.T) {
303+
srv, err := server.New("test-server", "1.0.0")
304+
if err != nil {
305+
t.Fatal(err)
306+
}
307+
if err := srv.AddTools(nilInputSchemaTool{}); err != nil {
308+
t.Fatalf("expected nil input schema to be accepted, got error: %v", err)
309+
}
310+
}
311+
288312
///////////////////////////////////////////////////////////////////////////////
289313
// TESTS — Session context injection (T6)
290314

0 commit comments

Comments
 (0)