MCP server bridging GitHub webhooks via Cloudflare Worker for real-time event streaming
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
💡 Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Real-time GitHub webhook notifications for Claude via Cloudflare Worker + Durable Object.
From this release the Worker serves MCP protocol revision 2026-07-28 only. It keeps no compatibility lane for the previous revision.
initialize, which the Worker no longer answers. The failure is quiet: the bridge does not crash, it returns the protocol error as tool output text./events stream is not MCP and is unaffected, so a stale bridge still pushes event summaries while every tool call — including mark_processed — fails. The pending queue stops being cleared even though notifications look healthy.npx, and @latest is resolved at process start — an already-running Claude Desktop, Claude Code, or Codex keeps the copy it started with, however new the published version is. Quit it fully and reopen.The Worker and the bridge ship together, so a bridge from this release or later needs no configuration change.
| Component | Required |
|---|---|
| Node.js 18+ | MCP server |
| Cloudflare account | Worker deployment (self-hosting) |
Install the GitHub Webhook MCP app on your GitHub organization or account:
Note: When the app requests new permissions after an update, you must approve them in your GitHub notification or the app's installation settings. Webhooks will not be delivered until permissions are accepted.
Important: Do not create a separate repository webhook for the same endpoint. The GitHub App handles all webhook delivery — a repository webhook would cause duplicate or malformed requests.
Continue to the Installation guide to connect your AI assistant to the webhook service.
See the Installation wiki page for the full setup guide, including:
A published release does not reach a running client on its own. npx resolves the package version
once, when the process starts — including when the client config pins @latest — so an MCP client
that is already running keeps the version it started with no matter what the registry serves.
Restart the MCP client (Claude Desktop, Claude Code, Codex) to pick up a new release. The
restart is what moves the client onto the new version.
Check what the registry actually has with --prefer-online. The npm CLI caches registry metadata,
so a bare npm view can still report the previous version shortly after a publish:
User prompt:
"Are there any new GitHub notifications?"
Expected output:
The AI calls get_pending_status and returns a summary:
User prompt:
"Show me the details of the latest pull request event."
Expected output:
The AI calls list_pending_events to find the PR event, then get_event with the event ID to retrieve the full payload:
User prompt:
"I've reviewed all the push notifications, mark them as done."
Expected output:
The AI calls list_pending_events to find push events, then clears them with a single
mark_processed({ event_ids: [...] }) call:
User prompt:
"Did the CI checks pass on my latest PR?"
Expected output:
The AI calls list_pending_events to find check_run events related to the PR, then get_event for details:
| Tool | Description |
|---|---|
get_pending_status | Lightweight snapshot of pending event counts by type |
list_pending_events | Summaries of pending events (no full payloads) |
get_event | Full payload for a single event by ID |
get_webhook_events | Full payloads for all pending events |
mark_processed | Mark events as processed (event_id for one, event_ids for a batch) |
Stored events are purged automatically to bound Durable Object storage. The Worker
runs a time-based sweep on a Durable Object Alarm (daily), so cleanup happens even
for tenants that never call mark_processed:
| Event class | Retention window | Env var | Default |
|---|---|---|---|
Processed (mark_processed called) | older than the window is deleted | PURGE_AFTER_DAYS | 3 days |
| Unprocessed (never marked) | older than the window is deleted | UNPROCESSED_PURGE_AFTER_DAYS | 90 days |
mark_processed for promptness; the Alarm sweep is the
guarantee that covers abandoned tenants.worker/wrangler.toml ([vars]). Setting a
value to 0 purges that class immediately on sweep.Events are stored in a Cloudflare Durable Object (edge storage). The local MCP bridge proxies tool calls to the Worker and does not store event data locally.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/github-webhook-mcp)<a href="https://allmcps.com/mcp/github-webhook-mcp"><img src="https://allmcps.com/api/badge/github-webhook-mcp?style=directory" alt="Github Webhook Mcp on AllMCPs" /></a>