Skip to main content
Glama
henfrydls

actual-budget-mcp

actual-budget-mcp

npm version License: MIT Node.js Glama score

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.

Asking a budget where the money went, and a delete that stops to ask for confirmation

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=1 hides 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 ambiguous

  • Natural 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

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_ID

Claude 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-mcp

Option 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, localhost is the container. Your Actual server is not there. host.docker.internal (with the --add-host flag 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 works

Verify your setup

After installing, you can verify the connection works:

npx -y actual-budget-mcp --verify

This will connect to your Actual Budget server and confirm everything is configured correctly.

Configuration

Variable

Required

Description

ACTUAL_SERVER_URL

Yes

Your Actual Budget server URL (e.g., http://localhost:5006)

ACTUAL_PASSWORD

Yes

Server password (set in Actual Budget under Settings)

ACTUAL_BUDGET_ID

Yes

Budget Sync ID (found in Settings > Show advanced settings)

ACTUAL_ENCRYPTION_PASSWORD

No

Only if your budget file is encrypted

ACTUAL_DATA_DIR

No

Cache directory (default: /tmp/actual-budget-mcp-data)

ACTUAL_READ_ONLY

No

Set to 1/true/yes to run read-only. See Safety

Finding your Budget ID

  1. Open Actual Budget

  2. Go to Settings (gear icon)

  3. Click Show advanced settings

  4. 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")
  → deleted

Tools that find their target by namedelete_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

list_accounts

All accounts with balances

"Show me all my accounts"

get_budget_month

Budget for a specific month

"What does my March budget look like?"

get_transactions

Transactions with filters

"Show me transactions from last week over 5000"

get_category_balance

Category history across months

"How has my food spending changed?"

get_budget_summary

Executive budget overview

"Give me a budget summary for February"

get_categories

All category groups and categories

"What categories do I have?"

get_payees

All payees in the budget

"List all my payees"

get_rules

All transaction rules

"Show me my rules"

balance_history

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

budget_vs_actual

Budgeted vs spent per category

"Am I over budget on anything this month?"

spending_projection

End-of-month spending forecast

"Will I stay within budget this month?"

category_trends

Spending trends over time

"What are my spending trends for the last 6 months?"

spending_by_category

Spending breakdown by category

"Show me spending by category for February"

monthly_summary

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

create_transaction

Add a new transaction

"I spent 500 on groceries from Cartera today"

create_split_transaction

One charge across several categories

"Split that 3,000 charge: 2,000 groceries, 1,000 household"

update_transaction

Edit an existing transaction

"Change the amount on that transaction to 600"

delete_transaction

Remove a transaction (previews first, see Safety)

"Delete that test transaction"

update_budget_amount

Change a budget amount

"Set my food budget to 15,000 for this month"

recategorize_transaction

Move to another category

"Move that transaction to Entertainment"

create_transfer

Transfer between accounts

"Transfer 10,000 from Checking to Savings"

reconcile_currency_residual

Clear accumulated FX-rate residual

"Reconcile my USD card to 213.82 USD"

run_bank_sync

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_category

Create a new category

"Create a category called Gym in Gastos Variables"

update_category

Rename or hide a category

"Rename Gym to Fitness"

delete_category

Delete a category (previews first, see Safety)

"Delete the Fitness category"

create_category_group

Create a new group

"Create a category group called Health"

update_category_group

Rename or hide a group

"Rename the Health group to Wellness"

delete_category_group

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_payee

Create a new payee

"Create a payee called Netflix"

update_payee

Rename a payee

"Rename Netflix to Netflix Premium"

delete_payee

Delete a payee (previews first, see Safety)

"Delete the Netflix Premium payee"

create_rule

Create a transaction rule

"Create a rule: when payee contains Amazon, set category to Shopping"

delete_rule

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_account

Create an on- or off-budget account

"Create an off-budget account called Family Investment with 10,000"

delete_account

Delete an account and its history

"Delete the ZZ Test account"

delete_account needs 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 with confirm: true and confirm_name set to the account's exact name. While it declines, the tool reports isError: 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_sync

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_sync rebuilds that state without touching budget data. Note that deleting the local ACTUAL_DATA_DIR does 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

monthly-review

Complete budget review for any month — spending vs budget, overspending, suggestions

spending-check

Quick check: are you on track this month?

spending-patterns

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

actual://accounts

All accounts with balances

Categories

actual://categories

Category groups and categories with IDs

Payees

actual://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/api library

  • No 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_URL is correct

  • Run npx -y actual-budget-mcp --verify to test your connection

"Authentication failed"

  • Your server requires a password. Set ACTUAL_PASSWORD in your config

  • If 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_PASSWORD with 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/api referenced the navigator global 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 default npx command.

  • 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 configured

License

MIT - DLSLabs

Available Tools

37 tools
balance_historyA
Read-only

Track an account's balance changes over time by showing the running balance at key transaction dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYesAccount name or ID
end_dateNoEnd date (YYYY-MM-DD or natural language). Defaults to today.
start_dateNoStart date (YYYY-MM-DD or natural language). Defaults to 3 months ago.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_actualA
Read-only

Compare budgeted amounts versus actual spending for each category in a given month. Highlights over-budget and under-budget categories.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupNoFilter to a specific category group name
monthNoMonth (YYYY-MM or natural language). Defaults to current month.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

create_accountA

Create a new budget account (on-budget or off-budget). Returns the new account ID so transactions can target it right away.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesAccount name
offBudgetNoWhether the account is off-budget (tracked but outside the budget, e.g. a loan or investment). Defaults to false.
initialBalanceNoOpening balance in human amounts (e.g. 1500.50, not cents). Creates the "Starting Balance" transaction.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the new category
groupYesCategory group name or ID to add this category to

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the new category group

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the new payee

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
stageNoWhen to apply: null (default), pre, or postnull
action_fieldYesField to set: category, payee, notes
action_valueYesValue to set (category name/ID, payee name, or note text)
condition_opYesOperator: is, contains, oneOf, isNot, doesNotContain, matches, gt, lt, gte, lte
condition_fieldYesField to match: payee, category, amount, notes, imported_payee
condition_valueYesValue to match against

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoTransaction date (YYYY-MM-DD or "today", "yesterday"). Defaults to today.
notesNoNotes for the parent transaction
payeeNoPayee name
amountYesTotal amount (negative for expenses, positive for income). Must equal the sum of the splits.
splitsYesTwo or more splits whose amounts sum to the total.
accountYesAccount name or ID
clearedNoWhether the transaction is cleared

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoTransaction date (YYYY-MM-DD or "today", "yesterday"). Defaults to today.
notesNoTransaction notes
payeeNoPayee name
amountYesAmount (negative for expenses, positive for income). Use human amounts like -150.50, not cents.
accountYesAccount name or ID
clearedNoWhether the transaction is cleared
categoryNoCategory name or ID

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate (YYYY-MM-DD or natural language). Defaults to today.
notesNoTransfer notes
amountYesTransfer amount (positive number, e.g., 5000.00)
to_accountYesDestination account name or ID
from_accountYesSource account name or ID

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_accountA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYesAccount name or ID to delete
confirmNoMust be true to delete. Without it, the tool only previews.
confirm_nameNoThe account's exact name, echoed back as a safeguard against deleting the wrong account.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_categoryA
Destructive

Delete a budget category. Optionally transfer its transactions to another category.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryYesCategory name or ID to delete
transfer_toNoCategory name or ID to transfer existing transactions to

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_groupA
Destructive

Delete a category group. You must specify a category to transfer orphaned categories' transactions to.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupYesCategory group name or ID to delete
transfer_toYesCategory name or ID to transfer orphaned transactions to

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_payeeB
Destructive

Delete a payee.

ParametersJSON Schema
NameRequiredDescriptionDefault
payeeYesPayee name or ID to delete

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_ruleA
Destructive

Delete a transaction rule by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
rule_idYesRule ID to delete

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_transactionA
Destructive

Delete a transaction by its ID. This action cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
transaction_idYesTransaction ID to delete

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_monthA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthNoMonth in YYYY-MM format, or natural language like "this month", "last month", "January 2025". Defaults to current month.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_summaryA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthNoMonth (YYYY-MM or natural language). Defaults to current month.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_categoriesA
Read-only

List all category groups with their categories and IDs. Useful for seeing the full budget structure.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_balanceB
Read-only

Get the balance and spending history for a specific category across one or more months.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthsNoNumber of months to look back (default 3)
categoryYesCategory name or ID

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_payeesA
Read-only

List all payees in the budget. Useful for seeing available payees and their IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_rulesA
Read-only

List all transaction rules showing their conditions and actions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_transactionsA
Read-only

List transactions with optional filters. Returns date, payee, category, amount, notes, account, and cleared status.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of transactions to return (default 50)
payeeNoPayee name to filter by (partial match)
accountNoAccount name or ID to filter by
categoryNoCategory name to filter by (partial match)
end_dateNoEnd date (YYYY-MM-DD or natural language). Defaults to today.
max_amountNoMaximum amount in human format
min_amountNoMinimum amount in human format (e.g., -500 for expenses of at least 500)
start_dateNoStart date (YYYY-MM-DD or natural language like "start of month", "30 days ago"). Defaults to start of current month.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_accountsA
Read-only

List all budget accounts with their current balances, type (on-budget/off-budget), and status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_summaryA
Read-only

Monthly financial summary showing income, expenses, savings, and savings rate across multiple months. Great for seeing trends in your overall financial health.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthsNoNumber of months to show (default 3)

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_transactionB
Idempotent

Change the category of an existing transaction.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryYesNew category name or ID
transaction_idYesTransaction ID

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate for the adjustment (YYYY-MM-DD or "today"). Defaults to today.
notesNoNote for the adjustment. Defaults to "FX residual adjustment".
payeeNoOptional payee for the adjustment
accountYesAccount name or ID to reconcile
categoryYesCategory to book the adjustment under (name or ID)
target_balanceNoBalance the bank reports for this account (human amount). Defaults to 0.

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_syncA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoAccount name or ID to sync. If omitted, syncs all linked accounts.

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_categoryA
Read-only

Break down spending by category for a date range. Shows each category's total spending and percentage of total.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of categories to show (default 20)
end_dateNoEnd date (YYYY-MM-DD or natural language). Defaults to today.
start_dateNoStart date (YYYY-MM-DD or natural language). Defaults to start of current month.
include_incomeNoInclude income categories (default: false)

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_projectionA
Read-only

Project end-of-month spending for each category based on the current daily spending rate. Warns about categories likely to exceed budget.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthNoMonth to project (YYYY-MM or natural language). Defaults to current month.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_amountA
Idempotent

Set the budgeted amount for a category in a specific month.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthNoMonth (YYYY-MM or natural language). Defaults to current month.
amountYesNew budgeted amount (human-readable, e.g., 5000.00)
categoryYesCategory name or ID

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_categoryA
Idempotent

Rename or hide/unhide a budget category.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name for the category
hiddenNoSet to true to hide, false to unhide
categoryYesCategory name or ID

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_groupA
Idempotent

Rename or hide/unhide a category group.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name for the group
groupYesCategory group name or ID
hiddenNoSet to true to hide, false to unhide

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_payeeB
Idempotent

Rename a payee.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNew name for the payee
payeeYesPayee name or ID

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_transactionA
Idempotent

Update fields of an existing transaction. Only the fields you provide will be changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoNew date (YYYY-MM-DD or "today", "yesterday")
notesNoNew notes
payeeNoNew payee name
amountNoNew amount (negative for expenses, positive for income). Human amounts, not cents.
clearedNoWhether the transaction is cleared
categoryNoNew category name or ID
transaction_idYesTransaction ID

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 3 tool updatesv0.7.1
    • Addedcreate_account
    • Addeddelete_account
    • Addedrepair_sync
  2. 34 tool updatesv0.6.1
    • First observedbalance_history
    • First observedbudget_vs_actual
    • First observedcategory_trends
    • First observedcreate_category
    • First observedcreate_category_group
    • First observedcreate_payee
    • First observedcreate_rule
    • First observedcreate_split_transaction
    • First observedcreate_transaction
    • First observedcreate_transfer
    • First observeddelete_category
    • First observeddelete_category_group
    • First observeddelete_payee
    • First observeddelete_rule
    • First observeddelete_transaction
    • First observedget_budget_month
    • First observedget_budget_summary
    • First observedget_categories
    • First observedget_category_balance
    • First observedget_payees
    • First observedget_rules
    • First observedget_transactions
    • First observedlist_accounts
    • First observedmonthly_summary
    • First observedrecategorize_transaction
    • First observedreconcile_currency_residual
    • First observedrun_bank_sync
    • First observedspending_by_category
    • First observedspending_projection
    • First observedupdate_budget_amount
    • First observedupdate_category
    • First observedupdate_category_group
    • First observedupdate_payee
    • First observedupdate_transaction

TDQS

B3.4/5.0
Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count2/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    MCP server for integrating Actual Budget with Claude and other LLM assistants.
    10
    185
    219
    TypeScript
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server that connects AI assistants to Actual Budget for budget management, enabling natural language queries, transaction creation, and spending analysis.
    1,671
    49
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    A personal MCP server that gives Claude native access to YNAB budget data.
    46
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    An 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

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