GitHub MCP Server
Local OpenCode MCP server for safe GitHub developer workflows: pull main, create a feature branch, push it, and open a ready-for-review pull request.
Environment
Set these variables in your shell. Do not commit real secrets.
export GH_TOKEN="your_github_token_here"
export GITHUB_MCP_ALLOWED_ROOTS="/Users/matiasbinagora/Projects"
export GITHUB_MCP_DEFAULT_BASE_BRANCH="main"
export GITHUB_MCP_DEFAULT_REMOTE="origin"
export GITHUB_MCP_REQUIRE_CLEAN_WORKTREE="true"
GH_TOKEN is recommended. If it is not set, the server can still work when gh is already authenticated locally.
Build
npm install
npm run build
Smoke Test
This creates a temporary local bare repo, pulls main, creates a test branch, commits a file, pushes the branch, and verifies the remote branch exists.
npm run smoke
GitHub Integration Test
This creates a real branch and ready-for-review PR in the configured test repo.
export GITHUB_MCP_SMOKE_REPO_PATH="/Users/matiasbinagora/Projects/binagora"
npm run smoke:github
OpenCode Config
Add this to the global OpenCode config at ~/.config/opencode/opencode.json.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"github": {
"type": "local",
"command": ["node", "/Users/matiasbinagora/Projects/github-mcp/dist/index.js"],
"enabled": true,
"environment": {
"GH_TOKEN": "{env:GH_TOKEN}",
"GITHUB_MCP_ALLOWED_ROOTS": "/Users/matiasbinagora/Projects",
"GITHUB_MCP_DEFAULT_BASE_BRANCH": "main",
"GITHUB_MCP_DEFAULT_REMOTE": "origin",
"GITHUB_MCP_REQUIRE_CLEAN_WORKTREE": "true"
}
}
}
}
If OpenCode is launched before your shell exports GH_TOKEN, use this command instead so the MCP server sources ~/.zshrc before starting:
"command": [
"zsh",
"-lc",
"source \"$HOME/.zshrc\" >/dev/null 2>&1; exec node \"/Users/matiasbinagora/Projects/github-mcp/dist/index.js\""
]
Tools
github_repo_statusgithub_pull_maingithub_create_feature_branchgithub_push_feature_branchgithub_create_pull_requestgithub_prepare_feature_workflow
Safety Notes
- Repositories must be inside
GITHUB_MCP_ALLOWED_ROOTS. - No generic shell execution tool is exposed.
- Direct pushes to
mainormasterare refused. - Force pushes and branch deletion are not implemented.
- A clean worktree is required before pulling, branch creation, and PR creation by default.
- Branch names are validated with
git check-ref-format --branch.