github-mcp-proxy
Provides tools to manage GitHub repositories, issues, pull requests, files, and actions with per-repo permission levels, branch protection, commit-message validation, label whitelist, forbidden paths, and audit trail.
Click on "Deploy 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-mcp-proxyCreate an issue in my-org/my-repo titled 'Fix login bug'"
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-mcp-proxy
A self-hosted GitHub MCP server running on Cloudflare Workers, designed for personal / small-team use with per-repository guardrails for AI agents.
Any MCP-capable agent (Claude, Codex, ChatGPT, Cursor, Cline, …) can be plugged in — with tight control over which repos it can touch and how.
If you need security or stability, use theofficial GitHub MCP server. Fork freely; security issues are your responsibility once forked.
Why
Generic GitHub tokens give an agent full account access. This server narrows that down:
Per-repo permission levels —
read/issues/fullBranch protection — new branches must match a prefix (default
claude/);main/masternever writableCommit-message policy — Conventional Commits, validated server-side
Label whitelist —
allowedLabelsper repo; the server never auto-creates labels on GitHubForbidden paths —
.github/workflows/**always blockedAudit trail — every write auto-appends
Signed-off-by/Assisted-bytrailers or a footer identifying the agent and model
Related MCP server: Kontrol
Architecture
MCP agent ──(Streamable HTTP + OAuth)──▶ Cloudflare Worker
│
├── workers-oauth-provider (OAuth 2.1 server to MCP clients)
├── GitHub OAuth (OAuth client to github.com)
├── KV (session tokens)
├── Durable Object (MCP agent state)
└── Octokit (GitHub REST)Config (ghmcp.config.ts) is bundled with the Worker at deploy time — no runtime KV reads, typechecked via satisfies.
Quick start
git clone <your-fork>
cd kz-github-mcp
npm install
cp ghmcp.config.sample.ts ghmcp.config.ts # edit: repos you want to expose
cp wrangler.sample.jsonc wrangler.jsonc # edit: KV id + worker name
cp .env.example .env # edit: for local dev onlyCreate a GitHub OAuth App (Homepage = https://<worker>.<subdomain>.workers.dev, Callback = /callback), then:
wrangler kv namespace create "OAUTH_KV" # add the id to wrangler.jsonc
wrangler secret put GITHUB_CLIENT_ID
wrangler secret put GITHUB_CLIENT_SECRET
wrangler secret put COOKIE_ENCRYPTION_KEY # openssl rand -hex 32
npm run deployLocal development: same flow with a second OAuth App pointing at http://localhost:8788, credentials in .env, then npm run dev.
Continuous deployment (optional)
.github/workflows/deploy.yml deploys to Cloudflare on every push to main. Set two repo secrets in GitHub Settings → Secrets and variables → Actions:
Secret | Where to get it |
| Cloudflare dashboard → My Profile → API Tokens → create a token with the "Edit Cloudflare Workers" template |
| Cloudflare dashboard → right sidebar of any Workers page |
The GitHub OAuth credentials (GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, COOKIE_ENCRYPTION_KEY) live as Wrangler secrets on the Worker itself, not in GitHub Actions — you only need to set them once with wrangler secret put.
See docs/ARCHITECTURE.md for how it works, docs/CONFIG.md for every config field.
Connect an AI agent
Claude (claude.ai) — Settings → Connectors → Add custom connector → paste https://<worker>.<subdomain>.workers.dev/sse.
Claude Code / Codex / Cursor / Cline — add to the client's MCP config:
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["mcp-remote", "https://<worker>.<subdomain>.workers.dev/sse"]
}
}
}Any MCP host — point it at the same /sse endpoint. OAuth flow runs on first connect.
Tools
Prefixed with ghmcp_. Each declares a minimum permission level; the server denies calls below that.
Category | Tools | Min level |
User |
| read |
Repo |
| read |
Issues |
| read |
Issues |
| issues |
PRs |
| read |
PRs |
| issues |
Files |
| full |
Actions |
| read |
Any tool can be disabled via disabledTools in the config.
Validation
npm run validate-configUses the gh CLI to confirm that every repo in ghmcp.config.ts exists and that every label in allowedLabels is present on GitHub. Runs automatically as a prebuild hook, so a typo fails npm run build.
License
Originally forked from cloudflare/ai/demos/remote-mcp-github-oauth. MIT-licensed.
This tool is MIT-licensed. — see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
AgentGuard — 20-tool AI safety MCP: policy preflight, risk scoring, audit logging, rate limits.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA local MCP server that provides controlled repository access with policy-based file filtering, secret redaction, and audit logging for AI coding agents.-
- AlicenseNot gradedqualityCmaintenanceA self-hosted MCP server that enables AI coding agents to read, edit, search, and run code in local projects with human review loops and policy controls.MIT
- AlicenseCqualityBmaintenanceA policy-aware MCP server for GitHub and GitHub Actions that enables safe AI-assisted infrastructure workflows—inspecting repositories, preparing branches and pull requests, and constrained remote mutations behind explicit preview-bound approval tokens.18MIT
- AlicenseNot gradedqualityBmaintenanceA local-first MCP server that lets AI agents use gated APIs without holding keys, enforcing declarative policies, injecting secrets server-side, and auditing access without content.2Apache 2.0