MCP GitHub Project Manager

The task substrate for AI coding agents. An MCP server that turns GitHub Projects v2 into an agentic project-management layer: agents register, self-assign work, heartbeat, submit work products for review, and spend against token budgets — through 20 compound tools exposing 169 actions, backed entirely by GitHub-native storage. No database, no Redis, no external infra.
You bring the agents (Claude Code, Codex, Cursor, Windsurf, Roo, OpenCode, any MCP client). This is the backbone that tells them what to work on and keeps them from colliding.
| Surface | Detail |
|---|
| Tools | 20 compound tools, 169 actions, action-routed |
| Resources | 6 read-only GitHub-backed views |
| Prompts | 6 reusable AI templates |
| Transport | MCP v2 over stdio (webhook/SSE optional) |
| Storage | GitHub issues, project fields, comments — no external infra |
| Runtime | Node >= 22.12.0 · MIT license |
Why this exists
- Agents need a work queue, not a chat window.
agent_work / agent_manage give agents atomic task checkout, heartbeats, and a review loop instead of "go figure it out."
- Budgets must be enforced somewhere the agent cannot skip. Each agent has a token budget with warning thresholds and a hard stop; the server debits itself, and
record_usage covers the agent's own runtime spend.
- AI plans are worthless if they never become issues.
ai_generate runs idea → PRD → tasks → materialized GitHub issues, grouped into milestones and sprints.
- Tool lists are a context tax. 20 tools instead of 169 keeps the schema small;
discover_tools expands any domain or action on demand.
- State should live where the work already is. The agent registry is a file on a dedicated branch (compare-and-swap writes), task claims are project fields, work products are issue comments — no new infrastructure to operate.
Quick start
Requires Node.js >= 22.12.0 (Node 24 recommended).
# 1. Install (global, or use npx / pnpm dlx / docker compose — see below)
npm install -g mcp-github-project-manager
# 2. Configure (a working `gh auth login` means you can skip GITHUB_TOKEN)
export GITHUB_TOKEN="ghp_..."
export GITHUB_OWNER="your-org-or-user"
export GITHUB_REPO="your-repo"
# 3. Run the MCP stdio server
mcp-github-project-manager
Register it with an MCP client:
{
"mcpServers": {
"github-project-manager": {
"command": "npx",
"args": ["-y", "mcp-github-project-manager"],
"env": {
"GITHUB_TOKEN": "ghp_...",
"GITHUB_OWNER": "your-org-or-user",
"GITHUB_REPO": "your-repo"
}
}
}
}
# Claude Code CLI
claude mcp add github-project-manager -- npx -y mcp-github-project-manager
# Docker
docker compose up --build
Install paths: npm install -g mcp-github-project-manager, npx -y mcp-github-project-manager, pnpm dlx mcp-github-project-manager, or docker compose up --build.
A GitHub token needs repo, project, and write:org scopes. Full setup options live in the Deployment Guide and the Getting Started tutorial.
Works with any stdio MCP client — Claude Desktop, Claude Code, Codex, Cursor, Windsurf, Roo Code, VS Code + Copilot, OpenCode, and custom harnesses.
The tool surface
Every tool takes an action string that routes to the underlying operation, so clients see 20 schemas instead of 169.
| Tool | Group | Actions | Covers |
|---|
manage_project | core | 37 | Projects v2: CRUD, fields, views, items, templates, repo/team linking |
manage_issues | core | 18 | Issue CRUD, comments, drafts, advanced search, sub-issues |
manage_prs | core | 7 | Create, list, update, merge, reviews |
manage_milestones | core | 7 | CRUD, metrics, overdue and upcoming |
manage_sprints | core | 8 | Create, update, plan, add/remove issues, metrics |
manage_labels | core | 2 | Create and list repository labels |
manage_automation | core | 7 | Automation rules: create, update, delete, enable, disable |
manage_iterations | core | 5 | Iteration config, current iteration, items, by-date, assign |
manage_status_updates | core | 3 | Project status updates: create, list, get |
manage_branches | core | 4 | Branch protection rules and branch listing |
manage_releases | core | 6 | Releases: create, list, get, update, delete, latest |
manage_workflows | core | 6 | GitHub Actions: list, dispatch, run status/logs, cancel |
manage_events | events | 3 | Subscribe, recent events, replay |
ai_generate | ai | 9 | PRD generate/enhance/parse, features, next task, complexity, expand, traceability, materialize |
ai_analyze | ai | 9 | Issue enrichment, triage, label suggestion, duplicate and related detection |
ai_plan | ai | 6 | Capacity, backlog priority, risk, sprint composition, roadmap, visualization |
agent_work | agents | 12 | Register, checkout, release, complete, heartbeat, review, task context |
agent_manage | agents | 18 | Registry, activity, work products, budgets, usage, PM coordination, convergence |
system | system | 2 | Health check (live GitHub rate-limit probe), project field setup |
discover_tools | system | meta | Runtime discovery of tools, actions, and parameters |
Call shape — one discriminator, action-specific parameters:
{ "tool": "manage_project", "arguments": { "action": "create", "title": "Q3 Roadmap", "owner": "myorg" } }
{ "tool": "manage_issues", "arguments": { "action": "create", "title": "Add login form", "body": "..." } }
{ "tool": "agent_work", "arguments": { "action": "checkout_task", "agentId": "agent-abc123", "strategy": "highest_priority" } }
{ "tool": "discover_tools", "arguments": { "domain": "sprints" } }
discover_tools takes an optional domain (projects, issues, pull_requests, milestones, sprints, labels, automation, iterations, events, status_updates, ai_generation, ai_analysis, ai_planning, agents, system) or a free-text query. It stays exposed even when tool groups are filtered.
Alongside the tools the server exposes 6 read-only resources (github://config, github://projects, github://sprints/current, github://milestones, github://agents, github://tools) and 6 prompts (review-prd, explain-task-complexity, suggest-issue-labels, analyze-sprint-risk, generate-release-notes, triage-issue).
Full parameter reference: docs/TOOLS.md.
What it can do
AI generation (ai_generate) — generate a PRD from an idea, enhance an existing one, parse a PRD into tasks, add a feature with impact analysis, recommend the next task, analyze complexity and risk, expand a task into subtasks, build a traceability matrix, and materialize tasks into real GitHub issues.
AI analysis (ai_analyze) — enrich one or many issues, triage (single, bulk, or scheduled), suggest labels, detect duplicates, find related issues.
AI planning (ai_plan) — calculate sprint capacity, prioritize a backlog, assess risk, suggest sprint composition, generate a roadmap or visualization. Given a projectId the roadmap is planned from that project's own issues; with autoCreate the milestones are created and assigned to them.
Agent swarm (agent_work / agent_manage) — agents register with role, runtime, and capabilities; claim tasks by priority, age, skills, or deadline; heartbeat with progress and blockers; submit work products (branch, PR, files, test results) for review; approve, reject, or decompose. PM-side actions add budgets, usage accounting, stale-agent reclaim, workload rebalancing, smart assignment, and one-call project convergence.
Deterministic GitHub surface — projects, issues, pull requests, milestones, sprints, labels, branches, releases, workflows, automation rules, events, and status updates, all with plain action routing and no model in the loop.
The AI tools are optional. Without a provider key, everything else works unchanged.
The agent loop, end to end
{ "tool": "agent_work", "arguments": { "action": "register", "name": "claude-eng-1", "role": "engineer", "runtime": "claude-code", "capabilities": ["typescript", "testing"] } }
{ "tool": "agent_work", "arguments": { "action": "checkout_task", "agentId": "agent-abc123", "strategy": "highest_priority" } }
{ "tool": "agent_work", "arguments": { "action": "get_task_context", "issueNumber": 42 } }
{ "tool": "agent_work", "arguments": { "action": "heartbeat", "agentId": "agent-abc123", "status": "working", "taskId": "issue-42", "progress": 60, "currentBranch": "feat/42-add-login-form" } }
{ "tool": "agent_manage", "arguments": { "action": "submit_work_product", "agentId": "agent-abc123", "taskId": "issue-42", "issueNumber": 42, "branch": "feat/42-add-login-form", "prNumber": 99, "summary": "Added login form with validation" } }
{ "tool": "agent_work", "arguments": { "action": "complete_task", "agentId": "agent-abc123", "taskId": "issue-42", "summary": "Implemented and tested" } }