Skip to main content
Glama

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:

  1. 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 raises ReadOnlyViolationError, so a future edit that adds a write call fails loudly.

  2. 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

get_issue(issue_key, include_comments=True)

Full ticket detail including all non-empty custom fields (acceptance criteria, story points, ...) with their display names, plus (by default) the comment thread

get_comments(issue_key, limit=100, newest_first=False)

Just the discussion, with author/timestamp/edited/visibility

get_issue_context(issue_key)

Parent, subtasks, linked issues (with link direction), and epic children, each as key + type + status + summary

search_issues(jql, limit=25)

Compact JQL search results

get_attachment(attachment_id)

Downloads an image attachment (listed by get_issue) and returns it as vision input, so Claude can look at screenshots. Images only (png/jpeg/gif/webp), max 5 MB; videos and other file types are rejected

whoami()

Which account the token resolves to; the first stop for auth debugging

Setup

1. Create an Atlassian API token

  1. Go to https://id.atlassian.com/manage-profile/security/api-tokens.

  2. Choose Create API token with scopes (Atlassian is deprecating unscoped tokens).

  3. Select the Jira app and pick only these scopes:

    • read:jira-work

    • read:jira-user

  4. 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 edit

Required keys (this is the whole configuration surface):

Key

Value

ATLASSIAN_EMAIL

The email of your Atlassian account

ATLASSIAN_API_TOKEN

The token from step 1

ATLASSIAN_SITE_URL

e.g. https://your-company.atlassian.net

.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 sync

Or with plain pip into a venv:

python -m venv .venv
.venv/bin/pip install -r requirements.txt   # Windows: .venv\Scripts\pip

4. 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 full

This 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

  1. Interpreter: Settings → Project → Python Interpreter → Add Interpreter → Existing → select .venv/bin/python in the project directory. (If you ran uv sync, the venv already exists with everything installed.)

  2. Run configuration for debugging: Run → Edit Configurations → + → Python:

    • Run: module jira_mcp (choose "module" instead of "script path")

    • Parameters: --check PROJ-123

    • Working 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_mcp

Windows:

claude mcp add jira -- C:\path\to\PythonProject\.venv\Scripts\python.exe -m jira_mcp

Notes:

  • 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 project to share via a checked-in .mcp.json, or --scope user to use it across all your projects.

Verify it's connected

Inside a Claude Code session:

  • Run /mcp; the jira server 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 .env. Run --check to confirm.

403 Forbidden

Scoped token missing read:jira-work / read:jira-user, or your account lacks site access. Recreate the token with both read scopes.

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 claude mcp add yourself in a terminal; startup errors print to stderr. Usual causes: wrong Python path, or missing .env keys.

Server won't start

Run --check. If it reports missing config, fix .env. If imports fail, re-run uv sync (or reinstall requirements.txt) and confirm the venv Python is ≥ 3.11.

Detection failed / anonymous responses

Startup logs (stderr) say which base URL was probed and why it was rejected. If _edge/tenant_info is unreachable, set ATLASSIAN_CLOUD_ID in .env.

Notes for developers new to Python

  • The venv (.venv/) is a project-local copy of Python plus this project's packages: the equivalent of node_modules, except the interpreter itself lives inside it too. That's why Claude Code must be given .venv/bin/python by 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 via mcp.run(); the --check mode 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_mcp runs the package's __main__.py, the closest thing Python has to an npm bin entry. It works from any directory because uv sync installed the project into the venv.

Available Tools

6 tools
get_attachmentA

Download an image attached to a Jira issue, for visual analysis.

Returns the image itself so it can be looked at directly. Use it when a ticket's Attachments section (from get_issue) lists a screenshot or other image relevant to the task, e.g. a UI bug report where the screenshot shows the actual broken state.

Only images are supported (png, jpeg, gif, webp) up to 5 MB; videos and other file types are rejected with an explanatory error.

ParametersJSON Schema
NameRequiredDescriptionDefault
attachment_idYesThe numeric attachment ID exactly as listed in get_issue output, e.g. get_attachment(attachment_id="107474"). NOT the issue key and NOT the filename.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so excellently. It states the return payload ('Returns the image itself'), the supported formats and size limit (png, jpeg, gif, webp up to 5 MB), and the failure behavior for unsupported types ('videos and other file types are rejected with an explanatory error'). This is thorough and sets accurate expectations for the agent.

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 remarkably concise—three sentences in total—yet packs all essential information: purpose, return type, when to use, and constraints. It is front-loaded with the core action, then the use case, then limitations. Every sentence earns its place with zero redundancy or 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 one-parameter download tool with no output schema, the description is complete. It tells the agent what the tool returns (the image), when to invoke it (based on get_issue attachments), and what constraints apply (formats, size, error behavior). There is no missing information an agent would need to call this correctly.

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 100%, and the schema itself already provides comprehensive parameter semantics (the attachment_id description explains it is a numeric ID from get_issue, NOT the issue key or filename, with an example). The tool description adds no additional parameter context beyond the schema, so the baseline of 3 is appropriate.

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 opens with a precise verb and object: 'Download an image attached to a Jira issue, for visual analysis.' This clearly distinguishes it from all sibling tools (whoami, get_issue, get_comments, get_issue_context, search_issues), none of which download binary content. The purpose is unambiguous and immediately actionable.

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 explicitly states when to use the tool: 'Use it when a ticket's Attachments section (from get_issue) lists a screenshot or other image relevant to the task,' and gives a concrete example (UI bug report). It also implicitly defines the boundary by noting only images (png, jpeg, gif, webp) up to 5 MB are supported, so an agent knows not to use it for videos or other file types. This is clear, concrete guidance with no ambiguity.

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

get_commentsA

Get only the comment thread of a Jira issue, as Markdown.

Each comment includes author, timestamp, whether it was edited, and any visibility restriction. Use this instead of get_issue when the ticket body is already known and only the discussion is needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of comments to return (1-100).
issue_keyYesJira issue key like "PROJ-123".
newest_firstNoSet True to get the most recent comments first — useful for long threads where only the latest state matters.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It discloses the output format (Markdown), the fields included (author, timestamp, edited, visibility restriction), and the scoping (only comments, not the issue body). Lacks mention of pagination or errors, but that's minor for a read operation.

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 with zero waste. The first sentence front-loads the action and format, the second adds detail and usage guidance. Every word earns its place.

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 that input parameters are fully documented and an output schema exists, the description supplies the missing context: purpose, format, and when to use it. Nothing critical an agent needs to call it correctly is omitted.

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 100%, so all parameters are already documented. The description adds no extra semantic meaning beyond the schema; it even reinforces the 'comment thread' concept but doesn't clarify parameter usage further. Baseline 3 is appropriate.

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 ('Get'), a precise resource ('comment thread of a Jira issue'), and the output format ('as Markdown'). It explicitly differentiates from the sibling get_issue, making the tool's scope immediately clear.

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?

Provides explicit when-to-use guidance: 'Use this instead of get_issue when the ticket body is already known and only the discussion is needed.' This names the alternative and the condition, leaving no ambiguity about tool selection.

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

get_issueA

Get full detail for one Jira issue as Markdown.

Returns summary, status, type, priority, resolution, assignee, reporter, labels, components, fix versions, created/updated timestamps, the full description, all non-empty custom fields (e.g. acceptance criteria, story points) with their display names, the attachment list (fetch images via get_attachment), and (by default) the complete comment thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_keyYesJira issue key like "PROJ-123" (case and surrounding whitespace are tolerated).
include_commentsNoSet False to omit the comment thread when only the ticket body is needed — the response is much shorter.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It clearly states the output format (Markdown), enumerates the fields included, notes that only non-empty custom fields are returned, and references get_attachment for image handling. This is transparent about what the tool does and its default behavior (comments included). It does not mention error cases or permissions, but since it is a 'get' operation, it is reasonable to assume read-only. The description adds meaningful behavioral context beyond a bare statement.

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?

The description is a single, well-structured paragraph with the core purpose front-loaded. Every sentence adds value, detailing the fields returned, the attachment list, and the comment behavior. It is slightly long but not wasteful, and the structure flows logically from general to specific. No redundancy or filler.

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?

Given the tool's complexity, the description covers the essential return details, output format, and the relationship to get_attachment. Since an output schema exists, return values are not the description's responsibility. It addresses the main use case (full issue details) and the optional comment behavior. It stops short of describing error handling or authentication, but for a read-only getter with a rich schema, it is nearly complete.

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 100%, so both parameters are already fully documented in the schema. The tool description adds minimal meaning beyond the schema—it reiterates that comments are on by default, which matches the schema default. It does not introduce new parameter semantics or clarify anything not already in the schema. Baseline 3 is appropriate here.

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 starts with a specific verb and resource: 'Get full detail for one Jira issue as Markdown.' It enumerates the exact fields returned, making its scope immediately clear. It distinguishes itself from siblings like get_comments (which returns only comments) and get_issue_context (context-specific) by stating what it covers, so an agent can tell it 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 Guidelines3/5

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

The description implies usage context by listing what it returns and mentioning that images must be fetched via get_attachment, but it does not explicitly state when to use this tool instead of get_comments or search_issues. The include_comments parameter hints that for just the ticket body you might set it False, but there is no explicit 'use X when Y' guidance. It provides enough to infer usage but lacks explicit exclusions.

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

get_issue_contextA

Map the reference graph around a Jira issue: parent, subtasks, links.

Returns the parent (e.g. epic), all subtasks, and all linked issues — each resolved to key + type + status + summary so the next issue to read can be chosen without further calls. Link relationships are given in human terms with correct direction ("blocks" vs "is blocked by"). For epics, also lists the issues inside the epic.

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_keyYesJira issue key like "PROJ-123".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavior disclosure. It reveals that results are resolved to key+type+status+summary, link direction is human-readable ('blocks' vs 'is blocked by'), and epics include their contained issues. This gives a solid understanding of what the tool does without mentioning side effects (likely a read-only operation) or authorization requirements, which are minor gaps.

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 two concise paragraphs with no filler. It front-loads the core purpose and then details the output structure and value proposition ('so the next issue to read can be chosen'). Every sentence contributes meaningful information, making it appropriately sized.

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?

Given the presence of an output schema (which presumably details the return type), the description gives an adequate high-level overview of what the tool returns. It covers the main categories (parent, subtasks, links, epic contents) and the format of resolved summaries. It doesn't mention potential errors or pagination, but for a graph-mapping tool this is not critical. The description is sufficient for an agent to decide to call the tool.

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?

The only parameter 'issue_key' is already fully described in the schema (e.g., 'Jira issue key like "PROJ-123"'), and schema description coverage is 100%. The tool description adds no additional semantics beyond what the schema provides, so it meets the baseline without enhancing understanding.

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 ('Map') and resource ('the reference graph around a Jira issue') and enumerates exactly what is returned (parent, subtasks, linked issues, and epic contents). It clearly distinguishes itself from siblings like get_issue (single issue), get_comments, search_issues, and get_attachment by focusing on relationships rather than raw issue data. The purpose is immediately unambiguous.

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 implies when to use it: when you need to decide which issue to read next based on the relationship graph ('so the next issue to read can be chosen without further calls'). It doesn't explicitly mention when not to use it or list alternatives for cases like retrieving a single issue, but the context is clear enough for an agent to infer appropriate usage.

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

search_issuesA

Search Jira with a JQL query; returns a compact Markdown list.

Each result line has key, type, status, summary, assignee and last update. Example JQL: 'project = PROJ AND status != Done ORDER BY updated DESC'. Results are capped at limit (1-100); the output notes when more matches exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
jqlYesA JQL query string (sent via POST, so any length/complexity works).
limitNoMaximum number of issues to return.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states the output format (Markdown list with specific fields per line), the cap on results via the limit parameter, and that the output notes when more matches exist. This goes beyond a bare 'returns search results' and gives the agent a concrete expectation of what will happen.

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 four sentences with no fluff. The purpose is front-loaded, an example is provided, and the cap/note behavior is clearly stated. Every sentence adds operational value, making it compact and easy to parse.

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 simple two-parameter tool with an output schema, the description covers all essential aspects: what it does, how to invoke it (with example), what the result lines contain, and the constraint on limit. The output schema handles field definitions, so the description need not repeat them. Nothing critical for correct invocation is missing.

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 100% for both parameters, so the baseline is 3. The description adds value beyond the schema by specifying that results are capped at limit (1-100), which is not in the schema (no min/max defined), and by providing an example JQL query that clarifies usage. It also notes that any length/complexity works, which the schema already hints at but is reinforced here.

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 starts with a clear verb+resource: 'Search Jira with a JQL query' and specifies the output format as a compact Markdown list. It distinguishes itself from sibling tools like get_issue or get_comments by focusing on search across issues rather than retrieving a single known entity.

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 description provides context for when to use the tool (when you need to find issues matching a JQL query) and includes an example JQL. However, it does not explicitly mention when NOT to use it or name alternatives (e.g., 'use get_issue to fetch a single issue by key'). The routing to siblings is implied but not stated, so it falls short of a 4.

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

whoamiA

Report which Atlassian account this server is authenticated as.

Returns display name, email, account ID, and which base URL was selected (site URL vs cloud-ID fallback). Call this first when any other tool returns authentication or permission errors — it isolates whether the problem is the credentials or the specific resource.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It explains the tool's read-only nature implicitly ("Report") and details the base URL selection logic (site URL vs cloud-ID fallback). However, it does not explicitly state that no modifications are made, which would be a slight improvement.

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 concise, with the primary purpose stated in the first sentence and return details and usage guidance following logically. Each sentence earns its place without redundancy, and the structure front-loads the core function.

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 parameterless tool with an output schema, the description fully covers its function, return content, and a specific usage scenario. No additional context is needed for an agent to invoke it correctly.

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?

The tool has no parameters, so schema coverage is trivially 100%. The description adds significant value by specifying exactly what information is returned (display name, email, account ID, base URL), going beyond the empty schema and enriching the agent's understanding.

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 reports the authenticated Atlassian account, listing specific return fields (display name, email, account ID, base URL). It distinguishes itself from siblings by focusing on authentication, not issues or comments.

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?

It explicitly instructs to call this tool first when other tools return authentication or permission errors, providing a clear when-to-use directive. This guidance helps agents isolate credential vs. resource problems, which is directly actionable.

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. Dates show when Glama detected each change.

  1. 6 tool updatesv0.1.0
    • First observedget_attachment
    • First observedget_comments
    • First observedget_issue
    • First observedget_issue_context
    • First observedsearch_issues
    • First observedwhoami

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a clear, distinct purpose: whoami validates identity, get_issue loads full details, get_comments retrieves only the discussion, get_issue_context maps relationships, search_issues runs JQL queries, and get_attachment downloads image content. No two tools overlap in function.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern (get_issue, get_comments, search_issues, etc.). The only exception is 'whoami', which is a standard, recognizable command name and does not break the overall pattern.

Tool Count5/5

Six tools cover the essential read-only workflows for a Jira server: authentication, issue retrieval, comment access, relationship mapping, search, and attachment download. The count is well-scoped for the server's purpose without being excessive or sparse.

Completeness4/5

The surface covers common read-only Jira tasks comprehensively, including authentication, issue detail, comments, links, search, and images. Minor gaps exist—such as lacking project listing or issue creation/update—but these appear intentionally omitted for a read-centric server.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables 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.
    10
    489
    1
    MIT

Latest Blog Posts

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