
Product
PHP and Composer Support Is Now in Beta
Socket’s PHP and Composer support is now in Beta for all customers, with PHP reachability analysis generally available.
github-webhook-mcp
Advanced tools
Stdio MCP proxy that bridges local MCP clients (Claude Desktop, Claude Code, Codex, etc.) to a remote github-webhook-mcp Cloudflare Worker. The Worker receives GitHub webhook deliveries, persists them in a per-tenant Durable Object (SQLite), and exposes them through MCP tools and a real-time WebSocket stream.
This package is the client-side proxy only. Webhook ingestion, tenant routing, persistence, and the MCP server itself run on the Worker. See the main repository for architecture and self-hosting instructions.
tools/call to the Worker's Streamable HTTP MCP endpoint (/mcp)./events endpoint and re-emits incoming webhook events as Claude Code claude/channel notifications (real-time push, no polling).~/.github-webhook-mcp/ (mode 0600) and refreshes them silently before expiry.https://github-webhook.smgjp.com; you can also point at your own deployment)The proxy is published to npm and exposes a github-webhook-mcp binary.
Run directly with npx (no global install required):
npx github-webhook-mcp
Or install globally:
npm install -g github-webhook-mcp
github-webhook-mcp
The first run opens a browser window to complete OAuth against the Worker. After authorization, tokens are stored under ~/.github-webhook-mcp/ and refreshed automatically.
Add the server to your MCP client configuration. Example for Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"github-webhook": {
"command": "npx",
"args": ["-y", "github-webhook-mcp"]
}
}
}
To target a self-hosted Worker, set the WEBHOOK_WORKER_URL environment variable:
{
"mcpServers": {
"github-webhook": {
"command": "npx",
"args": ["-y", "github-webhook-mcp"],
"env": {
"WEBHOOK_WORKER_URL": "https://your-worker.example.workers.dev"
}
}
}
}
config.toml)[mcp.github-webhook-mcp]
command = "npx"
args = ["-y", "github-webhook-mcp"]
[mcp.github-webhook-mcp.env]
WEBHOOK_WORKER_URL = "https://your-worker.example.workers.dev"
WEBHOOK_CHANNEL = "0"
WEBHOOK_CHANNEL=0 disables the WebSocket real-time channel. Set it to 0 for clients that do not support claude/channel notifications (Claude Desktop, Codex). Leave it at the default to enable real-time push for Claude Code.
When WEBHOOK_CHANNEL is enabled (the default), the proxy declares the claude/channel experimental capability and re-emits new webhook events as channel notifications. To make them visible in a Claude Code session, load the channel:
claude --dangerously-load-development-channels server:github-webhook-mcp
Notifications are one-way: they include event type, repo, action, title, sender, and URL. There is no reply tool.
| Variable | Required | Default | Description |
|---|---|---|---|
WEBHOOK_WORKER_URL | No | https://github-webhook.smgjp.com | Base URL of the Cloudflare Worker that exposes the MCP endpoint, the WebSocket stream, and OAuth metadata. |
WEBHOOK_CHANNEL | No | 1 (enabled) | Set to 0 to disable the WebSocket connection and claude/channel notifications. |
OAuth client registration and tokens are stored in:
~/.github-webhook-mcp/oauth-client.json (dynamic client registration)~/.github-webhook-mcp/oauth-tokens.json (access + refresh tokens)Delete these files to force a fresh authorization flow.
Note on the default Worker URL.
https://github-webhook.smgjp.comis a preview instance offered for evaluation. It has no SLA and may change or stop without notice. For production use, deploy your own Worker (see the main repository's installation guide) and setWEBHOOK_WORKER_URLaccordingly.
All tools are read-only except mark_processed.
| Tool | Description |
|---|---|
get_pending_status | Lightweight snapshot of pending (unprocessed) webhook events: pending count, latest received timestamp, and event types. Use this for periodic polling before requesting details. |
list_pending_events | Summary list of pending events (limit: 1-100, default 20). Returns metadata only — id, type, action, repo, sender, number, title, url, received_at — without the full payload. |
get_event | Full payload for a single webhook event by event_id. |
get_webhook_events | Pending events with full payloads. Prefer get_pending_status or list_pending_events for polling and only fall back to this when you really need everything. |
mark_processed | Mark an event as processed by event_id so it will no longer appear in pending queries. Required to keep the pending queue from growing unbounded. |
get_pending_status() periodically (e.g. every 60 seconds).pending_count > 0, call list_pending_events() for summaries.get_event(event_id) only for events that need the full payload.mark_processed(event_id) after handling each event.If real-time channel notifications are enabled (Claude Code), step 1 can be skipped — the proxy will push event summaries as soon as the Worker receives them. You still need to call mark_processed to clear the queue.
${WEBHOOK_WORKER_URL}/.well-known/oauth-authorization-server.http://127.0.0.1:<port>/callback with an authorization code.401 from the Worker, the proxy invalidates its cached tokens and re-authenticates automatically.The authorization code is delivered directly to the local listener; it never leaves your machine.
OAuth callback timed out after 5 minutes. Re-invoke any tool to restart the flow.Failed to reach worker. Check that WEBHOOK_WORKER_URL is correct and reachable from your machine.Authentication failed after retry. Cached tokens were rejected and re-authentication did not succeed. Remove ~/.github-webhook-mcp/oauth-tokens.json and retry.429 from the Worker. The per-tenant event quota (default 10,000) has been exceeded. Process the backlog with mark_processed to free space.WEBHOOK_CHANNEL is not set to 0 and that Claude Code was launched with --dangerously-load-development-channels server:github-webhook-mcp.~/.github-webhook-mcp/oauth-tokens.json (and optionally oauth-client.json) and retry.Apache-2.0. See the LICENSE and NOTICE files in the main repository.
FAQs
MCP server bridging GitHub webhooks via Cloudflare Worker
The npm package github-webhook-mcp receives a total of 114 weekly downloads. As such, github-webhook-mcp popularity was classified as not popular.
We found that github-webhook-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Product
Socket’s PHP and Composer support is now in Beta for all customers, with PHP reachability analysis generally available.

Product
Socket is bringing experimental protection to Firefox, scanning 97,000+ extensions in Mozilla's official directory for malware and risky updates.

Research
/Security News
Three compromised Rust crates pulled in a malicious dependency that downloaded and executed cross-platform malware during Cargo builds.