AI-native Kanban project management server for Claude Code & Codex, providing MCP tools for ticket and project management
Forge MCP demonstrates solid fundamentals: all 7 tools have clear verb-noun names (list_*, create_*, update_*, get_*, add_*), explicit JSON schemas with typed parameters, and descriptions. However, parameter descriptions are sparse (many lack detail on format/constraints), output schemas are not documented, and error handling lacks recovery guidance. Tool composition is clean (single responsibility), but descriptions average ~40 chars, below the 194-char baseline for A+ tools. No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles.
Add a comment to a ticket
Create a new ticket in a project
Get a ticket by reference with full relations (tags and comments)
List all projects
List tickets with optional filtering
Update ticket fields (title, description, acceptance_criteria, priority)
Update ticket status (backlog, in_dev, review, done)
Parameter descriptions lack format/constraint details. E.g., 'Ticket reference (e.g. PI-42)' does not explain the format pattern or validation rules. LLMs cannot infer whether 'PI-42' is the only valid format or if 'PI_42' or 'pi-42' are acceptable.
Output schemas are not documented. Tools return structured data (tickets with tags/comments, project lists) but the response format is not visible in the tool definitions. LLMs cannot plan downstream calls or extract required fields without trial-and-error.
Tool descriptions are too brief (avg ~40 chars vs 194-char baseline). 'List all projects' and 'List tickets with optional filtering' lack context on when to call them, what data they reveal, or how they fit into workflows. LLMs struggle to select the right tool when descriptions are terse.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk metadata is provided in the spec (READ_ONLY, WRITE) but not exposed in tool definitions. Clients cannot determine which tools are safe to retry or which modify state without external documentation.
Error handling does not guide recovery. The server returns AppError messages for client errors (4xx) but does not suggest next steps. E.g., 'Ticket not found' should suggest 'Try list_tickets() to find valid references' to enable agent self-correction.