使用说明
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"
安装服务器
-
克隆或下载此存储库
-
导航到项目目录:
cd jira-mcp-server -
使用uv安装依赖项:
uv sync -
使用测试工具进行开发:
uv sync --dev
配置
环境变量
您需要设置以下环境变量:
JIRA_URL:您的Jira实例URL(例如。,https://yourcompany.atlassian.net)JIRA_USERNAME:您的Jira电子邮件地址JIRA_API_TOKEN:您的Jira API代币
获取Jira API代币
- 登录您的Jira帐户
- 转到帐户设置→ 安全→ API令牌
- 点击“创建API令牌”
- 为其命名并复制生成的令牌
在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
- 通过输入净化增强安全性
许可证
[在此处添加您的许可证]
贡献
[在此处添加贡献指南]
支持
对于问题或疑问:
- 在存储库中创建问题
- 联系维护人员
