jira-issues▌
skillcreatorai/ai-agent-skills · updated Apr 8, 2026
Create and manage Jira issues using the Jira REST API or MCP.
Jira Issue Management
Create and manage Jira issues using the Jira REST API or MCP.
Setup
Option 1: Jira MCP Server
Install the Jira MCP server for seamless integration:
npx @anthropic/create-mcp-server jira
Option 2: Direct API
Set environment variables:
export JIRA_BASE_URL="https://yourcompany.atlassian.net"
export JIRA_EMAIL="your-email@company.com"
export JIRA_API_TOKEN="your-api-token"
Get your API token: https://id.atlassian.com/manage-profile/security/api-tokens
Creating Issues
Basic Issue
import requests
from requests.auth import HTTPBasicAuth
import os
def create_issue(project_key, summary, description, issue_type="Task"):
url = f"{os.environ['JIRA_BASE_URL']}/rest/api/3/issue"
auth = HTTPBasicAuth(
os.environ['JIRA_EMAIL'],
os.environ['JIRA_API_TOKEN']
)
payload = {
"fields": {
"project": {"key": project_key},
"summary": summary,
"description": {
"type": "doc",
"version": 1,
"content": [{
"type": "paragraph",
"content": [{"type": "text", "text": description}]
}]
},
"issuetype": {"name": issue_type}
}
}
response = requests.post(url, json=payload, auth=auth)
return response.json()
# Example
issue = create_issue("PROJ", "Fix login bug", "Users can't login with SSO", "Bug")
print(f"Created: {issue['key']}")
With Labels and Priority
def create_detailed_issue(project_key, summary, description,
issue_type="Task", priority="Medium",
labels=None, assignee=None):
payload = {
"fields": {
"project": {"key": project_key},
"summary": summary,
"description": {
"type": "doc",
"version": 1,
"content": [{
"type": "paragraph",
"content": [{"type": "text", "text": description}]
}]
},
"issuetype": {"name": issue_type},
"priority": {"name": priority},
}
}
if labels:
payload["fields"]["labels"] = labels
if assignee:
payload["fields"]["assignee"] = {"accountId": assignee}
# ... make request
Common Issue Types
| Type | Use For |
|---|---|
| Bug | Something broken |
| Task | Work item |
| Story | User-facing feature |
| Epic | Large initiative |
| Sub-task | Part of larger task |
Updating Issues
Change Status
def transition_issue(issue_key, transition_name):
# Get available transitions
url = f"{JIRA_BASE_URL}/rest/api/3/issue/{issue_key}/transitions"
transitions = requests.get(url, auth=auth).json()
# Find matching transition
transition_id = None
for t in transitions['transitions']:
if t['name'].lower() == transition_name.lower():
transition_id = t['id']
break
# Execute transition
requests.post(url, json={"transition": {"id": transition_id}}, auth=auth)
Add Comment
def add_comment(issue_key, comment_text):
url = f"{JIRA_BASE_URL}/rest/api/3/issue/{issue_key}/comment"
payload = {
"body": {
"type": "doc",
"version": 1,
"content": [{
"type": "paragraph",
"content": [{"type": "text", "text": comment_text}]
}]
}
}
requests.post(url, json=payload, auth=auth)
Searching Issues
JQL Queries
def search_issues(jql):
url = f"{JIRA_BASE_URL}/rest/api/3/search"
params = {"jql": jql, "maxResults": 50}
response = requests.get(url, params=params, auth=auth)
return response.json()['issues']
# Examples
my_bugs = search_issues("project = PROJ AND type = Bug AND assignee = currentUser()")
open_items = search_issues("project = PROJ AND status != Done")
recent = search_issues("project = PROJ AND created >= -7d")
Quick Commands
When user says... create this:
| Command | Action |
|---|---|
| "log bug about X" | Bug issue with description |
| "create task for X" | Task issue |
| "what's on my plate" | JQL: assignee = currentUser() AND status != Done |
| "move X to done" | Transition issue to Done |
| "add comment to X" | Add comment to issue |
Best Practices
- Summary: Keep under 80 chars, start with verb (Fix, Add, Update)
- Description: Include steps to reproduce for bugs
- Labels: Use for categorization (frontend, backend, urgent)
- Links: Reference related issues when relevant
Discussion
Product Hunt–style comments (not star reviews)- No comments yet — start the thread.
Ratings
4.6★★★★★68 reviews- ★★★★★Ganesh Mohane· Dec 28, 2024
Registry listing for jira-issues matched our evaluation — installs cleanly and behaves as described in the markdown.
- ★★★★★Hana Jackson· Dec 28, 2024
Solid pick for teams standardizing on skills: jira-issues is focused, and the summary matches what you get after install.
- ★★★★★Ren Okafor· Dec 24, 2024
jira-issues reduced setup friction for our internal harness; good balance of opinion and flexibility.
- ★★★★★Chinedu Perez· Dec 24, 2024
jira-issues is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
- ★★★★★Sakura Johnson· Dec 4, 2024
I recommend jira-issues for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
- ★★★★★Diego Harris· Nov 23, 2024
Useful defaults in jira-issues — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
- ★★★★★Rahul Santra· Nov 19, 2024
Solid pick for teams standardizing on skills: jira-issues is focused, and the summary matches what you get after install.
- ★★★★★Sakura Robinson· Nov 19, 2024
Registry listing for jira-issues matched our evaluation — installs cleanly and behaves as described in the markdown.
- ★★★★★Fatima Liu· Nov 15, 2024
We added jira-issues from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
- ★★★★★Ama Lopez· Nov 15, 2024
Keeps context tight: jira-issues is the kind of skill you can hand to a new teammate without a long onboarding doc.
showing 1-10 of 68