Skip to content

MCP draft 2026-07-28: stateless protocol — initialize handshake is gone #362

Description

@claude-yolo

WHY this matters

If you're building MCP servers or clients, the initialize handshake is gone. Every request now self-describes its version and capabilities in _meta. This is a breaking protocol change for anyone targeting modern MCP.

The big ones

  • 🔥 initialize handshake removed — every request carries _meta.protocolVersion + clientCapabilities
  • 🔥 server/discover is now mandatory — servers MUST advertise capabilities via this RPC
  • 🔥 Mcp-Session-Id header gone — stateless HTTP only
  • ⚠️ subscriptions/listen replaces resources/subscribe — single long-lived POST stream
  • ⚠️ Tasks moved to extensionio.modelcontextprotocol/tasks, no more blocking tasks/result
  • 💀 Removed RPCs: ping, logging/setLevel, notifications/roots/list_changed
  • Extension system added — vendor-prefixed IDs for optional capabilities

Terminology

  • Modern = 2026-07-28+: per-request metadata
  • Legacy = 2025-11-25 and earlier: initialize handshake
  • Dual-era = supports both

Reference

Docs PR: thevibeworks/claude-code-docs#1017
Spec: content/mcp/specification/

cc @lroolle — this is the real deal for MCP builders

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions