GitLab MCP服务器

一个用于与GitLab API交互的MCP服务器,支持管理合并请求、评论和仓库比较等功能。

  • by ronaldoskibinski
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 ronaldoskibinski/gitlab-mcp

使用说明

收件人MCP服务器

Attus 项目的模型上下文协议 (MCP) 服务器集合。

项目结构

mcp/
├── src/
│   └── servers/
│       └── gitlab/          # Servidor MCP do GitLab
│           └── index.ts
├── dist/                    # Arquivos JavaScript compilados
├── package.json
├── tsconfig.json
├── build.sh                 # Script de build
└── README.md

安装

# Instalar dependências
npm install

# Build do projeto
npm run build

# Ou usar o script de build
chmod +x build.sh
./build.sh

GitLab MCP 服务器

用于与 GitLab API 交互的 MCP 服务器,允许您管理不同仓库之间的合并请求、评论和比较。

配置

服务器需要以下环境变量:

  • GITLAB_TOKEN (必填):GitLab个人访问令牌
  • GITLAB_URL (可选): GitLab 实例 URL (默认:https://gitlab.com )

创建 GitLab Token

  1. Acesse GitLab→ 设置→ 访问令牌
  2. 创建具有以下目的的令牌:
    • api 完全访问API
    • read_api API 阅读
    • write_repository - 写入仓库

使用

运行服务器

# Definir variáveis de ambiente
export GITLAB_TOKEN="seu-token-aqui"
export GITLAB_URL="https://gitlab.com"  # opcional

# Executar o servidor
npm run start:gitlab

Windsurf/Claude Desktop 设置

添加到 MCP 配置文件 (~/.config/windsurf/mcp.json 类似):

{
  "mcpServers": {
    "gitlab": {
      "command": "node",
      "args": ["/caminho/absoluto/para/mcp/dist/servers/gitlab/index.js"],
      "env": {
        "GITLAB_TOKEN": "seu-token-aqui",
        "GITLAB_URL": "https://gitlab.com"
      }
    }
  }
}

可用工具

1. update_merge_request_title

更新合并请求的标题。

参数 :

  • project_id (string):GitLab项目ID或路径(例如:“123”或“group/project”)
  • merge_request_iid (number):合并请求的 IID(在 GitLab UI 中显示的号码)
  • title (字符串):新标题

例如:

{
  "project_id": "grupo/projeto",
  "merge_request_iid": 42,
  "title": "feat: Nova funcionalidade implementada"
}

2. update_merge_request_description

更新合并请求的描述。

参数 :

  • project_id (string): 项目 ID 或路径
  • merge_request_iid (编号):IID执行合并请求
  • description (string): 新描述(Markdown 支持)

例如:

{
  "project_id": "grupo/projeto",
  "merge_request_iid": 42,
  "description": "## Mudanças\n\n- Implementada feature X\n- Corrigido bug Y"
}

3. get_merge_request_diffs

获取合并请求与特定分支的差异。

参数 :

  • project_id (string): 项目 ID 或路径
  • merge_request_iid (编号):IID执行合并请求
  • target_branch (string, optional): 用于比较的分支(默认:'master')

例如:

{
  "project_id": "grupo/projeto",
  "merge_request_iid": 42,
  "target_branch": "main"
}

返回 :

  • 合并请求信息
  • 列出每个文件的更改
  • 统计( 添加、 删除、 文件更改)

4. get_merge_request_info

获取有关合并请求的详细信息。

参数 :

  • project_id (string): 项目 ID 或路径
  • merge_request_iid (编号):IID执行合并请求

例如:

{
  "project_id": "grupo/projeto",
  "merge_request_iid": 42
}

返回 :

  • 标题、 描述、 状态
  • 分支(源和目标)
  • 管理员、指定人员、审阅者
  • 标签,创建/更新/合并日期
  • URL网页、冲突状态、草稿状态

5. add_merge_request_comment

向合并请求添加通用注释。

参数 :

  • project_id (string): 项目 ID 或路径
  • merge_request_iid (编号):IID执行合并请求
  • comment (string): 注释文本(Markdown 支持)

例如:

{
  "project_id": "grupo/projeto",
  "merge_request_iid": 42,
  "comment": "LGTM! :+1:"
}

6. add_merge_request_diff_comment

在 diff 中对文件的特定行添加注释 。

参数 :

  • project_id (string): 项目 ID 或路径
  • merge_request_iid (编号):IID执行合并请求
  • comment (string): 注释文本
  • file_path (string): 仓库中的文件路径
  • line_number (number): 行号
  • line_type (string, optional): 行类型 - “new” 或 “old” (默认: “new”)

例如:

{
  "project_id": "grupo/projeto",
  "merge_request_iid": 42,
  "comment": "Considere usar const ao invés de let aqui",
  "file_path": "src/services/UserService.ts",
  "line_number": 25,
  "line_type": "new"
}

7. create_merge_request

创建新的合并请求。

参数 :

  • project_id (string): 项目 ID 或路径
  • source_branch (string): 源分支的名称
  • target_branch (string) 目标分支的名称
  • title (字符串):合并请求标题
  • description (string, optional): 描述
  • remove_source_branch (boolean,可选):合并后删除源分支(默认:false)

例如:

{
  "project_id": "grupo/projeto",
  "source_branch": "feature/nova-funcionalidade",
  "target_branch": "main",
  "title": "feat: Implementa nova funcionalidade",
  "description": "## Descrição\n\nImplementação da feature X",
  "remove_source_branch": true
}

8. compare_merge_requests

比较两个不同仓库的合并请求。将代码从微服务抽象到特定库时非常有用。

参数 :

  • mr1_project_id (string): 第一个项目的 ID
  • mr1_iid (编号):IID执行primeiro合并请求
  • mr2_project_id (string):ID do segundo projeto
  • mr2_iid (编号):IID执行segundo合并请求

例如:

{
  "mr1_project_id": "grupo/microservico-a",
  "mr1_iid": 42,
  "mr2_project_id": "grupo/lib-comum",
  "mr2_iid": 15
}

返回 :

  • 两个合并请求的完整信息
  • 每个变化(diff)
  • 已更改的文件统计

使用案例: 将代码从微服务移动到共享库时,您可以将从微服务中删除代码的 MR 与添加到库的 MR 进行比较,以确保所有功能都已正确迁移。

开发

添加新服务器的结构

要添加新的 MCP 服务器:

  1. 在创建新目录 src/servers/:
mkdir -p src/servers/novo-servidor
  1. 创建文件 index.ts 按照标准:
#!/usr/bin/env node

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
  CallToolRequestSchema,
  ListToolsRequestSchema,
  Tool,
} from "@modelcontextprotocol/sdk/types.js";

// Defina suas ferramentas
const tools: Tool[] = [
  // ... suas ferramentas
];

// Configure o servidor
const server = new Server(
  {
    name: "nome-do-servidor",
    version: "1.0.0",
  },
  {
    capabilities: {
      tools: {},
    },
  }
);

// Implemente os handlers
server.setRequestHandler(ListToolsRequestSchema, async () => {
  return { tools };
});

server.setRequestHandler(CallToolRequestSchema, async (request) => {
  // Implemente a lógica das ferramentas
});

// Inicie o servidor
async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
  console.error("Servidor MCP rodando");
}

main().catch((error) => {
  console.error("Erro fatal:", error);
  process.exit(1);
});
  1. 添加执行脚本到 package.json:
{
  "scripts": {
    "start:novo-servidor": "node dist/servers/novo-servidor/index.js"
  }
}
  1. 重建工程 :
npm run build

可用脚本

  • npm run build -舒适的JavaScript字体
  • npm run build:watch 以 watch 模式编译
  • npm run clean - 删除编译的文件
  • npm run rebuild - 清理和收集
  • npm run start:gitlab 运行 GitLab 服务器

使用的技术

  • TypeScript 主要语言
  • @模型上下文协议/sdk -SDK做模型上下文协议
  • @gitbeaker/休息 GitLab API REST 客户端
  • Node.js -运行时间

故障排除

错误:“GITLAB_TOKEN环境变量是必需的”

确保环境变量 GITLAB_TOKEN 在服务器运行前设置 。

运行 build.sh 时出错

chmod +x build.sh

添加 diff 注释出错

检查 :

  • 文件存在于合并请求中
  • 行号有效
  • 合并请求尚未合并

服务器未出现在 Windsurf/Claude

  1. 检查配置文件中的路径是否正确( 绝对路径)
  2. 确保构建已运行(npm run build)
  3. 重新启动或风帆冲浪/克劳德桌面
  4. 检查服务器日志

许可证

麻省理工学院

贡献

要向 GitLab 服务器添加新功能或创建新的 MCP 服务器,请遵循既定结构并保持与现有标准的一致性。