You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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):
Describe the feature or problem you’d like to solve
MCP can currently authenticate with:
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.
oauth-app/<app> (as @user)
So, neither option is ideal for a headless, fleet‑wide MCP deployment.
Visual cheat‑sheet (PAT vs device‑code vs GitHub App installation):

Proposed solution
Allow GitHub App installation‑token (server‑to‑server) authentication.
contents:read
,metadata:read
, etc)github‑app/mcp‑server
Benefits
github‑app/…
)Additional context
Suggested implementation approach
--auth=github-app
flagAPP_ID
,INSTALLATION_ID
, private‑key path/env varPOST /app/installations/{id}/access_tokens
Architecture sketch of MCP + GitHub App flow:

Happy to help spec out more, test, etc - just let me know what’s useful 🙌
The text was updated successfully, but these errors were encountered: