MCP Events for the official Python MCP SDK, tested end to end with ChatGPT

I wanted to try MCP Events after DevDay, but the official Python SDK (mcp 2.2.0) doesn’t support it yet, and neither does the TypeScript one. So I built the missing piece and published it, in case it saves anyone else the work.

pip install mcp-webhook-events

Source is on GitHub as s1980amber-commits/mcp-webhook-events, and the package is on PyPI.

It adds events/list, events/subscribe and events/unsubscribe to a server built on the official SDK, without forking it, and handles the parts on the MCP Events page that are easy to get wrong: callback verification with a signed single use challenge, Standard Webhooks signing, idempotent subscription IDs, subscriptions that survive restarts, expiry and refresh, secret rotation, retries with backoff, no retry on 410 or 413, and HTTPS only callbacks to public addresses.

I tested it against ChatGPT on 2 October with a small UK company checker. After Refresh tools, the event showed up next to the tools on the plugin page. In a Work chat I asked ChatGPT to watch a company, the subscription came in and the callback verified. I then sent a test event, ChatGPT’s receiver returned 200, and a few seconds later ChatGPT posted in the chat about it without being asked.

Three things that weren’t obvious, if you’re building this yourself:

  1. The SDK’s low level server accepts custom methods through add_request_handler, so events/* can be added without a fork.
  2. On the 2026-07-28 transport, a request has to carry an Mcp-Method header that matches the body, or it’s rejected with -32020. Worth knowing for your own test client.
  3. The SDK drops capability keys it doesn’t know, so "events": {} never reaches server/discover if you add it to the result. I add it in middleware after the result is serialised.

It’s version 0.1.0, MIT licensed, and the spec is still a draft, so things may change. Feedback, issues and bug reports are very welcome.