Skip to content

Commit 5527ef2

Browse files
samthanawallaBC-ACherednichenko
authored andcommitted
mcp/server: advertise completions only if installed (modelcontextprotocol#213)
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 c6facb5 commit 5527ef2

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
@@ -239,9 +239,7 @@ func (s *Server) capabilities() *serverCapabilities {
239239
defer s.mu.Unlock()
240240

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

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
@@ -58,7 +58,6 @@ code_review
5858
"id": 2,
5959
"result": {
6060
"capabilities": {
61-
"completions": {},
6261
"logging": {},
6362
"prompts": {
6463
"listChanged": true

mcp/testdata/conformance/server/prompts.txtar

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ code_review
2727
"id": 1,
2828
"result": {
2929
"capabilities": {
30-
"completions": {},
3130
"logging": {},
3231
"prompts": {
3332
"listChanged": true

mcp/testdata/conformance/server/resources.txtar

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ info.txt
5050
"id": 1,
5151
"result": {
5252
"capabilities": {
53-
"completions": {},
5453
"logging": {},
5554
"resources": {
5655
"listChanged": true

mcp/testdata/conformance/server/tools.txtar

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ greet
3030
"id": 1,
3131
"result": {
3232
"capabilities": {
33-
"completions": {},
3433
"logging": {},
3534
"tools": {
3635
"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)