用途
gitlab-ci-mcp 是一个针对 GitLab CI/CD 的 MCP(Model Context Protocol)服务器。它的目标是让 LLM 智能体(官方列出的示例包括 Claude Code、Cursor、OpenCode、DevX Agent 等)能够直接与 GitLab 的流水线、任务、计划、分支、标签、合并请求以及仓库文件进行交互。它支持任何 GitLab,既包括 gitlab.com SaaS,也包括自托管/本地部署实例。项目以企业网络为设计出发点,提供可配置的 NO_PROXY 处理、可选的 SSL 校验开关,以及通过环境变量实现按项目作用域。
主要能力
项目提供 23 个工具,覆盖日常 CI/CD 操作面:
- 流水线:gitlab_list_pipelines、gitlab_get_pipeline、gitlab_get_pipeline_jobs、gitlab_get_job_log、gitlab_trigger_pipeline、gitlab_retry_pipeline、gitlab_cancel_pipeline、gitlab_pipeline_health。
- 计划:gitlab_list_schedules、gitlab_create_schedule、gitlab_update_schedule、gitlab_delete_schedule。
- 分支与标签:gitlab_list_branches、gitlab_list_tags、gitlab_compare_branches。
- 合并请求:gitlab_list_merge_requests、gitlab_get_merge_request、gitlab_get_merge_request_changes、gitlab_create_merge_request、gitlab_merge_mr。
- 仓库与项目:gitlab_get_file、gitlab_list_repository_tree、gitlab_project_info。
其中 gitlab_pipeline_health 会返回一份覆盖 7/30 天的现成可读摘要,适合值班与分诊场景。
此外还包含以下设计特性:
- 工具注解:每个工具都带有 readOnlyHint / destructiveHint / idempotentHint / openWorldHint,便于 MCP 客户端对操作分类(例如仅对 gitlab_merge_mr、gitlab_delete_schedule 这类破坏性操作为请求确认)。
- 结构化输出:每个工具都声明了 TypedDict 返回类型,FastMCP 会自动生成 outputSchema,每个结果在预渲染 markdown 文本块之外还携带 structuredContent。支持结构化数据的客户端使用结构化数据,偏好紧凑文本的智能体则使用 markdown,无需 response_format 参数。
- 结构化错误:认证、404、403、429(限流)、5xx、缺失环境变量等错误会被转换为可操作的 ToolError 消息(例如 “GitLab authentication failed… verify GITLAB_TOKEN has api scope”),并以 isError=True 的结果返回。
- Pydantic 输入校验:每个参数都有类型化约束(范围、长度、字面量),自动暴露为 JSON Schema。
- 按调用指定项目作用域:每个工具都接受可选的 project_path 参数,覆盖 GITLAB_PROJECT_PATH,便于跨项目查询。
- 分页:列表工具返回分页块,含 page、total、has_more、next_page,并在 markdown 页脚给出下一页提示。
- MCP Context 集成:gitlab_pipeline_health 与 gitlab_get_job_log 为异步,通过 MCP Context 发出 info 日志 / report_progress 事件,客户端可显示进度条。
- MCP Resources:gitlab://project/info 与 gitlab://project/ci-config 为偏好 Resource 模型的客户端镜像常见查询。
- 生命周期管理:通过 asynccontextmanager 生命周期钩子,在服务器关闭时干净地关闭 python-gitlab HTTP 会话。
- 日志 grep:gitlab_get_job_log 接受 grep_pattern 与 grep_context(上下行数),可用正则过滤数兆字节级 CI 日志,避免把整份 trace 拉入智能体上下文。
使用方式
要求 Python 3.10+。所有配置通过环境变量完成。安装与运行方式包括:在 MCP 配置中指向 uvx --from gitlab-ci-mcp gitlab-ci-mcp 并带上相应环境变量;也可在 ~/.claude.json 或项目 .mcp.json 中配置。MCP 服务器的目录结构、安装路径与具体配置片段详见完整文档 docs/claude-code.md——包含前提条件、两种安装路径、多项目设置、位于企业代理之后的自托管 GitLab、故障排查与卸载。
以 stdio 传输直接运行服务器即可(等待 stdin 上的 MCP 消息):
uvx --from gitlab-ci-mcp gitlab-ci-mcp
每个工具都接受可选的 project_path 参数,用于按调用覆盖 GITLAB_PROJECT_PATH。
线程模型
FastMCP 会自动在工作线程中运行同步工具(anyio.to_thread.run_sync),因此不会阻塞 asyncio 事件循环——python-gitlab 是同步库,若自行把每个调用都包在 asyncio.to_thread 里会是多余仪式。需要 MCP Context(进度、info 日志)的工具以 async def 编写,并显式用 asyncio.to_thread 包装 python-gitlab 调用。
适用场景
- 让 LLM 智能体参与 CI/CD 排查与分诊,例如查询某个分支最近 7 天的 pipeline health。
- 通过智能体触发、重试、取消流水线,管理计划、分支、标签与合并请求。
- 跨项目查询:利用可选的 project_path 参数对不同项目执行操作。
- 企业内网环境:自托管 GitLab 位于公司代理之后时,可通过 GITLAB_NO_PROXY_DOMAINS 或显式设置空的 HTTP_PROXY 等方式处理代理问题。
- 在大型 CI 日志中按正则过滤:使用 grep_pattern 与 grep_context 避免拉取完整 trace。
限制与注意事项
- GitLab 对每用户有限流(REST API 通常为 2000 请求/小时,可由管理员配置,见实例的 /admin/application_settings/network)。
- 服务器按 project_path 缓存一个 python-gitlab HTTP 会话,对同一项目的重复调用会复用连接,不会每次重新认证。
- 列表工具默认 per_page=20,以把单次调用控制在少量 API 请求内。
- 如果遇到 429 Too Many Requests,错误处理器会返回可操作的消息,建议等待后以更大的 per_page 或更少的调用重试。
- 当笔记本使用本地 HTTP 代理(例如公司网络访问用的 http://127.0.0.1:3128)而 GitLab 在内网时,代理会拦截并中断内网请求;可设置 GITLAB_NO_PROXY_DOMAINS,让服务器在启动时把这些域名加入 NO_PROXY 并从自身进程清除 HTTP_PROXY / HTTPS_PROXY,或在 MCP env 段显式传入空的 HTTP_PROXY=""。
许可与依赖
项目采用 MIT 许可,详见 LICENSE。构建于 python-gitlab 与 MCP Python SDK 之上。其他未在资料中提供的信息(如具体价格、收费模式等)暂未提供。