Alignment with the MCP Events proposal
This extension tracks the webhook slice of the MCP committee’s events proposal. Smithery is intentionally minimal: it implements only what the spec requires for webhook delivery, and skips optional surface area while the proposal is still draft. What Smithery implements today:events/list— full parityevents/subscribein webhook mode only, with mandatory TTL refreshevents/unsubscribe
pollandpush(events/stream) delivery modes- Cursor replay — events start “from now”
truncated,maxAge,maxEventsparameters- Control envelopes (
gap,terminated) deliveryStatusreporting- Asymmetric endpoint verification or server signing
delivery.url and Standard Webhooks delivery.secret unchanged. Your server signs deliveries with that secret and POSTs them to that URL.
How it works
- The consumer creates a trigger through Smithery, supplying their own webhook URL and Standard Webhooks secret.
- Smithery, authenticated as the connection’s principal, calls your
ai.smithery/events/subscribeand forwards the consumer’sdelivery.urlanddelivery.secretunchanged. - Your server uses the connection’s credentials to register an upstream webhook (or start whatever event source it needs) and returns
{ id, refreshBefore }. - Before
refreshBefore, the consumer re-POSTs through Smithery, which re-calls subscribe with the same key — your server treats this as an idempotent upsert and resets the TTL. - When the upstream fires, your server POSTs the event directly to the consumer’s
delivery.url, signed withdelivery.secret. Smithery is not involved in delivery. - When the consumer deletes the trigger (or stops refreshing), Smithery calls
ai.smithery/events/unsubscribeto tear down the upstream registration.
Negotiation
Advertise the extension in yourinitialize response:
Methods
ai.smithery/events/list
Return the catalog of event types your server supports. Each entry declares the params a subscriber must provide and the payload your server will deliver.
ai.smithery/events/subscribe
Smithery calls this when a consumer activates a trigger, and again before each refreshBefore to keep the subscription alive. Register an upstream webhook pointing at delivery.url, retain delivery.secret to sign each POST, and return a stable subscription id plus a fresh refreshBefore.
Request:
Idempotent upsert and TTL refresh
ai.smithery/events/subscribe is keyed by (principal, name, params, delivery.url). If a subscription with the same key already exists, treat the call as an upsert:
- TTL — reset, return a new
refreshBefore. delivery.secret— replace. During rotation, the spec recommends dual-signing with the old and new secrets for a short grace window using Standard Webhooks’ multi-signature support.id— unchanged.
id.
If Smithery stops refreshing before refreshBefore, expire the subscription and tear down the upstream webhook — no explicit unsubscribe is required.
ai.smithery/events/unsubscribe
Smithery calls this on eager teardown (consumer deleted the trigger). Tear down the upstream registration you created.
(principal, name, params, delivery.url) and deregister the corresponding upstream webhook. The subscription id is not accepted here — the key is the canonical identifier.
Event delivery
When an upstream event arrives, POST it todelivery.url, signed with the Standard Webhooks headers and the consumer’s delivery.secret. The consumer verifies the signature and processes the event.
You are responsible for:
- Declaring a
payloadSchemathat accurately describes thedatafield. - Configuring upstream webhook registration so the payload delivered to the consumer matches that schema.
- Never including secrets or PII the consumer shouldn’t see.
EventOccurrence:
Webhook signing
Sign every POST with the Standard Webhooks HMAC profile. Required headers:
Sign the raw request body with a Standard Webhooks library. Each retry attempt MUST regenerate the timestamp and signature so receivers do not reject a later attempt as stale.
API reference
Extension capability
Advertise duringinitialize under capabilities.extensions:
MCP methods (Smithery → server)
Learn more
- Using triggers — consumer-facing docs
- MCP Events proposal (PR #1)
- Publish a server
- Standard Webhooks spec