loading…
Search for a command to run...
loading…
MCP server for Jira API integration - supports Jira Cloud
MCP server for Jira API integration - supports Jira Cloud
A Model Context Protocol (MCP) server for Jira API integration. This server enables AI assistants like Claude to interact with Jira Cloud instances for issue management, search, comments, workflow transitions, and attachment handling.
parent hierarchy fieldnpm install -g @nexus2520/jira-mcp-server
Clone the repository:
git clone https://github.com/pdogra1299/jira-mcp-server.git
cd jira-mcp-server
Install dependencies:
pnpm install
Build the project:
pnpm run build
JIRA_EMAIL: Your Atlassian account emailJIRA_API_TOKEN: Your Jira API tokenJIRA_BASE_URL: Your Jira instance URL (e.g., https://yourcompany.atlassian.net)Add the following to your Claude Desktop MCP settings file:
Location:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.jsonConfiguration (if installed via npm):
{
"mcpServers": {
"jira": {
"command": "npx",
"args": [
"-y",
"@nexus2520/jira-mcp-server"
],
"env": {
"JIRA_EMAIL": "[email protected]",
"JIRA_API_TOKEN": "your-api-token-here",
"JIRA_BASE_URL": "https://yourcompany.atlassian.net"
}
}
}
}
Configuration (if built from source):
{
"mcpServers": {
"jira": {
"command": "node",
"args": [
"/absolute/path/to/jira-mcp-server/build/index.js"
],
"env": {
"JIRA_EMAIL": "[email protected]",
"JIRA_API_TOKEN": "your-api-token-here",
"JIRA_BASE_URL": "https://yourcompany.atlassian.net"
}
}
}
}
This server exposes 6 compound tools — each with an action parameter that selects the operation. This design reduces the token overhead of tool definitions by ~50% compared to 17+ flat tools, leaving more context for actual work.
| Tool | Actions | Description |
|---|---|---|
jira_issues |
get create update assign |
Full issue lifecycle management |
jira_search |
issues projects users create_metadata |
Search and discovery |
jira_comments |
get add |
Read and write comments |
jira_workflow |
get_transitions transition |
Status transitions |
jira_attachments |
list get_content upload delete |
File attachments |
jira_links |
list add remove get_link_types |
Issue link relationships |
jira_issuesManage the full lifecycle of Jira issues.
Required: action
| Action | Description | Required params | Optional params |
|---|---|---|---|
get |
Fetch full issue details | issueKey |
— |
create |
Create a new issue | projectKey, summary, issueType |
description, priority, assignee, labels, customFields |
update |
Edit fields on an existing issue | issueKey |
summary, description, priority, assignee, labels, customFields |
assign |
Set or clear the assignee | issueKey, assignee |
— |
Tips:
jira_search with action=create_metadata before creating issues to discover required custom fields and allowed values.assignee: "-1" to unassign an issue.description accepts plain text or an Atlassian Document Format (ADF) object.customFields is a key-value map: {"customfield_10000": "value"}.Examples:
Get details for PROJ-123
Create a Bug in project PROJ with summary "Login button broken"
Update PROJ-123 priority to High
Assign PROJ-123 to [email protected]
jira_searchSearch and discover Jira resources.
Required: action
| Action | Description | Required params | Optional params |
|---|---|---|---|
issues |
Search issues via JQL | jql |
maxResults, fields |
projects |
List all accessible projects | — | maxResults |
users |
Find users by name or email | query |
maxResults |
create_metadata |
Get field requirements for creating issues | projectKey |
issueType |
Common JQL examples:
project = PROJ AND status = Open
assignee = currentUser() AND status != Done
priority = High AND created >= -7d
Tips:
create_metadata before jira_issues create to understand what fields are required for a project/issue type.users to look up account IDs for assignments — pass the returned account ID or email to jira_issues assign.fields (for issues) controls which JIRA fields are fetched per result — e.g. ["summary","status","priority","duedate","assignee"]. Defaults to ["summary"].Structured output: the issues action and jira_issues get return a structuredContent JSON payload alongside the markdown, so programmatic consumers can read fields directly without parsing markdown. For issues it is { jql, count, isLast, nextPageToken, issues: [{ key, id, self, fields }] }.
jira_commentsRead and write comments on a Jira issue.
Required: action, issueKey
| Action | Description | Required params |
|---|---|---|
get |
Fetch all comments on an issue | — |
add |
Post a new comment | comment |
comment accepts plain text or an ADF object.
Examples:
Get all comments on PROJ-123
Add a comment to PROJ-123: "Fixed in PR #456"
jira_workflowManage issue status transitions.
Required: action, issueKey
| Action | Description | Required params | Optional params |
|---|---|---|---|
get_transitions |
List available status transitions | — | — |
transition |
Move issue to a new status | transitionId |
comment |
Tip: Always call get_transitions first — transition IDs vary per project and issue type. The transitionId from the response is what you pass to transition.
Examples:
Get available transitions for PROJ-123
Move PROJ-123 to "In Progress" (use get_transitions first to find the ID)
jira_attachmentsManage file attachments on Jira issues.
Required: action
| Action | Description | Required params | Optional params |
|---|---|---|---|
list |
List all attachments with metadata | issueKey |
— |
get_content |
Download and return file content | attachmentId |
mimeType |
upload |
Attach a local file to an issue | issueKey, filePath |
fileName |
delete |
Remove an attachment by ID | attachmentId |
— |
Content types returned by get_content:
text/*, application/json, application/xml): returned as readable textimage/*): returned as base64 — Claude will render them inlineTips:
list first to get attachment IDs before calling get_content or delete.fileName in upload overrides the filename shown in Jira (defaults to the file's basename).Examples:
List attachments on PROJ-123
Get the content of attachment 136904
Upload /tmp/report.pdf to PROJ-123
Delete attachment 136904
jira_linksManage relationships between issues independently of Jira's project hierarchy config — useful when you need to associate a Bug with a Story but the project doesn't allow Bug → Story as a parent-child relationship.
Required: action
| Action | Description | Required params | Optional params |
|---|---|---|---|
get_link_types |
List available link type names for this Jira instance | — | — |
add |
Create a link between two issues | issueKey, linkedIssueKey, linkType |
direction |
list |
List all links on an issue, with link IDs | issueKey |
— |
remove |
Delete a link by ID | linkId |
— |
Link direction:
Relates, Duplicate): direction doesn't matter.Blocks, Cloners, Causes): direction: outward means issueKey is the outward side (e.g. issueKey blocks linkedIssueKey); direction: inward means issueKey is the inward side (e.g. issueKey is blocked by linkedIssueKey). Defaults to outward.Tips:
get_link_types first — link type names vary per Jira instance config.list to find a linkId before calling remove.Examples:
List the link types available in Jira
Link PROJ-1 to PROJ-2 as Relates
Mark PROJ-1 as blocking PROJ-2
List all links on PROJ-1
Remove link 10042
This server uses the Jira REST API v3.
Make sure you've set the environment variables in your MCP configuration.
JIRA_BASE_URL doesn't have a trailing slashThe API token uses the permissions of the user who created it. Make sure your account has the necessary permissions for the actions you're trying to perform.
MIT
Parth Dogra
Feel free to open issues or submit pull requests for improvements!
Run in your terminal:
claude mcp add jira-mcp-server --env JIRA_API_TOKEN="" --env JIRA_BASE_URL="" --env JIRA_EMAIL="" -- npx -y @nexus2520/jira-mcp-serverpro tip
Just installed Jira Mcp Server? Say to Claude: "remember why I installed Jira Mcp Serverand what I want to try" — it'll save into your Vault.
how this works →CSA PROJECT - FZCO © 2026 IFZA Business Park, DDP, Premises Number 31174 - 001
Security
Review before useWill ask for:
JIRA_API_TOKENJIRA_BASE_URLAutomated heuristic from public metadata — not a security guarantee.