Server has 3 tools with basic Zod schemas and error handling, but critical gaps undermine quality. Tool names violate single-responsibility principle (createGitBranchAndPR combines two actions). Parameter descriptions are minimal or absent (e.g., 'status' param in updateJiraStatus lacks format/enum guidance). Output schemas are not documented, responses are JSON-stringified text blobs, not structured objects. No pagination, no result limits, no recovery guidance in errors. Descriptions are present but generic (34 - 72 chars, below 194-char baseline). No tool annotations (readOnlyHint/destructiveHint). Composition is poor: createGitBranchAndPR performs 3 side effects (branch creation, PR template, status update) in one call, preventing agent composition.
Creates a Git branch and pull request template from a Jira issue, and updates the issue status to In Progress
Retrieves a Jira issue by its ID
Updates the status of a Jira issue to a specified status
Tool name 'createGitBranchAndPR' violates single-responsibility principle, combines branch creation, PR template generation, and status update. Should split into separate tools (createGitBranch, createPullRequestTemplate, updateJiraStatus).
Parameter 'status' in updateJiraStatus lacks enum constraint or format description. LLM cannot infer valid values (e.g., 'In Progress', 'Done', 'Blocked'). Should declare enum or document allowed values explicitly.
Output schemas not documented. Tools return JSON-stringified text in content[0].text, not structured objects. LLM cannot parse fields reliably. Should return typed objects with documented fields (e.g., {issueId, key, summary, status}).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
Error messages are generic ('Error: <message>') with no recovery guidance. Should categorize errors (retryable vs user-fixable) and suggest next steps (e.g., 'Issue not found. Try search_jira_issues() with a partial key.').
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLM cannot distinguish safe reads from destructive writes. createGitBranchAndPR and updateJiraStatus should be marked destructive; getJiraIssue should be marked readOnly.