Skip to main content
Glama

Jira MCP Server (읽기 전용)

Claude Code가 Jira 티켓 컨텍스트(이슈 상세, 댓글 스레드, 티켓 주변의 참조 그래프, JQL 검색 결과)를 간결한 Markdown으로 가져올 수 있게 해주는 로컬 MCP 서버입니다. 이미지 첨부 파일(예: UI 버그 티켓의 스크린샷)은 Claude가 시각적으로 분석할 수 있도록 가져올 수 있습니다.

의도적으로 할 수 없는 것

이 서버는 엄격히 읽기 전용입니다. 무엇이든 생성, 업데이트, 상태 전환, 삭제 또는 댓글을 다는 도구를 노출하지 않습니다. 강제는 계층적으로 이루어집니다:

  1. 코드에서: 모든 HTTP 요청은 GET만 허용하는 단일 헬퍼를 통과하며, 허용 목록에 있는 예외가 하나 있습니다: POST /rest/api/3/search/jql — Atlassian이 POST로 보내도록 요구하는 읽기 작업입니다. 다른 모든 메서드는 ReadOnlyViolationError를 발생시키므로, 나중에 쓰기 호출을 추가하는 편집이 있으면 크게 실패합니다.

  2. 자격 증명 수준에서: API 토큰을 읽기 범위만으로 생성하십시오(아래 참조). 그러면 버그가 있어도 쓸 수 없습니다.

Related MCP server: Jira MCP Server

도구

도구

용도

get_issue(issue_key, include_comments=True)

모든 비어 있지 않은 사용자 정의 필드(수락 기준, 스토리 포인트, ...)를 표시 이름과 함께 포함한 전체 티켓 상세, 그리고 (기본적으로) 댓글 스레드

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

작성자/타임스탬프/수정 여부/공개 범위를 포함한 토론 내용만

get_issue_context(issue_key)

상위 이슈, 하위 작업, 연결된 이슈(연결 방향 포함), 에픽 하위 항목 — 각각 키 + 유형 + 상태 + 요약으로 표시

search_issues(jql, limit=25)

간결한 JQL 검색 결과

get_attachment(attachment_id)

이미지 첨부 파일(get_issue가 나열)을 다운로드하여 비전 입력으로 반환하므로 Claude가 스크린샷을 볼 수 있습니다. 이미지만 가능(png/jpeg/gif/webp), 최대 5MB; 비디오 및 기타 파일 유형은 거부됩니다

whoami()

토큰이 어떤 계정으로 확인되는지; 인증 디버깅의 첫 번째 단계

설정

1. Atlassian API 토큰 생성

  1. https://id.atlassian.com/manage-profile/security/api-tokens로 이동합니다.

  2. 범위가 있는 API 토큰 생성을 선택합니다(Atlassian은 범위 없는 토큰을 폐지하고 있습니다).

  3. Jira 앱을 선택하고 다음 범위만 선택합니다:

    • read:jira-work

    • read:jira-user

  4. 토큰을 즉시 복사하십시오. 한 번만 표시됩니다.

이전의 범위 없는 토큰도 작동합니다. 서버는 두 가지를 모두 자동으로 처리합니다(아래 참조).

2. .env 구성

cp .env.example .env   # then edit

필수 키(이것이 전체 구성 표면입니다):

키

값

ATLASSIAN_EMAIL

Atlassian 계정의 이메일

ATLASSIAN_API_TOKEN

1단계의 토큰

ATLASSIAN_SITE_URL

예: https://your-company.atlassian.net

.env는 gitignore 처리되어 있습니다. 절대 커밋하지 마십시오. 실제 환경 변수가 파일보다 우선합니다. 파일은 프로젝트 디렉터리(작업 디렉터리가 아님)를 기준으로 위치하므로, 서버가 어디서 실행되든 찾을 수 있습니다.

3. 의존성 설치

uv 사용(이 저장소에는 uv.lock이 있으므로 권장):

uv sync

또는 venv에 일반 pip 사용:

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

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

이 명령은 .env가 발견되었는지, 어떤 기본 URL이 선택되었는지(그리고 cloud-ID 폴백이 필요했는지), 인증된 계정, 그리고 키가 주어지면 Claude가 보는 것과 정확히 동일한 티켓을 출력합니다.

범위 있는 토큰 vs. 범위 없는 토큰: 기본 URL 문제

  • 범위 없는 토큰은 사이트 URL https://<site>.atlassian.net에서 작동합니다.

  • 범위 있는 토큰은 동일한 URL에서 조용히 실패하여 익명처럼 보이는 응답을 반환합니다. 대신 https://api.atlassian.com/ex/jira/{cloudId}를 호출해야 합니다.

어떤 종류를 보유하고 있는지 알 필요는 없습니다. 시작 시 서버는 GET /rest/api/3/myself로 사이트 URL을 프로브합니다. 실제 계정이 반환되지 않으면 {site}/_edge/tenant_info에서 cloud ID를 가져와 api.atlassian.com에 재시도합니다. 승자는 프로세스 수명 동안 캐시되고 stderr에 기록됩니다.

감지가 실패하는 경우: _edge/tenant_info는 Atlassian의 공식 지원 REST API의 일부가 아닙니다(Atlassian 자체 지원 문서가 이를 가리키지만). 변경될 수 있습니다. 이 경우 .env에 ATLASSIAN_CLOUD_ID를 설정하여 감지를 건너뛰십시오. 오류 메시지가 이 경우가 적용되는 시점을 알려줍니다. 거의 필요하지 않습니다.

PyCharm 설정

  1. 인터프리터: Settings → Project → Python Interpreter → Add Interpreter → Existing → 프로젝트 디렉터리에서 .venv/bin/python 선택. (uv sync를 실행했다면 venv에 모든 것이 이미 설치되어 있습니다.)

  2. 디버깅용 실행 구성: Run → Edit Configurations → + → Python:

    • Run: 모듈 jira_mcp("script path" 대신 "module" 선택)

    • Parameters: --check PROJ-123

    • Working directory: 프로젝트 루트(아무거나 작동하지만 깔끔합니다)

    이제 어디서든 중단점을 설정하고(예: client.py에서) 실제 요청을 디버깅할 수 있습니다. 실행 중인 MCP 서버 내부의 오류는 그렇지 않으면 보이지 않습니다.

Claude Code에 연결

venv의 Python을 절대 경로로 사용하십시오. Claude Code가 서버를 실행할 때 단순한 python은 venv로 해석되지 않습니다.

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

참고:

  • -- 뒤의 모든 것은 Claude가 실행하는 명령입니다. -- 앞의 모든 것은 Claude 자신의 옵션입니다.

  • 기본 범위는 local입니다(사용자 본인만, 이 프로젝트만, ~/.claude.json에 저장). 체크인된 .mcp.json을 통해 공유하려면 --scope project를 추가하고, 모든 프로젝트에서 사용하려면 --scope user를 추가하십시오.

연결 확인

Claude Code 세션 내에서:

  • /mcp를 실행하면 jira 서버가 연결된 것으로 표시되고 여섯 개의 도구가 나열되어야 합니다.

  • 또는 그냥 물어보십시오: "use whoami to check the jira connection".

문제 해결

증상

가능한 원인 및 해결 방법

401 Unauthorized

이메일 또는 토큰이 잘못되었거나 토큰이 해지/만료되었습니다. 토큰을 다시 생성하고 .env를 업데이트하십시오. --check로 확인하십시오.

403 Forbidden

범위 있는 토큰에 read:jira-work / read:jira-user가 없거나 계정에 사이트 액세스 권한이 없습니다. 두 읽기 범위로 토큰을 다시 생성하십시오.

404 Not Found

이슈가 존재하지 않거나 계정에 이를 볼 권한이 없습니다. Jira는 볼 수 없는 이슈를 404로 보고하며, 토큰은 소유한 사람보다 더 많은 액세스 권한을 부여하지 않습니다. 해당 계정으로 로그인한 상태에서 브라우저로 티켓을 열 수 있는지 확인하십시오.

Claude에서 도구 목록이 비어 있음

서버가 시작 시 충돌했습니다. claude mcp add의 정확한 명령을 터미널에서 직접 실행하십시오. 시작 오류는 stderr에 출력됩니다. 일반적인 원인: 잘못된 Python 경로 또는 .env 키 누락.

서버가 시작되지 않음

--check를 실행하십시오. 구성 누락이 보고되면 .env를 수정하십시오. 가져오기가 실패하면 uv sync를 다시 실행하고(또는 requirements.txt를 재설치하고) venv Python이 ≥ 3.11인지 확인하십시오.

감지 실패 / 익명 응답

시작 로그(stderr)에 어떤 기본 URL이 프로브되었고 왜 거부되었는지 표시됩니다. _edge/tenant_info에 연결할 수 없으면 .env에 ATLASSIAN_CLOUD_ID를 설정하십시오.

Python을 처음 접하는 개발자를 위한 참고 사항

  • venv(.venv/)는 Python과 이 프로젝트의 패키지가 포함된 프로젝트 로컬 복사본입니다: node_modules와 동일하지만 인터프리터 자체도 그 안에 있습니다. 그래서 Claude Code에 .venv/bin/python을 절대 경로로 제공해야 합니다. 대체할 전역 설치가 없습니다.

  • asyncio.run(...) 이 필요한 이유는 Python의 async 함수는 호출만으로 실행되지 않기 때문입니다. 호출하면 코루틴 객체가 반환되며, 누군가가 이를 구동해야 합니다. Node처럼 주변 이벤트 루프가 없습니다. asyncio.run()은 루프를 만들고 하나의 코루틴을 완료까지 실행한 다음 루프를 정리합니다. MCP 서버는 mcp.run()을 통해 내부적으로 이 작업을 수행합니다. --check 모드는 명시적으로 수행합니다.

  • 데코레이터(@mcp.tool)는 아래에 정의된 함수를 받아 등록/래핑하는 함수로, 정의 시점에 적용되는 미들웨어 팩토리와 같습니다. FastMCP의 데코레이터는 함수 이름, 타입 힌트, docstring을 읽어 Claude가 보는 MCP 도구 스키마를 생성합니다. docstring이 곧 도구의 API 문서입니다.

  • python -m jira_mcp 는 패키지의 __main__.py를 실행합니다. Python에서 npm bin 항목에 가장 가까운 것입니다. uv sync가 프로젝트를 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.

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