将您的AI助手连接到GitLab。您可以在聊天中直接询问诸如_"列出打开的合并请求", "显示MR #123的评论", "获取MR #456的提交讨论", 或者"查找特性分支的合并请求"_等问题。
此项目使用 uv 进行快速可靠的Python包管理。
安装uv:
# macOS 和 Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
# 或使用pip
pip install uv
安装服务器:
git clone https://github.com/amirsina-mandegari/gitlab-mcp-server.git
cd gitlab-mcp-server
uv venv
source .venv/bin/activate # 在Windows上:.venv\Scripts\activate
uv pip install -e .
chmod +x run-mcp.sh
获取您的GitLab令牌:
read_api 范围的令牌配置您的项目:
在您的项目目录中创建 gitlab-mcp.env 文件:
GITLAB_PROJECT_ID=12345
GITLAB_ACCESS_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx
GITLAB_URL=https://gitlab.com
连接到Cursor:
在您的项目中创建 .cursor/mcp.json 文件:
{
"mcpServers": {
"gitlab-mcp": {
"command": "/path/to/gitlab-mcp-server/run-mcp.sh",
"cwd": "/path/to/your-project"
}
}
}
重启Cursor 并开始提问!
一旦连接成功,尝试在聊天中使用以下命令:
增强的审查工具允许您与合并请求讨论进行交互:
首先获取审查 以查看讨论ID:
"显示MR #123的评论"
回复特定讨论 使用讨论ID:
"在MR #456的讨论abc123中回复'I将在下次提交中修复这个'"
创建新的讨论线程 开始对话:
"在MR #789中创建一个审查评论,询问'这里能否添加错误处理?'"
解决讨论 当问题得到解决时:
"解决MR #123中的讨论def456"
注意:get_merge_request_reviews 工具现在会在输出中显示讨论ID和注释ID,使得在回复或解决讨论时更容易引用特定讨论。
GitLab提供了两种检查测试结果的工具——使用摘要进行快速检查,使用完整报告进行详细调试:
使用 get_pipeline_test_summary 获取快速概览:
"显示MR #123的测试摘要"
"在MR #456中有多少测试通过了?"
您会获得:
使用 get_merge_request_test_report 进行详细调试:
"显示MR #123的测试报告"
"在合并请求#456中哪些测试失败了?"
您会获得:
两者如何工作:
/pipelines/:pipeline_id/test_report 或 /test_report_summary API)示例输出:
测试报告摘要:
总计:45个测试 | ✅ 42个通过 | ❌ 3个失败 | 通过率:93.3%
❌ 失败的测试:
test_login_with_invalid_password (0.3秒)
错误:AssertionError: 预期401,实际收到200
文件:tests/auth_test.py
为什么使用这个而不是作业日志?
需求:
您的CI必须使用 artifacts:reports:junit 在 .gitlab-ci.yml 中上传测试结果:
test:
script:
- pytest --junitxml=report.xml
artifacts:
reports:
junit: report.xml
流水线工具提供了一个两步流程来调试测试失败:
使用 get_merge_request_pipeline 查看所有作业及其状态:
"显示MR #456的流水线"
您会获得:
使用 get_job_log 和作业ID获取实际输出:
"获取作业12345的日志"
"显示作业67890的输出"
您会获得:
您:"显示MR #123的流水线"
AI:"流水线失败。有2个作业失败:
- test-unit (作业ID:12345)
- test-integration (作业ID:67890)"
您:"获取作业12345的日志"
AI:[显示完整的测试输出及错误详情]
您:"修复失败的测试"
AI:[分析日志并建议修复]
为什么需要两个工具?
get_commit_discussions 工具提供了对合并请求内单个提交的讨论和评论的全面洞察:
查看合并请求中的所有提交讨论:
"显示MR #123的提交讨论"
获取详细的提交对话历史:
"获取合并请求#456中的所有提交评论"
此工具特别适用于:
技术实现:
/projects/:project_id/merge_requests/:merge_request_iid/commits 获取所有提交,并正确分页/projects/:project_id/merge_requests/:merge_request_iid/discussions 获取所有合并请求讨论,并支持分页输出包括:
每个项目都有自己的 gitlab-mcp.env 文件,包含其自己的GitLab配置。确保将令牌保留在版本控制之外。
设置系统范围的环境变量,而不是每个项目:
export GITLAB_PROJECT_ID=12345
export GITLAB_ACCESS_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx
export GITLAB_URL=https://gitlab.com
https://gitlab.com/username/project(使用数字ID)认证错误:验证您的令牌具有 read_api 权限并且未过期。
项目未找到:双检查您的项目ID是否正确(它是一个数字,不是项目名称)。
连接问题:确保您的GitLab URL可访问且正确。
脚本未找到:确保MCP配置中的路径指向实际服务器位置,并且脚本是可执行的。
| 工具 | 描述 | 参数 |
|---|---|---|
list_merge_requests | 列出合并请求 | state, target_branch, limit |
get_merge_request_details | 获取MR详细信息 | merge_request_iid |
get_pipeline_test_summary | 获取测试摘要(快速概览) | merge_request_iid |
get_merge_request_test_report | 获取详细的测试失败报告 | merge_request_iid |
get_merge_request_pipeline | 获取包含所有作业的流水线 | merge_request_iid |
get_job_log | 获取特定作业的跟踪/输出 | job_id |
get_merge_request_reviews | 获取评论/讨论 | merge_request_iid |
get_commit_discussions | 获取提交上的讨论 | merge_request_iid |
get_branch_merge_requests | 查找分支的MR | branch_name |
reply_to_review_comment | 回复现有讨论 | merge_request_iid, discussion_id, body |
create_review_comment | 创建新的讨论线程 | merge_request_iid, body |
resolve_review_discussion | 解决/取消解决讨论 | merge_request_iid, discussion_id, resolved |
如果您有一个使用pip的现有安装,这里是迁移至uv的方法:
安装uv(参见先决条件部分)
移除旧的虚拟环境:
deactivate # 如果激活了虚拟环境
rm -rf .venv
使用uv创建新的虚拟环境:
uv venv
source .venv/bin/activate # 在Windows上:.venv\Scripts\activate
uv pip install -e .
对于开发,安装开发依赖项:
uv pip install -e ".[dev]"
就这样!您的项目现在使用uv进行更快更可靠的依赖管理。
注意:requirements.txt 和 dev-requirements.txt 文件保留用于向后兼容。然而,pyproject.toml 现在是依赖项的事实来源。如果添加新依赖项,请更新 pyproject.toml 并根据需要重新生成需求文件:
uv pip compile pyproject.toml -o requirements.txt
uv pip compile --extra dev pyproject.toml -o dev-requirements.txt
gitlab-mcp-server/
├── main.py # MCP服务器入口点
├── config.py # 配置管理
├── gitlab_api.py # GitLab API客户端
├── utils.py # 实用函数
├── logging_config.py # 日志配置
├── run-mcp.sh # 启动脚本
└── tools/ # 工具实现包
├── __init__.py # 包初始化
├── list_merge_requests.py
├── get_merge_request_details.py
├── get_merge_request_test_report.py
├── get_pipeline_test_summary.py
├── get_merge_request_pipeline.py
├── get_job_log.py
├── get_merge_request_reviews.py
├── get_commit_discussions.py
├── get_branch_merge_requests.py
└── reply_to_review_comment.py
tools/ 目录下创建新文件tools/__init__.py 中添加导入和导出main.py 中添加到 list_tools()main.py 中添加到 call_tool()uv pip install -e ".[dev]"
pre-commit install
这将自动检查和格式化您的代码:
# 如果尚未完成,请先安装依赖项
uv pip install -e ".[dev]"
# 格式化所有内容
black --line-length=120 .
isort --profile black --line-length=120 .
pre-commit run --all-files
python test_tools.py
gitlab-mcp.env 添加到您的 .gitignoreMIT 许可证 - 详见 LICENSE 文件。