使用说明
⚠️ 重要免责声明
此代码是100%AI生成的。 使用风险自负。作者不保证其可靠性、安全性或适用于任何特定目的。在生产环境中使用之前,彻底审查和测试所有代码。
Jira MCP服务器
企业级模型上下文协议服务器,用于Jira云和服务器/数据中心的全面集成
一个生产就绪的MCP服务器,为AI助手提供对Jira Cloud和Jira服务器/数据中心的完全访问。支持与Jira的自然语言交互,以实现跨多个Jira工作区的问题管理、项目导航和工作流自动化。
✨ 特性
🏢 多工作区管理
- 连接到多个Jira Cloud和服务器/数据中心实例
- 支持云(API令牌)和服务器/数据中心(PAT)身份验证
- 在工作空间之间无缝切换
- 符合XDG的配置存储(~/.config/jira-mcp/)
- 用于凭证管理的安全骨架文件工作流
- 工作区验证和凭证管理
🎫 完整的问题生命周期
- 搜索:基于JQL的强大问题搜索
- CRUD操作:创建、阅读、更新和删除问题
- 工作流管理:通过自定义工作流解决过渡问题
- 作业:将问题分配给团队成员
- 自定义字段:支持自定义字段操作
💬 协作功能
- 评论:对问题注释进行完整的CRUD操作
- 附件:上传、列出和删除文件附件
- 链接:在问题之间创建关系(关系、块、重复等)
- 子任务:创建和管理父子任务层次结构
📊 项目与发现
- 列出所有可访问的项目
- 获取详细的项目信息
- 枚举可用的问题类型
- 用户搜索作业
🚀 快速开始
先决条件
- Python 3.12+ -现代Python功能所必需的
- 诗歌 -依赖关系管理
- Jira云或服务器/数据中心 -具有API访问权限的活动实例
安装
# Clone the repository
git clone [repository-url]
cd jira-mcp
# Install dependencies with Poetry
poetry install
# Start the MCP server
poetry run start-mcp
服务器使用STDIO传输运行,并通过模型上下文协议进行通信。
🔧 配置
配置位置
所有工作空间配置都存储在 ~/.config/jira-mcp/workspaces/ 拥有600个安全权限。
获取您的凭据
对于Jira Cloud:
- 导航到 大西洋API代币
- 点击 “创建API令牌”
- 标记它(例如,“AI助手MCP”)
- 立即复制令牌 (您将无法再次查看!)
对于Jira服务器/数据中心:
- 从Jira服务器实例生成个人访问令牌(PAT)
- 遵循组织的PAT创建流程
- 复制令牌以在配置中使用
添加工作区
推荐方法:骨架文件(安全)
创建可直接编辑的骨架配置文件:
# 1. Create skeleton file
jira_workspace(
operation="create_workspace_skeleton",
workspace_name="mycompany",
auth_type="cloud" # or "pat" for Server/Data Center
)
# 2. Edit the file at ~/.config/jira-mcp/workspaces/mycompany.json
# 3. Fill in your actual credentials
# 4. Remove the _instructions section
# 5. Restart the MCP server
替代方案:直接添加(程序化)
对于Jira Cloud:
jira_workspace(
operation="add_workspace",
workspace_name="mycompany",
site_url="mycompany.atlassian.net",
email="your.email@company.com",
api_token="YOUR_API_TOKEN_HERE",
auth_type="cloud"
)
对于Jira服务器/数据中心:
jira_workspace(
operation="add_workspace",
workspace_name="mycompany",
site_url="jira.company.com",
email="your.username",
api_token="YOUR_PERSONAL_ACCESS_TOKEN",
auth_type="pat"
)
服务器将:
- 验证您的凭据
- 测试连接
- 将配置安全地存储在
~/.config/jira-mcp/workspaces/mycompany.json - 将其设置为活动工作区(如果这是您的第一个)
管理工作区
# List all configured workspaces
jira_workspace(operation="list_workspaces")
# Switch to a different workspace
jira_workspace(operation="switch_workspace", workspace_name="otherworkspace")
# Get current workspace info
jira_workspace(operation="get_active_workspace")
# Validate workspace credentials
jira_workspace(operation="validate_workspace", workspace_name="mycompany")
# Remove a workspace
jira_workspace(operation="remove_workspace", workspace_name="oldworkspace")
📖 使用指南
🔍 搜索和阅读问题
使用JQL搜索:
jira_issues(
operation="search",
jql="project = ENG AND status = Open AND assignee = currentUser()",
max_results=50
)
获取问题详细信息:
jira_issues(operation="read", issue_key="ENG-123")
获取可用转换:
jira_issues(operation="get_transitions", issue_key="ENG-123")
✏️ 创建和更新问题
创建新问题:
jira_issues(
operation="create",
project_key="ENG",
issue_type="Task",
summary="Implement new feature",
description="Detailed description here",
priority="High",
labels=["backend", "urgent"],
assignee="user@example.com" # Optional
)
更新问题:
jira_issues(
operation="update",
issue_key="ENG-123",
summary="Updated task title",
description="Updated description",
priority="Medium"
)
分配一个问题:
jira_issues(
operation="assign",
issue_key="ENG-123",
assignee="user@example.com"
)
通过工作流进行转换:
jira_issues(
operation="transition",
issue_key="ENG-123",
transition="In Progress",
comment="Starting work on this task" # Optional
)
💬 评论
列出评论:
jira_issues(operation="list_comments", issue_key="ENG-123")
添加评论:
jira_issues(
operation="add_comment",
issue_key="ENG-123",
body="This is a comment from the AI assistant"
)
更新评论:
jira_issues(
operation="update_comment",
issue_key="ENG-123",
comment_id="12345",
body="Updated comment text"
)
删除评论:
jira_issues(
operation="delete_comment",
issue_key="ENG-123",
comment_id="12345"
)
📎 附件
列出附件:
jira_issues(operation="list_attachments", issue_key="ENG-123")
上传文件:
jira_issues(
operation="add_attachment",
issue_key="ENG-123",
filepath="/path/to/document.pdf"
)
删除附件:
jira_issues(
operation="delete_attachment",
attachment_id="67890"
)
🔗 问题链接和关系
创建链接:
jira_issues(
operation="create_link",
inward_issue="ENG-123",
outward_issue="ENG-456",
link_type="Blocks" # or "Relates", "Duplicate", etc.
)
列表链接:
jira_issues(operation="list_links", issue_key="ENG-123")
删除链接:
jira_issues(operation="delete_link", link_id="11111")
📋 子任务
创建子任务:
jira_issues(
operation="create_subtask",
parent_key="ENG-123",
summary="Subtask: Implement unit tests",
description="Write comprehensive tests",
assignee="developer@example.com" # Optional
)
列出子任务:
jira_issues(operation="list_subtasks", issue_key="ENG-123")
📊 项目
列出所有项目:
jira_projects(operation="list")
获取项目详细信息:
jira_projects(operation="get", project_key="ENG")
获取项目的问题类型:
jira_projects(operation="get_issue_types", project_key="ENG")
👥 用户
获取当前用户:
jira_workspace(operation="get_current_user")
搜索用户:
jira_workspace(
operation="search_users",
query="john",
max_results=10
)
🏗️ 建筑
项目结构
jira-mcp/
├── jira_mcp/
│ ├── __init__.py # Package initialization
│ ├── __main__.py # Entry point for module execution
│ ├── server.py # Main server & STDIO transport
│ ├── mcp_server.py # MCP tool registration & routing
│ ├── config.py # Configuration management
│ ├── workspace_manager.py # Multi-workspace handling
│ ├── jira_client.py # Jira API client wrapper
│ └── issue_manager.py # Issue operations (CRUD, comments, etc.)
├── docs/ # Documentation
│ └── implementation.md # Implementation specification
├── pyproject.toml # Poetry dependencies & config
├── poetry.lock # Locked dependencies
└── README.md # This file
~/.config/jira-mcp/ # XDG config directory (created automatically)
├── workspaces/ # Workspace configurations
│ ├── workspace1.json
│ └── workspace2.json
└── active_workspace # Currently active workspace
MCP工具
服务器暴露 3个MCP工具 随着 总共32次操作:
jira_workspace(10项操作)-工作空间管理(包括create_workspace_skeleton)jira_projects(3项操作)-项目发现jira_issues(19项操作)-完成问题管理
技术栈
- Python 3.12+ -带有类型提示的现代Python
- MCP-SDK -模型上下文协议实现
- Jira Python库 -Jira API官方客户
- 诗歌 -依赖管理和打包
- STDIO传输 -标准MCP通信协议
🧪 发展
代码质量
# Run pylint (target: 10.00/10)
poetry run pylint jira_mcp/
# Type checking with mypy
poetry run mypy jira_mcp/
# Security analysis
poetry run bandit -r jira_mcp/
# Dependency security audit
poetry run pip-audit
测试
# Run test suite
poetry run pytest
# With coverage
poetry run pytest --cov=jira_mcp
项目标准
- 代码质量:皮林得分维持在10.00/10
- 类型安全:带有mypy验证的完整类型提示
- 安全:土匪安全扫描,代码中没有秘密
- 文档:所有功能的综合文档字符串
- 错误处理:在所有层进行适当的异常处理
📊 统计
- 总运营量:3个MCP工具共32个
- 代码行:~4600生产代码
- 代码质量:10.00/10皮林分
- 测试覆盖率:手动MCP集成测试
- Python版本: 3.12+
- 支持的平台:Jira Cloud+Jira服务器/数据中心
🔒 安全
最佳实践
- API令牌:存储在
~/.config/jira-mcp/workspaces/拥有600个权限 - XDG合规性:配置遵循XDG基本目录规范
- 代码中没有秘密:从配置文件加载的所有凭据
- 身份验证类型:同时支持云(API令牌)和服务器/数据中心(PAT)
- 输入验证:在API调用之前验证的所有参数
- 错误处理:没有敏感数据的安全错误消息
- 骨架工作流:建议避免通过工具调用传递凭据的方法
工作空间存储
工作区配置存储在 ~/.config/jira-mcp/workspaces/*.json 具有受限权限:
Jira Cloud:
{
"name": "mycompany",
"site_url": "https://mycompany.atlassian.net",
"email": "user@company.com",
"api_token": "YOUR_API_TOKEN",
"auth_type": "cloud",
"created": "2026-02-05T07:20:00.000000",
"last_validated": null
}
Jira服务器/数据中心:
{
"name": "myserver",
"site_url": "https://jira.company.com",
"email": "username",
"api_token": "YOUR_PERSONAL_ACCESS_TOKEN",
"auth_type": "pat",
"created": "2026-02-05T07:20:00.000000",
"last_validated": null
}
安全说明:
- 文件会自动创建,具有600个权限(仅限所有者读/写)
- 配置目录在用户的主目录中,而不是在项目存储库中
- 使用
create_workspace_skeleton避免通过工具调用传递凭据的操作
🐛 故障排除
常见问题
“无活动工作区”错误:
# Add a workspace first
jira_workspace(operation="add_workspace", ...)
工作区未加载:
- 检查文件是否存在:
ls ~/.config/jira-mcp/workspaces/ - 检查文件权限:
ls -la ~/.config/jira-mcp/workspaces/ - 验证JSON语法:
cat ~/.config/jira-mcp/workspaces/myserver.json | python -m json.tool - 重新启动MCP服务器(关闭并重新打开AI助手)
“身份验证失败”错误:
- 验证您的API令牌是否正确
- 检查您的电子邮件是否与您的Atlassian帐户匹配
- 确保站点URL正确(例如。,
company.atlassian.net) - 验证auth_type是否与Jira实例匹配(云与服务器)
- 对于PAT:确保令牌有效且未过期
- 测试连接:
jira_workspace(operation="validate_workspace", workspace_name="myserver")
“无效JQL”错误:
- 首先在Jira的web界面中测试JQL
- 确保字段名称正确(区分大小写)
- 检查值的引用是否正确
文件附件上传失败:
- 验证文件路径是否存在并且可读
- 检查文件大小限制(Jira默认为10MB)
- 确保您在项目中具有附件权限
多个工作区:
- 一次只能有一个工作区处于活动状态
- 使用
switch_workspace在工作区之间切换 - 活动工作区存储在
~/.config/jira-mcp/active_workspace
🤝 贡献
欢迎投稿!拜托:
- 克隆该仓库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add amazing feature') - 保持10.00/10皮林分
- 添加新功能的测试
- 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
📄 许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
🙏 致谢
- 与 模型上下文协议
- 使用 Jira Python库
- 与开发 诗歌
📞 支持
对于问题、疑问或贡献:
- 在GitHub上打开一个问题
- 检查
docs/详细文档目录 - 审查
docs/implementation.md了解技术细节
由...制作❤️ 用于AI驱动的Jira管理