Create Jira Epics, Stories, and Issues directly from your spec-kit specifications and task breakdowns.
# From within a spec-kit project
specify extension add jira
# Or install from local development directory
specify extension add --dev /path/to/spec-kit-jira
Edit .specify/extensions/jira/jira-config.yml:
# MCP server providing Jira tools (default: "atlassian")
mcp_server: "atlassian"
project:
key: "MYPROJECT" # Replace with your Jira project key
claude
> /speckit.jira.discover-fields
This will show all available custom fields in your Jira instance and generate configuration snippets.
# .specify/extensions/jira/jira-config.yml
project:
key: "PROJ"
mapping:
spec_artifact: "Epic" # Issue type for SPEC.md
phase_artifact: "Story" # Issue type for Phase headers
task_artifact: "Task" # Issue type for tasks (set to "" for 2-level mode)
relationships:
spec_phase: "Epic Link" # How Phase links to Spec
phase_task: "Relates" # How Task links to Phase
spec_task: "Epic Link" # Direct Task-Spec link
defaults:
spec:
labels: ["spec-driven", "automated"]
custom_fields: {}
phase:
labels: []
custom_fields: {}
task:
labels: ["implementation"]
custom_fields:
customfield_10002: 2 # Story points
After creating SPEC.md and TASKS.md with spec-kit:
claude
> /speckit.jira.specstoissues
This will:
specs/<spec-name>/spec.mdspecs/<spec-name>/tasks.md (e.g., ## Phase 1: ...)- [ ] T001 ...)specs/<spec-name>/jira-mapping.jsonHierarchy Modes:
task_artifact: ""): Spec → Phases with task checklists embedded in descriptionsTo specify a particular spec:
> /speckit.jira.specstoissues --spec 005-python-endpoint-alignment
claude
> /speckit.jira.discover-fields
Outputs:
After completing tasks locally, sync status to Jira:
claude
> /speckit.jira.sync-status
This will:
/speckit.jira.specstoissuesCreate complete Jira issue hierarchy from spec and tasks.
Arguments:
--spec <name> (optional): Specification name to use. Auto-detects if not provided.Prerequisites:
specs/<spec-name>/spec.md file exists in the specification directorytasks.md file exists in the specification directoryOutput:
specs/<spec-name>/jira-mapping.json/speckit.jira.discover-fieldsDiscover available custom fields in Jira instance.
Prerequisites:
Output:
.specify/extensions/jira/discovered-fields.json/speckit.jira.sync-statusSync local task completion to Jira.
Arguments:
--spec <name> (optional): Specification name to sync. Auto-detects if not provided.Prerequisites:
/speckit.jira.specstoissuesspecs/<spec-name>/jira-mapping.jsontasks.md has completion markersOutput:
specs/<spec-name>/jira-sync-log.json# .specify/extensions/jira/jira-config.yml
# MCP Server Configuration
mcp_server: "atlassian" # or "jira-mcp-server", "jira", etc.
# Jira Project Configuration
project:
key: "PROJ"
# Artifact Mapping
mapping:
# Issue types to create
spec_artifact: "Epic" # Issue type for SPEC.md
phase_artifact: "Story" # Issue type for Phase headers in TASKS.md
task_artifact: "Task" # Issue type for task items
# Set to "" or "none" for 2-level mode (Spec → Phases only)
# Relationships between issues
# Options: "Parent", "Epic Link", "Relates", "Blocks", "Implements", "is child of", "none"
relationships:
spec_phase: "Epic Link" # How Phase connects to Spec
phase_task: "Relates" # How Task connects to Phase
spec_task: "Epic Link" # Direct Task-to-Spec link
# Default Values
defaults:
spec:
labels: ["spec-driven", "microservice"]
custom_fields:
customfield_10001: "Sprint 1"
phase:
labels: []
custom_fields: {}
task:
labels: ["implementation"]
custom_fields:
customfield_10002: 2 # Story points
# Field Mappings (discovered via /speckit.jira.discover-fields)
field_mappings:
spec_version: "customfield_10005"
team: "customfield_10006"
# Status Mapping for sync-status command
status_mapping:
completed: "Done" # [x] in TASKS.md
pending: "To Do" # [ ] in TASKS.md
in_progress: "In Progress" # [~] in TASKS.md (optional)
# Override MCP server name
export SPECKIT_JIRA_MCP_SERVER="atlassian"
# Override project key
export SPECKIT_JIRA_PROJECT_KEY="DEVTEST"
# Override artifact types
export SPECKIT_JIRA_SPEC_ARTIFACT="Epic"
export SPECKIT_JIRA_PHASE_ARTIFACT="Story"
export SPECKIT_JIRA_TASK_ARTIFACT="Task"
# Override relationships
export SPECKIT_JIRA_SPEC_PHASE_RELATIONSHIP="Epic Link"
export SPECKIT_JIRA_PHASE_TASK_RELATIONSHIP="Relates"
export SPECKIT_JIRA_SPEC_TASK_RELATIONSHIP="Epic Link"
Create .specify/extensions/jira/jira-config.local.yml for local testing:
project:
key: "MYTEST" # Override for local development
Mark tasks in TASKS.md using checkbox syntax:
| Marker | Status | Jira Status (default) |
|---|---|---|
- [x] | Completed | Done |
- [ ] | Pending | To Do |
- [~] | In Progress | In Progress |
Example:
# Tasks
## Phase 1: Authentication
- [x] T001: Implement login endpoint
- [~] T002: Add session management
- [ ] T003: Write authentication tests
## Phase 2: Error Handling
- [ ] T004: Add global error handler
- [ ] T005: Implement retry logic
Configure status mappings in jira-config.yml:
status_mapping:
completed: "Done"
pending: "To Do"
in_progress: "In Progress"
Solution: Run specify extension add jira to install the extension and create config template.
Solution: Edit .specify/extensions/jira/jira-config.yml and set project.key.
Solution: Ensure your MCP server providing Jira tools is configured in your AI agent's MCP settings, and verify the mcp_server name in jira-config.yml matches.
Solution: Verify your Jira credentials and project permissions in your MCP server configuration.
Solution:
/speckit.jira.discover-fields to find correct field IDs# Minimal configuration
project:
key: "DEMO"
Then:
> /speckit.jira.specstoissues
project:
key: "PROJ"
mapping:
spec_artifact: "Epic"
phase_artifact: "Story"
task_artifact: "Task"
relationships:
spec_phase: "Epic Link"
phase_task: "Relates"
spec_task: "Epic Link"
defaults:
task:
custom_fields:
customfield_10002: 3 # Story points
customfield_10004: "Backend Team"
project:
key: "SIMPLE"
mapping:
spec_artifact: "Epic"
phase_artifact: "Story"
task_artifact: "" # Empty = 2-level mode, tasks embedded as checklists
defaults:
phase:
labels: ["auto-generated"]
# 1. Create spec and tasks
> /speckit.spec
> /speckit.tasks
# 2. Discover Jira fields
> /speckit.jira.discover-fields
# 3. Configure jira-config.yml
# (edit file)
# 4. Create Jira issues
> /speckit.jira.specstoissues
# 5. Implement tasks locally
# (mark tasks complete in TASKS.md)
# 6. Sync status to Jira
> /speckit.jira.sync-status
spec-kit-jira/
├── README.md
├── LICENSE
├── CHANGELOG.md
├── extension.yml # Extension manifest
├── jira-config.template.yml # Config template
├── commands/
│ ├── specstoissues.md
│ ├── discover-fields.md
│ └── sync-status.md
└── docs/
└── examples/
# Install in development mode
cd /path/to/your/project
specify extension add --dev /path/to/spec-kit-jira
# Make changes to extension
# Commands automatically reload
# Remove and reinstall to test install flow
specify extension remove jira
specify extension add --dev /path/to/spec-kit-jira
MIT License - see LICENSE file
Contributions welcome! Please:
Create Jira Epics, Stories, and Issues directly from your spec-kit specifications and task breakdowns.
# From within a spec-kit project
specify extension add jira
# Or install from local development directory
specify extension add --dev /path/to/spec-kit-jira
Edit .specify/extensions/jira/jira-config.yml:
# MCP server providing Jira tools (default: "atlassian")
mcp_server: "atlassian"
project:
key: "MYPROJECT" # Replace with your Jira project key
claude
> /speckit.jira.discover-fields
This will show all available custom fields in your Jira instance and generate configuration snippets.
# .specify/extensions/jira/jira-config.yml
project:
key: "PROJ"
mapping:
spec_artifact: "Epic" # Issue type for SPEC.md
phase_artifact: "Story" # Issue type for Phase headers
task_artifact: "Task" # Issue type for tasks (set to "" for 2-level mode)
relationships:
spec_phase: "Epic Link" # How Phase links to Spec
phase_task: "Relates" # How Task links to Phase
spec_task: "Epic Link" # Direct Task-Spec link
defaults:
spec:
labels: ["spec-driven", "automated"]
custom_fields: {}
phase:
labels: []
custom_fields: {}
task:
labels: ["implementation"]
custom_fields:
customfield_10002: 2 # Story points
After creating SPEC.md and TASKS.md with spec-kit:
claude
> /speckit.jira.specstoissues
This will:
specs/<spec-name>/spec.mdspecs/<spec-name>/tasks.md (e.g., ## Phase 1: ...)- [ ] T001 ...)specs/<spec-name>/jira-mapping.jsonHierarchy Modes:
task_artifact: ""): Spec → Phases with task checklists embedded in descriptionsTo specify a particular spec:
> /speckit.jira.specstoissues --spec 005-python-endpoint-alignment
claude
> /speckit.jira.discover-fields
Outputs:
After completing tasks locally, sync status to Jira:
claude
> /speckit.jira.sync-status
This will:
/speckit.jira.specstoissuesCreate complete Jira issue hierarchy from spec and tasks.
Arguments:
--spec <name> (optional): Specification name to use. Auto-detects if not provided.Prerequisites:
specs/<spec-name>/spec.md file exists in the specification directorytasks.md file exists in the specification directoryOutput:
specs/<spec-name>/jira-mapping.json/speckit.jira.discover-fieldsDiscover available custom fields in Jira instance.
Prerequisites:
Output:
.specify/extensions/jira/discovered-fields.json/speckit.jira.sync-statusSync local task completion to Jira.
Arguments:
--spec <name> (optional): Specification name to sync. Auto-detects if not provided.Prerequisites:
/speckit.jira.specstoissuesspecs/<spec-name>/jira-mapping.jsontasks.md has completion markersOutput:
specs/<spec-name>/jira-sync-log.json# .specify/extensions/jira/jira-config.yml
# MCP Server Configuration
mcp_server: "atlassian" # or "jira-mcp-server", "jira", etc.
# Jira Project Configuration
project:
key: "PROJ"
# Artifact Mapping
mapping:
# Issue types to create
spec_artifact: "Epic" # Issue type for SPEC.md
phase_artifact: "Story" # Issue type for Phase headers in TASKS.md
task_artifact: "Task" # Issue type for task items
# Set to "" or "none" for 2-level mode (Spec → Phases only)
# Relationships between issues
# Options: "Parent", "Epic Link", "Relates", "Blocks", "Implements", "is child of", "none"
relationships:
spec_phase: "Epic Link" # How Phase connects to Spec
phase_task: "Relates" # How Task connects to Phase
spec_task: "Epic Link" # Direct Task-to-Spec link
# Default Values
defaults:
spec:
labels: ["spec-driven", "microservice"]
custom_fields:
customfield_10001: "Sprint 1"
phase:
labels: []
custom_fields: {}
task:
labels: ["implementation"]
custom_fields:
customfield_10002: 2 # Story points
# Field Mappings (discovered via /speckit.jira.discover-fields)
field_mappings:
spec_version: "customfield_10005"
team: "customfield_10006"
# Status Mapping for sync-status command
status_mapping:
completed: "Done" # [x] in TASKS.md
pending: "To Do" # [ ] in TASKS.md
in_progress: "In Progress" # [~] in TASKS.md (optional)
# Override MCP server name
export SPECKIT_JIRA_MCP_SERVER="atlassian"
# Override project key
export SPECKIT_JIRA_PROJECT_KEY="DEVTEST"
# Override artifact types
export SPECKIT_JIRA_SPEC_ARTIFACT="Epic"
export SPECKIT_JIRA_PHASE_ARTIFACT="Story"
export SPECKIT_JIRA_TASK_ARTIFACT="Task"
# Override relationships
export SPECKIT_JIRA_SPEC_PHASE_RELATIONSHIP="Epic Link"
export SPECKIT_JIRA_PHASE_TASK_RELATIONSHIP="Relates"
export SPECKIT_JIRA_SPEC_TASK_RELATIONSHIP="Epic Link"
Create .specify/extensions/jira/jira-config.local.yml for local testing:
project:
key: "MYTEST" # Override for local development
Mark tasks in TASKS.md using checkbox syntax:
| Marker | Status | Jira Status (default) |
|---|---|---|
- [x] | Completed | Done |
- [ ] | Pending | To Do |
- [~] | In Progress | In Progress |
Example:
# Tasks
## Phase 1: Authentication
- [x] T001: Implement login endpoint
- [~] T002: Add session management
- [ ] T003: Write authentication tests
## Phase 2: Error Handling
- [ ] T004: Add global error handler
- [ ] T005: Implement retry logic
Configure status mappings in jira-config.yml:
status_mapping:
completed: "Done"
pending: "To Do"
in_progress: "In Progress"
Solution: Run specify extension add jira to install the extension and create config template.
Solution: Edit .specify/extensions/jira/jira-config.yml and set project.key.
Solution: Ensure your MCP server providing Jira tools is configured in your AI agent's MCP settings, and verify the mcp_server name in jira-config.yml matches.
Solution: Verify your Jira credentials and project permissions in your MCP server configuration.
Solution:
/speckit.jira.discover-fields to find correct field IDs# Minimal configuration
project:
key: "DEMO"
Then:
> /speckit.jira.specstoissues
project:
key: "PROJ"
mapping:
spec_artifact: "Epic"
phase_artifact: "Story"
task_artifact: "Task"
relationships:
spec_phase: "Epic Link"
phase_task: "Relates"
spec_task: "Epic Link"
defaults:
task:
custom_fields:
customfield_10002: 3 # Story points
customfield_10004: "Backend Team"
project:
key: "SIMPLE"
mapping:
spec_artifact: "Epic"
phase_artifact: "Story"
task_artifact: "" # Empty = 2-level mode, tasks embedded as checklists
defaults:
phase:
labels: ["auto-generated"]
# 1. Create spec and tasks
> /speckit.spec
> /speckit.tasks
# 2. Discover Jira fields
> /speckit.jira.discover-fields
# 3. Configure jira-config.yml
# (edit file)
# 4. Create Jira issues
> /speckit.jira.specstoissues
# 5. Implement tasks locally
# (mark tasks complete in TASKS.md)
# 6. Sync status to Jira
> /speckit.jira.sync-status
spec-kit-jira/
├── README.md
├── LICENSE
├── CHANGELOG.md
├── extension.yml # Extension manifest
├── jira-config.template.yml # Config template
├── commands/
│ ├── specstoissues.md
│ ├── discover-fields.md
│ └── sync-status.md
└── docs/
└── examples/
# Install in development mode
cd /path/to/your/project
specify extension add --dev /path/to/spec-kit-jira
# Make changes to extension
# Commands automatically reload
# Remove and reinstall to test install flow
specify extension remove jira
specify extension add --dev /path/to/spec-kit-jira
MIT License - see LICENSE file
Contributions welcome! Please: