Skip to main content
Glama
README.md
# ghe-mcp-gateway

An **MCP (Model Context Protocol) server** that exposes GitHub Enterprise administration
operations as agent tools. Point Claude (Code or Desktop) at it and ask things like
*"list private repos in the org with no recent pushes"* or *"who has admin on payments-api?"* -
the model calls the GitHub API through typed, permissioned tools instead of raw curl.

Built as a working reference for GitHub Enterprise Cloud administration: repository management,
access governance, audit-log review, webhook management, and secret-scanning triage.

## Why
Admin work is repetitive API calls (access reviews, alert triage, config audits). Wrapping the
GitHub REST/GraphQL API as MCP tools lets an agent do the legwork while keeping a human in the
loop - and keeps writes behind an explicit safety switch.

## Tools (21)
| Category | Tools |
|---|---|
| Repository admin | `list_repositories`, `get_repository` |
| Access & teams | `list_organization_members`, `list_teams`, `list_team_members`, `list_repo_collaborators`, `get_repo_permission`, `list_team_repos`, `set_repo_collaborator_permission`*, `set_team_repo_permission`* |
| Branch protection | `get_branch_protection`, `set_branch_protection`*, `list_org_rulesets`, `get_org_ruleset` |
| Security (GHAS) | `list_secret_scanning_alerts`, `list_code_scanning_alerts`, `list_dependabot_alerts`, `resolve_secret_scanning_alert`* |
| Audit log | `get_org_audit_log` |
| Webhooks | `list_org_webhooks` |
| Escape hatch | `graphql_query` |

`*` write operation - blocked unless `GITHUB_MCP_READ_ONLY=false`.

## Companion skill
[`.claude/skills/github-admin/SKILL.md`](.claude/skills/github-admin/SKILL.md) packages these
tools into admin **playbooks** - access review/certification, leaked-secret response, repo
onboarding & governance, security-posture audit, and access changes. Open Claude Code in this
repo and the `/github-admin` skill is available; it drives the MCP tools with a read-first,
least-privilege, confirm-before-write discipline.

## Setup
```bash
uv sync                       # create venv + install deps
cp .env.example .env          # then add your GITHUB_TOKEN
```

Suggested token scopes (classic): `repo`, `read:org`, `admin:org`, `read:audit_log`,
`admin:org_hook`, `security_events`. For GitHub Enterprise Server, set `GITHUB_API_URL` to
`https://<host>/api/v3`.

## Run
```bash
# stdio server (how MCP clients launch it)
uv run github-admin-mcp

# quick manual check with the MCP Inspector
uv run mcp dev src/github_admin_mcp/server.py
```

### Register with Claude Code
```bash
claude mcp add github-admin -- uv run --directory /Users/mikeholzinger/src/github_mcp github-admin-mcp
```
(or add an entry to your client's MCP config pointing at the same command).

### 60-second demo
```bash
# 1. add your token (read-only by default - safe)
cp .env.example .env && $EDITOR .env        # set GITHUB_TOKEN

# 2. register the server + open Claude Code in this repo
claude mcp add github-admin -- uv run --directory "$PWD" github-admin-mcp
claude

# 3. the /github-admin skill is now available. Try, in natural language:
#    "Run an access review on the <org> organization"
#    "Audit the security posture of <org>/<repo>"
#    "Who has admin on <org>/<repo>?"
# The skill calls the MCP tools read-only and reports an auditor-ready summary.
```

## Safety
- Read-only by default (`GITHUB_MCP_READ_ONLY=true`); mutating tools refuse until you opt in.
- No credentials in code - token comes from the environment. `.env` is git-ignored.

## Layout
```
src/github_admin_mcp/
  client.py   # async REST + GraphQL client (auth, pagination, GHES-aware, read-only guard)
  server.py   # FastMCP server; one @mcp.tool() per operation
docs/
  GITHUB_API_REFERENCE.md   # the endpoint research this server is built on
```

## Example GitHub Actions workflows
Healthcare-oriented admin automation lives in `.github/workflows/` with the logic in
`scripts/` (Python + `requests`). All follow least-privilege `permissions:` and pin actions.

| Workflow | Trigger | What it does |
|---|---|---|
| **Access Review** (`access-review.yml`) | Monthly cron + manual | Certifies repo access org-wide; flags outside collaborators, admin grants, write-on-archived; emits a JSON evidence artifact (13-mo retention) and files a tracking issue. |
| **Secret Scanning Alerts** (`secret-scanning-alerts.yml`) | `secret_scanning_alert` event + hourly sweep | Real-time + safety-net notification to a security Slack channel. Sends metadata only - never the secret value. |
| **Repository Governance** (`repo-governance.yml`) | Org `repo-created` → `repository_dispatch` + weekly sweep | Enforces the branch-protection baseline (PR + 2 reviews, Code Owner, signed commits, no force-push/delete, conversation resolution, Dependabot). **Dry-run by default**; auto-applies to brand-new repos. |

Required CI config: secret `ORG_ADMIN_TOKEN` (org PAT/App), secret `SECURITY_SLACK_WEBHOOK`,
and variable `GITHUB_ORG`. The scripts honor `GITHUB_API_URL` for GitHub Enterprise Server.

## Roadmap
- Branch-protection / rulesets tools, team-repo access management
- Secret-scanning alert resolution, code-scanning + Dependabot alerts
- Audit-log streaming config; enterprise-level endpoints
- A companion Claude **skill** that drives these tools for common admin playbooks

TDQS

B3.4/5.0

Scored across 21 tools

Disambiguation5/5

Each tool targets a distinct resource or action (e.g., get vs list, different alert types, branch protection vs permissions). There is no ambiguity between tools; they are clearly differentiated by their target and verb.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern (get_*, list_*, set_*, resolve_*) in snake_case. The only outlier is 'graphql_query', which deviates from the pattern but is a generic utility.

Tool Count4/5

21 tools is slightly above the typical well-scoped range (3-15), but given the breadth of GitHub admin functionality covered (branch protection, security alerts, permissions, webhooks), it is still reasonable and not excessive.

Completeness3/5

The tool set covers reading many resources and some write operations (permissions, branch protection, alert resolution). However, it lacks create/delete operations for repos, teams, and webhooks, which are notable gaps for a full admin gateway.

Maintenance

ActivityInactive
ResponsivenessNo issues