MCP server for GitHub Tracker — exposes dashboard data (open PRs, issues, failing CI) to AI clients like Claude Code and Cursor.
# Run without installing
npx github-tracker-mcp
# Or install globally
npm install -g github-tracker-mcp| Variable | Required | Default | Description |
|---|---|---|---|
GITHUB_TOKEN |
No | — | Classic PAT with repo and read:org scopes (recommended), or fine-grained PAT with Actions (read), Contents (read), Issues (read), and Pull requests (read) permissions. Fine-grained PATs skip scope validation at startup. |
MCP_WS_PORT |
No | 9876 |
WebSocket relay port for receiving live data from the dashboard SPA. |
GITHUB_TOKEN is required for standalone (direct API) mode. In relay mode the server receives data from the dashboard and works without a token. If you set GITHUB_TOKEN alongside the relay, the server uses it as a fallback when the relay disconnects.
claude mcp add --transport stdio --env GITHUB_TOKEN=ghp_... github-tracker -- npx -y github-tracker-mcp@latestOr add --scope project to store in .mcp.json (shared with git — don't include real tokens in committed files).
| Tool | Description | Parameters |
|---|---|---|
get_dashboard_summary |
Aggregated counts of open PRs, issues, failing CI, PRs needing review, approved but unmerged | scope? (involves_me|all, default: involves_me) |
get_open_prs |
Open PRs with check status and review decision | repo?, status? (all|needs_review|failing|approved|draft) |
get_open_issues |
Open issues across tracked repos | repo? |
get_failing_actions |
In-progress or recently failed workflow runs | repo? |
get_pr_details |
Detailed info about a specific PR | repo, number |
get_rate_limit |
Current GitHub API rate limit status | — |
repo parameters use owner/repo format (e.g., octocat/hello-world).
tracker://config— current dashboard configuration (selected repos, tracked users)tracker://repos— list of tracked repositories
Enable the WebSocket relay in the dashboard's Settings page to let the MCP server receive live data directly from the SPA. When connected, the server prefers relay data and falls back to direct GitHub API calls. This reduces API usage and gives the AI client the same enriched data visible in the dashboard without separate polling.
The relay listens on ws://127.0.0.1:9876 by default. Override with MCP_WS_PORT.
Without the relay, the MCP server uses REST search which lacks some GraphQL-sourced fields. This affects:
get_open_prs—status=failingandstatus=approvedfilters return empty results (REST search lacks check status and review decision data).status=needs_reviewworks correctly via thereview-requested:search qualifier.get_dashboard_summary—approvedUnmergedCountis always 0;scopeparameter works as expectedget_dashboard_summary— when the relay IS connected,scopeis ignored (the relay always reflects the dashboard's current data set)
For full filter accuracy for failing and approved statuses, use the WebSocket relay.
See the GitHub Tracker repository for deployment, contributing, and architecture details.