This document provides a comprehensive reference for the authentication requirements of each tool in the GitHub MCP Server. It covers both OAuth scopes (for classic personal access tokens and OAuth apps) and fine-grained permissions (for fine-grained personal access tokens).
- OAuth Scopes: Used by OAuth apps and classic Personal Access Tokens (PATs)
- Fine-Grained Permissions: Used by fine-grained Personal Access Tokens
For OAuth scopes documentation, see: Scopes for OAuth Apps
For fine-grained permission documentation, see: Permissions for Fine-Grained PATs
Some OAuth scopes include access to other scopes. If you have a parent scope, you automatically have access to all child scopes:
| Parent Scope | Includes |
|---|---|
repo |
repo:status, repo_deployment, public_repo, repo:invite, security_events |
user |
read:user, user:email, user:follow |
admin:org |
write:org, read:org |
write:org |
read:org |
admin:repo_hook |
write:repo_hook, read:repo_hook |
write:repo_hook |
read:repo_hook |
admin:public_key |
write:public_key, read:public_key |
write:public_key |
read:public_key |
admin:gpg_key |
write:gpg_key, read:gpg_key |
write:gpg_key |
read:gpg_key |
project |
read:project |
write:packages |
read:packages |
Fine-grained permissions have three access levels:
| Level | Description |
|---|---|
read |
Read-only access to the resource |
write |
Read and write access to the resource |
admin |
Full administrative access to the resource |
Write access typically includes read access, and admin access typically includes both read and write access.
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
get_file_contents |
repo |
contents:read |
create_or_update_file |
repo |
contents:write |
delete_file |
repo |
contents:write |
push_files |
repo |
contents:write |
create_repository |
repo |
administration:write |
fork_repository |
repo |
contents:read, administration:write |
create_branch |
repo |
contents:write |
list_branches |
repo |
contents:read |
list_commits |
repo |
contents:read |
get_commit |
repo |
contents:read |
list_tags |
repo |
contents:read |
get_tag |
repo |
contents:read |
list_releases |
repo |
contents:read |
get_latest_release |
repo |
contents:read |
get_release_by_tag |
repo |
contents:read |
star_repository |
public_repo |
starring:write |
unstar_repository |
public_repo |
starring:write |
list_starred_repositories |
(none) | starring:read |
get_repository_tree |
repo |
contents:read |
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
list_issues |
repo |
issues:read |
get_issue |
repo |
issues:read |
create_issue |
repo |
issues:write |
update_issue |
repo |
issues:write |
add_issue_comment |
repo |
issues:write |
list_issue_comments |
repo |
issues:read |
search_issues |
repo |
issues:read |
list_issue_types |
read:org |
issues:read |
assign_copilot_to_issue |
repo |
issues:write |
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
list_pull_requests |
repo |
pull_requests:read |
get_pull_request |
repo |
pull_requests:read |
create_pull_request |
repo |
pull_requests:write |
update_pull_request |
repo |
pull_requests:write |
merge_pull_request |
repo |
contents:write, pull_requests:write |
list_pull_request_commits |
repo |
pull_requests:read |
get_pull_request_diff |
repo |
pull_requests:read |
get_pull_request_files |
repo |
pull_requests:read |
update_pull_request_branch |
repo |
contents:write, pull_requests:write |
list_pull_request_reviews |
repo |
pull_requests:read |
create_pull_request_review |
repo |
pull_requests:write |
add_pull_request_review_comment |
repo |
pull_requests:write |
request_copilot_review |
repo |
pull_requests:write |
get_pull_request_review |
repo |
pull_requests:read |
get_pull_request_comments |
repo |
pull_requests:read |
create_pending_pull_request_review |
repo |
pull_requests:write |
submit_pending_pull_request_review |
repo |
pull_requests:write |
delete_pending_pull_request_review |
repo |
pull_requests:write |
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
create_git_tag |
repo |
contents:write |
create_tree |
repo |
contents:write |
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
list_workflows |
repo |
actions:read |
list_workflow_runs |
repo |
actions:read |
get_workflow_run |
repo |
actions:read |
get_workflow_run_logs |
repo |
actions:read |
run_workflow |
repo |
actions:write |
cancel_workflow_run |
repo |
actions:write |
rerun_workflow |
repo |
actions:write |
rerun_failed_jobs |
repo |
actions:write |
list_workflow_jobs |
repo |
actions:read |
get_job_logs |
repo |
actions:read |
list_workflow_run_artifacts |
repo |
actions:read |
download_workflow_run_artifact |
repo |
actions:read |
get_workflow_run_usage |
repo |
actions:read |
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
list_labels |
repo |
issues:read or pull_requests:read |
get_label |
repo |
issues:read or pull_requests:read |
label_write |
repo |
issues:write or pull_requests:write |
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
list_notifications |
notifications |
N/A - Requires classic token |
get_notification_details |
notifications |
N/A - Requires classic token |
dismiss_notification |
notifications |
N/A - Requires classic token |
mark_all_notifications_read |
notifications |
N/A - Requires classic token |
manage_notification_subscription |
notifications |
N/A - Requires classic token |
manage_repository_notification_subscription |
notifications |
N/A - Requires classic token |
Note: Notification endpoints are not available with fine-grained PATs. Use a classic PAT with the
notificationsscope.
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
list_discussions |
repo |
discussions:read |
get_discussion |
repo |
discussions:read |
list_discussion_categories |
repo |
discussions:read |
get_discussion_comments |
repo |
discussions:read |
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
list_projects |
read:project |
organization_projects:read |
get_project |
read:project |
organization_projects:read |
list_project_items |
read:project |
organization_projects:read |
get_project_item |
read:project |
organization_projects:read |
list_project_fields |
read:project |
organization_projects:read |
update_project_item |
project |
organization_projects:write |
create_project_draft |
project |
organization_projects:write |
add_project_item |
project |
organization_projects:write |
delete_project_item |
project |
organization_projects:write |
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
list_gists |
(none) | gists:read |
get_gist |
(none) | gists:read |
create_gist |
gist |
gists:write |
update_gist |
gist |
gists:write |
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
search_code |
repo |
contents:read |
search_issues |
repo |
issues:read |
search_users |
repo |
metadata:read |
search_repositories |
repo |
metadata:read |
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
list_code_scanning_alerts |
security_events |
code_scanning_alerts:read |
get_code_scanning_alert |
security_events |
code_scanning_alerts:read |
update_code_scanning_alert |
security_events |
code_scanning_alerts:write |
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
list_secret_scanning_alerts |
security_events |
secret_scanning_alerts:read |
get_secret_scanning_alert |
security_events |
secret_scanning_alerts:read |
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
list_dependabot_alerts |
repo |
dependabot_alerts:read |
get_dependabot_alert |
repo |
dependabot_alerts:read |
update_dependabot_alert |
repo |
dependabot_alerts:write |
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
list_repository_security_advisories |
repo |
repository_security_advisories:read |
get_global_security_advisory |
(none) | (none - public data) |
list_global_security_advisories |
(none) | (none - public data) |
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
get_me |
(none) | metadata:read |
list_teams |
read:org |
members:read |
get_team_members |
read:org |
members:read |
These tools are internal to the MCP server and don't call GitHub APIs:
| Tool | OAuth Scope | Fine-Grained Permission |
|---|---|---|
enable_toolset |
(none) | (none) |
list_available_toolsets |
(none) | (none) |
get_toolset_tools |
(none) | (none) |
If you only need to read data (no modifications):
OAuth Scopes:
repo- For private repositoriespublic_repo- For public repositories onlyread:org- For organization and team informationread:project- For project boards
Fine-Grained Permissions:
contents:readissues:readpull_requests:readactions:readmetadata:read
For a typical development workflow (read, write, manage PRs and issues):
OAuth Scopes:
repo- Covers most repository operationsnotifications- If using notification toolsproject- If using project boards
Fine-Grained Permissions:
contents:writeissues:writepull_requests:writeactions:writemetadata:read
For security-related tools:
OAuth Scopes:
security_events- For code scanning and secret scanningrepo- For Dependabot alerts (included inrepo)
Fine-Grained Permissions:
code_scanning_alerts:readorwritesecret_scanning_alerts:readdependabot_alerts:readorwrite
-
Metadata Permission: The
metadata:readpermission is automatically granted for all repositories that a fine-grained PAT has access to. -
Private vs Public Repositories: The
reposcope covers both public and private repositories. Usepublic_repoif you only need access to public repositories with OAuth apps. -
Organization Permissions: Some tools require organization-level permissions (
read:org,write:org, oradmin:org), which are separate from repository permissions. -
Notification Limitations: Notification endpoints are not available with fine-grained PATs. You must use a classic PAT with the
notificationsscope for notification tools. -
Copilot Tools: The
assign_copilot_to_issueandrequest_copilot_reviewtools requirereposcope and work with repositories where Copilot is enabled.