jira-mcp
Provides read-only access to Jira, enabling retrieval of issue details, comments, issue context (parent, subtasks, linked issues, epic children), JQL search results, and account verification.
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 issue PROJ-123 with comments"
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 (read-only)
A local MCP server that lets Claude Code pull Jira ticket context (issue details, comment threads, the reference graph around a ticket, and JQL search results) rendered as compact Markdown. Image attachments (e.g. the screenshot on a UI bug ticket) can be fetched for Claude to analyze visually.
What it deliberately cannot do
This server is strictly read-only. It exposes no tool that creates, updates, transitions, deletes, or comments on anything. Enforcement is layered:
In code: every HTTP request funnels through a single helper that only permits
GET, with one allowlisted exception:POST /rest/api/3/search/jql, a read operation that Atlassian requires be sent as POST. Any other method raisesReadOnlyViolationError, so a future edit that adds a write call fails loudly.At the credential level: create the API token with only read scopes (below), so even a bug could not write.
Related MCP server: JIRA MCP Server
Tools
Tool | Purpose |
| Full ticket detail including all non-empty custom fields (acceptance criteria, story points, ...) with their display names, plus (by default) the comment thread |
| Just the discussion, with author/timestamp/edited/visibility |
| Parent, subtasks, linked issues (with link direction), and epic children, each as key + type + status + summary |
| Compact JQL search results |
| Downloads an image attachment (listed by |
| Which account the token resolves to; the first stop for auth debugging |
Setup
1. Create an Atlassian API token
Go to https://id.atlassian.com/manage-profile/security/api-tokens.
Choose Create API token with scopes (Atlassian is deprecating unscoped tokens).
Select the Jira app and pick only these scopes:
read:jira-workread:jira-user
Copy the token immediately; it is shown only once.
An older unscoped token also works; the server handles both automatically (see below).
2. Configure .env
cp .env.example .env # then editRequired keys (this is the whole configuration surface):
Key | Value |
| The email of your Atlassian account |
| The token from step 1 |
| e.g. |
.env is gitignored; never commit it. Real environment variables take precedence
over the file. The file is located relative to the project directory (not the working
directory), so the server finds it no matter where it is launched from.
3. Install dependencies
With uv (preferred, since this repo has a uv.lock):
uv syncOr with plain pip into a venv:
python -m venv .venv
.venv/bin/pip install -r requirements.txt # Windows: .venv\Scripts\pip4. Verify with --check
.venv/bin/python -m jira_mcp --check # connectivity + auth only
.venv/bin/python -m jira_mcp --check PROJ-123 # also fetch a ticket in fullThis prints whether .env was found, which base URL was selected (and whether the
cloud-ID fallback was needed), the authenticated account, and, when a key is given,
the ticket exactly as Claude would see it.
Scoped vs. unscoped tokens: the base URL problem
An unscoped token works against your site URL,
https://<site>.atlassian.net.A scoped token against that same URL fails silently, returning anonymous-looking responses. It must call
https://api.atlassian.com/ex/jira/{cloudId}instead.
You do not need to know which kind you hold. At startup the server probes the site URL
with GET /rest/api/3/myself; if that does not return a real account, it fetches your
cloud ID from {site}/_edge/tenant_info and retries against api.atlassian.com. The
winner is cached for the process lifetime and logged to stderr.
If detection ever fails: _edge/tenant_info is not part of Atlassian's formally
supported REST API (though Atlassian's own support docs point at it), so it could
change. In that case set ATLASSIAN_CLOUD_ID in .env to skip detection; the error
message will tell you when this applies. You almost never need it.
PyCharm setup
Interpreter: Settings → Project → Python Interpreter → Add Interpreter → Existing → select
.venv/bin/pythonin the project directory. (If you ranuv sync, the venv already exists with everything installed.)Run configuration for debugging: Run → Edit Configurations → + → Python:
Run: module
jira_mcp(choose "module" instead of "script path")Parameters:
--check PROJ-123Working directory: the project root (anything works, but this is tidy)
Now you can set breakpoints anywhere (e.g. in
client.py) and debug real requests. Errors inside a running MCP server are otherwise invisible.
Connect to Claude Code
Use the venv's Python by absolute path; a bare python won't resolve to the venv
when Claude Code spawns the server.
macOS/Linux:
claude mcp add jira -- /path/to/PythonProject/.venv/bin/python -m jira_mcpWindows:
claude mcp add jira -- C:\path\to\PythonProject\.venv\Scripts\python.exe -m jira_mcpNotes:
Everything after
--is the command Claude runs; everything before it is Claude's own options.Default scope is
local(just you, just this project, stored in~/.claude.json). Add--scope projectto share via a checked-in.mcp.json, or--scope userto use it across all your projects.
Verify it's connected
Inside a Claude Code session:
Run
/mcp; thejiraserver should be listed as connected, with six tools.Or just ask: "use whoami to check the jira connection".
Troubleshooting
Symptom | Likely cause and fix |
401 Unauthorized | Wrong email or token, or the token was revoked/expired. Recreate the token and update |
403 Forbidden | Scoped token missing |
404 Not Found | The issue doesn't exist, or your account lacks permission to see it. Jira reports issues you cannot view as 404, and a token never grants more access than the human it belongs to. Verify you can open the ticket in a browser while logged in as that account. |
Empty tool list in Claude | The server crashed at startup. Run the exact command from |
Server won't start | Run |
Detection failed / anonymous responses | Startup logs (stderr) say which base URL was probed and why it was rejected. If |
Notes for developers new to Python
The venv (
.venv/) is a project-local copy of Python plus this project's packages: the equivalent ofnode_modules, except the interpreter itself lives inside it too. That's why Claude Code must be given.venv/bin/pythonby absolute path: there's no global install to fall back on.asyncio.run(...)is needed because async functions in Python don't run just by calling them; calling one returns a coroutine object, and something has to drive it. There's no ambient event loop like in Node;asyncio.run()creates a loop, runs one coroutine to completion, and tears the loop down. The MCP server does this internally viamcp.run(); the--checkmode does it explicitly.The decorators (
@mcp.tool) are functions that receive the function defined below them and register/wrap it, like a middleware factory applied at definition time. FastMCP's decorator reads the function's name, type hints, and docstring to generate the MCP tool schema that Claude sees; the docstring is the tool's API documentation.python -m jira_mcpruns the package's__main__.py, the closest thing Python has to an npmbinentry. It works from any directory becauseuv syncinstalled the project into the venv.
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
- AlicenseBqualityDmaintenanceEnables fetching and viewing Jira issue details directly through Claude Desktop using secure API token authentication. Provides comprehensive issue information including status, assignee, priority, and descriptions in both human-readable and structured formats.104891MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to search, view, create, and update JIRA issues using natural language commands and JQL queries.98Apache 2.0
- AlicenseAqualityDmaintenanceProvides read-only access to JIRA REST API, enabling LLMs to query and retrieve information from JIRA instances.1418MIT
- FlicenseNot gradedqualityDmaintenanceProvides read-only issue and project management tools for Jira Server/DC, enabling querying issues, projects, and assignments via natural language.
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.
Catch up on Slack without reading it. Unreads, threads, search. Browser-session or hosted OAuth.
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/Satttoshi/jira-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server