YNAB MCP Server
Provides comprehensive integration with YNAB (You Need A Budget) for managing personal finances, including tools for budget management, transaction operations, category organization, split transactions, scheduled transactions, and spending analytics with visualization capabilities.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@YNAB MCP Servershow me my unapproved transactions for this month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
YNAB MCP Server
MCP server for YNAB (You Need A Budget) integration, enabling AI assistants to help manage your budget.
Setup
Install dependencies with
uv:
uv syncGet your YNAB Personal Access Token:
Create a new Personal Access Token
Copy the token
Create
.envfile:
cp .env.example .envAdd your token to
.env:
YNAB_ACCESS_TOKEN=your_token_hereRelated MCP server: YNAB MCP Server
Running the Server
uv run python -m ynab_mcpInstalling in Claude Code
Add to your Claude Code configuration:
claude mcp add ynab -- uv --directory /path/to/ynab-mcp run python -m ynab_mcpOr add to .claude.json manually in the mcpServers section:
{
"ynab": {
"type": "stdio",
"command": "uv",
"args": ["--directory", "/home/your-user/Code/ynab-mcp", "run", "python", "-m", "ynab_mcp"],
"env": {}
}
}Available Tools
Health & Diagnostics
health_check- Check server health and YNAB API connectivity
Account Management
get_accounts- Get all accounts for a budget
Category & Budget Management
get_category- Get a single category with full details including goal informationget_categories- Get all categories for a budget (lightweight list)get_budget_summary- Get budget summary for a specific monthupdate_category- Update category properties (name, note, group, or goal target)update_category_budget- Update the budgeted amount for a category in a specific monthmove_category_funds- Move funds from one category to another
Transaction Management
get_transaction- Get a single transaction with full details including subtransactionsget_transactions- Get transactions with pagination and filtering (date range, account, category, limit, page)search_transactions- Search transactions by text in payee name or memocreate_transaction- Create a new transactionupdate_transaction- Update an existing transaction (⚠️ cannot add/modify splits on existing transactions)get_unapproved_transactions- Get all unapproved transactions that need review
Split Transaction Management
create_split_transaction- Create a new transaction split across multiple categoriesprepare_split_for_matching- Split an existing imported transaction by creating a matching split for manual reconciliation in YNAB UI
Scheduled Transactions
get_scheduled_transactions- List all scheduled transactionscreate_scheduled_transaction- Create future/recurring transactionsdelete_scheduled_transaction- Delete scheduled transactions
Analytics & Reporting
get_category_spending_summary- Get spending summary with optional terminal graph visualizationcompare_spending_by_year- Year-over-year spending comparison with optional graph
Features
Robust Error Handling
Custom exception classes for different error types
Automatic retry logic with exponential backoff
Rate limit detection and handling (respects Retry-After headers)
Comprehensive logging (configurable via
LOG_LEVELenvironment variable)
Performance & Reliability
HTTP connection pooling for better performance
Input validation on all parameters
Timeout configuration (30s default)
Milliunits conversion handled automatically
Split Transaction Support
Split transactions allow you to allocate a single transaction across multiple categories (e.g., splitting a grocery store purchase into "Groceries" and "Household Items").
Creating New Split Transactions:
create_split_transaction(
budget_id="last-used",
account_id="account-id",
date="2025-10-06",
amount=-80.00,
subtransactions='[{"amount": -50.00, "category_id": "groceries-id", "memo": "Food"}, {"amount": -30.00, "category_id": "household-id", "memo": "Supplies"}]'
)Splitting Existing Imported Transactions:
Due to YNAB API limitations, you cannot directly modify an existing transaction to add splits. Instead, use prepare_split_for_matching:
Call
prepare_split_for_matchingwith the existing transaction ID and desired splitsThe tool fetches the original transaction details and creates a new unapproved split transaction
Go to YNAB (web or mobile) and manually match the two transactions
YNAB merges them into one split transaction, preserving the bank import connection
Important Limitations:
Cannot add or update subtransactions on existing transactions via the API
Cannot convert a regular transaction into a split transaction directly
Once created, subtransactions cannot be modified via the API
Split transaction dates and amounts cannot be changed after creation
Analytics & Visualization
Server-side spending aggregation to reduce context usage
Optional terminal-based graph visualization using termgraph
Year-over-year spending comparisons
Monthly spending summaries
Configuration
Environment Variables
YNAB_ACCESS_TOKEN(required) - Your YNAB Personal Access TokenLOG_LEVEL(optional) - Logging level (DEBUG, INFO, WARNING, ERROR, default: INFO)
Troubleshooting
MCP Server Not Connecting
Run the health check tool:
health_checkCheck that
YNAB_ACCESS_TOKENis set in your.envfileVerify the token is valid at https://app.ynab.com/settings/developer
Check logs with
LOG_LEVEL=DEBUG
Rate Limit Errors
The YNAB API has a rate limit of 200 requests per hour. The server automatically:
Detects 429 (rate limit) responses
Retries with exponential backoff
Respects
Retry-Afterheaders
If you consistently hit rate limits, consider:
Using analytics tools (
get_category_spending_summary,compare_spending_by_year) instead of fetching all transactionsReducing the frequency of requests
Caching results when possible
Large Response Sizes
For queries spanning long time periods, use:
get_category_spending_summary- Returns aggregated summary instead of all transactionscompare_spending_by_year- Returns year-over-year totals instead of individual transactionsPagination with
get_transactions(uselimitandpageparameters)
Development
Running Tests
Install dev dependencies:
uv sync --extra devRun tests:
uv run pytest tests/ -vCode Quality
The codebase includes:
Input validation on all parameters
Custom exception classes for proper error handling
Comprehensive logging
Type hints with
from __future__ import annotationsConnection pooling for HTTP requests
Automatic retry logic for transient failures
Available Tools
21 toolscompare_spending_by_yearB
Compare spending for a category across multiple years.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
category_id: The category ID to analyze
start_year: Starting year (e.g., 2020)
num_years: Number of years to compare (default: 5)
include_graph: Include terminal graph visualization (default: True)
Returns:
JSON string with year-over-year comparison including totals, changes, percentage changes, and optional graph
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes | ||
| category_id | Yes | ||
| include_graph | No | ||
| num_years | No | ||
| start_year | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool returns a JSON string with comparison data and an optional graph, which adds some behavioral context. However, it lacks details on permissions, rate limits, data freshness, or side effects (e.g., whether it's read-only or has any impact). For a tool with no annotations, this is insufficient to fully understand its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and appropriately sized. It starts with a clear purpose sentence, followed by an 'Args' section with bullet-like explanations, and ends with a 'Returns' section. Each sentence adds value, with no redundant information. It could be slightly more concise by integrating the default values more seamlessly, but overall it's efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, no annotations, but with an output schema), the description is fairly complete. It explains the purpose, parameters, and return format. The output schema likely covers return values in detail, so the description doesn't need to elaborate further. However, it lacks behavioral context like error handling or data constraints, which would enhance completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for all parameters: 'budget_id' (with 'last-used' default note), 'category_id' (to analyze), 'start_year' (with example), 'num_years' (default and purpose), and 'include_graph' (default and effect). This goes beyond the schema's basic titles, providing context and usage hints that aid parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Compare spending for a category across multiple years.' It specifies the verb ('compare') and resource ('spending for a category'), but doesn't explicitly differentiate from sibling tools like 'get_category_spending_summary' or 'get_category', which might offer related functionality. The purpose is specific but lacks sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description mentions what it does but doesn't specify contexts, prerequisites, or exclusions. For example, it doesn't clarify if this is for historical analysis versus real-time data, or how it differs from 'get_category_spending_summary'. This leaves the agent without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_scheduled_transactionA
Create a scheduled transaction (for future/recurring transactions).
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
account_id: The account ID for this scheduled transaction
date_first: The first date the transaction should occur (YYYY-MM-DD format)
frequency: Frequency (never, daily, weekly, everyOtherWeek, twiceAMonth, every4Weeks, monthly, everyOtherMonth, every3Months, every4Months, twiceAYear, yearly, everyOtherYear)
amount: Transaction amount (positive for inflow, negative for outflow)
payee_name: Name of the payee (optional)
category_id: Category ID (optional)
memo: Transaction memo (optional)
flag_color: Flag color - red, orange, yellow, green, blue, purple (optional)
Returns:
JSON string with the created scheduled transaction
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| amount | Yes | ||
| budget_id | Yes | ||
| category_id | No | ||
| date_first | Yes | ||
| flag_color | No | ||
| frequency | Yes | ||
| memo | No | ||
| payee_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While it states this creates a scheduled transaction (implying a write operation), it doesn't disclose important behavioral traits like required permissions, whether the creation is idempotent, rate limits, error handling, or what happens if invalid parameters are provided. The description covers basic functionality but lacks operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, Args, Returns) and uses bullet-like formatting for parameters. While somewhat lengthy due to comprehensive parameter documentation, every sentence earns its place. The purpose statement is front-loaded, and the parameter explanations are efficiently presented.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, write operation) and lack of annotations, the description does well by thoroughly documenting parameters and stating the return format. However, with no output schema, it could provide more detail about the JSON structure returned. The description covers most essentials but could benefit from more behavioral context for this mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing detailed parameter documentation. Each parameter gets clear explanations including format requirements (YYYY-MM-DD), special values ('last-used'), sign conventions (positive/negative amounts), enumerated options for frequency and flag_color, and optional/required status. This adds substantial value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Create') and resource ('scheduled transaction'), and distinguishes it from siblings by specifying it's for 'future/recurring transactions' (unlike create_transaction which likely handles immediate transactions). The parenthetical clarification adds valuable differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through 'for future/recurring transactions' but doesn't explicitly state when to use this tool versus alternatives like create_transaction or create_split_transaction. No guidance is provided about prerequisites, error conditions, or when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_split_transactionA
Create a NEW split transaction with multiple category allocations.
This tool creates a brand new transaction that is split across multiple categories.
It CANNOT be used to add splits to an existing transaction - the YNAB API does not support that.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
account_id: The account ID for this transaction
date: Transaction date in YYYY-MM-DD format
amount: Total transaction amount (positive for inflow, negative for outflow)
subtransactions: JSON string containing array of subtransactions. Each subtransaction should have:
- amount (required): The subtransaction amount
- category_id (optional): Category ID for this split
- payee_id (optional): Payee ID for this split
- memo (optional): Memo for this split
Example: '[{"amount": -50.00, "category_id": "cat1", "memo": "Groceries"}, {"amount": -30.00, "category_id": "cat2", "memo": "Gas"}]'
payee_name: Name of the payee for the main transaction (optional)
memo: Transaction memo (optional)
cleared: Cleared status - 'cleared', 'uncleared', or 'reconciled' (default: 'uncleared')
approved: Whether the transaction is approved (default: False)
Returns:
JSON string with the created split transaction
Important Notes:
- This creates a NEW transaction only - cannot modify existing transactions to add splits
- The sum of subtransaction amounts should equal the total transaction amount
- Once created, subtransactions cannot be modified via the API (YNAB limitation)
- To "split" an existing transaction, you must delete it and create a new split transaction
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| amount | Yes | ||
| approved | No | ||
| budget_id | Yes | ||
| cleared | No | uncleared | |
| date | Yes | ||
| memo | No | ||
| payee_name | No | ||
| subtransactions | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and does so comprehensively. It explains critical behavioral traits: that this creates new transactions only (not modifies existing ones), the sum validation requirement for subtransactions, the API limitation that subtransactions cannot be modified after creation, and the workaround for splitting existing transactions. This provides essential context beyond basic functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, args, returns, important notes) and efficiently conveys necessary information. While somewhat lengthy due to the complexity of the tool, every sentence earns its place by providing critical guidance, parameter explanations, or behavioral context. The front-loaded purpose statement immediately communicates the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, creation operation with significant behavioral constraints) and the absence of annotations, the description provides complete context. It covers purpose, usage guidelines, detailed parameter semantics, behavioral limitations, and return information. The presence of an output schema means the description doesn't need to explain return values, allowing it to focus on other critical aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds substantial meaning beyond the input schema, which has 0% description coverage. It explains the purpose of each parameter (e.g., 'budget_id: The ID of the budget (use 'last-used' for default budget)'), provides format requirements ('date: Transaction date in YYYY-MM-DD format'), clarifies sign conventions ('amount: positive for inflow, negative for outflow'), and gives detailed examples for the complex 'subtransactions' parameter with JSON structure and field explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('create a NEW split transaction') and resources ('multiple category allocations'). It explicitly distinguishes this from sibling tools like 'create_transaction' by emphasizing the split functionality and API limitations, making it easy to understand what this tool does uniquely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('create a brand new transaction that is split across multiple categories') and when not to use it ('cannot be used to add splits to an existing transaction'). It also mentions alternatives implicitly by noting YNAB API limitations and suggesting deletion/recreation for existing transactions, giving clear context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_transactionB
Create a new transaction.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
account_id: The account ID for this transaction
date: Transaction date in YYYY-MM-DD format
amount: Transaction amount (positive for inflow, negative for outflow)
payee_name: Name of the payee (optional)
category_id: Category ID (optional)
memo: Transaction memo (optional)
cleared: Cleared status - 'cleared', 'uncleared', or 'reconciled' (default: 'uncleared')
approved: Whether the transaction is approved (default: False)
Returns:
JSON string with the created transaction
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| amount | Yes | ||
| approved | No | ||
| budget_id | Yes | ||
| category_id | No | ||
| cleared | No | uncleared | |
| date | Yes | ||
| memo | No | ||
| payee_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool creates a transaction and returns JSON, but lacks details on permissions, side effects, error handling, or rate limits. For a mutation tool with zero annotation coverage, this is insufficient to ensure safe and effective use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for Args and Returns, making it easy to parse. It's appropriately sized with no redundant information. A minor deduction because the 'Create a new transaction' line is somewhat redundant with the tool name, but overall it's efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, mutation operation) and the presence of an output schema, the description is mostly complete. It thoroughly documents parameters and return format. However, it lacks behavioral context like permissions or error handling, which is a gap for a creation tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant value beyond the input schema, which has 0% schema description coverage. It explains all 9 parameters clearly, including optionality, defaults, formats (e.g., 'YYYY-MM-DD'), and semantics (e.g., 'positive for inflow, negative for outflow'). This compensates fully for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create a new transaction.' It specifies the verb ('create') and resource ('transaction'), making the action unambiguous. However, it doesn't differentiate from sibling tools like 'create_scheduled_transaction' or 'create_split_transaction', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'create_scheduled_transaction' or 'create_split_transaction', nor does it specify prerequisites or exclusions. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_scheduled_transactionB
Delete a scheduled transaction.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
scheduled_transaction_id: The ID of the scheduled transaction to delete
Returns:
JSON string with confirmation
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes | ||
| scheduled_transaction_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the action is 'Delete' which implies a destructive mutation, but doesn't mention whether this is reversible, what permissions are required, or what happens to associated data. The 'Returns' note is minimal and doesn't describe error conditions or confirmation details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a clear purpose statement followed by organized Args and Returns sections. Every sentence serves a purpose: the first states the action, the next two explain parameters, and the last indicates return type. It could be slightly more concise by integrating the parameter explanations into a single paragraph, but overall it's well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no annotations, the description is moderately complete. It covers the basic action and parameters adequately, and the presence of an output schema means it doesn't need to detail return values. However, it lacks important context about the mutation's consequences, error handling, and relationship to sibling tools, which is significant for a delete operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context for both parameters beyond the schema's 0% coverage. It explains that 'budget_id' can use 'last-used' for the default budget, which is crucial operational guidance not in the schema. For 'scheduled_transaction_id', it clarifies this identifies 'the scheduled transaction to delete', making the parameter's role clear despite the schema lacking descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete' and the resource 'a scheduled transaction', making the purpose unambiguous. However, it doesn't differentiate from sibling tools like 'delete_transaction' (if it existed) or explain what distinguishes scheduled transactions from regular ones, which would be helpful given the sibling tool list includes both transaction types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'create_scheduled_transaction', 'get_scheduled_transactions', and 'update_transaction', there's no indication of prerequisites, consequences, or when deletion is appropriate versus modification. The minimal 'Args' section doesn't substitute for usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountsB
Get all accounts for a budget.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
Returns:
JSON string with list of accounts
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states it returns a JSON string with a list of accounts, which is helpful, but lacks critical details like whether this is a read-only operation, if it requires specific permissions, or if there are rate limits. This is inadequate for a tool with potential data access implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a purpose statement followed by Args and Returns sections, making it easy to parse. It's concise with no wasted words, though the formatting could be slightly more polished (e.g., using bullet points).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (which covers return values) and low complexity, the description is moderately complete. It explains the parameter well but lacks behavioral context and usage guidelines, making it sufficient for basic use but not fully informative for an agent navigating sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate fully. It does so by clearly explaining the single parameter 'budget_id', including its purpose and a special value ('last-used' for default budget), adding significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'accounts for a budget', making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_budget_summary' or 'get_categories', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There are multiple sibling tools for retrieving data (e.g., 'get_transactions', 'get_categories'), but no indication of when this specific tool is appropriate, leaving the agent to guess based on context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_budget_summaryA
Get budget summary for a specific month.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
month: Month in YYYY-MM-DD format (e.g., 2025-01-01 for January 2025)
Returns:
JSON string with budget summary including income, budgeted amounts, and category details
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes | ||
| month | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read operation ('Get') but doesn't specify permissions, rate limits, error handling, or whether it's idempotent. For a tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded: the first sentence states the purpose clearly, followed by structured sections for Args and Returns. Every sentence adds value without redundancy, making it efficient and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (which covers return values), the description provides good context with parameter details and a high-level return overview. However, as a read operation with no annotations, it could benefit from more behavioral transparency (e.g., error cases, data freshness) to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds substantial meaning beyond the input schema, which has 0% description coverage. It explains that 'budget_id' can use 'last-used' for default budget and specifies the exact format for 'month' (YYYY-MM-DD with examples), compensating fully for the schema's lack of documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'budget summary' with the scope 'for a specific month', making the purpose evident. However, it doesn't explicitly differentiate from sibling tools like 'get_category_spending_summary' or 'update_category_budget', which might handle similar budget-related data, so it misses full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_category_spending_summary' or 'update_category_budget', nor does it mention prerequisites or exclusions. It only states what the tool does, without contextual usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_categoriesA
Get all categories for a budget.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
include_hidden: Include hidden categories and groups (default: False)
Returns:
JSON string with category groups and categories
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes | ||
| include_hidden | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It implies a read operation ('Get') and specifies return format ('JSON string with category groups and categories'), but lacks details on permissions, rate limits, or error handling. It adds some behavioral context but is incomplete for a tool with potential data access implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief purpose statement followed by clear sections for Args and Returns. Every sentence adds value, with no redundant or unnecessary information, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no annotations, but has output schema), the description is fairly complete. It covers purpose, parameters, and return format, but lacks usage guidelines and some behavioral details like error cases or performance considerations, which would enhance completeness further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the input schema, which has 0% description coverage. It explains that 'budget_id' can use 'last-used' for default budget and clarifies the default and purpose of 'include_hidden'. This compensates fully for the schema's lack of descriptions, providing clear parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get all categories') and resource ('for a budget'), making the purpose evident. However, it doesn't explicitly differentiate from sibling tools like 'get_category' (singular) or 'update_category', leaving some ambiguity about when to use this versus those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'get_category' (for a single category) or 'update_category'. It mentions the 'budget_id' parameter but doesn't explain context like whether this is for viewing, editing, or other purposes relative to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_categoryA
Get a single category with full details including goal information.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
category_id: The category ID
Returns:
JSON string with category details including goals, budgeted amounts, activity, and balance
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes | ||
| category_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It indicates this is a read operation ('Get') and specifies the return format as a JSON string with details like goals and balance, which is helpful. However, it lacks information on error handling, authentication needs, rate limits, or whether the operation is idempotent, leaving gaps in behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by clear sections for Args and Returns. Each sentence earns its place by providing essential information without redundancy, making it efficient and easy to parse for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no annotations, but with an output schema), the description is mostly complete. It covers the purpose, parameter semantics, and return format. However, it could improve by addressing behavioral aspects like error cases or prerequisites, though the output schema reduces the need to detail return values extensively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the input schema, which has 0% description coverage. It explains that 'budget_id' can use 'last-used' for the default budget, clarifying a key usage detail not in the schema. For 'category_id', it specifies retrieval of a single category, but does not elaborate on format or constraints, leaving some semantic gaps partially compensated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'a single category with full details including goal information', making the purpose specific and actionable. It distinguishes from sibling tools like 'get_categories' (plural) by emphasizing retrieval of a single category with comprehensive details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving detailed information about a specific category, which is clear from the context. However, it does not explicitly state when to use this tool versus alternatives like 'get_categories' for multiple categories or 'update_category' for modifications, leaving some guidance implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_category_spending_summaryA
Get spending summary for a category over a date range.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
category_id: The category ID to analyze
since_date: Start date (YYYY-MM-DD format)
until_date: End date (YYYY-MM-DD format)
include_graph: Include terminal graph visualization (default: True)
Returns:
JSON string with summary including total spent, average per month, transaction count, monthly breakdown, and optional graph
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes | ||
| category_id | Yes | ||
| include_graph | No | ||
| since_date | Yes | ||
| until_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes what the tool returns (JSON with summary data and optional graph) and hints at a default value for 'include_graph', which adds some context. However, it lacks details on permissions, rate limits, or error handling, which are important for a tool that likely queries financial data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and appropriately sized, with a clear purpose statement followed by parameter and return value sections. Every sentence adds value, but it could be slightly more concise by integrating the parameter explanations more seamlessly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, no annotations, but with an output schema), the description is fairly complete. It covers the purpose, parameters, and return values in detail. The output schema likely handles return value specifics, so the description doesn't need to elaborate further, but it could benefit from more behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the input schema, which has 0% description coverage. It explains each parameter's purpose, including special cases like using 'last-used' for budget_id and date formats. This fully compensates for the schema's lack of descriptions, making the parameters clear and actionable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get spending summary for a category over a date range.' It specifies the verb ('Get') and resource ('spending summary for a category'), making it easy to understand. However, it doesn't explicitly differentiate from siblings like 'get_budget_summary' or 'get_category', which would require a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get_budget_summary' or 'compare_spending_by_year', nor does it specify prerequisites or exclusions. This leaves the agent without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scheduled_transactionsB
Get all scheduled transactions.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
Returns:
JSON string with list of scheduled transactions
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states it 'Get[s] all scheduled transactions' but doesn't disclose behavioral traits like whether this is a read-only operation, if it requires specific permissions, what happens with large result sets (e.g., pagination), or error conditions. The description is minimal and lacks critical operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, with the core purpose stated first, followed by structured sections for Args and Returns. Every sentence earns its place by providing essential information without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one parameter) and the presence of an output schema (which handles return values), the description is somewhat complete but has gaps. It covers the basic purpose and parameter semantics but lacks usage guidelines and behavioral transparency, which are important for a tool that might interact with financial data and has many siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful semantics beyond the input schema, which has 0% description coverage. It explains that 'budget_id' is 'The ID of the budget' and provides a usage tip ('use 'last-used' for default budget'), clarifying parameter purpose and a practical default value that isn't in the schema. With only one parameter, this adequately compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('all scheduled transactions'), making the purpose unambiguous. However, it doesn't differentiate from sibling tools like 'get_transactions' or 'get_unapproved_transactions' to explain why this specific tool is needed for scheduled transactions versus other transaction types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_transactions' and 'get_unapproved_transactions', it's unclear if this tool is for recurring/future transactions, how it differs in scope, or what prerequisites might exist beyond the budget_id parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactionA
Get a single transaction with all details including subtransactions.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
transaction_id: The ID of the transaction to retrieve
Returns:
JSON string with the transaction details including subtransactions if it's a split transaction
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes | ||
| transaction_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that it retrieves details including subtransactions and returns JSON, but doesn't cover behavioral aspects like error handling, permissions, rate limits, or whether it's a read-only operation (implied by 'Get' but not stated). It adds some value but has gaps for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by clear sections for Args and Returns. Every sentence adds value, with no wasted words, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 2 parameters with 0% schema coverage and an output schema exists, the description is reasonably complete. It explains the parameters and return format (JSON with transaction details), compensating for the lack of schema descriptions. However, as a read operation with no annotations, it could benefit from more behavioral context like error cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning by explaining both parameters: 'budget_id' includes the special value 'last-used', and 'transaction_id' specifies it's for retrieval. This provides useful semantics beyond the bare schema, though it doesn't detail format constraints or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a single transaction with all details including subtransactions.' It specifies the verb ('Get') and resource ('transaction'), but doesn't explicitly differentiate from sibling tools like 'get_transactions' (plural) or 'search_transactions' beyond mentioning 'single transaction'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving a specific transaction by ID, but doesn't explicitly state when to use this vs. alternatives like 'get_transactions' (for multiple) or 'search_transactions' (for filtering). The mention of 'single transaction' provides some context, but lacks explicit guidance on exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactionsA
Get transactions with optional filtering and pagination.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
since_date: Only return transactions on or after this date (YYYY-MM-DD format)
until_date: Only return transactions on or before this date (YYYY-MM-DD format)
account_id: Filter by account ID (optional)
category_id: Filter by category ID (optional)
limit: Number of transactions per page (default: 100, max: 500)
page: Page number for pagination (1-indexed, default: 1)
Returns:
JSON string with transactions array and pagination metadata
Note:
For large date ranges (>1 year), use get_category_spending_summary or
compare_spending_by_year instead to avoid timeouts and reduce context usage.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | ||
| budget_id | Yes | ||
| category_id | No | ||
| limit | No | ||
| page | No | ||
| since_date | No | ||
| until_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: pagination support (with defaults for limit and page), date format requirements (YYYY-MM-DD), timeout risks for large date ranges, and the return format (JSON with array and metadata). It doesn't mention rate limits or authentication needs, but covers most operational aspects well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and appropriately sized. It starts with a clear purpose statement, then organizes parameter details in a labeled 'Args' section, followed by return information and a practical note. Every sentence adds value, with no wasted words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, filtering/pagination logic) and the presence of an output schema (which handles return values), the description is complete. It covers purpose, parameters, usage guidance, and behavioral context thoroughly. The Note section addresses performance considerations, making it well-rounded for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds substantial meaning beyond the input schema, which has 0% description coverage. It explains all 7 parameters clearly: purpose (e.g., 'filter by account ID'), special values ('last-used' for budget_id), formats (YYYY-MM-DD for dates), defaults (limit: 100, page: 1), constraints (max: 500 for limit), and optionality. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get transactions with optional filtering and pagination.' It specifies the verb ('Get') and resource ('transactions'), and mentions key capabilities (filtering, pagination). However, it doesn't explicitly differentiate from sibling tools like 'search_transactions' or 'get_unapproved_transactions', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use alternatives: the Note section explicitly advises using 'get_category_spending_summary' or 'compare_spending_by_year' for large date ranges (>1 year) to avoid timeouts. This is helpful guidance, though it doesn't cover all sibling distinctions (e.g., vs. 'search_transactions').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_unapproved_transactionsA
Get all unapproved transactions that need review.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
Returns:
JSON string with list of unapproved transactions
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states this is a read operation ('Get'), but doesn't mention any behavioral traits such as permissions required, rate limits, pagination, or what 'unapproved' means in context (e.g., pending approval status). The description lacks details on how the data is returned or any side effects, leaving gaps for a tool that likely involves sensitive financial data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by structured sections for 'Args' and 'Returns' that are clear and efficient. Every sentence adds value without redundancy, making it easy to scan and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (1 parameter, no annotations, but with an output schema), the description is fairly complete. It covers the purpose, parameter semantics, and return format ('JSON string with list of unapproved transactions'). Since an output schema exists, the description doesn't need to detail return values further. However, it could improve by addressing behavioral aspects like permissions or data freshness, given the lack of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context for the single parameter 'budget_id' by explaining its purpose ('The ID of the budget') and providing a usage tip ('use 'last-used' for default budget'). Since schema description coverage is 0% (the schema only has a title 'Budget Id' with no description), this compensates well by clarifying semantics beyond the basic schema, though it could elaborate on format or validation rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get all unapproved transactions that need review.' This specifies the verb ('Get'), resource ('unapproved transactions'), and scope ('that need review'). However, it doesn't explicitly differentiate from sibling tools like 'get_transactions' or 'search_transactions' which might also retrieve transactions but with different filters or purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying 'unapproved transactions that need review,' suggesting this tool is for reviewing pending items. However, it doesn't provide explicit guidance on when to use this versus alternatives like 'get_transactions' (which might include all transactions) or 'search_transactions' (which might allow custom filtering). No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkA
Check server health and YNAB API connectivity.
This tool performs a lightweight API call to verify that:
- The MCP server is running
- The YNAB access token is valid
- The YNAB API is reachable
Returns:
JSON string with health status and connection info
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior as a 'lightweight API call' that verifies three specific conditions and returns JSON with health status. It doesn't mention rate limits, authentication requirements beyond token validity, or error handling, but covers the core behavioral traits well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly structured and concise - a clear purpose statement followed by bullet points of what it verifies, then a brief note about return format. Every sentence earns its place with no wasted words, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, has output schema), the description is complete. It explains what the tool does, what it checks, and what it returns. With an output schema present, the description doesn't need to detail return values, and it provides sufficient context for this diagnostic utility among data-focused sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters with 100% schema description coverage, so the baseline is 4. The description appropriately doesn't discuss parameters since none exist, which is correct and efficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('check', 'verify') and resources ('server health', 'YNAB API connectivity'). It distinguishes itself from all sibling tools which are focused on YNAB data operations, while this is a diagnostic/health monitoring tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool - to verify server and API connectivity. However, it doesn't explicitly state when NOT to use it or name specific alternatives for similar diagnostic purposes, which prevents a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_category_fundsA
Move funds from one category to another in a specific month.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
month: Month in YYYY-MM-DD format (e.g., 2025-01-01 for January 2025)
from_category_id: Source category ID to move funds from
to_category_id: Destination category ID to move funds to
amount: Amount to move (positive value)
Returns:
JSON string with updated from and to categories
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | ||
| budget_id | Yes | ||
| from_category_id | Yes | ||
| month | Yes | ||
| to_category_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While it states the action ('Move funds'), it doesn't mention whether this requires specific permissions, if the operation is atomic/transactional, what happens if source funds are insufficient, or any rate limits. The return format is mentioned but without details on error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a clear purpose statement followed by well-organized parameter explanations and return information. Every sentence adds value, with no redundant or unnecessary content. The formatting with 'Args:' and 'Returns:' sections enhances readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 5 parameters and no annotations, the description provides basic operational context but lacks important behavioral details. While the output schema exists (mentioned in context signals), the description still needs to cover mutation implications, error handling, and usage boundaries more thoroughly given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description provides essential semantic context for all 5 parameters. It explains what each parameter represents (e.g., 'budget_id: The ID of the budget (use 'last-used' for default budget)', 'month: Month in YYYY-MM-DD format'), though it doesn't specify constraints like minimum amount or category ID formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Move funds'), the resources involved ('from one category to another'), and the temporal scope ('in a specific month'). It distinguishes itself from sibling tools like 'update_category_budget' by focusing on fund transfers between categories rather than budget adjustments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through its specificity about moving funds between categories in a given month, but it doesn't explicitly state when to use this tool versus alternatives like 'update_category' or 'update_category_budget'. No guidance is provided about prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_split_for_matchingA
Prepare a split transaction to match with an existing imported transaction.
This tool fetches an existing transaction's details and creates a new UNAPPROVED split
transaction with the same date, amount, account, and payee. You can then manually match
them together in the YNAB web or mobile UI.
Use this when you want to split an imported bank transaction - the new split will be
created as unapproved so you can match it with the original in YNAB's UI.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
transaction_id: The ID of the existing transaction to split
subtransactions: JSON string containing array of subtransactions. Each subtransaction should have:
- amount (required): The subtransaction amount
- category_id (optional): Category ID for this split
- payee_id (optional): Payee ID for this split
- memo (optional): Memo for this split
Example: '[{"amount": -50.00, "category_id": "cat1", "memo": "Groceries"}, {"amount": -30.00, "category_id": "cat2", "memo": "Gas"}]'
Returns:
JSON string with original transaction details, new split transaction details, and instructions
Workflow:
1. This tool fetches the existing transaction details
2. Creates a new unapproved split transaction with those details
3. You manually match them in the YNAB UI
4. YNAB merges them into one split transaction
Note:
- The new split is created as UNAPPROVED for manual matching
- The sum of subtransaction amounts should equal the original transaction amount
- After matching in YNAB UI, the original transaction will become a split transaction
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes | ||
| subtransactions | Yes | ||
| transaction_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does an excellent job disclosing behavioral traits. It explains the tool creates UNAPPROVED transactions for manual matching, describes the workflow steps, notes constraints (sum of subtransactions must equal original amount), and explains what happens after matching. The only minor gap is it doesn't mention error handling or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Workflow, Note) and front-loads the core purpose. While comprehensive, it could be slightly more concise by integrating some of the workflow details into the initial explanation rather than as a separate section.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (preparing splits for matching), no annotations, and 0% schema coverage, the description provides complete context. It explains the purpose, parameters, workflow, constraints, and expected outcomes. The presence of an output schema means it doesn't need to detail return values, and it covers all essential aspects for this specialized operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing detailed parameter semantics. It explains what budget_id, transaction_id, and subtransactions are for, provides a comprehensive example of the subtransactions JSON structure with all required and optional fields, and clarifies the 'last-used' special value for budget_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('prepare', 'fetches', 'creates') and resources ('split transaction', 'existing imported transaction'). It distinguishes this from sibling tools by explaining it's specifically for preparing splits for matching rather than creating splits directly (like create_split_transaction) or other transaction operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'Use this when you want to split an imported bank transaction.' It also provides workflow context and distinguishes it from direct creation tools by explaining the manual matching step required in YNAB's UI.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_transactionsA
Search for transactions by text in payee name or memo.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
search_term: Text to search for in payee name or memo (case-insensitive)
since_date: Only search transactions on or after this date (YYYY-MM-DD format)
until_date: Only search transactions on or before this date (YYYY-MM-DD format)
limit: Maximum number of transactions to return (default: 100, max: 500)
Returns:
JSON string with matching transactions and count
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes | ||
| limit | No | ||
| search_term | Yes | ||
| since_date | No | ||
| until_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: case-insensitive search, default and max values for 'limit', date format requirements, and return format (JSON string with count). It does not mention rate limits, authentication needs, or pagination, but covers essential operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by a well-structured 'Args' and 'Returns' section. Every sentence earns its place by providing essential information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, no annotations, but has output schema), the description is complete enough. It explains all parameters in detail, specifies return format, and the output schema will handle return value documentation. No significant gaps remain for effective tool use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate fully. It adds significant meaning beyond the bare schema by explaining each parameter's purpose, format constraints (e.g., YYYY-MM-DD), default values, and usage notes (e.g., 'last-used' for budget_id). This provides complete parameter semantics that the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb ('search') and resource ('transactions'), specifying it searches by text in payee name or memo. It distinguishes from siblings like 'get_transactions' (which likely retrieves all transactions without search) and 'get_transaction' (which retrieves a single transaction).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying search functionality and date filtering, but does not explicitly state when to use this tool versus alternatives like 'get_transactions' or 'get_unapproved_transactions'. It provides clear parameter guidance (e.g., 'use 'last-used' for default budget') but lacks explicit sibling comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_categoryA
Update a category's properties (rename, change note, move to different group, or update goal target).
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
category_id: The category ID to update
name: New name for the category (optional)
note: New note for the category (optional)
category_group_id: Move to a different category group ID (optional)
goal_target: New goal target amount - only works if category already has a goal configured (optional)
Returns:
JSON string with the updated category
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes | ||
| category_group_id | No | ||
| category_id | Yes | ||
| goal_target | No | ||
| name | No | ||
| note | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It clearly indicates this is a mutation operation ('Update'), describes what properties can be modified, and includes an important constraint about goal_target requiring pre-existing goal configuration. However, it lacks information about permissions, side effects, error conditions, or what happens when optional parameters are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, args, returns) and uses bullet-like formatting for parameters. Every sentence adds value, though the 'Returns' section could be slightly more informative given the output schema exists. Overall efficient with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 6 parameters and no annotations, the description provides good coverage: clear purpose, detailed parameter explanations, and return format indication. The existence of an output schema reduces the need to detail return values. However, it could better address behavioral aspects like error handling or side effects given it's a write operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description provides excellent parameter semantics beyond the bare schema. It explains each parameter's purpose, clarifies that budget_id accepts 'last-used' as a special value, notes which parameters are optional, and provides crucial context about goal_target requiring pre-existing goal configuration. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates a category's properties with specific examples (rename, change note, move to different group, update goal target), which provides a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'update_category_budget' or 'move_category_funds', which appear related to category operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when modifying category properties, but provides no explicit guidance on when to use this versus alternatives like 'update_category_budget' or 'move_category_funds'. The goal_target parameter note ('only works if category already has a goal configured') offers some contextual constraint, but overall guidance is limited to implied context rather than explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_category_budgetA
Update the budgeted amount for a category in a specific month.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
month: Month in YYYY-MM-DD format (e.g., 2025-01-01 for January 2025)
category_id: The category ID to update
budgeted: The budgeted amount to set
Returns:
JSON string with the updated category
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes | ||
| budgeted | Yes | ||
| category_id | Yes | ||
| month | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states this is an update operation but does not disclose behavioral traits such as permission requirements, whether the update is idempotent, error handling for invalid inputs, or side effects. The description adds minimal context beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose in the first sentence. The Args and Returns sections are organized efficiently with no redundant information. Every sentence earns its place by clarifying parameters or output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters with 0% schema coverage and an output schema (implied by 'Returns: JSON string'), the description is mostly complete. It covers all parameters semantically and notes the return type. However, as a mutation tool with no annotations, it lacks behavioral context like error conditions or side effects, which slightly reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides clear semantics for all 4 parameters: explains 'budget_id' accepts 'last-used' as a special value, specifies 'month' format (YYYY-MM-DD with example), identifies 'category_id' as the target, and defines 'budgeted' as the amount to set. This adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Update the budgeted amount'), target resource ('for a category in a specific month'), and scope. It distinguishes from sibling tools like 'update_category' (which likely updates category metadata) and 'move_category_funds' (which transfers funds between categories).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through the parameter explanations (e.g., 'use 'last-used' for default budget'), but does not explicitly state when to use this tool versus alternatives like 'update_category' or 'move_category_funds'. No explicit exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_transactionA
Update an existing transaction.
Args:
budget_id: The ID of the budget (use 'last-used' for default budget)
transaction_id: The ID of the transaction to update
account_id: The account ID (optional - keeps existing if not provided)
date: Transaction date in YYYY-MM-DD format (optional)
amount: Transaction amount (optional)
payee_name: Name of the payee (optional)
category_id: Category ID (optional)
memo: Transaction memo (optional)
cleared: Cleared status - 'cleared', 'uncleared', or 'reconciled' (optional)
approved: Whether the transaction is approved (optional)
Returns:
JSON string with the updated transaction
Important Limitations:
- Cannot add or update subtransactions on existing transactions
- Cannot convert a regular transaction into a split transaction
- If the transaction is already a split, its category_id cannot be changed
- Split transaction dates and amounts cannot be modified
- To create a split transaction, use create_split_transaction instead
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | ||
| amount | No | ||
| approved | No | ||
| budget_id | Yes | ||
| category_id | No | ||
| cleared | No | ||
| date | No | ||
| memo | No | ||
| payee_name | No | ||
| transaction_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: it's a mutation tool (implied by 'Update'), returns JSON, and outlines important limitations (e.g., cannot update subtransactions, split transaction restrictions). However, it doesn't mention error handling, rate limits, or authentication needs, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Important Limitations) and front-loaded key information. It's appropriately sized for a 10-parameter tool with complex constraints, though some sentences in the limitations could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, mutation operation, no annotations) and the presence of an output schema (which handles return values), the description is highly complete. It covers purpose, parameters, returns, and critical limitations, providing all necessary context for the agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the input schema, which has 0% description coverage. It explains each parameter's purpose, optionality, and specific details (e.g., 'use 'last-used' for default budget' for budget_id, date format, cleared status options). This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Update an existing transaction') and resource ('transaction'), distinguishing it from sibling tools like create_transaction, create_split_transaction, and get_transaction. The title is null, making the description's clarity even more critical, which it delivers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus alternatives, particularly in the 'Important Limitations' section, which states 'To create a split transaction, use create_split_transaction instead.' It also clarifies constraints on split transactions, helping the agent avoid misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
21 tool updates
v1.0.0- First observed
compare_spending_by_year - First observed
create_scheduled_transaction - First observed
create_split_transaction - First observed
create_transaction - First observed
delete_scheduled_transaction - First observed
get_accounts - First observed
get_budget_summary - First observed
get_categories - First observed
get_category - First observed
get_category_spending_summary - First observed
get_scheduled_transactions - First observed
get_transaction - First observed
get_transactions - First observed
get_unapproved_transactions - First observed
health_check - First observed
move_category_funds - First observed
prepare_split_for_matching - First observed
search_transactions - First observed
update_category - First observed
update_category_budget - First observed
update_transaction
TDQS
Most tools have distinct purposes with clear boundaries, such as create_transaction vs. create_split_transaction or get_transactions vs. search_transactions. However, some overlap exists between get_category and get_categories, and between get_transaction and get_transactions, which could cause minor confusion for agents, but descriptions help differentiate them.
Tool names follow a highly consistent verb_noun pattern throughout, such as create_transaction, get_accounts, update_category, and delete_scheduled_transaction. This predictable naming scheme makes it easy for agents to understand and select tools based on their actions and targets.
With 21 tools, the count is on the higher side for a budget management server, bordering on heavy but still manageable. It covers extensive functionality, but some tools might be consolidated or omitted to streamline the set without losing core capabilities.
The tool set provides comprehensive coverage for YNAB's domain, including full CRUD operations for transactions, scheduled transactions, and categories, along with advanced features like spending analysis, fund moving, and health checks. There are no obvious gaps, and agents can handle typical budgeting workflows effectively.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Personal finance for AI agents: accounts, budgets, goals, 9-strategy debt payoff, reports. OAuth 2.1
Log, query, and edit expenses, budgets, and accounts in Manilo (formerly Ledgy) from any MCP-compatible AI assistant.
Personal-finance workspace for AI agents: accounts, spending, budgets, goals, and investments.
Log, query, and edit expenses, budgets, and accounts in Manilo from any MCP-compatible AI assistant.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with YNAB budgets through natural language. Supports managing accounts, categories, transactions, and budget months with 21 tools for comprehensive budget operations.-
- AlicenseAqualityCmaintenanceEnables interaction with You Need A Budget (YNAB) through their API, allowing users to manage budgets, accounts, categories, transactions, payees, and scheduled transactions through natural language.12181GPL 3.0
- FlicenseAqualityCmaintenanceEnables users to manage budgets, accounts, categories, and transactions on You Need A Budget (YNAB) through Claude. It supports both core daily budget management and extended operations like bulk transaction creation and historical trend analysis.152-
- AlicenseAqualityCmaintenanceEnables AI assistants to interact with YNAB budgets, performing read-only queries by default and optional write operations like creating transactions and managing categories through natural language.3835328MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dgalarza/ynab-mcp-dgalarza'
If you have feedback or need assistance with the MCP directory API, please join our Discord server