Jira集成服务器

一个提供Jira集成的模型上下文协议(MCP)服务器,允许AI助手与Jira问题进行交互,包括搜索、创建、更新和管理Jira工作流。

  • by kenphused-About-AI
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 kenphused-About-AI/jira-mcp-server

使用说明

Jira MCP服务器(Python)

提供Jira集成的模型上下文协议(MCP)服务器。该服务器允许AI助手与Jira问题交互,搜索、创建、更新和管理Jira工作流。

特性

  • 搜索问题:使用JQL(Jira查询语言)搜索Jira问题
  • 列出问题:列出特定Jira项目的问题
  • 获取问题详细信息:检索有关特定问题的详细信息
  • 获取评论:获取某个问题的所有评论
  • 获取过渡:查看问题的可用状态转换
  • 列出项目:获取所有可访问的Jira项目
  • 创建问题:创建新的Jira问题
  • 添加注释:对现有问题添加评论
  • 更新问题:更新问题字段(摘要、描述等)
  • 过渡问题:通过工作流状态移动问题

先决条件

  • Python 3.10或更高版本
  • 紫外线 包管理器
  • 具有API访问权限的Jira帐户
  • Jira API令牌(根据您的Jira帐户设置生成)

安装

安装uv(如果尚未安装)

# On macOS and Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# On Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

安装服务器

  1. 克隆或下载此存储库

  2. 导航到项目目录:

    cd jira-mcp-server
    
  3. 使用uv安装依赖项:

    uv sync
    
  4. 使用测试工具进行开发:

    uv sync --dev
    

配置

环境变量

您需要设置以下环境变量:

  • JIRA_URL:您的Jira实例URL(例如。, https://yourcompany.atlassian.net)
  • JIRA_USERNAME:您的Jira电子邮件地址
  • JIRA_API_TOKEN:您的Jira API代币

获取Jira API代币

  1. 登录您的Jira帐户
  2. 转到帐户设置→ 安全→ API令牌
  3. 点击“创建API令牌”
  4. 为其命名并复制生成的令牌

在Bob IDE中设置

将服务器添加到Bob IDE MCP设置文件中(~/.config/Bob-IDE/User/globalStorage/ibm.bob-code/settings/mcp_settings.json):

{
  "mcpServers": {
    "jira-mcp-server": {
      "command": "uvx",
      "args": ["--from", "/path/to/jira-mcp-server", "jira-mcp-server"],
      "env": {
        "JIRA_URL": "https://yourcompany.atlassian.net",
        "JIRA_USERNAME": "your.email@company.com",
        "JIRA_API_TOKEN": "your-api-token-here"
      }
    }
  }
}

在Claude Desktop中设置

添加到您的Claude Desktop配置文件(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):

{
  "mcpServers": {
    "jira-mcp-server": {
      "command": "uvx",
      "args": ["--from", "/path/to/jira-mcp-server", "jira-mcp-server"],
      "env": {
        "JIRA_URL": "https://yourcompany.atlassian.net",
        "JIRA_USERNAME": "your.email@company.com",
        "JIRA_API_TOKEN": "your-api-token-here"
      }
    }
  }
}

运行服务器

使用uvx(推荐)

# Set environment variables
export JIRA_URL="https://yourcompany.atlassian.net"
export JIRA_USERNAME="your.email@company.com"
export JIRA_API_TOKEN="your-api-token-here"

# Run the server
uvx --from . jira-mcp-server

使用紫外线跑步

uv run jira-mcp-server

使用示例

配置后,您可以使用自然语言与Jira交互:

搜索问题

"Find all open issues assigned to me"
"Search for bugs in project DSP with high priority"

获取问题详细信息

"Show me details for issue DSP-21630"
"What's the status of SUPPORT-660?"

创建问题

"Create a new bug in project DSP with title 'Login page not loading'"

更新问题

"Update DSP-21630 summary to 'New feature implementation'"
"Add a comment to SUPPORT-660 saying 'Working on this now'"

可用工具

搜索_吉拉

使用JQL搜索Jira问题。

参数:

  • jql (必填):JQL查询字符串
  • maxResults (可选):返回的最大结果数(默认值:50)
  • startAt (可选):分页的起始索引(默认值:0)

list_jira_issues

列出特定项目的问题。

参数:

  • projectKey (必填):项目密钥(例如“DSP”、“PROJ”)
  • maxResults (可选):返回的最大结果数(默认值:50)

get_jira_issue

获取有关特定问题的详细信息。

参数:

  • issueKey (必填):发布密钥(例如“DSP-9050”)

get_jira_comments

获取特定问题的所有评论。

参数:

  • issueKey (必填):问题密钥

get_gira_transitions

获取问题的可用状态转换。

参数:

  • issueKey (必填):问题密钥

get_jira_项目

列出所有可访问的Jira项目。

参数: 无

create_jira_issue

创建一个新的Jira问题。

参数:

  • projectKey (必填):项目密钥
  • summary (必填):问题摘要/标题
  • issueType (必填):问题类型(例如,“任务”、“Bug”、“故事”)
  • description (可选):问题描述

add_gira_注释

为问题添加评论。

参数:

  • issueKey (必填):问题密钥
  • comment (必填):评论文本

update_jira_issue

更新现有问题的字段。

参数:

  • issueKey (必填):问题密钥
  • summary (可选):新摘要/标题
  • description (可选):新描述

过渡期_伊拉克问题

将问题转换为新状态。

参数:

  • issueKey (必填):问题密钥
  • transitionId (必填):转换ID(从get_jira_transitions获取)

发展

项目结构

jira-mcp-server/
├── src/
│   └── jira_mcp_server/
│       ├── __init__.py          # Server initialization
│       ├── __main__.py          # CLI entry point
│       ├── config.py           # Configuration loading
│       ├── http_client.py      # Async HTTP client
│       ├── jira_api.py         # Jira API wrapper
│       ├── server.py           # FastMCP server
│       ├── tools.py            # Tool handlers
│       └── sanitization.py     # Input validation
├── tests/
│   └── test_jira_mcp_server.py  # Unit tests
├── pyproject.toml           # Project config
└── README.md               # Documentation

以开发模式安装

uv sync --dev

运行测试

# Run all tests
uv run pytest

# Run with coverage report
uv run pytest --cov

# Run specific test file
uv run pytest tests/test_jira_curl_server.py

# Run with verbose output
uv run pytest -v

代码质量工具

# Type checking with mypy
uv run mypy src/

# Linting with ruff
uv run ruff check src/

# Format code with ruff
uv run ruff format src/

故障排除

身份验证错误

  • 验证您的 JIRA_URL, JIRA_USERNAME,以及 JIRA_API_TOKEN 是正确的
  • 确保您的API令牌尚未过期
  • 检查您的Jira帐户是否具有适当的权限

连接问题

  • 验证您的Jira实例URL是否可访问(必须使用HTTPS)
  • 检查您的网络是否允许连接到Jira
  • 如果发生连接超时,请检查防火墙设置

导入错误

  • 确保你已经跑过了 uv sync 安装依赖项
  • 验证您使用的是Python 3.10或更高版本

API版本问题

  • 此服务器使用Jira REST API v3
  • 如果遇到API弃用警告,服务器可能需要更新

安全最佳实践

输入验证

所有MCP工具参数在使用前都经过验证和净化:

  • ✅ JQL消毒:Jira查询语言输入经过验证,以防止通过以下方式进行注入攻击 sanitize_jql() 函数
  • ✅ 项目密钥验证:所有项目密钥都使用验证 sanitize_project_key()
  • ✅ 问题密钥验证:使用验证问题标识符 sanitize_issue_key() 确保格式正确
  • ✅ 端点消毒:对API端点进行了净化,以防止路径遍历攻击
  • ✅ 内容消毒:传递给API的所有内容都经过验证

凭据管理

  • 从不提交凭据:从不承诺 .env, credentials.json,或包含要进行版本控制的API令牌的任何文件
  • 使用环境变量:将敏感数据存储在环境变量中,而不是代码中
  • 定期旋转令牌:定期轮换您的Jira API代币(建议:每30-90天轮换一次)
  • 限制权限:使用具有最低所需权限的Jira API令牌
  • 使用机密管理器:对于生产部署,请使用机密管理器(AWS secrets manager、HashiCorp Vault等)

运行时安全

  • HTTPS强制:服务器对所有请求强制使用HTTPS(在中验证 config.py)
  • 无凭据记录:从不记录凭据(URL净化会删除任何嵌入的凭据)
  • 超时保护:所有HTTP请求都包含30秒的超时,以防止挂起
  • 连接池:具有连接池的HTTPClient,用于安全高效的请求
  • 异步操作:正确管理异步操作以防止资源耗尽

开发人员安全

  • 开发环境:创建一个 .env 带有专用测试令牌的本地开发文件
  • 预提交挂钩:验证没有使用钩子提交凭据
  • 依赖管理:使用 uv sync 通过适当的固定来管理依赖关系
  • 代码审查:合并前审查所有更改的安全影响

安全功能

服务器实现:

  • 全面的输入验证 跨越所有API端点
  • 自动凭证净化 用于日志记录
  • HTTPS强制 用于所有Jira服务器通信
  • 请求超时保护 防止拒绝服务
  • 连接池 具有安全默认值
  • 正确的错误处理 不会泄露敏感信息

用于生产部署,我们建议:

  • 使用具有最小权限的专用Jira服务帐户
  • 实施网络级安全(防火墙、VPN)
  • 监视异常的API使用模式
  • 定期审核访问日志

最近的改进

与Node.js版本的比较

此Python实现提供了与Node.js/TypeScript版本相同的功能,但具有:

  • 使用aiohttp的现代Python异步/等待模式
  • HTTP连接池以获得更好的性能
  • 更好的IDE支持和类型安全的类型提示
  • uv 用于快速、可靠的依赖关系管理
  • uvx 无需安装即可轻松执行
  • pytest的全面测试覆盖率
  • 正确的ADF格式支持Jira API v3
  • 通过输入净化增强安全性

许可证

[在此处添加您的许可证]

贡献

[在此处添加贡献指南]

支持

对于问题或疑问:

  • 在存储库中创建问题
  • 联系维护人员