An MCP server that provides tools for querying and interacting with Jira issues and metadata
The Jira MCP server has a reasonable foundation with 9 tools covering core Jira operations (issue lookup, metadata, attachments). However, the definition quality exhibits significant gaps that prevent it from reaching production grade. Naming is mostly sound (verb-first convention), but parameter descriptions are inconsistent, some tools like get_issues have detailed constraints, while metadata tools (get_projects, get_issue_types, get_issue_statuses, get_priorities, get_fields) have NO documented input schemas (empty object {}), making it impossible to validate what they accept. Description quality varies widely: get_issues and download_attachment are well-documented (100+ chars with usage context), but 5 of 9 tools have minimal or missing descriptions. Output schemas are not documented anywhere in the source code, there is no type definition or response contract visible for any tool. Error handling is present via wrapWithErrorHandling and runToolSafely, returning structured ErrorLike objects with status and details fields, which is a positive signal. However, the error messages themselves are not visible in the handler code, so we cannot verify they are actionable or recovery-guiding. Tool composition is clean (single responsibility, tool names map to file structure), and the handler pipeline (error → token limit → result wrapping) is well-architected. The STDIO-only transport is a major limiting factor (see protocolReadiness). Overall, this server is above-median in structure but below production grade in definition completeness.
Downloads a specific attachment file from a Jira issue. Use get_attachments first to obtain the attachment ID. By default returns the file as base64-encoded content. If outputPath is provided, streams the file directly to disk (recommended for large files) and returns a success confirmation instead.
Returns a list of attachments (images, files, etc.) for a specific Jira issue.
Returns detailed information about a specific Jira issue.
Returns a list of Jira issues using JQL with optional filters.
5 of 9 metadata tools (get_projects, get_issue_types, get_issue_statuses, get_priorities, get_fields) have NO input schema definition, Input schema is empty object {} with no documented parameters. This violates the contract that every tool must have an explicit schema. Per HARD SCORING RULE: 'If a tool has NO input schema at all: its schema score MUST be 0.'
5 metadata tools lack meaningful descriptions. Only tool names are present; no WHAT/WHEN/WHY context for LLM tool selection. Without one, LLMs cannot determine when or why to select the tool.' Per HARD SCORING RULE: 'If descriptions are under 20 characters: description score CANNOT exceed 40.' These tools have 0-char descriptions visible.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 38 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 27 | - | v1 |
No output schema documentation anywhere in source code. get_issues, get_issue, get_attachments, download_attachment return results via wrapWithToolResult, but the response structure (field names, types, presence of pagination tokens, attachment metadata format) is never formally defined. LLMs cannot plan downstream tool calls without knowing what fields will be present. LLMs need to know what fields to expect.'
get_issues lacks pagination/result limit documentation. Schema declares maxResults default 50, but description does not mention pagination behavior, whether total_count is returned, or whether subsequent calls should use startAt. State the limit in the tool description.'
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) visible in source. Tools are marked READ_ONLY/WRITE in the assessment table, but the code does not show explicit schema annotations or server capability advertisement of these hints. Per spec 2026-07-28, tool annotations are a CURRENT pattern that reward production readiness.
download_attachment outputPath parameter lacks validation contract. Description says 'Absolute file path to save the attachment directly to disk' but does not specify: path traversal restrictions, allowed directories, filename sanitization rules, or error behavior if directory does not exist. LLMs cannot read JSON Schema pattern fields, they rely on the description text.'
get_attachments has minimal description (65 chars). Does not explain: what metadata is returned (size, type, creator?), whether it returns the full file or just references, or how to use the attachment IDs in downstream calls (e.g. download_attachment). State WHAT the tool does, WHEN to use it, and any prerequisites.'