| Filename | Latest commit message | Latest commit date |
|---|---|---|
- Unify cursor expiry into in-band `truncated: true` (drop -32014 CursorExpired): poll result body, push re-sends notifications/events/active mid-stream, webhook refresh response + {"type":"gap"} control envelope; client never re-subscribes for a gap
- Add `maxAge` (seconds) to bound replay across all modes; servers may decline by truncating to now
- Heartbeat carries cursor (push) and refresh response carries the safe-watermark cursor (webhook) so the client's position advances during quiet periods
- Webhook now requires an authenticated principal (key is (principal, url, name, params)); drop body `id` (route via X-MCP-Subscription-Id); add Non-event webhook bodies subsection (gap/terminated/verification with `type` discriminator)
- Drop subscription `id` from poll/stream (one sub per request; correlate via JSON-RPC id / requestId)
- Rewrite Summary as a how-it-works overview; add Key Design Decisions table; add OQ5 (task state changes as events) and OQ6 (endpoint verification + asymmetric server signing)
- Consistency pass across diagrams, examples, error lists, and appendix step references
|
||
| .github | ||
| docs | ||
| .gitignore | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| README.md | ||
Triggers & Events Working Group
⚠️ Experimental — This repository is an incubation space for the Triggers & Events Working Group. Contents are exploratory and do not represent official MCP specifications or recommendations.
Mission
The Triggers & Events Working Group exists to define how MCP servers proactively notify clients of state changes. Today, clients learn about server-side updates by polling or holding an SSE connection open. This WG will specify a standardized callback mechanism — webhooks or similar — that lets servers push notifications when new data is available, with defined ordering guarantees that hold across all transports.
See the full Working Group Charter for scope, authority, and operations.
Scope
In Scope
- Specification work: SEPs defining the trigger/callback mechanism, subscription lifecycle, delivery semantics, and event ordering guarantees
- Reference implementations: SDK components demonstrating server-initiated notifications and client-side callback handling
- Cross-cutting concerns: Coordination with the Transports WG on transport-specific delivery behavior, and with the Agents WG where task completion notifications intersect with event triggers
- Documentation: Specification sections covering event-driven patterns and migration guidance from polling-based approaches
Out of Scope
- Changes to the transport wire format or session model (owned by the Transports WG)
- General-purpose pub/sub infrastructure beyond what the MCP protocol requires
- Modifications to existing notification primitives (
notifications/resources/updated,notifications/tools/list_changed, etc.) that do not relate to proactive server-initiated delivery
Related Groups
| Group | Overlap |
|---|---|
| Transports WG | Delivery and ordering guarantees depend on transport capabilities; callback semantics must be coherent across stdio, Streamable HTTP, and future transports |
| Agents WG | SEP-1686 (Tasks) identifies webhook-style task completion notifications as a future consideration; this WG owns that mechanism |
Leadership
| Role | Name | Organization | GitHub |
|---|---|---|---|
| Lead | Clare Liguori | Amazon Web Services | @clareliguori |
| Lead | Peter Alexander | Anthropic | @pja-ant |
Repository Contents
This repository will hold proposals, reference implementations, and experimental findings as the WG's work progresses. See CONTRIBUTING.md for how to participate.