关于 spec-to-backlog
Spec to Backlog 是将 Confluence 规格文档转为 Jira 待办事项的技能,适用于需要把需求拆解为可执行任务的团队。它先展示 Epic 和子任务方案供确认,再创建 Epic 并关联子任务。
主要功能
- 01读取 Confluence 规格页面
- 02将需求拆分为可执行任务
- 03按内容选择 Jira 问题类型
- 04先创建 Epic 再关联子任务
- 05创建前展示方案并等待确认
适用场景
- 01将产品规格转成 Jira 待办
- 02为新功能建立 Epic 和实施任务
- 03把缺陷与技术工作分类建票
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ atlassian/ atlassian-mcp-server --skill spec-to-backlog安装后在 Claude Code 中输入/spec-to-backlog确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/breakdown-examples.mdepic-templates.mdticket-writing-guide.md详细介绍
规范转待办事项
概述
自动将 Confluence 规范文档转换为结构化的 Jira 待办事项列表。此技能会从 Confluence 读取需求文档,智能地将其拆分为逻辑清晰的实施任务,先创建 Epic 来组织工作,然后生成关联到该 Epic 的各个 Jira 工单,从而免去繁琐的手动复制粘贴。
核心工作流
重要:始终严格按以下顺序执行:
- 获取 Confluence 页面 → 获取规范内容
- 询问项目键 → 确定目标 Jira 项目
- 分析规范 → 拆分为逻辑清晰的任务(仅在内部进行,暂不创建)
- 展示拆分结果 → 向用户展示计划创建的 Epic 和工单
- 首先创建 Epic → 建立父级 Epic 并记录其键
- 创建子工单 → 创建关联到 Epic 的工单
- 提供摘要 → 展示所有已创建项目及其链接
为什么必须先创建 Epic: 创建子工单时需要 Epic 键才能正确关联。若先创建工单,它们将成为孤立工单。
第 1 步:获取 Confluence 页面
触发后,获取 Confluence 页面内容:
如果用户提供 Confluence URL:
从 URL 格式中提取 cloud ID 和页面 ID:
- 标准格式:
https://[site].atlassian.net/wiki/spaces/[SPACE]/pages/[PAGE_ID]/[title] - 可从
[site].atlassian.net提取 cloud ID,也可以调用getAccessibleAtlassianResources获取 - 页面 ID 是 URL 路径中的数字
如果用户只提供页面标题或描述:
使用 searchConfluence 和 CQL 查询按标题查找页面:
searchConfluence(
cloudId="...",
cql="type=page AND title ~ '[search terms]'"
)
不要将 CQL 用于
search。search工具是 Rovo 语义搜索,接受自然语言,而非查询语法——向其传入 CQL 会导致找不到页面。仅在使用自然语言进行发现时使用search(query="one-click checkout spec");需要按标题或类型筛选时使用searchConfluence。
如果匹配到多个页面,请让用户明确要使用哪一个。
获取页面:
调用 getConfluenceContent,并传入 cloudId 和 content ID:
getConfluenceContent(
cloudId="...",
content_id="123456",
content_format="markdown",
detail="full"
)
此调用会以 Markdown 格式返回页面内容,你将在第 3 步中进行分析。
第 2 步:询问项目键
分析规范之前,确定目标 Jira 项目:
询问用户:
“我应该在哪个 Jira 项目中创建这些工单?请提供项目键(例如 PROJ、ENG、PRODUCT)。”
如果用户不确定:
调用 listJiraProjects 查看可用项目。它不是主要工具,因此请通过
execute 运行它(参见调用非主要工具):
executeRead( # or execute(...) if your client exposes a single execute tool
name="listJiraProjects",
cloudId="...",
inputs={"action": "create"}
)
展示项目列表:“我找到了以下可用于创建问题的项目:PROJ(Alpha 项目)、ENG(工程)、PRODUCT(产品团队)。”
获取项目密钥后:
调用 listJiraProjectIssueTypesMetadata,了解可用的问题类型。这也不是主要工具:
executeRead( # or execute(...) if your client exposes a single execute tool
name="listJiraProjectIssueTypesMetadata",
cloudId="...",
inputs={"projectIdOrKey": "PROJ"}
)
确定可用的问题类型:
- 哪种问题类型是“Epic”(或类似的父级类型,例如“Initiative”)
- 有哪些子问题类型可用:“Story”、“Task”、“Bug”、“Sub-task”等
为子任务单选择合适的问题类型:
该技能应根据规范内容智能选择问题类型:
在规范描述以下内容时,使用“Bug”:
- 修复现有问题或缺陷
- 解决错误或不正确的行为
- 处理性能问题
- 更正数据不一致
- 关键词:“fix”、“resolve”、“bug”、“issue”、“problem”、“error”、“broken”
在规范描述以下内容时,使用“Story”:
- 面向用户的新功能或功能特性
- 用户体验改进
- 客户要求的功能
- 产品增强
- 关键词:“feature”、“user can”、“add ability to”、“new”、“enable users”
在规范描述以下内容时,使用“Task”:
- 不直接影响用户的技术工作
- 基础设施或 DevOps 工作
- 重构或优化
- 文档或工具
- 配置或设置
- 关键词:“implement”、“setup”、“configure”、“optimize”、“refactor”、“infrastructure”
回退逻辑:
- 如果有“Story”且内容表明是新功能 → 使用“Story”
- 如果有“Bug”且内容表明是修复问题 → 使用“Bug”
- 如果有“Task” → 技术工作使用“Task”
- 如果以上类型都不可用 → 使用第一个可用的非 Epic、非 Subtask 问题类型
存储选定的问题类型,供步骤 6 使用:
- Epic 问题类型名称(例如“Epic”)
- 默认子问题类型(例如“Story”或“Task”)
- 如果可用,记录 Bug 问题类型名称(例如“Bug”)
步骤 3:分析规范
阅读 Confluence 页面内容,并在内部将其分解为:
Epic 级目标
要实现的总体目标或功能是什么?这将成为你的 Epic。
Epic 摘要示例:
- “用户身份验证系统”
- “支付网关集成”
- “仪表板性能优化”
- “移动应用通知功能”
实施任务
将工作拆分为逻辑清晰、可独立实施的任务。
拆分原则:
- 规模: 每份规范通常包含 3–10 个任务(避免过度细分)
- 清晰: 每个任务都应具体且可执行
- 独立性: 尽可能让任务可以分别处理
- 完整性: 根据需要涵盖后端、前端、测试、文档和基础设施
- 分组: 相关功能放在同一工单中
考虑以下维度:
- 技术层:后端 API、前端 UI、数据库、基础设施
- 工作类型:实施、测试、文档、部署
- 功能:将复杂功能拆分为子功能
- 依赖关系:识别前置工作
常见任务模式:
- “设计[组件]数据库架构”
- “实现[功能] API 端点”
- “构建[组件] UI 组件”
- “将[集成]添加到现有[系统]”
- “为[功能]编写测试”
- “更新[功能]文档”
使用动作动词:
- 实施、创建、构建、添加、设计、集成、更新、修复、优化、配置、部署、测试、编写文档
步骤 4:向用户展示任务拆分
创建任何内容之前,向用户展示计划的任务拆分:
格式:
I've analyzed the spec and here's the backlog I'll create:
**Epic:** [Epic Summary]
[Brief description of epic scope]
**Implementation Tickets (7):**
1. [Story] [Task 1 Summary]
2. [Task] [Task 2 Summary]
3. [Story] [Task 3 Summary]
4. [Bug] [Task 4 Summary]
5. [Task] [Task 5 Summary]
6. [Story] [Task 6 Summary]
7. [Task] [Task 7 Summary]
Shall I create these tickets in [PROJECT KEY]?
问题类型标签会显示每张工单将创建为哪种类型:
- [Story] - 面向用户的新功能
- [Task] - 技术实施工作
- [Bug] - 修复或解决问题
等待用户确认后再继续。这样他们可以:
- 要求修改任务拆分
- 确认范围正确
- 调整工单数量或侧重点
如果用户要求修改,请调整任务拆分并重新展示。
步骤 5:先创建 Epic
重要: 必须先创建 Epic,然后才能创建任何子工单。
创建 Epic:
调用 createJiraIssue,并传入:
createJiraIssue(
cloudId="...",
projectKey="PROJ",
issueType="Epic",
summary="[Epic Summary from Step 3]",
description="[Epic Description - see below]"
)
Epic 描述结构:
## Overview
[1-2 sentence summary of what this epic delivers]
## Source
Confluence Spec: [Link to Confluence page]
## Objectives
- [Key objective 1]
- [Key objective 2]
- [Key objective 3]
## Scope
[Brief description of what's included and what's not]
## Success Criteria
- [Measurable criterion 1]
- [Measurable criterion 2]
- [Measurable criterion 3]
## Technical Notes
[Any important technical context from the spec]
记录 Epic Key:
响应中会包含 Epic 的 Key(例如,“PROJ-123”)。保存此 Key——创建每个子工单时都需要用到它。
响应示例:
{
"key": "PROJ-123",
"id": "10001",
"self": "https://yoursite.atlassian.net/rest/api/3/issue/10001"
}
向用户确认 Epic 已创建: “✅ 已创建 Epic:PROJ-123 - 用户身份验证系统”
第 6 步:创建子工单
现在,为每项实施任务创建一个关联到 Epic 的子工单。
对于每项任务:
确定此任务适用的工单类型:
- 如果任务涉及修复/解决问题 → 使用“Bug”(如果可用)
- 如果任务涉及面向用户的新功能 → 使用“Story”(如果可用)
- 如果任务涉及技术/基础设施工作 → 使用“Task”(如果可用)
- 否则 → 使用第 2 步中的默认子工单类型
调用 createJiraIssue,并传入:
createJiraIssue(
cloudId="...",
projectKey="PROJ",
issueType="[Story/Task/Bug based on task content]",
summary="[Task Summary]",
description="[Task Description - see below]",
parent="PROJ-123" # The Epic key from Step 5
)
工单类型选择示例:
- “修复身份验证超时 Bug” → 使用“Bug”
- “构建用户仪表板 UI” → 使用“Story”
- “配置 CI/CD 流水线” → 使用“Task”
- “实现密码重置 API” → 使用“Story”(面向用户的新功能)
任务摘要格式:
使用动作动词,并明确具体:
- ✅ “实现用户注册 API 端点”
- ✅ “设计身份验证数据库架构”
- ✅ “构建登录表单 UI 组件”
- ❌ “做后端工作”(太模糊)
- ❌ “前端”(无法执行)
任务描述结构:
## Context
[Brief context for this task from the Confluence spec]
## Requirements
- [Requirement 1]
- [Requirement 2]
- [Requirement 3]
## Technical Details
[Specific technical information relevant to this task]
- Technologies: [e.g., Node.js, React, PostgreSQL]
- Components: [e.g., API routes, database tables, UI components]
- Dependencies: [e.g., requires PROJ-124 to be completed first]
## Acceptance Criteria
- [ ] [Testable criterion 1]
- [ ] [Testable criterion 2]
- [ ] [Testable criterion 3]
## Related
- Confluence Spec: [Link to relevant section if possible]
- Epic: PROJ-123
验收标准最佳实践:
确保标准可测试且具体:
- ✅ “成功创建用户时,API 返回 201 状态码”
- ✅ “密码至少为 8 个字符,并使用 bcrypt 进行哈希处理”
- ✅ “登录表单在提交前验证电子邮件地址格式”
- ❌ “用户可以登录”(太模糊)
- ❌ “运行正常”(无法测试)
依次创建所有工单:
记录每个已创建工单的 Key,以便汇总。
第 7 步:提供摘要
创建所有工单后,提供一份完整摘要:
✅ Backlog created successfully!
**Epic:** PROJ-123 - User Authentication System
https://yoursite.atlassian.net/browse/PROJ-123
**Implementation Tickets (7):**
1. PROJ-124 - Design authentication database schema
https://yoursite.atlassian.net/browse/PROJ-124
2. PROJ-125 - Implement user registration API endpoint
https://yoursite.atlassian.net/browse/PROJ-125
3. PROJ-126 - Implement user login API endpoint
https://yoursite.atlassian.net/browse/PROJ-126
4. PROJ-127 - Build login form UI components
https://yoursite.atlassian.net/browse/PROJ-127
5. PROJ-128 - Build registration form UI components
https://yoursite.atlassian.net/browse/PROJ-128
6. PROJ-129 - Add authentication integration to existing features
https://yoursite.atlassian.net/browse/PROJ-129
7. PROJ-130 - Write authentication tests and documentation
https://yoursite.atlassian.net/browse/PROJ-130
**Source:** https://yoursite.atlassian.net/wiki/spaces/SPECS/pages/123456
**Next Steps:**
- Review tickets in Jira for accuracy and completeness
- Assign tickets to team members
- Estimate story points if your team uses them
- Add any additional labels or custom field values
- Schedule work for the upcoming sprint
边缘情况与故障排除
多个规格说明或页面
如果用户引用了多个 Confluence 页面:
- 分别处理每个页面,或询问优先处理哪一个
- 考虑为不同功能创建单独的 Epic
- “我看到你提供了 3 个规格说明页面。要为每个页面分别创建 Epic,还是先处理其中一个?”
已有 Epic
如果用户希望将工单添加到现有 Epic:
- 跳过 Epic 创建(第 5 步)
- 询问现有 Epic Key:“你要将工单添加到哪个 Epic?(例如,PROJ-100)”
- 使用提供的 Epic Key 继续执行第 6 步
自定义必填字段
如果创建工单时因必填字段而失败:
-
使用
getJiraIssueTypeMetaWithFields确定必填字段。它不是主要 工具,因此请通过execute调用:executeRead( # or execute(...) if your client exposes a single execute tool name="getJiraIssueTypeMetaWithFields", cloudId="...", inputs={"projectIdOrKey": "PROJ", "issueTypeId": "10001"} ) -
向用户询问字段值:“此项目要求填写‘Priority’字段。应使用什么优先级?(例如,高、中、低)”
-
直接传递原生参数——
priority是顶层字符串,而不是additional_fields中的条目。additional_fields仅用于自定义字段:priority="High", additional_fields={"customfield_10001": {"value": "Production"}}
大型规格说明
对于可能生成 15 个以上工单的规格说明:
- 向用户展示完整的任务拆分
- 询问:“此规格说明会创建 18 个工单。要全部创建,还是调整范围?”
- 提供先创建部分工单的选项:“我可以先创建前 10 个工单,等你反馈后再创建其余工单。”
子任务与任务
某些项目使用“Subtask”工单类型:
- 如果元数据显示“Subtask”可用,可以将其用于更细粒度的工作
- 子任务关联到父任务(而不是直接关联到 Epic)
- 层级结构:Epic → Task → Subtask
需求说明不明确
如果 Confluence 页面缺少详细信息:
- 创建更少、更宽泛的工单
- 在工单描述中注明:“详细需求需在细化阶段确定”
- 询问用户:“需求规格说明中缺少实现细节。我是否应创建可在之后细化的高层级工单?”
API 调用失败
如果 createJiraIssue 失败:
- 检查错误消息,确认具体问题(权限、必填字段、无效值)
- 使用
executeRead(name="listJiraProjectIssueTypesMetadata", ...)验证工单类型是否可用 - 告知用户:“创建工单时遇到错误:[error message]。这可能是由于项目权限或必填字段导致的。”
高质量拆解的技巧
明确具体
- ❌ “做前端工作”
- ✅ “创建登录表单 UI,包含电子邮件/密码输入框和验证”
补充技术背景
- 需求说明明确时,注明具体技术
- 引用组件、服务或模块
- 注明集成点
合理分组
- 相关工作应放在同一工单中
- 不要人为拆分:“构建用户个人资料页面”同时包含 UI 和 API 集成
- 不同专业领域的工作应拆分:如果由不同人员负责,则将后端 API 任务与前端 UI 任务分开
避免重复
- 不要为相同功能创建重复工单
- 如果多个功能需要相同的基础设施,创建一个供它们共同依赖的基础设施工单
明确测试
- 将测试纳入功能任务(“实现 X 并编写单元测试”)
- 或为复杂功能创建单独的测试任务(“为身份验证流程编写集成测试”)
文档任务
- 面向用户的功能:包含“更新用户文档”或“创建帮助文章”
- 面向开发者的工具:包含“更新 API 文档”或“编写集成指南”
依赖关系
- 在工单描述中注明前置条件
- 如果 Jira 支持,使用“Depends on”或“Blocks”关系
- 按逻辑顺序安排工单(基础设施 → 实现 → 测试)
优秀拆解示例
示例 1:新功能 - 搜索功能
史诗: 产品搜索与筛选
工单:
- [Task] 设计搜索索引架构和数据结构
- [Task] 使用 Elasticsearch 实现后端搜索 API
- [Story] 构建搜索输入框和结果 UI 组件
- [Story] 添加高级筛选(价格、类别、评分)
- [Story] 实现搜索建议和自动补全
- [Task] 优化搜索性能并添加缓存
- [Task] 编写搜索集成测试和文档
示例 2:错误修复 - 性能问题
史诗: 解决仪表板加载时间问题
工单:
- [Task] 分析并找出性能瓶颈
- [Bug] 使用索引和缓存优化数据库查询
- [Bug] 为仪表板组件实现延迟加载
- [Bug] 为大型数据表添加分页
- [Task] 设置性能监控和警报
示例 3:基础设施 - CI/CD 流水线
史诗: 自动化部署流水线
工单:
- [Task] 设置 GitHub Actions 工作流配置
- [Task] 在 CI 流水线中实现自动化测试
- [Task] 配置预发布环境部署
- [Task] 实现生产环境蓝绿部署
- [Task] 添加部署回滚机制
- [Task] 创建部署操作手册和文档
调用非主要工具
Atlassian Rovo MCP 服务只会在工具列表中直接公开一小组主要工具。其他工具都位于目录中,需通过元工具调用:
discover— 如果不知道某项操作的名称,请用自然语言描述目标。它会返回要使用的确切name和inputs。如果某项操作已经作为主要工具提供,请勿调用discover。- 执行系列工具 — 按名称运行目录中的操作。请查看工具列表:有些客户端会提供单个
execute,另一些则提供executeRead/executeWrite/executeDestructive,并要求使用与操作匹配的级别。参数相同:
executeRead( # or execute(...) if your client exposes a single execute tool
name="<operationName>",
cloudId="...",
inputs={"param": "value"}
)
重要规则:
cloudId是顶层参数,与name和inputs同级——切勿将其放入inputs。声明了omitCloudId的操作(例如getContentFormatGuide)不需要cloudId。inputs是扁平对象。 服务会自行将每个参数路由到路径、查询或请求体。- 使用实时工具架构中的确切参数名称。 无法识别的参数会被丢弃,而不会报错,因此名称错误会静默失败——调用会成功,但你的值会被忽略。如有疑问,请先查看架构或
discover的结果。 - 如果调用报告操作未知,请使用不同的关键词运行
discover,并使用它返回的名称,不要猜测。