使用说明
收件人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
- Acesse GitLab→ 设置→ 访问令牌
- 创建具有以下目的的令牌:
api完全访问APIread_apiAPI 阅读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): 第一个项目的 IDmr1_iid(编号):IID执行primeiro合并请求mr2_project_id(string):ID do segundo projetomr2_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 服务器:
- 在创建新目录
src/servers/:
mkdir -p src/servers/novo-servidor
- 创建文件
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);
});
- 添加执行脚本到
package.json:
{
"scripts": {
"start:novo-servidor": "node dist/servers/novo-servidor/index.js"
}
}
- 重建工程 :
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
- 检查配置文件中的路径是否正确( 绝对路径)
- 确保构建已运行(
npm run build) - 重新启动或风帆冲浪/克劳德桌面
- 检查服务器日志
许可证
麻省理工学院
贡献
要向 GitLab 服务器添加新功能或创建新的 MCP 服务器,请遵循既定结构并保持与现有标准的一致性。
