Skip to content

claude code mcp spec compliance — list_changed, progress, sampling, messages, and async gaps #31893

Description

@yigitkonur

hey team, consolidating a bunch of scattered issues (many closed in circular duplicate loops) into one place. hopefully this is useful as a single reference for mcp spec features that are missing or partially working.

list_changed notifications (server → claude code)

2.1.0 changelog says "added support for MCP list_changed notifications" — and it partially landed, but there are still gaps:

tools/list_changed:

prompts/list_changed:

resources/list_changed:

outgoing notifications (claude code → server)

roots/list_changed:

other mcp spec features not implemented

looked through the spec and existing issues — here's what else is missing:

mcp spec feature spec link status in claude code related issues
notifications/progress (progress tokens) spec ignored — no progress display for long-running tools #4157
notifications/message (server → client) spec received but never displayed to user or injected into context #3174
sampling (server requests llm inference) spec not implemented #1785
async/background tool execution all mcp tool calls are sequential and blocking #1759, #8712, #1478

context on why this matters

the agent sdk already has a sophisticated notification system for its own subagent lifecycle. looking at the published types in @anthropic-ai/claude-agent-sdk:

// task lifecycle events
SDKTaskStartedMessage     { subtype: 'task_started', task_id, description }
SDKTaskProgressMessage    { subtype: 'task_progress', task_id, usage: { total_tokens, tool_uses, duration_ms } }
SDKTaskNotificationMessage  { subtype: 'task_notification', task_id, status: 'completed'|'failed'|'stopped', summary }

// hook events
TeammateIdleHookInput     { teammate_name, team_name }
TaskCompletedHookInput    { task_id, task_subject, teammate_name?, team_name? }

this is great — start, progress, complete, with usage tracking and hook integration. the infrastructure for handling async notifications clearly exists and works well.

the mcp spec defines similar primitives (progress notifications, messages, list_changed, sampling) that would let third-party mcp servers participate in the same kind of workflows. implementing these would make the whole ecosystem stronger and let mcp servers do things like:

  • report progress on long-running operations without blocking
  • dynamically register tools based on runtime context (game state, service discovery, plugin loading)
  • hot-reload prompts and resources during development without restarting
  • request llm inference through the client's existing auth/subscription

prior issues (for reference)

issue topic current state
#2722 prompts/list_changed closed (circular dup)
#3326 resources/list_changed + autocomplete closed (dup of #2722)
#4094 prompts/list_changed closed (circular dup of #2722)
#4118 tools/list_changed open, 14 comments, partially addressed
#13646 tools/list_changed source analysis closed (dup of #4118)
#15667 tools/list_changed repro closed (dup of #4118)
#24195 tools/list_changed race condition closed (dup of #4118)
#26663 roots/list_changed (outgoing) open
#1478 notification-driven auto-resume closed
#1759 background tasks via mcp closed
#1785 sampling support open
#2799 elicitation support open
#3174 notifications/message display closed
#4157 progress notifications closed
#8712 background mcp tool execution closed

would love to see these gaps closed over time. happy to help test or provide repro cases for any of these. thanks for building claude code — it's genuinely great to work with, and getting mcp spec parity would make it even better.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:mcpbugSomething isn't workinghas reproHas detailed reproduction stepsstaleIssue is inactive

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions