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:
- The SDK’s low level server accepts custom methods through
add_request_handler, soevents/*can be added without a fork. - On the 2026-07-28 transport, a request has to carry an
Mcp-Methodheader that matches the body, or it’s rejected with -32020. Worth knowing for your own test client. - The SDK drops capability keys it doesn’t know, so
"events": {}never reachesserver/discoverif 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.