Skip to main content
Glama
proprock
by proprock

jira-mini-mcp

A nine-tool Jira Cloud MCP server for coding agents.

CI Release Python License: MIT

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.

Tool

Purpose

search_issues

Find issues with JQL

get_issue

One issue's core state and fields

get_comments

Recent or historical discussion, paginated

get_attachments

Attachment metadata

download_attachment

Fetch one attachment

get_changelog

Field-change history, paginated

add_comment

Post one Markdown comment

transition_issue

Move an issue through its workflow

update_issue

Set issue fields

Six read, three write. READ_ONLY_MODE=true registers the six alone.

Install

No installation step: run it straight from GitHub.

uvx --from git+https://github.com/proprock/jira-mini-mcp jira-mini-mcp

Pin a release when you want a fixed surface:

uvx --from git+https://github.com/proprock/jira-mini-mcp@v0.1.0 jira-mini-mcp

Requires Python 3.12+ and uv. The package layout stays compatible with a later PyPI publication, after which uvx jira-mini-mcp will be enough.

Related MCP server: Simple Jira MCP

Configure

Three required values, and one optional switch:

Variable

Required

Meaning

JIRA_BASE_URL

yes

Your site, e.g. https://example.atlassian.net

JIRA_EMAIL

yes

The email your API token belongs to

JIRA_API_TOKEN

yes

A Jira Cloud API token

READ_ONLY_MODE

no

true, 1, on registers only the six read tools

Authentication is Jira Cloud Basic auth with the email and token. Jira Server/Data Center, PAT/Bearer, and OAuth are not supported. Configuration is validated at startup, and an error names the missing setting without printing its value or your Jira URL. An unrecognized READ_ONLY_MODE value stops startup rather than quietly re-enabling the write tools.

Keep the token in the host's own configuration and never commit it. The token carries its account's permissions: an account that cannot transition an issue still cannot, whatever this server exposes.

claude mcp add --env JIRA_BASE_URL=https://example.atlassian.net --env JIRA_EMAIL=you@example.com --env JIRA_API_TOKEN=your-token --transport stdio jira-mini -- uvx --from git+https://github.com/proprock/jira-mini-mcp jira-mini-mcp

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:

{
  "mcpServers": {
    "jira-mini": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/proprock/jira-mini-mcp",
        "jira-mini-mcp"
      ],
      "env": {
        "JIRA_BASE_URL": "https://example.atlassian.net",
        "JIRA_EMAIL": "you@example.com",
        "JIRA_API_TOKEN": "your-token"
      }
    }
  }
}
codex mcp add jira-mini --env JIRA_BASE_URL=https://example.atlassian.net --env JIRA_EMAIL=you@example.com --env JIRA_API_TOKEN=your-token -- uvx --from git+https://github.com/proprock/jira-mini-mcp jira-mini-mcp

Command uvx, arguments --from, the GitHub URL, jira-mini-mcp, and the three environment variables. Add READ_ONLY_MODE=true to withhold the write tools.

What the tools return

Structured JSON with stable output schemas, and no second human-readable rendering of the same result. Jira's rich text becomes Markdown inside the corresponding string field. Timestamps normalize to UTC ISO-8601 with a Z. Users are account_id and display_name only — no email, avatar, or self URL. Known resources use compact shapes:

issuetype  = {id, name, hierarchy_level}
status     = {id, name, category}
priority   = {id, name}
project    = {id, key, name}
components = [{id, name}, ...]
issue      = {key, summary?, status?, issuetype?}
issuelink  = {relationship, issue}

Absent and unrequested values are omitted rather than returned as null. Explicitly requested unknown or customfield_* values are preserved as Jira JSON. If Jira returns a malformed known resource but the rest is usable, the call fails with the exact JSON paths and a sanitized partial result rather than pretending the data was fine.

Fields

search_issues defaults to these seven fields:

summary, status, issuetype, priority, assignee, updated, project

get_issue defaults to these sixteen fields:

summary, description, issuetype, status, priority, assignee, reporter,
labels, components, created, updated, resolutiondate, issuelinks,
project, parent, subtasks

An explicit fields list replaces the default completely; the server adds no hidden fields. fields=[] returns issue keys only.

Pagination

Large collections never pretend to be complete. get_comments and get_changelog return start_at, an exact total, and items — more exist when start_at + len(items) < total, and that sum is the next offset. Both default to order="desc" (offset zero is the newest item) and to 20 items; limit=0 returns everything remaining from start_at, with no 100-item cap. get_comments also takes since, applied before ordering and slicing, so "what happened since the last release" does not mean loading a multi-year discussion.

search_issues is the exception. The current Jira Cloud enhanced search API is cursor-based with no exact total; its count endpoint is approximate and the old offset endpoint is being removed. So search returns items and next_page_token only — pass the token back as page_token, and a null token means the last page. limit is 1..100; zero is rejected with guidance rather than silently treated as a default.

Attachments

get_attachments returns metadata only. Only when a file matters does the agent call download_attachment, which writes into an automatically managed process-scoped temporary cache and returns a local path. No download directory to configure, and the cache is removed at shutdown.

Writing to Jira

Three tools, chosen so an agent can close the loop on a ticket it worked:

add_comment(issue_key, body)
transition_issue(issue_key, to, comment=None)
update_issue(issue_key, fields)

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. That listing is the discovery mechanism, which 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 or the literal "me", description as Markdown, customfield_* as raw Jira JSON. It refuses status and comment, naming the tool that does each.

  • Markdown is converted, not guessed at. Headings, lists, fenced code, inline marks, and links become Jira rich text; anything outside that set stays literal rather than being reinterpreted.

Each write tool is annotated readOnlyHint=false with honest destructiveHint and idempotentHint values, which is what READ_ONLY_MODE filters on.

Why so few tools

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.

Nine compact schemas stay affordable for a whole session, leaving the context budget for source code, issue descriptions, stack traces, and reasoning. The design follows Anthropic's guidance for agent systems: keep toolsets small, role-scoped, and clearly differentiated.

This is a claim, so the repository tests it. The offline half runs with the suite and checks that every tool is described substantially, that no two descriptions are near-duplicates, and that every parameter whose behavior cannot be guessed from its name is explained in prose. The other half puts the real tool definitions in front of a real model and scores which one it picks — see evals/README.md.

The same principle shapes the responses. get_issue does not dump hundreds of comments, the full changelog, attachment contents, or every custom field; large resources are fetched only when asked for.

Compared with the alternatives

jira-mini-mcp

Official Atlassian MCP

sooperset/mcp-atlassian

Scope

Jira only

Jira, Confluence, JSM, Bitbucket, Compass, Loom, and more

Jira and Confluence

Deployments

Cloud

Cloud

Cloud, Server/Data Center

Hosting

Local, stdio

Remote, Atlassian-hosted

Local (stdio, Docker) or HTTP

Auth

API token

OAuth 2.1 or API token

API token, PAT, or OAuth 2.0

Tools

9, always visible

A small default set with on-demand discovery

98

Writes

3 tools

Yes, admin-gated by category

Yes

License

MIT

Apache 2.0

MIT

The official server is the better choice when you need breadth across Atlassian products, OAuth rather than a stored token, Jira Service Management, or organization-level controls such as permission groups, IP allowlisting, and audit logs. It is Atlassian's own product, it tracks their APIs, and nothing here competes with that.

mcp-atlassian is the better choice when you need Confluence alongside Jira, Server/Data Center, or simply broader Jira coverage than nine tools.

This server is the better choice for one narrow case: a coding agent working a Jira ticket, where the context every tool definition costs is worth more than the coverage it buys.

Development

uv sync
uv run ruff format --check .
uv run ruff check .
uv run ty check
uv run pytest
uv run pytest --cov=jira_mini_mcp --cov-branch --cov-report=term-missing

uv run ruff format . applies formatting. The last command reports statement and branch coverage with missing lines; it is reviewed before closing each phase, and the project deliberately has no fail-under percentage until a meaningful baseline exists.

The default suite is fully offline. HTTP mocks trace to observations against a real Jira Cloud site, but raw responses are never committed: each fixture keeps the observed structure while every tenant, account, issue, cursor, timestamp, and content value is synthetic, and records its own provenance. Write endpoints are exercised only against a disposable issue.

The tool-selection eval needs a model credential and spends money, so it is run deliberately:

uv run python evals/run_eval.py

Architecture:

agent -> stdio -> MCPServer -> JiraClient -> httpx2.AsyncClient -> Jira REST v3

One asynchronous HTTP client is reused for the process lifetime, with an explicit timeout and bounded retries — a 429 is retried for any method, a 5xx or a dropped connection only for methods that converge on replay, never a POST. JiraClient knows nothing about MCP; the tools are thin adapters over it.

Release model

Semantic versioning, Conventional Commits, short-lived branches, pull-request CI, and tagged releases. CHANGELOG.md records what changed for someone running the server. v0.1.0 is a GitHub Release with CI-checked wheel and source distributions attached. PyPI publication is a later step and should use GitHub Actions with Trusted Publishing rather than a long-lived credential.

License

MIT. Not an official Atlassian product.

Available Tools

9 tools
add_commentA

Add one comment to an issue. body is Markdown -- headings, lists, fenced code blocks, bold/italic, inline code, links -- converted to Jira's rich text; anything outside that set stays literal. Returns the created comment in the same shape get_comments returns. This server cannot edit or delete a comment afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
issue_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond annotations by specifying the Markdown-to-rich-text conversion rule (which constructs convert, which stay literal), the return shape matching get_comments, and the key limitation that this server cannot edit or delete the comment afterward. idempotentHint=false already implied each call creates a new record; the description enriches that with the no-edit/delete constraint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each earning its place: purpose, body format, return shape, limitation. The purpose is front-loaded. The Markdown enumeration is slightly long but necessary for precision about what converts versus what stays literal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, body semantics, return shape (reinforced by the existing output schema), and the post-creation limitation. What's absent — permission requirements, error cases, validation of the issue key — is peripheral for a comment-creation tool and the output schema already documents the return value.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does substantially for body by detailing the accepted Markdown subset and conversion behavior. issue_key receives no explicit treatment, but it is highly self-explanatory in a Jira context (e.g., PROJ-123), so the omission is minor.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Add one comment to an issue.' This clearly distinguishes it from read siblings (get_comments, get_issue, search_issues) and mutation siblings (update_issue, transition_issue) because 'add' uniquely signals comment creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose statement implies when to use it — when a comment needs to be created — but there is no explicit when-not guidance or mention of alternatives. The sibling set is mostly reads and other mutations, so the distinct verb mostly self-selects, yet the description never names a condition that would rule it out in favor of another tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_attachmentA
Read-onlyIdempotent

Download one attachment by id into a process-scoped temporary cache and return its local_path. The cache is removed when the server shuts down.

ParametersJSON Schema
NameRequiredDescriptionDefault
attachment_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations by explaining that downloads go to a process-scoped temporary cache and that the cache is removed on server shutdown. This gives the agent important expectations about the returned local_path's lifetime and scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both necessary. The main action and return value are front-loaded, and the cache lifetime detail is placed second, making the description both concise and logically structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with a true output schema and read-only/idempotent annotations, the description covers the essential behavioral details: download action, cache scoping, and lifetime. It is slightly incomplete only in that it doesn't mention typical downstream usage of local_path or how it relates to get_attachments.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining the parameter. It only says 'by id', which essentially restates the schema's 'attachment_id'. It does not clarify where to obtain the id, what format it takes, or distinguish it from other identifiers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (download one attachment by id) and a concrete outcome (returns local_path), and clearly distinguishes itself from sibling tools like get_attachments by focusing on a single attachment and returning a cached file path rather than listing or retrieving content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives such as get_attachments or get_issue. The description implies it should be used when an attachment_id is already known, but it does not explicitly state prerequisites, exclusions, or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_attachmentsA
Read-onlyIdempotent

List an issue's attachment metadata (id, filename, mime_type, size, author, created) without downloading content. Use download_attachment to fetch a file's bytes.

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds meaningful context that content is not downloaded and that only metadata is returned, which helps the agent understand the tool's non-destructive behavior beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and returned fields, ending with a pointer to the sibling tool. Every word adds value; no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple one-parameter tool with an output schema and safety annotations. The description covers the key metadata-vs-content distinction and names the sibling, making it complete for correct invocation without excessive detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining issue_key. It implies issue_key identifies the issue ('an issue's attachment metadata'), but does not specify format or provide examples. This is minimally viable but leaves ambiguity about the expected key format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('List'), resource ('issue's attachment metadata'), and explicitly lists fields returned (id, filename, mime_type, size, author, created). It also differentiates itself from download_attachment by noting it does not download content, making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names download_attachment as the alternative for fetching file bytes, giving a clear when-to-use-this vs when-to-use-that. The condition is stated: metadata vs content, leaving no ambiguity about when to choose this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_changelogA
Read-onlyIdempotent

List an issue's field-change history. order='desc' (default) returns newest first; 'asc' returns oldest first. start_at/limit paginate the logical, sorted collection (ties broken by entry id); limit=0 returns every remaining entry from start_at with no cap. Each entry lists human-readable field changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
orderNodesc
start_atNo
issue_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint, openWorldHint, and idempotentHint. The description adds substantial behavior beyond these: it explains the default order, pagination tie-breaking by entry id, limit=0 behavior, and that entries are human-readable. This enriches the agent's understanding of edge cases and return content.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact yet information-dense. It front-loads the core purpose, then systematically explains ordering, pagination, and output content. No sentence is redundant; every clause contributes to correct usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (sorting, pagination) and the existence of an output schema (which presumably details the return structure), the description covers all behavioral aspects needed to call the tool correctly. It is complete without needing to enumerate return fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema description coverage is 0%, the description fully explains the non-obvious parameters: order (desc/asc), start_at and limit pagination semantics, and limit=0 special case. issue_key is self-explanatory. This adds significant meaning beyond the schema's defaults and types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists an issue's field-change history, a specific verb and resource. It is distinct from siblings like get_issue or search_issues, which focus on current state or search, not history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides detailed usage instructions for ordering and pagination (order, start_at, limit semantics including limit=0 meaning no cap). It does not explicitly mention alternatives or when not to use, but the tool's purpose is self-evident and the guidance is clear for correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_commentsA
Read-onlyIdempotent

List an issue's comments. order='desc' (default) returns newest first; 'asc' returns oldest first. start_at/limit paginate the logical, filtered, sorted collection (ties broken by comment id); limit=0 returns every remaining comment from start_at with no 100-comment cap. since (ISO-8601 with an explicit offset) keeps only comments created at or after that instant, and total reflects the filtered collection.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
orderNodesc
sinceNo
start_atNo
issue_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent/openWorld annotations, the description discloses default ordering, pagination semantics, tie-breaking by comment id, the special limit=0 behavior with no 100-comment cap, the since filter format, and that total reflects the filtered collection. This is excellent behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then packs detailed behavior into a compact, well-organized set of clauses. No sentence is wasted; every detail adds necessary invocation semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (filtering, sorting, pagination, cap behavior) and the presence of an output schema, the description covers all essential invocation details. It even explains edge-case pagination and how total is computed, making it fully adequate for correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates: it explains order values and default, start_at/limit pagination with tie-breaking, limit=0 special behavior, since's ISO-8601 offset requirement and filtering semantics, and the meaning of total. Even issue_key is implied by 'an issue's comments'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence 'List an issue's comments' states a specific verb and resource, clearly distinguishing this tool from siblings like get_issue, get_attachments, and get_changelog. It leaves no ambiguity about what the tool returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes it clear the tool retrieves comments for an issue and provides detailed pagination/filtering behavior, giving a strong sense of when to use it. It does not explicitly name alternatives or exclusion conditions, but the purpose statement is sufficiently specific to route an agent correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_issueA
Read-onlyIdempotent

Fetch one issue by key. fields replaces the default fields entirely -- default: summary, description, issuetype, status, priority, assignee, reporter, labels, components, created, updated, resolutiondate, issuelinks, project, parent, subtasks. fields=[] returns the key with no fields. Does not include comments, attachments, or changelog history; use the dedicated tools for those.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNo
issue_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it discloses that fields replaces defaults entirely (not merges), that fields=[] returns only the key, and that certain data (comments, attachments, changelog) is deliberately excluded. This is meaningful behavioral disclosure that helps the agent predict the tool's behavior. A small gap is that it doesn't mention pagination or error behavior, but the annotations plus the explicit exclusions are strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core action ('Fetch one issue by key') comes first, followed by the most important parameter behavior, then the exclusions. Every sentence earns its place, and the exclusions are grouped efficiently. No fluff or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so return values are already documented structurally. The description covers the key behavioral aspects an agent needs: what the default fields are, how to override them, and what is not included. It also names sibling tools for the excluded data. The only slight gap is that it doesn't mention whether the response includes any metadata (e.g., expand) or how errors are surfaced, but given the output schema and annotations, the description is largely complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does: it explains the fields parameter's semantics in detail (replaces defaults entirely, default list, fields=[] behavior) and names the required issue_key parameter. The only minor gap is that it doesn't explicitly restate that issue_key is the Jira issue key format (e.g., PROJECT-123), but the parameter name and tool name make that obvious. Given the 0% schema coverage, the description carries the burden well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Fetch') and resource ('one issue by key'), and immediately distinguishes itself from sibling tools by explicitly listing what it does not include (comments, attachments, changelog history) and pointing to dedicated tools for those. This makes the tool's purpose unmistakable and differentiates it from get_comments, get_attachments, and get_changelog.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool versus alternatives: it says to use dedicated tools for comments, attachments, and changelog history. It also explains the fields parameter behavior, including the default field set and the fields=[] special case, which tells the agent exactly how to control the response. This is clear, actionable usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_issuesA
Read-onlyIdempotent

Search Jira Cloud issues with JQL. Returns items and an opaque next_page_token (null on the last page); pass it back as page_token for the next page. limit is 1..100 (default 20); 0 is invalid. fields replaces the default fields entirely -- default: summary, status, issuetype, priority, assignee, updated, project. fields=[] returns only the issue key.

ParametersJSON Schema
NameRequiredDescriptionDefault
jqlYes
limitNo
fieldsNo
page_tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds valuable behavioral details beyond annotations: pagination semantics (opaque token, null on last page), the fact that fields replaces the default field set entirely, and that fields=[] returns only the issue key. This is exactly the kind of non-obvious behavior an agent needs to know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each dense with useful information. The most important facts (search with JQL, pagination token) are front-loaded, and the fields behavior is explained precisely. No filler or repetition of schema defaults that are already visible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a read-only search tool: it covers pagination, limits, field selection, and the output schema exists to explain return values. It doesn't mention error cases (e.g., invalid JQL) or rate limits, but those are minor for a read-only, idempotent operation. The output schema covers return structure, so the description doesn't need to.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does: it explains the meaning of jql (Jira query language), the valid range and default for limit, the replacement semantics of fields, and the pagination contract for page_token. It doesn't give JQL syntax examples, but the core semantics of all four parameters are covered, which is strong compensation for zero schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Search'), a resource ('Jira Cloud issues'), and the query mechanism ('with JQL'). It clearly distinguishes this from sibling tools like get_issue (single issue retrieval) and get_comments (comments), so an agent can tell them apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear operational context: it explains pagination via next_page_token/page_token, the valid range for limit, and how fields behaves. It doesn't explicitly say 'use this instead of get_issue when you need to search by JQL', but the purpose is clear enough that an agent can infer when to use it. It lacks explicit exclusions or alternative routing, but the context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transition_issueA
Destructive

Move an issue through its workflow. to is a transition name or the name of the status to reach, matched ignoring case and surrounding space. A transition's name often differs from the status it leads to (a transition called 'In Progress' can produce status 'In Development'), and two transitions can reach one status, so prefer the transition name; if nothing matches, the error lists every available transition and its resulting status. comment is Markdown and is posted in the same call as the move. Changes issue state.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes
commentNo
issue_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses important behavioral details: matching ignores case and surrounding space, transition names may differ from resulting statuses, duplicate statuses are possible, error responses list all available transitions, comments are Markdown, and the comment is posted atomically with the move. This aligns with destructiveHint=true rather than contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient: every sentence adds value, from the primary purpose to matching rules to error behavior to comment semantics. It is front-loaded with the core action and contains no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a state-changing tool with an output schema and annotation coverage, the description provides all necessary invocation details: how to specify the target, what happens on ambiguity, what the error contains, and how comments are handled. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries full responsibility for explaining parameters. It thoroughly explains 'to' (transition vs status matching, case/space rules, error fallback) and 'comment' (Markdown, posted in same call). 'issue_key' is self-explanatory from its name, and the description handles the rest with no gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence 'Move an issue through its workflow' uses a specific verb and resource, clearly identifying the operation. It also states 'Changes issue state,' which distinguishes it from siblings like add_comment and update_issue without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this tool to move an issue through its workflow, with detailed guidance on transition names vs status names. It does not explicitly exclude alternatives or name siblings, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_issueA
DestructiveIdempotent

Set issue fields, taking the same values get_issue returns: summary as text, description as Markdown, assignee as an account id or the literal "me", labels as a list, components and priority by name, duedate as YYYY-MM-DD, parent as an issue key, and any customfield_* or unknown field as raw Jira JSON. null clears assignee, description, priority, parent, or duedate. labels and components REPLACE the whole list, so read the issue first if you mean to add one. Cannot change status (use transition_issue) or add a comment (use add_comment).

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYes
issue_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint annotation by specifying precisely which fields null clears (assignee, description, priority, parent, duedate) and that labels/components REPLACE the entire list rather than append. This is exactly the 'what gets destroyed' context the rubric credits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then organized as: accepted formats, null semantics, list-replacement warning, and exclusions. Every sentence earns its place; the dense format list is justified because the schema provides zero descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with an open-ended fields object, the description covers input formats, null-clearing behavior, destructive list semantics, and exclusions with alternatives. The output schema exists, so not describing return values is acceptable per the rubric.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description bears full responsibility, and it delivers: it defines the value format for every field type (text, Markdown, account id/'me', list, name, YYYY-MM-DD, issue key, raw Jira JSON for customfield_*). The fields object's additionalProperties true is made meaningful by explaining how to handle custom and unknown fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Set issue fields') and enumerates the exact value formats accepted, referencing get_issue as the source of truth. It explicitly distinguishes itself from siblings by noting it cannot change status (transition_issue) or add a comment (add_comment).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-not guidance with named alternatives: 'Cannot change status (use transition_issue) or add a comment (use add_comment).' Also instructs to read the issue first when intending to add to labels/components, since those lists are replaced wholesale.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updates
    • Addedadd_comment
    • Addeddownload_attachment
    • Addedget_attachments
    • Addedget_changelog
    • Addedget_comments
    • Addedget_issue
    • Addedsearch_issues
    • Addedtransition_issue
    • Addedupdate_issue

TDQS

A4.3/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct resource and action: search vs single-issue fetch, comments vs attachments vs changelog, and update vs transition vs comment. Where overlap could occur, the descriptions explicitly disambiguate boundaries.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern like search_issues, get_comments, add_comment, and transition_issue. The get_attachments vs download_attachment distinction is clear from the verbs.

Tool Count5/5

Nine tools is a well-scoped set for a focused Jira issue server. Each tool earns its place, covering search, read, update, transition, comments, attachments, and changelog.

Completeness3/5

The server covers reading, searching, updating, transitioning, commenting, and attachment download well. However, create_issue is missing, along with attachment upload and comment edit/delete, which are notable gaps for a Jira issue-management surface.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Provides tools for AI assistants to interact with JIRA APIs, enabling them to read, create, update, and manage JIRA issues through standardized MCP tools.
    6
    6 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides Jira Cloud integration for AI agents, enabling them to search issues with JQL, retrieve detailed issue information, and create new tickets. It supports multiple Jira configurations and provides tools for managing attachments and comments through natural language.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables natural language interaction with JIRA through MCP, providing 35 tools for issues, comments, transitions, projects, boards, sprints, epics, links, worklogs, versions, attachments, users, and fields.
    MIT