ynab-mcp has solid naming conventions (verb_noun pattern) and complete input schemas with type definitions. All 12 tools have descriptions and parameters are typed. However, descriptions are terse (avg ~50 chars, well below the 194-char baseline), lack actionable context for LLM selection, and omit dependency hints. Parameter descriptions are minimal, many just restate the name. Output schemas are not documented. Error handling returns generic error text without recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Missing pagination guidance for list tools. Overall: functional but underoptimized for agent reasoning.
Create a new transaction in a YNAB budget
Delete a transaction from a YNAB budget
Get details for a specific YNAB budget
Get details for a specific category in a YNAB budget
Get budget summary for a specific month including category breakdowns
Get details for a specific transaction
List all accounts in a YNAB budget
Descriptions are terse (avg ~50 chars vs 194-char baseline) and lack LLM-optimized context. E.g., 'List all YNAB budgets for the authenticated user' does not explain WHEN to call this vs get_budget, or what structure is returned. Agents cannot distinguish similar tools.
Parameter descriptions are minimal and often just restate the name. E.g., 'budget_id' param has description 'Budget ID or last-used' but does not explain format, how to obtain it, or what 'last-used' means. Agents cannot infer valid input.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
List all YNAB budgets for the authenticated user
List all category groups and categories in a YNAB budget
List all payees in a YNAB budget
List transactions in a YNAB budget. Optionally filter by date, type, account, category, or payee (only one entity filter at a time).
Update an existing transaction in a YNAB budget
No output schemas documented. Agents cannot plan downstream calls or extract required fields. E.g., list_budgets returns a list but no schema shows field names, types, or whether pagination is supported.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. delete_transaction is DESTRUCTIVE but unmarked. Agents cannot reason about safety or retry logic.
Error handling returns generic error text (errResult(err)) without recovery guidance. E.g., 'API error' tells agent nothing about whether to retry, ask user, or abort. No error classification or actionable next steps.