Spec to Backlog

作者: Atlassian

自動將 Confluence 規格文件轉換為結構化的 Jira 待辦清單,包含 Epic 與實作票。當 Claude 需要:(1) 從 Confluence 頁面建立 Jira 票,(2) 從規格產生待辦清單,(3) 將規格拆解為實作任務,或 (4) 將需求轉換為 Jira 議題時使用。處理讀取 Confluence 頁面、分析規格、建立結構正確的 Epic,以及產生連結至 Epic 的詳細實作票。

npx skills add https://github.com/atlassian/atlassian-mcp-server --skill spec-to-backlog

Spec to Backlog

Overview

Transform Confluence specification documents into structured Jira backlogs automatically. This skill reads requirement documents from Confluence, intelligently breaks them down into logical implementation tasks, creates an Epic first to organize the work, then generates individual Jira tickets linked to that Epic—eliminating tedious manual copy-pasting.

Core Workflow

CRITICAL: Always follow this exact sequence:

  1. Fetch Confluence Page → Get the specification content
  2. Ask for Project Key → Identify target Jira project
  3. Analyze Specification → Break down into logical tasks (internally, don't create yet)
  4. Present Breakdown → Show user the planned Epic and tickets
  5. Create Epic FIRST → Establish parent Epic and capture its key
  6. Create Child Tickets → Generate tickets linked to the Epic
  7. Provide Summary → Present all created items with links

Why Epic must be created first: Child tickets need the Epic key to link properly during creation. Creating tickets first will result in orphaned tickets.


Step 1: Fetch Confluence Page

When triggered, obtain the Confluence page content:

If user provides a Confluence URL:

Extract the cloud ID and page ID from the URL pattern:

  • Standard format: https://[site].atlassian.net/wiki/spaces/[SPACE]/pages/[PAGE_ID]/[title]
  • The cloud ID can be extracted from [site].atlassian.net or by calling getAccessibleAtlassianResources
  • The page ID is the numeric value in the URL path

If user provides only a page title or description:

Use the search tool to find the page:

search(
  cloudId="...",
  query="type=page AND title~'[search terms]'"
)

If multiple pages match, ask the user to clarify which one to use.

Fetch the page:

Call getConfluencePage with the cloudId and pageId:

getConfluencePage(
  cloudId="...",
  pageId="123456",
  contentFormat="markdown"
)

This returns the page content in Markdown format, which you'll analyze in Step 3.


Step 2: Ask for Project Key

Before analyzing the spec, determine the target Jira project:

Ask the user:

"Which Jira project should I create these tickets in? Please provide the project key (e.g., PROJ, ENG, PRODUCT)."

If user is unsure:

Call getVisibleJiraProjects to show available projects:

getVisibleJiraProjects(
  cloudId="...",
  action="create"
)

Present the list: "I found these projects you can create issues in: PROJ (Project Alpha), ENG (Engineering), PRODUCT (Product Team)."

Once you have the project key:

Call getJiraProjectIssueTypesMetadata to understand what issue types are available:

getJiraProjectIssueTypesMetadata(
  cloudId="...",
  projectIdOrKey="PROJ"
)

Identify available issue types:

  • Which issue type is "Epic" (or similar parent type like "Initiative")
  • What child issue types are available: "Story", "Task", "Bug", "Sub-task", etc.

Select appropriate issue types for child tickets:

The skill should intelligently choose issue types based on the specification content:

Use "Bug" when the spec describes:

  • Fixing existing problems or defects
  • Resolving errors or incorrect behavior
  • Addressing performance issues
  • Correcting data inconsistencies
  • Keywords: "fix", "resolve", "bug", "issue", "problem", "error", "broken"

Use "Story" when the spec describes:

  • New user-facing features or functionality
  • User experience improvements
  • Customer-requested capabilities
  • Product enhancements
  • Keywords: "feature", "user can", "add ability to", "new", "enable users"

Use "Task" when the spec describes:

  • Technical work without direct user impact
  • Infrastructure or DevOps work
  • Refactoring or optimization
  • Documentation or tooling
  • Configuration or setup
  • Keywords: "implement", "setup", "configure", "optimize", "refactor", "infrastructure"

Fallback logic:

  1. If "Story" is available and content suggests new features → use "Story"
  2. If "Bug" is available and content suggests fixes → use "Bug"
  3. If "Task" is available → use "Task" for technical work
  4. If none of the above are available → use the first available non-Epic, non-Subtask issue type

Store the selected issue types for use in Step 6:

  • Epic issue type name (e.g., "Epic")
  • Default child issue type (e.g., "Story" or "Task")
  • Bug issue type name if available (e.g., "Bug")

Step 3: Analyze Specification

Read the Confluence page content and internally decompose it into:

Epic-Level Goal

What is the overall objective or feature being implemented? This becomes your Epic.

Example Epic summaries:

  • "User Authentication System"
  • "Payment Gateway Integration"
  • "Dashboard Performance Optimization"
  • "Mobile App Notifications Feature"

Implementation Tasks

Break the work into logical, independently implementable tasks.

Breakdown principles:

  • Size: 3-10 tasks per spec typically (avoid over-granularity)
  • Clarity: Each task should be specific and actionable
  • Independence: Tasks can be worked on separately when possible
  • Completeness: Include backend, frontend, testing, documentation, infrastructure as needed
  • Grouping: Related functionality stays in the same ticket

Consider these dimensions:

  • Technical layers: Backend API, Frontend UI, Database, Infrastructure
  • Work types: Implementation, Testing, Documentation, Deployment
  • Features: Break complex features into sub-features
  • Dependencies: Identify prerequisite work

Common task patterns:

  • "Design [component] database schema"
  • "Implement [feature] API endpoints"
  • "Build [component] UI components"
  • "Add [integration] to existing [system]"
  • "Write tests for [feature]"
  • "Update documentation for [feature]"

Use action verbs:

  • Implement, Create, Build, Add, Design, Integrate, Update, Fix, Optimize, Configure, Deploy, Test, Document

Step 4: Present Breakdown to User

Before creating anything, show the user your planned breakdown:

Format:

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]?

The issue type labels show what type each ticket will be created as:

  • [Story] - New user-facing feature
  • [Task] - Technical implementation work
  • [Bug] - Fix or resolve an issue

Wait for user confirmation before proceeding. This allows them to:

  • Request changes to the breakdown
  • Confirm the scope is correct
  • Adjust the number or focus of tickets

If user requests changes, adjust the breakdown and re-present.


Step 5: Create Epic FIRST

CRITICAL: The Epic must be created before any child tickets.

Create the Epic:

Call createJiraIssue with:

createJiraIssue(
  cloudId="...",
  projectKey="PROJ",
  issueTypeName="Epic",
  summary="[Epic Summary from Step 3]",
  description="[Epic Description - see below]"
)

Epic Description Structure:

## 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]

Capture the Epic Key:

The response will include the Epic's key (e.g., "PROJ-123"). Save this key—you'll need it for every child ticket.

Example response:

{
  "key": "PROJ-123",
  "id": "10001",
  "self": "https://yoursite.atlassian.net/rest/api/3/issue/10001"
}

Confirm Epic creation to user: "✅ Created Epic: PROJ-123 - User Authentication System"


Step 6: Create Child Tickets

Now create each implementation task as a child ticket linked to the Epic.

For each task:

Determine the appropriate issue type for this specific task:

  • If the task involves fixing/resolving an issue → use "Bug" (if available)
  • If the task involves new user-facing features → use "Story" (if available)
  • If the task involves technical/infrastructure work → use "Task" (if available)
  • Otherwise → use the default child issue type from Step 2

Call createJiraIssue with:

createJiraIssue(
  cloudId="...",
  projectKey="PROJ",
  issueTypeName="[Story/Task/Bug based on task content]",
  summary="[Task Summary]",
  description="[Task Description - see below]",
  parent="PROJ-123"  # The Epic key from Step 5
)

Example issue type selection:

  • "Fix authentication timeout bug" → Use "Bug"
  • "Build user dashboard UI" → Use "Story"
  • "Configure CI/CD pipeline" → Use "Task"
  • "Implement password reset API" → Use "Story" (new user feature)

Task Summary Format:

Use action verbs and be specific:

  • ✅ "Implement user registration API endpoint"
  • ✅ "Design authentication database schema"
  • ✅ "Build login form UI components"
  • ❌ "Do backend work" (too vague)
  • ❌ "Frontend" (not actionable)

Task Description Structure:

## 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

Acceptance Criteria Best Practices:

Make them testable and specific:

  • ✅ "API returns 201 status on successful user creation"
  • ✅ "Password must be at least 8 characters and hashed with bcrypt"
  • ✅ "Login form validates email format before submission"
  • ❌ "User can log in" (too vague)
  • ❌ "It works correctly" (not testable)

Create all tickets sequentially:

Track each created ticket key for the summary.


Step 7: Provide Summary

After all tickets are created, present a comprehensive summary:

✅ 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

Edge Cases & Troubleshooting

Multiple Specs or Pages

If user references multiple Confluence pages:

  • Process each separately, or ask which to prioritize
  • Consider creating separate Epics for distinct features
  • "I see you've provided 3 spec pages. Should I create separate Epics for each, or would you like me to focus on one first?"

Existing Epic

If user wants to add tickets to an existing Epic:

  • Skip Epic creation (Step 5)
  • Ask for the existing Epic key: "What's the Epic key you'd like to add tickets to? (e.g., PROJ-100)"
  • Proceed with Step 6 using the provided Epic key

Custom Required Fields

If ticket creation fails due to required fields:

  1. Use getJiraIssueTypeMetaWithFields to identify what fields are required:

    getJiraIssueTypeMetaWithFields(
      cloudId="...",
      projectIdOrKey="PROJ",
      issueTypeId="10001"
    )
    
  2. Ask user for values: "This project requires a 'Priority' field. What priority should I use? (e.g., High, Medium, Low)"

  3. Include in additional_fields when creating:

    additional_fields={
      "priority": {"name": "High"}
    }
    

Large Specifications

For specs that would generate 15+ tickets:

  • Present the full breakdown to user
  • Ask: "This spec would create 18 tickets. Should I create all of them, or would you like to adjust the scope?"
  • Offer to create a subset first: "I can create the first 10 tickets now and wait for your feedback before creating the rest."

Subtasks vs Tasks

Some projects use "Subtask" issue types:

  • If metadata shows "Subtask" is available, you can use it for more granular work
  • Subtasks link to parent tasks (not Epics directly)
  • Structure: Epic → Task → Subtasks

Ambiguous Specifications

If the Confluence page lacks detail:

  • Create fewer, broader tickets
  • Note in ticket descriptions: "Detailed requirements need to be defined during refinement"
  • Ask user: "The spec is light on implementation details. Should I create high-level tickets that can be refined later?"

Failed API Calls

If createJiraIssue fails:

  1. Check the error message for specific issues (permissions, required fields, invalid values)
  2. Use getJiraProjectIssueTypesMetadata to verify issue type availability
  3. Inform user: "I encountered an error creating tickets: [error message]. This might be due to project permissions or required fields."

Tips for High-Quality Breakdowns

Be Specific

  • ❌ "Do frontend work"
  • ✅ "Create login form UI with email/password inputs and validation"

Include Technical Context

  • Mention specific technologies when clear from spec
  • Reference components, services, or modules
  • Note integration points

Logical Grouping

  • Related work stays in the same ticket
  • Don't split artificially: "Build user profile page" includes both UI and API integration
  • Do split when different specialties: Separate backend API task from frontend UI task if worked on by different people

Avoid Duplication

  • Don't create redundant tickets for the same functionality
  • If multiple features need the same infrastructure, create one infrastructure ticket they all depend on

Explicit Testing

  • Include testing as part of feature tasks ("Implement X with unit tests")
  • OR create separate testing tasks for complex features ("Write integration tests for authentication flow")

Documentation Tasks

  • For user-facing features: Include "Update user documentation" or "Create help articles"
  • For developer tools: Include "Update API documentation" or "Write integration guide"

Dependencies

  • Note prerequisites in ticket descriptions
  • Use "Depends on" or "Blocks" relationships in Jira if available
  • Sequence tickets logically (infrastructure → implementation → testing)

Examples of Good Breakdowns

Example 1: New Feature - Search Functionality

Epic: Product Search and Filtering

Tickets:

  1. [Task] Design search index schema and data structure
  2. [Task] Implement backend search API with Elasticsearch
  3. [Story] Build search input and results UI components
  4. [Story] Add advanced filtering (price, category, ratings)
  5. [Story] Implement search suggestions and autocomplete
  6. [Task] Optimize search performance and add caching
  7. [Task] Write search integration tests and documentation

Example 2: Bug Fix - Performance Issue

Epic: Resolve Dashboard Load Time Issues

Tickets:

  1. [Task] Profile and identify performance bottlenecks
  2. [Bug] Optimize database queries with indexes and caching
  3. [Bug] Implement lazy loading for dashboard widgets
  4. [Bug] Add pagination to large data tables
  5. [Task] Set up performance monitoring and alerts

Example 3: Infrastructure - CI/CD Pipeline

Epic: Automated Deployment Pipeline

Tickets:

  1. [Task] Set up GitHub Actions workflow configuration
  2. [Task] Implement automated testing in CI pipeline
  3. [Task] Configure staging environment deployment
  4. [Task] Implement blue-green production deployment
  5. [Task] Add deployment rollback mechanism
  6. [Task] Create deployment runbook and documentation

來自 Atlassian 的更多技能

Capture Tasks from Meeting Notes
Atlassian
分析會議記錄以找出待辦事項,並為分配的工作建立 Jira 任務。當 Claude 需要:(1) 從會議記錄建立 Jira 任務或工單,(2) 從筆記或 Confluence 頁面提取或找出待辦事項,(3) 解析會議記錄以找出分配的任務,或 (4) 分析筆記並為團隊成員產生任務。識別負責人、查詢帳號 ID,並在適當的上下文中建立任務。
Generate Status Report
Atlassian
從 Jira 議題產生專案狀態報告並發佈至 Confluence。當 Claude 需要:(1) 為專案建立狀態報告,(2) 總結專案進度或更新,(3) 從 Jira 產生每週/每日報告,(4) 將狀態摘要發佈至 Confluence,或 (5) 分析專案阻礙與完成情況。查詢 Jira 議題,依狀態/優先級分類,並為交付經理與高階主管建立格式化報告。
Search Company Knowledge
Atlassian
搜尋公司知識庫(Confluence、Jira、內部文件),以查找並解釋內部概念、流程與技術細節。當Claude需要:(1) 查找或搜尋關於系統、術語、流程、部署、驗證、基礎設施、架構或技術概念的資訊,(2) 搜尋內部文件、知識庫、公司文件或我們的文件,(3) 解釋某事物的定義、運作方式或查詢資訊,或(4) 綜合多個來源的資訊。會進行平行搜尋並提供附有引用的答案。
Triage Issue
Atlassian
智能分類錯誤回報與錯誤訊息,透過在Jira中搜尋重複項目,並提供建立新問題或對現有問題新增評論的功能。當Claude需要:(1) 分類錯誤回報或錯誤訊息,(2) 檢查問題是否為重複,(3) 尋找相似的歷史問題,(4) 建立附帶適當背景資訊的新錯誤單,或(5) 對現有單據新增資訊時。此功能會搜尋Jira中的相似問題、識別重複項目、檢查修復歷史,並協助建立結構完善的錯誤回報。