package mcp import ( "testing" "github.com/google/uuid" ) // TestNewServerRegistersTools verifies every tool registers with a valid // input schema. The MCP SDK panics at AddTool if a tool omits its object // input schema, so merely constructing the server exercises that contract — // this test would have caught the "missing input schema" panic. func TestNewServerRegistersTools(t *testing.T) { defer func() { if r := recover(); r != nil { t.Fatalf("newServer panicked (tool schema bug?): %v", r) } }() // pool is only used inside tool handlers (invoked per-call), not at // registration time, so a nil pool is safe for this construction test. s := newServer(nil, uuid.Nil) if s == nil { t.Fatal("newServer returned nil") } } func TestObjSchema(t *testing.T) { s := objSchema(prop{"foo", "string", "a foo"}, prop{"n", "integer", "a number"}) if s.Type != "object" { t.Errorf("schema type = %q, want object", s.Type) } if len(s.Properties) != 2 { t.Fatalf("got %d properties, want 2", len(s.Properties)) } if s.Properties["foo"].Type != "string" || s.Properties["n"].Type != "integer" { t.Errorf("property types wrong: %+v", s.Properties) } // empty schema still valid (object with no properties) if objSchema().Type != "object" { t.Error("empty objSchema not an object") } }