How ChatGPT MCP Events Work (It's Webhooks) ChatGPT has become the first major AI client to support MCP Events, an extension to the Model Context Protocol that lets an AI client subscribe to events in another system and act when they occur, according to Abhi Vaidyanatha of Standard Webhooks. ChatGPT uses only webhook delivery today, requiring MCP protocol version 2026-07-28 and plugin configuration, and its subscribe call carries a client-supplied signing secret and a ttlMs of 3600000. The MCP Events spec remains a draft in the MCP working group, and servers declare support through events/list, events/subscribe and events/unsubscribe alongside three delivery modes: poll, push and webhook. How ChatGPT MCP Events Work It's Webhooks - Name - Abhi Vaidyanatha MCP Events is an extension to the Model Context Protocol https://modelcontextprotocol.io/ MCP that lets an AI client subscribe to things happening in another system, like a new comment, a merged pull request, or a P1 incident, and act when they occur. ChatGPT https://chatgpt.com/ is the first major client to support it, and your MCP server delivers ChatGPT events as Standard Webhooks. My CEO, Tom, wrote a few months ago that MCP going stateless https://www.svix.com/blog/stateless-mcp/ was the precursor to MCP becoming event-driven. Today, most of that will be realized. Below is how MCP Events works, what ChatGPT does with it, what's new compared to the webhooks you already send, and how to support it. The spec https://github.com/modelcontextprotocol/experimental-ext-triggers-events/blob/main/docs/design-sketch-proposal.md is still a draft in the MCP working group, so I'll make sure to keep this updated with a webhook that notifies me when the spec changes. An MCP server that supports events declares it in its capabilities and answers three new methods. events/list describes the events the server offers. Each one has a name, a description, the delivery modes it supports, an inputSchema for the arguments a client can filter on a document ID, a channel, a severity , and a payloadSchema for the data each event carries. events/subscribe and events/unsubscribe start and stop a subscription. The spec defines three ways to deliver events, and a server can offer any of them per event type. If you choose to poll, the client asks for new events relative to a cursor. With push, the client will open a long-lived stream and events arrive on it. With a webhook, the client registers a callback URL and the server POSTs each event there. Webhooks are the only one of these three designed for remote servers and long-running agents, since nobody has to keep a connection open. Every event is defined similarly: an eventId for deduplication, the event name , a timestamp , the data , and a cursor the client can use to resume after a gap. When an event arrives, the agent may call your tools in response; naturally, this is done through standard MCP authorization. OpenAI's MCP Events docs https://developers.openai.com/plugins/build/mcp-events provide a good use case scenario for this. For example, someone tells ChatGPT, "when anyone comments on this doc, make the edit they asked for." ChatGPT will then subscribe to a comment.created event on your MCP server, filtered to that document. When a comment hits, your server sends the event, and ChatGPT picks it up in that chat and queues the work immediately. It can also batch several events into one task run. ChatGPT events work in Work chats on the web, in the desktop app with Cloud selected, and in dots. Your server needs to speak MCP protocol version 2026-07-28 and be configured as a plugin, and once it lists events, they show up next to your tools on the plugin page. ChatGPT only uses webhook delivery today. Here's the subscribe call it makes: { "method": "events/subscribe", "params": { "name": "comment.created", "arguments": { "document id": "doc 758" }, "delivery": { "mode": "webhook", "url": "https://callbacks.example.com/mcp/abt758", "secret": "whsec MfKQ9r8GKYqrTwjyOuLoOkEdHeReZIo2LaLaSw42" }, "cursor": null, "ttlMs": 3600000 } } Two things there are unusual if you've built webhooks before: ChatGPT brings its own signing secret, and it asks for the subscription to expire. We'll touch on both of these things in a bit. When something happens, your server POSTs the event to the callback URL: POST /mcp/abt758 HTTP/1.1 Content-Type: application/json webhook-id: evt 758 webhook-timestamp: 1792584300 webhook-signature: v1,