jira-mcp
Provides interaction with the Jira REST API, enabling management of boards, sprints, epics, issues, JQL search, workflow transitions, comments, worklogs, projects, users, and arbitrary Jira REST endpoints on Jira Cloud or Data Center.
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-mcpWhat issues are assigned to me in the active sprint?"
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
An MCP (Model Context Protocol) server that exposes the Jira REST API to AI assistants — boards, sprints, epics, issues, JQL search, workflow transitions, comments, worklogs, projects, users, plus a generic passthrough tool for any Jira REST endpoint.
Works with both Jira Cloud (REST API v3) and Jira Data Center (REST API v2), auto-detected from the base URL.
Install (one-click)
Once published to npm, any MCP client can run it via npx — no local build needed.
Interactive installer (all agents at once)
npx -y @thammarongg/jira-mcp@latest installShows a menu — Select All or pick agents (Claude Code, OpenCode, Codex, Cursor,
Claude Desktop, Gemini CLI) — then asks for the Jira base URL and credentials
(token entry is masked on a TTY). If a selected agent already has a jira
entry, the installer offers to reuse its base URL and account without asking
for the credentials again. Existing config files are backed up to .bak
before any modification, and re-running updates the jira entry in place
instead of duplicating it.
With --yes and no credential flags, a selected existing entry's credentials
are reused without prompting.
Non-interactive (CI / scripting):
# Jira Cloud
npx -y @thammarongg/jira-mcp@latest install --agents all \
--base-url https://your-org.atlassian.net \
--email you@example.com --token xxx --yes
# Jira Data Center (subset of agents)
npx -y @thammarongg/jira-mcp@latest install --agents claude-code,codex \
--base-url https://jira.yourcompany.com \
--username you --token xxx --yesFlags: --agents all or comma-separated ids/numbers (claude-code,
opencode, codex, cursor, claude-desktop, gemini-cli), --base-url,
--email (Cloud) / --username (Data Center), --token (API token or PAT),
--password (DC app password), --yes (skip the confirm prompt).
CLI commands
npx -y @thammarongg/jira-mcp@latest update # refresh configured agents
npx -y @thammarongg/jira-mcp@latest update --agents codex
npx -y @thammarongg/jira-mcp@latest uninstall # choose configured agents interactively
npx -y @thammarongg/jira-mcp@latest uninstall --agents all --yes
npx -y @thammarongg/jira-mcp@latest --version
npx -y @thammarongg/jira-mcp@latest --helpupdate is non-interactive and repairs every existing jira entry from that
agent's own credentials; agents without an entry are skipped. uninstall
removes only the jira entry, preserving the rest of each agent configuration;
it accepts the same --agents selection grammar as install and asks for
confirmation unless --yes is supplied.
Running npx -y @thammarongg/jira-mcp@latest bare in a terminal prints a status card
with the installed version, configured agents, and available commands. MCP
clients pipe stdio, so the same bare command starts the MCP server for them;
it expects JIRA_* environment variables, which is why running it bare
without those variables reports a missing JIRA_BASE_URL.
Claude Code (manual one-liner)
claude mcp add jira --env JIRA_BASE_URL=https://your-org.atlassian.net \
--env JIRA_EMAIL=you@example.com --env JIRA_API_TOKEN=xxx \
-- npx -y @thammarongg/jira-mcp@latest// Claude Desktop / any MCP client (mcpServers)
{
"mcpServers": {
"jira": {
"command": "npx",
"args": ["-y", "@thammarongg/jira-mcp@latest"],
"env": {
"JIRA_BASE_URL": "https://your-org.atlassian.net",
"JIRA_EMAIL": "you@example.com",
"JIRA_API_TOKEN": "xxx"
}
}
}
}// opencode (opencode.json)
{
"mcp": {
"jira": {
"type": "local",
"command": ["npx", "-y", "@thammarongg/jira-mcp@latest"],
"environment": {
"JIRA_BASE_URL": "https://your-org.atlassian.net",
"JIRA_EMAIL": "you@example.com",
"JIRA_API_TOKEN": "xxx"
},
"enabled": true
}
}
}Publishing
npm login
npm publish # prepublishOnly runs build + smoke test firstLocal development (no publish)
npm install
npm run build
# run directly: node dist/index.js (or `npm run dev` via tsx)Configuration (environment variables)
Variable | Required | Description |
| yes |
|
| Cloud | Your Atlassian account email |
| yes | API token (Cloud: id.atlassian.com → Security → API tokens; DC: personal access token) |
| DC | Username (alternative to |
| DC | App password (alternative to |
| no | Force |
| no | Request timeout, default |
Quick auth check:
JIRA_BASE_URL=... JIRA_EMAIL=... JIRA_API_TOKEN=... node dist/index.jsThen call the get_current_user tool from your MCP client — it verifies credentials.
Related MCP server: JIRA MCP Server
Using a local checkout
Prefer not to publish? Point the client at the built file instead of npx —
same env vars as above:
claude mcp add jira --env JIRA_BASE_URL=https://your-org.atlassian.net \
--env JIRA_EMAIL=you@example.com --env JIRA_API_TOKEN=xxx \
-- node /absolute/path/to/jira-mcp/dist/index.js// opencode (opencode.json)
{
"mcp": {
"jira": {
"type": "local",
"command": ["node", "/absolute/path/to/jira-mcp/dist/index.js"],
"environment": {
"JIRA_BASE_URL": "https://your-org.atlassian.net",
"JIRA_EMAIL": "you@example.com",
"JIRA_API_TOKEN": "xxx"
},
"enabled": true
}
}
}Agent skill
A ready-made agent skill (setup + workflow guidance for the tools) ships in
skill/SKILL.md. Install it by copying to your skills
directory:
mkdir -p ~/.claude/skills/jira && cp skill/SKILL.md ~/.claude/skills/jira/
# or for opencode / shared agents:
mkdir -p ~/.agents/skills/jira && cp skill/SKILL.md ~/.agents/skills/jira/Tools
Boards & sprints (Agile + Software APIs)
Tool | Description |
| List boards (filter by type/name/project key or ID) |
| Board details incl. projects |
| Sprints on a board (state: active/closed/future) |
| Sprint details |
| New sprint on a board |
| Rename, reschedule, change goal/state |
| Close a sprint |
| Issues in a sprint (Cloud cursor or DC offset paging) |
| Full UI-like sprint view (board + sprint + issues in one call) |
| Board backlog (Cloud Software enhanced or DC Agile, rank-ordered) |
Epics
Tool | Description |
| Epics on a board (optionally filtered by |
| Read an epic and its children (works on team-managed projects) |
| New epic in a project |
| Add issues to an epic (sets |
| Epic-level issue types available in a project |
Issues
Tool | Description |
| Issue by key |
| Create (supports custom fields) |
| Set fields and/or relative |
| Delete |
| JQL search — enhanced search ( |
| Discover projects/types/required fields (current per-project metadata endpoints) |
| Workflow transitions |
| Assign/unassign |
| Comments (plain text in, auto-converted to ADF on Cloud/v3) |
| Time tracking |
Projects, users, meta
list_projects, get_project, get_project_components, create_project_component, get_project_issue_types, get_project_roles, get_project_versions, get_current_user, find_users, get_user, get_fields, get_issue_types
Escape hatch
Tool | Description |
| Raw call to any |
Typical agent workflow
list_boards→ pick a boardlist_sprints(state: active) → pick a sprintget_sprint_issuesorget_sprint_view→ see the worksearch_issueswith JQL for anything customcreate_issue/transition_issue/add_commentto actAnything else →
jira_api
Rich text and ADF
Jira Cloud REST v3 stores descriptions, comment bodies and worklog comments as
Atlassian Document Format,
not plain strings. Pass plain text to create_issue, create_epic,
update_issue, transition_issue, add_comment and add_worklog — the server
wraps it in ADF when JIRA_API_VERSION is 3, and leaves it alone on v2 (Data
Center), where wiki markup applies. Blank lines start a new paragraph and single
newlines become line breaks; Markdown is not rendered (**bold** shows
literally). Already-built ADF objects are passed through untouched.
Development
npm run dev # run from source via tsx
npm run build # compile to dist/
npm run typecheck # tsc --noEmit
node scripts/smoke.mjs # stdio handshake + tools/list smoke testNotes & limitations
Auth is HTTP Basic (email+token for Cloud, username+token/password for DC) — the standard for Jira REST.
JIRA_BASE_URLmay include a Data Center context path (for examplehttps://jira.example.com/jira); it is retained when resolving/rest/...endpoints.Pagination: most list tools return Jira's native
startAt/maxResults/total; passstartAtto page.Platform routing: Cloud-only enhanced Software reads use
/rest/software/1.0for backlog, sprint issues, and epic issues (cursornextPageToken); Data Center uses the corresponding Agile 1.0 endpoints withstartAt/total.list_boardspasses its project filter as the Agile API's singularprojectKeyOrIdparameter.create_sprintuses the documented top-level AgilePOST /rest/agile/1.0/sprintroute and sends the selected board asoriginBoardId.JQL search on Jira Cloud uses
/rest/api/3/search/jql, since Atlassian removedGET /rest/api/{2,3}/searchon 2025-05-01 (CHANGE-2046 — the old endpoint now returns HTTP 410). Consequences forsearch_issueson Cloud: the JQL must be bounded (include a restriction such asproject,assignee, orkey), the response carries nototal, and paging is by cursor — pass the returnednextPageTokenback and stop whenisLastis true.startAtis rejected there rather than silently ignored, andincludeApproximateTotal: trueadds an approximate match count via/search/approximate-count.Jira Data Center keeps the legacy
/searchendpoint withstartAt/total; if a Cloud site on a custom domain is misdetected as DC, a 410 from/searchtransparently retries against/search/jql.get_issue_create_metacomposes the current per-project and per-issue-type metadata endpoints (/issue/createmeta/{project}/issuetypesand/issue/createmeta/{project}/issuetypes/{issueType}), because the old/issue/createmetaquery form is deprecated on Cloud and removed from Jira Data Center 9.0+. Its output keeps the familiarprojects[].issuetypes[].fieldsshape. PassprojectKeyswhen fields are expanded (the default); omitting it is allowed only withexpand: "projects.issuetypes"for bounded issue-type summaries. Project metadata is fetched with a fixed concurrency of four, and issue-type field metadata is likewise limited to four concurrent requests.get_backlog,get_sprint_issues, andget_epic_issuesuse Cloud's current Software enhanced endpoints with cursor paging; passnextPageTokenfor the next page. Data Center keeps Agile 1.0 andstartAt/total. The older Cloud Agile issue-list endpoints remain available but are deprecated.Rapid view IDs are computed as
boardId * 10^13 + sprintId(Jira's documented convention).Comment bodies use the
bodyfield on both Cloud (v3) and Data Center (v2).User references use
accountIdon API v3/Cloud andnameon API v2/Data Center.get_usercalls/user?accountId=...on v3; the v3 path form/user/{accountId}is not a current endpoint.create_issue'sdueDateinput is sent as Jira'sduedatefield;add_worklogaccepts an optionalstartedtimestamp and Jira defaults it to now when omitted.Epics: the Agile epic API (
/rest/agile/1.0/epic/...) only understands company-managed epics and returns HTTP 400 on team-managed ("next-gen") projects.get_epic,get_epic_issues, andmove_issue_to_epicdetect that and fall back to the issue/search APIs, where an epic is an ordinary issue linked to its children byparent.Jira Data Center exposes platform REST API v2/latest, not
/rest/api/3. LeaveJIRA_API_VERSIONat its default (2) for DC; forcing3against a DC host is unsupported and causes the server to request unavailable/rest/api/3/...routes. Cloud-vs-DC endpoint routing is based on the detected deployment (*.atlassian.netis Cloud), while field representations are based on the selected API version.jira_apipaths must resolve under/rest/— paths that would escape it (e.g. via..segments) are rejected, and?/#must be passed viaquery.
License
MIT © Thammarong G.
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
- AlicenseNot gradedqualityDmaintenanceEnables 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.MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to search, view, create, and update JIRA issues using natural language commands and JQL queries.98Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Jira Cloud issues, supporting create, read, update, delete, search, and transition operations via natural language.28MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to manage Jira projects, issues, sprints, and boards via natural language.98MIT
Related MCP Connectors
Connect to Atlassian Jira, Confluence, and Compass to search, create, and manage your work.
Task manager your agent can fully operate: boards, tasks, sprints, roles, worklogs, day planner.
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/thammarongg/jira-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server