使用说明
GitHub 项目 MCP 服务器
MCP(模型上下文协议)服务器,用于与GitHub Projects协同工作,提供可扩展的接口以支持其他任务管理器。
特点
- ✅ 抽象接口轻松将GitHub替换为Jira或其他任务管理工具
- ✅ 弱结合分层架构的纯净设计
- ✅ 20种工具全面支持工单处理及其关联
- ✅ 翻译成中文是:✅(这个符号本身没有特定的中文含义,通常在中文环境中,人们会直接使用这个符号来表示“正确”或“确认”的意思,或者根据上下文来解释其含义。)如果非要给这个符号一个中文解释的话,可以理解为“正确”或“确认”。 GraphQL API使用现代的GitHub GraphQL API
- ✅ 类型安全使用 Pydantic 模型进行完整类型化
建筑学
┌─────────────────────────────┐
│ MCP Server (FastMCP) │ ← 20 tools для Claude
│ - get_tickets, add_comment │
│ - add_parent, add_blocking │
└──────────┬──────────────────┘
│
▼
┌─────────────────────────────┐
│ TaskManagerInterface (ABC) │ ← Абстрактный слой
│ - All task operations │ (можно заменить на Jira)
└──────────┬──────────────────┘
│
▼
┌─────────────────────────────┐
│ GitHubProjectsClient │ ← GitHub реализация
│ - GraphQL API calls │
└─────────────────────────────┘
安装
1. 安装依赖项
cd github-projects-mcp
uv sync --frozen --dev
或者使用 pip:
pip install -e .
2. 环境设置
创建 .env 基于文件的 .env.example:
cp .env.example .env
编辑 .env 文件:
# GitHub Personal Access Token с правами:
# - repo (full control)
# - project (read:project, write:project)
GITHUB_TOKEN=ghp_your_token_here
# Владелец репозитория
GITHUB_OWNER=my_username
# Название репозитория
GITHUB_REPO=target_repo_name
# Номер проекта (опционально)
GITHUB_PROJECT_NUMBER=1
3. 创建GitHub个人访问令牌
- 进入设置 → 开发者设置 → 个人访问令牌 → 令牌(经典)
- 生成新令牌(经典版)
- 选择权限:
- ✅
repo(对私有仓库的完全控制) - ✅
project(对项目的全面控制)
- ✅
- 将令牌复制到
.env文件
使用
启动服务器
# Через uv
uv run python -m github_projects_mcp.server
# Или напрямую
python src/github_projects_mcp/server.py
使用MCP Inspector进行测试
mcp dev src/github_projects_mcp/server.py
将打开网页界面以测试所有工具。
可用的工具
工单处理
-
获取门票 - 获取工单列表
- 过滤器:状态、负责人、标签、里程碑、限制
-
获取门票 - 根据ID/编号获取一个工单
评论
- 获取评论 - 获取工单的评论
- 添加评论 - 添加评论
标签
- 获取标签 - 获取所有可用标签
- 获取工单标签 - 获取特定工单的标签
- 添加标签 - 为工单添加标签
状态(或:状态更新)
- 更新状态 - 更改工单状态
分支和公关
- 添加分支 - 将分支绑定到工单
- 添加拉取请求 - 将PR绑定到工单
创建工单
- 创建工单 - 创建一个新工单
- 创建子任务 - 创建子任务
工单之间的关联
- 添加子任务 - 为工单添加子任务
- 添加父级 - 设置父工单
- 添加被阻止项 - 标记为该工单已被他人锁定
- 添加拦截 - 注明该工单会阻塞其他工单
用途
- 分配工单 - 为用户分配工单
- 分配给自己 - 将工单分配给自己
里程碑
- 获取里程碑 - 获取里程碑列表
- 添加里程碑 - 将工单添加到里程碑中
项目
- 将工单添加到项目中 - 将工单添加到项目中
与Claude Code的集成
添加到配置中
编辑Claude Code的配置(通常 ~/.claude/config.json 或通过用户界面(UI):
{
"mcpServers": {
"github-projects": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/github-projects-mcp",
"run",
"python",
"-m",
"github_projects_mcp.server"
],
"env": {
"GITHUB_TOKEN": "ghp_your_token_here",
"GITHUB_OWNER": "your_github_username",
"GITHUB_REPO": "your_repo_name"
}
}
}
}
集成测试
添加后,请重启Claude Code并检查可用工具:
You: Show me available MCP tools
Claude: [должен показать 15 инструментов github-projects]
使用示例
You: Get all open tickets from my repository
Claude: [использует get_tickets tool]
You: Add comment "Working on this" to ticket #5
Claude: [использует add_comment tool]
You: Assign ticket #10 to myself
Claude: [использует assign_to_self tool]
测试
设置测试
测试使用您配置的GitHub仓库
# Убедитесь что .env настроен правильно
export GITHUB_TOKEN=your_token
export GITHUB_OWNER=your_github_username
export GITHUB_REPO=your_repo_name
启动测试
# Все тесты
uv run pytest
# С выводом логов
uv run pytest -v
# Конкретный тест
uv run pytest tests/test_github_client.py -k test_get_tickets
开发
添加新的任务管理器
- 创建一个新模块(例如,
jira/client.py) - 实现
TaskManagerInterface - 更新
server.py用于使用新客户端
from .jira import JiraClient
# В server_lifespan:
task_manager = JiraClient(
url=settings.jira_url,
username=settings.jira_username,
api_token=settings.jira_token,
)
缩进和格式化
# Форматирование
uv run ruff format .
# Проверка стиля
uv run ruff check .
# Исправление проблем
uv run ruff check . --fix
# Проверка типов
uv run pyright
项目结构
github-projects-mcp/
├── src/
│ └── github_projects_mcp/
│ ├── __init__.py
│ ├── server.py # MCP server с tools
│ ├── config.py # Настройки
│ ├── interfaces/
│ │ └── task_manager.py # Абстрактный интерфейс
│ ├── models/ # Pydantic модели
│ │ ├── ticket.py
│ │ ├── comment.py
│ │ ├── label.py
│ │ └── milestone.py
│ └── github/ # GitHub реализация
│ └── client.py
├── tests/
│ ├── conftest.py
│ └── test_github_client.py
├── pyproject.toml
├── .env.example
└── README.md
要求
- Python 版本 >= 3.10
- GitHub 个人访问令牌
- uv(推荐)或 pip
许可证
麻省理工学院(MIT)
作者
你的名字