Connect ChatGPT to GitHub
Your developers want to manage repos, issues, and PRs from ChatGPT. “Create an issue for the login bug.” “Show me open PRs on the api repo.” “List my assigned issues.”
Without governance, ChatGPT uses a shared GitHub token — every developer has the same access, every action is attributed to “the bot,” and there’s no audit trail of who did what.
ACP sits between ChatGPT and GitHub, verifying each developer’s identity on every tool call. Each person authenticates with their own GitHub account through OAuth. Permissions are scoped per user. Every action is logged.
Setup
1. Create an ACP workspace
Sign in to ACP Cloud and create a workspace. Your MCP endpoint:
https://api.makeagents.run/{your-slug}
2. Connect your identity provider
Go to Settings → Identity Providers. Configure your IdP (Auth0, Okta, Google, etc.) with your issuer URL and audience. ACP auto-discovers the JWKS endpoint.
3. Enable the GitHub connector
Go to Connectors → GitHub and click Connect. ACP walks you through creating a GitHub OAuth App (or uses the platform’s shared app). Each developer authorizes their own GitHub account — tokens are stored encrypted per-user.
Available tools after connecting:
| Tool | Description |
|---|---|
github.listRepos |
List repositories the user has access to |
github.getRepo |
Get repository details |
github.listIssues |
List issues for a repository |
github.createIssue |
Create a new issue |
github.listPullRequests |
List pull requests |
github.createPullRequest |
Create a pull request |
github.getFileContents |
Read file contents from a repo |
4. Scope permissions
Configure which scopes are required for write operations:
{
"github.createIssue": ["github:write"],
"github.createPullRequest": ["github:write"],
"github.listRepos": ["github:read"],
"github.listIssues": ["github:read"]
}
Developers with github:read can browse repos and issues. Only those with github:write can create issues or PRs.
5. Configure ChatGPT
ChatGPT supports MCP servers through its settings. Add your ACP endpoint URL. When ChatGPT needs to use GitHub tools, it initiates the OAuth flow — your developers sign in with their company SSO, and ACP handles the token exchange.
ACP serves standard OAuth discovery endpoints that ChatGPT expects:
GET /.well-known/oauth-protected-resource
GET /.well-known/oauth-authorization-server
ChatGPT reads these to discover the authorization and token endpoints, then handles the PKCE flow automatically.
What happens on every tool call
When a developer asks ChatGPT to “create an issue for the memory leak in the auth service”:
- ChatGPT calls
github.createIssueon your ACP endpoint - ACP verifies the developer’s JWT (RS256, JWKS-cached)
- ACP checks scopes: does this user have
github:write? - ACP scans the input for PII (detects and redacts if configured)
- Immutable platform rules check for SSRF and sensitive data patterns
- ACP creates the issue using the developer’s own GitHub OAuth token
- ACP logs: who created it, which repo, latency, success/failure
- Result flows back to ChatGPT
The developer’s GitHub token is used — not a shared bot token. The issue shows up as created by them, not by a generic service account.
What you get
- Per-developer identity — every GitHub action attributed to the person, not a bot
- Scoped access — read-only devs can’t create issues or PRs
- Audit trail — every action logged with full identity, exportable to your SIEM
- PII protection — sensitive data detected before reaching GitHub
- Rate limits — prevent any single developer from making excessive API calls