GitHub
server ทางการของ GitHub ให้ AI อ่านและจัดการโค้ด issue และ pull request ในบัญชีของคุณได้ ใช้ผ่านคลาวด์ของ GitHub หรือรันในเครื่องด้วย Docker ก็ได้
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
MCP server bridging GitHub webhooks via Cloudflare Worker for real-time event streaming
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
WEBHOOK_WORKER_URL, WEBHOOK_CHANNELต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"github-webhook": {
"command": "npx",
"args": [
"-y",
"github-webhook-mcp"
],
"env": {
"WEBHOOK_WORKER_URL": "ใส่ค่าของคุณ",
"WEBHOOK_CHANNEL": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add github-webhook --env WEBHOOK_WORKER_URL='ใส่ค่าของคุณ' --env WEBHOOK_CHANNEL='ใส่ค่าของคุณ' -- npx -y github-webhook-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"github-webhook": {
"command": "npx",
"args": [
"-y",
"github-webhook-mcp"
],
"env": {
"WEBHOOK_WORKER_URL": "ใส่ค่าของคุณ",
"WEBHOOK_CHANNEL": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"github-webhook": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"github-webhook-mcp"
],
"env": {
"WEBHOOK_WORKER_URL": "ใส่ค่าของคุณ",
"WEBHOOK_CHANNEL": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
WEBHOOK_WORKER_URL envWEBHOOK_CHANNEL envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub Liplus-Project ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.8.2) เข้า registry 7 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี GitHub, Desktop Commander, Cloudflare MCP
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
server ทางการของ GitHub ให้ AI อ่านและจัดการโค้ด issue และ pull request ในบัญชีของคุณได้ ใช้ผ่านคลาวด์ของ GitHub หรือรันในเครื่องด้วย Docker ก็ได้
MCP server for terminal commands, file operations, and process management
Cloudflare MCP servers
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
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.
From this release the Worker serves MCP protocol revision 2026-07-28 only, with no compatibility lane for the previous revision.
initialize, which the Worker no longer answers. The failure is quiet: the proxy does not crash, it returns the protocol error as tool output text./events WebSocket stream is not MCP and is unaffected, so a stale proxy still pushes event summaries while every tool call — including mark_processed — fails. The pending queue stops being cleared even though notifications look healthy.npx resolves @latest at process start, so an already-running Claude Desktop, Claude Code, or Codex keeps the copy it launched with however new the published version is. Quit it fully and reopen.The proxy's two protocol faces are independent: it still speaks the 2025-era MCP revision to your client over stdio. Only the face toward the Worker moved.
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).redirect_uri is pinned to the Worker itself, so the flow works reliably across process restarts and concurrent client instances.~/.github-webhook-mcp/ (mode 0600) and refreshes them silently before expiry. On invalid_grant during refresh, the proxy re-reads the tokens file to adopt any rotation performed by a sibling process before falling back to a full re-authorization.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
On first run the proxy prints an authorize URL to stderr and tries to open it in your default browser:
[github-webhook-mcp] OAuth authorization required.
[github-webhook-mcp] Opening: https://github-webhook.smgjp.com/oauth/authorize?client_id=abc&state=xyz [github-webhook-mcp] Approve in the browser window; the tab can be closed when done. [github-webhook-mcp] Waiting for approval (state expires in 600s)...
Sign in on GitHub (2FA works as usual), approve access, and close the tab when the "Authorization complete" page appears. Tokens are stored under ~/.github-webhook-mcp/ and refreshed automatically before expiry.
Migrating from v0.10.x / v0.11.0. v0.10.x used a browser-based localhost callback flow; v0.11.0 used a GitHub device code flow. On first run with v0.11.1+, the proxy treats any tokens file whose flow marker does not match the new web flow as inactive and transparently starts the new authorization. One-time re-authentication is required; the legacy file is left in place but ignored.
Configure the Callback URL on self-hosted GitHub Apps. If you self-host the Worker with your own GitHub App, register
https:// /oauth/callbackas the Callback URL. Without it, the Worker's/oauth/callbackstep fails with "Authorization failed" because GitHub will reject the redirect. Device Flow is not used and can stay off. See the self-hosting guide for step-by-step instructions.
npx resolves the package version once, at process start — including when the client config pins @latest. A client that is already running keeps the version it launched with, so a new npm release does not reach it until that process is replaced: restart the MCP client (Claude Desktop, Claude Code, Codex) to pick up a new version. The restart is what moves the client onto the new version.
This matters most for releases that change the tool schemas the proxy advertises, because those schemas are served from the proxy's own code rather than fetched from the Worker — until the process restarts, the client keeps seeing the old tool definitions.
Verify what the registry holds with --prefer-online. The npm CLI caches registry metadata, so a bare npm view can report the previous version shortly after a publish:
npm view github-webhook-mcp version --prefer-online
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"], "alwaysLoad": true } } }
To target a self-hosted Worker, set the WEBHOOK_WORKER_URL environment variable:
{
"mcpServers": { "github-webhook": { "command": "npx", "args": ["-y", "github-webhook-mcp"], "alwaysLoad": true, "env": { "WEBHOOK_WORKER_URL": "https://your-worker.example.workers.dev" } } } }
alwaysLoad: true requires Claude Code v2.1.121 or later. It exempts this server's tools from tool-search deferral so they remain immediately callable every turn (recommended because the server is invoked every turn via the UserPromptSubmit hook).
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_OBSERVER | No | 0 (disabled) | Set exactly to 1 for raw pending status and noninteractive authentication using an existing saved access token. |
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; only written when the Worker does not support Client ID Metadata Documents)~/.github-webhook-mcp/oauth-tokens.json (access + refresh tokens, and the client_id they were issued to)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.
Set WEBHOOK_OBSERVER=1 on a dedicated bridge process to observe pending status without starting authentication UI. Authenticate using a separate normal CLI process first. Observer calls read the saved token file once per credential acquisition, so an external login can recover the connection on the next call. Missing, malformed, expired, or rejected credentials return a tool error with isError: true and matching JSON text / structuredContent:
{"error":"auth_required","message":"Observer mode requires an existing valid token. Authenticate using a separate CLI process, then retry."}
Observer mode does not register a client, refresh tokens, open a browser, or start OAuth polling. A saved token with no expiry is accepted until rejected by the server. Authentication failures stop background WebSocket reconnection; after external login, the next successful tool call restarts it. WEBHOOK_CHANNEL still controls channel notifications, and get_event remains available.
Detect the contract using tools/list: only the observer get_pending_status entry advertises _meta: {"io.github.Liplus-Project/github-webhook-mcp/pending-status-observer": 1}. Its result preserves the Worker's raw JSON text and any structuredContent, including nonzero counts:
{"pending_count":3,"types":{"issues":3},"latest_received_at":"2026-10-19T00:00:00Z"}
types maps event names to counts. latest_received_at is a timestamp string or null, and covers the latest pending event, not the full history. Status reads do not consume events or call mark_processed. Authentication and network failures are errors, not zero counts. Normal mode does not advertise this metadata; its existing nonzero status hook decision JSON and zero-count raw response remain unchanged. Use a separate process for hook callers that need that normal behavior.
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
ตัดมาแค่ช่วงต้น อ่านต่อใน repo