Skip to content

Commit a4c3b94

Browse files
committed
mcp/server: advertise completions only if installed
Previously, completions would always be advertised as a capability even if the CompletionHandler was not installed by the server. This CL fixes that.
1 parent a9a503f commit a4c3b94

File tree

9 files changed

+38
-36
lines changed

9 files changed

+38
-36
lines changed

mcp/server.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,9 +238,7 @@ func (s *Server) capabilities() *serverCapabilities {
238238
defer s.mu.Unlock()
239239

240240
caps := &serverCapabilities{
241-
// TODO(samthanawalla): check for completionHandler before advertising capability.
242-
Completions: &completionCapabilities{},
243-
Logging: &loggingCapabilities{},
241+
Logging: &loggingCapabilities{},
244242
}
245243
if s.opts.HasTools || s.tools.len() > 0 {
246244
caps.Tools = &toolCapabilities{ListChanged: true}
@@ -254,6 +252,9 @@ func (s *Server) capabilities() *serverCapabilities {
254252
caps.Resources.Subscribe = true
255253
}
256254
}
255+
if s.opts.CompletionHandler != nil {
256+
caps.Completions = &completionCapabilities{}
257+
}
257258
return caps
258259
}
259260

mcp/server_test.go

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,7 @@ func TestServerCapabilities(t *testing.T) {
242242
name: "No capabilities",
243243
configureServer: func(s *Server) {},
244244
wantCapabilities: &serverCapabilities{
245-
Completions: &completionCapabilities{},
246-
Logging: &loggingCapabilities{},
245+
Logging: &loggingCapabilities{},
247246
},
248247
},
249248
{
@@ -252,9 +251,8 @@ func TestServerCapabilities(t *testing.T) {
252251
s.AddPrompt(&Prompt{Name: "p"}, nil)
253252
},
254253
wantCapabilities: &serverCapabilities{
255-
Completions: &completionCapabilities{},
256-
Logging: &loggingCapabilities{},
257-
Prompts: &promptCapabilities{ListChanged: true},
254+
Logging: &loggingCapabilities{},
255+
Prompts: &promptCapabilities{ListChanged: true},
258256
},
259257
},
260258
{
@@ -263,9 +261,8 @@ func TestServerCapabilities(t *testing.T) {
263261
s.AddResource(&Resource{URI: "file:///r"}, nil)
264262
},
265263
wantCapabilities: &serverCapabilities{
266-
Completions: &completionCapabilities{},
267-
Logging: &loggingCapabilities{},
268-
Resources: &resourceCapabilities{ListChanged: true},
264+
Logging: &loggingCapabilities{},
265+
Resources: &resourceCapabilities{ListChanged: true},
269266
},
270267
},
271268
{
@@ -274,9 +271,8 @@ func TestServerCapabilities(t *testing.T) {
274271
s.AddResourceTemplate(&ResourceTemplate{URITemplate: "file:///rt"}, nil)
275272
},
276273
wantCapabilities: &serverCapabilities{
277-
Completions: &completionCapabilities{},
278-
Logging: &loggingCapabilities{},
279-
Resources: &resourceCapabilities{ListChanged: true},
274+
Logging: &loggingCapabilities{},
275+
Resources: &resourceCapabilities{ListChanged: true},
280276
},
281277
},
282278
{
@@ -293,9 +289,8 @@ func TestServerCapabilities(t *testing.T) {
293289
},
294290
},
295291
wantCapabilities: &serverCapabilities{
296-
Completions: &completionCapabilities{},
297-
Logging: &loggingCapabilities{},
298-
Resources: &resourceCapabilities{ListChanged: true, Subscribe: true},
292+
Logging: &loggingCapabilities{},
293+
Resources: &resourceCapabilities{ListChanged: true, Subscribe: true},
299294
},
300295
},
301296
{
@@ -304,9 +299,21 @@ func TestServerCapabilities(t *testing.T) {
304299
s.AddTool(tool, nil)
305300
},
306301
wantCapabilities: &serverCapabilities{
307-
Completions: &completionCapabilities{},
302+
Logging: &loggingCapabilities{},
303+
Tools: &toolCapabilities{ListChanged: true},
304+
},
305+
},
306+
{
307+
name: "With completions",
308+
configureServer: func(s *Server) {},
309+
serverOpts: ServerOptions{
310+
CompletionHandler: func(ctx context.Context, ss *ServerSession, params *CompleteParams) (*CompleteResult, error) {
311+
return nil, nil
312+
},
313+
},
314+
wantCapabilities: &serverCapabilities{
308315
Logging: &loggingCapabilities{},
309-
Tools: &toolCapabilities{ListChanged: true},
316+
Completions: &completionCapabilities{},
310317
},
311318
},
312319
{
@@ -324,6 +331,9 @@ func TestServerCapabilities(t *testing.T) {
324331
UnsubscribeHandler: func(ctx context.Context, up *UnsubscribeParams) error {
325332
return nil
326333
},
334+
CompletionHandler: func(ctx context.Context, ss *ServerSession, params *CompleteParams) (*CompleteResult, error) {
335+
return nil, nil
336+
},
327337
},
328338
wantCapabilities: &serverCapabilities{
329339
Completions: &completionCapabilities{},
@@ -342,11 +352,10 @@ func TestServerCapabilities(t *testing.T) {
342352
HasTools: true,
343353
},
344354
wantCapabilities: &serverCapabilities{
345-
Completions: &completionCapabilities{},
346-
Logging: &loggingCapabilities{},
347-
Prompts: &promptCapabilities{ListChanged: true},
348-
Resources: &resourceCapabilities{ListChanged: true},
349-
Tools: &toolCapabilities{ListChanged: true},
355+
Logging: &loggingCapabilities{},
356+
Prompts: &promptCapabilities{ListChanged: true},
357+
Resources: &resourceCapabilities{ListChanged: true},
358+
Tools: &toolCapabilities{ListChanged: true},
350359
},
351360
},
352361
}

mcp/streamable_test.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -314,9 +314,8 @@ func TestStreamableServerTransport(t *testing.T) {
314314
initReq := req(1, methodInitialize, &InitializeParams{})
315315
initResp := resp(1, &InitializeResult{
316316
Capabilities: &serverCapabilities{
317-
Completions: &completionCapabilities{},
318-
Logging: &loggingCapabilities{},
319-
Tools: &toolCapabilities{ListChanged: true},
317+
Logging: &loggingCapabilities{},
318+
Tools: &toolCapabilities{ListChanged: true},
320319
},
321320
ProtocolVersion: latestProtocolVersion,
322321
ServerInfo: &Implementation{Name: "testServer", Version: "v1.0.0"},
@@ -732,9 +731,8 @@ func TestStreamableClientTransportApplicationJSON(t *testing.T) {
732731
}
733732
initResult := &InitializeResult{
734733
Capabilities: &serverCapabilities{
735-
Completions: &completionCapabilities{},
736-
Logging: &loggingCapabilities{},
737-
Tools: &toolCapabilities{ListChanged: true},
734+
Logging: &loggingCapabilities{},
735+
Tools: &toolCapabilities{ListChanged: true},
738736
},
739737
ProtocolVersion: latestProtocolVersion,
740738
ServerInfo: &Implementation{Name: "testServer", Version: "v1.0.0"},

mcp/testdata/conformance/server/bad_requests.txtar

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ code_review
4141
"id": 2,
4242
"result": {
4343
"capabilities": {
44-
"completions": {},
4544
"logging": {},
4645
"prompts": {
4746
"listChanged": true

mcp/testdata/conformance/server/prompts.txtar

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ code_review
2525
"id": 1,
2626
"result": {
2727
"capabilities": {
28-
"completions": {},
2928
"logging": {},
3029
"prompts": {
3130
"listChanged": true

mcp/testdata/conformance/server/resources.txtar

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ info.txt
4545
"id": 1,
4646
"result": {
4747
"capabilities": {
48-
"completions": {},
4948
"logging": {},
5049
"resources": {
5150
"listChanged": true

mcp/testdata/conformance/server/tools.txtar

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ greet
2828
"id": 1,
2929
"result": {
3030
"capabilities": {
31-
"completions": {},
3231
"logging": {},
3332
"tools": {
3433
"listChanged": true

mcp/testdata/conformance/server/version-latest.txtar

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ response with its latest supported version.
1818
"id": 1,
1919
"result": {
2020
"capabilities": {
21-
"completions": {},
2221
"logging": {}
2322
},
2423
"protocolVersion": "2025-06-18",

mcp/testdata/conformance/server/version-older.txtar

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ support.
1818
"id": 1,
1919
"result": {
2020
"capabilities": {
21-
"completions": {},
2221
"logging": {}
2322
},
2423
"protocolVersion": "2024-11-05",

0 commit comments

Comments
 (0)