
github-mcp-server
Reference for GitHub MCP server tools, methods, and usage patterns.
- Installs
- 103
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/github/gh-aw --skill github-mcp-server- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads github-mcp-server automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
GitHub MCP Server Documentation
This file documents the GitHub MCP (Model Context Protocol) server, including tools and configuration options.
Note: This file is automatically generated and updated by the github-mcp-tools-report.md workflow. Manual edits may be overwritten.
Last Updated: [To be filled by workflow]
Overview
The GitHub MCP server provides AI agents with programmatic access to GitHub's API through the Model Context Protocol. It supports two modes of operation:
Local Mode (Docker-based)
- Runs as a Docker container on the GitHub Actions runner
- Uses
GITHUB_PERSONAL_ACCESS_TOKENenvironment variable for authentication - Configurable toolsets via
GITHUB_TOOLSETSenvironment variable - Supports read-only mode via
GITHUB_READ_ONLYenvironment variable
Remote Mode (Hosted)
- Connects to hosted GitHub MCP server at
https://api.githubcopilot.com/mcp/ - Uses Bearer token authentication in HTTP headers
- Supports read-only mode via
X-MCP-Readonlyheader - No Docker container required
Configuration
Basic Configuration
Local Mode (Docker):
tools:
github:
mode: "local"
toolsets: [default] # or [repos, issues, pull_requests]
Remote Mode (Hosted):
tools:
github:
mode: "remote"
toolsets: [default] # or [repos, issues, pull_requests]
Read-Only Mode
To restrict the GitHub MCP server to read-only operations:
tools:
github:
mode: "remote"
read-only: true
toolsets: [repos, issues]
Custom Authentication
Use a custom GitHub token instead of the default:
tools:
github:
mode: "remote"
github-token: "${{ secrets.CUSTOM_GITHUB_PAT }}"
toolsets: [repos, issues]
Available Toolsets
The GitHub MCP server organizes tools into logical toolsets. You can enable specific toolsets, use [default] for the recommended defaults, or use [all] to enable everything.
:::note[Why Use Toolsets?]
The allowed: pattern for listing individual GitHub tools is not recommended for new workflows. Individual tool names may change between GitHub MCP server versions, but toolsets provide a stable API. Always use toolsets: instead. See Migration from Allowed to Toolsets for guidance on updating existing workflows.
:::
:::tip[Best Practice]
Always use toolsets: for GitHub tools. Toolsets provide:
- Stability: Tool names may change between MCP server versions, but toolsets remain stable
- Better organization: Clear groupings of related functionality
- Complete functionality: Get all related tools automatically
- Reduced verbosity: Cleaner configuration
- Future-proof: New tools are automatically included as they're added :::
Recommended Default Toolsets
The following toolsets are enabled by default when toolsets: is not specified:
context- User and environment context (strongly recommended)repos- Repository managementissues- Issue managementpull_requests- Pull request operations
Note: The users toolset is not included by default and must be explicitly specified if needed.
All Available Toolsets
| Toolset | Description | Common Tools |
|---|---|---|
context | User and environment context | get_teams, get_team_members |
repos | Repository management | get_repository, get_file_contents, search_code, list_commits |
issues | Issue management | issue_read, list_issues, create_issue, search_issues |
pull_requests | Pull request operations | pull_request_read, list_pull_requests, create_pull_request |
actions | GitHub Actions/CI/CD | list_workflows, list_workflow_runs, download_workflow_run_artifact |
code_security | Code scanning and security | list_code_scanning_alerts ⚠️ (always include state: open and severity: critical,high), get_code_scanning_alert |
dependabot | Dependency management | Dependabot alerts and updates |
discussions | GitHub Discussions | list_discussions, create_discussion |
experiments | Experimental features | Unstable/preview APIs |
gists | Gist operations | create_gist, list_gists |
labels | Label management | get_label, list_labels, create_label |
notifications | Notifications | list_notifications, mark_notifications_read |
orgs | Organization management | get_organization, list_organizations |
projects | GitHub Projects | Project board operations |
secret_protection | Secret scanning | Secret detection and management |
security_advisories | Security advisories | Advisory creation and management |
stargazers | Repository stars | Star-related operations |
users | User profiles | get_me ⚠️ (see note below), get_user, list_users |
search | Advanced search | Search across repos, code, users |
:::caution[get_me returns 403 under the integration token]
get_me is not recommended in agentic workflows. It returns HTTP 403 when called under the GitHub Actions integration token (which is the default in all gh-aw runs). Do not call get_me to determine the agent's identity.
Canonical identity source: The <github-context> block is injected at the start of every workflow prompt and contains actor, repository, run_id, and other context values. Always read identity from there.
:::
Available Tools by Toolset
This section maps individual tools to their respective toolsets to help with migration from allowed: to toolsets:.
Context Toolset
get_teams- List teams the user belongs toget_team_members- List members of a specific team
Repos Toolset
get_repository- Get repository informationget_file_contents- Read file contents from repositorysearch_code- Search code across repositorieslist_commits- List commits in a repositoryget_commit- Get details of a specific commitget_latest_release- Get the latest releaselist_releases- List all releases
Issues Toolset
issue_read- Read issue detailslist_issues- List issues in a repositorycreate_issue- Create a new issueupdate_issue- Update an existing issuesearch_issues- Search issues across repositoriesadd_reaction- Add reaction to an issue or commentcreate_issue_comment- Add a comment to an issue
Pull Requests Toolset
pull_request_read- Read pull request detailslist_pull_requests- List pull requests in a repositoryget_pull_request- Get details of a specific pull requestcreate_pull_request- Create a new pull requestsearch_pull_requests- Search pull requests across repositories
When invoking list_pull_requests from workflow prompts/templates:
- Default to a small page size (
perPage: 10unless a smaller/larger value is justified). - On GitHub MCP server ≥ 1.6.0 with the
fields_paramfeature (enabled automatically in Insiders mode), passfields: [number, title, state, html_url](or whichever top-level fields you need) to reduce response size. The samefieldsparameter is available onlist_issues,search_issues,search_pull_requests,list_commits,list_releases, andsearch_code. Forget_file_contents,fieldsonly reduces directory listings; usefields: [name, type, size, path]to check file metadata before deciding whether to read a file. - Before using
get_file_contentson a file, list its parent directory withfields: [name, type, size, path]. If the file is large or you only need a header/section, use a bounded excerpt such as a raw file URL with an HTTP range or another available ranged-read tool instead of fetching the whole file. - On older servers, request
minimal_output: truewhen the installed MCP server exposes that input (minimal output trims non-essential nested fields such as largehead/basepayloads). - Confirm parameter support in the method schema from
mcp list-toolsor the tool docs for your server version.
Actions Toolset
list_workflows- List GitHub Actions workflowslist_workflow_runs- List workflow runsget_workflow_run- Get details of a specific workflow rundownload_workflow_run_artifact- Download workflow artifacts
Code Security Toolset
list_code_scanning_alerts- List code scanning alertsget_code_scanning_alert- Get details of a specific alertcreate_code_scanning_alert- Create a code scanning alert
When invoking list_code_scanning_alerts from workflow prompts/templates, always include state: open and severity: critical,high to bound the response size and avoid oversized payloads.
Discussions Toolset
list_discussions- List discussions in a repositorycreate_discussion- Create a new discussion
Labels Toolset
get_label- Get label detailslist_labels- List labels in a repositorycreate_label- Create a new label
Users Toolset
get_me- ⚠️ Not recommended — returns HTTP 403 under the integration token. Use the<github-context>block (provided at the start of every prompt) to read your identity:actor,repository,run_id, etc.get_user- Get user profile informationlist_users- List users
Notifications Toolset
list_notifications- List user notificationsmark_notifications_read- Mark notifications as read
Organizations Toolset
get_organization- Get organization detailslist_organizations- List organizations
Gists Toolset
create_gist- Create a new gistlist_gists- List user's gists
Authentication Details
Remote Mode Authentication
The remote mode uses Bearer token authentication:
Headers:
Authorization: Bearer <token>- Required for authenticationX-MCP-Readonly: true- Optional, enables read-only mode
Token Source:
- Default:
${{ secrets.GH_AW_GITHUB_TOKEN }}or${{ secrets.GITHUB_TOKEN }} - Custom: Configure via
github-tokenfield
Local Mode Authentication
The local mode uses environment variables:
Environment Variables:
GITHUB_PERSONAL_ACCESS_TOKEN- Required for authenticationGITHUB_READ_ONLY=1- Optional, enables read-only modeGITHUB_TOOLSETS=<comma-separated-list>- Optional, specifies enabled toolsets
Best Practices
Toolset Selection
- Start with defaults: For most workflows, the recommended default toolsets provide sufficient functionality
- Enable specific toolsets: Only enable additional toolsets when you need their specific functionality
- Security consideration: Be mindful of write operations - consider using read-only mode when possible
- Performance: Using fewer toolsets reduces initialization time and memory usage
Token Permissions
Ensure your GitHub token has appropriate permissions for the toolsets you're enabling:
repostoolsets: Requires repository read/write permissionsissuestoolsets: Requires issues read/write permissionspull_requeststoolsets: Requires pull requests read/write permissionsactionstoolsets: Requires actions read/write permissionsdiscussionstoolsets: Requires discussions read/write permissions
Remote vs Local Mode
Use Remote Mode when:
- You want faster initialization (no Docker container to start)
- You're running in a GitHub Actions environment with internet access
- You want to use the latest version without specifying Docker image tags
Use Local Mode when:
- You need a specific version of the MCP server
- You want to use custom arguments
- You're running in an environment without internet access
- You want to test with a local build of the MCP server
Migration from Allowed to Toolsets
If you have existing workflows using the allowed: pattern, we recommend migrating to toolsets: for better maintainability and stability. Individual tool names may change between MCP server versions, but toolsets provide a stable API that won't break your workflows.
Migration Examples
Using allowed: (not recommended):
tools:
github:
allowed:
- get_repository
- get_file_contents
- list_commits
- list_issues
- create_issue
- update_issue
Using toolsets: (recommended):
tools:
github:
toolsets: [repos, issues]
Tool-to-Toolset Mapping
Use this table to identify which toolset contains the tools you need:
allowed: Tools | Migrate to toolsets: |
|---|---|
get_me ⚠️ (not recommended — returns 403; use <github-context> instead) | users |
get_teams, get_team_members | context |
get_repository, get_file_contents, search_code, list_commits | repos |
issue_read, list_issues, create_issue, update_issue, search_issues | issues |
pull_request_read, list_pull_requests, create_pull_request | pull_requests |
list_workflows, list_workflow_runs, get_workflow_run | actions |
list_code_scanning_alerts ⚠️ (always include state: open and severity: critical,high), get_code_scanning_alert | code_security |
list_discussions, create_discussion | discussions |
get_label, list_labels, create_label | labels |
get_user, list_users | users |
| Mixed repos/issues/PRs tools | [default] |
| All tools | [all] |
Quick Migration Steps
- Identify tools in use: Review your current
allowed:list - Map to toolsets: Use the table above to find corresponding toolsets
- Replace configuration: Change
allowed:totoolsets: - Test: Run
gh aw mcp inspect <workflow>to verify tools are available - Compile: Run
gh aw compileto update the lock file
Using Allowed Pattern with Custom MCP Servers
:::note[When to Use Allowed]
The allowed: pattern is appropriate for:
- Custom MCP servers (non-GitHub)
- Gradual migration of existing workflows
- Fine-grained restriction of specific tools within a toolset
For GitHub tools, always use toolsets: instead of allowed:.
:::
The allowed: field can still be used to restrict tools for custom MCP servers:
mcp-servers:
notion:
container: "mcp/notion"
allowed: ["search_pages", "get_page"] # Fine for custom MCP servers
For GitHub tools, allowed: can be combined with toolsets: to further restrict access, but this pattern is not recommended for new workflows.
GitHub API Limitations
Not all GitHub data is accessible through the GitHub MCP server or the GitHub REST API. Be aware of these limitations when designing workflows to avoid silent failures or incomplete results at runtime.
Billing and Cost Data
❌ Not available via standard API permissions:
- Detailed per-run cost data — GitHub Actions does not expose per-workflow-run billing costs through the REST API. There is no endpoint to retrieve the exact cost of a specific workflow run.
- Actions billing summary — Billing endpoints (e.g.,
/orgs/{org}/settings/billing/actions) requireadmin:orgscope, which is not granted byactions:reador the defaultGITHUB_TOKEN.
⚠️ When suggesting billing/cost workflows, always note:
Detailed GitHub Actions billing and cost data is not accessible through the standard GitHub API with
actions:readpermissions. Workflows that attempt to read per-run cost data or billing summaries will fail silently or return empty results unless anadmin:org-scoped personal access token is explicitly configured.
✅ Alternatives for cost reporting:
- GitHub Actions usage reports — Download usage reports from the GitHub billing UI (Settings → Billing → Usage) or via the billing CSV export endpoint (requires
admin:orgscope with a PAT). - Billing settings UI — Direct users to
https://github.com/organizations/{org}/settings/billingorhttps://github.com/settings/billingfor personal accounts to view cost data manually. - Workflow run metadata — Use
list_workflow_runsandget_workflow_run(available viaactionstoolset) to get run duration, status, and timing — but not dollar costs. - Third-party cost tracking — Integrate with third-party CI cost tools that use pre-authorized API access.
Cross-Organization Data Access
❌ Not available without explicit authorization:
- Workflows can only access data from repositories and organizations that the configured GitHub token has been granted access to.
- Cross-organization repository reads require a PAT or GitHub App token with access to the target org — the default
GITHUB_TOKENis scoped to the current repository's organization only. - Organization membership and team data from other organizations is not accessible without explicit
read:orgpermissions on those organizations.
Organization Membership and Private Data
❌ Requires additional scopes:
- Organization member lists — Reading private organization membership requires
read:orgscope; the defaultGITHUB_TOKENonly exposes public membership. - Private repository contents — Only accessible if the token has explicit repository access.
- Secret values — GitHub Secrets are write-only through the API; their values cannot be read back after creation.
Rate Limits
⚠️ Be aware of API rate limits:
- The GitHub REST API enforces rate limits (typically 5,000 requests/hour for authenticated requests with a PAT, lower for
GITHUB_TOKEN). - Workflows that perform bulk data collection (e.g., listing all workflow runs across many repositories) may hit rate limits. Design workflows to paginate carefully and avoid unnecessary requests.
- GraphQL API has separate rate limits based on query complexity.
Troubleshooting
Common Issues
Issue: Tool not found or not available
- Solution: Check if you're using
allowed:to restrict tools. Consider usingtoolsets:instead to get all related tools. - Verify: Run
gh aw mcp inspect <workflow-name>to see which tools are actually available.
Issue: Missing functionality after specifying toolset
- Cause: Using a too-narrow toolset that doesn't include all needed tools
- Solution: Either add additional toolsets (e.g.,
toolsets: [default, actions]) or use[all]for full access
Issue: Workflow using allowed: list is verbose and hard to maintain
- Solution: Migrate to
toolsets:configuration using the migration guide above
Best Practices for Debugging
- Start with
[default]toolset: Most workflows work well with default toolsets - Add specific toolsets as needed: Incrementally add toolsets like
actions,discussions, etc. - Use
gh aw mcp inspect: Verify which tools are actually available - Check tool-to-toolset mapping: Reference the tables above to find the right toolset
References
FAQ
What does the github-mcp-server skill do?
Reference for GitHub MCP server tools, methods, and usage patterns.
How do I install github-mcp-server?
Run npx skills add https://github.com/github/gh-aw --skill github-mcp-server in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/github-mcp-server/ (personal) or .claude/skills/github-mcp-server/ (project).
Which AI agents can use github-mcp-server?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is github-mcp-server safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains github-mcp-server?
It is published by github in github/gh-aw, and it is an official skill from the maker of the technology it covers. It has 103 recorded installs.
More from github/gh-aw
javascript-refactoring
github/gh-aw
Split large JavaScript files into maintainable modules safely.
developer
github/gh-aw
Core developer rules and coding conventions for gh-aw changes.
debugging-workflows
github/gh-aw
Diagnose gh-aw failures using the canonical debugging strategy and evidence reference.
agentic-workflows
github/gh-aw
Open the skill to read its SKILL.md instructions.
github-pr-query
github/gh-aw
Query GitHub pull requests with jq filtering and reusable selectors.
Popular backend & apis skills
find-skills
vercel-labs/skills
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
entra-app-registration
microsoft/azure-skills
Guides Microsoft Entra ID app registration, OAuth 2.0 authentication, and MSAL integration. USE FOR: create app registration, register Azure AD app, configure OAuth, set up authentication, add API permissions, generate service principal, MSAL example, console app auth, Entra ID setup, Azure AD authentication. DO NOT USE FOR: Key Vault secrets (use azure-keyvault-expiration-audit), general Azure resource security guidance.
google-agents-cli-adk-code
google/agents-cli
This skill should be used when the user wants to "write agent code", "build an agent with ADK", "add a tool", "create a callback", "define an agent", "use state management" — in a project that needs ADK (Agent Development Kit) API patterns and code examples. It provides a quick reference for agent types, tool definitions, orchestration patterns, callbacks, state management, the graph Workflow API, and reference recipes to study. Do NOT use for scaffolding (use google-agents-cli-scaffold) or deployment (use google-agents-cli-deploy).
embedded-captions
heygen-com/hyperframes
Add captions or subtitles to an existing single-subject talking-head video without editing the footage. Use for plain verbatim captions, cinematic captions embedded behind the subject, VFX captions, “炸/特效/酷炫字幕,” or a named identity from the 35-style catalog. Route by visual identity, not by backend engine. The quiet anchor rail is the default; embed every word only when the user explicitly wants a fully cinematic treatment. The workflow runs locally end to end, including transcription and subject matting; split multi-shot footage before applying it.
entra-agent-id
microsoft/azure-skills
Provision Microsoft Entra Agent Identity Blueprints, BlueprintPrincipals, and per-instance Agent Identities via Microsoft Graph, and configure OAuth 2.0 token exchange (fmipath, OBO, cross-tenant) including the Microsoft Entra SDK for AgentID sidecar. USE FOR: Agent Identity Blueprint, BlueprintPrincipal, agent OAuth, fmipath token exchange, agent OBO, Workload Identity Federation for agents, polyglot agent auth, Microsoft.Identity.Web.AgentIdentities. DO NOT USE FOR: standard Entra app registration (use entra-app-registration), Microsoft Foundry agent authoring (use microsoft-foundry).
neon
neondatabase/agent-skills
Overview of Neon, a complete set of cloud backend primitives around Lakebase Postgres: Auth, Object Storage, Functions, the AI Gateway, and Realtime. Start here to choose Neon for undecided login, files, APIs, and LLM calls, set up the CLI or MCP server, and follow the branch-first workflow. Use when building an app or backend on Neon, or when "Neon" or "Lakebase Postgres" is mentioned. Child skill neon-postgres wins for an existing DATABASEURL, SQL, schema, inspect, or search. Child skill neon-auth wins for login, users, sessions, identity routing, and Managed Better Auth setup. Child skill neon-realtime wins for live queries in reactive apps and agents. Also use for object storage, S3, buckets, serverless functions, function triggers, cron, AI gateway, LLM calls, realtime, logs, Loki, Grafana, observability, postgres, database, backend, Claimable Neon, neon.new, or a no-signup database.