Static source inference · medium confidence · evidence: structured output
No deprecated protocol patterns detected
Summary
Trello MCP demonstrates solid definition quality overall. All 28 tools are explicitly defined in server.py with proper FastMCP registration, clear verb-prefixed naming (list_, create_, get_, update_, delete_, add_, archive_, search_), and consistent description patterns. Input schemas are fully present with JSON Schema types and descriptions on all parameters. Output handling is structured via _ok() and _error() helper functions returning both text and structured_content. However, there are moderate gaps: (1) error handling is minimal, no recovery guidance, just raw error messages; (2) parameter descriptions, while present, are sometimes terse (e.g., 'Position: top, bottom, or a positive number' lacks explanation of when to use which); (3) enum constraints are not explicitly declared in schemas for constrained inputs (e.g., position, color, action filters); (4) output schemas are not documented, callers cannot see what fields each tool returns without calling it; (5) several tools lack dependency hints or context about when to call them. Tool naming is strong (28/28 start with action verbs), and descriptions are adequate (ranging 50 - 200 chars), but fall short of LLM-optimized guidance. The server is well-structured and functional, placing it in the B/B+ range.
No documented output schemas. Tools return structured_content via _ok() helper but callers cannot see what fields are returned. Missing output documentation forces LLMs to guess field names and types, causing failed downstream tool chaining.
Add documented output schemas for all tools. Specify the structure, field names, types, and key fields returned (e.g., board_id, card_id, list_id). Use comments in the source code or a separate schema document.
Convert free-form string parameters to enums in the JSON Schema. For 'position', use enum: ["top", "bottom"] (and document that numeric strings like "1" are also valid, or require explicit support). For 'color', use enum: ["yellow", "purple", "blue", "red", "green", "orange", "black", "sky", "pink", "lime"]. For 'filter', enumerate valid action types.
Enhance error handling: categorize errors as retryable (network, timeouts), user-fixable (invalid input, not found), or fatal (permission denied, rate limited). Include recovery hints: 'User not found. Try search_users(query) first.' or 'Rate limited. Retry in 60 seconds.'
Add confirmation or dry-run support for destructive tools. E.g., add a 'confirm' parameter to delete_board: 'Pass confirm=true after reviewing the board name to prevent accidental deletion.' Or provide a separate delete_board_confirmed() tool.
Expand parameter descriptions to 50 - 200 characters. For 'position', explain: 'Position in list: "top" (first), "bottom" (last), or 0-based index (e.g., "1" for second position). Defaults to bottom.' For 'due' in create_card, clarify: 'Due date in ISO 8601 format (e.g., 2025-12-31 or 2025-12-31T15:30:00Z). Use UTC for consistency.'
Add pagination support. For tools returning lists (get_card_history, get_card_attachments, search_trello), add 'limit' (default 20, max 100) and 'offset' (default 0) or 'cursor' parameters. Document the default and maximum results in tool descriptions.
Score history
Overall score trend
↑ 6 points across a rubric change (v1 → v2)
58/100
Scored
Grade
Overall
Spec posture
Rubric
2026-09-22
D
58
2025-06-18+
v2
2026-03-09
D
52
-
v1
create_checklistwriteauthsource verified81/100
Create a checklist on a card.
create_labelwriteauthsource verified78/100
Create a label on a board.
Valid colors: yellow, purple, blue, red, green, orange, black, sky, pink, lime.
create_listwriteauthsource verified77/100
Create a new list on a Trello board.
delete_boarddestructiveauthsource verified87/100
Permanently delete a Trello board. This cannot be undone.
Get the action history of a Trello card (moves, edits, comments, etc.).
get_checklistread onlyauthsource verified83/100
Get a checklist with its items.
get_list_cardsread onlyauthsource verified80/100
Get all cards in a Trello list.
get_meread onlyauthsource verified85/100
Get the authenticated Trello member.
list_my_boardsread onlyauthsource verified85/100
List all boards for the authenticated Trello user.
move_cardwriteauthsource verified82/100
Move a Trello card to a different list (and optionally a different board).
search_trelloread onlyauthsource verified80/100
Search Trello for cards and/or boards matching a query.
update_cardwriteauthsource verified78/100
Update one or more fields on a Trello card.
No enum constraints in schemas for parameters with known valid values. 'position' (top|bottom|number), 'color' (yellow|purple|blue|red|green|orange|black|sky|pink|lime), and 'filter' (all|updateCard|commentCard|etc) accept free-form strings instead of enums. LLMs cannot validate inputs and will hallucinate invalid values.
Error handling provides no recovery guidance. _error() returns raw exception messages and status codes (e.g., 'HTTP 404'). LLMs cannot determine whether to retry, ask the user, or try an alternative tool. No categorization of errors as retryable vs. user-fixable vs. fatal.
Destructive operations (delete_board, delete_card_attachment) lack confirmation or dry-run support. Agents can permanently delete boards and attachments without a safeguard. No tool to undo or restore deleted items.
Parameter descriptions are terse and lack LLM-optimizing detail. E.g., 'Position: top, bottom, or a positive number' does not explain the semantic difference (position in queue vs. positional index), when to use each, or what 'positive number' means (1-indexed? 0-indexed?). Expected 50 - 200 character descriptions with clear guidance.
No pagination support or result limits documented. Tools like search_trello, get_card_history, get_card_attachments, and get_card_comments may return unlimited results, risking context window exhaustion. Missing limit and offset/cursor parameters.
No dependency hints or discovery guidance. Tools like create_card require list_id, but no description explains how to find a list (call get_board_lists first). Complex workflows (move card across boards) lack step-by-step guidance. Multi-step operations should hint at prerequisite tools.
Integrate tool annotations from FastMCP. Decorate destructive tools with @mcp.tool(annotations={"destructiveHint": True}); read-only tools with @mcp.tool(annotations={"readOnlyHint": True}). This helps agents prioritize safety.
Add discovery and dependency hints. E.g., create_card description: 'Creates a card in a list. First, call get_board_lists(board_id) to find a list_id, then call this tool. Supports due dates, labels, and members.' For move_card: 'Moves a card to another list (same or different board). Requires list_id (call get_board_lists() to discover) and optionally board_id for cross-board moves.'
Document that Trello API credentials (key and token) are injected via environment (TRELLO_API_KEY, TRELLO_API_TOKEN). Do not accept them as parameters, confirm this in the README and server documentation.
Consider adding batch tools for common multi-step operations: e.g., batch_add_label_to_cards(card_ids, label_id) instead of requiring sequential add_label calls (not currently exposed but would reduce overhead).