关于 JIRA MCP Server 🚀
JIRA MCP Server 是一个用 Go 编写的 MCP 服务,可通过 JIRA Cloud REST API 操作 JIRA 项目,面向需要在 MCP 客户端中处理问题的团队。它支持创建、搜索和读取问题,以及按 Epic 获取问题,并可通过环境变量或配置文件设置。
主要功能
- 01创建 JIRA 问题
- 02使用 JQL 搜索问题
- 03读取问题详情
- 04获取 Epic 下的问题
- 05支持环境变量与配置文件
适用场景
- 01从 MCP 客户端创建 JIRA 问题
- 02按 JQL 查询项目问题
- 03查看指定问题或 Epic 的关联问题
MCP 相关
该服务将 JIRA 操作作为 MCP 接口提供给客户端,包括创建问题、JQL 搜索、读取问题详情和获取 Epic 下的问题。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
JIRA MCP 服务 🚀
这是一个灵活的 Go 服务,实现了 Model Context Protocol(MCP),可与 JIRA Cloud REST API 交互,让大模型/工具与您的 JIRA 项目无缝集成。
这是什么?🤔
该项目在使用 Model Context Protocol 的系统(例如某些 AI 助手或开发工具)与强大的 JIRA Cloud API 之间搭建桥梁。它允许您通过标准化的 MCP 接口,以编程方式执行常见的 JIRA 操作(创建问题、搜索、获取详情),无需直接处理复杂的 JIRA API 调用。
✨ 功能
- **MCP 接口:**通过标准 MCP 端点提供 JIRA 操作。
- **JIRA Cloud 集成:**创建问题、使用 JQL 搜索、获取问题详情,以及获取 Epic 下的问题。
- **灵活配置:**使用 Viper 通过环境变量、配置文件或默认值进行配置。
- **Docker 支持:**可通过 Docker 和 Docker Compose 进行容器化部署。
- **全面测试:**包含全面的单元测试和集成测试。
- **结构化日志:**使用
slog输出清晰的结构化日志。 - **依赖注入:**采用整洁架构原则,并使用
wire进行依赖注入。
前置条件
- Go 1.20+(用于本地构建/运行)
- Docker 和 Docker Compose(可选,用于容器化部署)
- JIRA Cloud 实例
- 与用户邮箱关联的 JIRA API Token
🚀 开始使用
-
克隆仓库:
git clone https://github.com/karolswdev/jira-mcp-server.git # TODO: Replace with actual URL cd jira-mcp-server # e.g., cd jira-mcp -
进入服务目录:
cd jira-mcp-server**➡️ 重要:**后续大多数命令(
make ...、go run ...、docker ...)都应在jira-mcp-server/目录内运行。 -
**配置服务:**设置所需的环境变量或创建
config.yaml。请参阅下方的配置部分。 -
**运行服务:**请参阅下方的运行服务部分。
⚙️ 配置
配置使用 Viper 管理,并按以下优先级顺序从相应来源加载:
- 环境变量: 添加
JIRA_MCP_前缀(例如,JIRA_MCP_JIRA_URL)。优先级最高。 - 配置文件: 位于
jira-mcp-server/目录中的config.yaml(或.json、.toml)。有关结构和所有选项,请参阅config.yaml.example。 - 默认值: 应用程序代码中定义的默认值。
必需配置:
必须通过环境变量或配置文件提供以下值:
JIRA_MCP_JIRA_URL:JIRA Cloud 实例的基础 URL(例如,https://your-domain.atlassian.net)。JIRA_MCP_JIRA_USER_EMAIL:与 API 令牌关联的 JIRA 用户电子邮件地址。JIRA_MCP_JIRA_API_TOKEN:JIRA API 令牌。请像密码一样妥善保管!
可选配置:
JIRA_MCP_PORT:服务监听的端口(默认值:8080)。JIRA_MCP_LOG_LEVEL:日志级别(debug、info、warn、error)(默认值:info)。JIRA_MCP_EPIC_LINK_FIELD_ID:JIRA 实例中“Epic Link”的自定义字段 ID(例如,customfield_10014)。要使/jira_epic/{epicKey}/issues端点正常工作,必须配置此项。可通过 JIRA API 或管理设置查找此 ID。
示例(环境变量):
export JIRA_MCP_JIRA_URL="https://your-domain.atlassian.net"
export JIRA_MCP_JIRA_USER_EMAIL="[email protected]"
export JIRA_MCP_JIRA_API_TOKEN="your-api-token-secret"
export JIRA_MCP_PORT="9000" # Optional
export JIRA_MCP_EPIC_LINK_FIELD_ID="customfield_10014" # Optional but needed for Epic endpoint
▶️ 运行服务
请确保当前位于 jira-mcp-server/ 目录中,并已配置必需设置。
选项 1:直接运行(使用 Go)
# Ensure required JIRA_MCP_... environment variables are set
make run
# Or: go run ./cmd/main.go
服务将开始在配置的端口上监听(默认端口为 8080)。
选项 2:使用 Docker 运行
- 构建 Docker 镜像:
make docker-build - 创建
.env文件: 在jira-mcp-server/目录内创建名为.env的文件,其中包含JIRA_MCP_环境变量(每行一个,例如,JIRA_MCP_JIRA_URL=...)。# .env 文件内容示例 JIRA_MCP_JIRA_URL=https://your-domain.atlassian.net [email protected] JIRA_MCP_JIRA_API_TOKEN=your-api-token-secret JIRA_MCP_PORT=8080 # 可选;如有更改,请确保与 docker-compose.yml 中的映射一致 JIRA_MCP_EPIC_LINK_FIELD_ID=customfield_10014 # 可选 - 使用 Docker Compose 运行:
要停止容器:make docker-run # 此命令会使用 docker-compose up -ddocker-compose down
🔌 API 端点
服务提供以下主要端点:
POST /create_jira_issue:创建新的 JIRA 问题。POST /search_jira_issues:使用 JQL 搜索 JIRA 问题。GET /jira_issue/{issueKey}:获取指定 JIRA 问题的详细信息。GET /jira_epic/{epicKey}/issues:获取属于指定 Epic 的所有问题(需要配置JIRA_MCP_EPIC_LINK_FIELD_ID)。
请求与响应示例
有关各端点的详细请求和响应示例,请参阅:
✅ 测试
项目包含单元测试和集成测试。请在 jira-mcp-server/ 目录中运行以下命令:
- 运行单元测试: 单独测试各个组件(模拟 JIRA API)。
make test - 运行集成测试: 针对模拟的 JIRA 服务测试 HTTP API 层。
make test-integration - 查看单元测试覆盖率: 生成
coverage.html并在浏览器中打开。make coverage - 查看集成测试覆盖率: 生成
coverage-integration.html并在浏览器中打开。make coverage-integration
🏗️ 架构
此服务遵循整洁架构原则,采用依赖注入(wire)、结构化日志(slog)以及分层职责分离(处理程序、JIRA 客户端、核心逻辑)。
如需了解更详细的说明,请参阅 架构文档。
🤝 贡献
欢迎并非常感谢您参与贡献!无论是报告错误、提出功能建议、改进文档,还是提交拉取请求,您的帮助都能让此项目变得更好。
请阅读我们的 贡献指南,了解如何开始。
此外,请注意,此项目遵循 贡献者行为准则 发布。参与此项目即表示您同意遵守其中的条款。
📜 许可证
此项目采用 MIT 许可证。详情请参阅 LICENSE 文件。
⚠️ 安全提示
切勿将 JIRA API 令牌或其他敏感凭据直接提交到版本控制中的代码或配置文件。 请使用环境变量或安全的密钥管理系统,尤其是在生产环境部署时。请确保将 .env 文件(如用于 Docker)添加到 .gitignore 中。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。