Jira MCP Server
Provides tools for interacting with JIRA, enabling fetching sprint tickets, retrieving ticket details, adding comments, linking tickets, updating descriptions, listing child issues, and creating sub-tickets.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Jira MCP Serverlist the active sprint tickets for project ABC"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
JIRA MCP Server
This is a Model Context Protocol (MCP) server that provides tools for interacting with JIRA. It allows you to fetch tickets from active sprints and get detailed ticket information through the MCP interface.
Features
The server provides the following tools:
list-sprint-tickets: Gets all tickets in the active sprint for a given projectRequired parameter:
projectKey(string)
get-ticket-details: Gets detailed information about a specific ticketRequired parameter:
issueKey(string)
add-comment: Adds a comment to a specific ticketRequired parameter:
issueKey(string)Either
comment(string) orfilePath(string) — see Editing content from a fileOptional parameter:
commentFormat—plain(default),wiki,markdownoradf
link-tickets: Links two tickets with a 'relates to' relationshipRequired parameter:
sourceIssueKey(string)Required parameter:
targetIssueKey(string)
update-description: Updates the description of a specific ticketRequired parameter:
issueKey(string)Either
description(string) orfilePath(string) — see Editing content from a fileOptional parameter:
descriptionFormat—plain(default),wiki,markdownoradf
list-child-issues: Gets all child issues of a parent ticketRequired parameter:
parentKey(string)
create-sub-ticket: Creates a sub-ticket (child issue) for a parent ticketRequired parameter:
parentKey(string)Required parameter:
summary(string)Optional parameter:
description(string) orfilePath(string) — see Editing content from a fileOptional parameter:
issueType(string) - The name of the sub-task issue type (e.g., 'Sub-task')
Related MCP server: mcp-jira
Setup
Install dependencies:
npm installBuild the TypeScript code:
This step is only needed for Cline on Windows, which currently has an issue executing npx
npm run buildConfigure the MCP settings in your Claude app settings file (usually located at
~/Library/Application Support/Claude/claude_desktop_config.jsonon macOS or%APPDATA%/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.jsonon Windows):
Settings for Claude:
{
"mcpServers": {
"jira": {
"command": "npx",
"args": ["path/to/this/repo/jira.ts"],
"env": {
"JIRA_HOST": "https://your-domain.atlassian.net",
"JIRA_EMAIL": "your-email@example.com",
"JIRA_API_TOKEN": "your-api-token"
}
}
}
}Settings for Cline:
{
"mcpServers": {
"jira": {
"command": "node",
"args": ["path/to/this/repo/dist/jira.js"],
"env": {
"JIRA_HOST": "https://your-domain.atlassian.net",
"JIRA_EMAIL": "your-email@example.com",
"JIRA_API_TOKEN": "your-api-token"
}
}
}
}Configuration
You'll need to set up the following environment variables in your MCP settings:
JIRA_HOST: Your Atlassian domain URL (e.g.,https://your-company.atlassian.net)JIRA_EMAIL: Your JIRA account emailJIRA_API_TOKEN: Your JIRA API tokenYou can generate an API token from your Atlassian Account Settings
Usage
Once configured, you can use the tools through the MCP interface in Claude:
List Sprint Tickets
To get all tickets in the active sprint for a project:
<use_mcp_tool>
<server_name>jira</server_name>
<tool_name>list-sprint-tickets</tool_name>
<arguments>
{
"projectKey": "YOUR_PROJECT_KEY"
}
</arguments>
</use_mcp_tool>Get Ticket Details
To get detailed information about a specific ticket:
<use_mcp_tool>
<server_name>jira</server_name>
<tool_name>get-ticket-details</tool_name>
<arguments>
{
"issueKey": "PROJECT-123"
}
</arguments>
</use_mcp_tool>Editing content from a file
update-description, update-comment, add-comment, create-ticket and create-sub-ticket
accept filePath instead of inline text. This is meant for long content: keep the source in a
file, edit that file, and re-send — no need to repost the whole body through the tool call each
time. On the two create tools the description stays optional, so omitting both is still fine.
The format is inferred from the extension, so descriptionFormat / commentFormat can be
omitted:
Extension | Format | Content |
|
| Markdown ( |
|
| Jira wiki markup ( |
|
| Raw Atlassian Document Format JSON |
|
| Plain text, wrapped in a paragraph |
Passing the format explicitly overrides the extension, which is also how to use a file with any other extension. Paths are absolute or relative to the server's working directory.
{
"issueKey": "PROJECT-123",
"filePath": "/abs/path/to/description.md"
}An empty file is rejected rather than wiping the existing description or comment, and passing
both the inline text and filePath is an error.
Patching existing content
To change part of a description or comment that already exists, export it first with
export-content, edit the file, and re-upload it — no need to rewrite the whole thing:
{ "issueKey": "PROJECT-123", "commentId": "54660", "filePath": "/tmp/pir-timeline.md" }The export reports whether that content is safe to re-upload as markdown. Jira stores content
as ADF, and constructs such as panels, mentions, status lozenges, media, tables, task lists and
expands have no markdown equivalent — re-uploading markdown would silently drop them. When any
are present the tool warns and lists them; export with "format": "adf" instead and patch the
JSON, which always round-trips exactly (.json files are recognised as ADF on upload).
Omit filePath to get the content back inline instead of writing a file. Comment IDs are shown
by get-ticket-details.
Content versions (optimistic concurrency)
update-description and update-comment require expectedVersion whenever the content being
replaced is not empty: the version the edit was based on. If the content changed in Jira since,
the update is refused instead of silently discarding that change — the same lock Confluence gets
from its page version numbers.
Jira has no version number of its own, and an issue's updated timestamp is not a substitute:
it moves for any change to the issue, so transitions, labels and new comments would all reject
description patches that never conflicted. The version is therefore a hash of the content
itself (v1-…), so it changes exactly when the thing being patched changes.
Versions come from export-content and from get-ticket-details, which reports
Description version: and a version: for every comment — so a small inline edit needs no
export round-trip.
Writing a description for the first time needs no version. Omitting expectedVersion is
itself the assertion "there is nothing here yet", which the server checks: the write goes through
when the description is still empty, and is refused — naming the version now in Jira — when
someone wrote one meanwhile. So the lock covers the first write as well, without the caller
having to fetch the version of empty content.
Pass "force": true to skip the check and overwrite regardless.
Development
The server is written in TypeScript and uses:
@modelcontextprotocol/sdkfor MCP server implementationjira.jsfor JIRA API integration
Recommended scripts:
Build once:
npm run buildBuild and watch:
npm run build:watchType-check only:
npm run typecheckDev run with watch:
npm run start:devRun compiled server:
npm startFormat check:
npm run fmt:checkFormat write:
npm run fmt
Typical workflow:
Make changes to
jira.tsRun
npm run start:devduring development, ornpm run buildthennpm startfor compiled runRestart your MCP client if needed to pick up changes
Error Handling
The server includes error handling for:
Invalid JIRA credentials
Missing active sprints
Invalid project keys or issue keys
Network errors
Error messages will be returned in the tool response.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Connect to Atlassian Jira, Confluence, and Compass to search, create, and manage your work.
Kanban board for teams and coding agents: manage tasks, subtasks, sprints and wiki pages via MCP.
Read and write Mission Control state via MCP — projects, tasks, subtasks, templates, status updates.
Task manager your agent can fully operate: boards, tasks, sprints, roles, worklogs, day planner.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides tools for AI assistants to interact with JIRA APIs, enabling them to read, create, update, and manage JIRA issues through standardized MCP tools.6203MIT
- AlicenseNot gradedqualityCmaintenanceProvides JIRA issue search, retrieval, and update functionalities via MCP.92MIT
- AlicenseNot gradedqualityDmaintenanceEnables natural language interaction with JIRA through MCP, providing 35 tools for issues, comments, transitions, projects, boards, sprints, epics, links, worklogs, versions, attachments, users, and fields.MIT
- FlicenseNot gradedqualityDmaintenanceEnables natural language interaction with Jira Cloud tickets, including listing, searching, creating, and updating issues through a set of MCP tools.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/boukeversteegh/mcp-server-jira'
If you have feedback or need assistance with the MCP directory API, please join our Discord server