Skip to main content
Glama
jersonmartinez

github-project-management

GitHub Project Management MCP Server

MCP CI

Пользовательский MCP-сервер (Model Context Protocol), который позволяет ИИ-ассистентам программно управлять досками GitHub Project V2 через Model Context Protocol. Создан на Python 3.12 и FastMCP, общается через stdio-транспорт и работает внутри автономного Docker-контейнера.

Расположение

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.md

Примечание: Этот MCP-сервер является автономным компонентом со своим собственным Dockerfile, зависимостями и жизненным циклом.

Related MCP server: GitHub Projects MCP Server

Как это работает

MCP Client → docker run --rm -i github-project-mcp:latest → stdin/stdout JSON-RPC → GitHub API
  1. Клиент MCP вызывает инструмент (например: create_project_item)

  2. Выполняется docker run --rm -i github-project-mcp:latest python server.py

  3. Сервер проверяет аутентификацию и ожидает команды через stdin

  4. Клиент отправляет JSON-RPC через stdin и получает ответы через stdout

  5. По завершении контейнер автоматически уничтожается (--rm)

Docker — Сборка и управление

Сборка образа

# Desde la raíz del proyecto
docker build -t github-project-mcp:latest ./mcp

Docker Compose (локальная разработка)

Самый простой способ настроить и запустить MCP локально:

# 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 verify

Цели Makefile

Все цели выполняются внутри Docker — без зависимостей на хосте.

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ágenes

Примечание: Если make недоступен на хосте, цели можно вызывать напрямую через Docker. Пример: docker run --rm --env-file .env github-project-mcp:latest python3 scripts/verify_setup.py

Каждый участник клонирует репозиторий, создаёт свой .env, и MCP работает без установки чего-либо, кроме Docker.

Проверка наличия образа

docker images | grep github-project-mcp

Ручное тестирование (smoke test)

docker run --rm -i \
  -e GITHUB_TOKEN="<your_token>" \
  github-project-mcp:latest \
  python server.py

Сервер выведет в stderr: github-project-management MCP server ready. Authentication validated successfully. Затем будет ожидать JSON-RPC через stdin. Нажмите Ctrl+C для выхода.

Пересборка после изменений

docker build -t github-project-mcp:latest ./mcp --no-cache

Скрипт управления

Скрипт ./scripts/dev/start.sh поддерживает аргумент mcp для управления образом:

./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 existe

Примечание: MCP не является постоянным сервисом. Ему не нужны up/down/restart. Он запускается по требованию каждый раз, когда клиент использует инструмент.

Интеграция с IDE

MCP совместим с любым клиентом, поддерживающим протокол MCP через stdio. Конфигурация зависит от IDE — общий паттерн:

{
  "mcpServers": {
    "github-project-management": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "GITHUB_TOKEN",
        "--env-file", "mcp/.env",
        "github-project-mcp:latest",
        "python", "server.py"
      ]
    }
  }
}

Для конфигурации, специфичной для конкретной IDE, см. docs/SETUP.md.

Зарегистрированные инструменты (100)

Основные операции

Tool

Description

discover_ids

Обнаружение ID проектов/полей

list_project_items

Список элементов с фильтрами

create_project_item

Создание issue + добавление в проект

update_project_item_fields

Обновление статуса, приоритета, срока

set_estimate

Установка оценки в story points

archive_project_item

Архивирование элемента с доски

Управление issues

Tool

Description

close_issue

Закрыть issue

reopen_issue

Переоткрыть закрытый issue

comment_issue

Добавить комментарий к issue

edit_issue

Редактировать заголовок, описание, метки, веху, исполнителей

add_sub_issue

Привязать как под-issue

remove_sub_issue

Отвязать под-issue

get_issue_detail

Полная информация об issue

search_issues

Поиск по запросу

Операции с доской

Tool

Description

move_to_status

Переместить элемент в любую колонку статуса

move_to_done

Отметить как Done

move_to_trash

Переместить в корзину

bulk_update_items

Пакетное обновление нескольких элементов

bulk_close_issues

Закрыть несколько issues

bulk_assign

Назначить несколько issues

Планирование и рабочие процессы

Tool

Description

sprint_planning

Сформировать план спринта

generate_release_notes

Автоматическая генерация release notes

complete_issue

Полный процесс завершения

daily_standup

Сформировать отчёт для стендапа

sprint_review

Итоги обзора спринта

triage_new_issues

Автоматическое триажирование предложений

escalate_overdue

Пометить просроченные элементы

create_epic

Создать родительскую задачу + дочерние

close_sprint

Закрыть спринт и переместить элементы

Метаданные

Tool

Description

create_milestone

Создать веху GitHub

close_milestone

Закрыть веху

list_milestones

Список вех

create_label

Создать метку

list_labels

Список меток

get_project_stats

Статистика доски

get_sprint_summary

Метрики текущего спринта

Архитектура

Tool Layer (FastMCP tool definitions)
    ↓
Service Layer (business logic, orchestration)
    ↓
Client Layer (GraphQL + gh CLI + caching)
    ↓
GitHub APIs (GraphQL v4 + REST v3)

Стратегия делегирования

Метод

Когда используется

gh CLI

CRUD для issues, комментарии, добавление элементов в проект, закрытие

Custom GraphQL

Обновление полей, архивирование, обнаружение, под-issues

Переменные окружения

Variable

Required

Description

GITHUB_TOKEN

Да

GitHub PAT (fine-grained или классический)

GH_PROJECT_ORG_NAME

Да

Владелец GitHub (организация или логин пользователя)

GH_PROJECT_REPO_NAME

Да

Имя репозитория

GH_PROJECT_PROJECT_NUMBER

Да

Номер доски Project V2 (1–100000)

Устранение неполадок

MCP не подключается

# 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 20

Переподключение MCP

Если MCP отключается от IDE, используйте опцию переподключения соответствующего MCP-клиента.

Ошибка аутентификации

  • Убедитесь, что GITHUB_TOKEN доступен в окружении контейнера

  • Токены github_pat_* (fine-grained) требуют разрешения: Issues (RW), Projects (RW), Metadata (R)

  • Классические токены требуют scopes: repo, project, read:org

Связанная документация

Документ

Назначение

docs/SETUP.md

Настройка токена и разрешения

docs/USAGE.md

Примеры ввода/вывода инструментов

docs/PARAMETERS.md

Справочник параметров

docs/TROUBLESHOOTING.md

Частые ошибки

Расположение исходников и синхронизация

Этот каталог (mcp/) является каноническим источником истины для MCP-пакета.

Репозиторий содержит синхронизированную копию по адресу:

  • app/backend/app/mcp/github_project/ — встроена в бэкенд для Docker-сборок

Процесс синхронизации

  1. Вносите все изменения здесь — сначала в mcp/.

  2. Скопируйте изменённые файлы во встроенный путь:

    cp mcp/<file> app/backend/app/mcp/github_project/<file>
  3. Проверьте с помощью автоматической проверки:

    ./mcp/scripts/check_sync.sh

Скрипт синхронизации сравнивает все общие .py-файлы (исключая __init__.py, который намеренно отличается в копии бэкенда, и файлы только для инфраструктуры, такие как Dockerfile и requirements.txt). CI запускает эту проверку при каждом push — расхождение приводит к сбою сборки.

Файлы, намеренно отличающиеся в копии бэкенда

Файл

Причина

__init__.py

Импорты, специфичные для бэкенда + документация источника синхронизации

README.md

Указывает сюда; описывает политику копирования

Тестовый набор бэкенда проверяет встроенную копию; проверка синтаксиса должна компилировать оба дерева.

Усиленное поведение во время выполнения

Все настройки используют префикс GH_PROJECT_ и проверяются при запуске:

Настройка

По умолчанию

Границы / поведение

GH_PROJECT_TIMEOUT_SECONDS

10

1–120 секунд

GH_PROJECT_RETRY_ATTEMPTS

1

0–5; только чтение, мутации не повторяются

GH_PROJECT_RETRY_DELAY_SECONDS

2.0

0–60 секунд, экспоненциальная задержка

GH_PROJECT_CACHE_TTL_HOURS

24

1–720 часов

GH_PROJECT_CACHE_PATH

.github_project_cache.json

Настраиваемый локальный путь

GH_PROJECT_PAGE_SIZE

100

1–100

GH_PROJECT_MAX_ITEMS

200

1–1 000

GH_PROJECT_MAX_CLI_OUTPUT_CHARS

1,000,000

10 000–10 000 000

Кэш метаданных записывается атомарно, использует права только для владельца (0600), отклоняет будущие временные метки и не переиспользуется при изменении организации или номера проекта. Диагностика CLI и GraphQL скрывает значения, похожие на токены, и ограничивается перед возвратом MCP-клиенту.

Проверка только через Docker

Запустите проверку без Python-инструментов на хосте:

# 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'

Локальная проверка (перед push)

Всегда запускайте перед созданием PR или push изменений. Это зеркалирует конвейер CI локально и выявляет проблемы до того, как они попадут в GitHub Actions.

Быстрый старт

# 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 --fix

Что проверяется

Шаг

Что

Соответствует шагу CI

1. BOM

Обнаруживает байты UTF-8 BOM в Python-файлах

Н/Д (предотвращает ошибки синтаксиса)

2. Сборка

docker build -t github-project-mcp:validate ./mcp

"Сборка образа MCP"

3. Синтаксис

ast.parse для всех .py-файлов внутри образа

"Проверка синтаксиса"

4. Тесты

Запускает тестовые модули в tests/

"Запуск модульных тестов"

5. Инструменты

Подсчитывает зарегистрированные инструменты (должно быть >= 100)

"Проверка количества инструментов"

6. Секреты

Сканирует на наличие паттернов токенов в отслеживаемых файлах

Н/Д (перед публикацией)

Доступные скрипты

Скрипт

Назначение

Когда использовать

scripts/validate.sh

Полное зеркало CI

Перед каждым push/PR

scripts/preflight.sh

Проверка предварительных условий (Docker, токен, конфигурация)

При первой настройке или изменении окружения

scripts/scan_secrets.sh

Обнаружение паттернов секретов

Перед публикацией репозитория

scripts/smoke_build.sh

Минимальная сборка + количество инструментов

Быстрая проверка работоспособности

scripts/run_contract_tests.sh

Многоцелевой набор контрактных тестов

После структурных изменений

Частые проблемы и их решения

Проблема

Симптом

Исправление

BOM-символы

SyntaxError: invalid non-printable character U+FEFF

./mcp/scripts/validate.sh --fix

Образ не собран

«Образ не найден» в командах Docker

docker build -t github-project-mcp:latest ./mcp

Токен не задан

«Токен GitHub не найден» при предварительной проверке

export GITHUB_TOKEN=ghp_...

Инструментов < 100

Новый инструмент не зарегистрирован в server.py

Добавьте mcp.tool()(your_tool) в server.py

Полный реестр из 200 пунктов, включая реализованные и запланированные работы, находится в docs/HARDENING_200.md.

Расширенный набор возможностей: 60 дополнительных инструментов

Сервер предоставляет 100+ инструментов в общей сложности: исходные 40 операционных инструментов плюс 60 узконаправленных возможностей из tools/capability_suite.py.

Группа

Назначение

Примеры

Качество issues и Markdown

Проверка, нормализация, суммаризация, шаблоны, группировка и рецензирование issues

validate_issue_markdown, build_issue_template, build_issue_review_checklist

Система комментариев

Создание комментариев о прогрессе, планах, блокерах и решениях; поиск/список/редактирование комментариев

comment_issue_progress, comment_issue_blocker, list_issue_comments

Отчётность по проекту

Отчёты о состоянии, статусе, приоритетах, исполнителях, сроках и полях

project_health_report, project_due_date_risk, project_field_options_report

Планирование проекта

Экспорт/импорт Markdown, планы синхронизации метаданных и фильтрованные массовые планы

project_export_markdown, project_sync_issue_metadata, project_bulk_status_by_filter

Стратегическая автоматизация

Планы спринтов, ранжирование бэклога, отчёты о рисках/зависимостях и обновления для заинтересованных сторон

plan_next_sprint, prioritize_backlog, generate_risk_register

Дорожные карты и решения

Журналы изменений, чек-листы релизов, дорожные карты, ретроспективы и решения по автоматизации

generate_changelog_from_issues, build_roadmap_markdown, build_sprint_retrospective

Инструменты, которые могут вызывать масштабные изменения, по умолчанию возвращают план dry_run. Прямые инструменты работы с комментариями выполняют одну видимую операцию с комментарием за вызов. Каталог возможностей проверяет 60 уникальных дополнений во время импорта, а проверка Docker подтверждает 100 зарегистрированных инструментов FastMCP в обеих копиях исходников.

Распространение

Docker-образ

Сервер MCP распространяется как автономный Docker-образ. Сборка локально:

docker build -t github-project-mcp:latest ./mcp

Конвейер CI/CD

Рабочий процесс mcp-ci.yaml запускается автоматически при:

  • Пуше в main, когда изменяются файлы в mcp/

  • Pull request, затрагивающих пути mcp/

Этапы конвейера:

  1. Сборка — проверка сборки Docker-образа

  2. Проверка синтаксиса — AST-разбор всех Python-файлов

  3. Модульные тесты — выполнение набора pytest

  4. Проверка количества инструментов — гарантирует ≥100 зарегистрированных инструментов

Версионирование

Этот сервер MCP следует семантическому версионированию. Историю релизов см. в CHANGELOG.md.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers