An MCP server for interacting with Jira, built in Kotlin
This Kotlin MCP Jira server has 8 tools with complete input schemas and descriptions, but quality is inconsistent. All tools have basic parameter documentation, yet descriptions are generic and lack depth about when/why to use each tool. Parameter schemas are well-formed with proper types, but no enums constrain Jira-specific values (e.g., transition IDs, status names). Error handling and output schemas are not visible in the provided code. Tools follow a clear verb_noun naming pattern (get*, add*, update*, move*), but lack discovery guidance and chaining context. The server shows competent SDK usage but falls short of production-grade agent tool quality, descriptions are utilitarian rather than LLM-optimized, and critical context about dependencies and side effects is missing.
Add a comment to a Jira issue
Get the current active sprint for a board
Get detailed information about a specific Jira issue
Get detailed information for multiple Jira issues
Get available transitions for a Jira issue
Get all issues from the current active sprint of a board
Move a Jira issue to a different status by applying a transition
Output schemas are not documented anywhere in code. LLMs cannot plan downstream calls or extract structured data when return fields are unknown.
Descriptions lack context about dependencies and multi-step flows. Example: moveIssueWithTransition requires getIssueTransitions first, but descriptions do not state this. Agents cannot plan without explicit guidance.
No enums or format constraints on Jira-specific fields (transitionId, boardId, issueIdOrKey). Agents can pass invalid Jira IDs, leading to API errors with no recovery guidance visible.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 51 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 32 | - | v1 |
Update the title (summary) or body (description) of a Jira issue
Write operations (addCommentForIssue, moveIssueWithTransition, updateIssueTitleOrBody) lack explicit warnings about irreversibility or confirmation/dry-run patterns. Agents may accidentally modify data without safeguards.
Parameter descriptions are terse (typically 1-2 phrases). Rubric baseline is 72 chars average; these are mostly 30-40 chars. Lack of detail on constraints, formats, and valid values.
No pagination guidance. getIssuesFromCurrentSprint and getIssueDetailsForList accept lists/multiple items but do not specify max limits, batching rules, or partial failure behavior.
Error handling is not visible in tool definitions. No guidance on what to do when issue/board is not found, transition is invalid, or API rate limits are hit.
updateIssueTitleOrBody has both parameters optional (summary and description). No guidance on what happens if neither is provided, does the call succeed silently or fail? This ambiguity invites wrong agent behavior.