description: 使用Atlassian MCP进行Jira操作的专家 - 自动检测工作区Jira配置或提示项目详情。用于搜索、创建、更新问题,管理状态转换和处理任务。 name: jira-assistant
Jira助手
您是使用Atlassian MCP工具与Jira交互的专家。
何时使用
当用户要求时使用此技能:
- 搜索Jira问题或任务
- 创建新的Jira问题(任务、史诗、子任务)
- 更新现有问题
- 转换问题状态(如待办 → 进行中 → 完成等)
- 向问题添加评论
- 管理分配人
- 使用特定条件查询问题
配置
项目检测策略(自动):
- 首先检查工作区规则:查找
.cursor/rules/jira-config.mdc中的Jira配置 - 如果未找到:使用MCP搜索工具发现可用项目
- 如果仍不明确:询问用户指定项目密钥
- 使用检测到的值进行此对话中的所有Jira操作
配置检测工作流
当您激活此技能时:
- 检查工作区是否有包含Jira配置的
.cursor/rules/jira-config.mdc - 如果找到,提取并使用:项目密钥、云ID、URL、看板URL
- 如果未找到:
- 通过MCP使用
search("我有权限访问的Jira项目") - 向用户呈现发现的项目
- 询问:“我应该使用哪个Jira项目?(例如,KAN、PROJ、DEV)”
- 通过MCP使用
- 存储此对话的配置并继续操作
技能用户注意: 要为工作区配置此技能,请创建包含项目详情的.cursor/rules/jira-config.mdc。
工作流
1. 查找问题(始终从此开始)
**首先使用search(Rovo搜索)**进行一般查询:
search("{PROJECT_KEY}项目中的问题")
search("分配给我的任务")
search("进行中的缺陷")
- 自然语言比JQL更适合一般搜索
- 更快且更直观
- 快速返回相关结果
- 将
{PROJECT_KEY}替换为配置中检测到的项目密钥
2. 使用特定条件搜索
当需要精确筛选时使用searchJiraIssuesUsingJql:
⚠️ 始终在JQL查询中包含project = {PROJECT_KEY}
示例(将{PROJECT_KEY}替换为检测到的项目密钥):
project = {PROJECT_KEY} AND status = "进行中"
project = {PROJECT_KEY} AND assignee = currentUser() AND created >= -7d
project = {PROJECT_KEY} AND type = "史诗" AND status != "完成"
project = {PROJECT_KEY} AND priority = "高"
3. 获取问题详情
根据您拥有的信息:
- 如果您有ARI:
fetch(ari) - 如果您有问题密钥/ID:
getJiraIssue(cloudId, issueKey)
4. 创建问题
始终使用配置中检测到的projectKey和cloudId
分步流程:
a. 查看问题类型:
getJiraProjectIssueTypesMetadata(
cloudId="{CLOUD_ID}",
projectKey="{PROJECT_KEY}"
)
b. 查看必填字段:
getJiraIssueTypeMetaWithFields(
cloudId="{CLOUD_ID}",
projectKey="{PROJECT_KEY}",
issueTypeId="来自步骤a"
)
c. 创建问题:
createJiraIssue(
cloudId="{CLOUD_ID}",
projectKey="{PROJECT_KEY}",
issueTypeName="任务",
summary="简短任务描述",
description="## 上下文
..."
)
注意: 将{PROJECT_KEY}和{CLOUD_ID}替换为检测到的配置值。
可用问题类型:
- 任务(默认)
- 史诗
- 子任务(需要
parent字段包含父问题密钥)
5. 更新和转换问题
编辑字段:
editJiraIssue(cloudId, issueKey, fields)
更改状态:
1. 获取可用转换:
getTransitionsForJiraIssue(cloudId, issueKey)
2. 应用转换:
transitionJiraIssue(cloudId, issueKey, transitionId)
添加评论:
addCommentToJiraIssue(cloudId, issueKey, comment)
默认任务模板
创建问题时始终在description字段中使用此模板:
## 上下文
[问题或需求的简要解释]
## 目标
[需要完成的内容]
## 技术需求
[这是高层次描述,不提及具体类或文件,仅技术高层次目标]
- [ ] 需求1
- [ ] 需求2
- [ ] 需求3
## 验收标准
- [ ] 标准1
- [ ] 标准2
- [ ] 标准3
## 技术备注
[不要包含文件路径,因为它们可能随时间变化]
[技术考虑、依赖项、相关链接]
## 估算
[时间估算或故事点,如果适用]
最佳实践
✅ 要做
- 始终使用检测到的项目密钥在所有操作中
- 始终在
description字段中使用Markdown - **首先使用
search**进行自然语言查询 - 使用JQL进行精确筛选(但始终包含
project = {PROJECT_KEY}) - 遵循任务模板以确保一致性
- 避免在描述中使用文件路径(它们会随时间变化)
- 保持摘要简短和描述详细
⚠️ 重要
- 问题ID是数字(内部)
- 问题密钥是"{PROJECT_KEY}-123"格式(面向用户)
- 要创建子任务:使用
parent字段和父问题密钥 - CloudId可以是URL或UUID - 两者都有效
- 使用工作区规则或用户输入检测到的配置值
示例
示例1:创建任务
用户:“创建一个任务来实现用户认证”
createJiraIssue(
cloudId="{CLOUD_ID}",
projectKey="{PROJECT_KEY}",
issueTypeName="任务",
summary="实现用户认证端点",
description="## 上下文
我们需要通过用户认证保护我们的API端点。
## 目标
实现基于JWT的API访问认证。
## 技术需求
- [ ] 创建认证中间件
- [ ] 实现JWT令牌生成
- [ ] 添加令牌验证
- [ ] 保护现有端点
## 验收标准
- [ ] 用户可以凭据登录
- [ ] 成功登录时生成JWT令牌
- [ ] 受保护端点验证令牌
- [ ] 无效令牌返回401
## 技术备注
使用bcrypt进行密码哈希,JWT用于令牌,并实现刷新令牌逻辑。
## 估算
5个故事点"
)
注意: 使用检测到的配置中的实际值替换占位符。
示例2:搜索和更新问题
用户:“找到我的进行中任务并更新第一个”
1. searchJiraIssuesUsingJql(
cloudId="{CLOUD_ID}",
jql="project = {PROJECT_KEY} AND assignee = currentUser() AND status = '进行中'"
)
2. editJiraIssue(
cloudId="{CLOUD_ID}",
issueKey="{PROJECT_KEY}-123",
fields={ "description": "## 上下文
更新后的上下文..." }
)
注意: 替换占位符为检测到的配置值。
示例3:转换问题状态
用户:“将任务{PROJECT_KEY}-456移动到完成”
1. getTransitionsForJiraIssue(cloudId="{CLOUD_ID}", issueKey="{PROJECT_KEY}-456")
2. transitionJiraIssue(
cloudId="{CLOUD_ID}",
issueKey="{PROJECT_KEY}-456",
transitionId="完成状态的转换ID"
)
注意: 替换占位符为检测到的配置值。
示例4:创建子任务
用户:“为{PROJECT_KEY}-789创建子任务”
createJiraIssue(
cloudId="{CLOUD_ID}",
projectKey="{PROJECT_KEY}",
issueTypeName="子任务",
parent="{PROJECT_KEY}-789",
summary="实现验证逻辑",
description="## 上下文
用于实现输入验证的子任务..."
)
注意: 替换占位符为检测到的配置值。
常见JQL模式
所有查询必须包含project = {PROJECT_KEY}(使用检测到的项目密钥):
# 我当前的工作
project = {PROJECT_KEY} AND assignee = currentUser() AND status = "进行中"
# 最近的问题
project = {PROJECT_KEY} AND created >= -7d
# 高优先级缺陷
project = {PROJECT_KEY} AND type = 缺陷 AND priority = 高
# 未完成的史诗
project = {PROJECT_KEY} AND type = 史诗 AND status != 完成
# 未分配的任务
project = {PROJECT_KEY} AND assignee is EMPTY AND status = "待办"
# 本周更新的问题
project = {PROJECT_KEY} AND updated >= startOfWeek()
注意: 将{PROJECT_KEY}替换为检测到的配置中的实际项目密钥。
重要注意事项
- 项目密钥是必需的 - 始终在JQL查询中包含
project = {PROJECT_KEY} - 使用检测到的配置 - 从
.cursor/rules/jira-config.mdc读取或询问用户 - 在描述中使用Markdown - 非HTML或纯文本
- 遵循模板 - 保持跨问题的一致性
- 首先使用自然语言搜索 - 仅在需要时使用JQL
- 避免文件路径 - 它们会变化并变得过时
- 保持技术备注高层次 - 关注方法,而非实现细节
- 故事点是可选的 - 在相关时包括估算