From e0e304e51e8253b025572375e2414702abff1867 Mon Sep 17 00:00:00 2001 From: Jonathan Amsterdam Date: Wed, 7 May 2025 11:50:44 -0400 Subject: [PATCH] internal/mcp: rename Make* to New* Change-Id: I8d3d2ca125b7c24dd265937c4fe910ea823ab811 Reviewed-on: https://go-review.googlesource.com/c/tools/+/670537 Reviewed-by: Robert Findley LUCI-TryBot-Result: Go LUCI --- examples/hello/main.go | 4 ++-- examples/sse/main.go | 4 ++-- mcp/cmd_test.go | 2 +- mcp/mcp_test.go | 12 ++++++------ mcp/prompt.go | 4 ++-- mcp/prompt_test.go | 12 ++++++------ mcp/server_example_test.go | 2 +- mcp/sse_example_test.go | 2 +- mcp/sse_test.go | 2 +- mcp/tool.go | 6 +++--- mcp/tool_test.go | 14 +++++++------- 11 files changed, 32 insertions(+), 32 deletions(-) diff --git a/examples/hello/main.go b/examples/hello/main.go index 693b345..c86983b 100644 --- a/examples/hello/main.go +++ b/examples/hello/main.go @@ -40,10 +40,10 @@ func main() { flag.Parse() server := mcp.NewServer("greeter", "v0.0.1", nil) - server.AddTools(mcp.MakeTool("greet", "say hi", SayHi, mcp.Input( + server.AddTools(mcp.NewTool("greet", "say hi", SayHi, mcp.Input( mcp.Property("name", mcp.Description("the name to say hi to")), ))) - server.AddPrompts(mcp.MakePrompt("greet", "", PromptHi)) + server.AddPrompts(mcp.NewPrompt("greet", "", PromptHi)) if *httpAddr != "" { handler := mcp.NewSSEHandler(func(*http.Request) *mcp.Server { diff --git a/examples/sse/main.go b/examples/sse/main.go index 3bd75c3..f87680e 100644 --- a/examples/sse/main.go +++ b/examples/sse/main.go @@ -33,10 +33,10 @@ func main() { } server1 := mcp.NewServer("greeter1", "v0.0.1", nil) - server1.AddTools(mcp.MakeTool("greet1", "say hi", SayHi)) + server1.AddTools(mcp.NewTool("greet1", "say hi", SayHi)) server2 := mcp.NewServer("greeter2", "v0.0.1", nil) - server2.AddTools(mcp.MakeTool("greet2", "say hello", SayHi)) + server2.AddTools(mcp.NewTool("greet2", "say hello", SayHi)) log.Printf("MCP servers serving at %s\n", *httpAddr) handler := mcp.NewSSEHandler(func(request *http.Request) *mcp.Server { diff --git a/mcp/cmd_test.go b/mcp/cmd_test.go index 53cdb89..28a8b1c 100644 --- a/mcp/cmd_test.go +++ b/mcp/cmd_test.go @@ -31,7 +31,7 @@ func runServer() { ctx := context.Background() server := mcp.NewServer("greeter", "v0.0.1", nil) - server.AddTools(mcp.MakeTool("greet", "say hi", SayHi)) + server.AddTools(mcp.NewTool("greet", "say hi", SayHi)) if err := server.Run(ctx, mcp.NewStdIOTransport(), nil); err != nil { log.Fatal(err) diff --git a/mcp/mcp_test.go b/mcp/mcp_test.go index be2497f..ff4f270 100644 --- a/mcp/mcp_test.go +++ b/mcp/mcp_test.go @@ -38,18 +38,18 @@ func TestEndToEnd(t *testing.T) { s := NewServer("testServer", "v1.0.0", nil) // The 'greet' tool says hi. - s.AddTools(MakeTool("greet", "say hi", sayHi)) + s.AddTools(NewTool("greet", "say hi", sayHi)) // The 'fail' tool returns this error. failure := errors.New("mcp failure") s.AddTools( - MakeTool("fail", "just fail", func(context.Context, *ClientConnection, struct{}) ([]Content, error) { + NewTool("fail", "just fail", func(context.Context, *ClientConnection, struct{}) ([]Content, error) { return nil, failure }), ) s.AddPrompts( - MakePrompt("code_review", "do a code review", func(_ context.Context, _ *ClientConnection, params struct{ Code string }) (*protocol.GetPromptResult, error) { + NewPrompt("code_review", "do a code review", func(_ context.Context, _ *ClientConnection, params struct{ Code string }) (*protocol.GetPromptResult, error) { return &protocol.GetPromptResult{ Description: "Code review prompt", Messages: []protocol.PromptMessage{ @@ -57,7 +57,7 @@ func TestEndToEnd(t *testing.T) { }, }, nil }), - MakePrompt("fail", "", func(_ context.Context, _ *ClientConnection, params struct{}) (*protocol.GetPromptResult, error) { + NewPrompt("fail", "", func(_ context.Context, _ *ClientConnection, params struct{}) (*protocol.GetPromptResult, error) { return nil, failure }), ) @@ -218,7 +218,7 @@ func basicConnection(t *testing.T, tools ...*Tool) (*ClientConnection, *Client) } func TestServerClosing(t *testing.T) { - cc, c := basicConnection(t, MakeTool("greet", "say hi", sayHi)) + cc, c := basicConnection(t, NewTool("greet", "say hi", sayHi)) defer c.Close() ctx := context.Background() @@ -293,7 +293,7 @@ func TestCancellation(t *testing.T) { } return nil, nil } - _, sc := basicConnection(t, MakeTool("slow", "a slow request", slowRequest)) + _, sc := basicConnection(t, NewTool("slow", "a slow request", slowRequest)) defer sc.Close() ctx, cancel := context.WithCancel(context.Background()) diff --git a/mcp/prompt.go b/mcp/prompt.go index 56fde10..fc6c66f 100644 --- a/mcp/prompt.go +++ b/mcp/prompt.go @@ -25,7 +25,7 @@ type Prompt struct { Handler PromptHandler } -// MakePrompt is a helper to use reflection to create a prompt for the given +// NewPrompt is a helper to use reflection to create a prompt for the given // handler. // // The arguments for the prompt are extracted from the request type for the @@ -33,7 +33,7 @@ type Prompt struct { // of type string or *string. The argument names for the resulting prompt // definition correspond to the JSON names of the request fields, and any // fields that are not marked "omitempty" are considered required. -func MakePrompt[TReq any](name, description string, handler func(context.Context, *ClientConnection, TReq) (*protocol.GetPromptResult, error), opts ...PromptOption) *Prompt { +func NewPrompt[TReq any](name, description string, handler func(context.Context, *ClientConnection, TReq) (*protocol.GetPromptResult, error), opts ...PromptOption) *Prompt { schema, err := jsonschema.For[TReq]() if err != nil { panic(err) diff --git a/mcp/prompt_test.go b/mcp/prompt_test.go index 9ef99f5..2cffd2c 100644 --- a/mcp/prompt_test.go +++ b/mcp/prompt_test.go @@ -13,26 +13,26 @@ import ( "github.com/modelcontextprotocol/go-sdk/mcp/protocol" ) -// testPromptHandler is used for type inference in TestMakePrompt. +// testPromptHandler is used for type inference in TestNewPrompt. func testPromptHandler[T any](context.Context, *mcp.ClientConnection, T) (*protocol.GetPromptResult, error) { panic("not implemented") } -func TestMakePrompt(t *testing.T) { +func TestNewPrompt(t *testing.T) { tests := []struct { prompt *mcp.Prompt want []protocol.PromptArgument }{ { - mcp.MakePrompt("empty", "", testPromptHandler[struct{}]), + mcp.NewPrompt("empty", "", testPromptHandler[struct{}]), nil, }, { - mcp.MakePrompt("add_arg", "", testPromptHandler[struct{}], mcp.Argument("x")), + mcp.NewPrompt("add_arg", "", testPromptHandler[struct{}], mcp.Argument("x")), []protocol.PromptArgument{{Name: "x"}}, }, { - mcp.MakePrompt("combo", "", testPromptHandler[struct { + mcp.NewPrompt("combo", "", testPromptHandler[struct { Name string `json:"name"` Country string `json:"country,omitempty"` State string @@ -48,7 +48,7 @@ func TestMakePrompt(t *testing.T) { } for _, test := range tests { if diff := cmp.Diff(test.want, test.prompt.Definition.Arguments); diff != "" { - t.Errorf("MakePrompt(%v) mismatch (-want +got):\n%s", test.prompt.Definition.Name, diff) + t.Errorf("NewPrompt(%v) mismatch (-want +got):\n%s", test.prompt.Definition.Name, diff) } } } diff --git a/mcp/server_example_test.go b/mcp/server_example_test.go index a52b46f..bb4260a 100644 --- a/mcp/server_example_test.go +++ b/mcp/server_example_test.go @@ -27,7 +27,7 @@ func ExampleServer() { clientTransport, serverTransport := mcp.NewLocalTransport() server := mcp.NewServer("greeter", "v0.0.1", nil) - server.AddTools(mcp.MakeTool("greet", "say hi", SayHi)) + server.AddTools(mcp.NewTool("greet", "say hi", SayHi)) clientConnection, err := server.Connect(ctx, serverTransport, nil) if err != nil { diff --git a/mcp/sse_example_test.go b/mcp/sse_example_test.go index 3007c1d..125bcc0 100644 --- a/mcp/sse_example_test.go +++ b/mcp/sse_example_test.go @@ -26,7 +26,7 @@ func Add(ctx context.Context, cc *mcp.ClientConnection, params *AddParams) ([]mc func ExampleSSEHandler() { server := mcp.NewServer("adder", "v0.0.1", nil) - server.AddTools(mcp.MakeTool("add", "add two numbers", Add)) + server.AddTools(mcp.NewTool("add", "add two numbers", Add)) handler := mcp.NewSSEHandler(func(*http.Request) *mcp.Server { return server }) httpServer := httptest.NewServer(handler) diff --git a/mcp/sse_test.go b/mcp/sse_test.go index d557425..327eff6 100644 --- a/mcp/sse_test.go +++ b/mcp/sse_test.go @@ -20,7 +20,7 @@ func TestSSEServer(t *testing.T) { t.Run(fmt.Sprintf("closeServerFirst=%t", closeServerFirst), func(t *testing.T) { ctx := context.Background() server := NewServer("testServer", "v1.0.0", nil) - server.AddTools(MakeTool("greet", "say hi", sayHi)) + server.AddTools(NewTool("greet", "say hi", sayHi)) sseHandler := NewSSEHandler(func(*http.Request) *Server { return server }) diff --git a/mcp/tool.go b/mcp/tool.go index b889254..9dfce8b 100644 --- a/mcp/tool.go +++ b/mcp/tool.go @@ -23,7 +23,7 @@ type Tool struct { Handler ToolHandler } -// MakeTool is a helper to make a tool using reflection on the given handler. +// NewTool is a helper to make a tool using reflection on the given handler. // // If provided, variadic [ToolOption] values may be used to customize the tool. // @@ -32,11 +32,11 @@ type Tool struct { // schema may be customized using the [Input] option. // // The handler request type must translate to a valid schema, as documented by -// [jsonschema.ForType]; otherwise, MakeTool panics. +// [jsonschema.ForType]; otherwise, NewTool panics. // // TODO: just have the handler return a CallToolResult: returning []Content is // going to be inconsistent with other server features. -func MakeTool[TReq any](name, description string, handler func(context.Context, *ClientConnection, TReq) ([]Content, error), opts ...ToolOption) *Tool { +func NewTool[TReq any](name, description string, handler func(context.Context, *ClientConnection, TReq) ([]Content, error), opts ...ToolOption) *Tool { schema, err := jsonschema.For[TReq]() if err != nil { panic(err) diff --git a/mcp/tool_test.go b/mcp/tool_test.go index bb8cb48..c7eeb94 100644 --- a/mcp/tool_test.go +++ b/mcp/tool_test.go @@ -14,18 +14,18 @@ import ( "github.com/modelcontextprotocol/go-sdk/jsonschema" ) -// testToolHandler is used for type inference in TestMakeTool. +// testToolHandler is used for type inference in TestNewTool. func testToolHandler[T any](context.Context, *mcp.ClientConnection, T) ([]mcp.Content, error) { panic("not implemented") } -func TestMakeTool(t *testing.T) { +func TestNewTool(t *testing.T) { tests := []struct { tool *mcp.Tool want *jsonschema.Schema }{ { - mcp.MakeTool("basic", "", testToolHandler[struct { + mcp.NewTool("basic", "", testToolHandler[struct { Name string `json:"name"` }]), &jsonschema.Schema{ @@ -38,7 +38,7 @@ func TestMakeTool(t *testing.T) { }, }, { - mcp.MakeTool("enum", "", testToolHandler[struct{ Name string }], mcp.Input( + mcp.NewTool("enum", "", testToolHandler[struct{ Name string }], mcp.Input( mcp.Property("Name", mcp.Enum("x", "y", "z")), )), &jsonschema.Schema{ @@ -51,7 +51,7 @@ func TestMakeTool(t *testing.T) { }, }, { - mcp.MakeTool("required", "", testToolHandler[struct { + mcp.NewTool("required", "", testToolHandler[struct { Name string `json:"name"` Language string `json:"language"` X int `json:"x,omitempty"` @@ -71,7 +71,7 @@ func TestMakeTool(t *testing.T) { }, }, { - mcp.MakeTool("set_schema", "", testToolHandler[struct { + mcp.NewTool("set_schema", "", testToolHandler[struct { X int `json:"x,omitempty"` Y int `json:"y,omitempty"` }], mcp.Input( @@ -84,7 +84,7 @@ func TestMakeTool(t *testing.T) { } for _, test := range tests { if diff := cmp.Diff(test.want, test.tool.Definition.InputSchema, cmpopts.IgnoreUnexported(jsonschema.Schema{})); diff != "" { - t.Errorf("MakeTool(%v) mismatch (-want +got):\n%s", test.tool.Definition.Name, diff) + t.Errorf("NewTool(%v) mismatch (-want +got):\n%s", test.tool.Definition.Name, diff) } } }