How to Integrate the GitHub MCP Server with Claude Desktop: Complete Setup Guide
To integrate the GitHub MCP Server with Claude Desktop, configure a Docker-based connector in your claude_desktop_config.json file with your GitHub Personal Access Token, then restart Claude Desktop to activate the integration.
The GitHub MCP (Model Context Protocol) Server is an open-source Go service that translates MCP method calls into GitHub API requests. When you integrate this MCP server with Claude Desktop, you enable Claude to interact directly with GitHub repositories, issues, pull requests, and actions through a local Docker container or binary.
Understanding the MCP Server Architecture
Before you integrate the MCP server with Claude Desktop, it helps to understand how the components interact. The server acts as a bridge between Claude's natural language interface and GitHub's REST and GraphQL APIs.
Core Components
| Component | Responsibility | Key Source |
|---|---|---|
Server entry-point (RunStdioServer) |
Creates context, parses configuration, builds tool inventory, and starts the MCP server with logging and token scope resolution. | internal/ghmcp/server.go#L21-L67 |
GitHub client factory (createGitHubClients) |
Builds REST, GraphQL, raw-content, and repo-access cache clients using the provided token and transport wrappers. | internal/ghmcp/server.go#L39-L102 |
Tool inventory (github.NewInventory) |
Registers every supported tool (issues, pull-requests, actions, etc.) that drives which RPC methods are exposed. | pkg/github/server.go#L31-L54 |
Middleware (addUserAgentsMiddleware) |
Injects a custom User-Agent header identifying the MCP version and Claude client for telemetry and rate-limit handling. | internal/ghmcp/server.go#L37-L70 |
Architecture Flow
Claude Desktop (Connector) ──► HTTP/stdio request (MCP) ──► github-mcp-server (Go)
│ │
│ ←─ JSON RPC response (tool results) ←─────────────────│
│
└──→ GitHub APIs (REST/GraphQL) via client factory (Bearer token)
The UserAgentTransport in [pkg/http/transport/user_agent.go](https://github.com/github/github-mcp-server/blob/main/pkg/http/transport/user_agent.go) ensures GitHub sees requests as coming from "github-mcp-server/… (Claude-Desktop/… )".
Prerequisites for Claude Desktop Integration
To successfully integrate the MCP server with Claude Desktop, you need:
- Claude Desktop installed (latest version recommended)
- Docker installed and running (for containerized deployment)
- A GitHub Personal Access Token (PAT) with appropriate scopes:
reposcope for private repositoriesread:orgfor organization-level operations (optional)workflowfor Actions-related tools (optional)
Step-by-Step Integration Guide
Step 1: Create a GitHub Personal Access Token
Generate a classic PAT or fine-grained token with the repo scope. Store it securely in your environment:
export GITHUB_PAT="ghp_your_token_here"
Step 2: Configure Claude Desktop
Edit your Claude Desktop configuration file at the appropriate path for your operating system:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Add the following mcpServers configuration block:
{
"mcpServers": {
"github": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "YOUR_GITHUB_PAT"
}
}
}
}
Replace YOUR_GITHUB_PAT with your actual token, or use "${GITHUB_PAT}" if your shell substitutes environment variables.
Step 3: Alternative CLI-Based Configuration
Instead of manually editing JSON, use the Claude CLI to add the server:
# Using an environment variable stored in .env
claude mcp add github \
-e GITHUB_PERSONAL_ACCESS_TOKEN=$(grep GITHUB_PAT .env | cut -d '=' -f2) \
-- docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN ghcr.io/github/github-mcp-server
This command writes the same configuration block to your user-scoped config file automatically.
Step 4: Verify the Integration
Restart Claude Desktop to load the new connector. Then validate the setup using the Claude CLI:
# List all configured MCP servers
claude mcp list
# Show details of the GitHub MCP server
claude mcp get github
If the integration is successful, claude mcp get github returns JSON metadata including the server version, enabled toolsets, and feature flags.
How the Integration Works Under the Hood
When you integrate the MCP server with Claude Desktop, several key mechanisms ensure secure and efficient communication:
-
Middleware Injection: The
addUserAgentsMiddlewarefunction ininternal/ghmcp/server.gointercepts outgoing requests and injects a custom User-Agent header that identifies the request as originating from Claude Desktop. -
Transport Layer: The
UserAgentTransportstruct inpkg/http/transport/user_agent.gowraps the standard HTTP transport to ensure consistent header injection across REST, GraphQL, and raw content clients. -
Client Factory: The
createGitHubClientsfunction initializes multiple GitHub API clients (REST, GraphQL, and cache) using the Bearer token authentication transport, ensuring all API calls are properly authenticated.
Troubleshooting Common Issues
If you encounter problems when you integrate the MCP server with Claude Desktop:
- Check the logs: Claude Desktop logs are located at
~/Library/Logs/Claude/(macOS),%APPDATA%\Claude\logs\(Windows), or~/.config/Claude/logs/(Linux). - Verify Docker is running: The containerized server requires an active Docker daemon.
- Validate token scopes: Ensure your PAT has the
reposcope for private repositories. - Check JSON syntax: Use a JSON validator to ensure your
claude_desktop_config.jsonis properly formatted.
Summary
- Integrate the MCP server with Claude Desktop by adding a Docker-based connector configuration to your
claude_desktop_config.jsonfile. - The server architecture uses
RunStdioServerininternal/ghmcp/server.goto bootstrap the connection andcreateGitHubClientsto handle GitHub API authentication. - You can configure the integration manually via JSON or use the
claude mcp addCLI command to automate the setup. - Verify the integration using
claude mcp listandclaude mcp get githubto ensure the server is properly registered and accessible.
Frequently Asked Questions
What is the GitHub MCP Server?
The GitHub MCP Server is an open-source Go-based service hosted at github/github-mcp-server that implements the Model Context Protocol (MCP). It translates MCP method calls from AI assistants like Claude into GitHub API requests, enabling natural language interaction with repositories, issues, pull requests, and GitHub Actions.
Do I need Docker to run the GitHub MCP Server with Claude Desktop?
While Docker is the recommended and most straightforward method to integrate the MCP server with Claude Desktop, it is not strictly required. The server can also run as a compiled binary. However, the Docker approach is preferred because it handles dependencies automatically and is the primary method documented in docs/installation-guides/install-claude.md.
Where is the Claude Desktop configuration file located?
The location of claude_desktop_config.json depends on your operating system. On macOS, it is located at ~/Library/Application Support/Claude/claude_desktop_config.json. On Windows, find it at %APPDATA%\Claude\claude_desktop_config.json. On Linux, the path is ~/.config/Claude/claude_desktop_config.json.
How do I verify that the GitHub MCP Server is working correctly?
After you integrate the MCP server with Claude Desktop, verify the installation by running claude mcp list in your terminal, which should display github in the list of configured servers. Then run claude mcp get github to retrieve detailed metadata about the server, including its version, enabled toolsets, and connection status. If these commands return valid JSON data, your integration is functioning correctly.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →