Go-based MCP server that connects GitHub to Claude Desktop, enabling direct repository operations from Claude's interface.
Tools: 82 (with Git) | 48 (without Git) | Architecture: Hybrid (Local Git + GitHub API + Admin Controls)
- 22 Administrative Tools: Repository settings, branch protection, webhooks, collaborators, teams
- 4-Tier Safety System: Risk classification (LOW/MEDIUM/HIGH/CRITICAL) with confirmation tokens
- Git-Free File Operations: Clone, pull, download repos via GitHub API (no Git required)
- Smart Git Detection: Auto-detects Git availability, filters tools accordingly
- Audit Logging: JSON-based operation tracking with automatic rotation
repo - Full control of private repositories (essential)
delete_repo - For github_delete_repository
workflow - For re-running GitHub Actions workflows
security_events - For dismissing security alerts
admin:repo_hook - Enhanced webhook management (v3.0)
admin:org - For team management in organizations (v3.0)
- Go to: GitHub Settings > Personal Access Tokens
- Click "Generate new token (classic)"
- Select the required scopes
- Copy the generated token
# Install dependencies
go mod tidy
# Compile (using included script)
.\compile.bat # Windows
./build-mac.bat # macOS/Linux
# Or compile manually
go build -o mcp-go-github.exe ./cmd/github-mcp-server/# Run all tests
go test ./...
# Run tests with verbose output
go test ./... -v
# Run tests for a specific package
go test ./pkg/git/ -v
go test ./pkg/safety/ -v{
"mcpServers": {
"github-personal": {
"command": "C:\\path\\to\\mcp-go-github.exe",
"args": ["--profile", "personal"],
"env": {
"GITHUB_TOKEN": "ghp_your_personal_token"
}
},
"github-work": {
"command": "C:\\path\\to\\mcp-go-github.exe",
"args": ["--profile", "work"],
"env": {
"GITHUB_TOKEN": "ghp_your_work_token"
}
}
}
}{
"mcpServers": {
"github-mcp": {
"command": "C:\\path\\to\\mcp-go-github.exe",
"args": [],
"env": {
"GITHUB_TOKEN": "your_token_here"
}
}
}
}| Tool | Description | Tokens |
|---|---|---|
git_status |
Local Git repository status | 0 |
git_list_files |
List all files in repository | 0 |
git_get_file_content |
Get file content from Git | 0 |
git_get_file_sha |
Get SHA of specific file | 0 |
git_get_last_commit |
Get last commit SHA | 0 |
git_get_changed_files |
List modified files | 0 |
git_validate_repo |
Validate if directory is a valid Git repo | 0 |
git_context |
Auto-detect Git context | 0 |
| Tool | Description | Tokens |
|---|---|---|
git_set_workspace |
Set working directory | 0 |
git_add |
Add files to staging area | 0 |
git_commit |
Commit changes | 0 |
git_push |
Push changes to remote | 0 |
git_pull |
Pull changes from remote | 0 |
git_checkout |
Switch branch or create new | 0 |
| Tool | Description | Tokens |
|---|---|---|
git_log_analysis |
Commit history analysis | 0 |
git_diff_files |
Show modified files with statistics | 0 |
git_branch_list |
List branches with detailed info | 0 |
git_stash |
Stash operations | 0 |
git_remote |
Remote repository management | 0 |
git_tag |
Tag management | 0 |
git_clean |
Clean untracked files | 0 |
| Tool | Description | Tokens |
|---|---|---|
git_checkout_remote |
Checkout remote branch with tracking | 0 |
git_merge |
Merge branches with validation | 0 |
git_rebase |
Rebase with specified branch | 0 |
git_pull_with_strategy |
Pull with strategies | 0 |
git_force_push |
Push with --force-with-lease | 0 |
git_push_upstream |
Push setting upstream | 0 |
git_sync_with_remote |
Synchronize with remote branch | 0 |
| Tool | Description | Tokens |
|---|---|---|
git_safe_merge |
Safe merge with backup | 0 |
git_conflict_status |
Conflict status | 0 |
git_resolve_conflicts |
Automatic resolution | 0 |
git_validate_clean_state |
Validate clean working directory | 0 |
git_detect_conflicts |
Detect potential conflicts | 0 |
git_create_backup |
Create backup of current state | 0 |
| Tool | Description | Tokens |
|---|---|---|
create_file |
Create file (local Git, API fallback) | 0* |
update_file |
Update file (local Git, API fallback) | 0* |
| Tool | Description |
|---|---|
github_list_repos |
List user repositories |
github_create_repo |
Create new repository |
github_list_prs |
List pull requests |
github_create_pr |
Create new pull request |
| Tool | Description |
|---|---|
github_list_repo_contents |
List files and directories via API |
github_download_file |
Download individual file |
github_download_repo |
Clone complete repository via API |
github_pull_repo |
Update local directory via API |
| Tool | Description |
|---|---|
github_dashboard |
General activity panel |
github_notifications |
Pending notifications |
github_assigned_issues |
Assigned issues |
github_prs_to_review |
PRs pending review |
github_security_alerts |
Security alerts |
github_failed_workflows |
Failed workflows |
github_mark_notification_read |
Mark notification as read |
| Tool | Description |
|---|---|
github_comment_issue |
Comment on issue |
github_comment_pr |
Comment on pull request |
github_review_pr |
Create PR review (APPROVE/REQUEST_CHANGES/COMMENT) |
| Tool | Description |
|---|---|
github_close_issue |
Close issue |
github_merge_pr |
Merge pull request |
github_rerun_workflow |
Re-run workflow |
github_dismiss_dependabot_alert |
Dismiss Dependabot alert |
github_dismiss_code_alert |
Dismiss Code Scanning alert |
github_dismiss_secret_alert |
Dismiss Secret Scanning alert |
| Tool | Risk | Description |
|---|---|---|
github_get_repo_settings |
LOW | View repository configuration |
github_update_repo_settings |
MEDIUM | Modify name, description, visibility |
github_archive_repository |
CRITICAL | Archive repository (read-only) |
github_delete_repository |
CRITICAL | Delete repository PERMANENTLY |
| Tool | Risk | Description |
|---|---|---|
github_get_branch_protection |
LOW | View protection rules |
github_update_branch_protection |
HIGH | Configure protection rules |
github_delete_branch_protection |
CRITICAL | Remove branch protection |
| Tool | Risk | Description |
|---|---|---|
github_list_webhooks |
LOW | List repository webhooks |
github_create_webhook |
MEDIUM | Create webhook |
github_update_webhook |
MEDIUM | Modify webhook |
github_delete_webhook |
HIGH | Delete webhook |
github_test_webhook |
LOW | Send test delivery |
| Tool | Risk | Description |
|---|---|---|
github_list_collaborators |
LOW | List collaborators |
github_check_collaborator |
LOW | Verify access |
github_add_collaborator |
MEDIUM | Invite with permissions |
github_update_collaborator_permission |
MEDIUM | Change access level |
github_remove_collaborator |
HIGH | Revoke access |
github_list_invitations |
LOW | View pending invitations |
github_accept_invitation |
MEDIUM | Accept invitation |
github_cancel_invitation |
MEDIUM | Cancel invitation |
| Tool | Risk | Description |
|---|---|---|
github_list_repo_teams |
LOW | List teams with access |
github_add_repo_team |
MEDIUM | Grant team access |
| Level | Description | Behavior (moderate mode) |
|---|---|---|
| LOW | Read-only | Direct execution |
| MEDIUM | Reversible changes | Optional dry-run |
| HIGH | Impacts collaboration | Requires confirmation token |
| CRITICAL | Irreversible | Token + backup recommendation |
| Mode | Confirms from | Recommended use |
|---|---|---|
strict |
MEDIUM+ | Critical production environments |
moderate |
HIGH+ | General use (default) |
permissive |
CRITICAL | Local development |
disabled |
Never | Not recommended |
Create safety.json next to the executable (optional):
{
"mode": "moderate",
"enable_audit_log": true,
"require_confirmation_above": 3,
"audit_log_path": "./mcp-admin-audit.log",
"audit_log_max_size_mb": 10,
"audit_log_max_backups": 5
}If safety.json doesn't exist, defaults to moderate mode with audit logging enabled.
See safety.json.example for complete configuration reference.
On systems without Git installed (e.g., Mac without Xcode Command Line Tools), the server:
- Automatically detects Git absence
- Filters git_ tools from listing
- Keeps operational all API, admin, dashboard, file operation tools
- Returns friendly error if a Git tool is attempted
The 4 File Operations tools (github_list_repo_contents, github_download_file, github_download_repo, github_pull_repo) allow cloning and updating repositories using only the GitHub API, without Git.
- Prevention of argument injection in Git commands
- Path Traversal defense
- Strict user input validation
- SSRF prevention in webhook URLs (v3.0)
- Cryptographic confirmation tokens for destructive operations (v3.0)
- Audit logging of administrative operations (v3.0)
- Go: 1.25.0 or higher
- Git: Optional (auto-detected, 48 tools work without Git)
- github.com/google/go-github: v81.0.0
- golang.org/x/oauth2: v0.34.0
- GitHub Token: Minimum
repopermission
- 82 operational MCP tools (48 without Git)
- Hybrid local Git + GitHub API system
- 22 administrative tools with safety layer
- 4 Git-free file tools
- Multi-profile support
- Complete testing with real repository
- Production ready (v3.0)
Changelog: See CHANGELOG.md for complete change history
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
MIT License - see LICENSE file for details.
For security issues, please see our Security Policy.