From 83d4663da1b16037fe57ebfef6f48a4b9fb38086 Mon Sep 17 00:00:00 2001 From: rainerkruschwitz Date: Fri, 6 Mar 2026 11:33:43 +0100 Subject: [PATCH] fix(schema): use []string for QueryDatalogInput.Inputs to satisfy Gemini API When using graphthulhu with Google Gemini-based AI clients, tool registration fails with HTTP 400: tools[N].function_declarations[0].parameters.properties[inputs].items: missing field The root cause: []any generates a JSON Schema array without an 'items' field. Anthropic's API accepts this silently; Google's API rejects it. Fix: change Inputs to []string. DataScript bindings are scalar values that can be represented as strings. A conversion loop in QueryDatalog bridges []string back to []any for the internal DatascriptQuery call. --- .gitignore | 2 ++ tools/search.go | 6 +++++- types/tools.go | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 7b8cc3f..9b02c96 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,5 @@ CLAUDE.md # OS .DS_Store Thumbs.db +*.exe +*.bak diff --git a/tools/search.go b/tools/search.go index 6190a55..1770bc1 100644 --- a/tools/search.go +++ b/tools/search.go @@ -180,7 +180,11 @@ func (s *Search) QueryProperties(ctx context.Context, req *mcp.CallToolRequest, // QueryDatalog executes raw DataScript queries. func (s *Search) QueryDatalog(ctx context.Context, req *mcp.CallToolRequest, input types.QueryDatalogInput) (*mcp.CallToolResult, any, error) { - raw, err := s.client.DatascriptQuery(ctx, input.Query, input.Inputs...) + anyInputs := make([]any, len(input.Inputs)) + for i, v := range input.Inputs { + anyInputs[i] = v + } + raw, err := s.client.DatascriptQuery(ctx, input.Query, anyInputs...) if err != nil { return errorResult(fmt.Sprintf("Datalog query failed: %v", err)), nil, nil } diff --git a/types/tools.go b/types/tools.go index 3fa7cfd..8adffe6 100644 --- a/types/tools.go +++ b/types/tools.go @@ -55,7 +55,7 @@ type QueryPropertiesInput struct { type QueryDatalogInput struct { Query string `json:"query" jsonschema:"Datalog/DataScript query string"` - Inputs []any `json:"inputs,omitempty" jsonschema:"Query input bindings"` + Inputs []string `json:"inputs,omitempty" jsonschema:"Query input bindings (string representations)"` } type FindByTagInput struct {