github-webhook-mcp
Provides tools for receiving and managing GitHub webhook events, including checking pending event status, listing pending events, retrieving full event payloads, and marking events as processed.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@github-webhook-mcpAny new GitHub notifications?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
github-webhook-mcp
Real-time GitHub webhook notifications for Claude via Cloudflare Worker + Durable Object.
Architecture
GitHub ──POST──▶ Cloudflare Worker ──▶ Durable Object (SQLite)
│
├── MCP tools (Streamable HTTP)
├── WebSocket real-time stream
│
┌────────────────┘
│
Desktop / Codex: .mcpb local bridge ──▶ polling via MCP tools
Claude Code CLI: .mcpb local bridge ──▶ WebSocket → channel notificationsCloudflare Worker receives GitHub webhooks, verifies signatures, stores events in a Durable Object with SQLite.
Local MCP bridge (.mcpb) proxies tool calls to the Worker and optionally connects via WebSocket for real-time channel notifications.
No local webhook receiver or tunnel required.
Related MCP server: Discord Notification MCP Server
Breaking change: MCP protocol revision 2026-07-28
From this release the Worker serves MCP protocol revision 2026-07-28 only. It keeps no compatibility lane for the previous revision.
Bridge versions older than this release stop working. They open a session with
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.Real-time channel notifications keep arriving, which hides the breakage. The
/eventsstream is not MCP and is unaffected, so a stale bridge still pushes event summaries while every tool call — includingmark_processed— fails. The pending queue stops being cleared even though notifications look healthy.Restart the MCP client to pick up the new bridge. The bridge is launched with
npx, and@latestis 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.Pinning the bridge version leaves you stuck. If your MCP client config pins a version older than this release, restarting does not help; remove the pin (or move it forward) first.
The Worker and the bridge ship together, so a bridge from this release or later needs no configuration change.
Prerequisites
Component | Required |
Node.js 18+ | MCP server |
Cloudflare account | Worker deployment (self-hosting) |
Getting Started
1. Install the GitHub App
Install the GitHub Webhook MCP app on your GitHub organization or account:
Visit the GitHub App installation page
Select the organization or account to install on
Choose which repositories to grant access to (or all repositories)
Approve the requested permissions
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.
2. Set up the MCP client
Continue to the Installation guide to connect your AI assistant to the webhook service.
Installation
See the Installation wiki page for the full setup guide, including:
Quick Start with the preview instance
MCP Client Setup for Claude Desktop, Claude Code CLI, and Codex
Self-Hosting Guide for Cloudflare Workers deployment
Updating
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:
npm view github-webhook-mcp version --prefer-onlineUsage Examples
Example 1: Check pending webhook status
User prompt:
"Are there any new GitHub notifications?"
Expected output:
The AI calls get_pending_status and returns a summary:
You have 3 pending webhook events:
- 2 push events
- 1 pull_request eventExample 2: Inspect a specific event
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:
PR #42 "Fix login timeout" was opened by @alice in repo acme/web-app
Branch: fix/login-timeout → main
Status: open
Changed files: 3Example 3: Process events after review
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:
Marked 2 push events as processed:
- Push to main by @bob (3 commits)
- Push to develop by @alice (1 commit)Example 4: Monitor CI status via webhooks
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:
CI results for PR #42 "Fix login timeout":
- build (ubuntu-latest): ✓ passed
- lint: ✓ passed
- test (node-18): ✓ passed
All checks passed.MCP Tools
Tool | Description |
| Lightweight snapshot of pending event counts by type |
| Summaries of pending events (no full payloads) |
| Full payload for a single event by ID |
| Full payloads for all pending events |
| Mark events as processed ( |
Event Retention
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 ( | older than the window is deleted |
|
|
Unprocessed (never marked) | older than the window is deleted |
|
|
The longer window for unprocessed events is intentional: unprocessed means user-unseen, so the safety margin before dropping is wide (the 3-day vs 90-day asymmetry is by design).
The sweep runs via a Durable Object Alarm on a daily cadence and reschedules itself, so it fires independently of consumption. Processed events are also purged immediately on
mark_processedfor promptness; the Alarm sweep is the guarantee that covers abandoned tenants.Both windows are configurable in
worker/wrangler.toml([vars]). Setting a value to0purges that class immediately on sweep.Known limitation: the windows bound event age, not volume. A high-rate, never-consumed tenant can still reach Cloudflare's 1 GB-per-DO ceiling before the 90-day window applies. A volume-based hard cap is tracked separately.
Monorepo Structure
worker/ — Cloudflare Worker + Durable Objects
local-mcp/ — Local stdio MCP bridge (TypeScript, dev)
mcp-server/ — .mcpb package for Claude Desktop
shared/ — Shared types and utilitiesPrivacy Policy
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.
Extension privacy policy: https://smgjp.com/privacy-policy-github-webhook-mcp/
Support
GitHub Issues: https://github.com/Liplus-Project/github-webhook-mcp/issues
Wiki (EN / JA)
Requirements: docs/0-requirements.md
Related
Liplus-Project/liplus-language — Li+ language specification
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceEnables Claude Code to send Telegram notifications when tasks complete, errors occur, or user intervention is needed. Runs serverless on Cloudflare Workers with support for formatted messages and flexible chat targeting.1122MIT
- Alicense-qualityDmaintenanceEnables Claude Code to send notifications to Discord channels via webhooks when tasks complete, errors occur, or user intervention is needed. Deployed serverlessly on Cloudflare Workers with support for rich message formatting and embeds.8MIT
- FlicenseAqualityBmaintenanceAutomates GitHub workflows (branch creation, testing, commit/push, PR) through natural language instructions in Claude Code.8
- Flicense-qualityDmaintenanceDeployable remote MCP server on Cloudflare Workers without authentication, enabling custom tool integration with AI Playground and Claude Desktop.
Related MCP Connectors
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Liplus-Project/github-webhook-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server