Three pages carried names the 2026-07-28 specification does not use: "Multi-Round-Trip Results" for the pattern the specification titles Multi Round-Trip Requests (MRTR) and serves at basic/patterns/mrtr - the results are the `InputRequiredResult` wire type, not the feature - plus "Completions" for the utility the specification titles Completion, and "Notification Subscriptions" for the pattern it titles Subscriptions. Retitle the three pages to the specification's names, move them to /server/mrtr/ and /client/mrtr/, /server/completion/, and /server/subscriptions/ following the specification's slugs, update every internal reference, and keep the URLs published with v1.3.0 working via jekyll-redirect-from. The Discovery page keeps its title but moves from /server/discovery/ to /server/discover/, matching the specification's slug and the `server/discover` RPC, with its published URL redirected the same way.
54 lines
1.7 KiB
Markdown
54 lines
1.7 KiB
Markdown
---
|
|
layout: default
|
|
title: Completion
|
|
nav_order: 16
|
|
redirect_from:
|
|
- /server/completions/
|
|
---
|
|
|
|
# Completion
|
|
|
|
MCP spec includes [Completions](https://modelcontextprotocol.io/specification/latest/server/utilities/completion),
|
|
which enable servers to provide autocompletion suggestions for prompt arguments and resource URIs.
|
|
|
|
To enable completions, declare the `completions` capability and register a handler:
|
|
|
|
```ruby
|
|
server = MCP::Server.new(
|
|
name: "my_server",
|
|
prompts: [CodeReviewPrompt],
|
|
resource_templates: [FileTemplate],
|
|
capabilities: { completions: {} },
|
|
)
|
|
|
|
server.completion_handler do |params|
|
|
ref = params[:ref]
|
|
argument = params[:argument]
|
|
value = argument[:value]
|
|
|
|
case ref[:type]
|
|
when "ref/prompt"
|
|
values = case argument[:name]
|
|
when "language"
|
|
["python", "pytorch", "pyside"].select { |v| v.start_with?(value) }
|
|
else
|
|
[]
|
|
end
|
|
{ completion: { values: values, hasMore: false } }
|
|
when "ref/resource"
|
|
{ completion: { values: [], hasMore: false } }
|
|
end
|
|
end
|
|
```
|
|
|
|
The handler receives a `params` hash with:
|
|
|
|
- `ref` - The reference (`{ type: "ref/prompt", name: "..." }` or `{ type: "ref/resource", uri: "..." }`)
|
|
- `argument` - The argument being completed (`{ name: "...", value: "..." }`)
|
|
- `context` (optional) - Previously resolved arguments (`{ arguments: { ... } }`)
|
|
|
|
The handler must return a hash with a `completion` key containing `values` (array of strings), and optionally `total` and `hasMore`.
|
|
The SDK automatically enforces the 100-item limit per the MCP specification.
|
|
|
|
The server validates that the referenced prompt, resource, or resource template is registered before calling the handler.
|
|
Requests for unknown references return an error.
|