使用说明
GitLab MCP 服务器
这个仓库包含了一个模型上下文协议(MCP)服务器的实现,该服务器暴露了(或提供了)协议的一个子集 GitLab REST API 作为可调用的工具。它使用官方的MCP SDK用TypeScript实现,并通过标准输入/输出运行,因此易于与任何支持MCP的主机集成(例如, 《Codex》(拉丁语,意为“法典”或“典籍”))。
特点/特性
该服务器封装了几个常见的GitLab操作:
listProjects— 列出认证用户可见的项目,支持可选的搜索和过滤功能。getProject— 通过项目ID或命名空间路径检索单个项目的详细信息。createProject— 创建一个新项目;支持可选功能namespaceId,description并且visibility。listGroupProjects— 列出属于特定组的项目。listIssues— 列出特定项目的问题。createIssue— 在项目中创建一个问题,包含标题、可选描述、标签和负责人。listBranches— 列出项目中的分支及其提交元数据。createBranch— 从现有分支或提交SHA创建一个新分支。
问题管理
新版本中的新增内容 0.2.0 此服务器提供了用于更全面管理问题的工具:
getIssue— 通过提供项目ID和问题的内部ID(IID),检索单个问题的详细信息。updateIssue— 更新现有问题。您可以修改标题、描述、标签,分配用户,更改截止日期或关闭/重新打开问题,使用[stateEvent参数【925839063033099†L1419-L1455】。deleteIssue— 删除一个问题(需要项目所有者或管理员权限)【925839063033099†L1595-L1616】。listIssueNotes— 列出与某个问题相关的评论(备注)。支持排序和过滤选项【817593036777657†L88-L106】。createIssueNote— 在问题【817593036777657†L184-L209】中添加一条新评论。updateIssueNote— 修改关于某一问题的现有备注【817593036777657†L210-L225】。deleteIssueNote— 从问题中删除一条备注【817593036777657†L232-L248】。
每个工具都使用其(特定的)方法来验证其输入 zod 在进行API调用之前。结果以JSON字符串的形式返回,以便您的主机轻松使用。
配置
复制 .env.example 到;对于;向;给;在……方面 .env 并提供您自己的设置:
# Base URL for the GitLab API. Defaults to the public GitLab instance.
GITLAB_BASE_URL=https://gitlab.com/api/v4
# Personal access token with appropriate scopes (for example, `api`).
GITLAB_TOKEN=your_private_token
服务器在启动时读取这些环境变量。如果您省略 GITLAB_TOKEN调用私有资源将会失败。
发展
安装依赖项并以开发模式运行:
npm install
npm run dev
这将以监视模式启动MCP服务器,使用 tsx它从标准输入读取数据,并将数据写入标准输出。要为生产环境构建项目,请运行:
npm run build
然后,您可以使用以下命令启动编译后的服务器:
node dist/server.js
Docker
在容器中构建并运行服务器:
# 1) Build the image
docker build -t gitlab-mcp .
# 2) Run the container with your environment variables
docker run -it --rm \
-e GITLAB_BASE_URL=https://gitlab.com/api/v4 \
-e GITLAB_TOKEN=<your_token> \
gitlab-mcp
或者,使用 docker-compose:
cp .env.example .env
# edit .env with your values
docker compose up --build
在VS Code中与Codex集成
构建完这个MCP服务器后,您可以将其集成到您的Codex配置中。假设您已经在机器的某个位置解压了zip存档并安装了 Codex VS Code 扩展:
- 确定绝对路径到
dist/server.js在这个项目中。 - 打开你的Codex设置(
~/.codex/config.toml或者通过Codex设置图形用户界面进行。 - 在(某个位置/列表中)添加一个服务器定义
[mcp_servers]表格:
[mcp_servers.gitlab]
command = "/usr/bin/node"
args = ["/absolute/path/to/gitlab-mcp/dist/server.js"]
[mcp_servers.gitlab.env]
GITLAB_BASE_URL = "https://gitlab.com/api/v4"
GITLAB_TOKEN = "<your_token>"
# optional: enable RMCP client implementation
experimental_use_rmcp_client = true
- 重新加载索引(或“知识库”)。你应该能看到
listProjects,getProject,createProject等,这些都可以作为您聊天中的工具使用。
示例工具调用
-
列出你的项目:
使用来自MCP主机的工具:
listProjects {}或者添加一个搜索词:listProjects { "search": "my-repo" }。 -
创建一个项目:
createProject { "name": "my-cool-project", "namespaceId": "12345", // optional, numeric ID or path "description": "Project created via MCP", "visibility": "private" } -
列出项目的问题:
listIssues { "projectId": "my-group/my-project" } -
创建一个问题:
createIssue { "projectId": "my-group/my-project", "title": "Bug: cannot login", "description": "Steps to reproduce...", "labels": "bug,urgent" } -
创建一个分支:
createBranch { "projectId": "my-group/my-project", "branch": "feature/new-api", "ref": "main" } -
获取单期杂志:
getIssue { "projectId": "my-group/my-project", "issueIid": 42 } -
更新一个问题(例如,添加标签并关闭它):
updateIssue { "projectId": "my-group/my-project", "issueIid": 42, "addLabels": "frontend,urgent", "stateEvent": "close" } -
删除一个问题:
deleteIssue { "projectId": "my-group/my-project", "issueIid": 42 } -
对问题添加评论:
createIssueNote { "projectId": "my-group/my-project", "issueIid": 42, "body": "We are investigating this bug." } -
列出关于某个问题的评论:
listIssueNotes { "projectId": "my-group/my-project", "issueIid": 42 } -
更新一条评论:
updateIssueNote { "projectId": "my-group/my-project", "issueIid": 42, "noteId": 123, "body": "Updated comment text" } -
删除一条评论:
deleteIssueNote { "projectId": "my-group/my-project", "issueIid": 42, "noteId": 123 }
请随意扩展 src/gitlab.ts 并且 src/server.ts 包含合并请求、流水线或用户等额外端点。请参阅官方GitLab API文档【333395904541159†L254-L306】以获取指导,并相应地调整输入模式。