Jira MCP Server
Create, update, and search Jira issues with JQL from Claude Code or Cursor using an Atlassian API token.
Updated: April 15, 2026
Install
{
"mcpServers": {
"jira-mcp": {
"command": "npx",
"args": [
"-y",
"mcp-server-jira"
],
"env": {
"JIRA_URL": "https://yourorg.atlassian.net",
"JIRA_EMAIL": "you@example.com",
"JIRA_API_TOKEN": "your_token_here"
}
}
}
}Capabilities
- + Create, read, and update Jira issues with summaries, descriptions, and custom fields
- + Transition issue status through the configured workflow
- + Add comments with ADF-formatted content
- + List projects, sprints, boards, and backlog contents
- + Run JQL queries with full filter, sort, and pagination support
- + Assign issues to users by account ID and set priorities and labels
Limitations
- - Requires an Atlassian API token (not a password) and a user email for basic auth
- - Complex JQL queries can time out against large projects
- - No attachment upload support through the MCP tools
- - No Confluence integration; you need a separate MCP server for pages
Jira MCP server setup for Claude Code and Cursor
Quick answer: The Jira MCP server is a Node process that wraps the Jira Cloud REST API as MCP tools. Install with one npx command, paste your Atlassian email, API token, and instance URL into the env block, and Claude Code or Cursor can create, update, and search issues. Setup takes 6 minutes including the token step, tested on server version 0.5.3 against Jira Cloud REST v3 on April 15, 2026.
The Jira MCP server lets your coding agent read and write tickets. Instead of a context switch to the Jira browser tab for every issue check, the agent fetches the ticket, reads the description and comments, and can add its own update in the same turn. For teams that live in Jira, that saves hours a week.
This guide covers installation, editor config, example prompts, and the authentication model Atlassian uses that trips up first-time users.
What this server does
The server exposes about 25 Jira REST endpoints as MCP tools. When Claude wants to read an issue, it calls get_issue by key (e.g. ENG-142). When it wants to run a JQL search, it calls search_issues with a JQL string and pagination options.
Main tool groups:
- Issues:
create_issue,get_issue,update_issue,delete_issue,search_issues - Transitions:
list_transitions,transition_issue - Comments:
add_comment,list_comments - Projects:
list_projects,get_project - Users:
search_users,get_user - Boards and sprints:
list_boards,list_sprints,get_sprint,move_issues_to_sprint - Fields:
list_fields,get_field_options
The server reads the email and token at spawn time and sends them as HTTP Basic auth on every request. The base URL comes from JIRA_URL and points at your Atlassian Cloud instance.
Installing Jira MCP
The package is published as mcp-server-jira. The npx -y prefix fetches on first launch. Cold start is about 2 seconds and pulls roughly 3 MB.
Create an Atlassian API token:
- Open https://id.atlassian.com/manage-profile/security/api-tokens.
- Click "Create API token," name it "Claude Code MCP," and copy the value.
- Note your Atlassian account email and your Jira instance URL (e.g.
https://yourorg.atlassian.net). - The token plus email together replace password auth. Tokens never expire but you can revoke them any time from the same page.
For a Jira Data Center self-hosted instance, the pattern is slightly different - you either use basic auth with a real password (not recommended) or a Personal Access Token from user profile settings. The MCP server accepts both through the same JIRA_API_TOKEN env var.
Configuring for Claude Code
Claude Code reads MCP servers from ~/.claude/mcp.json globally or .mcp.json per project. Add a jira entry with all three env vars:
{
"mcpServers": {
"jira": {
"command": "npx",
"args": ["-y", "mcp-server-jira"],
"env": {
"JIRA_URL": "https://yourorg.atlassian.net",
"JIRA_EMAIL": "you@example.com",
"JIRA_API_TOKEN": "your_token_here"
}
}
}
}
Restart Claude Code. Run /mcp and you should see around 25 tools. Call list_projects as a smoke test - if it returns your project keys, the wiring is correct.
For shared team use, commit a placeholder version of .mcp.json and reference the real token from a shell env var. The token grants all permissions your user has, so rotate it if you change roles.
Configuring for Cursor
Cursor reads from ~/.cursor/mcp.json with the same JSON:
{
"mcpServers": {
"jira": {
"command": "npx",
"args": ["-y", "mcp-server-jira"],
"env": {
"JIRA_URL": "https://yourorg.atlassian.net",
"JIRA_EMAIL": "you@example.com",
"JIRA_API_TOKEN": "your_token_here"
}
}
}
}
Open Cursor settings > MCP and toggle the server on. Cold start is about 2 seconds. API calls average 400 to 800 ms - Jira Cloud's API is noticeably slower than Linear's GraphQL, especially for JQL searches that scan large projects.
Example prompts and workflows
Once the server is attached, Jira is queryable from chat. A few prompts:
- "Find every issue in project
ENGwhere status isIn Progressand assignee is Alice, sorted by last updated." - "Create a bug under
ENGtitledCart total off by 1 cent on EUR orders, link it to epic ENG-200, and set priority High." - "Transition ENG-142 to Done and add a comment summarizing the fix."
- "List all issues in the current sprint for board 7 and group by assignee."
- "Run the JQL
project = ENG AND labels = security-review AND resolution = Unresolvedand show me the top 20."
The model chains calls automatically. Creating a linked issue usually runs list_projects once to confirm the key, then create_issue, then update_issue to add the epic link. Three tool calls for a fully-linked issue.
One pattern that saves time: pass JQL directly when you know it. JQL is Jira's most expressive interface, and a precise JQL string cuts what would be several filter calls down to one.
Troubleshooting
Tool call returns 401 Unauthorized. Your email or token is wrong, or you are hitting a Data Center instance with Cloud credentials. Regenerate the token and double-check the email.
Tool call returns 403 Forbidden. The user lacks the Jira permission for that project or issue type. Ask your Jira admin to grant Browse Project and Edit Issues on the target projects.
JQL query times out. The query scans too many issues. Add a project filter, a date bound, or an indexed field like assignee or status to the JQL. The default timeout is 30 seconds on the Cloud API.
Custom field shows as customfield_10001 instead of its name. The Jira API returns custom fields by internal ID. Call list_fields once and pass the name-to-ID mapping into subsequent tool calls, or ask the agent to look it up before setting a custom value.
Server fails with ENOENT. npx is not on PATH. Launch the editor from a terminal or hardcode npx.
Alternatives
If the Jira server does not fit, a few options exist:
linear-mcpfor teams on Linear, which has a faster GraphQL API and simpler workflow model.github-mcpif your issues are on GitHub Issues rather than Jira.confluence-mcpas a companion for Jira teams that also have Confluence wikis.
For reporting workloads, the Jira API is often slower than a warehouse export. Tools like Atlassian Analytics or a nightly export to BigQuery paired with a BigQuery MCP can outperform direct API calls on anything that scans thousands of issues.
The Jira MCP server is the right default for any team already running on Jira Cloud. Six minutes of setup replaces a lot of browser tab switching, especially for cross-project JQL searches. Keep the token scoped to your own user until you trust the agent's prompts, then rotate to a service account for shared pipelines.
Guides
Frequently asked questions
Does the server work with Jira Data Center or Jira Server?
Yes. Point `JIRA_URL` at your self-hosted instance and use a Personal Access Token (from user profile > Personal Access Tokens) as `JIRA_API_TOKEN`. The email field can be anything - Data Center ignores it when the token is present.
Can I attach files to Jira issues through the server?
Not yet. The current tool set does not include file upload. Use the Jira REST `/issue/{id}/attachments` endpoint directly via a curl MCP, or add the attachment manually in the UI after the agent creates the issue.
How do I stop the agent from transitioning issues to the wrong status?
Jira workflows restrict which transitions are available from a given state. The agent calls `list_transitions` first to see valid options, then `transition_issue` with a chosen ID. Missing transitions get a clear error, which the model can explain back.
Does the server handle rich-text descriptions?
Yes. Descriptions use Atlassian Document Format (ADF) in Jira Cloud. The tool accepts either plain strings (converted to ADF paragraphs) or a raw ADF JSON object for bulleted lists, code blocks, and formatting.
Can I limit the agent to a single project?
Through permissions, yes. Create a service user, give it Browse and Edit Issue on only that project, and mint the API token under its account. The server will return 403 on anything outside the project.
What is the rate limit on Jira Cloud?
Atlassian uses a per-account cost budget that replenishes over time. Roughly 500 requests per 5 minutes per user is the informal ceiling. For bulk operations, ask the agent to paginate with larger page sizes and pause between chunks.