Minimal Jira Cloud MCP server: broad reads, a narrow 3-tool write surface, optional read-only mode.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
A Jira Cloud MCP server for coding agents: 6 read tools, 9 with writes enabled.
One job. One tool. Done right.
General-purpose Atlassian MCP servers expose dozens to hundreds of tools. Every one costs context before the agent does any useful work, and every near-duplicate makes the agent's choice less certain. This server gives a coding agent the Jira context it needs for a ticket, the three ways to answer back, and nothing else.
READ_ONLY_MODE=true and they never register, not even as a disabled
entry the agent can see.null spam, no self URLs, emails, or avatars; see
what the tools return.content, rather than again as structuredContent; set
STRUCTURED_OUTPUT=true if your host needs the typed copy. See
Cheaper output.limit=0 to fetch the rest. A failed request is
an error, never an empty list.uvx jira-mini-mcp or pip install jira-mini-mcp, no repo
clone or git URL required.| Tool | Access | Purpose |
|---|---|---|
search_issues | π’ read | Find issues with JQL |
get_issue | π’ read | One issue's core state and fields |
get_comments | π’ read | Recent or historical discussion, paginated |
get_attachments | π’ read | Attachment metadata |
download_attachment | π’ read | Fetch one attachment |
get_changelog | π’ read | Field-change history, paginated |
add_comment | π΄ write | Post one Markdown comment |
transition_issue | π΄ write | Move an issue through its workflow |
update_issue | π΄ write | Set issue fields |
[!TIP] Set
READ_ONLY_MODE=trueand only the six π’ read tools register - the three π΄ write tools are withheld entirely, see Configure.
More detail lives in docs/: configuration,
OAuth setup, and what the tools return, with
examples.
or
Pin a version when you want a fixed surface: uvx jira-mini-mcp==1.1.0.
Running an unreleased commit straight from GitHub also works:
Requires Python 3.12+ and uv (or pip).
With an API token, three values:
| Variable | Meaning |
|---|---|
JIRA_BASE_URL | Your site, e.g. https://example.atlassian.net |
JIRA_EMAIL | The email your API token belongs to |
JIRA_API_TOKEN | A Jira Cloud API token |
Add READ_ONLY_MODE=true to withhold the write tools. Every setting, including
STRUCTURED_OUTPUT, is in configuration.md.
[!NOTE] Prefer OAuth to a stored token? Set
JIRA_AUTH_METHOD=oauth, register a free OAuth 2.0 (3LO) app, and runjira-mini-mcp loginonce to authorize in your browser. The server then refreshes its token by itself. Step by step: oauth.md.
Configuration is validated at startup, and an error names the missing setting without printing its value or your Jira URL. Keep the token in the host's own configuration and never commit it. The server acts with your account's permissions: an account that cannot transition an issue still cannot, whatever this server exposes.
Put at least one other option between the last --env and the server name, as
above - the CLI otherwise reads the name as another KEY=value pair.
In claude_desktop_config.json:
Command uvx, argument jira-mini-mcp, and the three environment variables.
Add READ_ONLY_MODE=true to withhold the write tools. OAuth host examples are in
oauth.md.
Three tools, chosen so an agent can close the loop on a ticket it worked:
Issue creation, links, attachment upload, worklogs, and deletion are out of scope. Creation needs per-project, per-type required-field discovery and is a feature in its own right; a link, or a request for one, fits in a comment.
Three things are worth knowing before an agent writes:
transition_issue takes a name, not an id. A transition name or the name
of the status to reach, matched ignoring case. They differ in real workflows -
a transition called In Progress can produce a status called In Development,
and two differently named transitions can reach one status - so prefer the
transition name. When nothing matches, the error lists every available
transition and where it leads. To see the options first, ask
get_issue(fields=["transitions"]). That is why there is no separate
get_transitions tool.update_issue replaces labels and components wholesale. There is no
add or remove verb, so read the issue first if you mean to add one value. It
takes the same values get_issue returns: assignee as an account id, an
email, a display name, or the literal "me", description as Markdown, customfield_* as raw Jira JSON.
It refuses status and comment, naming the tool that does each.Each write tool is annotated readOnlyHint=false with honest destructiveHint
and idempotentHint values, which is what READ_ONLY_MODE filters on.
A tool definition is a name, a description, an input schema, and often an output contract. Depending on the client, all of it enters the model's context before any work happens. A large toolset therefore spends context on capabilities the current task will never use, and raises the chance of picking the wrong tool, confusing similar ones, or passing bad parameters.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/jira-mini-mcp)<a href="https://allmcps.com/mcp/jira-mini-mcp"><img src="https://allmcps.com/api/badge/jira-mini-mcp?style=directory" alt="Jira Mini MCP on AllMCPs" /></a>