12 KiB
MCP Reference
Complete reference for Atlassian Jira operations via MCP.
MCP Tool Reference
Search Operations
mcp__atlassian__searchJiraIssuesUsingJql
Search Jira using JQL (Jira Query Language).
Parameters:
jql(required): JQL query stringmaxResults: Maximum results (default: 50)startAt: Pagination offsetfields: Comma-separated fields to return
Example:
mcp__atlassian__searchJiraIssuesUsingJql(jql: "project = PROJ AND status = 'In Progress'")
Issue Operations
mcp__atlassian__getJiraIssue
Retrieve full issue details by key.
Parameters:
issueKey(required): Issue key (e.g., "PROJ-123")expand: Additional data (changelog, transitions, renderedFields)
Example:
mcp__atlassian__getJiraIssue(issueKey: "PROJ-123")
mcp__atlassian__createJiraIssue
Create a new issue.
Parameters:
projectKey(required): Target projectissueType(required): Issue type (Story, Bug, Task, Epic, etc.)summary(required): Issue titledescription: Detailed descriptionassignee: Account ID (use lookupJiraAccountId first)priority: Priority name (Highest, High, Medium, Low, Lowest)labels: Array of labelscomponents: Array of component names- Custom fields as needed
Example:
mcp__atlassian__createJiraIssue(
projectKey: "PROJ",
issueType: "Story",
summary: "Implement user authentication",
description: "Add OAuth2 authentication flow...",
labels: ["backend", "security"]
)
mcp__atlassian__editJiraIssue
Update an existing issue.
Parameters:
issueKey(required): Issue to update- Any field to update (summary, description, assignee, etc.)
Example:
mcp__atlassian__editJiraIssue(
issueKey: "PROJ-123",
description: "Updated description with more details..."
)
Transition Operations
mcp__atlassian__getTransitionsForJiraIssue
Get available status transitions for an issue.
Parameters:
issueKey(required): Issue key
Returns: List of available transitions with IDs and names.
mcp__atlassian__transitionJiraIssue
Change issue status.
Parameters:
issueKey(required): Issue keytransitionId(required): Transition ID from getTransitionscomment: Optional comment for the transition
Workflow:
- Get transitions:
getTransitionsForJiraIssue("PROJ-123") - Find desired transition ID from results
- Execute:
transitionJiraIssue(issueKey: "PROJ-123", transitionId: "31")
Comment Operations
mcp__atlassian__addCommentToJiraIssue
Add a comment to an issue.
Parameters:
issueKey(required): Issue keybody(required): Comment text (supports Jira markdown)
User Operations
mcp__atlassian__lookupJiraAccountId
Find user account ID for assignments.
Parameters:
query(required): Search by display name, email, or username
Example:
mcp__atlassian__lookupJiraAccountId(query: "user@example.com")
Usage: Always look up account IDs before assigning issues.
Project Operations
mcp__atlassian__getVisibleJiraProjects
List available Jira projects.
Parameters:
maxResults: Maximum results
mcp__atlassian__getJiraProjectIssueTypesMetadata
Get issue types and required fields for a project.
Parameters:
projectKey(required): Project key
Usage: Call before creating issues to understand required fields.
mcp__atlassian__getJiraIssueTypeMetaWithFields
Get detailed field metadata for an issue type.
Parameters:
projectKey(required): Project keyissueTypeId(required): Issue type ID
JQL (Jira Query Language) Reference
Basic Syntax
field operator value [AND|OR field operator value]
Common Fields
| Field | Description | Example |
|---|---|---|
project |
Project key | project = "PROJ" |
issuetype |
Issue type | issuetype = Bug |
status |
Issue status | status = "In Progress" |
assignee |
Assigned user | assignee = currentUser() |
reporter |
Issue creator | reporter = "jobarksdale" |
priority |
Priority level | priority = High |
labels |
Issue labels | labels = "backend" |
component |
Components | component = "API" |
created |
Creation date | created >= -30d |
updated |
Last update | updated >= -7d |
resolved |
Resolution date | resolved >= startOfMonth() |
sprint |
Sprint name/ID | sprint in openSprints() |
epic |
Parent epic | "Epic Link" = PROJ-100 |
parent |
Parent issue | parent = PROJ-50 |
text |
Full-text search | text ~ "authentication" |
summary |
Title search | summary ~ "login" |
description |
Description search | description ~ "OAuth" |
Operators
| Operator | Meaning | Example |
|---|---|---|
= |
Exact match | status = Done |
!= |
Not equal | status != Closed |
~ |
Contains (text) | summary ~ "auth*" |
!~ |
Does not contain | summary !~ "test" |
> >= < <= |
Comparisons | priority >= High |
IN |
Multiple values | status IN (Open, "In Progress") |
NOT IN |
Exclude values | status NOT IN (Done, Closed) |
IS |
Null check | assignee IS EMPTY |
IS NOT |
Not null | assignee IS NOT EMPTY |
WAS |
Historical value | status WAS "In Progress" |
CHANGED |
Field changed | status CHANGED |
Functions
| Function | Description | Example |
|---|---|---|
currentUser() |
Logged-in user | assignee = currentUser() |
now() |
Current timestamp | created <= now() |
startOfDay() |
Midnight today | updated >= startOfDay() |
startOfWeek() |
Start of week | created >= startOfWeek() |
startOfMonth() |
Start of month | created >= startOfMonth() |
endOfDay() |
End of today | due <= endOfDay() |
openSprints() |
Active sprints | sprint in openSprints() |
closedSprints() |
Completed sprints | sprint in closedSprints() |
linkedIssues() |
Linked issues | issue in linkedIssues("PROJ-123") |
Relative Dates
# Days
created >= -7d # Last 7 days
updated >= -30d # Last 30 days
# Weeks
created >= -2w # Last 2 weeks
# Months
created >= -1M # Last month
# Specific date
created >= "2024-01-01"
Ordering
# Order by priority, highest first
project = PROJ ORDER BY priority DESC
# Multiple sort fields
project = PROJ ORDER BY status ASC, created DESC
Complex Query Examples
# My open issues, high priority
assignee = currentUser() AND status NOT IN (Done, Closed) AND priority >= High
# Bugs created this week
issuetype = Bug AND created >= startOfWeek() ORDER BY priority DESC
# Epics in progress with stories
issuetype = Epic AND status = "In Progress" AND issueFunction in hasLinks("is parent of")
# Issues updated by me recently
updatedBy = currentUser() AND updated >= -7d ORDER BY updated DESC
# Blocked issues
status = Blocked OR "Flagged" = "Impediment"
# Issues linked to specific epic
"Epic Link" = PROJ-100 AND status != Done
# Sprint backlog items
sprint in openSprints() AND status = "To Do" ORDER BY rank ASC
# Unassigned high-priority bugs
issuetype = Bug AND assignee IS EMPTY AND priority >= High
# Issues I'm watching
watcher = currentUser()
# Recently resolved by team
resolved >= -7d AND project = PROJ ORDER BY resolved DESC
Issue Linking
Limitation
The Atlassian MCP does not currently support creating issue links. Use the bundled jira-link-issues script instead.
Link Types
| Link Type | Inward | Outward | Use Case |
|---|---|---|---|
| Depends On | is dependency of | depends on | Task dependencies |
| Blocks | is blocked by | blocks | Blocking relationships |
| Relates To | relates to | relates to | General relationships |
| Clones | is cloned by | clones | Cloned issues |
| Duplicates | is duplicated by | duplicates | Duplicate issues |
Script Usage
# Link PROJ-123 depends on PROJ-456
~/.claude/skills/jira/jira-link-issues PROJ-123 PROJ-456 "Depends On"
# PROJ-100 blocks PROJ-200
~/.claude/skills/jira/jira-link-issues PROJ-100 PROJ-200 "Blocks"
# General relationship
~/.claude/skills/jira/jira-link-issues PROJ-50 PROJ-75 "Relates To"
Finding Link Types
Query the Jira API to get available link types:
curl -s -u "$JIRA_USER:$JIRA_API_TOKEN" \
"$JIRA_BASE_URL/rest/api/3/issueLinkType" | jq '.issueLinkTypes[].name'
Required environment variables:
JIRA_BASE_URL: Your Atlassian instance (e.g.,https://yourcompany.atlassian.net)JIRA_USER: Your email addressJIRA_API_TOKEN: API token from Atlassian account settings
Description Formatting
Jira Markup (Wiki Style)
h1. Heading 1
h2. Heading 2
h3. Heading 3
*bold text*
_italic text_
-strikethrough-
+underline+
{code:java}
public class Example {
// code here
}
{code}
{quote}
Quoted text here
{quote}
* Bullet list
** Nested bullet
# Numbered list
## Nested number
[Link text|https://example.com]
[Issue link|PROJ-123]
||Header 1||Header 2||
|Cell 1|Cell 2|
{panel:title=Panel Title}
Panel content here
{panel}
Atlassian Document Format (ADF)
For createJiraIssue, descriptions may use ADF format:
{
"type": "doc",
"version": 1,
"content": [
{
"type": "paragraph",
"content": [
{"type": "text", "text": "Description text"}
]
}
]
}
Error Handling
Common Errors
| HTTP Code | Error | Cause | Resolution |
|---|---|---|---|
| 400 | Bad Request | Invalid field values | Check required fields for issue type |
| 401 | Unauthorized | Invalid credentials | Run /mcp to reconnect |
| 403 | Forbidden | Insufficient permissions | Check project permissions |
| 404 | Not Found | Issue/project doesn't exist | Verify key is correct |
| 422 | Unprocessable | Validation failed | Check field constraints |
Authentication Issues
If MCP tools return authentication errors:
- Run
/mcpto check connection status - Reconnect the Atlassian MCP service if disconnected
- Verify API token permissions in Atlassian settings
Field Validation
Before creating issues:
- Get project metadata:
getJiraProjectIssueTypesMetadata - Check required fields for the issue type
- Look up user account IDs for assignee fields
- Verify custom field IDs and valid values
Common Workflows
Move Ticket to Done
1. Get available transitions:
mcp__atlassian__getTransitionsForJiraIssue(issueKey: "PROJ-123")
→ Returns list with transition IDs
2. Find "Done" transition ID from response
3. Execute transition:
mcp__atlassian__transitionJiraIssue(
issueKey: "PROJ-123",
transitionId: "done_id"
)
4. Add comment:
mcp__atlassian__addCommentToJiraIssue(
issueKey: "PROJ-123",
body: "Completed and deployed"
)
Create and Assign Issue
1. Look up user account ID:
mcp__atlassian__lookupJiraAccountId(query: "john@example.com")
→ Returns account ID
2. Create issue with assignment:
mcp__atlassian__createJiraIssue(
projectKey: "PROJ",
issueType: "Task",
summary: "Implement feature X",
description: "Details here...",
assignee: "account_id_from_step_1"
)
List My In-Progress Issues
mcp__atlassian__searchJiraIssuesUsingJql(
jql: "assignee = currentUser() AND status = 'In Progress' ORDER BY updated DESC"
)
Get Project Info Before Creating
1. List available projects:
mcp__atlassian__getVisibleJiraProjects()
2. Get issue types for project:
mcp__atlassian__getJiraProjectIssueTypesMetadata(projectKey: "PROJ")
3. Create issue with correct type:
mcp__atlassian__createJiraIssue(
projectKey: "PROJ",
issueType: "Story",
summary: "...",
description: "..."
)