Skip to main content
GetMCP targets the Model Context Protocol specification revision 2025-11-25 with negotiation back to 2025-06-18. This page is the authoritative answer to “does GetMCP support X?” — broken down by spec section. The transport is Streamable HTTP (with an outbound message queue for server-initiated traffic). The legacy plain-SSE transport has been deprecated by the MCP spec and is intentionally not implemented — Streamable HTTP supersedes it. stdio isn’t supported as of now (it’s mostly relevant for locally-spawned subprocesses, which doesn’t fit the WordPress hosting model).

Legend

SymbolMeaning
Fully implemented per spec
🟡Partial — handler exists, but the server doesn’t yet emit it from internal events (e.g. a long-running tool won’t auto-fire progress; the emitter is callable from a custom hook)
Not implemented

Lifecycle

MethodDirectionStatusNotes
initializeClient → ServerProtocol negotiation, capability declaration, server info
notifications/initializedClient → ServerAcknowledges initialization complete
pingEitherRound-trip health check

Tools

MethodDirectionStatusNotes
tools/listClient → ServerPaginated; supports cursor continuation
tools/callClient → ServerJSON Schema validation, parameter mapping, response transforms, per-tool rate limits
notifications/tools/list_changedServer → ClientServer-side tool config changes don’t auto-notify connected clients yet

Resources

MethodDirectionStatusNotes
resources/listClient → ServerPaginated
resources/templates/listClient → ServerURI templates for parameterised resources
resources/readClient → ServerMIME-typed responses
resources/subscribeClient → ServerSubscribes a session to URI-change notifications
resources/unsubscribeClient → ServerCancels a subscription
notifications/resources/list_changedServer → ClientNot emitted yet
notifications/resources/updatedServer → ClientNot emitted yet

Prompts

MethodDirectionStatusNotes
prompts/listClient → ServerPaginated
prompts/getClient → ServerRenders parameterised template
notifications/prompts/list_changedServer → ClientNot emitted yet

Sampling

MethodDirectionStatusNotes
sampling/createMessageServer → ClientServer can ask the client model for a completion (subject to client’s sampling capability)

Logging

MethodDirectionStatusNotes
logging/setLevelClient → ServerPer-session log filter
notifications/messageServer → Client🟡Emitter API is callable — see Server Logging Notifications. Existing tool calls don’t auto-emit; available via the getmcp_log_message_emit hook

Completion

MethodDirectionStatusNotes
completion/completeClient → ServerArgument autocomplete for prompt + resource template parameters

Progress & Cancellation

MethodDirectionStatusNotes
notifications/progressServer → Client🟡Emitter API in place; built-in ToolExecutor is synchronous and doesn’t emit progress mid-run. See Progress Notifications
notifications/cancelledClient → Server🟡Handler accepts the cancel flag; the synchronous executor doesn’t poll it. See Cancellation Notifications

Roots

MethodDirectionStatusNotes
roots/listServer → ClientServer can request the client’s local filesystem roots. See Roots List
notifications/roots/list_changedClient → ServerClient signals the user changed their roots; server invalidates its cached copy

Elicitation

MethodDirectionStatusNotes
elicitation/createServer → ClientServer can ask the client for typed user input mid-tool. See Elicitation

Outbound Message Queue

The Streamable HTTP transport doesn’t yet open a long-poll SSE channel for server-initiated traffic. Instead, GetMCP buffers server-initiated messages (roots/list requests, progress notifications, log messages, elicitation requests) in a per-session transient queue and piggy-backs them onto the next HTTP response as a JSON-RPC batch. So if you issue a tools/call, the response body may contain:
[
  { "jsonrpc": "2.0", "id": 7, "result": { "content": [...] } },
  { "jsonrpc": "2.0", "method": "notifications/progress", "params": { ... } },
  { "jsonrpc": "2.0", "id": "srv-12", "method": "roots/list", "params": {} }
]
Clients that already handle JSON-RPC batches (the official SDKs do) will see no change. A future SSE GET handler can drain the same queue without changing the emitter API.

Not Implemented

The following spec methods have no handler today:
  • notifications/tools/list_changed
  • notifications/resources/list_changed
  • notifications/resources/updated
  • notifications/prompts/list_changed
These are all “the server changed; come refresh” notifications. Clients re-list on their own cadence in practice, so this hasn’t been a blocker. Open a discussion at github.com/InfiWebs/getmcp if you need them prioritised.
The MCP specification is evolving rapidly. GetMCP’s protocol version is set in includes/transport/class-streamable-http.php and pinned to the spec revision it was tested against — initialize will negotiate down for older clients.