actual-budget-mcp
This server lets you interact with your Actual Budget through natural language: read financial data, analyze spending, and manage accounts, transactions, categories, payees, and rules.
Read budget data: list accounts, categories, payees, rules, transactions, and budget months
Analyze finances: budget vs actual, spending projections, category trends, spending by category, monthly summaries, and account balance history
Manage transactions: create, update, recategorize, split, transfer, delete, and sync bank transactions
Manage categories: create, rename, hide, delete categories and category groups with safe previews
Manage payees and rules: create, rename, delete payees; create and delete transaction rules
Manage accounts: create on/off-budget accounts and delete accounts with previews and confirmation safeguards
Safety features: delete tools preview before deleting, some require echoed name confirmation, and
ACTUAL_READ_ONLY=1hides write tools entirelyUse natural language: dates in English/Spanish, category/payee names instead of IDs, and clear formatted output
Extra MCP features: built-in prompts like monthly-review and pre-loaded resources for accounts, categories, and payees
Provides tools to interact with Actual Budget, allowing users to query and manage their budget, accounts, transactions, categories, and spending analysis.
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., "@actual-budget-mcpHow much did I spend on food 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.
actual-budget-mcp
Talk to your budget. An MCP server that connects Actual Budget to Claude — ask where the money went, get real analysis back, and let it write without holding your breath.

Features
Real analysis, not just lookups - Projections, category trends, budget vs actual, and month summaries
Writes you can trust - Every delete previews what it will remove and waits for you to confirm;
ACTUAL_READ_ONLY=1hides the write tools from the model entirely (Safety)Multi-currency that survives reality - Splits and residual reconciliation, not just a currency symbol
Ask about your budget in plain language - "How much did I spend on food this month?" or "Am I over budget on anything?"
Create and manage transactions - Add expenses, transfers, and edits without opening the app
Manage categories, payees, and rules - Full CRUD without opening the app
Use names, not IDs - Say "Cartera" instead of
a1b2c3d4-..., with helpful suggestions if ambiguousNatural dates in English and Spanish - "last month", "este mes", "hace 3 meses", "yesterday"
Clean formatted output - Aligned tables and clear summaries, not raw JSON
Clear error messages - If something's wrong, you'll know exactly what to fix
Related MCP server: actual-mcp-server
Prerequisites
Actual Budget server running (local or remote)
Node.js 20 or higher (see Node.js requirement)
Quick Start
The fastest way to get started - copy this into Claude Code or Claude Desktop:
Install the actual-budget-mcp MCP server from npm (https://github.com/henfrydls/actual-budget-mcp).
Configure it with these credentials:
- My Actual Budget server: http://localhost:5006
- Password: YOUR_PASSWORD
- Budget ID: YOUR_BUDGET_IDClaude will configure everything for you.
Installation
Option 1: Claude Code (one command)
claude mcp add actual-budget-mcp -e ACTUAL_SERVER_URL=http://localhost:5006 -e ACTUAL_PASSWORD=your-password -e ACTUAL_BUDGET_ID=your-budget-id -- npx -y actual-budget-mcpOption 2: Claude Desktop
Add this to your claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"actual-budget-mcp": {
"command": "npx",
"args": ["-y", "actual-budget-mcp"],
"env": {
"ACTUAL_SERVER_URL": "http://localhost:5006",
"ACTUAL_PASSWORD": "your-password",
"ACTUAL_BUDGET_ID": "your-budget-sync-id"
}
}
}
}Option 3: Cursor
Go to Cursor Settings > MCP > Add new MCP server and add:
{
"mcpServers": {
"actual-budget-mcp": {
"command": "npx",
"args": ["-y", "actual-budget-mcp"],
"env": {
"ACTUAL_SERVER_URL": "http://localhost:5006",
"ACTUAL_PASSWORD": "your-password",
"ACTUAL_BUDGET_ID": "your-budget-sync-id"
}
}
}
}Option 4: VS Code (GitHub Copilot)
Add this to your VS Code settings.json:
{
"mcp": {
"servers": {
"actual-budget-mcp": {
"command": "npx",
"args": ["-y", "actual-budget-mcp"],
"env": {
"ACTUAL_SERVER_URL": "http://localhost:5006",
"ACTUAL_PASSWORD": "your-password",
"ACTUAL_BUDGET_ID": "your-budget-sync-id"
}
}
}
}
}Option 5: Docker
The image speaks stdio like every other option, so your client starts the container and owns its lifetime:
{
"mcpServers": {
"actual-budget-mcp": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"--add-host=host.docker.internal:host-gateway",
"-v", "actual-budget-mcp-data:/data",
"-e", "ACTUAL_SERVER_URL",
"-e", "ACTUAL_PASSWORD",
"-e", "ACTUAL_BUDGET_ID",
"ghcr.io/henfrydls/actual-budget-mcp:latest"
],
"env": {
"ACTUAL_SERVER_URL": "http://host.docker.internal:5006",
"ACTUAL_PASSWORD": "your-password",
"ACTUAL_BUDGET_ID": "your-budget-sync-id"
}
}
}
}Two things that bite everyone once:
Inside the container,
localhostis the container. Your Actual server is not there.host.docker.internal(with the--add-hostflag above, which is what makes it resolve on Linux) reaches the host instead.Mount
/data. That is the budget cache. Without a volume, every start re-downloads your entire budget from the server.
Option 6: From source (for contributors)
git clone https://github.com/henfrydls/actual-budget-mcp.git
cd actual-budget-mcp
npm install
cp .env.example .env # Edit with your credentials
npm run build
npm run test:connection # Verify it worksVerify your setup
After installing, you can verify the connection works:
npx -y actual-budget-mcp --verifyThis will connect to your Actual Budget server and confirm everything is configured correctly.
Configuration
Variable | Required | Description |
| Yes | Your Actual Budget server URL (e.g., |
| Yes | Server password (set in Actual Budget under Settings) |
| Yes | Budget Sync ID (found in Settings > Show advanced settings) |
| No | Only if your budget file is encrypted |
| No | Cache directory (default: |
| No | Set to |
Finding your Budget ID
Open Actual Budget
Go to Settings (gear icon)
Click Show advanced settings
Copy the Sync ID
Safety
Two things protect your budget from an agent acting on a vague instruction.
Deletes preview before they delete
Every delete tool refuses to destroy anything on the first call. It reports what would be lost and stops there. Deleting takes a second, deliberate call:
delete_category(category: "Groceries")
→ preview: transactions affected, budget and rollover warning. Nothing deleted.
delete_category(category: "Groceries", confirm: true, confirm_name: "Groceries")
→ deletedTools that find their target by name — delete_account, delete_category,
delete_category_group, delete_payee — also require confirm_name with the
exact name. That is where deleting the wrong thing actually happens: asking for
"Adicionales" can resolve to "Ingresos Adicionales". Tools that take an exact id
— delete_transaction, delete_rule — need only confirm: true.
Read-only mode
Set ACTUAL_READ_ONLY=1 and the server exposes only the 15 read, analysis and
repair tools. The write tools are not registered at all, so they never
appear in tool discovery — an agent cannot be talked into calling something it
cannot see.
repair_sync stays available on purpose: it repairs sync state rather than
budget data, and hiding it would leave a desynced budget with no way to recover.
Writes are enabled by default. Read-only is opt-in.
Tools (37)
Read (9)
Tool | Description | Example prompt |
| All accounts with balances | "Show me all my accounts" |
| Budget for a specific month | "What does my March budget look like?" |
| Transactions with filters | "Show me transactions from last week over 5000" |
| Category history across months | "How has my food spending changed?" |
| Executive budget overview | "Give me a budget summary for February" |
| All category groups and categories | "What categories do I have?" |
| All payees in the budget | "List all my payees" |
| All transaction rules | "Show me my rules" |
| Account balance over time | "Show balance history for my checking account" |
get_budget_month - month (optional): YYYY-MM or natural language ("this month", "last month", "enero 2025")
get_transactions - account (optional): account name | start_date / end_date (optional): YYYY-MM-DD or natural language | category (optional): category name | payee (optional): payee name | min_amount / max_amount (optional): filter by amount | limit (optional, default 50)
get_category_balance - category (required): category name or ID | months (optional, default 3): months to look back
get_budget_summary - month (optional): YYYY-MM or natural language
balance_history - account (required): account name or ID | start_date (optional, default 3 months ago) | end_date (optional, default today)
Analysis (5)
Tool | Description | Example prompt |
| Budgeted vs spent per category | "Am I over budget on anything this month?" |
| End-of-month spending forecast | "Will I stay within budget this month?" |
| Spending trends over time | "What are my spending trends for the last 6 months?" |
| Spending breakdown by category | "Show me spending by category for February" |
| Income vs expenses vs savings | "How have my finances been the last 3 months?" |
budget_vs_actual - month (optional): YYYY-MM or natural language | group (optional): filter by category group
spending_projection - month (optional): YYYY-MM or natural language
category_trends - category (optional): specific category or top spending if omitted | months (optional, default 6)
spending_by_category - start_date / end_date (optional): date range | include_income (optional, default false) | limit (optional, default 20)
monthly_summary - months (optional, default 3): number of months to show
Write — Transactions (9)
Tool | Description | Example prompt |
| Add a new transaction | "I spent 500 on groceries from Cartera today" |
| One charge across several categories | "Split that 3,000 charge: 2,000 groceries, 1,000 household" |
| Edit an existing transaction | "Change the amount on that transaction to 600" |
| Remove a transaction (previews first, see Safety) | "Delete that test transaction" |
| Change a budget amount | "Set my food budget to 15,000 for this month" |
| Move to another category | "Move that transaction to Entertainment" |
| Transfer between accounts | "Transfer 10,000 from Checking to Savings" |
| Clear accumulated FX-rate residual | "Reconcile my USD card to 213.82 USD" |
| Sync with linked banks | "Sync my bank transactions" |
create_transaction - account (required): account name | amount (required): negative for expenses, positive for income | payee (optional) | category (optional) | date (optional) | notes (optional) | cleared (optional)
update_transaction - transaction_id (required) | amount, payee, category, date, notes, cleared (all optional)
delete_transaction - transaction_id (required)
update_budget_amount - category (required) | amount (required) | month (optional)
recategorize_transaction - transaction_id (required) | category (required)
create_transfer - from_account (required) | to_account (required) | amount (required) | date (optional) | notes (optional)
create_split_transaction - account (required) | amount (required): total, must equal the sum of the splits | splits (required): two or more {category, amount, notes} | payee, date, notes, cleared (all optional)
reconcile_currency_residual - account (required) | category (required): where to book the adjustment | target_balance (optional, defaults to 0) | payee, date, notes (all optional)
run_bank_sync - account (optional): sync specific account or all if omitted
Write — Categories (6)
Tool | Description | Example prompt |
| Create a new category | "Create a category called Gym in Gastos Variables" |
| Rename or hide a category | "Rename Gym to Fitness" |
| Delete a category (previews first, see Safety) | "Delete the Fitness category" |
| Create a new group | "Create a category group called Health" |
| Rename or hide a group | "Rename the Health group to Wellness" |
| Delete a group (previews first, see Safety) | "Delete the Wellness group" |
create_category - name (required) | group (required): group name or ID
update_category - category (required): name or ID | name (optional): new name | hidden (optional): true/false
delete_category - category (required) | transfer_to (optional): category to move transactions to | confirm + confirm_name (required to delete)
create_category_group - name (required)
update_category_group - group (required): name or ID | name (optional): new name | hidden (optional): true/false
delete_category_group - group (required) | transfer_to (required): category for orphaned transactions | confirm + confirm_name (required to delete)
Write — Payees & Rules (5)
Tool | Description | Example prompt |
| Create a new payee | "Create a payee called Netflix" |
| Rename a payee | "Rename Netflix to Netflix Premium" |
| Delete a payee (previews first, see Safety) | "Delete the Netflix Premium payee" |
| Create a transaction rule | "Create a rule: when payee contains Amazon, set category to Shopping" |
| Delete a rule (previews first, see Safety) | "Delete that rule" |
create_payee - name (required)
update_payee - payee (required): name or ID | name (required): new name
delete_payee - payee (required): name or ID | confirm + confirm_name (required to delete)
create_rule - condition_field (required): payee, category, amount, notes | condition_op (required): is, contains, oneOf, gt, lt, etc. | condition_value (required) | action_field (required): category, payee, notes | action_value (required) | stage (optional)
delete_rule - rule_id (required) | confirm (required to delete)
Write — Accounts (2)
Tool | Description | Example prompt |
| Create an on- or off-budget account | "Create an off-budget account called Family Investment with 10,000" |
| Delete an account and its history | "Delete the ZZ Test account" |
delete_accountneeds two keys. It destroys the account's entire transaction history, so a single call never deletes. The first call only previews what would be lost (name, balance, transaction count) and suggests closing the account instead — closing retires it while keeping its history. To actually delete, call again withconfirm: trueandconfirm_nameset to the account's exact name. While it declines, the tool reportsisError: true, so a confirmation prompt is never mistaken for a completed deletion.
create_account - name (required) | offBudget (optional, default false) | initialBalance (optional): human amount, creates the "Starting Balance" transaction. (Actual models accounts as on/off-budget only, so there is no account type.)
delete_account - account (required): name or ID | confirm (required to delete): must be true | confirm_name (required to delete): the account's exact name
Maintenance (1)
Tool | Description | Example prompt |
| Repair an out-of-sync budget | "Repair the sync, everything is failing" |
If tools start failing with a sync error, the budget's sync state is inconsistent with the server.
repair_syncrebuilds that state without touching budget data. Note that deleting the localACTUAL_DATA_DIRdoes not fix this — the inconsistency is in the sync state, not the cache.
repair_sync - no parameters
Prompts
Built-in prompt templates that guide Claude through multi-step financial analysis:
Prompt | Description |
| Complete budget review for any month — spending vs budget, overspending, suggestions |
| Quick check: are you on track this month? |
| Deep analysis of spending trends and patterns over multiple months |
Use them in Claude Desktop by clicking the prompt icon, or in Claude Code by asking Claude to use them.
Resources
Pre-loaded data that Claude can reference without calling tools:
Resource | URI | Description |
Accounts |
| All accounts with balances |
Categories |
| Category groups and categories with IDs |
Payees |
| All payees sorted alphabetically |
Usage Examples
Here are real prompts you can use:
"How much did I spend in February?"
"Show me my top 5 spending categories this month"
"Am I over budget on anything?"
"I spent 1,200 on electricity from my BHD account yesterday"
"What's my savings rate this month?"
"Show me all transactions from Cartera in the last 30 days"
"Transfer 5,000 from Checking to Savings"
"What are my spending trends for food over the last 6 months?"
"Create a category called Gym in Gastos Variables"
"Rename the Gym category to Fitness"
"Create a rule: when payee is Netflix, set category to Suscripciones"
"How have my finances been the last 3 months?"How is this different?
Compared to other Actual Budget MCP servers:
Feature | actual-budget-mcp | Others |
Natural language dates | "last month", "este mes", "hace 3 meses" | Only YYYY-MM-DD |
Name resolution | Type "Cartera" instead of UUIDs | Requires exact IDs |
Output format | Aligned tables, readable text | Raw JSON |
Error messages | Clear instructions on how to fix | Generic errors |
Analysis tools | Budget vs actual, projections, trends | Not available |
MCP Prompts | 3 guided analysis workflows | Limited or none |
MCP Resources | Accounts, categories, payees pre-loaded | Not available |
Bilingual dates | English + Spanish | English only |
API version | @actual-app/api 26.x (current) | Often outdated |
Security
This server connects to your Actual Budget instance using the credentials you provide
Credentials are passed as environment variables and never stored by the MCP server
All communication with your Actual Budget server happens locally (or to your self-hosted server)
The server only accesses budget data through the official
@actual-app/apilibraryNo data is sent to third parties
Troubleshooting
"Could not connect to Actual Budget server"
Make sure Actual Budget is running (open the app or start the server)
Check that
ACTUAL_SERVER_URLis correctRun
npx -y actual-budget-mcp --verifyto test your connection
"Authentication failed"
Your server requires a password. Set
ACTUAL_PASSWORDin your configIf you forgot the password, reset it in Actual Budget under Settings > Server
"Budget not found"
Check your
ACTUAL_BUDGET_ID. Find it in Settings > Show advanced settings > Sync ID
"Budget file is encrypted"
Set
ACTUAL_ENCRYPTION_PASSWORDwith your encryption password
"Ambiguous name: matches X, Y"
Be more specific. Instead of "BHD", try "BHD Nomina" or "BHD Mi Pais"
Node.js Requirement
"ReferenceError: navigator is not defined"
@actual-app/apireferenced thenavigatorglobal through 26.6. That global only exists on Node.js 21+, so importing the library on Node.js 20 threw before the server could start. 26.8 dropped the reference, and this server has supported Node.js 20 since 0.8.1.Solution: Upgrade to actual-budget-mcp 0.8.1 or later, or run Node.js 22.
Node Version Managers (fnm, nvm, volta)
MCP server shows "Server disconnected" in Claude Desktop
Claude Desktop doesn't source your shell profile (
.bashrc,.zshrc), so version managers like fnm, nvm, and volta won't work with the defaultnpxcommand.Solution: Use the absolute path to node in your config. Find it with:
readlink -f $(which node)Then update your claude_desktop_config.json:
{
"mcpServers": {
"actual-budget-mcp": {
"command": "/home/user/.local/share/fnm/node-versions/v22.22.1/installation/bin/node",
"args": ["/path/to/actual-budget-mcp/dist/index.js"],
"env": {
"ACTUAL_SERVER_URL": "http://localhost:5006",
"ACTUAL_PASSWORD": "your-password",
"ACTUAL_BUDGET_ID": "your-budget-sync-id"
}
}
}
}Alternatively, create a wrapper script mcp-wrapper.sh:
#!/bin/bash
export PATH="$HOME/.local/share/fnm/node-versions/v22.22.1/installation/bin:$PATH"
exec npx -y actual-budget-mcp "$@"Then use it in your config:
{
"mcpServers": {
"actual-budget-mcp": {
"command": "/path/to/mcp-wrapper.sh"
}
}
}Contributing
Contributions are welcome! Please open an issue or submit a pull request.
git clone https://github.com/henfrydls/actual-budget-mcp.git
cd actual-budget-mcp
npm install
npm run build
npm test # Run unit tests
npm run test:connection # Needs .env configuredLicense
MIT - DLSLabs
Available Tools
37 toolsbalance_historyARead-only
Track an account's balance changes over time by showing the running balance at key transaction dates.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Account name or ID | |
| end_date | No | End date (YYYY-MM-DD or natural language). Defaults to today. | |
| start_date | No | Start date (YYYY-MM-DD or natural language). Defaults to 3 months ago. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, confirming it's a read operation. The description adds behavioral details about showing running balance at key transaction dates, which is useful but does not elaborate on what constitutes 'key transaction dates' or any limitations.
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 a single, front-loaded sentence with no extraneous words. It efficiently communicates the tool's purpose.
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?
With no output schema, the description partially explains the output (running balance at key transaction dates) but does not specify format or structure. The three parameters are well-documented in the schema, but the tool's simplicity leaves minor gaps.
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 has 100% coverage with descriptions for all three parameters. The description does not add meaning beyond the schema, so baseline score of 3 is appropriate.
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 tracks an account's balance changes over time, specifying 'running balance at key transaction dates'. It uses a specific verb and resource, distinguishing it from sibling tools like 'get_transactions' or 'monthly_summary'.
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 explicit guidance on when to use this tool versus alternatives such as 'get_transactions' or 'monthly_summary'. The description implies a use case but lacks exclusion criteria or mentions of when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
budget_vs_actualARead-only
Compare budgeted amounts versus actual spending for each category in a given month. Highlights over-budget and under-budget categories.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | Filter to a specific category group name | |
| month | No | Month (YYYY-MM or natural language). Defaults to current month. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the readOnlyHint annotation by explaining that the tool highlights over-budget and under-budget categories, which is a behavioral trait. No contradictions with 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?
Two concise sentences, no extraneous words. The first sentence clearly states the main function, and the second adds a key output detail. Front-loaded and efficient.
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 two-parameter, read-only tool with no output schema, the description adequately explains the purpose and key output characteristics. It could be more specific about the return format, but it is sufficient given the tool's simplicity.
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 coverage is 100%, so the schema already documents both parameters. The description adds minimal extra meaning about the output (highlighting categories) but does not provide detail about parameter syntax or additional constraints beyond the 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 'compare' and the specific resources 'budgeted amounts versus actual spending' for each category in a given month. It also distinguishes this tool from siblings like 'spending_by_category' or 'category_trends' by focusing on budget vs. actual comparison.
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 monthly budget comparison but does not explicitly state when to use this tool over alternatives or provide any exclusions or prerequisites. It lacks clear guidance on when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
category_trendsARead-only
Show spending trends for a category across multiple months. Identifies increasing/decreasing patterns.
| Name | Required | Description | Default |
|---|---|---|---|
| months | No | Number of months to analyze (default 6) | |
| category | No | Category name or ID. If omitted, shows trends for top spending categories. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true; description aligns by focusing on analysis. Adds pattern identification context beyond 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?
Two efficient, front-loaded sentences with no extra verbiage.
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?
Covers main purpose and output type, but lacks specifics on output format (e.g., chart/table, direction of trends). Minor gap.
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 coverage is 100%, and description mirrors schema descriptions without adding new semantic value.
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?
Clearly states specific verb 'Show' and resource 'spending trends for a category'. Identifies pattern detection, distinguishing it from sibling tools like monthly_summary or spending_by_category.
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?
Implies usage for trend analysis but lacks explicit when-to-use or when-not-to-use guidance or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_accountA
Create a new budget account (on-budget or off-budget). Returns the new account ID so transactions can target it right away.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Account name | |
| offBudget | No | Whether the account is off-budget (tracked but outside the budget, e.g. a loan or investment). Defaults to false. | |
| initialBalance | No | Opening balance in human amounts (e.g. 1500.50, not cents). Creates the "Starting Balance" transaction. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only indicate readOnlyHint=false, so the description carries meaningful weight. It clearly states this is a creation action and adds that the new account ID is returned for immediate use in transactions. It does not overpromise or contradict the 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?
Two sentences with no filler. The core action is front-loaded, and the return-value note is placed immediately after, making the description easy to parse and act on.
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 simple 3-parameter create operation, the description is nearly complete: it names the action, the account type distinction, and the important return value. Since there is no output schema, mentioning the returned account ID is especially valuable. Minor details like validation or conflict behavior are absent but not critical for this 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?
Schema description coverage is 100%, so the schema already documents all three parameters and their meanings. The description adds little beyond restating the on-budget/off-budget concept and the return behavior, which is acceptable given full schema coverage.
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 states a specific verb ('Create') and resource ('budget account'), and clarifies the on-budget/off-budget distinction. It also mentions the return value, which helps distinguish this tool from other create tools like create_category or create_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 tool's purpose is clear: use it to create a new budget account. It does not explicitly name alternatives or exclusions, but the sibling set contains no competing tool for creating accounts, and the practical follow-up use case (targeting transactions) is mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_categoryA
Create a new budget category within a category group.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the new category | |
| group | Yes | Category group name or ID to add this category to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a write operation (readOnlyHint=false), and the description aligns by stating 'create'. However, no additional behavioral context (e.g., idempotency, error handling) is provided beyond the annotation.
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?
A single, concise sentence that is front-loaded with the verb and resource. No unnecessary words.
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 simple tool with two required parameters and no output schema, the description covers the essential purpose and scope. Could mention return value or confirmation, but overall adequate.
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 coverage is 100% with descriptions for both parameters. The description adds minimal context by mentioning 'category group', but schema already describes 'group' as a category group name or ID. Baseline of 3 is appropriate.
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 (create), the resource (budget category), and the scope (within a category group). It distinguishes this tool from siblings like create_category_group and update_category.
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 explicit guidance on when to use this tool versus alternatives. It's implied that this is for adding a category to an existing group, but no conditions or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_category_groupB
Create a new category group for organizing budget categories.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the new category group |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations confirm write operation (readOnlyHint: false). Description adds no additional behavioral details such as required permissions, name uniqueness constraints, side effects, or error conditions. Bare minimum alignment with 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?
Single, efficient sentence with no unnecessary words or fluff. Information is front-loaded clearly.
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 simple tool with one required parameter and no output schema, the description is minimally adequate. However, it lacks behavioral context and usage guidance, which matters more when sibling tools exist.
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 coverage is 100% (one parameter 'name' with description). The description does not add meaning beyond the schema; it merely repeats the existence of a name parameter. Baseline 3 is appropriate given high coverage.
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?
Clearly states the action 'Create' and the resource 'category group', with the purpose 'for organizing budget categories'. Distinguishes from siblings like 'create_category' (different resource) and 'update_category_group' (different action), though the phrase 'organizing budget categories' is somewhat vague.
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 on when to create a category group versus using alternatives like 'create_category' or 'update_category_group'. No context provided about prerequisites, typical scenarios, or when this tool is inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_payeeC
Create a new payee.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the new payee |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation (readOnlyHint=false). The description merely repeats 'Create' and adds no further behavioral details such as required permissions, duplicate handling, or side effects.
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 very concise at three words, but this brevity sacrifices valuable context. While it is well-structured, it could be longer to include practical usage hints without being verbose.
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 creation tool with no output schema, the description fails to mention return values (e.g., does it return the created payee ID?). With one parameter and no siblings of similar function, more context is needed for complete understanding.
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 coverage is 100% for the single parameter 'name', which is described in the schema. The description adds no additional meaning beyond the schema, justifying the baseline score of 3.
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 'Create a new payee' uses a specific verb and resource, clearly indicating the action. It distinguishes from sibling tools like update_payee and delete_payee, though it does not elaborate on what a payee is.
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 such as update_payee or get_payees. The agent is left to infer usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ruleA
Create a transaction rule. When a transaction matches the condition, the action is applied automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| stage | No | When to apply: null (default), pre, or post | null |
| action_field | Yes | Field to set: category, payee, notes | |
| action_value | Yes | Value to set (category name/ID, payee name, or note text) | |
| condition_op | Yes | Operator: is, contains, oneOf, isNot, doesNotContain, matches, gt, lt, gte, lte | |
| condition_field | Yes | Field to match: payee, category, amount, notes, imported_payee | |
| condition_value | Yes | Value to match against |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, so the description aligns with a write operation. However, it does not disclose additional behaviors such as potential limits, overwrite behavior, or side effects on existing rules.
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?
Two concise sentences front-load the purpose and add context. No wasted words or redundant information.
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?
Description covers the core concept but lacks details on return values or error scenarios. Without an output schema, the description could have added that information. However, for a simple creation tool, it is adequate.
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 100%, so the schema already documents all parameters. The tool description adds no extra meaning beyond what the schema provides, resulting in baseline score.
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?
Description clearly states 'Create a transaction rule' with verb and resource. It also explains the automatic behavior when conditions match, distinguishing it from sibling tools like delete_rule or get_rules.
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?
Description implies when to use (for automating actions on transactions) but does not explicitly exclude alternatives or provide comparisons to sibling tools like create_category or update_transaction. No 'when not to use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_split_transactionA
Add a split transaction: one bank-facing total spread across multiple categories. The split amounts must sum to the total.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Transaction date (YYYY-MM-DD or "today", "yesterday"). Defaults to today. | |
| notes | No | Notes for the parent transaction | |
| payee | No | Payee name | |
| amount | Yes | Total amount (negative for expenses, positive for income). Must equal the sum of the splits. | |
| splits | Yes | Two or more splits whose amounts sum to the total. | |
| account | Yes | Account name or ID | |
| cleared | No | Whether the transaction is cleared |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false, and the description confirms it's a write operation. However, no additional behavioral context is provided (e.g., side effects, permissions, failure modes). The description adds little beyond the annotation.
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?
Two concise sentences clearly convey the tool's purpose and key constraint. No wasted words, front-loaded with the action.
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?
The tool has 7 parameters and 3 required fields, yet no output schema. The description covers the core concept but lacks details on return values, error handling, or validation behavior. Adequate but not comprehensive.
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 coverage is 100%, so the baseline is 3. The description reiterates the constraint that split amounts must sum to total, which is already in the schema. No new semantic meaning is added.
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: 'Add a split transaction', explaining it as a bank-facing total spread across multiple categories. This distinctively separates it from sibling tools like create_transaction (single category) and create_transfer (transfers).
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 splitting transactions across categories but does not explicitly mention when to avoid this tool or suggest alternatives. Given the sibling list, the context is clear, but the description itself lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_transactionA
Add a new transaction to an account. Use negative amounts for expenses, positive for income.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Transaction date (YYYY-MM-DD or "today", "yesterday"). Defaults to today. | |
| notes | No | Transaction notes | |
| payee | No | Payee name | |
| amount | Yes | Amount (negative for expenses, positive for income). Use human amounts like -150.50, not cents. | |
| account | Yes | Account name or ID | |
| cleared | No | Whether the transaction is cleared | |
| category | No | Category name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate mutation (readOnlyHint: false). Description adds useful context about the sign convention for amounts and using human amounts. However, it does not disclose return values, side effects, or whether the transaction is immediately posted. Still, it provides enough behavior beyond 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?
Two sentences, no filler, immediately conveys purpose and key nuance. Front-loaded with verb and object. Very efficient.
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?
Lacks explanation of what happens after creation (e.g., return value, immediate posting, sync requirement). Since no output schema exists, description should cover outcome or side effects. Description is minimally adequate but leaves gaps.
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 coverage is 100%, so baseline is 3. The description adds helpful detail for the amount parameter ('Use human amounts like -150.50, not cents'), which goes beyond the schema description. No other parameters need extra explanation.
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?
Description clearly states verb 'Add' and resource 'new transaction to an account'. It distinguishes from sibling tools like create_split_transaction or create_transfer by implying a simple single-entry transaction. Also specifies sign convention for amounts.
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?
Description does not explicitly state when to use this tool vs alternatives. Sibling tools suggest scenarios (e.g., split transactions, transfers), but no explicit when-not-to-use or alternative names are given. Usage is somewhat implied but not clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_transferB
Create a transfer between two accounts.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date (YYYY-MM-DD or natural language). Defaults to today. | |
| notes | No | Transfer notes | |
| amount | Yes | Transfer amount (positive number, e.g., 5000.00) | |
| to_account | Yes | Destination account name or ID | |
| from_account | Yes | Source account name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate it's not read-only. Description does not disclose behavioral traits like atomicity, immediate balance effects, validation rules, or permission requirements. For a mutation tool, more context is needed.
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?
Single sentence with no waste. However, it could be slightly expanded to add value without losing conciseness.
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 5 parameters and no output schema, the description should explain return value or side effects. It does not. Also lacks guidance on choosing between create_transfer and create_transaction.
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 coverage is 100%, so schema descriptions already explain parameters. The description adds no new meaning beyond the schema, so baseline 3 applies.
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 'Create a transfer between two accounts,' which is a specific verb+resource. It distinguishes from siblings like create_transaction (single transaction) and create_split_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?
No guidance on when to use this vs. alternatives (e.g., create_transaction) or prerequisites. No mention of account types, currency compatibility, or transfer-specific considerations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_accountADestructive
Delete an account and its entire transaction history. Destructive and irreversible: the first call only previews what would be lost, and deleting requires both confirm: true and confirm_name set to the account's exact name. Prefer closing an account when you just want to retire it.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Account name or ID to delete | |
| confirm | No | Must be true to delete. Without it, the tool only previews. | |
| confirm_name | No | The account's exact name, echoed back as a safeguard against deleting the wrong account. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, but the description adds crucial behavior beyond them: the operation is irreversible, affects entire transaction history, first call only previews, and deletion requires both confirm: true and confirm_name set to the exact account name. This is exactly the safety context an agent needs.
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?
Three sentences, all information-dense and in priority order: destructive warning first, then the preview/confirmation mechanics, then the alternative. No filler or repetition of schema details.
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 tool with three simple parameters and no output schema, the description covers the essential behavioral flow: preview first, confirm with both safeguards, and prefer closing for retirement. An agent has enough to call the tool correctly and avoid accidental irreversible deletion.
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 coverage is 100% and each parameter already has a meaningful description. The tool description adds value by explaining the interaction between confirm and confirm_name as complementary safeguards, and by clarifying that omitting confirm turns the call into a preview rather than an execution.
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 states a specific verb and resource: 'Delete an account and its entire transaction history.' It clearly distinguishes this from related tools like delete_transaction and delete_category by emphasizing the account-level scope and destructive consequence.
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 gives explicit when-not-to-use guidance: 'Prefer closing an account when you just want to retire it.' It does not explicitly say 'use delete_account when you want permanent removal,' but that intent is strongly implied by the first sentence and the preview/confirmation flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_categoryADestructive
Delete a budget category. Optionally transfer its transactions to another category.
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Category name or ID to delete | |
| transfer_to | No | Category name or ID to transfer existing transactions to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the optional transfer behavior beyond the destructiveHint annotation, but does not disclose permanence of deletion or other side effects. The annotation already signals destructiveness, so the description provides moderate added value.
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?
A single, clear sentence with no superfluous words. The structure is efficient and front-loads the core purpose.
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 (2 params, no output schema), the description covers the essential functionality. However, it lacks details on exact match requirements, case sensitivity, or safety precautions for deletion.
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 coverage is 100%, so the baseline is 3. The description restates the parameters without adding new semantics or usage details beyond what the schema already defines.
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 'budget category', and distinguishes itself by mentioning the optional transfer of transactions, setting it apart from related tools like 'delete_category_group'.
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 (e.g., 'update_category' or 'recategorize_transaction'), nor are prerequisites or constraints like system categories mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_category_groupADestructive
Delete a category group. You must specify a category to transfer orphaned categories' transactions to.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Category group name or ID to delete | |
| transfer_to | Yes | Category name or ID to transfer orphaned transactions to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses that orphaned categories' transactions must be transferred, which is a critical behavioral detail. No contradiction with 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?
Two sentences with no wasted words, efficiently conveying the core action and mandatory requirement.
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?
The description adequately covers key behavioral aspects for a destructive tool with two parameters. It could optionally elaborate on the effect of deletion, but the information is sufficient for correct 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 coverage is 100% with descriptions for both parameters. The description restates the need for transfer_to but adds no new semantic meaning beyond the 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 action 'Delete a category group' and the resource, distinguishing it from sibling tools like create_category_group or update_category_group.
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 mandates specifying a transfer category for orphaned transactions, providing essential usage guidance. However, it does not explicitly compare to alternatives like delete_category or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_payeeBDestructive
Delete a payee.
| Name | Required | Description | Default |
|---|---|---|---|
| payee | Yes | Payee name or ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the tool as destructive. The description simply repeats 'delete' without adding new behavioral traits, but there is no contradiction.
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?
Extremely concise at three words, but borderline under-specified. Efficient but lacks helpful details like irreversibility.
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?
Adequate for a simple single-parameter delete tool with full schema coverage and destructive hint. Could mention irreversibility or prerequisites for 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 coverage is 100%, and the parameter description is clear. The tool description adds no further semantic value beyond what the schema provides.
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 (delete) and the resource (a payee), distinguishing it from sibling tools that delete other entities. However, it lacks additional context like what a payee is.
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 provided on when to use this tool versus alternatives like update_payee or other delete tools. The agent receives no hints about appropriateness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_ruleADestructive
Delete a transaction rule by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| rule_id | Yes | Rule ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation 'destructiveHint=true' already indicates the tool is destructive. The description adds no extra behavioral context, such as whether the deletion is permanent, what happens to related transactions, or if confirmation is required. It does not contradict the annotation, but does not enrich it.
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 a single, concise sentence that directly states the tool's purpose without any extraneous information. It is front-loaded and every word contributes to understanding.
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 simple parameter set (only one required, with full schema coverage) and the presence of a destructiveHint annotation, the description is mostly complete. However, it omits any mention of return values (e.g., success message or error behavior), which could be helpful for an agent to handle the response 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 input schema provides a description for 'rule_id' ('Rule ID to delete'), which fully explains the parameter. The description adds no additional meaning or format constraints beyond what the schema already provides. With 100% schema coverage, a score of 3 is baseline.
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 explicitly states the action ('Delete'), the resource ('a transaction rule'), and the identifier method ('by its ID'), leaving no ambiguity about what the tool does. It clearly distinguishes itself from sibling tools like 'get_rules' (retrieval) and 'create_rule' (creation).
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 (e.g., deactivating a rule instead of deleting it). It does not mention prerequisites, such as fetching valid rule IDs first, or any warnings about irreversible deletion. Usage context is only implied by the tool's name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_transactionADestructive
Delete a transaction by its ID. This action cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| transaction_id | Yes | Transaction ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds the critical detail 'This action cannot be undone,' emphasizing irreversibility beyond the annotation. No contradictions.
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?
Two short sentences with no fluff. The first sentence immediately states the action, and the second provides important behavioral context. Every sentence is essential.
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 (one string parameter, no output schema) and the annotation, the description adequately covers purpose and irreversibility. Could optionally mention what happens on success/failure, but not required.
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 coverage is 100% (transaction_id described as 'Transaction ID to delete'). The description mentions 'by its ID' but adds no new information beyond the schema. Minimal added value.
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 explicitly states the verb 'Delete' and the resource 'transaction', and specifies how to identify it ('by its ID'). This clearly distinguishes it from sibling tools like create_transaction or update_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 lacks explicit guidance on when to use this tool versus alternatives, such as when not to use or prerequisites. However, the tool's purpose is straightforward (deleting a transaction), so the omission is not critical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_budget_monthARead-only
Get the budget for a specific month showing all category groups, their categories with budgeted amounts, actual spending, and remaining balance. Also shows the to-be-budgeted amount.
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | Month in YYYY-MM format, or natural language like "this month", "last month", "January 2025". Defaults to current month. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description does not need to restate safety. It adds value by detailing the return structure (category groups, amounts, etc.), providing behavioral context beyond the annotation. No contradiction.
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 two sentences, front-loading the core purpose in the first sentence and adding one more essential element in the second. No redundant information.
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?
The description adequately explains the return values (category groups, categories, amounts, etc.) compensating for the lack of an output schema. However, it does not mention pagination, limits, or scope (e.g., all accounts), leaving minor gaps for a complete understanding.
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 100% with a detailed explanation of the 'month' parameter (formats, natural language). The tool description does not add additional meaning to the parameter beyond what the schema provides, so a baseline score of 3 is appropriate.
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 for a specific month', and explicitly lists all returned data elements (category groups, categories with budgeted amounts, actual spending, remaining balance, to-be-budgeted). This distinguishes it from sibling tools like get_budget_summary or budget_vs_actual.
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 monthly budget data but does not explicitly state when to use this tool versus alternatives like get_budget_summary (summary) or budget_vs_actual (comparison). No when-not-to-use or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_budget_summaryARead-only
Executive summary of the budget showing totals by category group, total income, total expenses, savings rate, and to-be-budgeted for a given month.
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | Month (YYYY-MM or natural language). Defaults to current month. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description does not need to restate that. It adds the output content but lacks behavioral details like whether the month must be part of an active budget, how default month behaves, or performance implications. With good annotation coverage, the description adds moderate value.
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 a single, well-structured sentence of 18 words that front-loads the purpose and lists key outputs. Every word contributes 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?
For a simple, read-only tool with one optional parameter and no output schema, the description adequately lists the output metrics. It does not explain the return structure or edge cases, but the listed items provide sufficient contextual completeness for its 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?
Schema description coverage is 100%, so the parameter 'month' is already documented with format and default behavior. The tool description only references 'for a given month' without adding syntactic detail or usage notes, meeting the baseline but not exceeding it.
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 provides an executive summary of the budget with specific metrics (totals by category group, total income, expenses, savings rate, to-be-budgeted) for a given month. The verb 'get' and resource 'budget summary' are precise, and it distinguishes from siblings like budget_vs_actual or category_trends by specifying it's a single-month overview.
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 hints at usage for a monthly overview but does not explicitly compare to alternatives such as monthly_summary or get_budget_month. No 'when to use' or 'when not to use' guidance is provided, leaving the agent to infer context from the metrics listed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_categoriesARead-only
List all category groups with their categories and IDs. Useful for seeing the full budget structure.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds value by specifying it returns 'category groups with their categories and IDs'. It is sufficient for a simple list tool without parameters.
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?
Two sentences, very concise and front-loaded with the main action. No wasted words.
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 simple list tool with no parameters and read-only nature, the description tells what it returns and its use case. It is complete enough even without an output schema.
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?
There are no parameters, and schema coverage is 100%. The baseline for 0 parameters is 4; the description does not need to add parameter info.
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 'List' and the resource 'all category groups with their categories and IDs'. It distinguishes itself from sibling tools like create_category, delete_category, etc., by focusing on listing the full structure.
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 says 'Useful for seeing the full budget structure', giving clear context for when to use it. However, it does not explicitly mention when not to use it or contrast with alternatives like get_category_balance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_category_balanceBRead-only
Get the balance and spending history for a specific category across one or more months.
| Name | Required | Description | Default |
|---|---|---|---|
| months | No | Number of months to look back (default 3) | |
| category | Yes | Category name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description doesn't need to restate safety. The description adds that it covers 'one or more months' but lacks details on whether months are calendar or fiscal, or if it returns raw transaction history or aggregated balances.
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?
A single, well-formed sentence that conveys the tool's purpose efficiently with no unnecessary words.
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 simple read-only nature and existing annotations/schema, the description is mostly adequate. However, missing details like the format of the return value (since no output schema) could be improved. Sibling tools add context but are not critical.
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 coverage is 100%, so baseline is 3. The description reinforces the 'category' and 'months' parameters but does not add new semantics beyond what the schema already provides.
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 it retrieves balance and spending history for a specific category over one or more months. However, it does not differentiate from sibling tools like 'balance_history' or 'spending_by_category' which could overlap.
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 on when to use this tool versus alternatives, nor any conditions or exclusions. The description is purely declarative without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_payeesARead-only
List all payees in the budget. Useful for seeing available payees and their IDs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true. Description adds no behavioral traits beyond listing, which is consistent. No contradiction.
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?
Two sentences, front-loaded with the main action, no wasted words.
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?
Simple tool with no output schema; description implies output includes IDs, which is sufficient. No missing information for the task.
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?
No parameters in schema, so baseline is 4. Description adds no parameter info, but schema coverage is 100% and no additional meaning is needed.
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?
Clearly states 'List all payees in the budget' with a specific verb and resource. Distinguishes from sibling tools like create_payee, delete_payee, update_payee by implying it is the read-only listing tool, though no explicit 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?
Indicates usefulness for 'seeing available payees and their IDs,' but does not provide when-not-to-use or alternative tool guidance beyond the implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rulesARead-only
List all transaction rules showing their conditions and actions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already indicates a safe read operation. The description adds that rules are shown with conditions and actions, providing useful behavioral context beyond the annotation.
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 a single concise sentence that immediately conveys the tool's function. No 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?
The description is adequate for a simple list tool. However, it lacks mention of potential pagination or sorting, which could be relevant for large rule sets.
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?
There are zero parameters, so schema coverage is 100%. The description adds value by specifying that the output includes conditions and actions, which is not in the empty 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 lists all transaction rules with their conditions and actions, distinguishing itself from sibling tools like create_rule and delete_rule.
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 explicit guidance on when to use this tool vs alternatives like get_transactions or list_accounts. However, the context of sibling tools implies its use for rule retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactionsARead-only
List transactions with optional filters. Returns date, payee, category, amount, notes, account, and cleared status.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of transactions to return (default 50) | |
| payee | No | Payee name to filter by (partial match) | |
| account | No | Account name or ID to filter by | |
| category | No | Category name to filter by (partial match) | |
| end_date | No | End date (YYYY-MM-DD or natural language). Defaults to today. | |
| max_amount | No | Maximum amount in human format | |
| min_amount | No | Minimum amount in human format (e.g., -500 for expenses of at least 500) | |
| start_date | No | Start date (YYYY-MM-DD or natural language like "start of month", "30 days ago"). Defaults to start of current month. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds value by listing returned fields. However, it does not disclose ordering, pagination beyond the limit parameter, or default behavior when no filters are applied. This is adequate but not rich.
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 a single, clear sentence. It is appropriately concise but could include a brief note on ordering or default limit without being verbose.
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 8 optional parameters and no output schema, the description provides the essential purpose but lacks details on result ordering, pagination beyond limit, or behavior with multiple filters. Adequate but not comprehensive.
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 coverage is 100% with well-documented parameters. The description adds no additional semantic meaning beyond 'optional filters' and the list of returned fields. Without extra context, score is baseline 3.
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 lists transactions with optional filters and specifies the returned fields (date, payee, category, amount, notes, account, cleared status). It distinguishes from sibling tools like create_transaction, update_transaction, and delete_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 listing transactions with filters but does not provide explicit guidance on when to use this tool versus alternatives like balance_history or budget_vs_actual. No exclusions or when-not-to-use are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsARead-only
List all budget accounts with their current balances, type (on-budget/off-budget), and status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true; description adds what data the tool returns (balances, type, status). No contradictions, and the behavioral trait is consistent.
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?
Single clear sentence with no filler. Efficiently conveys purpose and 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 no output schema and zero parameters, the description adequately hints at return structure (balances, type, status). Could mention ordering or scope (e.g., active only), but sufficient for a simple list.
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?
No parameters exist, so schema coverage is 100%. Description adds meaning by explaining the output fields, which is valuable beyond the empty 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?
Description specifies 'list all budget accounts' with key attributes (balances, type, status), clearly distinguishing from sibling tools that are mutations (create, update, delete) or filtered queries (spending_by_category).
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?
While no explicit when-to-use/alternatives, the tool's simple listing purpose is evident, and context signals (0 params, read-only) imply safe general use. Sibling names confirm distinct roles.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monthly_summaryARead-only
Monthly financial summary showing income, expenses, savings, and savings rate across multiple months. Great for seeing trends in your overall financial health.
| Name | Required | Description | Default |
|---|---|---|---|
| months | No | Number of months to show (default 3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the behavior is known to be read-only. The description adds the specific metrics shown (income, expenses, savings, rate) but does not disclose any additional behavioral traits such as pagination, sorting, or whether data is aggregated across all accounts. It adds some value but not deeply.
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?
Two concise sentences with no redundant information. Every word adds value, stating the tool's output and its benefit. Efficiently structured.
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 simple read-only tool with one parameter and no output schema, the description adequately covers the purpose and metrics. It does not detail return format or edge cases, but given the low complexity, it is sufficiently 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?
Schema description coverage is 100% for the single parameter 'months', so the baseline is 3. The description does not add extra meaning beyond what the schema already provides; it merely reinforces the parameter's role in controlling the number of months shown.
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?
Description clearly states it produces a monthly financial summary with specific metrics (income, expenses, savings, savings rate) across multiple months. This distinguishes it from sibling tools like balance_history (trends of a single metric) or category_trends (category-level trends). Verb+resource is explicit.
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?
Description indicates it's for seeing trends in overall financial health, which guides when to use it. However, it does not explicitly state when not to use it or direct to alternatives, but the purpose is sufficiently clear given the context of sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recategorize_transactionBIdempotent
Change the category of an existing transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | New category name or ID | |
| transaction_id | Yes | Transaction ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it's not read-only and is idempotent. Description adds only that it changes category, consistent with annotations. No extra behavioral details beyond what annotations provide.
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?
Extremely concise: single 5-word sentence. No wasted words, but could include more context without being verbose. Still effective for a simple tool.
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?
Tool is simple, but description lacks information on error cases (e.g., invalid transaction_id or category) and return values. No output schema, so agent must infer. Adequate but not comprehensive.
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 covers both parameters with descriptions. Description does not add meaning beyond the schema. Baseline score for 100% schema coverage.
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?
Description clearly states it changes the category of an existing transaction. Verb 'change' and resource 'category of an existing transaction' are specific. Distinguishes from sibling tools like create_transaction (new) and update_transaction (broader changes).
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 on when to use this tool vs alternatives like update_transaction or when a transaction/category must exist. Lacks context about prerequisites or preferred use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reconcile_currency_residualA
Book an adjustment transaction to bring a multi-currency account to the balance the bank reports, clearing accumulated FX-rate residual.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date for the adjustment (YYYY-MM-DD or "today"). Defaults to today. | |
| notes | No | Note for the adjustment. Defaults to "FX residual adjustment". | |
| payee | No | Optional payee for the adjustment | |
| account | Yes | Account name or ID to reconcile | |
| category | Yes | Category to book the adjustment under (name or ID) | |
| target_balance | No | Balance the bank reports for this account (human amount). Defaults to 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a mutation (booking an adjustment), which aligns with the readOnlyHint=false annotation. However, it does not disclose details like permissions required, impact on other accounts, or reversibility. The added context 'clearing accumulated FX-rate residual' is helpful but minimal.
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 a single sentence that is concise and front-loaded with the key action and purpose. No unnecessary words 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 no output schema and minimal annotations, the description explains the purpose but lacks details on return behavior (e.g., does it return a transaction ID?). The 6 parameters are covered by schema, but essential context like output or side effects is missing.
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 input schema has 100% coverage with descriptions for all 6 parameters. The description does not add additional meaning beyond the schema; it repeats 'adjustment transaction' without elaborating on parameters. Baseline score of 3 is appropriate.
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 'Book' and the specific resource 'multi-currency account', with the purpose of bringing the account to the bank-reported balance by clearing accumulated FX-rate residual. This distinguishes it from sibling tools like create_transaction or run_bank_sync, which serve different 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 for multi-currency accounts with FX residual, but does not explicitly state when not to use it or provide alternatives. Sibling tools like create_transaction could be used for simple adjustments, but no comparison is made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repair_syncAIdempotent
Repair the budget's sync state when operations fail with an out-of-sync error. Rebuilds sync bookkeeping without modifying budget data. Use this when other tools report that the budget is out of sync.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses an important side effect: 'Rebuilds sync bookkeeping without modifying budget data.' This goes beyond the annotations by clarifying what gets changed and what does not. The annotations already provide idempotency and read-only/write context, so the additional detail is sufficient.
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 two sentences with no wasted words. The main action is front-loaded, and the usage condition is given immediately. Every sentence earns its place.
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 tool with no parameters and no output schema, the description is complete: it explains what the tool does, when to use it, and the side-effect boundary. The annotations cover idempotency, and nothing needed for correct invocation is missing.
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, so there is no parameter semantics burden. Per the baseline for 0-parameter tools, the description need not add parameter details; the context provided is adequate.
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 states a specific verb ('Repair') and resource ('the budget's sync state'), and specifies the trigger condition ('when operations fail with an out-of-sync error'). This clearly distinguishes it from siblings like run_bank_sync and reconcile_currency_residual.
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 gives explicit guidance: 'Use this when other tools report that the budget is out of sync.' It clearly states when to use the tool, though it does not explicitly discuss when not to use it or compare against alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_bank_syncA
Sync bank transactions from linked accounts (GoCardless/SimpleFIN). Syncs a specific account or all linked accounts if none specified.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Account name or ID to sync. If omitted, syncs all linked accounts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, so the tool is not read-only. The description confirms this with 'Sync', but adds no additional behavioral context such as whether syncing modifies existing data, requires authentication, or has rate limits. Given annotations already indicate write behavior, the description misses the opportunity to add value.
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 two short sentences with no unnecessary words. It is front-loaded with the core purpose and includes the optionality of the parameter. Every sentence earns its place.
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 tool with one optional parameter and no output schema, the description covers the main functionality and parameter behavior. It lacks explicit mention of side effects or return values, but given simplicity, it is mostly 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 only parameter 'account' is fully described in the input schema with the same text as in the tool description. Since schema coverage is 100%, the description does not add new meaning beyond the schema, warranting a baseline score of 3.
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 'Sync' and resource 'bank transactions from linked accounts' with scope 'specific account or all'. It distinguishes from sibling tools by specifying the external sources (GoCardless/SimpleFIN) and the action of syncing, which no other sibling tool does.
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 syncing bank transactions from linked accounts but does not provide explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. It lacks explicit context for selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spending_by_categoryARead-only
Break down spending by category for a date range. Shows each category's total spending and percentage of total.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of categories to show (default 20) | |
| end_date | No | End date (YYYY-MM-DD or natural language). Defaults to today. | |
| start_date | No | Start date (YYYY-MM-DD or natural language). Defaults to start of current month. | |
| include_income | No | Include income categories (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the tool is read-only. The description adds behavioral context by specifying output details (category total and percentage), which goes beyond annotations. No contradictions.
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?
Two sentences with clear structure, front-loading the purpose. Could be slightly more structured but is concise and efficient.
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?
No output schema exists, but the description explains return values (category, total, percentage). It lacks details on sorting or pagination, but for a simple aggregation tool, it is mostly complete given sibling 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?
Schema coverage is 100% with all parameters documented. The description adds no additional parameter information beyond what the schema already provides, so baseline score of 3 is appropriate.
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 it breaks down spending by category for a date range, showing total spending and percentage. This is specific and distinguishes it from siblings like 'category_trends' (trends over time) or 'monthly_summary' (monthly summary).
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 date-range category breakdown but does not provide explicit when-to-use or when-not-to-use guidance. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spending_projectionARead-only
Project end-of-month spending for each category based on the current daily spending rate. Warns about categories likely to exceed budget.
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | Month to project (YYYY-MM or natural language). Defaults to current month. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds behavioral context: it uses 'current daily spending rate' and 'warns about categories likely to exceed budget,' which are useful details beyond the annotation. No contradictions.
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 two sentences, front-loading the primary action. Every sentence adds value, and there is no wasted content.
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?
The tool has one optional parameter and no output schema. The description explains the core functionality and warning behavior, but does not describe the return format or how warnings are structured, leaving some ambiguity for the agent.
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 input schema has 100% coverage for the only parameter 'month,' already describing its format and default. The description does not add extra meaning beyond the schema's description, so baseline score of 3 is appropriate.
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 function: projecting end-of-month spending per category and warning about budget exceedance. It uses a specific verb ('project') and resource ('spending') and distinguishes from siblings like 'spending_by_category' (current spending) and 'budget_vs_actual' (comparison).
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 forward-looking projections and budget warnings, but lacks explicit guidance on when to use this tool versus alternatives. It does not specify exclusions or provide comparative context among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_budget_amountAIdempotent
Set the budgeted amount for a category in a specific month.
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | Month (YYYY-MM or natural language). Defaults to current month. | |
| amount | Yes | New budgeted amount (human-readable, e.g., 5000.00) | |
| category | Yes | Category name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and readOnlyHint=false. The description adds no extra behavioral context beyond confirming it is a write operation.
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?
A single sentence of 12 words that is front-loaded with the action. No unnecessary words or repetition.
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 simple setter with no output schema and complete param descriptions, the description is mostly adequate. It could mention that the amount overwrites the previous budget for the month.
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 100%, and the description adds no additional meaning beyond what the schema already provides for the three parameters.
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 uses a specific verb 'Set' and resource 'budgeted amount for a category in a specific month', clearly distinguishing it from sibling tools like get_budget_month or budget_vs_actual.
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 setting budget amounts, but does not explicitly mention when to use this tool versus alternatives or provide any exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_categoryAIdempotent
Rename or hide/unhide a budget category.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name for the category | |
| hidden | No | Set to true to hide, false to unhide | |
| category | Yes | Category name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false and idempotentHint=true. The description adds that it renames or changes hidden status. It does not detail side effects or error states, but the idempotency is clear.
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?
One sentence, zero waste, front-loaded with the action and resource. Every word adds value.
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?
Covers the main purpose for a simple update tool with 3 params. Could mention simultaneous updates, but not essential. No output schema is acceptable.
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 coverage is 100%, so all parameters are described in the schema. The description adds no additional meaning beyond 'rename' and 'hide/unhide,' which align with the 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 explicitly states 'rename or hide/unhide a budget category,' using specific verbs and resource. It distinguishes from sibling tools like create_category (creation) and delete_category (removal).
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 explicit guidance on when to use this vs alternatives. It implies usage for renaming or toggling visibility, but does not reference sibling tools for deletions or creations, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_category_groupAIdempotent
Rename or hide/unhide a category group.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name for the group | |
| group | Yes | Category group name or ID | |
| hidden | No | Set to true to hide, false to unhide |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutation (readOnlyHint=false) and idempotency (idempotentHint=true). The description adds no further behavioral details such as effects on child categories or required permissions.
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 extremely concise (8 words) and front-loaded with the action, leaving no unnecessary words.
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 simple tool with few parameters and no output schema, the description covers the main use cases. However, it could mention that the group parameter accepts name or ID and note that the operation is idempotent.
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 coverage is 100% with adequate parameter descriptions. The description echoes the parameters (rename, hide/unhide) but does not add extra context like value constraints or interactions between parameters.
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 two specific actions (rename, hide/unhide) on a category group, which distinguishes it from sibling tools like create_category_group or update_category.
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 explicit guidance on when to use this tool vs alternatives (e.g., update_category for individual categories). Usage context is only implied by the action verbs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_payeeBIdempotent
Rename a payee.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New name for the payee | |
| payee | Yes | Payee name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false and idempotentHint=true, but the description adds no behavioral context beyond 'rename'. It does not disclose potential side effects, authorization requirements, 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 a single sentence with no waste. It efficiently conveys the tool's purpose without unnecessary detail.
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?
The tool is simple, but with no output schema, the description should at least mention that the operation updates the payee's name in the database. It omits any note about return values or side effects, making it incomplete for an agent to fully understand the tool's behavior.
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 coverage is 100% with parameter descriptions ('Payee name or ID', 'New name for the payee'). The description adds no further meaning, so baseline of 3 is appropriate.
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 'Rename a payee' clearly states the verb (rename) and resource (payee). It distinguishes this tool from siblings like create_payee and delete_payee by specifying the action of changing an existing payee's name.
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 does not mention prerequisites (e.g., payee must exist) or exclude scenarios (e.g., not for creating or deleting payees).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_transactionAIdempotent
Update fields of an existing transaction. Only the fields you provide will be changed.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | New date (YYYY-MM-DD or "today", "yesterday") | |
| notes | No | New notes | |
| payee | No | New payee name | |
| amount | No | New amount (negative for expenses, positive for income). Human amounts, not cents. | |
| cleared | No | Whether the transaction is cleared | |
| category | No | New category name or ID | |
| transaction_id | Yes | Transaction ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutation and idempotency; description adds partial update detail but omits error handling, permissions, or side effects.
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?
Single sentence conveying essential information with no waste; front-loaded and efficient.
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?
Lacks details on return value, prerequisites (e.g., transaction must exist), and potential constraints for fields like 'cleared'; inadequate for a mutation tool with 7 parameters.
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 covers 100% of parameters with descriptions; the description adds no extra meaning beyond 'only provided fields change'.
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?
Description clearly specifies it updates existing transactions and notes partial update behavior, distinguishing it from create/delete siblings.
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?
States partial update behavior, but lacks explicit differentiation from specialized tools like recategorize_transaction or when to use alternatives.
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.
3 tool updates
v0.7.1- Added
create_account - Added
delete_account - Added
repair_sync
34 tool updates
v0.6.1- First observed
balance_history - First observed
budget_vs_actual - First observed
category_trends - First observed
create_category - First observed
create_category_group - First observed
create_payee - First observed
create_rule - First observed
create_split_transaction - First observed
create_transaction - First observed
create_transfer - First observed
delete_category - First observed
delete_category_group - First observed
delete_payee - First observed
delete_rule - First observed
delete_transaction - First observed
get_budget_month - First observed
get_budget_summary - First observed
get_categories - First observed
get_category_balance - First observed
get_payees - First observed
get_rules - First observed
get_transactions - First observed
list_accounts - First observed
monthly_summary - First observed
recategorize_transaction - First observed
reconcile_currency_residual - First observed
run_bank_sync - First observed
spending_by_category - First observed
spending_projection - First observed
update_budget_amount - First observed
update_category - First observed
update_category_group - First observed
update_payee - First observed
update_transaction
TDQS
Most tools clearly target a distinct resource and action, and create/update/delete operations are easy to tell apart. The main ambiguity is among the many reporting read tools like get_budget_summary, budget_vs_actual, spending_by_category, monthly_summary, and category_trends, which overlap in purpose and rely on their descriptions to guide selection.
Create, update, delete, and list tools mostly follow a consistent verb_noun pattern, but the read/reporting tools are inconsistent: some use get_, some use list_, and several are bare noun phrases like budget_vs_actual, spending_projection, monthly_summary, and balance_history. This is readable but not a single predictable convention.
37 tools is a large surface, beyond the range where an agent can quickly understand the full capability set. The broad domain of accounts, transactions, categories, payees, rules, and reporting justifies some size, but the number of overlapping reporting read tools makes it feel heavier than necessary.
The tool set covers core CRUD/lifecycle operations for accounts, categories, payees, and transactions, plus sync, reconciliation, budgeting, and reporting. Minor gaps exist, such as no update_rule tool and no explicit close_account action, but agents can work around these reasonably.
Maintenance
Related MCP Connectors
The Ramp MCP server enables users to securely connect Ramp with AI assistants like ChatGPT and Claude to query financial data and take actions using natural language. It transforms Ramp's developer API into a SQL interface that LLMs can query, allowing admins to analyze spend trends, identify cost savings, and run complex SQL analyses on comprehensive datasets (transactions, purchase orders, vendors, users), while all users can manage cards, view transactions, request reimbursements, and get expense policy answers.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Cloudflare Workers MCP server: ai-budget-planner
Related MCP Servers
- AlicenseBqualityAmaintenanceMCP server for integrating Actual Budget with Claude and other LLM assistants.10185219TypeScriptMIT
- AlicenseNot gradedqualityAmaintenanceMCP server that connects AI assistants to Actual Budget for budget management, enabling natural language queries, transaction creation, and spending analysis.1,67149MIT
- FlicenseBqualityDmaintenanceA personal MCP server that gives Claude native access to YNAB budget data.46-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that connects Claude (and other MCP clients) to your Monarch Money financial data, allowing you to query accounts, transactions, and budgets, or update transactions and budget amounts through natural language.MIT
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/henfrydls/actual-budget-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server