Skip to content

Commit 233ff62

Browse files
committed
must be non-nil
1 parent 77027f4 commit 233ff62

File tree

12 files changed

+43
-37
lines changed

12 files changed

+43
-37
lines changed

examples/completion/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func main() {
4040

4141
// Create the MCP Server instance and assign the handler.
4242
// No server running, just showing the configuration.
43-
_ = mcp.NewServer(nil, &mcp.ServerOptions{
43+
_ = mcp.NewServer(&mcp.Implementation{Name: "server"}, &mcp.ServerOptions{
4444
CompletionHandler: myCompletionHandler,
4545
})
4646

examples/memory/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func main() {
9191
kb := knowledgeBase{s: kbStore}
9292

9393
// Setup MCP server with knowledge base tools
94-
server := mcp.NewServer(nil, nil)
94+
server := mcp.NewServer(&mcp.Implementation{Name: "memory"}, nil)
9595
mcp.AddTool(server, &mcp.Tool{
9696
Name: "create_entities",
9797
Description: "Create multiple new entities in the knowledge graph",

internal/readme/client/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ func main() {
1717
ctx := context.Background()
1818

1919
// Create a new client, with no features.
20-
client := mcp.NewClient(nil, nil)
20+
client := mcp.NewClient(&mcp.Implementation{Name: "mcp-client", Version: "v1.0.0"}, nil)
2121

2222
// Connect to a server over stdin/stdout
2323
transport := mcp.NewCommandTransport(exec.Command("myserver"))

mcp/client.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,12 @@ type Client struct {
3232
//
3333
// Use [Client.Connect] to connect it to an MCP server.
3434
//
35-
// If impl is nil, a default name and version are used, and the title is left empty.
35+
// The first argument must not be nil.
36+
//
3637
// If non-nil, the provided options configure the Client.
3738
func NewClient(impl *Implementation, opts *ClientOptions) *Client {
3839
if impl == nil {
39-
impl = &Implementation{Name: "Go MCP SDK Client", Version: "v0.1.0"}
40+
panic("nil Implementation")
4041
}
4142
c := &Client{
4243
impl: impl,

mcp/cmd_test.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,15 @@ func TestMain(m *testing.M) {
3232
func runServer() {
3333
ctx := context.Background()
3434

35-
server := mcp.NewServer(nil, nil)
35+
server := mcp.NewServer(testImpl, nil)
3636
mcp.AddTool(server, &mcp.Tool{Name: "greet", Description: "say hi"}, SayHi)
3737
if err := server.Run(ctx, mcp.NewStdioTransport()); err != nil {
3838
log.Fatal(err)
3939
}
4040
}
4141

4242
func TestServerRunContextCancel(t *testing.T) {
43-
server := mcp.NewServer("greeter", "v0.0.1", nil)
43+
server := mcp.NewServer(&mcp.Implementation{Name: "greeter", Version: "v0.0.1"}, nil)
4444
mcp.AddTool(server, &mcp.Tool{Name: "greet", Description: "say hi"}, SayHi)
4545

4646
ctx, cancel := context.WithCancel(context.Background())
@@ -55,7 +55,7 @@ func TestServerRunContextCancel(t *testing.T) {
5555
}()
5656

5757
// send a ping to the server to ensure it's running
58-
client := mcp.NewClient("client", "v0.0.1", nil)
58+
client := mcp.NewClient(&mcp.Implementation{Name: "client", Version: "v0.0.1"}, nil)
5959
session, err := client.Connect(ctx, clientTransport)
6060
if err != nil {
6161
t.Fatal(err)
@@ -87,7 +87,7 @@ func TestServerInterrupt(t *testing.T) {
8787

8888
cmd := createServerCommand(t)
8989

90-
client := mcp.NewClient(nil, nil)
90+
client := mcp.NewClient(testImpl, nil)
9191
session, err := client.Connect(ctx, mcp.NewCommandTransport(cmd))
9292
if err != nil {
9393
t.Fatal(err)
@@ -125,7 +125,7 @@ func TestCmdTransport(t *testing.T) {
125125

126126
cmd := createServerCommand(t)
127127

128-
client := mcp.NewClient("client", "v0.0.1", nil)
128+
client := mcp.NewClient(&mcp.Implementation{Name: "client", Version: "v0.0.1"}, nil)
129129
session, err := client.Connect(ctx, mcp.NewCommandTransport(cmd))
130130
if err != nil {
131131
t.Fatal(err)
@@ -174,3 +174,5 @@ func requireExec(t *testing.T) {
174174
t.Skip("unsupported OS")
175175
}
176176
}
177+
178+
var testImpl = &mcp.Implementation{Name: "test", Version: "v1.0.0"}

mcp/example_progress_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ var nextProgressToken atomic.Int64
1616
// This middleware function adds a progress token to every outgoing request
1717
// from the client.
1818
func Example_progressMiddleware() {
19-
c := mcp.NewClient(nil, nil)
19+
c := mcp.NewClient(testImpl, nil)
2020
c.AddSendingMiddleware(addProgressToken[*mcp.ClientSession])
2121
_ = c
2222
}

mcp/mcp_test.go

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func TestEndToEnd(t *testing.T) {
6464
notificationChans["progress_server"] <- 0
6565
},
6666
}
67-
s := NewServer(nil, sopts)
67+
s := NewServer(testImpl, sopts)
6868
AddTool(s, &Tool{
6969
Name: "greet",
7070
Description: "say hi",
@@ -125,7 +125,7 @@ func TestEndToEnd(t *testing.T) {
125125
notificationChans["progress_client"] <- 0
126126
},
127127
}
128-
c := NewClient(nil, opts)
128+
c := NewClient(testImpl, opts)
129129
rootAbs, err := filepath.Abs(filepath.FromSlash("testdata/files"))
130130
if err != nil {
131131
t.Fatal(err)
@@ -510,7 +510,7 @@ func basicConnection(t *testing.T, config func(*Server)) (*ServerSession, *Clien
510510
ctx := context.Background()
511511
ct, st := NewInMemoryTransports()
512512

513-
s := NewServer(nil, nil)
513+
s := NewServer(testImpl, nil)
514514
if config != nil {
515515
config(s)
516516
}
@@ -519,7 +519,7 @@ func basicConnection(t *testing.T, config func(*Server)) (*ServerSession, *Clien
519519
t.Fatal(err)
520520
}
521521

522-
c := NewClient(nil, nil)
522+
c := NewClient(testImpl, nil)
523523
cs, err := c.Connect(ctx, ct)
524524
if err != nil {
525525
t.Fatal(err)
@@ -562,13 +562,13 @@ func TestBatching(t *testing.T) {
562562
ctx := context.Background()
563563
ct, st := NewInMemoryTransports()
564564

565-
s := NewServer(nil, nil)
565+
s := NewServer(testImpl, nil)
566566
_, err := s.Connect(ctx, st)
567567
if err != nil {
568568
t.Fatal(err)
569569
}
570570

571-
c := NewClient(nil, nil)
571+
c := NewClient(testImpl, nil)
572572
// TODO: this test is broken, because increasing the batch size here causes
573573
// 'initialize' to block. Therefore, we can only test with a size of 1.
574574
// Since batching is being removed, we can probably just delete this.
@@ -632,7 +632,7 @@ func TestMiddleware(t *testing.T) {
632632
ctx := context.Background()
633633
ct, st := NewInMemoryTransports()
634634

635-
s := NewServer(nil, nil)
635+
s := NewServer(testImpl, nil)
636636
ss, err := s.Connect(ctx, st)
637637
if err != nil {
638638
t.Fatal(err)
@@ -656,7 +656,7 @@ func TestMiddleware(t *testing.T) {
656656
s.AddSendingMiddleware(traceCalls[*ServerSession](&sbuf, "S1"), traceCalls[*ServerSession](&sbuf, "S2"))
657657
s.AddReceivingMiddleware(traceCalls[*ServerSession](&sbuf, "R1"), traceCalls[*ServerSession](&sbuf, "R2"))
658658

659-
c := NewClient(nil, nil)
659+
c := NewClient(testImpl, nil)
660660
c.AddSendingMiddleware(traceCalls[*ClientSession](&cbuf, "S1"), traceCalls[*ClientSession](&cbuf, "S2"))
661661
c.AddReceivingMiddleware(traceCalls[*ClientSession](&cbuf, "R1"), traceCalls[*ClientSession](&cbuf, "R2"))
662662

@@ -741,13 +741,13 @@ func TestNoJSONNull(t *testing.T) {
741741
var logbuf safeBuffer
742742
ct = NewLoggingTransport(ct, &logbuf)
743743

744-
s := NewServer(nil, nil)
744+
s := NewServer(testImpl, nil)
745745
ss, err := s.Connect(ctx, st)
746746
if err != nil {
747747
t.Fatal(err)
748748
}
749749

750-
c := NewClient(nil, nil)
750+
c := NewClient(testImpl, nil)
751751
cs, err := c.Connect(ctx, ct)
752752
if err != nil {
753753
t.Fatal(err)
@@ -810,7 +810,7 @@ func TestKeepAlive(t *testing.T) {
810810
serverOpts := &ServerOptions{
811811
KeepAlive: 100 * time.Millisecond,
812812
}
813-
s := NewServer(nil, serverOpts)
813+
s := NewServer(testImpl, serverOpts)
814814
AddTool(s, greetTool(), sayHi)
815815

816816
ss, err := s.Connect(ctx, st)
@@ -822,7 +822,7 @@ func TestKeepAlive(t *testing.T) {
822822
clientOpts := &ClientOptions{
823823
KeepAlive: 100 * time.Millisecond,
824824
}
825-
c := NewClient(nil, clientOpts)
825+
c := NewClient(testImpl, clientOpts)
826826
cs, err := c.Connect(ctx, ct)
827827
if err != nil {
828828
t.Fatal(err)
@@ -855,7 +855,7 @@ func TestKeepAliveFailure(t *testing.T) {
855855
ct, st := NewInMemoryTransports()
856856

857857
// Server without keepalive (to test one-sided keepalive)
858-
s := NewServer(nil, nil)
858+
s := NewServer(testImpl, nil)
859859
AddTool(s, greetTool(), sayHi)
860860
ss, err := s.Connect(ctx, st)
861861
if err != nil {
@@ -866,7 +866,7 @@ func TestKeepAliveFailure(t *testing.T) {
866866
clientOpts := &ClientOptions{
867867
KeepAlive: 50 * time.Millisecond,
868868
}
869-
c := NewClient(nil, clientOpts)
869+
c := NewClient(testImpl, clientOpts)
870870
cs, err := c.Connect(ctx, ct)
871871
if err != nil {
872872
t.Fatal(err)
@@ -895,3 +895,5 @@ func TestKeepAliveFailure(t *testing.T) {
895895

896896
t.Errorf("expected connection to be closed by keepalive, but it wasn't. Last error: %v", err)
897897
}
898+
899+
var testImpl = &Implementation{Name: "test", Version: "v1.0.0"}

mcp/server.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,12 @@ type ServerOptions struct {
7272
// The server can be connected to one or more MCP clients using [Server.Start]
7373
// or [Server.Run].
7474
//
75-
// If impl is nil, a default name and version are used, and the title is left empty.
76-
// If non-nil, the provided options is used to configure the server.
75+
// The first argument must not be nil.
76+
//
77+
// If non-nil, the provided options are used to configure the server.
7778
func NewServer(impl *Implementation, opts *ServerOptions) *Server {
7879
if impl == nil {
79-
impl = &Implementation{Name: "Go MCP SDK Server", Version: "v0.1.0"}
80+
panic("nil Implementation")
8081
}
8182
if opts == nil {
8283
opts = new(ServerOptions)

mcp/server_example_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func ExampleServer() {
3636
log.Fatal(err)
3737
}
3838

39-
client := mcp.NewClient(nil, nil)
39+
client := mcp.NewClient(&mcp.Implementation{Name: "client"}, nil)
4040
clientSession, err := client.Connect(ctx, clientTransport)
4141
if err != nil {
4242
log.Fatal(err)
@@ -59,8 +59,8 @@ func ExampleServer() {
5959

6060
// createSessions creates and connects an in-memory client and server session for testing purposes.
6161
func createSessions(ctx context.Context) (*mcp.ClientSession, *mcp.ServerSession, *mcp.Server) {
62-
server := mcp.NewServer(nil, nil)
63-
client := mcp.NewClient(nil, nil)
62+
server := mcp.NewServer(testImpl, nil)
63+
client := mcp.NewClient(testImpl, nil)
6464
serverTransport, clientTransport := mcp.NewInMemoryTransports()
6565
serverSession, err := server.Connect(ctx, serverTransport)
6666
if err != nil {

mcp/sse_example_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func Add(ctx context.Context, cc *mcp.ServerSession, params *mcp.CallToolParamsF
2727
}
2828

2929
func ExampleSSEHandler() {
30-
server := mcp.NewServer(&mcp.Implementation{Name: "adder"}, nil)
30+
server := mcp.NewServer(&mcp.Implementation{Name: "adder", Version: "v0.0.1"}, nil)
3131
mcp.AddTool(server, &mcp.Tool{Name: "add", Description: "add two numbers"}, Add)
3232

3333
handler := mcp.NewSSEHandler(func(*http.Request) *mcp.Server { return server })
@@ -36,7 +36,7 @@ func ExampleSSEHandler() {
3636

3737
ctx := context.Background()
3838
transport := mcp.NewSSEClientTransport(httpServer.URL, nil)
39-
client := mcp.NewClient(nil, nil)
39+
client := mcp.NewClient(&mcp.Implementation{Name: "test", Version: "v1.0.0"}, nil)
4040
cs, err := client.Connect(ctx, transport)
4141
if err != nil {
4242
log.Fatal(err)

0 commit comments

Comments
 (0)