这是一个用于集成 GitLab 和 Jira 的模型上下文协议(MCP)服务器。该服务器允许像 gemini-cli 这样的 AI 代理与你的 GitLab 和 Jira 实例进行交互。
本 MCP 服务器可助力 AI 代理与 GitLab 和 Jira 实例交互。以下将为你介绍其特性、安装、使用及开发等相关内容。
npm i -g mcp-gitlab-jira
# GitLab
export GITLAB_URL="https://your-gitlab-instance.com"
export GITLAB_ACCESS_TOKEN="your-personal-access-token"
# Jira
export ATLASSIAN_SITE_NAME="your-atlassian-site-name"
export ATLASSIAN_USER_EMAIL="your-email@example.com"
export ATLASSIAN_API_TOKEN="your-jira-api-token"
# 测试服务器是否能正常启动
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}' | mcp-gitlab-jira
服务器应启动并在 stderr 中记录 “GitLab/Jira MCP server started”。
创建或更新你的 MCP 配置文件(通常为 ~/.mcp/config.json 或类似文件):
{
"mcpServers": {
"gitlab-jira-mcp": {
"command": "mcp-gitlab-jira",
"env": {
"GITLAB_URL": "https://your-gitlab-instance.com",
"GITLAB_ACCESS_TOKEN": "your-personal-access-token",
"ATLASSIAN_SITE_NAME": "your-atlassian-site-name",
"ATLASSIAN_USER_EMAIL": "your-email@example.com",
"ATLASSIAN_API_TOKEN": "your-jira-api-token"
}
}
}
}
你也可以使用 Docker Hub 上的预构建镜像,在 Docker 容器中运行此 MCP 服务器。
Docker 镜像会为每个版本自动构建并发布到 Docker Hub:
hainanzhao/mcp-gitlab-jira:latesthainanzhao/mcp-gitlab-jira:v0.1.2、hainanzhao/mcp-gitlab-jira:v0.1.1 等。这些镜像支持多种架构:linux/amd64 和 linux/arm64(兼容 Apple Silicon)。
docker run -d --name mcp-gitlab-jira-container \
-e GITLAB_URL="https://your-gitlab-instance.com" \
-e GITLAB_ACCESS_TOKEN="your-personal-access-token" \
-e ATLASSIAN_SITE_NAME="your-atlassian-site-name" \
-e ATLASSIAN_USER_EMAIL="your-email@example.com" \
-e ATLASSIAN_API_TOKEN="your-jira-api-token" \
hainanzhao/mcp-gitlab-jira:latest
docker run --rm -i \
-e GITLAB_URL="https://your-gitlab-instance.com" \
-e GITLAB_ACCESS_TOKEN="your-personal-access-token" \
-e ATLASSIAN_SITE_NAME="your-atlassian-site-name" \
-e ATLASSIAN_USER_EMAIL="your-email@example.com" \
-e ATLASSIAN_API_TOKEN="your-jira-api-token" \
hainanzhao/mcp-gitlab-jira:latest
你可以通过以下两种方式将 Docker 容器与 MCP 客户端配合使用:
首先,按上述方法启动容器,然后更新你的 MCP 配置文件。由于必要的环境变量已通过 docker run 命令的 -e 标志直接传递给容器,因此 env 块为空。
{
"mcpServers": {
"gitlab-jira-mcp": {
"command": "docker",
"args": ["exec", "-i", "mcp-gitlab-jira-container", "npm", "start"],
"env": {}
}
}
}
此方法会为每个 MCP 会话运行一个新容器:
{
"mcpServers": {
"gitlab-jira-mcp": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "GITLAB_URL=https://your-gitlab-instance.com",
"-e", "GITLAB_ACCESS_TOKEN=your-personal-access-token",
"-e", "ATLASSIAN_SITE_NAME=your-atlassian-site-name",
"-e", "ATLASSIAN_USER_EMAIL=your-email@example.com",
"-e", "ATLASSIAN_API_TOKEN=your-jira-api-token",
"hainanzhao/mcp-gitlab-jira:latest"
],
"env": {}
}
}
}
以下是使用 MCP 服务器与 GitLab 和 Jira 交互的示例:
# 测试服务器启动
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}' | mcp-gitlab-jira
# 拉取并运行 Docker 容器
docker run -d --name mcp-gitlab-jira-container \
-e GITLAB_URL="https://your-gitlab-instance.com" \
-e GITLAB_ACCESS_TOKEN="your-personal-access-token" \
-e ATLASSIAN_SITE_NAME="your-atlassian-site-name" \
-e ATLASSIAN_USER_EMAIL="your-email@example.com" \
-e ATLASSIAN_API_TOKEN="your-jira-api-token" \
hainanzhao/mcp-gitlab-jira:latest
gitlab_get_merge_request_details:获取 GitLab 合并请求的详细信息,包括文件差异比较。gitlab_get_file_content:获取 GitLab 项目中指定 SHA 版本下特定文件的内容。gitlab_add_comment_to_merge_request:向 GitLab 合并请求添加评论。可以是普通评论、对现有讨论的回复或特定行的内联评论。gitlab_list_merge_requests:列出给定 GitLab 项目的合并请求。gitlab_assign_reviewers_to_merge_request:为 GitLab 合并请求分配审核人员。gitlab_list_project_members:列出给定 GitLab 项目的所有成员(贡献者)。gitlab_list_project_members_by_project_name:按项目名称列出给定 GitLab 项目的所有成员(贡献者)。gitlab_list_projects_by_name:使用模糊、不区分大小写的匹配方式按名称筛选 GitLab 项目。gitlab_list_all_projects:列出所有可访问的 GitLab 项目。gitlab_list_all_releases:获取给定 GitLab 项目的版本发布信息。gitlab_list_releases_since_version:筛选自特定版本以来给定 GitLab 项目的版本发布。gitlab_get_user_id_by_username:根据用户名获取 GitLab 用户 ID。gitlab_get_user_activities:根据用户名获取给定 GitLab 用户的活动信息,可选择按日期筛选。jira_get_jira_ticket_details:获取 Jira 工单的详细信息。jira_get_jira_ticket_comments:获取 Jira 工单的评论。jira_add_comment_to_ticket:向 Jira 工单添加评论。jira_search_tickets_by_jql:使用 JQL(Jira 查询语言)字符串搜索 Jira 工单。jira_create_ticket:使用给定字段创建新的 Jira 工单。jira_get_available_transitions:获取 Jira 工单的可用转换操作。jira_update_ticket:更新 Jira 工单的摘要、描述和标签。jira_update_custom_fields:更新 Jira 工单的自定义字段。jira_transition_ticket:将 Jira 工单转换到新状态。npm install 和 npm run build。GITLAB_ACCESS_TOKEN、ATLASSIAN_USER_EMAIL 和 ATLASSIAN_API_TOKEN 是否具有必要的权限。GITLAB_URL 和 ATLASSIAN_SITE_NAME 正确且可访问。若要查看详细日志,可直接运行服务器:
export GITLAB_URL="your-url"
export GITLAB_ACCESS_TOKEN="your-token"
export ATLASSIAN_SITE_NAME="your-atlassian-site-name"
export ATLASSIAN_USER_EMAIL="your-email@example.com"
export ATLASSIAN_API_TOKEN="your-jira-api-token"
mcp-gitlab-jira
若要进行开发,请克隆仓库并安装依赖:
npm install
npm run build
在推送之前,可在本地测试 Docker 构建:
# 在本地构建并测试 Docker 镜像
./scripts/build-docker-local.sh
此脚本将构建 Docker 镜像并运行基本测试,以确保其正常工作。
维护人员注意:有关设置自动化 Docker Hub 发布的信息,请参阅 Docker 设置指南。
src/index.ts:主 MCP 服务器实现src/gitlab.service.ts:GitLab API 客户端src/gitlab.ts:GitLab 类型定义src/jira.service.ts:Jira API 客户端src/jira.ts:Jira 类型定义dist/:编译后的 JavaScript 输出GitLabService 或 JiraService 类添加新方法。index.ts 的 allTools 数组中定义新工具。index.ts 的工具处理程序中添加相应的 case 语句。npm run build 重新构建项目。本项目使用 Node.js 实现 MCP 服务器,通过 src/gitlab.service.ts 和 src/jira.service.ts 分别与 GitLab 和 Jira 的 API 进行交互。项目使用 TypeScript 编写,在 src 目录下定义类型和服务,编译后的 JavaScript 文件输出到 dist 目录。通过 npm run build 命令将 TypeScript 代码编译为 JavaScript 代码。
本项目采用 ISC 许可证。