github-project-management
Provides tools for managing GitHub Projects V2, issues, milestones, labels, and sprint planning, enabling AI assistants to programmatically manage project boards and issue workflows on GitHub.
Click on "Install 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., "@github-project-managementAdd a new issue called 'Fix broken link' to the Docs board"
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.
GitHub Project Management MCP Server
Custom MCP (Model Context Protocol) server that enables AI assistants to programmatically manage GitHub Project V2 boards via the Model Context Protocol. Built with Python 3.12 and FastMCP, communicates over stdio transport, and runs inside a standalone Docker container.
Location
project/
├── mcp/ ← This directory (root-level, independent of the app)
│ ├── Dockerfile
│ ├── requirements.txt
│ ├── server.py # FastMCP entry point
│ ├── config.py
│ ├── auth.py
│ ├── capabilities.py # Tool → permission mapping
│ ├── profiles.py # Multi-target profile system
│ ├── tools/ # MCP tool definitions
│ ├── services/ # Business logic
│ ├── clients/ # GraphQL + gh CLI clients
│ ├── models/ # Pydantic models
│ ├── graphql/ # Query/mutation strings
│ ├── tests/ # Unit + contract tests
│ ├── scripts/ # Validation, preflight, secret scanning
│ │ ├── validate.sh # ← Run before every push
│ │ ├── preflight.sh # Environment prerequisites
│ │ ├── scan_secrets.sh # Token pattern detection
│ │ └── smoke_build.sh # Minimal build verification
│ ├── profiles/ # Target config (.env files, no secrets)
│ ├── docs/ # Detailed documentation
│ ├── LICENSE # MIT
│ ├── CONTRIBUTING.md
│ └── SECURITY.mdNote: This MCP server is a standalone component with its own Dockerfile, dependencies, and lifecycle.
Related MCP server: my_pm_tools
How It Works
MCP Client → docker run --rm -i github-project-mcp:latest → stdin/stdout JSON-RPC → GitHub APIEl cliente MCP invoca una herramienta (ej:
create_project_item)Se ejecuta
docker run --rm -i github-project-mcp:latest python server.pyEl servidor valida autenticación y espera comandos por stdin
El cliente envía JSON-RPC via stdin, recibe respuestas por stdout
Al finalizar, el contenedor se destruye automáticamente (
--rm)
Docker — Construir y Gestionar
Construir la imagen
# Desde la raíz del proyecto
docker build -t github-project-mcp:latest ./mcpDocker Compose (desarrollo local)
La forma más simple de configurar y correr el MCP localmente:
# 1. Crear tu configuración local (una sola vez)
cp mcp/.env.example mcp/.env
# Editar mcp/.env con tu GITHUB_TOKEN y target (org/repo/project)
# 2. Construir y verificar
cd mcp/
make build
make verifyMakefile Targets
Todos los targets ejecutan dentro de Docker — sin dependencias del host.
cd mcp/
make help # Mostrar todos los targets disponibles
make build # Construir imagen Docker
make verify # Validar auth + scopes + config
make test # Ejecutar unit tests
make validate # CI completo (build + syntax + tests + tools + secrets)
make tools # Contar herramientas registradas (>= 100)
make syntax # Verificar sintaxis Python
make secrets # Escanear credenciales en código
make shell # Shell interactivo dentro del contenedor
make clean # Eliminar imágenesNota: Si
makeno está disponible en el host, los targets pueden invocarse directamente con Docker. Ejemplo:docker run --rm --env-file .env github-project-mcp:latest python3 scripts/verify_setup.py
Cada contributor clona el repo, crea su .env, y el MCP funciona sin instalar nada más que Docker.
Verificar que la imagen existe
docker images | grep github-project-mcpProbar manualmente (smoke test)
docker run --rm -i \
-e GITHUB_TOKEN="<your_token>" \
github-project-mcp:latest \
python server.pyEl servidor imprimirá en stderr: github-project-management MCP server ready. Authentication validated successfully.
Luego espera JSON-RPC por stdin. Presiona Ctrl+C para salir.
Reconstruir después de cambios
docker build -t github-project-mcp:latest ./mcp --no-cacheScript de gestión
El script ./scripts/dev/start.sh soporta un argumento mcp para gestionar la imagen:
./scripts/dev/start.sh mcp build # Construir/reconstruir la imagen
./scripts/dev/start.sh mcp test # Ejecutar smoke test
./scripts/dev/start.sh mcp status # Verificar si la imagen existeNota: El MCP no es un servicio persistente. No necesita
up/down/restart. Se lanza bajo demanda cada vez que el cliente usa una herramienta.
IDE Integration
El MCP es compatible con cualquier cliente que soporte el protocolo MCP sobre stdio. La configuración varía por IDE — el patrón general es:
{
"mcpServers": {
"github-project-management": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "GITHUB_TOKEN",
"--env-file", "mcp/.env",
"github-project-mcp:latest",
"python", "server.py"
]
}
}
}Para configuración específica por IDE, ver docs/SETUP.md.
Registered Tools (100)
Core Operations
Tool | Description |
| Discover project/field IDs |
| List items with filters |
| Create issue + add to project |
| Update Status, Priority, Due date |
| Set story point estimate |
| Archive item from board |
Issue Management
Tool | Description |
| Close an issue |
| Reopen a closed issue |
| Add comment to issue |
| Edit title, body, labels, milestone, assignees |
| Link as sub-issue |
| Unlink sub-issue |
| Full issue detail |
| Search by query |
Board Operations
Tool | Description |
| Move item to any status column |
| Mark as Done |
| Move to Trash |
| Batch update multiple items |
| Close multiple issues |
| Assign multiple issues |
Planning & Workflows
Tool | Description |
| Generate sprint plan |
| Auto-generate release notes |
| Full completion workflow |
| Generate standup report |
| Sprint review summary |
| Auto-triage proposals |
| Flag overdue items |
| Create parent + children |
| Close sprint and move items |
Metadata
Tool | Description |
| Create GitHub milestone |
| Close milestone |
| List milestones |
| Create label |
| List labels |
| Board statistics |
| Current sprint metrics |
Architecture
Tool Layer (FastMCP tool definitions)
↓
Service Layer (business logic, orchestration)
↓
Client Layer (GraphQL + gh CLI + caching)
↓
GitHub APIs (GraphQL v4 + REST v3)Delegation Strategy
Method | When Used |
gh CLI | Issue CRUD, comments, project item-add, close |
Custom GraphQL | Field updates, archival, discovery, sub-issues |
Environment Variables
Variable | Required | Description |
| Yes | GitHub PAT (fine-grained or classic) |
| Yes | GitHub owner (organization or user login) |
| Yes | Repository name |
| Yes | Project V2 board number (1–100000) |
Troubleshooting
MCP no conecta
# Verificar que la imagen existe
docker images | grep github-project-mcp
# Si no existe, construir
docker build -t github-project-mcp:latest ./mcp
# Verificar token
echo $GITHUB_TOKEN | head -c 20Reconectar MCP
Si el MCP se desconecta del IDE, usar la opción de reconexión del cliente MCP correspondiente.
Error de autenticación
Verificar que
GITHUB_TOKENestá disponible en el entorno del contenedorTokens
github_pat_*(fine-grained) necesitan permisos: Issues (RW), Projects (RW), Metadata (R)Tokens clásicos necesitan scopes:
repo,project,read:org
Related Documentation
Document | Purpose |
Token setup and permissions | |
Tool input/output examples | |
Parameter reference | |
Common errors |
Source locations and synchronization
This directory (mcp/) is the canonical source of truth for the MCP package.
The repository contains a synchronized copy at:
app/backend/app/mcp/github_project/— embedded in the backend for Docker builds
Sync workflow
Make all changes here in
mcp/first.Copy modified files to the embedded path:
cp mcp/<file> app/backend/app/mcp/github_project/<file>Verify with the automated check:
./mcp/scripts/check_sync.sh
The sync script compares all shared .py files (excluding __init__.py which is
intentionally different in the backend copy, and infra-only files like Dockerfile
and requirements.txt). CI runs this check on every push — divergence fails the build.
Files intentionally different in the backend copy
File | Reason |
| Backend-specific imports + sync-source documentation |
| Points back here; documents the copy policy |
The backend test suite exercises the embedded copy; syntax validation must compile both trees.
Hardened runtime behavior
All settings use the GH_PROJECT_ prefix and are validated at startup:
Setting | Default | Bounds / behavior |
|
| 1–120 seconds |
|
| 0–5; reads only, mutations never retry |
|
| 0–60 seconds, exponential backoff |
|
| 1–720 hours |
|
| Configurable local path |
|
| 1–100 |
|
| 1–1,000 |
|
| 10,000–10,000,000 |
The metadata cache is written atomically, uses owner-only permissions (0600), rejects future timestamps, and is not reused when organization or project number differs. CLI and GraphQL diagnostics redact token-like values and are bounded before returning to the MCP client.
Docker-only validation
Run validation without host Python tooling:
# Compile both source copies through a Python container
tar -C . -cf - mcp app/backend/app/mcp \
| docker run --rm -i python:3.12-slim sh -c \
'mkdir -p /tmp/factib && tar -xf - -C /tmp/factib && \
python -m compileall -q /tmp/factib/mcp /tmp/factib/app/backend/app/mcp'
# Run the backend MCP tests using the existing backend image
tar -C . -cf - app/backend/app app/backend/tests/mcp \
| docker run --rm -i -e PYTHONPATH=/tmp/factib/app/backend backend:latest sh -c \
'mkdir -p /tmp/factib && tar -xf - -C /tmp/factib && cd /tmp/factib/app/backend && \
pytest -q --confcutdir=/tmp/factib/app/backend/tests/mcp tests/mcp'Local Validation (Pre-Push)
Always run before creating a PR or pushing changes. This mirrors the CI pipeline locally and catches issues before they reach GitHub Actions.
Quick Start
# Full validation (builds image + runs all checks):
./mcp/scripts/validate.sh
# Quick mode (reuses cached image, skips rebuild):
./mcp/scripts/validate.sh --quick
# Auto-fix known issues (e.g., BOM characters):
./mcp/scripts/validate.sh --fixWhat It Checks
Step | What | Same as CI step |
1. BOM | Detects UTF-8 BOM bytes in Python files | N/A (prevents syntax errors) |
2. Build |
| "Build MCP image" |
3. Syntax |
| "Syntax check" |
4. Tests | Runs test modules in | "Run unit tests" |
5. Tools | Counts registered tools (must be >= 100) | "Verify tool count" |
6. Secrets | Scans for token patterns in tracked files | N/A (pre-publication) |
Available Scripts
Script | Purpose | When to Use |
| Full CI mirror | Before every push/PR |
| Prerequisite check (Docker, token, config) | First setup or env changes |
| Secret pattern detection | Before publishing repo |
| Minimal build + tool count | Quick sanity check |
| Multi-target contract suite | After structural changes |
Common Issues and Fixes
Issue | Symptom | Fix |
BOM characters |
|
|
Image not built | "Image not found" in Docker commands |
|
Token not set | "No GitHub token found" in preflight |
|
Tool count < 100 | New tool not registered in server.py | Add |
The complete 200-item register, including implemented and planned work, is in docs/HARDENING_200.md.
Extended capability suite: 60 additional tools
The server exposes 100+ tools in total: the original 40 operational tools plus 60 focused capabilities from tools/capability_suite.py.
Group | Purpose | Examples |
Issue and Markdown quality | Validate, normalize, summarize, template, bundle and review issues |
|
Comment system | Create progress, plan, blocker and resolution comments; list/search/edit comments |
|
Project reporting | Health, status, priority, assignee, due-date and field reports |
|
Project planning | Export/import Markdown, metadata synchronization plans and filtered bulk plans |
|
Strategic automation | Sprint plans, backlog ranking, risk/dependency reports and stakeholder updates |
|
Roadmaps and decisions | Changelogs, release checklists, roadmaps, retrospectives and automation decisions |
|
Tools that could cause broad mutations return a dry_run plan by default. Direct comment tools perform one visible comment operation per invocation. The capability catalog asserts 60 unique additions at import time, and Docker validation confirms 100 registered FastMCP tools in both source copies.
Distribution
Docker Image
The MCP server is distributed as a standalone Docker image. Build locally:
docker build -t github-project-mcp:latest ./mcpCI/CD Pipeline
The mcp-ci.yaml workflow runs automatically on:
Push to
mainwhen files undermcp/changePull requests touching
mcp/paths
Pipeline stages:
Build — Docker image build verification
Syntax check — AST parsing of all Python files
Unit tests — pytest suite execution
Tool count verification — Ensures ≥100 registered tools
Versioning
This MCP server follows Semantic Versioning. See CHANGELOG.md for release history.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables users to interact with GitHub's Projects v2 API through natural language for Agile project management, supporting repository details, issue tracking, and project board management operations.35GPL 2.0
- AlicenseAqualityBmaintenanceEnables natural language management of GitHub Projects V2, including issue creation, status changes, sprint reports, and project setup via MCP tools and shell scripts.311MIT
- FlicenseNot gradedqualityDmaintenanceEnables LLM agents to manage projects, track issues, log work, and integrate with Git. Provides 23 MCP tools for full project management capabilities.16
- AlicenseAqualityDmaintenanceEnables AI assistants to manage GitHub Projects V2, including items, fields, and views through a standardized interface.17121MIT
Related MCP Connectors
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Free public MCP for AI agents — 193 tools, 44 workflows. No API key.
Project management MCP for AI agents with safe task reads and writes.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jersonmartinez/mcp-github-projects'
If you have feedback or need assistance with the MCP directory API, please join our Discord server