Skip to main content
Glama

Jira MCP Server (nur lesend)

Ein lokaler MCP-Server, der es Claude Code ermöglicht, Jira-Ticketkontext (Ticketdetails, Kommentarthreads, den Referenzgraphen um ein Ticket und JQL-Suchergebnisse) als kompaktes Markdown abzurufen. Bildanhänge (z. B. der Screenshot auf einem UI-Fehler-Ticket) können abgerufen werden, damit Claude sie visuell analysieren kann.

Was es bewusst nicht kann

Dieser Server ist streng schreibgeschützt. Er stellt kein Werkzeug bereit, das etwas erstellt, aktualisiert, übergeht, löscht oder kommentiert. Die Durchsetzung ist mehrschichtig:

  1. Im Code: Jede HTTP-Anfrage läuft durch einen einzigen Helfer, der nur GET zulässt, mit einer Ausnahme in der Whitelist: POST /rest/api/3/search/jql, eine Leseoperation, die Atlassian als POST senden muss. Jede andere Methode löst ReadOnlyViolationError aus, sodass eine zukünftige Änderung, die einen Schreibaufruf hinzufügt, laut scheitert.

  2. Auf der Anmeldeebene: Erstellen Sie das API-Token nur mit Lese-Berechtigungen (siehe unten), sodass selbst ein Fehler nicht schreiben könnte.

Related MCP server: Jira MCP Server

Werkzeuge

Tool

Zweck

get_issue(issue_key, include_comments=True)

Vollständige Ticketdetails einschließlich aller nicht leeren benutzerdefinierten Felder (Akzeptanzkriterien, Story Points, ...) mit ihren Anzeigenamen, plus (standardmäßig) den Kommentarthread

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

Nur die Diskussion, mit Autor/Zeitstempel/bearbeitet/Sichtbarkeit

get_issue_context(issue_key)

Eltern, Teilaufgaben, verknüpfte Tickets (mit Linkrichtung) und Epic-Kinder, jeweils als Schlüssel + Typ + Status + Zusammenfassung

search_issues(jql, limit=25)

Kompakte JQL-Suchergebnisse

get_attachment(attachment_id)

Lädt einen Bildanhang herunter (aufgelistet von get_issue) und gibt ihn als Vision-Eingabe zurück, damit Claude Screenshots ansehen kann. Nur Bilder (png/jpeg/gif/webp), max. 5 MB; Videos und andere Dateitypen werden abgelehnt

whoami()

Auf welches Konto das Token aufgelöst wird; die erste Anlaufstelle für Auth-Debugging

Einrichtung

1. Atlassian-API-Token erstellen

  1. Gehen Sie zu https://id.atlassian.com/manage-profile/security/api-tokens.

  2. Wählen Sie API-Token mit Bereichen erstellen (Atlassian stellt Tokens ohne Bereiche ein).

  3. Wählen Sie die Jira-App und wählen Sie nur diese Bereiche:

    • read:jira-work

    • read:jira-user

  4. Kopieren Sie das Token sofort; es wird nur einmal angezeigt.

Ein älteres unscoped Token funktioniert ebenfalls; der Server behandelt beide automatisch (siehe unten).

2. .env konfigurieren

cp .env.example .env   # then edit

Erforderliche Schlüssel (das ist die gesamte Konfigurationsoberfläche):

Key

Wert

ATLASSIAN_EMAIL

Die E-Mail-Adresse Ihres Atlassian-Kontos

ATLASSIAN_API_TOKEN

Das Token aus Schritt 1

ATLASSIAN_SITE_URL

z. B. https://your-company.atlassian.net

.env ist gitignored; committen Sie es niemals. Echte Umgebungsvariablen haben Vorrang vor der Datei. Die Datei befindet sich relativ zum Projektverzeichnis (nicht zum Arbeitsverzeichnis), sodass der Server sie findet, egal von wo aus er gestartet wird.

3. Abhängigkeiten installieren

Mit uv (bevorzugt, da dieses Repository eine uv.lock hat):

uv sync

Oder mit einfachem pip in eine venv:

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

4. Mit --check verifizieren

.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

Dies gibt aus, ob .env gefunden wurde, welche Basis-URL ausgewählt wurde (und ob der Cloud-ID-Fallback benötigt wurde), das authentifizierte Konto und, wenn ein Schlüssel angegeben ist, das Ticket genau so, wie Claude es sehen würde.

Scoped vs. unscoped Tokens: das Basis-URL-Problem

  • Ein unscoped Token funktioniert gegen Ihre Site-URL, https://<site>.atlassian.net.

  • Ein scoped Token gegen dieselbe URL schlägt still fehl und gibt anonym aussehende Antworten zurück. Es muss stattdessen https://api.atlassian.com/ex/jira/{cloudId} aufrufen.

Sie müssen nicht wissen, welche Art Sie besitzen. Beim Start testet der Server die Site-URL mit GET /rest/api/3/myself; wenn das kein echtes Konto zurückgibt, ruft er Ihre Cloud-ID von {site}/_edge/tenant_info ab und versucht es erneut gegen api.atlassian.com. Der Gewinner wird für die Prozesslebensdauer zwischengespeichert und auf stderr protokolliert.

Falls die Erkennung jemals fehlschlägt: _edge/tenant_info ist nicht Teil der offiziell unterstützten REST-API von Atlassian (obwohl Atlassians eigene Support-Dokumente darauf verweisen), also könnte es sich ändern. In diesem Fall setzen Sie ATLASSIAN_CLOUD_ID in .env, um die Erkennung zu überspringen; die Fehlermeldung sagt Ihnen, wann das zutrifft. Sie brauchen es fast nie.

PyCharm-Einrichtung

  1. Interpreter: Einstellungen → Projekt → Python-Interpreter → Interpreter hinzufügen → Vorhanden → wählen Sie .venv/bin/python im Projektverzeichnis. (Wenn Sie uv sync ausgeführt haben, existiert die venv bereits mit allem installiert.)

  2. Ausführungskonfiguration für Debugging: Ausführen → Konfigurationen bearbeiten → + → Python:

    • Ausführen: Modul jira_mcp (wählen Sie „Modul" statt „Skriptpfad")

    • Parameter: --check PROJ-123

    • Arbeitsverzeichnis: das Projektverzeichnis (alles funktioniert, aber das ist ordentlich)

    Jetzt können Sie überall Haltepunkte setzen (z. B. in client.py) und echte Anfragen debuggen. Fehler in einem laufenden MCP-Server sind sonst unsichtbar.

Mit Claude Code verbinden

Verwenden Sie das Python der venv mit absolutem Pfad; ein bloßes python wird nicht auf die venv aufgelöst, wenn Claude Code den Server startet.

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

Hinweise:

  • Alles nach -- ist der Befehl, den Claude ausführt; alles davor sind Claudes eigene Optionen.

  • Der Standardbereich ist local (nur Sie, nur dieses Projekt, gespeichert in ~/.claude.json). Fügen Sie --scope project hinzu, um über eine eingecheckte .mcp.json zu teilen, oder --scope user, um es in allen Ihren Projekten zu verwenden.

Verifizieren, dass es verbunden ist

In einer Claude-Code-Sitzung:

  • Führen Sie /mcp aus; der jira-Server sollte als verbunden aufgelistet sein, mit sechs Werkzeugen.

  • Oder fragen Sie einfach: „use whoami to check the jira connection".

Fehlerbehebung

Symptom

Wahrscheinliche Ursache und Lösung

401 Unauthorized

Falsche E-Mail oder falsches Token, oder das Token wurde widerrufen/abgelaufen. Erstellen Sie das Token neu und aktualisieren Sie .env. Führen Sie --check aus, um zu bestätigen.

403 Forbidden

Scoped Token ohne read:jira-work / read:jira-user, oder Ihr Konto hat keinen Site-Zugriff. Erstellen Sie das Token mit beiden Lese-Bereichen neu.

404 Not Found

Das Ticket existiert nicht, oder Ihr Konto hat keine Berechtigung, es zu sehen. Jira meldet Tickets, die Sie nicht sehen können, als 404, und ein Token gewährt nie mehr Zugriff als der Mensch, dem es gehört. Verifizieren Sie, dass Sie das Ticket in einem Browser öffnen können, während Sie mit diesem Konto angemeldet sind.

Leere Werkzeugliste in Claude

Der Server ist beim Start abgestürzt. Führen Sie den genauen Befehl von claude mcp add selbst in einem Terminal aus; Startfehler werden auf stderr ausgegeben. Übliche Ursachen: falscher Python-Pfad oder fehlende .env-Schlüssel.

Server startet nicht

Führen Sie --check aus. Wenn fehlende Konfiguration gemeldet wird, korrigieren Sie .env. Wenn Importe fehlschlagen, führen Sie uv sync erneut aus (oder installieren Sie requirements.txt neu) und bestätigen Sie, dass das venv-Python ≥ 3.11 ist.

Erkennung fehlgeschlagen / anonyme Antworten

Startprotokolle (stderr) sagen, welche Basis-URL getestet wurde und warum sie abgelehnt wurde. Wenn _edge/tenant_info nicht erreichbar ist, setzen Sie ATLASSIAN_CLOUD_ID in .env.

Hinweise für Entwickler, die neu in Python sind

  • Die venv (.venv/) ist eine projektlokale Kopie von Python plus den Paketen dieses Projekts: das Äquivalent zu node_modules, außer dass der Interpreter selbst auch darin lebt. Deshalb muss Claude Code .venv/bin/python mit absolutem Pfad erhalten: Es gibt keine globale Installation, auf die zurückgegriffen werden kann.

  • asyncio.run(...) wird benötigt, weil asynchrone Funktionen in Python nicht einfach durch Aufrufen ausgeführt werden; das Aufrufen einer solchen Funktion gibt ein Coroutine-Objekt zurück, und etwas muss es antreiben. Es gibt keine Umgebungs-Event-Loop wie in Node; asyncio.run() erstellt eine Loop, führt eine Coroutine bis zum Ende aus und baut die Loop wieder ab. Der MCP-Server macht das intern über mcp.run(); der --check-Modus macht es explizit.

  • Die Dekorateure (@mcp.tool) sind Funktionen, die die darunter definierte Funktion empfangen und registrieren/umhüllen, wie eine Middleware-Fabrik, die zur Definitionszeit angewendet wird. FastMCPs Dekorator liest den Namen, die Typ-Hinweise und den Docstring der Funktion, um das MCP-Tool-Schema zu generieren, das Claude sieht; der Docstring ist die API-Dokumentation des Tools.

  • python -m jira_mcp führt die __main__.py des Pakets aus, das, was Python am nächsten an einem npm-bin-Eintrag hat. Es funktioniert von jedem Verzeichnis aus, weil uv sync das Projekt in die venv installiert hat.

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.

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.

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

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.

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

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.

NameRequiredDescriptionDefault
issue_keyYesJira issue key like "PROJ-123".

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

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

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

NameRequiredDescriptionDefault

No parameters

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

  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

Scored across 6 tools

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables interaction with Jira issues via JQL search, epic management, comments, attachments, and issue CRUD, with support for both Cloud and Server/Data Center instances.
    9
    8 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables read-only interaction with JIRA instances via MCP, allowing searching issues, worklogs, sprints, users, and projects through natural language.
    MIT