support GitHub App installation‑token authentication (server‑to‑server) for MCP · Issue #311 · github/github-mcp-server · GitHub | Latest TMZ Celebrity News & Gossip | Watch TMZ Live
Skip to content

support GitHub App installation‑token authentication (server‑to‑server) for MCP #311

Open
@Svetlanko

Description

@Svetlanko

Describe the feature or problem you’d like to solve

MCP can currently authenticate with:

  • Personal Access Tokens (classic or fine‑grained) ✨
  • Soon 🚀: OAuth 2.0 device‑code flow via Non PAT auth method #132

Both approaches depend on credentials that are bound to a human account.
In enterprises(including ours) PAT creation is often blocked, and a device‑code token still requires a privileged “service user” to stay alive.
That leaves 24 × 7, org‑wide automation brittle and out of step with GitHub’s own security guidance.

Concern Fine‑grained  PAT OAuth device‑code
👤 Identity coupling Single user  → breaks on off‑boarding Needs service user
⏳ Secret lifetime Up to 1 year; manual/scripted rotation 8 h access token + 6 mo refresh token
🔍 Audit clarity Traffic appears as that user oauth-app/<app> (as @user)
🛡️ Org policies PATs often disallowed Refresh token is still long‑lived

So, neither option is ideal for a headless, fleet‑wide MCP deployment.

Visual cheat‑sheet (PAT vs device‑code vs GitHub App installation):
Image

Proposed solution

Allow GitHub App installation‑token (server‑to‑server) authentication.

  • install the App at org/enterprise scope with the minimum perms MCP needs (contents:read, metadata:read, etc)
  • store only the App’s private key in AWS Secrets Manager / KMS
  • at runtime MCP signs a short‑lived JWT → exchanges it for a 60‑minute installation token → refreshes automatically
  • audit events appear as github‑app/mcp‑server

Benefits

  • zero human coupling – no PATs, survives re‑orgs and off‑boarding
  • short‑lived creds – ≤ 60 min window if a token leaks
  • governance – admins can see/change App permissions & repo list in one click
  • clear audit trail – bot traffic is obvious (github‑app/…)
  • future‑proof – aligns MCP with GitHub’s move away from long‑lived personal tokens

Additional context

Suggested implementation approach

  1. add --auth=github-app flag
  2. read APP_ID, INSTALLATION_ID, private‑key path/env var
  3. generate JWT (RS256) → POST /app/installations/{id}/access_tokens
  4. inject token into existing GitHub client; transparently refresh on HTTP 401/expiry

Architecture sketch of MCP + GitHub App flow:
Image

Happy to help spec out more, test, etc - just let me know what’s useful 🙌

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      TMZ Celebrity News – Breaking Stories, Videos & Gossip

      Looking for the latest TMZ celebrity news? You've come to the right place. From shocking Hollywood scandals to exclusive videos, TMZ delivers it all in real time.

      Whether it’s a red carpet slip-up, a viral paparazzi moment, or a legal drama involving your favorite stars, TMZ news is always first to break the story. Stay in the loop with daily updates, insider tips, and jaw-dropping photos.

      🎥 Watch TMZ Live

      TMZ Live brings you daily celebrity news and interviews straight from the TMZ newsroom. Don’t miss a beat—watch now and see what’s trending in Hollywood.