Jira MCP
The Jira MCP server integrates AI assistants with Jira Server/Data Center via REST API v2, enabling full ticket management and more:
Get Ticket (
get_ticket): Retrieve full details of any Jira ticket by its key (e.g. GEM-234).Search Tickets (
search_tickets): Search for tickets using JQL query language, with configurable result limits.Create Ticket (
create_ticket): Create new issues (Story, Task, Bug, Sub-task) with optional fields like description, labels, due date, start date, parent key, and time estimate.Update Ticket (
update_ticket): Modify existing ticket fields including summary, description, issue type, parent, labels, dates, estimate, assignee, priority, and append implementation notes.Transition Ticket (
transition_ticket): Change a ticket's status by target status name (e.g. "In Progress", "Done").Add Comment (
add_comment): Post a plain-text comment to any Jira ticket.Log Work (
log_work): Record time spent on a ticket, with optional start time, comment, and WorklogPRO custom fields.Link Issues (
link_issues): Create directional links between two tickets using types like Blocks, Clones, Relates to, or Duplicate.Generate Release Notes (
generate_release_notes): Produce Markdown-formatted release notes for a fix version, grouped by issue type (Features, Improvements, Bug Fixes, Other), optionally filtered by project.
Provides tools for interacting with Jira Server/Data Center, including reading and writing tickets, searching with JQL, creating, updating, transitioning tickets, adding comments, logging work, linking issues, and generating release notes.
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 MCPGet details for ticket ABC-123"
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
MCP server for Jira Server/Data Center (REST API v2). Lets an AI assistant (Claude Code, Claude Desktop, ...) read and write your Jira directly.
Requirements
A Jira Server/Data Center account (username + password).
Node.js 18+.
Related MCP server: Jira MCP Server
Quick start
Use Claude Code CLI:
claude mcp add g-jira-mcp npx -y g-jira-mcp@latest \
--env JIRA_HOST="https://jira.company.com" \
--env JIRA_USERNAME="your_username" \
--env JIRA_PASSWORD="your_password"Or manually add to .claude/settings.json (or claude_desktop_config.json):
{
"mcpServers": {
"g-jira-mcp": {
"command": "npx",
"args": ["-y", "g-jira-mcp@latest"],
"env": {
"JIRA_HOST": "https://jira.company.com",
"JIRA_USERNAME": "your_username",
"JIRA_PASSWORD": "your_password"
}
}
}
}Restart Claude Code/Desktop after editing the config.
Environment variables
Variable | Required | Description |
| yes | Base URL, e.g. |
| yes | Jira username |
| yes | Jira password |
| no | Custom field ID for "Start date" (default |
| no | Timezone for WorklogPRO form (default |
To discover custom field IDs on your instance:
curl -u user:pass https://jira.company.com/rest/api/2/field | jq '.[] | select(.name | test("story|point|start"; "i")) | {id, name}'Tools
Tool | Description | Key parameters |
| Get full details of a Jira ticket by its key |
|
| Search Jira tickets using JQL query language |
|
| Create a new Jira ticket |
|
| Update fields of a Jira ticket |
|
| Change a Jira ticket's status by name, alias-aware |
|
| Add a comment to a Jira ticket |
|
| Log work (time) on a Jira ticket, optionally setting WorklogPRO Type of Work and Type of Activity |
|
| Create a link between two Jira tickets |
|
| Generate Markdown release notes for a fix version, grouped by issue type |
|
Notes
Jira Server uses plain text for descriptions — no ADF format.
get_ticketomits unset fields rather than printing placeholder text. Key, Summary, Status and Assignee are always present (Assignee shows "Unassigned" when empty); other fields appear only when set. Passinclude_comments=trueto append the ticket's comment thread; comments are off by default to keep output small and save tokens. The same Jira request fetches everything, so including comments costs no extra API call. Comments are capped at 20 most recent; if a ticket has more, the header readsComments (20 most recent of 45):so the caller knows older comments exist and can open the ticket in Jira to see them.search_ticketsoutput is adaptive: empty columns (no value anywhere) are dropped entirely, and constant columns (same value on every row, when there are 3+ rows) are stated once in the header asAll: Status=In Progressand removed from the table. When columns are dropped, the header also notes which ones were empty across all results (e.g.Unset for every row: Priority, Parent, Start Date) so the caller can tell "no ticket has a due date" from "this tool doesn't return due dates". KEY and Summary are always kept. This keeps results focused and token-efficient. The header'sFound N issue(s) (showing M)reports when the result was truncated — raisemax_resultsabove the default 25 to see more.create_ticketandupdate_ticketboth accept anassigneeparameter (Jira username as a string, sent as{name: assignee}). Increate_ticket, an empty assignee value is ignored. Inupdate_ticket, passassignee=""to unassign.create_ticketappliesoriginal_estimatein a follow-up PUT rather than in the create payload: Jira Data Center answers a bare500 Internal server errorwhentimetrackingis present inPOST /issue, while the same value applies cleanly as an update afterwards. The ticket key is reported even if that second call fails, with a warning to set the estimate viaupdate_ticket— so a failed estimate never sends you back to create a duplicate.duedateis a standard field (YYYY-MM-DD); "Start date" is a custom field, configurable viaJIRA_START_DATE_FIELD.search_ticketsuses JQL syntax, e.g.project = GEM AND status = 'In Progress'.transition_ticketresolves the transition ID automatically, matching either the transition's own name ("Resolve Issue") or the status it lands on ("Done"). Common aliases map onto whatever the workflow actually offers (Closed/Resolved/Complete → Done, Reopen → Re-Open, Todo → To Do, Cancelled → Won't Do), so the same call works across workflows with different status names. Exact matches win, then aliases, then a substring fallback. When nothing matches, the error lists every valid option for that issue asTransition -> Target Status; the tool description cannot list them because they vary per issue and workflow.update_ticketonly changes the fields you pass; omit a field to keep its current value. Passassignee=""to unassign.implementation_notesappends to the description. Converting a standard issue type (Story, Task, Bug) to Sub-task or vice versa is a Jira REST API limitation — use the Jira UI "Move" action instead.log_workadvertises one canonical name per work type (code, deploy, design, fix, management, meeting, misc, operation, qa, req, research, translation) and per activity (correct, create, review) so its schema stays small; every alias still works as input (coding, dev, testing, ops, requirement, other, and the rest).activityis required whenwork_typeis set. If neither is set, logs via plain REST (no WorklogPRO form). Start times are interpreted in the Jira server timezone (configurable viaJIRA_TIMEZONE).generate_release_notesgroups tickets by type into Features / Improvements / Bug Fixes / Other.Register the server as
g-jira-mcpand use that key in every project. The key becomes the tool prefix (mcp__g-jira-mcp__get_ticket), so a project that registers it under a different name exposes different tool names — an agent carrying the habit of one name into a project configured with the other getsNo such tool available.Transient Jira failures (429, 500, 502, 503, 504) are retried up to twice with a 250ms/500ms backoff. Only GET, PUT and DELETE are replayed — a POST that returned 500 may already have created the comment, worklog or transition, so it fails fast instead of risking a duplicate.
All logs go to stderr; stdout is reserved for the MCP protocol.
Example prompts
"Search tickets in project GEM that are In Progress"
"Create a Story in GEM titled 'Release notes v2.0' due 2026-08-01"
"Update GEM-234, set the assignee to namcp and add label BugFix"
"Add a comment to GEM-234: 'Review done'"
"Generate release notes for fix version v2.4 in project GEM"
Troubleshooting
401/403: recheck
JIRA_USERNAME/JIRA_PASSWORDand whether the account can access the project.Connection/timeout: verify
JIRA_HOSTformat (starts withhttps://, no trailing/), and whether VPN/internal network is required.Start date not saving: confirm
JIRA_START_DATE_FIELDmatches your instance (see the discovery command above).No error logs: server logs go to stderr — check the MCP client (Claude Code/Desktop) output, not stdout.
Development
pnpm install
cp .env.example .env # edit with your credentials
pnpm build # bundle to dist/index.js via esbuild
pnpm lint # biome check + tsc + prettier (markdown)
pnpm release # release-it: bumps version, commits, tags, pushes (runs lint + build first, no pre-commit needed)
pnpm archive # package release/jira-mcp-v<version>.zipSupport
Questions or issues? Email NamCP.
If this project helps you, consider buying me a coffee:
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 Servers
- Alicense-qualityDmaintenanceEnables AI assistants to interact with Jira Cloud and Server/Data Center deployments for issue management, project tracking, and workflow automation. Supports multiple authentication methods including API tokens, OAuth 2.0, and personal access tokens.Last updatedMIT
- AlicenseAqualityCmaintenanceEnables AI assistants to interact with self-hosted Jira instances for issue management, search, comments, and workflow transitions.Last updated19MIT
- AlicenseAqualityCmaintenanceEnables AI agents to interact with Jira Cloud, including listing boards and issues, adding comments, and searching users.Last updated7583MIT
- Flicense-qualityDmaintenanceEnables AI assistants to query JIRA issues and perform searches using natural language through the JIRA REST API.Last updated1
Related MCP Connectors
Connect to Atlassian Jira, Confluence, and Compass to search, create, and manage your work.
Give AI agents access to form submissions — read, search, update, and process file attachments.
Connect AI assistants to Stellary projects, boards, documents, and governed agent workflows.
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/namcpgem/gem-jira-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server