A Model Context Protocol server for Atlassian Jira integration enabling comprehensive issue management, sprint tracking, comments, worklogs, and project operations
The server provides 19 tools with explicit schemas, descriptions, and clear naming. All tools follow verb_noun conventions (get_, create_, update_, search_, list_, add_, link_, move_) which is excellent for LLM parsing. However, several significant gaps prevent a higher score: (1) Output schemas are NOT documented, the code shows input schemas but no return type specifications, forcing LLMs to guess what fields they'll receive. (2) Parameter descriptions lack specificity, many omit constraints, ranges, or valid values (e.g., 'Type of issue to create (default: Task)' doesn't enumerate valid issue types). (3) No enumerated constraints where they exist (e.g., priority, status, link_type all accept free-form strings instead of enum lists). (4) Error handling is not visible in the provided code, no guidance on how failures are communicated or what recovery steps are available. (5) Missing dependency documentation, many tools reference IDs (board_id, sprint_id, project_key) without explaining how to obtain them if unknown. Tool naming and input schemas are strong; execution guidance and output contracts are weak.
Add comments to issues
Add worklogs with time tracking and custom start times. Supports flexible time formats (3h, 30m, 1h 30m, etc.)
Create a child issue (subtask) under an existing parent issue with automatic parent linking
Create a new Jira issue in the specified project with full field support
Get the currently active sprint for a board
Get all boards or filter by project
Output schemas are completely undocumented. No return type specifications visible in code. LLMs cannot predict what fields will be returned (e.g., does get_issue return 'status' or 'issue_status'? Does it include 'sprint_id' needed for later move_issues_to_sprint calls?). This violates the core pattern that tools must document what they return so agents can chain operations.
Parameter descriptions lack constraints and valid values. Examples: 'issue_type' in create_issue says 'Type of issue to create (default: Task)' but doesn't enumerate valid types (Task, Bug, Story, etc.). 'priority' and 'link_type' accept free-form strings with no enumeration. 'transition_name' accepts arbitrary strings with no guidance on valid workflow states. LLMs will hallucinate invalid values, causing API failures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Retrieve all comments from issues
Get detailed information about a specific Jira issue including status, assignee, description, subtasks, and available transitions
Get the change history and timeline of an issue
Get related issues and their relationships
Get detailed information about a specific sprint including its issues
Link issues with relationship types (blocks, duplicates, relates to)
List all available issue types for any project
List all available statuses for a project and its issue types
List all sprints for a board
Move issues to a specific sprint
Search for Jira issues using powerful JQL (Jira Query Language)
Transition issues through workflow states
Update an existing Jira issue with partial field updates
Missing output pagination documentation. search_issues and other list tools accept max_results but do not document: (1) Whether results are paginated and how to fetch the next page (offset, cursor, continuation token?). (2) Whether the response includes total_count, next_cursor, or has_more. (3) What happens if more results exist than the limit. Without this, agents may silently get incomplete results and miss critical data.
Error handling and recovery guidance is not visible in tool definitions. No indication of what errors are possible, when they occur, or what the LLM should do. For example: create_issue might fail if the project_key is invalid, but the agent has no guidance to call list_project_statuses or search for the correct key. No indication of retryable vs. fatal errors.
Missing dependency documentation. Many tools require IDs (board_id, sprint_id, project_key) but don't explain how to obtain them. For example, get_active_sprint expects board_id but agents may only know the project name. Missing hints like 'If you only have a project name, call get_boards() first to find the board_id.'
No field consistency documentation. Parameter 'assignee' in create_issue and update_issue says 'username or email (optional)' but doesn't specify which format the API prefers or whether both are equally supported. This forces the LLM to guess or try both, wasting API calls.
Destructive write operations (update_issue, delete operations implied) lack confirmation or dry-run capability. No indication that update_issue modifies state irreversibly or guidance on safe usage patterns. Pattern suggests confirmation_request for critical operations.