Help us improve
Share bugs, ideas, or general feedback.
Retrieves, analyzes, and updates Jira tickets using MCP (mcp-atlassian) tools or direct REST API. Supports JQL searches, comments, status transitions, issue creation, and git links.
npx claudepluginhub affaan-m/ecc --plugin eccHow this skill is triggered — by the user, by Claude, or both
Slash command
/everything-claude-code:jira-integrationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Retrieve, analyze, and update Jira tickets directly from your AI coding workflow. Supports both **MCP-based** (recommended) and **direct REST API** approaches.
CLI scripts for searching, creating, updating, transitioning, commenting, logging work, and managing Jira issues, sprints, boards, and more. Auto-triggers on Jira URLs and issue keys.
Views Jira issues, generates branch names from tickets, creates tickets, and transitions status via Atlassian MCP. Activates on ticket key mentions or /jira command.
Manages Jira issues with JQL, Confluence pages with CQL, sprint workflows, and MCP server authentication for Atlassian API integrations.
Share bugs, ideas, or general feedback.
Retrieve, analyze, and update Jira tickets directly from your AI coding workflow. Supports both MCP-based (recommended) and direct REST API approaches.
Install the mcp-atlassian MCP server. This exposes Jira tools directly to your AI agent.
Requirements:
uvx (from uv), installed via your package manager or the official uv installation documentationAdd to your MCP config (e.g., ~/.claude.json → mcpServers):
{
"jira": {
"command": "uvx",
"args": ["mcp-atlassian==0.21.0"],
"env": {
"JIRA_URL": "https://YOUR_ORG.atlassian.net",
"JIRA_EMAIL": "your.email@example.com",
"JIRA_API_TOKEN": "your-api-token"
},
"description": "Jira issue tracking — search, create, update, comment, transition"
}
}
Security: Never hardcode secrets. Prefer setting
JIRA_URL,JIRA_EMAIL, andJIRA_API_TOKENin your system environment (or a secrets manager). Only use the MCPenvblock for local, uncommitted config files.
To get a Jira API token:
If MCP is not available, use the Jira REST API v3 directly via curl or a helper script.
Required environment variables:
| Variable | Description |
|---|---|
JIRA_URL | Your Jira instance URL (e.g., https://yourorg.atlassian.net) |
JIRA_EMAIL | Your Atlassian account email |
JIRA_API_TOKEN | API token from id.atlassian.com |
Store these in your shell environment, secrets manager, or an untracked local env file. Do not commit them to the repo.
When the mcp-atlassian MCP server is configured, these tools are available:
| Tool | Purpose | Example |
|---|---|---|
jira_search | JQL queries | project = PROJ AND status = "In Progress" |
jira_get_issue | Fetch full issue details by key | PROJ-1234 |
jira_create_issue | Create issues (Task, Bug, Story, Epic) | New bug report |
jira_update_issue | Update fields (summary, description, assignee) | Change assignee |
jira_transition_issue | Change status | Move to "In Review" |
jira_add_comment | Add comments | Progress update |
jira_get_sprint_issues | List issues in a sprint | Active sprint review |
jira_create_issue_link | Link issues (Blocks, Relates to) | Dependency tracking |
jira_get_issue_development_info | See linked PRs, branches, commits | Dev context |
Tip: Always call
jira_get_transitionsbefore transitioning — transition IDs vary per project workflow.
curl -s -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
-H "Content-Type: application/json" \
"$JIRA_URL/rest/api/3/issue/PROJ-1234" | jq '{
key: .key,
summary: .fields.summary,
status: .fields.status.name,
priority: .fields.priority.name,
type: .fields.issuetype.name,
assignee: .fields.assignee.displayName,
labels: .fields.labels,
description: .fields.description
}'
curl -s -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
-H "Content-Type: application/json" \
"$JIRA_URL/rest/api/3/issue/PROJ-1234?fields=comment" | jq '.fields.comment.comments[] | {
author: .author.displayName,
created: .created[:10],
body: .body
}'
curl -s -X POST -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"body": {
"version": 1,
"type": "doc",
"content": [{
"type": "paragraph",
"content": [{"type": "text", "text": "Your comment here"}]
}]
}
}' \
"$JIRA_URL/rest/api/3/issue/PROJ-1234/comment"
# 1. Get available transitions
curl -s -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
"$JIRA_URL/rest/api/3/issue/PROJ-1234/transitions" | jq '.transitions[] | {id, name: .name}'
# 2. Execute transition (replace TRANSITION_ID)
curl -s -X POST -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"transition": {"id": "TRANSITION_ID"}}' \
"$JIRA_URL/rest/api/3/issue/PROJ-1234/transitions"
curl -s -G -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
--data-urlencode "jql=project = PROJ AND status = 'In Progress'" \
"$JIRA_URL/rest/api/3/search"
When retrieving a ticket for development or test automation, extract:
Ticket: PROJ-1234
Summary: [ticket title]
Status: [current status]
Priority: [High/Medium/Low]
Test Types: Unit, Integration, E2E
Requirements:
1. [requirement 1]
2. [requirement 2]
Acceptance Criteria:
- [ ] [criterion 1]
- [ ] [criterion 2]
Test Scenarios:
- Happy Path: [description]
- Error Case: [description]
- Edge Case: [description]
Test Data Needed:
- [data item 1]
- [data item 2]
Dependencies:
- [dependency 1]
- [dependency 2]
| Workflow Step | Jira Update |
|---|---|
| Start work | Transition to "In Progress" |
| Tests written | Comment with test coverage summary |
| Branch created | Comment with branch name |
| PR/MR created | Comment with link, link issue |
| Tests passing | Comment with results summary |
| PR/MR merged | Transition to "Done" or "In Review" |
Starting Work:
Starting implementation for this ticket.
Branch: feat/PROJ-1234-feature-name
Tests Implemented:
Automated tests implemented:
Unit Tests:
- [test file 1] — [what it covers]
- [test file 2] — [what it covers]
Integration Tests:
- [test file] — [endpoints/flows covered]
All tests passing locally. Coverage: XX%
PR Created:
Pull request created:
[PR Title](https://github.com/org/repo/pull/XXX)
Ready for review.
Work Complete:
Implementation complete.
PR merged: [link]
Test results: All passing (X/Y)
Coverage: XX%
.env to .gitignore in every project| Error | Cause | Fix |
|---|---|---|
401 Unauthorized | Invalid or expired API token | Regenerate at id.atlassian.com |
403 Forbidden | Token lacks project permissions | Check token scopes and project access |
404 Not Found | Wrong ticket key or base URL | Verify JIRA_URL and ticket key |
spawn uvx ENOENT | IDE cannot find uvx on PATH | Use full path (e.g., ~/.local/bin/uvx) or set PATH in ~/.zprofile |
| Connection timeout | Network/VPN issue | Check VPN connection and firewall rules |