This document compares the current implementation of the Raku MCP SDK against the MCP Specification 2025-11-25 and identifies missing features.
| Category | Status | Notes |
|---|---|---|
| Base Protocol | ✅ Complete | JSON-RPC 2.0, lifecycle, version negotiation |
| Transports | ✅ Complete | Stdio, Streamable HTTP, Legacy SSE |
| Server Features | ✅ Complete | Tools/Resources/Prompts + pagination, templates, subscriptions, annotations |
| Client Features | ✅ Complete | Sampling with tools, completion, roots, elicitation |
| Utilities | ✅ Complete | Logging, progress, cancellation, ping |
| Authorization | ✅ Complete | OAuth 2.1 with PKCE, dynamic registration, M2M, enterprise IdP |
| New 2025-11-25 Features | ✅ Complete | Elicitation, Tasks, Sampling-with-tools, Extensions |
- JSON-RPC 2.0 message format (
MCP::JSONRPC) - Request/Response/Notification handling
- ID generation
- Error codes (ParseError, InvalidRequest, MethodNotFound, InvalidParams, InternalError)
- Lifecycle: Initialize/initialized handshake with version negotiation (server falls back to latest supported version if client's isn't recognized)
- JSON-RPC batching: Not supported (removed from spec in 2025-06-18)
- Complete implementation
- Proper newline-delimited JSON messages
- Full server-side implementation (POST/GET/DELETE)
- Full client-side implementation
- Session management (
MCP-Session-Idheader) Last-Event-IDreplay for SSE resumption- CORS handling via
allowed-origins - Protocol version validation (
MCP-Protocol-Versionheader) - Proper error responses per spec (400, 403, 404, 405, 406, 415)
- Server-side: GET
/ssefor SSE stream, POST/messagefor client messages - Client-side: connects to SSE endpoint, receives POST URL via
endpointevent - Origin validation
- Single-client model (one SSE connection at a time)
- Tool registration with name, description, schema
- Tool calling with arguments
- Builder pattern API
- Tool annotations (
readOnlyHint,destructiveHint,idempotentHint,openWorldHint) outputSchemafor structured tool outputs (2025-06-18)- Tool name validation (SEP-986:
^[a-zA-Z0-9_-]{1,64}$) tools/listpagination support
- Resource registration with URI, name, description, mimeType
- Resource reading
- Resource templates (URI templates with placeholders)
- Resource subscriptions (
resources/subscribe,resources/unsubscribe) notifications/resources/list_changedandnotifications/resources/updatedresources/listpagination support- Resource annotations (
audience,priority)
- Prompt registration with arguments
- Prompt retrieval with argument substitution
prompts/listpagination supportnotifications/prompts/list_changed
sampling/createMessagehandling with full parameter support- Tool definitions in sampling requests (SEP-1577)
toolChoiceparameter supportincludeContextparameter with capability validationstopReasonin responses- Tool validation in sampling messages
- Server-side
create-message()convenience method with tools/toolChoice/includeContext
Roottype withuriand optionalname- Client-side:
rootsconfiguration option- Handles
roots/listrequests from server set-roots()method sendsnotifications/roots/list_changed- Advertises
rootscapability (withlistChanged)
- Server-side:
list-roots()method to request roots from client
ElicitationCapabilitywith form/url mode supportElicitationActionenum (accept/decline/cancel)ElicitationResponsetype with content- Server-side:
elicit(message, schema)for form mode requestselicit-url(message, url, elicitation-id)for URL modenotify-elicitation-complete(elicitation-id)for completion
- Client-side:
elicitation-handlercallback for handling requests- Capability negotiation with form/url modes
URLElicitationRequirederror code (-32042)
progress()method on Server with automatic_meta.progressTokenextractionproto dispatch-requestsets$*MCP-PROGRESS-TOKENdynamic variable for all handlers- Explicit token parameter overrides implicit
_metatoken - No notification emitted when no token is available
- Client
progress()Supply emits typedProgressobjects fromnotifications/progress - Types defined (
Progress)
log()method on Server with level filteringLogLevelenum,LogEntrytype,parse-log-level,log-level-at-or-abovehelperslogging/setLevelrequest handler on Server stores and applies log level- Log notifications below configured level are suppressed
- Client
set-log-level()method sendslogging/setLevelrequest
- Server tracks in-flight requests and handles
notifications/cancelled - Client sends cancellation notification on timeout
- Both sides have
cancel-requestmethod for explicit cancellation is-cancelledmethod for handlers to check cancellation status
- Server responds to
pingrequests - Client has
ping()helper
completion/completerequest handling- Server:
add-prompt-completer(),add-resource-completer()for registering completers - Client:
complete-prompt(),complete-resource()convenience methods CompletionResulttype with values, total, hasMore- Auto-truncation to 100 values per spec
completionscapability advertised when completers registered
OAuth 2.1 authorization framework:
- ✅ OAuth 2.1 with PKCE (S256)
- ✅ Token refresh
- ✅ Resource indicators (RFC 8707)
- ✅ Authorization server metadata discovery (RFC 8414 + OIDC fallback)
- ✅ Protected resource metadata (RFC 9728)
- ✅ Server-side token validation with WWW-Authenticate headers
- ✅ Client-side automatic token management and 401 retry
- ✅ Dynamic client registration (RFC 7591)
Long-running operation support:
- Task creation with
taskhint intools/call - Task states:
working,input_required,completed,failed,cancelled tasks/getfor status pollingtasks/cancelfor cancellationtasks/resultfor blocking result retrievaltasks/listfor listing all tasksnotifications/tasks/statuson state changes- Tool-level
execution.taskSupportvia builder
- Extension capability negotiation via
experimentalhash - Extension settings and versioning
- Namespaced extension methods and notification dispatch
- Server:
register-extension(),unregister-extension() - Client:
register-extension(),server-extensions(),supports-extension()
- ✅ SEP-1046: OAuth client credentials (M2M) —
OAuthM2MClientwithclient_credentialsgrant - ✅ SEP-990: Enterprise IdP policy controls —
OAuthEnterpriseClientwith token exchange (RFC 8693) and JWT bearer grant (RFC 7523)
elicit-url()method for URL mode requestsnotify-elicitation-complete()for completion notificationsURLElicitationRequirederror code (-32042)
- Tool definitions in sampling requests
- Server-side agentic loops
The official Python SDK implements:
| Feature | Python SDK | Raku SDK |
|---|---|---|
| Tools | ✅ Full | ✅ Full + annotations |
| Resources | ✅ Full + templates + subscriptions | ✅ Full + templates + subscriptions |
| Prompts | ✅ Full | ✅ Full |
| Sampling | ✅ Full + tools | ✅ Full + tools |
| Roots | ✅ Full | ✅ Full |
| Elicitation | ✅ Full + URL mode | ✅ Full |
| OAuth 2.1 | ✅ Full | ✅ Full |
| Streamable HTTP | ✅ Full client + server | ✅ Full |
| SSE Transport | ✅ Full | ✅ Full |
| Tasks | ✅ Experimental | ✅ Done (experimental) |
| Completion | ✅ Full | ✅ Full |
| Pagination | ✅ Full | ✅ Full |
| Extensions | ✅ Experimental | ✅ Done (experimental) |
All priority items from the original roadmap have been completed, including expanded test coverage for progress tracking, error edge cases, and concurrent operations.
Current implementation targets: 2025-11-25 ✅
All key features for 2025-11-25 compliance are implemented.
Current tests cover:
- ✅ Types serialization (
01-types) - ✅ JSON-RPC encoding/decoding (
02-jsonrpc) - ✅ Builder patterns (
03-builders) - ✅ Transport interface (
04-transport) - ✅ Server dispatch and lifecycle (
05-server) - ✅ Client initialization (
06-client) - ✅ Top-level MCP exports (
07-mcp) - ✅ Sampling validation (
08-sampling) - ✅ HTTP transport (
09-http-transport) - ✅ OAuth 2.1 types, PKCE, server/client handlers (
10-oauth) - ✅ Tasks framework (
11-tasks) - ✅ Extensions framework (
12-extensions) - ✅ Resource templates (
13-resource-templates) - ✅ SSE transport (
14-sse-transport)
Areas with limited test coverage:
- Progress tracking (server notifications, client Supply)
- Error edge cases (malformed messages, transport failures)
- Concurrent operations (parallel requests, race conditions)
The Raku MCP SDK provides comprehensive MCP specification 2025-11-25 coverage. All transport types (Stdio, Streamable HTTP, Legacy SSE), all server features (Tools, Resources, Prompts), all client features (Sampling, Roots, Elicitation, Completion), and full OAuth 2.1 authorization are implemented. No significant gaps remain.