mcp-github-project-manager
Summary: This MCP server turns GitHub Projects v2 into an agentic project-management layer with action-routed tools, GitHub-native storage, optional AI planning, and multi-agent coordination.
Manage GitHub Projects v2: create/list/get/update/delete projects, fields, views, items, templates, readmes, linked repos/teams, and collaborators.
Manage issues: CRUD, comments, drafts, advanced search, sub-issues, native blockers, and issue types.
Manage pull requests, milestones, sprints, labels, iterations, status updates, branch protection, releases, GitHub Actions workflows, and project automations.
Generate AI artifacts: PRDs, feature impact analysis, next-task recommendations, complexity analysis, task expansion, traceability matrices, and materialized GitHub issues.
Analyze and plan with AI: issue enrichment/triage, label suggestions, duplicate/related detection, capacity planning, backlog prioritization, risk assessment, sprint composition, roadmaps, and visualizations.
Coordinate agent swarms: register agents, checkout/release/complete tasks, heartbeat, submit/review work products, approve/reject/decompose tasks, manage budgets/usage, reclaim stale agents, smart-assign work, rebalance workload, and converge projects.
Read analytics: sprint velocity/burndown, cycle time, throughput, and project summaries.
Use events, resources, and prompts: subscribe/replay events, read GitHub-backed resources, and reuse prompt templates.
Discover tools/actions, filter exposed tool groups, check system health, use idempotency keys, pagination cursors, and schema version metadata.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-github-project-manager generate a PRD for a new user authentication system"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 21 compound tools exposing 175 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 | 21 compound tools, 175 actions, |
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_managegive 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_usagecovers the agent's own runtime spend.AI plans are worthless if they never become issues.
ai_generateruns idea → PRD → tasks → materialized GitHub issues, grouped into milestones and sprints.Tool lists are a context tax. 21 tools instead of 175 keeps the schema small;
discover_toolsexpands 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.
Related MCP server: GitHub Analyzer Pro MCP Server
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 — pick ONE credential (GITHUB_TOKEN is not required)
export GITHUB_TOKEN="ghp_..." # a PAT, or
# mcp-github-project-manager auth login --gh # zero registration: sets up the GitHub CLI login, or
# GITHUB_OAUTH_CLIENT_ID=<id> mcp-github-project-manager auth login # OAuth device flow, or
# nothing at all if `gh auth login` is already done (needs the `project` scope: `gh auth refresh -h github.com -s project`)
export GITHUB_OWNER="your-org-or-user"
export GITHUB_REPO="your-repo"
# 3. Run the MCP stdio server
mcp-github-project-managerRegister 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
# Docker + OAuth sign-in (token persists in the gpm-data volume at /data)
docker run -it --rm -v gpm-data:/data -e GITHUB_OAUTH_CLIENT_ID=<id> mcp-github-project-manager auth login
docker run -i --rm -v gpm-data:/data -e GITHUB_OAUTH_CLIENT_ID=<id> mcp-github-project-managerBind-mounting a host directory at /data requires it to be owned by uid 10001 (the container user). For headless/CI use a GitHub App or PAT instead — see the Deployment Guide.
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 (if you use a PAT) needs repo, project, and write:org scopes. Prefer not to create one? Run mcp-github-project-manager auth login --gh (no OAuth app needed; it drives the GitHub CLI login and checks the project scope), or sign in with your own account via the OAuth device flow (GITHUB_OAUTH_CLIENT_ID=<id> mcp-github-project-manager auth login; see OAuth device flow). 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 21 schemas instead of 175.
Tool | Group | Actions | Covers |
| core | 38 | Projects v2: CRUD, close/reopen, fields, views, items, templates, repo/team linking, collaborators |
| core | 22 | Issue CRUD, comments, drafts, advanced search, sub-issues, native blockers, issue types |
| core | 7 | Create, list, update, merge, reviews |
| core | 7 | CRUD, metrics, overdue and upcoming |
| core | 9 | Create, update, delete (needs |
| core | 2 | Create and list repository labels |
| core | 3 | Project workflows: list, get, delete |
| core | 5 | Iteration config, current iteration, items, by-date, assign |
| core | 3 | Project status updates: create, list, get |
| core | 4 | Branch protection rules and branch listing |
| core | 6 | Releases: create, list, get, update, delete, latest |
| core | 6 | GitHub Actions: list, dispatch, run status/logs, cancel |
| events | 3 | Subscribe, recent events, replay |
| ai | 9 | PRD generate/enhance/parse, features, next task, complexity, expand, traceability, materialize |
| ai | 8 | Issue enrichment, triage, label suggestion, duplicate and related detection |
| ai | 6 | Capacity, backlog priority, risk, sprint composition, roadmap, visualization |
| agents | 12 | Register, checkout, release, complete, heartbeat, review, task context |
| agents | 18 | Registry, activity, work products, budgets, usage, PM coordination, convergence |
| system | 2 | Health check (live GitHub rate-limit probe), project field setup |
| core | 5 | Read-only sprint velocity and burndown, cycle time, throughput, project summary |
| 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, analytics, ai_generation, ai_analysis, ai_planning, agents, system) or a free-text query. It stays exposed even when tool groups are filtered.
Cross-cutting contract: create actions accept an optional idempotencyKey (a retry within 24 h replays the first result instead of duplicating it); list actions that page return an additive nextCursor to pass back as cursor; every tool advertises _meta.schemaVersion. See docs/TOOLS.md.
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 or bulk), 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, project automations, events, status updates, and analytics, 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" } }A runnable version of this loop (worker + reviewer, every id threaded from the previous response, non-zero exit on any failure) lives in examples/basic/agent-loop.ts; --plan prints the call sequence with symbolic references.
Checkout strategies: highest_priority, oldest_first, skills_match, milestone_deadline, ai. Budgets are set with agent_manage and action: "set_budget"; reset periods are daily, weekly, monthly, or never.
Where the state lives — no external database:
Data | GitHub-native storage |
Agent registry |
|
Task claims | Project custom fields ( |
Work products | Structured issue comments |
Budgets and heartbeats | Agent records in the registry |
Configuration
Variable | Required | Purpose |
| no* | GitHub PAT ( |
| yes | Owner (user or org) of the target repository |
| yes | Target repository name |
| no | GitHub App installation auth; highest-priority credential when all three are set (a partial set falls through to the next tier) |
| no | OAuth device flow for |
| no | Unlocks the |
| no | Per-role provider, model, key, endpoint |
| no | Expose only some groups: |
| no | Read secrets from files named after the variable (Docker/k8s convention) |
| no | Webhook/SSE transport; signature validation fails closed |
| no | HTTP hardening: binds |
| no | Bidirectional sync and cache tuning |
| no | Remaining GraphQL points below which requests back off proactively (default 100) |
| no | Append-only, redacted JSONL record of every state-changing tool call ( |
| no | Opt-in OpenTelemetry tracing ( |
| no | Per-operation token budget for AI task generation (distinct from per-agent budgets) |
| no |
|
* Credential chain (first hit wins, re-resolved per tool call): GitHub App installation → --token CLI flag → $SECRETS_DIR/GITHUB_TOKEN file → GITHUB_TOKEN env var → stored OAuth token from auth login → gh auth token. GITHUB_TOKEN is just one option; if you are already logged in with gh, you need no token configuration at all. The gh token is re-read every 60 s (and on a 401); pin an account with GH_CLI_USER. Disable the fallback with GH_CLI_TOKEN_FALLBACK=false. CLI flags override env vars everywhere.
The /events/* HTTP endpoints require a bearer token (EVENTS_AUTH_TOKEN) or OAuth 2.1 resource-server settings (OAUTH_ISSUER + OAUTH_AUDIENCE); with neither configured they answer 503 (set EVENTS_ALLOW_UNAUTHENTICATED=true for trusted dev only). See Inbound HTTP authentication.
Narrow the exposed surface with group filters (group names, not tool names):
MCP_TOOL_GROUPS=core # project management only
MCP_TOOL_GROUPS=core,ai # add the AI tools
MCP_TOOL_GROUPS=all # default — everythingAI providers: anthropic, openai, google, google-vertex (Gemini via Google ADC — GOOGLE_VERTEX_PROJECT), perplexity, and openai-compatible (OpenRouter, Together, Groq, Ollama, LM Studio, Azure OpenAI, …). There are no default models — you configure the models you use, per role, so you can run OpenRouter for cheap daily work and a frontier model for PRD generation.
Full list: docs/CONFIGURATION.md.
Running it
Every script is package-manager agnostic — npm run X and pnpm run X are identical, and both lockfiles are committed.
Task | Command |
Build (tsc → |
|
Typecheck (src + examples, src + tests) |
|
Lint |
|
Format |
|
Unit tests |
|
Dev (watch) |
|
Coverage |
|
E2E, mocked GitHub/AI |
|
E2E, live API (uses rate limit) |
|
AI suites |
|
Inspect the server |
|
Point an MCP client at a local build with {"command": "node", "args": ["build/index.js"]}.
Deployment and MCP-client setup: docs/deployment.md. When something misbehaves: docs/TROUBLESHOOTING.md.
Architecture at a glance
Four layers, dependencies pointing inward:
Domain (
src/domain/) — types, Zod schemas, errors, and rich entities (entities/) that carry their own invariants and state-transition logic. Orchestration and I/O live in services.Services (
src/services/) — business logic;ProjectManagementServiceorchestrates per-feature services,src/services/ai/holds the AI SDK providers.Infrastructure (
src/infrastructure/) —github/(Octokit GraphQL/REST),tools/(tool definitions, registry, validators,compound/), plus cache, persistence, resilience, events, secrets, logger, MCP resources and prompts.MCP (
src/index.ts) — bootsMcpServer(MCP v2) over stdio; every tool is registered withregisterTooland shares onedispatchToolcarrying the shutdown gate, in-flight tracking, and result formatting.
src/container.ts wires the components index.ts owns with tsyringe DI; src/env.ts and src/cli.ts resolve configuration (CLI flags beat env vars). Tool executors self-construct through one shared factory (createGitHubFactory()), a documented exception to container resolution. Authentication is resolved once by resolveGitHubAuth() (GitHub App outranks the PAT) and all GitHub traffic goes through one GitHubRequestExecutor with retry and proactive rate-limit budgeting. AI providers plug in behind AIServiceFactory: it returns a model per role, wraps it in usage-reporting middleware, and the shared dispatcher debits the calling agent's budget once per tool call (a hard-stop budget gates AI tools with BudgetExhausted).
A tool that runs and fails returns { content, isError: true } with a stable code in _meta.error so the model can recover; a JSON-RPC error is reserved for an unknown tool or protocol faults.
Design details: docs/architecture.md.
Contributing
Task tracking uses bd (beads) — bd ready, bd show <id>, bd update <id> --claim, bd close <id>. Code traversal and audits use GitNexus: run impact analysis before editing a symbol and change analysis before committing. Refresh the index with node .gitnexus/run.cjs analyze --index-only when that runner exists in your checkout; otherwise bootstrap the CLI with npx/bunx/pnpm dlx gitnexus@latest analyze. Per-task recipes live in .agents/skills/gitnexus-*/SKILL.md.
The quality gate, in order: npm run build → npm run typecheck → npm run lint → npm test.
Traps that bite contributors:
Source imports omit
.js. Thepostbuildstep adds the extension. Never ship rawtscoutput — always run the full build.isolatedModulesis on. A type re-exported as a value is a compile error; useexport type/import type, including for decorated constructor parameters.Vitest rejects foreign test-runner CLI flags.
--testPathPatternfails withCACError: Unknown option; filter with a positional pattern and exclude with--exclude='**/e2e/**'.Mocks must use
function, not an arrow, wherever the code under test callsnew. AbeforeEachwith an implicit return is treated as a teardown callback — use a block body.
Start with CONTRIBUTING.md and docs/contributing/index.md.
License
MIT — see CHANGELOG.md for the release history.
Documentation
Guide | What it covers |
21 compound tools, 175 actions, per-action parameters | |
Every environment variable and per-role AI setup | |
Install paths, Docker, MCP client configuration | |
Layers, patterns, data flow, agent orchestration | |
Day-to-day usage | |
Step-by-step walkthroughs | |
Common failures and fixes | |
Development workflow and standards |
Available Tools
21 toolsagent_manageAgent ManagementCDestructive
Agent management: list/deregister agents, activity, work products, budgets (warningFraction), stale reclaim, smart assignment, workload rebalancing, convergence, and registry cleanup. Use the action field to select the operation.
Inputs: action (required), role, branch, status, +26 more.
agent_workAgent WorkC
Agent work operations: register agents, checkout/release/complete tasks, send heartbeats, submit/check review state, validate work products, and get handoff context. Use the action field to select the operation.
Inputs: action (required), name, role, view, +27 more.
ai_analyzeAI AnalysisC
AI-powered analysis: enrich issues (single/bulk), triage issues, schedule triaging, suggest labels, detect duplicates, find related issues. Use the action field to select the operation.
Inputs: action (required), config, agentId, issueId, +17 more.
ai_generateAI GenerationC
AI-powered generation: generate/enhance/parse PRDs, add features, get next tasks, analyze complexity, expand tasks, create traceability matrices. Use the action field to select the operation.
Inputs: action (required), limit, tasks, author, +67 more.
ai_planAI PlanningC
AI-powered planning: calculate capacity, prioritize backlog, assess risk, suggest sprint composition, generate roadmaps and visualizations. Use the action field to select the operation.
Inputs: action (required), agentId, roadmap, capacity, +19 more.
analyticsAnalyticsBRead-onlyIdempotent
Read-only project analytics: sprint velocity and burndown, cycle time, throughput, and a project summary. Use the action field to select the report.
Inputs: action (required), lastN, bucket, sprintId, +2 more.
discover_toolsDiscover ToolsARead-onlyIdempotent
Discover available compound tools, their actions, and parameters. Always available regardless of group filter.
Inputs: query, domain.
manage_automationManage AutomationBDestructive
Manage Project Automations: list, get and delete the automation workflows of a GitHub project. Use the action field to select the operation.
Inputs: action (required), projectId, workflowId.
manage_branchesManage BranchesCDestructive
Manage GitHub Branch Protection: get, update, and delete a branch's protection rules; list repository branches. Use the action field to select the operation.
Inputs: action (required), page, repo, owner, +14 more.
manage_eventsManage EventsC
Manage Events: subscribe to project events, get recent events, replay events. Use the action field to select the operation.
Inputs: action (required), limit, filters, clientId, +8 more.
manage_issuesManage IssuesBDestructive
Manage GitHub Issues: create, list, get, update issues; manage comments and drafts; search with advanced filters; manage sub-issues. Use the action field to select the operation.
Inputs: action (required), body, repo, sort, +32 more.
manage_iterationsManage IterationsC
Manage Project Iterations: get configuration, current iteration, items; find by date; assign items. Use the action field to select the operation.
Inputs: action (required), date, limit, itemIds, +3 more.
manage_labelsManage LabelsB
Manage repository Labels: create and list labels. Use the action field to select the operation.
Inputs: action (required), name, color, limit, +1 more.
manage_milestonesManage MilestonesCDestructive
Manage Milestones: create, list, update, delete milestones; get metrics; find overdue and upcoming milestones. Use the action field to select the operation.
Inputs: action (required), sort, limit, state, +9 more.
manage_projectManage ProjectsCDestructive
Manage GitHub Projects (v2): create, list, get, update, delete projects; manage readme, fields, views, items; handle templates and link to repos/teams. Use the action field to select the operation.
Inputs: action (required), org, name, repo, +30 more.
manage_prsManage Pull RequestsC
Manage Pull Requests: create, get, list, update, merge PRs; list and create reviews. Use the action field to select the operation.
Inputs: action (required), base, body, head, +10 more.
manage_releasesManage ReleasesBDestructive
Manage GitHub Releases: create, list, get, update, delete releases; get the latest release. Use the action field to select the operation.
Inputs: action (required), body, name, repo, +7 more.
manage_sprintsManage SprintsBDestructive
Manage Sprints: create, list, update, delete sprints (delete requires confirm: true); get current sprint; add/remove issues; get metrics and plan. Use the action field to select the operation.
Inputs: action (required), title, sprint, status, +9 more.
manage_status_updatesManage Status UpdatesC
Manage project Status Updates: create, list, and get status updates. Use the action field to select the operation.
Inputs: action (required), body, after, first, +6 more.
manage_workflowsManage WorkflowsADestructive
Manage GitHub Actions Workflows: list workflows, trigger dispatch events, inspect run status and logs, list runs, and cancel runs. Use the action field to select the operation.
Inputs: action (required), ref, page, repo, +7 more.
systemSystemCIdempotent
System operations: health check and project field setup. Use the action field to select the operation.
Inputs: action (required), projectId.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 21 tools
Most tools are cleanly separated by GitHub resource or domain: issues, PRs, releases, workflows, milestones, sprints, labels, and analytics each have a distinct target. However, there is meaningful overlap between agent_manage and agent_work, and between ai_plan, ai_generate, ai_analyze, and analytics, which could cause misselection for planning/analysis tasks.
The naming is consistently snake_case and mostly follows predictable prefixes such as manage_*, ai_*, and agent_*. Minor deviations exist: some names are noun-only (analytics, system), and singular/plural patterns vary (manage_project vs manage_issues, manage_prs abbreviation).
At 21 tools, the server is on the heavy side for an MCP surface, though the use of compound action-based tools mitigates some complexity. The broad project-management scope justifies many categories, but the count is still borderline and could overwhelm agents choosing among similar AI/agent tools.
The surface covers a broad GitHub project-management lifecycle: projects, issues, PRs, milestones, sprints, iterations, releases, workflows, branch protection, analytics, AI assistance, and agent coordination. Some minor gaps remain, such as limited label lifecycle operations and incomplete comment/review management, but core workflows are well covered.
Maintenance
Related MCP Connectors
Tasks, sprints, releases and docs for engineering teams with AI coding agents.
A MCP server built for developers enabling Git based project management with project and personal…
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Related MCP Servers
- PythonMIT
- FlicenseNot gradedqualityDmaintenanceA production-ready server featuring over 28 tools for comprehensive GitHub analysis, including repository metadata, issue tracking, and workflow monitoring. It enables users to search repositories, analyze contributor activity, and inspect codebase health through natural language.1-
- FlicenseNot gradedqualityCmaintenanceEnables managing GitHub Projects v2 boards through Claude Code and Codex, including project and item administration, field updates, sprint boards, epic rollups, and desired-state planning.-
- AlicenseNot gradedqualityAmaintenanceTurns GitHub Projects v2 into an agentic project-management platform where AI coding agents can register, claim and track tasks, coordinate via heartbeats, review work, and stay within token budgets. It also enables AI-powered PRD generation, sprint planning, issue triage, roadmap creation, and PRD-to-issue materialization using GitHub-native storage.1,038 npmMIT