Skip to main content
Glama
akutishevsky

LunchMoney MCP Server

by akutishevsky

LunchMoney MCP Server

npm version npm downloads GitHub downloads license TypeScript MCP Badge

A Model Context Protocol (MCP) server implementation for LunchMoney, providing programmatic access to personal finance management through LunchMoney's API. Also available as an MCP Bundle (.mcpb) for easy installation in Claude Desktop.

Heads up — v3.0.0 removes get_all_crypto. The crypto tools now use LunchMoney's v2 crypto endpoints, which split manual and synced holdings into separate resources and offer no combined equivalent of v1's GET /crypto. Replace get_all_crypto with get_all_manual_crypto and get_all_synced_crypto, which together return everything it did and more. update_manual_crypto also drops its currency parameter. Nothing outside the crypto domain changed; if you don't use the crypto tools, upgrading from 2.x needs no action. See CHANGELOG.md. If you depend on get_all_crypto, pin @akutishevsky/lunchmoney-mcp@^2.2.0.

Heads up — v2.0.0 is a breaking release. This server now targets LunchMoney's v2 API (https://api.lunchmoney.dev/v2, currently in alpha). It is not backwards-compatible with v1.x of this server: tool names, fields, and endpoint shapes have changed (for example, assets is now manual_accounts, tags arrays are now tag_ids, transaction asset_id is now manual_account_id, the debit_as_negative toggle is gone, and the budget summary moved to a new /summary endpoint). See CHANGELOG.md for the full list. If you depend on v1.x, pin @akutishevsky/lunchmoney-mcp@^1.4.3.

Table of Contents

Related MCP server: Lunch Money MCP Server

Overview

This MCP server enables AI assistants and other MCP clients to interact with LunchMoney data, allowing for automated financial insights, transaction management, budgeting, and more.

Features

Comprehensive Tool Coverage

  • User Management - Access user account details

  • Categories - Full CRUD on categories and category groups

  • Tags - Full CRUD for transaction tags

  • Transactions - Full CRUD with advanced filtering, bulk update, bulk delete, splits, groups, and file attachments

  • Recurring Items - Track and manage recurring expenses, including system-suggested items

  • Budgets - Per-period budget summary, account-wide budget settings, upsert, and delete

  • Manual Accounts - Full CRUD for manually-managed accounts (formerly known as "assets")

  • Plaid Accounts - List, retrieve, and trigger sync of connected bank accounts

  • Cryptocurrency - Full CRUD for manual crypto balances, read and refresh synced crypto accounts, and manage the supported-cryptocurrency list

  • Balance History - Read, upsert, and delete monthly balance history for manual, Plaid, crypto, and deleted accounts

Key Capabilities

  • Full integration with LunchMoney API v2 (alpha)

  • Type-safe implementation with TypeScript and Zod validation

  • Token-efficient responses using TOON encoding instead of JSON, reducing token usage in AI conversations

  • Modular architecture for easy extension

  • Standard MCP server implementation using stdio transport

Usage

Installation Options

The easiest way to install this server is as an MCP Bundle in Claude Desktop:

  1. Download the latest .mcpb file from the releases page

  2. Open Claude Desktop and go to Extensions

  3. Click "Install Extension" and select the downloaded .mcpb file

  4. Enter your LunchMoney API token when prompted (get it from LunchMoney Developer Settings)

  5. The LunchMoney tools will be immediately available

Add the LunchMoney MCP server to Claude Code:

claude mcp add lunchmoney --transport stdio -e LUNCHMONEY_API_TOKEN=your-api-token-here -- npx -y @akutishevsky/lunchmoney-mcp

To enable debug logging:

claude mcp add lunchmoney --transport stdio -e LUNCHMONEY_API_TOKEN=your-api-token-here -e LUNCHMONEY_DEBUG=true -- npx -y @akutishevsky/lunchmoney-mcp

Verify the server was added:

claude mcp list
claude mcp get lunchmoney

Add the LunchMoney MCP server to Codex:

codex mcp add lunchmoney --env LUNCHMONEY_API_TOKEN=your-api-token-here -- npx -y @akutishevsky/lunchmoney-mcp

To enable debug logging:

codex mcp add lunchmoney --env LUNCHMONEY_API_TOKEN=your-api-token-here --env LUNCHMONEY_DEBUG=true -- npx -y @akutishevsky/lunchmoney-mcp

Verify the server was added:

codex mcp list
codex mcp get lunchmoney

To use this MCP server with any MCP-compatible client (such as Claude Desktop), you need to add it to the client's configuration.

Configuration

The server can be configured in your MCP client's configuration file. The exact location and format may vary by client, but typically follows this pattern:

{
    "mcpServers": {
        "lunchmoney": {
            "command": "npx",
            "args": ["@akutishevsky/lunchmoney-mcp"],
            "env": {
                "LUNCHMONEY_API_TOKEN": "your-api-token-here",
                "LUNCHMONEY_DEBUG": "true"
            }
        }
    }
}

Note: LUNCHMONEY_DEBUG is optional. Set it to "true" to enable debug logging of API requests and responses to stderr. Useful for troubleshooting.

Note: LUNCHMONEY_ATTACHMENTS_DIR is optional. attach_file_to_transaction is the only tool that reads from your filesystem, and it always verifies that a file really is a JPEG, PNG, HEIC, HEIF, or PDF before uploading it. Set this variable to a directory (say, a ~/Receipts folder) to additionally restrict it to files inside that directory — .. and symlinks that point outside are rejected. Leave it unset and any path the server can read is fair game, which is usually fine for a local stdio server but not for remote deployments.

Replace "your-api-token-here" with your actual LunchMoney API token from LunchMoney Developer Settings.

Common MCP Client Configuration Locations

Different MCP clients store their configuration in different locations:

  • Claude Desktop:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

    • Linux: ~/.config/Claude/claude_desktop_config.json

  • Other MCP Clients: Check your client's documentation for the configuration file location.

Setup Steps
  1. Locate your MCP client's configuration file (create it if it doesn't exist).

  2. Add the LunchMoney server configuration to the mcpServers section.

  3. Save the file and restart your MCP client.

  4. The LunchMoney tools should now be available in your client.

Requirements
  • Node.js 16+ installed on your system

  • npx available in your system PATH

  • Valid LunchMoney API token with appropriate permissions

Standalone Server

# Run with npx
LUNCHMONEY_API_TOKEN="your-api-token" npx @akutishevsky/lunchmoney-mcp

Remote Deployments

The bundled stdio binary covers desktop MCP clients, but Claude on mobile and the custom connectors feature in claude.ai only speak HTTP. There are two ways to expose this server remotely.

Turnkey: Cloudflare Workers

lunchmoney-mcp-cloudflare wraps this package as a Cloudflare Worker with Google sign-in and an email allowlist in front of the MCP endpoint. The whole stack fits inside Cloudflare's and Google Cloud's free tiers, and a setup.sh wizard handles KV creation, OAuth client setup, secrets, and deploy in one walkthrough. Each authenticated user runs in their own Durable Object, so the config singleton stays per-user.

Self-hosted: HTTP transport on your own host

For a single-user deployment, wire createServer() into StreamableHTTPServerTransport and serve it from any Node HTTP framework. Example with Express:

import express from "express";
import { createServer } from "@akutishevsky/lunchmoney-mcp/server";
import { initializeConfig } from "@akutishevsky/lunchmoney-mcp/config";
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";

initializeConfig(process.env.LUNCHMONEY_API_TOKEN!);
const server = createServer("1.0.0");

const transport = new StreamableHTTPServerTransport({
    sessionIdGenerator: () => crypto.randomUUID(),
});
await server.connect(transport);

const app = express();
app.use(express.json());
app.all("/mcp", (req, res) => transport.handleRequest(req, res, req.body));
app.listen(3000);

Swap Express for Hono (via @hono/node-server) or Fastify if you prefer — the transport only needs Node's IncomingMessage and ServerResponse. Add your own auth in front of /mcp — the package ships no transport-level auth.

Set LUNCHMONEY_ATTACHMENTS_DIR on any remote deployment. attach_file_to_transaction reads a path supplied by the caller off the host's filesystem. On a desktop stdio server the caller and the file owner are the same person, so that is unremarkable. Once the server is reachable over HTTP they are different principals, and an unconfined read is a way for a remote caller — or a prompt-injected model — to pull files off your host. Point the variable at a dedicated directory and keep nothing else in it. The content-type check (only real JPEG/PNG/HEIC/HEIF/PDF files upload) applies either way, but it is a backstop, not a substitute.

Multi-tenant warning. This pattern serves one user from one process with one shared API token. To serve multiple users from a single Node process you'd hit the single-tenant config singleton; fork the process per user or use the Cloudflare option above (each user gets their own isolate).

Example Prompts

Here are some example prompts you can use with the LunchMoney MCP server:

Account Overview

  • "Show me my LunchMoney account details"

  • "What's my current account status?"

Category Management

  • "List all my spending categories"

  • "Create a new category called 'Subscriptions' with a monthly budget of $100"

  • "Show me details for my 'Food & Dining' category"

  • "Create a category group for all my entertainment expenses"

  • "Delete the 'Unused Category' and reassign its transactions to 'Miscellaneous'"

Transaction Management

  • "Show me all transactions from last month"

  • "Find all transactions over $100 in the past week"

  • "Create a new expense for $45.99 at Amazon in the Shopping category"

  • "Update transaction #12345 to change the amount to $50"

  • "Show me all pending transactions"

  • "Group these coffee shop transactions together"

Budgeting

  • "Show me my budget summary for this month"

  • "Set a budget of $500 for Groceries this month"

  • "Remove the budget for Entertainment category"

  • "How much have I spent vs budgeted in each category?"

Manual Account Tracking

  • "List all my manual accounts"

  • "Create a new manual account for my savings account with a balance of $10,000"

  • "Update my investment account balance to $25,000"

  • "Close my old credit card account"

Recurring Expenses

  • "Show me all my recurring expenses"

  • "What subscriptions do I have?"

  • "List recurring items for the next 3 months"

Banking Integration

  • "Show me all my connected Plaid accounts"

  • "Refresh my bank account data"

  • "Trigger a sync for my checking account"

Cryptocurrency

  • "Show me all my crypto holdings"

  • "Update my Bitcoin balance to 0.5 BTC"

  • "List all my manually tracked crypto assets"

  • "Add a cold wallet holding 0.85 BTC called Ledger Cold Storage"

  • "Refresh my Coinbase account and show the updated balances"

  • "Which cryptocurrencies can I track manually?"

Net Worth & Balance History

  • "Show me how my net worth changed over the last 12 months"

  • "What was my savings account balance in March 2026?"

  • "Set my car's value to $18,000 for June 2026"

  • "Clear the balance history for my old brokerage account"

Analysis & Insights

  • "What are my top spending categories this month?"

  • "Show me all transactions tagged as 'vacation'"

  • "Find all transactions at coffee shops"

  • "List all transactions that need to be categorized"

Available Tools

User Tools

  • get_user - Retrieve current user details

Category Tools

  • get_all_categories - List all categories (supports format and is_group filters)

  • get_single_category - Get details for a specific category or category group

  • create_category - Create a category or category group (set is_group=true plus children)

  • update_category - Update properties; replaces the children list on category groups

  • delete_category - Delete a category; pass force=true to override dependency check

Tag Tools

  • get_all_tags - List all tags

  • get_single_tag - Get a tag by ID

  • create_tag - Create a new tag

  • update_tag - Update tag properties

  • delete_tag - Delete a tag (with force to override dependents)

Transaction Tools

  • get_transactions - List transactions with extensive filtering options (date range, account, category, tag, status, pending, metadata, files, etc)

  • get_single_transaction - Get full transaction details (always includes plaid_metadata, custom_metadata, files, and children for split/group parents)

  • create_transactions - Insert 1–500 transactions in one call

  • update_transaction - Partial update of one transaction

  • delete_transaction - Delete one transaction (cannot be split/group)

  • update_transactions_bulk - Bulk update 1–500 transactions

  • delete_transactions_bulk - Bulk delete 1–500 transactions by ID

  • create_transaction_group - Create a transaction group from existing transactions

  • delete_transaction_group - Ungroup a transaction group

  • split_transaction - Split a transaction into 2–500 children

  • unsplit_transaction - Undo a previous split

  • attach_file_to_transaction - Upload a local file (jpeg/png/heic/heif/pdf, ≤10MB), type verified from its contents

  • get_transaction_attachment_url - Get a signed download URL for a file attachment

  • delete_transaction_attachment - Delete a file attachment

Recurring Items Tools

  • get_recurring_items - List recurring items for a date range (include_suggested for system suggestions)

  • get_single_recurring_item - Get a recurring item by ID

Budget Tools

  • get_budget_summary - Per-category budget summary (backed by /summary); supports occurrences, totals, rollover-pool toggles

  • get_budget_settings - Account-wide budget period and display settings

  • upsert_budget - Create or update a budget for a category and period

  • remove_budget - Remove a budget for a category and period

Manual Account Tools

  • get_all_manual_accounts - List all manually-managed accounts (formerly "assets")

  • get_single_manual_account - Get a manual account by ID

  • create_manual_account - Create a new manually-managed account

  • update_manual_account - Update properties of a manual account

  • delete_manual_account - Delete a manual account; optionally also delete its transactions / balance history

Plaid Account Tools

  • get_all_plaid_accounts - List all connected Plaid accounts

  • get_single_plaid_account - Get a Plaid account by ID

  • trigger_plaid_fetch - Trigger fetch of latest data from Plaid (optionally scoped to a date range or account)

Crypto Tools

  • get_supported_cryptocurrencies - List the cryptocurrencies supported for manual tracking

  • add_supported_cryptocurrency - Add a cryptocurrency to the supported list from its CoinGecko coin-page URL

  • get_all_manual_crypto - List all manually-managed crypto balances

  • get_single_manual_crypto - Get a single manually-managed crypto balance by ID

  • create_manual_crypto - Create a manually-managed crypto asset

  • update_manual_crypto - Update a manual crypto balance's name, display name, institution name, or balance

  • delete_manual_crypto - Delete a manual crypto asset (irreversible)

  • get_all_synced_crypto - List synced crypto accounts and their nested per-symbol balances

  • get_single_synced_crypto - Get a single synced crypto account by ID

  • get_synced_crypto_balance - Get one balance inside a synced crypto account by symbol

  • refresh_synced_crypto - Trigger a balance refresh for a synced crypto account

Balance History Tools

  • get_balance_history - Get monthly balance history across all accounts (powers the Net Worth views); optional start_month/end_month (YYYY-MM) range filter

  • get_account_balance_history - Get monthly balance history for one account (manual, plaid, crypto_manual, or deleted)

  • upsert_account_balance_history - Create or update monthly balance entries for one account (past months only; all-or-nothing)

  • delete_account_balance_history - Delete all historical balance entries for one account

  • get_crypto_synced_balance_history - Get monthly balance history for a synced crypto holding by account id + ticker symbol

  • upsert_crypto_synced_balance_history - Create or update monthly balance entries for a synced crypto holding

  • delete_crypto_synced_balance_history - Delete all historical balance entries for a synced crypto holding

  • delete_balance_history_entry - Delete a single historical balance entry by id

  • update_deleted_account_details - Update the display details (name, institution, type, subtype, mask) shown for a deleted account's balance history

Development

Project Structure

lunchmoney-mcp/
├── src/
│   ├── index.ts           # Server entry point
│   ├── config.ts          # Configuration management
│   ├── types.ts           # TypeScript type definitions
│   └── tools/             # Tool implementations
│       ├── user.ts
│       ├── categories.ts
│       ├── tags.ts
│       ├── transactions.ts
│       ├── recurring-items.ts
│       ├── budgets.ts
│       ├── manual-accounts.ts
│       ├── plaid-accounts.ts
│       ├── crypto.ts
│       └── balance-history.ts
├── build/                 # Compiled JavaScript output
├── package.json
├── tsconfig.json
└── README.md

Building

# Build the MCP server
npm run build

# Build MCPB package for distribution
npm run build:mcpb

Adding New Tools

  1. Create a new file in src/tools/

  2. Implement tool handlers using the MCP SDK

  3. Register tools in src/index.ts

  4. Add types to src/types.ts if needed

Embedding as a library

The package exposes subpath entry points so it can be embedded in a custom transport (for example, a Cloudflare Worker that serves the MCP protocol over HTTP) rather than only the bundled stdio binary:

import { createServer } from "@akutishevsky/lunchmoney-mcp/server";
import { initializeConfig } from "@akutishevsky/lunchmoney-mcp/config";

initializeConfig(process.env.LUNCHMONEY_API_TOKEN!);
const server = createServer("1.0.0");
// connect `server` to whatever transport you need

initializeConfig must be called before any tool is invoked, or the first request throws "Configuration not initialized.".

Single-tenant assumption. The config is held in a module-level singleton. That is safe on per-isolate runtimes — each user gets their own isolate, so there is no shared mutable state to race on. It is not safe on shared-process multi-tenant Node hosts (e.g. one Express or Hono process serving multiple users): concurrent initializeConfig calls would race and leak tokens between requests. Those consumers need to fork per-user or refactor the singleton before exposing the package.

API Reference

The server implements the full LunchMoney API v2. For detailed API documentation, see:

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT License

Available Tools

59 tools
add_supported_cryptocurrencyA

Add a new cryptocurrency to the supported manual-crypto list by submitting its CoinGecko coin-page URL. Only needed when get_supported_cryptocurrencies does not already list the symbol you want to track.

ParametersJSON Schema
NameRequiredDescriptionDefault
coingecko_urlYesCoinGecko coin-page URL in the form https://www.coingecko.com/{locale}/coins/{id}, e.g. https://www.coingecko.com/en/coins/cardano.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds context beyond the minimal idempotentHint annotation by identifying the resource as the 'supported manual-crypto list' and the input as a CoinGecko URL. However, it does not disclose what happens on duplicate submission or invalid URLs, so behavioral transparency is moderate.

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 consists of two sentences, is front-loaded with the primary action, and contains no unnecessary details. Every word contributes to understanding the tool's purpose and usage.

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 single-parameter mutation with no output schema, the description sufficiently explains the operation and its use condition. It does not describe the response or error behavior, but the overall context is adequate for a tool of this 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?

The input schema provides a complete description of the coingecko_url parameter, including the URL format and an example, so the tool description adds no extra semantic value beyond repeating that it is a CoinGecko URL. Since schema coverage is 100%, the 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 action ('Add a new cryptocurrency to the supported manual-crypto list') and the method ('by submitting its CoinGecko coin-page URL'). It also distinguishes the tool from the sibling get_supported_cryptocurrencies by specifying when it is needed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides a usage condition: 'Only needed when get_supported_cryptocurrencies does not already list the symbol you want to track.' This names the alternative tool and gives clear guidance on when to use this one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

attach_file_to_transactionA

Attach a local image or PDF receipt (max 10MB) to a transaction. Allowed types: image/jpeg, image/png, image/heic, image/heif, application/pdf. The file is read from the local filesystem of the host running this MCP server, and its type is determined from its actual contents — files that are not a real image or PDF are rejected. If LUNCHMONEY_ATTACHMENTS_DIR is set on the host, only files inside that directory can be attached.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoOptional notes describing the attachment.
file_pathYesAbsolute or relative path to the receipt file on the local filesystem. Must be a regular file whose contents are a JPEG, PNG, HEIC, HEIF, or PDF. If the host sets LUNCHMONEY_ATTACHMENTS_DIR, the path must resolve inside that directory.
content_typeNoOptional assertion of the file's MIME type. The server always determines the real type from the file contents; if this disagrees with it, the request is rejected. Omit unless you need that check.
transaction_idYesID of the transaction to attach the file to.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses important behavioral details beyond the minimal annotations: reads from the host's local filesystem, determines type by content, rejects non-image/PDF files, enforces a 10MB limit, and honors the LUNCHMONEY_ATTACHMENTS_DIR restriction. This goes beyond what the idempotentHint: false annotation conveys and prepares the agent for validation errors and environment-specific behavior.

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 three sentences with no wasted words. The first sentence states the core purpose, the second lists allowed types, and the third covers constraints (filesystem, content detection, and directory restriction). Every sentence contributes valuable 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 thoroughly covers the tool's constraints and environmental dependencies. However, since there is no output schema, it would be beneficial to state what the tool returns upon success (e.g., an attachment object or ID). Despite this minor gap, the description is sufficient for an agent to select and invoke the tool correctly.

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 descriptions cover all four parameters fully, but the tool description adds extra meaning not present in the schema: the 10MB capacity constraint and the rule that the type is determined from actual contents (which affects file_path and content_type semantics). This provides useful selection and invocation context 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 uses a specific verb ('Attach') and clearly identifies the resource ('a local image or PDF receipt to a transaction'). It is unambiguous and easily distinguishes this tool from siblings like 'get_transaction_attachment_url' and 'delete_transaction_attachment' based on the action it performs.

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 attaching receipts but does not explicitly state when to use this tool over alternatives or provide exclusions. Sibling tools for getting/deleting attachments exist, but the description does not mention them or give conditions for choosing this tool, so guidance is only implied.

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 category or a category group. Set is_group=true to create a category group; supply children as an array of existing category IDs and/or strings (names of new sub-categories to create).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the category. 1-100 characters.
archivedNoWhether the category should be archived.
childrenNoOnly valid when is_group is true. Array of existing category IDs (numbers) and/or names of new sub-categories to create (strings).
group_idNoIf set, assigns the new category to an existing category group. Cannot be set if is_group is true.
is_groupNoIf true, creates a category group instead of a category. When true, group_id may not be set; use children to assign existing categories.
is_incomeNoWhether transactions in this category should be treated as income.
descriptionNoOptional description. Up to 200 characters.
exclude_from_budgetNoWhether transactions in this category should be excluded from budgets.
exclude_from_totalsNoWhether transactions in this category should be excluded from calculated totals.

TDQS

A4.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only provide `idempotentHint: false`, but the description does not elaborate on behavioral traits like side effects, state changes, or error conditions. It explains the `children` mechanism but offers no transparency beyond what the schema implies.

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 that efficiently covers the core functionality and key conditional rules, with no extraneous 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 covers the main decision points (category vs group) given the tool's complexity and absence of output schema. However, it does not mention return values, error scenarios, or validation conflicts (e.g., setting both `is_group` and `group_id`).

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?

Although schema coverage is 100%, the description adds significant value by explaining the conditional logic between `is_group`, `group_id`, and `children`. It clarifies that `children` can be existing IDs or new names, which is not evident from individual parameter descriptions.

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 creates a new 'category' or 'category group', with specific guidance on using `is_group`. It distinguishes the two modes and mentions `children` for groups, effectively differentiating from sibling tools like `update_category` or `get_single_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?

The description provides clear guidance on when to use `is_group=true` vs `false`, and that `children` is only valid for groups. However, it lacks explicit when-not or alternative tool recommendations (e.g., using `get_all_categories` to check existing groups).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_manual_accountB

Create a new manually-managed account. (Formerly create_asset.)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the account. 1-45 characters.
typeYesPrimary type of the manual account.
balanceYesCurrent balance of the account.
subtypeNoOptional subtype (e.g., retirement, checking, savings).
currencyNoThree-letter lowercase currency code (defaults to primary currency).
closed_onNoDate the account was closed (YYYY-MM-DD). If set, status is forced to closed.
display_nameNoDisplay name. If unset, derived from institution_name and name.
balance_as_ofNoDate or datetime the balance is as of (ISO 8601).
institution_nameNoName of the institution holding the account.
exclude_from_transactionsNoIf true, transactions cannot be assigned to this account.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide only idempotentHint: false. Description lacks details about side effects, permissions, limits, or the nature of 'manually-managed'. It does not clarify behavior beyond creation.

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: one sentence plus a parentheses. It is front-loaded with the essential purpose and a rename note. Every word is earned.

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?

With 10 parameters, no output schema, and minimal description, the tool lacks return value details, field dependencies (e.g., balance_as_of with balance), and does not differentiate from the update sibling.

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 each parameter described. The description adds no extra meaning beyond the schema, so it meets the 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 clearly states the action ('Create') and the resource ('manually-managed account'), with a note about legacy naming. It distinguishes from sibling tools like update_manual_account and delete_manual_account.

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. It does not mention prerequisites, when not to use, or conditions for use. The description simply states the action without context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_manual_cryptoA

Create a manually-managed crypto asset. The symbol must match one returned by get_supported_cryptocurrencies.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesUser-defined name for the manual crypto asset, e.g. 'Cold Wallet BTC'.
symbolYesCryptocurrency symbol to track, e.g. 'btc'. Must match a symbol from get_supported_cryptocurrencies.
balanceYesBalance as a numeric string with up to 18 decimal places, e.g. '0.852341920145782301'. Pass a string to avoid losing precision.
display_nameNoOptional display name. If omitted, clients may derive one from institution_name and name.
institution_nameNoOptional institution or wallet provider display name, e.g. 'Ledger'.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only include idempotentHint: false, which covers non-idempotency. The description contributes a behavioral constraint (symbol must match supported currencies) but does not disclose other side effects, permissions, or return behavior. There is 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 short sentences, each earning its place: the first states the action and resource, the second adds an indispensable prerequisite. No 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?

For a create tool with 5 parameters and no output schema, the description provides the core purpose and a key prerequisite, but it omits information about return values, duplicate behavior, or what 'manually-managed' implies relative to synced assets. The schema covers parameters, but high-level behavioral completeness is only 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%, so each parameter already has a detailed description. The tool description adds no new parameter-level semantics beyond repeating the symbol constraint already present in the schema. Baseline 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 uses a specific verb ('Create') and resource ('a manually-managed crypto asset'), clearly distinguishing it from sibling tools like create_manual_account or synced crypto tools. The added constraint about symbol matching supported cryptocurrencies further clarifies its scope.

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?

It clearly indicates the action (creating a manual crypto asset) and provides a key prerequisite (symbol must come from get_supported_cryptocurrencies). However, it does not explicitly mention when to use this over alternatives like synced crypto creation, nor does it specify any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_tagA

Create a new tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the tag. 1-100 characters.
archivedNoIf true, the tag is created archived.
text_colorNoOptional text color of the tag.
descriptionNoOptional description. Up to 200 characters.
background_colorNoOptional background color of the tag.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-idempotent behavior, so the description adds no new behavioral context. No mention of error conditions, uniqueness, or side effects beyond creation.

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 with no extraneous words. Efficient and front-loaded.

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 creation tool with no output schema, the description could mention return value or uniqueness constraints. Current description is adequate but not 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 covers 100% of parameters with descriptions, so the description does not add extra meaning. Baseline 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 'Create a new tag.' clearly specifies the verb (create) and resource (tag), and it distinguishes from sibling tools like 'update_tag' and 'delete_tag'.

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 over alternatives (e.g., update_tag) or when not to use it. The description is too minimal to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_transaction_groupA

Create a transaction group from 2-500 existing transactions. Source transactions are hidden from get_transactions and accessible via the new group's children (set include_children=true on get_single_transaction). Cannot include split or recurring transactions.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesIDs of existing transactions to group together.
dateYesDate for the new grouped transaction (YYYY-MM-DD).
notesNo
payeeYesPayee for the new grouped transaction.
statusNoStatus for the new grouped transaction. Defaults to reviewed.
tag_idsNoTag IDs to apply to the new group.
category_idNoCategory for the group. If unset and all children share a category, the group inherits it.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reveals that source transactions become hidden from get_transactions and are accessible via the group's children, which is a behavioral side effect not captured by annotations or schema. It also states restrictions on split/recurring transactions, adding significant transparency.

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 well-structured sentences: first defines core purpose, second explains behavioral effect, third states restrictions. No unnecessary words, each sentence 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?

The description covers key behavioral aspects and restrictions. While it lacks return value details and error scenarios, the absence of an output schema and the complexity of the tool make this acceptable. It is adequately complete for an agent.

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?

With 86% schema coverage, the description adds value beyond the schema by explaining constraints for ids (2-500, no split/recurring) and inheritance behavior for category_id. It does not repeat schema details but enhances understanding.

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) and resource (transaction group) with specific constraints (2-500 existing transactions). It effectively distinguishes from sibling tools like create_transactions and delete_transaction_group.

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?

It provides clear context on when to use (grouping existing transactions) and restrictions (cannot include split or recurring). It also explains how to access the group's children, but lacks explicit alternatives for when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_transactionsA

Insert one or more transactions (1-500 per call). Returns inserted transactions plus any skipped duplicates.

ParametersJSON Schema
NameRequiredDescriptionDefault
apply_rulesNoApply rules associated with the transaction's manual_account_id.
transactionsYesArray of transactions to insert (1-500).
skip_duplicatesNoFlag transactions that match an existing transaction's date+payee+amount+account as duplicates and skip them. Note: external_id deduplication always runs regardless of this flag.
skip_balance_updateNoIf true, do not update the manual account's balance when inserting these transactions.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds value beyond the annotations by stating the batch limit and return behavior (including duplicates). Although the annotation indicates non-idempotency (idempotentHint=false), the description doesn't contradict it. It could further detail side effects like partial failures, but overall it provides useful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that communicates the core functionality and key constraints without unnecessary words.

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 batch creation tool with multiple behavioral options and no output schema, the description covers the basic return and limit but omits error handling, partial success scenarios, and a more detailed explanation of duplicate detection (e.g., external_id deduplication). It is adequate but not fully 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 coverage is 100% with detailed parameter descriptions, so the description adds minimal new semantic meaning beyond the bulk limit and deduplication note. Baseline score of 3 is appropriate as the description doesn't significantly enhance understanding of the 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 the verb 'Insert', the resource 'transactions', and specifies the batch size range (1-500). It also mentions the return value includes inserted transactions and skipped duplicates, distinguishing it from the singular 'create_transaction' sibling.

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 does not explicitly guide when to use this tool versus alternatives like 'create_transaction' for single inserts, nor does it provide context on when to set parameters like apply_rules or skip_balance_update. Usage is implied but not fully clarified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_account_balance_historyA
Destructive

Delete ALL historical balance entries for a single account. This is irreversible and affects the Net Worth views. To remove a single month, use delete_balance_history_entry instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesId of the account whose entire balance history should be deleted.
account_typeYesType of account the balance history belongs to. Use manual for manually-managed accounts, plaid for synced bank accounts, crypto_manual for manually-managed crypto, and deleted for accounts that no longer exist but still have history. Synced crypto uses the dedicated crypto_synced tools instead.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description adds that the operation is 'irreversible' and 'affects the Net Worth views,' giving valuable behavioral context. There is no contradiction with annotations; in fact, it reinforces them.

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-loaded with the action and scope ('Delete ALL historical balance entries'), and immediately points to an alternative. Every word 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?

Given the simple delete operation, full schema coverage, and the destructiveHint annotation, the description covers scope, irreversibility, and impact on Net Worth. It does not mention the response format, but with no output schema and a straightforward mutation, this is a minor gap.

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 full descriptions for both parameters with 100% coverage, so the baseline is 3. The description adds the phrase 'single account' but does not provide any new parameter-specific details beyond what the schema already offers.

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') with specific resource ('ALL historical balance entries') and scope ('for a single account'), and explicitly contrasts with the sibling tool by saying 'To remove a single month, use delete_balance_history_entry instead.' This distinguishes the tool from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance by naming the alternative for partial deletion: 'To remove a single month, use delete_balance_history_entry instead.' Also notes the irreversible impact on Net Worth views, helping the agent decide when to invoke this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_balance_history_entryA
Destructive

Delete a single historical balance entry by its id. The id must come from an entry with type=historical in a balance history response; ephemeral current entries have no id and cannot be deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
entry_idYesId of the historical balance entry to delete. Call get_balance_history or get_account_balance_history first to discover ids.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With destructiveHint=true already present in annotations, the description adds useful context by explaining the historical/current distinction and the requirement for an id. It does not contradict the destructive hint and provides additional behavioral constraints beyond what annotations state.

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 the action front-loaded. It conveys all necessary information without any redundant or irrelevant content.

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 one-parameter destructive tool with no output schema, the description is complete. It explains the exact source of the id and the constraint that current entries cannot be deleted, which is sufficient for the agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the entry_id parameter is already fully described in the schema, including where to find ids. The main description reinforces the historical type constraint but does not add significant new meaning beyond what the schema already provides.

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'), the resource ('a single historical balance entry'), and the method ('by its id'). It also distinguishes from sibling tools like delete_account_balance_history by specifying 'historical balance entry' and 'single'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: the id must come from an entry with type=historical in a balance history response. It also provides a when-not ('ephemeral current entries have no id and cannot be deleted') and directs the user to call get_balance_history or get_account_balance_history first to discover ids, which is a clear prerequisite.

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 single category or category group. By default fails (HTTP 422) if dependencies exist, returning a structured dependents payload. Set force=true to delete and disassociate from all related budgets, transactions, recurring items, etc. Force delete is irreversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoIf true, force deletion even if dependencies exist (irreversible).
category_idYesId of the category or category group to delete.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark it as destructive. The description adds crucial details: default failure with structured 'dependents' payload, force delete is irreversible, and disassociation from related entities. 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?

Three concise sentences. First states the primary action, then the two behavioral modes. No redundant information.

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?

Given two simple parameters, no output schema, and the destructive annotation, the description covers all necessary points: action, default behavior, force behavior, and irreversibility. It's complete for the tool's complexity.

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 already covers both parameters with descriptions. The description enriches 'force' by explaining its effect (disassociate from related budgets, transactions, etc.), adding value 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 specifies the exact action ('Delete a single category or category group') and distinguishes between two modes (default fails with dependencies, force=true deletes). This clearly differentiates it from sibling tools like delete_tag or delete_manual_account.

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 explains when to use the default behavior (fails if dependencies) and when to use force=true (to delete despite dependencies). It does not explicitly compare to alternatives but provides clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_crypto_synced_balance_historyA
Destructive

Delete ALL historical balance entries for a synced crypto holding. This is irreversible and affects the Net Worth views.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesTicker symbol of the holding whose history should be deleted (e.g. eth).
account_idYesId of the synced crypto account.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds that deletion is irreversible and impacts Net Worth views, which goes beyond the destructiveHint annotation by specifying consequences. It also underscores the scope ('ALL'), providing valuable behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the action, no filler. Each sentence adds critical 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?

For a destructive bulk delete with clear annotations and complete schema, the description covers the essential behavior and consequences. It lacks explicit mention of return values, but that's acceptable for a delete tool without an output schema.

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?

All parameters are documented in the schema with meaningful descriptions (e.g., symbol as ticker, account_id as synced crypto account). The description does not add additional parameter-level detail, and with 100% schema coverage, the 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 uses the specific verb 'Delete' with the resource 'ALL historical balance entries for a synced crypto holding,' clearly differentiating it from siblings like delete_balance_history_entry by emphasizing 'ALL' and 'synced crypto holding.'

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 context (irreversible, affects Net Worth) but does not explicitly state when to use this tool over alternatives like delete_balance_history_entry or delete_account_balance_history. Usage must be inferred from the name and scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_manual_accountA
Destructive

Delete a manually-managed account. Optionally also delete its transactions/rules/recurring items, and/or its balance history. Both deletion options are irreversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountIdYesId of the manual account to delete.
delete_itemsNoIf true, also deletes any transactions, rules, and recurring items associated with this account.
delete_balance_historyNoIf true, also deletes any balance history associated with this account.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide destructiveHint=true. The description adds that both deletion options are irreversible, reinforcing the destructive nature. No additional behavioral details (e.g., permissions, side effects) are needed given 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 sentences convey purpose, optionality, and irreversibility with zero waste. The information is front-loaded and every word 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 destructive tool with no output schema and full schema coverage, the description is complete enough. It does not explain return values or error states, but the user can infer behavior from the annotations and schema. Adequate for the 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%, so the schema describes parameters fully. The description restates the optional effects (delete_items, delete_balance_history) but adds no new semantics beyond the schema, earning 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 'delete' and resource 'manually-managed account', distinguishing it from sibling delete tools targeting different resources (e.g., delete_category, delete_transaction). It specifies optional deletion of related items, leaving no ambiguity.

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 explains when to use the optional parameters (delete_items, delete_balance_history) by naming the associated data. It does not explicitly exclude cases when not to use the tool, but the resource specificity makes usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_manual_cryptoA
Destructive

Delete a manually-managed crypto asset. If the asset has balance history, keep_history must be set explicitly or the API rejects the request. Irreversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
crypto_idYesId of the manual crypto balance to delete.
keep_historyNoSet true to preserve the balance history, false to delete it too. Required if the asset has balance history.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description adds that deletion is irreversible and that the API rejects requests if keep_history is not set when balance history exists. This provides important behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences that lead with the action and quickly cover critical caveats; no fluff.

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 delete tool with destructiveHint and no output schema, the description covers the core behavior, the key conditional requirement, and irreversibility. It is sufficient for an agent to invoke 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?

Schema descriptions cover both parameters fully. The description repeats the keep_history condition but does not add 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 uses a specific verb+resource ('Delete a manually-managed crypto asset'), clearly distinguishing it from other delete tools for transactions, categories, accounts, etc.

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 manually-managed crypto balances but does not explicitly state when to use this tool versus alternatives like delete_manual_account or deletion of synced crypto. It provides a conditional prerequisite about keep_history but no guidance on tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_tagA
Destructive

Delete a tag. By default fails (HTTP 422) with a structured dependents payload if the tag is in use by transactions or rules. Set force=true to delete and disassociate from those records.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoIf true, force deletion even if dependencies exist (irreversible).
tagIdYesId of the tag to delete.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, indicating the tool is destructive. The description adds value by explaining the default failure behavior (HTTP 422 with dependents payload) and the effect of force=true (delete and disassociate). It does not specify if the operation is reversible, but the schema param force description calls it 'irreversible'. Overall, it provides useful behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences. It front-loads the primary action ('Delete a tag') and then provides essential details about default behavior and the force option. Every part is informative with no 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?

Given the tool's simplicity (delete with optional force) and the presence of schema descriptions for both parameters, the description covers the main behavioral aspects: default failure condition and force behavior. There is no output schema, but for a delete tool, return values are often standard (e.g., success/error) and may not need elaborate description. The description is sufficiently complete for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

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 meaning by explaining the effect of the force parameter: 'Set force=true to delete and disassociate from those records.' This clarifies the consequence beyond the schema's 'irreversible' label. The tagId parameter is clear from the schema. The description adds moderate 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 clearly states 'Delete a tag' with specific verb and resource. It distinguishes itself from sibling delete tools like delete_category, delete_manual_account, etc., by naming the resource 'tag'. The additional details about default failure and force option further clarify the tool's purpose.

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 explains when to use force=true versus the default behavior. It describes that by default, deletion fails with a dependents payload if the tag is in use, and force=true disassociates the tag. However, it does not explicitly mention when not to use the tool or suggest alternative tools, though for a delete operation the use case is self-evident.

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 single transaction. Fails for split/group transactions and their parents — unsplit/ungroup first. Irreversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
transaction_idYesID of the transaction to delete.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Combined with annotations (destructiveHint: true), the description adds 'Irreversible' and failure conditions for split/group transactions. While not exhaustive (e.g., no mention of cascading effects on attachments), it provides sufficient behavioral context for safe invocation.

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?

Extremely concise with three sentences: main action, failure case with remedy, and irreversibility. No wasted words, all essential information front-loaded.

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 deletion tool with one parameter, no output schema, and annotations present, the description covers purpose, failure scenarios, and permanence. It is complete for the complexity level.

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 description does not add meaning beyond the schema's parameter description ('ID of the transaction to delete'). Baseline of 3 is appropriate as the schema already documents the parameter adequately.

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 'Delete a single transaction', specifying the action and resource. It also provides constraints about split/group transactions, distinguishing it from siblings like delete_transactions_bulk and delete_transaction_group.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when the tool fails ('Fails for split/group transactions and their parents') and provides an alternative action ('unsplit/ungroup first'), offering clear guidance for appropriate use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_transaction_attachmentA
Destructive

Delete a transaction file attachment. Irreversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesID of the file attachment to delete.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already have destructiveHint: true. The description adds 'Irreversible', which reinforces the destructiveness but does not add new behavioral context beyond what the annotation provides. 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?

Extremely concise: two short sentences with no filler. The key action and consequence are front-loaded. Every word earns its place.

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 the simplicity of the tool (single delete operation) and no output schema, the description covers the essential action and irreversibility. However, it lacks context about the relationship to transactions or where to obtain the file_id. Adequate but not thorough.

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 a clear description for file_id. The tool description adds nothing beyond the schema. Parameter semantics are sufficiently covered by the schema, 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?

Clearly states the verb 'Delete' and the resource 'transaction file attachment'. Distinguishes it from sibling tools like delete_transaction (deletes a whole transaction) and get_transaction_attachment_url (retrieves attachment URL). No ambiguity.

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?

Provides no guidance on when to use this tool versus other deletion tools. No mentions of prerequisites, alternatives, or when not to use it. Agent must infer 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.

delete_transaction_groupA
Destructive

Delete (ungroup) a transaction group. The original child transactions remain and revert to normal ungrouped transactions.

ParametersJSON Schema
NameRequiredDescriptionDefault
transaction_idYesID of the transaction group (the group parent transaction) to delete.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true. The description adds essential behavioral context: child transactions remain and revert to ungrouped, which is not evident from the annotation alone. This goes beyond the annotation to clarify the non-destructive aspect for child entities.

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 superfluous information. The key action and behavior are front-loaded, making it efficient for an AI agent to parse.

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?

Given the simple parameter schema and no output schema, the description fully covers what the tool does, its effect, and what happens to related data. No gaps remain.

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 does not add significant new meaning beyond the schema's parameter description, which already identifies the ID as belonging to the group parent transaction. The tool description reinforces but does not extend this.

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 'Delete (ungroup) a transaction group' and distinguishes itself by explaining that child transactions are not deleted but revert to ungrouped. This differentiates it from sibling tools like 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context for when to use (to ungroup a transaction group) and explains the effect on child transactions. However, it does not explicitly mention when not to use or suggest alternatives, such as using delete_transaction to remove child transactions entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_transactions_bulkA
Destructive

Bulk-delete transactions by ID (1-500). Fails if any ID is a split or group parent, or part of a split/group; unsplit or ungroup those first. Irreversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesArray of transaction IDs to delete (1-500).

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description adds critical behavioral details: failure conditions for split/group IDs, required pre-processing, and irreversibility.

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 front-loaded action and constraints, 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?

The description covers purpose, constraints, and failure conditions well; however, it omits the return value or success indicator, which is minor for a delete operation.

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 description adds no further parameter details beyond what the schema already provides.

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 'Bulk-delete transactions by ID (1-500)' with a specific verb and resource, distinguishing it from single-transaction 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?

It explicitly mentions when the tool fails and prerequisite actions ('unsplit or ungroup those first'), providing clear context but not explicitly naming alternatives like delete_transaction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_account_balance_historyA
Read-only

Get monthly balance history for a single account. Call get_all_manual_accounts, get_all_plaid_accounts, or get_all_manual_crypto first to discover ids. For synced crypto holdings use get_crypto_synced_balance_history instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_monthNoOptional last month of the range, inclusive, as YYYY-MM (e.g. 2026-03). Must not be earlier than start_month and must not be in the future. For a single month, use the same value as start_month.
account_idYesId of the account to get balance history for.
start_monthNoOptional first month of the range, inclusive, as YYYY-MM (e.g. 2026-01). Must not be in the future. If set, end_month is also required. A full date such as 2026-01-01 is invalid.
account_typeYesType of account the balance history belongs to. Use manual for manually-managed accounts, plaid for synced bank accounts, crypto_manual for manually-managed crypto, and deleted for accounts that no longer exist but still have history. Synced crypto uses the dedicated crypto_synced tools instead.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true already signals a safe read operation, lowering the bar. The description adds useful context about prerequisite discovery calls and the alternative for synced crypto, but does not disclose additional behavioral traits like pagination, return format, or handling of deleted accounts. This is a modest but not rich contribution.

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 core action, then prerequisite and alternative. Every sentence earns its place with no redundant phrasing.

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 relatively simple read-only tool with a well-specified schema, the description covers the main purpose, prerequisites, and a clear alternative. It does not explain the 'deleted' account type or month format, but these are already documented in the schema. The only minor gap is a lack of mention that account_type 'deleted' exists, but this is not necessary for the primary use case.

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 four parameters described in the input schema. The description does not add parameter-specific semantics beyond mentioning that accounts must be discovered first, which relates to account_id. This matches the baseline 3 for high 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 opens with a specific verb+resource: 'Get monthly balance history for a single account.' It clearly distinguishes from the synced crypto alternative by name, making the tool's scope obvious. This meets the 5 criteria for specific and differentiated purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is given: call get_all_manual_accounts, get_all_plaid_accounts, or get_all_manual_crypto first to discover ids, and use get_crypto_synced_balance_history for synced crypto holdings instead. This directly addresses when to use and when not to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_all_categoriesA
Read-only

Get a list of all categories associated with the user's account. Returns categories in alphabetical order.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoIf `flattened`, returns a singular array of categories. If `nested`, returns top-level categories (either category groups or categories not part of a category group) in an array, with subcategories nested within the category group under the property children. Defaults to flattened.
is_groupNoIf true, returns only category groups. If false, returns only categories that are not category groups.

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 adds value by stating alphabetical ordering. However, it does not mention potential pagination or limits, which would be beneficial for large datasets.

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 wasted words. The key information (list, user account, alphabetical order) is front-loaded and efficiently communicated.

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 simplicity of the tool (no output schema, two optional params), the description covers the core behavior adequately. It could mention that results are paginated or limited, but for most use cases it is sufficient.

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 detailed descriptions for both parameters. The description adds no additional parameter semantics beyond what the schema 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 the action ('Get a list of all categories') and the resource ('categories associated with the user's account'), with additional detail about alphabetical ordering. This distinguishes it from siblings like 'get_single_category' (which retrieves one) and mutation tools.

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 all categories but does not explicitly state when to use or not use this tool versus alternatives. No guidance on filters or when to prefer 'get_single_category' is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_all_manual_accountsA
Read-only

Get a list of all manually-managed accounts associated with the user. (Formerly known as assets in the v1 API.)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true. Description adds that it returns a list and mentions the former name, but does not disclose other traits like pagination or data format.

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 with a parenthetical note, highly concise and front-loaded with the main action.

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 list tool with no parameters and no output schema, the description is fairly complete. It could mention pagination or output format, but the core purpose is clear.

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 has 0 parameters, so baseline is 4. Description does not need to add parameter meaning; it correctly describes the output.

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 gets a list of manually-managed accounts, using specific verb and resource. It distinguishes from sibling tools like get_all_plaid_accounts and get_single_manual_account.

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 (e.g., get_all_plaid_accounts) or when not to use it. The description only mentions the former name 'assets'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_all_manual_cryptoA
Read-only

Get all manually-managed crypto balances associated with the user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation covers the safety profile, and the description adds the scoping context of 'associated with the user' and 'manually-managed.' However, it does not disclose potential pagination, return format, or other behavioral details, which would be useful for a list-returning endpoint.

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 that clearly conveys the action and target. Every word earns its place, with no redundant or vague phrasing.

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?

This is a simple zero-parameter, read-only tool with no output schema. The description sufficiently states what it does and the scope, though it leaves the exact return structure unstated. Given the low complexity, this is nearly complete.

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 in the input schema, so there is nothing to explain. The baseline of 4 applies as the description cannot add parameter-related meaning beyond what the empty schema already conveys.

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 clear verb ('Get'), a specific resource ('manually-managed crypto balances'), and a scope ('associated with the user'). It distinguishes from sibling tools like get_all_synced_crypto (manual vs synced) and get_single_manual_crypto (all vs single).

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. There are no explicit exclusions or references to sibling tools like get_all_synced_crypto or get_single_manual_crypto, leaving the agent to infer usage 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.

get_all_plaid_accountsA
Read-only

Get a list of all Plaid (synced) accounts associated with the user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, so the safety profile is clear. Description adds 'synced' context but no other behavioral traits (e.g., pagination, ordering).

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, front-loaded sentence with no unnecessary words. High conciseness.

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?

Given no params, simple read-only operation, and no output schema, the description is fully adequate. It specifies scope and source (Plaid synced accounts).

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 input schema, so schema description coverage is 100%. Description doesn't need to add parameter info; baseline 4 for zero-param tools.

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 the tool gets a list of all Plaid (synced) accounts, using a specific verb ('Get') and resource. It distinguishes from siblings like get_all_manual_accounts and get_single_plaid_account.

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. The sibling names imply choices, but the description lacks when-to-use or when-not-to-use instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_all_synced_cryptoA
Read-only

Get all synced crypto accounts (Coinbase, Kraken, Ethereum wallets) and their nested per-symbol balances. Synced accounts are connected in the Lunch Money web app and cannot be created or edited through the API.

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?

Beyond the readOnlyHint annotation, the description explains that synced accounts are web-app connected and not API-editable, adding meaningful context about data origin and constraints. It also mentions the nested per-symbol balance structure, providing additional behavioral detail without being verbose.

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: the first front-loads the primary purpose, the second adds essential context about the data source and limitations. 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 zero-parity, read-only list tool with no output schema, the description adequately conveys what is returned (synced accounts and per-symbol balances) and the operational context (web-app connected, not API-editable). It is complete for its simplicity.

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 and an empty input schema, so schema coverage is 100%. The description doesn't need to explain parameters; the baseline for 0 params is 4, and this is met.

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 retrieves all synced crypto accounts with their nested per-symbol balances. It distinguishes from siblings by specifying 'synced' versus manual accounts and 'all' versus single account tools.

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 provides context that synced accounts are connected via the Lunch Money web app and cannot be created/edited via API, implying this tool is for read-only retrieval of such accounts. It does not explicitly name alternatives but clearly sets expectations for when this tool applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_all_tagsA
Read-only

Get a list of all tags associated with the user's account.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true. Description adds no further behavioral details (e.g., pagination, sorting, or effect). Consistent but not additive.

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, front-loaded, no redundant words. Perfectly concise for a simple list operation.

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?

Despite no output schema, description adequately describes return value (list of tags). No other context needed for this simple tool.

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 exist; description does not need to add parameter info. Baseline score for 0 params is 4.

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 (Get), resource (tags), and scope (user's account). It distinguishes from siblings like create_tag, delete_tag, update_tag, and get_single_tag.

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 versus alternatives like get_single_tag or other tools. No context on prerequisites or use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_balance_historyA
Read-only

Get monthly account balance history across all accounts — the data behind the Net Worth views in the LunchMoney app. History is monthly. With no month range, returns all available history plus an ephemeral current entry for the current month, which is calculated on demand and may change between requests. Only months with data are included.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_monthNoOptional last month of the range, inclusive, as YYYY-MM (e.g. 2026-03). Must not be earlier than start_month and must not be in the future. For a single month, use the same value as start_month.
start_monthNoOptional first month of the range, inclusive, as YYYY-MM (e.g. 2026-01). Must not be in the future. If set, end_month is also required. A full date such as 2026-01-01 is invalid.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses important behavioral details: history is monthly, 'With no month range, returns all available history plus an ephemeral `current` entry for the current month, which is calculated on demand and may change between requests', and 'Only months with data are included'. This is rich, valuable context about dynamic data and scope that annotations do not convey. 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?

The description is two sentences, front-loaded with the primary purpose, and each sentence adds meaningful detail. There is no redundant or filler content. It efficiently conveys scope, data frequency, default behavior, and a caveat about the current month entry.

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?

Given a read-only tool with two optional parameters and no output schema, the description covers the essential information needed for correct invocation: scope (all accounts), frequency (monthly), default range behavior (all history + ephemeral current), and filtering of months with no data. It is sufficiently complete for an agent to select and call this tool 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 covers both parameters (start_month and end_month) with detailed descriptions, including format, inclusivity, and constraints. The description adds only that 'no month range' returns all history, which is already implied by optional parameters. Since schema coverage is 100%, the baseline is 3, and the description does not materially enhance parameter understanding 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 explicitly states 'Get monthly account balance history across all accounts', providing a specific verb, resource, and scope. It also distinguishes from siblings like get_account_balance_history by emphasizing 'across all accounts', and mentions its role as 'the data behind the Net Worth views', adding context. This clearly differentiates it from other balance history tools.

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 clearly implies when to use this tool (for all-account balance history) and explains behavior for no month range. However, it does not explicitly mention alternatives for per-account or crypto-specific balance history, such as get_account_balance_history or get_crypto_synced_balance_history. It provides clear context but no explicit exclusions or alternative recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_budget_settingsA
Read-only

Get budget period and display settings for the account (granularity, period length, anchor date, hide-no-activity preference, income option, rollover-left-to-budget setting).

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?

Annotations already provide readOnlyHint=true, so the description need not restate safety. The description adds value by enumerating the specific settings returned, which is 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, well-structured sentence that front-loads the purpose and lists key fields 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?

With no parameters and readOnlyHint provided, the description covers the tool's purpose and return fields adequately. While it could mention the zero-param nature, the simplicity makes it sufficiently complete.

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 the baseline is 4 per guidelines. The description does not need to add parameter info; the schema coverage is 100% and no parameters exist.

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 the resource 'budget period and display settings' with a specific list of fields. The tool name 'get_budget_settings' uniquely identifies it among siblings like 'get_budget_summary', establishing clear 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?

The description does not explicitly state when to use this tool or provide exclusions or alternatives. However, given the self-explanatory name and sibling tools, usage context is implied but not formally guided.

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

Get a summary of the user's budget for a specified date range. Returns per-category totals (other_activity, recurring_activity, budgeted, available, recurring_remaining, recurring_expected). Set include_occurrences=true for a per-period breakdown matching the account's budget periodicity. (Backed by the v2 GET /summary endpoint.)

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYesEnd date in YYYY-MM-DD format. For aligned results use a valid budget period end (e.g. last day of month).
start_dateYesStart date in YYYY-MM-DD format. For aligned results use a valid budget period start (e.g. first day of month).
include_totalsNoInclude a top-level `totals` section summarizing inflow and outflow across all transactions in the range.
include_occurrencesNoInclude an `occurrences` array on each category, with one entry per budget period in the range.
include_rollover_poolNoInclude a `rollover_pool` section summarizing the current rollover pool balance and previous adjustments.
include_past_budget_datesNoInclude the three budget occurrences prior to start_date in `occurrences`. Ignored unless include_occurrences is also true.
include_exclude_from_budgetsNoInclude categories that have the 'Exclude from Budgets' flag set in the returned categories array.

TDQS

A4.4/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 specifying the underlying endpoint (v2 GET /summary) and mentioning that include_occurrences returns a per-period breakdown. It does not contradict the annotation, and while it doesn't discuss rate limits or auth, the read-only nature is already indicated.

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 very concise (two sentences) and front-loaded with the core purpose. Every sentence contributes useful information, with no redundant or 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?

Given the tool's complexity (7 parameters, no output schema), the description covers the main functionality and hints at return structure via field listings. However, it could be more complete by explaining the response format (e.g., top-level structure). Since schema descriptions are detailed, this is a minor gap.

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 schema already provides descriptions for all 7 parameters (100% coverage). The description adds meaning for include_occurrences ('per-period breakdown matching the account's budget periodicity'), which goes beyond the schema. This extra context justifies a score above the 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's purpose: 'Get a summary of the user's budget for a specified date range.' It lists the specific fields returned (e.g., other_activity, recurring_activity) and mentions optional behavior (include_occurrences). This clearly distinguishes it from sibling tools like get_budget_settings or upsert_budget.

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 provides clear context by naming the endpoint and specifying input parameters, but it does not explicitly state when to use this tool versus alternatives (e.g., when to use get_budget_summary vs. get_budget_settings). However, the purpose is unambiguous enough that an agent can infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_crypto_synced_balance_historyA
Read-only

Get monthly balance history for a synced crypto holding, identified by its account id and ticker symbol. Synced crypto is scoped per symbol, so it is not available through get_account_balance_history.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesTicker symbol of the holding within the account (e.g. eth).
end_monthNoOptional last month of the range, inclusive, as YYYY-MM (e.g. 2026-03). Must not be earlier than start_month and must not be in the future. For a single month, use the same value as start_month.
account_idYesId of the synced crypto account.
start_monthNoOptional first month of the range, inclusive, as YYYY-MM (e.g. 2026-01). Must not be in the future. If set, end_month is also required. A full date such as 2026-01-01 is invalid.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already indicating a safe read operation, the description adds useful behavioral context: the tool returns monthly history and is scoped per symbol. It does not disclose return format or edge cases, but the annotations cover the safety profile, so this is adequate.

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 focused sentences, front-loaded with the primary purpose, and contains no redundant or irrelevant 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 covers the tool's purpose, scoping, and relationship to a sibling tool, while the schema handles parameter details. It omits return format, but for a read-only history getter with no output schema, the provided context is sufficient for an agent to use it 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 schema fully documents all four parameters with descriptions, so the baseline is 3. The description only reiterates that the tool uses account_id and symbol as identifiers and implies monthly granularity, adding little 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 tool retrieves monthly balance history for a synced crypto holding, identified by account_id and ticker symbol. It also explicitly distinguishes this from get_account_balance_history, making it easy to select the correct tool.

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 explicitly names the alternative (get_account_balance_history) and explains that synced crypto is scoped per symbol, so it is not available through that tool. This provides clear guidance on when to use this tool, though it does not discuss other potential alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recurring_itemsA
Read-only

Retrieve a list of recurring items expected for a specified date range. The matches object on each item is populated based on the requested range.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoEnd of the range used to populate `matches` (YYYY-MM-DD). Required if start_date is set.
start_dateNoStart of the range used to populate `matches` (YYYY-MM-DD). Defaults to the current month. Required if end_date is set.
include_suggestedNoIf true, also returns recurring items suggested by the system that have not yet been reviewed.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description adds that the matches object is populated based on the requested range, providing behavioral context 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-loads the core purpose, and contains no redundant information. It is optimally concise.

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 three optional parameters, the description adequately covers the tool's purpose and key behavior (matches population). However, it could mention the return format or any default behavior for omitted date ranges.

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 schema has 100% coverage, so the baseline is 3. The description adds value by explaining that start_date and end_date control the matches population, which is not evident from the schema alone.

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 retrieves a list of recurring items for a date range, and distinguishes it from the sibling get_single_recurring_item by indicating it returns multiple items with populated matches.

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 use for retrieving lists of recurring items over a range, but does not explicitly contrast with alternatives like get_single_recurring_item or specify prerequisites (e.g., if the user has recurring items).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_single_categoryA
Read-only

Get details on a single category or category group, including the list of children categories for category groups.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryIdYesId of the category to query. Call get_all_categories first to discover ids.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and description adds that category groups include children, providing useful behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with action and resource, efficiently includes additional detail about children for groups without waste.

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 tool with one parameter and no output schema, the description covers the purpose, parameter semantics, and behavior, leaving no 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 description coverage is 100% and description adds context about prerequisite (get_all_categories), adding meaning beyond the schema field description.

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 the verb 'Get details' and the resource 'single category or category group', and distinguishes from sibling tools like get_all_categories by specifying it retrieves children for groups.

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?

Provides a prerequisite hint ('Call get_all_categories first to discover ids') but does not explicitly state when to use this tool versus alternatives or 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.

get_single_manual_accountA
Read-only

Get details of a single manual account by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountIdYesId of the manual account to query. Call get_all_manual_accounts first to discover ids.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint: true, so the description does not need to restate safety. It adds minimal behavioral context beyond the obvious read 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?

The description is extremely concise with one sentence, no wasted words. Every part 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?

Given the single parameter, high schema coverage, and readOnlyHint annotation, the description is complete for a detail retrieval tool. No output schema exists, but it is not necessary.

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% with a parameter description. The description adds valuable context by instructing to call get_all_manual_accounts first, which aids correct usage.

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 gets details of a single manual account by ID. It is specific and distinguishes from sibling tools like get_all_manual_accounts.

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 advises calling get_all_manual_accounts first to discover IDs, which provides clear usage guidance. It implies when to use this tool but lacks explicit when-not or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_single_manual_cryptoA
Read-only

Get a single manually-managed crypto balance by ID. Call get_all_manual_crypto first to discover ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
crypto_idYesId of the manual crypto balance to retrieve.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already declares the operation as read-only, and the description ('Get') aligns with that. The description adds the 'manually-managed' scope and the discovery workflow, but otherwise does not disclose additional behavioral traits such as error handling, response format, or potential absence of data. Given the annotation coverage, this is adequate but not enriched.

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-loaded with the action, and includes a directly actionable follow-up instruction. Every word contributes value, with no unnecessary fluff.

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?

This is a simple one-parameter get operation with a readOnlyHint annotation, and the description provides the essential workflow hint (call get_all_manual_crypto first). While there is no output schema or detailed return value description, the simplicity of the tool and the offered guidance make the description adequately complete for the agent to select and invoke it 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 schema already provides 100% coverage for the single parameter crypto_id with a clear description ('Id of the manual crypto balance to retrieve'). The tool description essentially restates this with 'by ID,' adding no new semantic meaning beyond the schema. Baseline of 3 is appropriate for 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 clearly states the function: 'Get a single manually-managed crypto balance by ID.' It uses a specific verb ('Get') and identifies both the resource type ('manually-managed crypto balance') and the key distinguishing factor ('by ID'), which differentiates it from siblings like get_all_manual_crypto and get_single_synced_crypto.

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 provides clear usage context by instructing to 'Call get_all_manual_crypto first to discover ids,' which tells the agent the prerequisite workflow. While it does not explicitly exclude alternative tools or mention synced crypto variants, the guidance implies the correct usage scenario: retrieving a specific manual crypto entry after listing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_single_plaid_accountA
Read-only

Get details of a single Plaid (synced) account by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountIdYesId of the Plaid account to query. Call get_all_plaid_accounts first to discover ids.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, indicating no side effects. The description adds no further behavioral traits, but it doesn't contradict. The description is adequate given the annotation coverage.

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, front-loaded, and no extraneous words. Every part contributes to understanding the tool's purpose.

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 read tool with one parameter and annotations covering safety, the description is complete. It tells what it does and how to find the required ID.

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 the parameter description includes usage guidance ('Call get_all_plaid_accounts first'). The tool description does not add param details, but the schema already provides good semantics. Baseline of 3 plus extra for the hint.

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 'Get details of a single Plaid (synced) account by ID.' It uses a specific verb 'Get', specifies the resource 'single Plaid account', and distinguishes from sibling tools like get_all_plaid_accounts.

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 when needing details for one account, and the parameter hint 'Call get_all_plaid_accounts first to discover ids' provides a prerequisite. It doesn't explicitly differentiate from other get_single_* tools, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_single_recurring_itemA
Read-only

Retrieve a single recurring item by ID. Optional date range populates the matches object.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoEnd of the range used to populate `matches` (YYYY-MM-DD). Required if start_date is set.
start_dateNoStart of the range used to populate `matches` (YYYY-MM-DD). Defaults to the current month. Required if end_date is set.
recurringIdYesId of the recurring item to query. Call get_recurring_items first to discover ids.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, so the description does not need to repeat that. It adds value by explaining that the optional date range populates the 'matches' object, which is behavioral information beyond the 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at just two sentences. The first sentence delivers the core purpose, and the second provides key additional context (date range effect). Every word is functional with 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?

Given the tool's simplicity (single retrieval with optional date range), the description is largely complete. It covers the core functionality and the optional parameter effect. However, there is no output schema, and the description does not detail the response structure beyond 'matches,' which could be a minor gap for agents needing to parse the result.

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 the schema already documents parameters well. The description adds context by stating that the date range populates the 'matches' object, linking the parameters to the functionality. This provides meaning beyond the schema's descriptions.

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 'Retrieve a single recurring item by ID,' which is a specific verb and resource. It also mentions the optional date range for populating the matches object, adding clarity. The tool is distinct from its sibling 'get_recurring_items' which lists all items.

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 context by noting that the recurringId should be obtained from 'get_recurring_items' first. However, it does not explicitly state when to use this tool versus alternatives, nor does it provide conditions for when not to use it. The guidance is minimal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_single_synced_cryptoA
Read-only

Get a single synced crypto account and all its nested balances by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
crypto_idYesId of the synced crypto account to retrieve.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true, indicating a safe read. The description adds that the tool returns 'all its nested balances,' which informs the agent of the scope of the response. However, it doesn't describe error behavior or response format. Since annotations cover the safety profile, this 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 a single 12-word sentence, front-loaded with the verb, and contains no filler. It is appropriately concise.

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 get-by-ID tool with one parameter and readOnlyHint annotation, the description covers the core purpose and hints at return contents ('nested balances'). It doesn't specify return structure or error cases, but given the low complexity, it's fairly 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 schema already describes crypto_id at 100% coverage ('Id of the synced crypto account to retrieve'). The description merely says 'by ID' without adding any new information about the parameter, so it doesn't elevate beyond the schema 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 uses the specific verb 'Get,' identifies the resource as 'a single synced crypto account' and clarifies scope with 'all its nested balances by ID.' This distinguishes it from siblings like get_all_synced_crypto (plural) and get_single_manual_crypto (manual vs synced).

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 by stating 'by ID' and 'single synced crypto account,' indicating it's for retrieving one specific synced crypto account. However, it doesn't explicitly mention alternatives or when not to use it, such as using get_all_synced_crypto for listing or get_synced_crypto_balance for just balances.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_single_tagA
Read-only

Get details of a single tag by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagIdYesId of the tag to query. Call get_all_tags first to discover ids.

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 adds no additional behavioral traits beyond confirming it's a retrieval operation. 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 a single, front-loaded sentence with 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?

For a simple single-parameter read operation with good annotations, the description is adequate. It could mention the return value, but the tool is straightforward.

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 single parameter, and the schema description already explains the parameter well. The tool description adds no extra semantic value 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 ('Get details'), the resource ('single tag'), and the identifier ('by ID'). It distinguishes from siblings like 'get_all_tags' and 'update_tag'.

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 when you have a tag ID, and the parameter description suggests calling 'get_all_tags' first, but there is no explicit statement of when to use or when not to use this tool vs alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_single_transactionA
Read-only

Get details of a specific transaction. The response always includes plaid_metadata, custom_metadata, files, and (for split or group parents) the children array — none of which are returned by default in get_transactions.

ParametersJSON Schema
NameRequiredDescriptionDefault
transaction_idYesID of the transaction to retrieve.

TDQS

A4.1/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's confirmation that this is a retrieval operation is consistent but adds no new behavioral traits. It does add value by listing the specific response fields, but beyond that, there is no disclosure of rate limits, auth needs, or other behaviors.

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 that immediately conveys purpose and key differentiating information. No unnecessary 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?

Given the tool's simplicity (one parameter, no output schema), the description covers the essential aspects: purpose, unique response contents, and relationship to a sibling tool. It is complete for the agent's decision-making.

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% description coverage for the single parameter 'transaction_id'. The description does not add any additional meaning or context beyond what the schema provides.

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 that the tool retrieves details of a specific transaction, specifying the included fields (plaid_metadata, custom_metadata, files, and children for split/group parents). It distinguishes itself from the sibling get_transactions by noting these fields are not returned by default.

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 when to use this tool (when full details beyond get_transactions are needed) by contrasting its output. It does not explicitly state when not to use or mention alternatives, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_supported_cryptocurrenciesA
Read-only

Get the list of cryptocurrencies supported for manual tracking. The symbol of an entry here is what must be passed to create_manual_crypto.

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?

With annotations providing readOnlyHint, the description adds value by specifying that the list is for manual tracking and that the symbols are prerequisites for create_manual_crypto. This clarifies the relationship to other tools and the nature of the data, going beyond the annotation without contradicting 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 two sentences, front-loaded with the primary action, and the second sentence provides essential cross-tool context. No words are wasted, making it concise and well-structured.

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 zero-parameter tool with a readOnlyHint and no output schema, the description is complete: it explains what the tool returns (supported cryptocurrencies) and how the output should be used. No critical information is missing for an agent to select and invoke the tool correctly.

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 the baseline is 4. The description adds no parameter information because none is needed; the empty schema fully covers the parameters, and the description's focus on the output symbol is more relevant.

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 'Get the list of cryptocurrencies supported for manual tracking,' which specifies the verb (get), the resource (cryptocurrencies), and the scope (supported for manual tracking). It distinguishes from siblings like get_all_manual_crypto and add_supported_cryptocurrency by clarifying its role as the supported list, not the user's tracked list or the add operation.

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 clear guidance on when to use this tool: before calling create_manual_crypto, since the symbol must come from this list. It does not explicitly mention alternatives or exclusions, but the connection to create_manual_crypto provides strong contextual usage direction, so it earns a 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_synced_crypto_balanceA
Read-only

Get a single balance held inside a synced crypto account, looked up by its cryptocurrency symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesCryptocurrency symbol held within the synced account, e.g. 'eth'.
crypto_idYesId of the synced crypto account.

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 agent knows this is a safe read operation. The description adds scoping constraints ('single', 'by its cryptocurrency symbol') but does not disclose response format, error behavior, or case sensitivity 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one sentence of 13 words, front-loaded with the action verb. Every word contributes to meaning, with no filler or 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?

No output schema exists, so the description should clarify return value, but 'single balance' conveys the core concept. Combined with the readOnlyHint and simple two-parameter schema, the description is nearly complete; it only lacks explicit return format or not-found behavior, which are minor for a straightforward getter.

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 both parameters (crypto_id and symbol) described in the schema. The description's phrase 'looked up by its cryptocurrency symbol' reinforces the schema but adds no new semantic detail beyond what is already documented.

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 'Get' with a clear resource 'single balance' and scoping 'inside a synced crypto account, looked up by its cryptocurrency symbol.' It distinguishes itself from sibling tools like get_crypto_synced_balance_history and get_single_synced_crypto by focusing on a single balance lookup rather than history or account details.

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 when to use the tool (to fetch a single balance by symbol) but does not explicitly state alternatives or exclusions. There is no mention of when to prefer this over balance history or refresh_synced_crypto, leaving the agent to infer the intended context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_transaction_attachment_urlA
Read-only

Get a short-lived signed download URL for a transaction file attachment. The response includes the URL and an expires_at timestamp.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesID of the file attachment.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, so the description correctly aligns with a read operation. It adds value by specifying the URL is 'short-lived' and includes an 'expires_at' timestamp, providing 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 consists of two concise sentences. The first sentence states the action, and the second describes the response. No unnecessary words or repetition; 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 simple retrieval tool with a single parameter and no output schema, the description adequately covers the response (URL and expires_at). It could optionally mention usage restrictions or typical timeout, but overall is complete enough.

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 one parameter ('file_id') having a clear description. The tool description does not add additional meaning beyond the schema, so it meets the baseline but does not provide extra semantic enrichment.

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 'short-lived signed download URL for a transaction file attachment', making the tool's purpose specific and unambiguous. It distinguishes from siblings like attach_file_to_transaction and delete_transaction_attachment.

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 does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions or prerequisites. Usage is implied by the function name and sibling context, but no direct guidance is offered.

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

Retrieve transactions, optionally filtered by date range, account, category, tag, recurring item, status, and more. Returns at most limit transactions (default 1000, max 2000); has_more is set on the response when more match the filters. Pending and split-parent / group-child transactions are excluded by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax transactions to return (1-2000, default 1000).
offsetNoOffset for pagination. Use with `has_more` from a previous response.
statusNo
tag_idNo
end_dateNoEnd of the date range. Required if start_date is set.
is_pendingNoFilter by pending status. Takes precedence over include_pending when set.
start_dateNoBeginning of the date range. Required if end_date is set.
category_idNoFilter by category ID. 0 returns only un-categorized transactions. Matches both leaf categories and category groups.
recurring_idNo
created_sinceNoOnly return transactions created after this timestamp.
include_filesNoInclude the `files` array (attachment metadata) on each transaction.
updated_sinceNoOnly return transactions updated after this timestamp.
include_pendingNoInclude imported pending transactions in results.
is_group_parentNoIf true, returns only transaction groups (group parents).
include_childrenNoPopulate the `children` array on group/split parent transactions.
include_metadataNoInclude plaid_metadata and custom_metadata fields on each transaction.
plaid_account_idNoFilter by Plaid account ID, or 0 to omit all Plaid-account transactions.
manual_account_idNoFilter by manual account ID, or 0 to omit all manual-account transactions.
include_split_parentsNoInclude the original parent transactions of split transactions.
include_group_childrenNoInclude the original transactions that were combined into transaction groups.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true. The description adds critical behavioral details: pagination behavior (limit, has_more, offset), default exclusions (pending, split-parents, group-children), and that include_* flags can override. 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 sentences: first lists filter options, second explains pagination and default exclusions. Efficient, front-loaded, 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?

For a retrieval tool with 20 parameters and no output schema, the description covers pagination, default filters, and override flags. It could mention the response format (e.g., array of transaction objects) but is otherwise 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 coverage is 85%, so the schema already documents most parameters. The description summarizes filter types (e.g., 'date range, account, category, tag') but does not add meaningful details beyond what the schema descriptions provide, e.g., no explanation of the 'status' enum values.

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 'Retrieve transactions' and enumerates numerous filtering dimensions (date, account, category, etc.), distinguishing it from siblings like get_single_transaction or create_transactions.

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 explains optional filters, default limit, and that pending/split-group exclusions apply by default. It does not explicitly contrast with sibling tools (e.g., get_single_transaction) but provides enough context for when 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.

get_userA
Read-only

Get details on the current user

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already indicates it's a safe read operation. The description adds no further behavioral details, but does not contradict the annotation. Given the annotation coverage, this is adequate.

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 purpose with 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?

Given no parameters and no output schema, the description fully explains what the tool does. The sibling tools list provides context, but the description itself is complete for its simplicity.

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, so the schema provides complete coverage. The description adds no additional parameter info, but none is needed. Baseline for 0 params is 4.

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 'Get details on the current user', which is a specific verb-resource combination. It distinguishes itself from sibling tools like get_budget_settings or get_transactions by explicitly targeting the current user.

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 context (retrieving current user details) but does not explicitly state when to use this tool over alternatives. Still, it is clear enough for an agent to infer its purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_synced_cryptoA

Trigger a balance refresh for a synced crypto account and return the refreshed account. Reaches out to the external crypto provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
crypto_idYesId of the synced crypto account to refresh.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation openWorldHint already signals external side effects, and the description explicitly mentions reaching out to the external crypto provider, which adds behavioral context. It does not contradict the annotation. It lacks details on potential failure or latency, but given the tool's simplicity, the disclosure 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 concise, with two clear sentences that front-load the primary action and immediately state the return value. 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 one-parameter tool without an output schema, the description covers the key aspects: what it does, what it returns, and that it makes an external call. It lacks any note on error conditions or timing, but these are not critical for the tool's basic usage.

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 single parameter crypto_id is fully described in the schema ('Id of the synced crypto account to refresh'), and the description adds no further semantic meaning. Since schema coverage is 100%, the 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 ('Trigger a balance refresh') and the resource ('a synced crypto account'), with the specific outcome of returning the refreshed account. This distinguishes it from sibling tools like get_synced_crypto_balance or get_single_synced_crypto, which do not perform a refresh.

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 provides clear context: it is used to refresh a synced crypto account via an external provider call. It implies when to use it (to get up-to-date balance) but does not explicitly exclude alternatives like reading a cached balance. However, the sibling name get_synced_crypto_balance suggests the alternative, so the guidance is adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_budgetA
Destructive

Remove the budget for a specific category and period. The request is idempotent — succeeds even if no budget exists for the period.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateYesBudget period start date in YYYY-MM-DD format. Must be a valid budget period start.
category_idYesCategory ID for the budget to remove.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the key behavioral detail that the request is idempotent, which goes beyond the annotations' 'destructiveHint: true'. This informs the agent that calling it when no budget exists is harmless.

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 short, with two sentences. The first sentence clearly states the purpose, and the second provides an important behavioral note. 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 destructive tool with two parameters, the description covers purpose and idempotency. It lacks details on return values or error handling, but given no output schema, this is sufficient 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 description coverage is 100%, so the schema already documents the parameters adequately. The description does not add extra meaning beyond what the schema provides, leading to 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 explicitly states the action ('remove'), the resource ('budget'), and the scope ('for a specific category and period'), clearly distinguishing it from sibling tools like 'upsert_budget' or 'get_budget_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 mentions idempotency but does not provide explicit guidance on when to use this tool versus alternatives (e.g., 'upsert_budget'), nor does it specify prerequisites or scenarios where removal is inappropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

split_transactionA

Split an existing transaction into 2-500 child transactions. The sum of child amounts must equal the parent's amount. After splitting, the parent is hidden from get_transactions and accessible via get_single_transaction (returns the parent with children).

ParametersJSON Schema
NameRequiredDescriptionDefault
transaction_idYesID of the transaction to split.
child_transactionsYesChildren to create. Sum of amounts must equal the parent's amount.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses post-split behavior: parent is hidden and children are listed under it via get_single_transaction. It also states the sum constraint. Annotations only note non-idempotency, but description provides richer behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is three sentences, each sentence adds essential information: action and range, constraint, and behavioral effect. No unnecessary words. 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?

For a mutation tool with 2 required parameters and no output schema, the description explains the effect on parent and child relationship, and provides constraints. It does not describe the return value, but given the behavioral context, it is sufficiently complete for agent decision-making.

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?

Input schema has 100% coverage for parameter descriptions. The tool description adds the constraint that child count must be 2-500 and sum equals parent amount, but this is redundant with schema comments. No additional parameter semantics are provided beyond what schema already defines, so baseline of 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 the action 'Split an existing transaction into 2-500 child transactions' with a specific verb, resource, and range. It distinguishes from sibling tools like unsplit_transaction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the consequence of splitting (parent becomes hidden from get_transactions but accessible via get_single_transaction), providing clear when-to-use and behavioral outcomes. The presence of unsplit_transaction in siblings implies the reverse operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trigger_plaid_fetchA

Trigger a fetch of latest data from Plaid. Optionally scope the fetch to a date range and/or a specific Plaid account ID. Note: Plaid enforces a minimum 60-second delay between fetch requests; fetching may take up to 5 minutes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoIf set, only fetch the specified Plaid account; otherwise all eligible accounts are fetched.
end_dateNoEnd of the date range to fetch transactions for (YYYY-MM-DD). Required if start_date is set.
start_dateNoBeginning of the date range to fetch transactions for (YYYY-MM-DD). Required if end_date is set.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only openWorldHint annotation, the description carries the burden: it discloses the rate limiting (60s delay) and long duration (up to 5 min), which are key behavioral traits beyond what annotations provide. 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 sentences, no wasted words: first sentence states the core action, second adds optional scoping and important constraints. Well front-loaded.

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 three optional parameters and no output schema, the description covers the essential: what it does, optional scoping, and performance constraints. Minor omission: no mention of what happens if rate limit is hit (e.g., error handling).

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 description adds little new meaning. It mentions scoping to date range and account ID, which paraphrases the schema. The mutual requirement of start_date and end_date is implied but not explicitly reinforced.

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 triggers a fetch of latest data from Plaid, with optional scoping to date range or specific account. This verb+resource combination is distinct from siblings which are mostly read or manage operations on existing data.

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 notes the 60-second delay and up to 5-minute fetch time, setting expectations. However, it does not explicitly contrast with alternative tools like get_all_plaid_accounts (which is read-only) or 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.

unsplit_transactionA
Destructive

Unsplit a previously split transaction by deleting its children and restoring the parent. Pass the parent (split_parent_id) — not a child — as the path id.

ParametersJSON Schema
NameRequiredDescriptionDefault
transaction_idYesID of the previously split parent transaction. Use the split_parent_id of a split child to find it.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond destructiveHint annotation, description explains specific destructive action (deleting children) and restoring parent.

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 wasted words, front-loaded with purpose then usage.

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?

Fully explains behavior and parameter usage for a simple one-parameter tool.

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?

Schema already has 100% coverage, and description reinforces how to find the correct ID, adding clarity.

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 unsplits a transaction by deleting children and restoring the parent. It distinguishes itself from sibling tool 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on passing the parent ID, not a child. Lacks explicit alternatives but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_categoryA
Idempotent

Update properties for an existing category or category group. For category groups, supplying children replaces the group's full child list. Cannot be used to convert between category and category group.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name. 1-100 characters.
archivedNo
childrenNoOnly valid for category groups. Replaces the group's full children list. Existing IDs (numbers) keep/move categories; strings create new sub-categories.
group_idNoMove this category into the specified category group, or null to remove from any group.
is_incomeNo
categoryIdYesId of the category or category group to update.
descriptionNoNew description. Up to 200 characters.
exclude_from_budgetNo
exclude_from_totalsNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotentHint annotation, the description discloses key behaviors: 'supplying children replaces the group's full child list' and 'Cannot be used to convert between category and category group.' This adds useful context for safe invocation.

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-loaded with the core action, and every sentence adds value. 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 an update tool with 9 parameters and no output schema, the description covers the main constraints and behaviors. It lacks return value details but is otherwise complete for an update operation.

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 description adds some value by explaining the children parameter behavior, but overall parameter semantics rely heavily on the input schema (56% coverage). The description does not compensate for undocumented parameters sufficiently.

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 updates an existing category or category group, with a specific verb and resource. It distinguishes between updating a category and a category group, and among siblings like create_category and delete_category, its purpose is evident.

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 by stating what the tool does but does not explicitly guide when to use it over alternatives like create_category or delete_category. No exclusions or when-not-to-use guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_deleted_account_detailsA
Idempotent

Update the display details shown for a deleted account in the Net Worth views. Applies to all historical entries for that deleted source. At least one field must be provided; pass null to clear a field.

ParametersJSON Schema
NameRequiredDescriptionDefault
maskNoLast few digits of the deleted account's number.
nameNoOfficial or full name of the deleted account.
subtypeNoSubtype of the deleted account.
account_idYesThe deleted_account_id from a balance history entry whose source type is `deleted`.
account_typeNoType of the deleted account.
display_nameNoDisplay name for the deleted account.
institution_nameNoName of the institution that held the deleted account.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotentHint annotation, the description adds valuable behavioral context: the update applies to all historical entries for the deleted source, and passing null clears a field. It also implies the operation is non-destructive to the deleted account itself. 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, front-loaded with the main action, followed by scope and a usage rule. Every sentence is informative and there is no wasted wording.

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 update tool with 7 params (all but one optional) and no output schema, the description covers purpose, scope, and the null-clearing convention. It adequately addresses the required-field rule and the effect on historical entries, making it complete for an AI agent to select and invoke the tool.

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%, with each parameter having a description. The description adds a cross-cutting semantic: 'pass null to clear a field', which is not present in any individual parameter description. This extra meaning raises the score above the baseline 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 uses a specific verb ('Update') and resource ('display details for a deleted account') with scope ('in the Net Worth views'), clearly distinguishing it from sibling tools. It also clarifies it applies to all historical entries for that deleted source, leaving no ambiguity about what the 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool (for deleted accounts) and includes a key usage rule ('At least one field must be provided; pass null to clear a field'). However, it does not explicitly name alternatives or exclusion cases, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_manual_accountB
Idempotent

Update an existing manually-managed account. (Formerly update_asset.)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
typeNo
balanceNo
subtypeNo
currencyNo
accountIdYesId of the manual account to update.
closed_onNo
display_nameNo
balance_as_ofNo
institution_nameNo
exclude_from_transactionsNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description does not add behavioral context beyond the idempotentHint annotation. It does not disclose partial update behavior, error handling, or prerequisites. No contradiction with annotations, but no 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?

The description is a single, concise sentence with no unnecessary words. The historical rename note is brief and informative. No fluff.

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 the complexity (11 parameters, no output schema), the description is minimal. It does not explain return values, partial update behavior, or required fields beyond accountId. Many sibling tools exist, but no context is provided for selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 9% (only accountId has a description). The tool description does not explain any parameters or their semantics. The description fails to compensate for the low 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 clearly states the verb 'Update' and the resource 'existing manually-managed account', and distinguishes from siblings like create_manual_account and delete_manual_account by specifying 'update' and 'manually-managed'. The former name note adds clarity.

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 updating manual accounts, but does not provide explicit when-to-use or when-not-to-use guidance, nor alternatives among the many sibling tools. There is no exclusion or context about when to prefer this over other update tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_manual_cryptoA
Idempotent

Update a manually-managed crypto balance. At least one of name, display_name, institution_name, or balance must be supplied. The symbol of an existing balance cannot be changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name for the crypto asset.
balanceNoNew balance as a numeric string with up to 18 decimal places. Pass a string to avoid losing precision.
crypto_idYesId of the manual crypto balance to update. Synced crypto balances cannot be updated.
display_nameNoNew display name for the crypto asset. Pass null to clear it.
institution_nameNoNew institution or wallet provider display name. Pass null to clear it.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation idempotentHint=true already conveys idempotency. The description adds useful constraints: 'At least one of... must be supplied' and 'The symbol... cannot be changed.' These are not in the annotations and add value. However, the description does not disclose other behaviors such as error handling or whether omitted fields retain their values, which leaves some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, each essential. It front-loads the purpose and immediately gives the critical 'at least one' requirement and the symbol immutability constraint. No word is wasted.

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 moderate complexity (5 params, 1 required, idempotentHint), the description covers the main purpose, the validation rule, and a key behavioral limitation. It doesn't mention that omitted fields remain unchanged, but the schema's null descriptions and partial-update phrasing imply it. With no output schema, this is adequate.

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% with detailed parameter descriptions, so baseline is 3. The description adds a crucial cross-parameter rule not in the schema: at least one of name, display_name, institution_name, or balance must be supplied. This goes beyond the schema's required crypto_id and clarifies validation logic.

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 'Update a manually-managed crypto balance,' which clearly identifies the action and resource. It distinguishes from sibling tools like create/delete/get manual crypto and from synced crypto tools. The added constraints about required fields and immutable symbol further clarify its role.

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 phrase 'manually-managed' sets a clear context for when to use this tool. It doesn't explicitly name alternatives or exclusions, but the resource type is unambiguous. The schema's crypto_id description also notes that synced crypto cannot be updated, reinforcing the manual-only scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_tagC
Idempotent

Update properties for an existing tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
tagIdYesId of the tag to update.
archivedNo
text_colorNo
descriptionNo
background_colorNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide idempotentHint=true, and the description states 'Update' which is consistent. No additional behavioral details are added (e.g., side effects, permissions), but annotations already cover the idempotency trait.

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 directly communicates the tool's purpose. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 6 parameters, only 1 required, no output schema, and minimal parameter descriptions, the description is severely inadequate. It lacks details on return values, parameter behavior, and overall operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17% (only tagId has a description). The tool description does not explain any parameter semantics beyond what the schema provides, failing to compensate for the low 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?

The description 'Update properties for an existing tag' clearly states the action (updating) and the resource (tag), distinguishing it from create/delete/get operations. It could be more specific about which properties, but it's clear enough.

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 like create_tag or delete_tag. The description does not mention any context for usage, 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_transactionA
Idempotent

Update an existing transaction. Provide any subset of writable fields directly (the v2 API no longer wraps the body in a transaction envelope). Cannot modify split or grouped transactions; use the corresponding split/group tools instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
updateYesFields to update. Provide at least one writable field.
transaction_idYesID of the transaction to update.
update_balanceNoDefaults to true. Pass false to skip updating the associated manual account's balance.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate idempotency (idempotentHint: true). Description adds useful constraint about split/group transactions but no further behavioral traits (e.g., response format, error behavior). Adequate but not exceptional.

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 fluff, front-loaded with the core action. Every word 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?

Given the tool's complexity (nested update object, high schema coverage but no output schema), the description covers the key constraint and API version change. Missing a note on return value, but output schema is absent, so minor gap.

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 description does not need to add much. It mentions 'writable fields' and the v2 envelope change, but does not explain individual parameters beyond what the schema provides. Baseline 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 (update) and resource (existing transaction), and distinguishes from siblings by explicitly mentioning that split or grouped transactions cannot be modified and should use corresponding tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides direct when-to-use and when-not-to-use guidance: cannot modify split/grouped transactions, and directs to use split/group tools instead. No ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_transactions_bulkA
Idempotent

Update multiple transactions in a single call (1-500). Each entry must include id plus at least one writable field. Cannot be used to modify split or grouped transactions.

ParametersJSON Schema
NameRequiredDescriptionDefault
transactionsYesArray of partial transaction updates, each keyed by its `id`.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide 'idempotentHint: true', and the description adds behavioral constraints beyond that: maximum 500 items, each must include id and a writable field, and prohibition on split/grouped transactions. No contradictions. The description adds meaningful context about the operation's constraints.

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 three sentences, front-loaded with the purpose, and contains no unnecessary words. Every sentence adds essential 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?

For a bulk update tool with no output schema and a complex input schema, the description covers the key constraints (range, required fields, exclusions). It could mention error handling or idempotence implications, but with annotations covering idempotence, the description is sufficiently complete.

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 the description adds value by stating that each entry must include 'id' plus at least one writable field, which is not enforced by the schema (only 'id' is required). This clarifies the intent beyond what the schema 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 'Update', the resource 'multiple transactions', and specific constraints: batch size 1-500, each entry must include 'id' and a writable field. It also explicitly says what it cannot do (modify split or grouped transactions), distinguishing it from siblings like 'update_transaction' (single) and 'delete_transactions_bulk'.

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 provides clear context for when to use (updating multiple transactions in bulk) and explicitly states an exclusion ('Cannot be used to modify split or grouped transactions'). While it does not name alternative tools, the constraint is sufficient for an agent to infer when to avoid this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upsert_account_balance_historyA
Idempotent

Create or update monthly balance history entries for a single account. Every month must be a past calendar month — the current month is calculated on demand and cannot be written. The request is all-or-nothing: if any entry fails validation, none are applied. The response contains only the entries submitted, not the account's full history.

ParametersJSON Schema
NameRequiredDescriptionDefault
balancesYesOne or more monthly balance entries to create or update. If any entry fails validation the entire request is rejected and nothing is updated.
account_idYesId of the account to write balance history for.
account_typeYesType of account the balance history belongs to. Use manual for manually-managed accounts, plaid for synced bank accounts, crypto_manual for manually-managed crypto, and deleted for accounts that no longer exist but still have history. Synced crypto uses the dedicated crypto_synced tools instead.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral traits beyond the idempotentHint annotation: all-or-nothing atomicity ('if any entry fails validation, none are applied'), the past-month restriction, and the response shape ('only the entries submitted, not the account's full history'). These provide the agent with essential expectations for failure and return behavior.

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 concise sentences front-load the primary purpose then add key constraints (past month, atomicity, response scope). Every sentence is necessary, no filler words, and the structure is easy to scan. This is an exemplary model of concise tool documentation.

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 write operation with an array of nested objects and no output schema, the description covers critical context: what can be written, the current-month prohibition, all-or-nothing failure mode, and what the response contains. Combined with the fully descriptive schema and idempotent annotation, an agent has all necessary information to call this tool 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 has 100% parameter description coverage, including nested fields like month, balance, symbol, etc. The description does not add parameter-level details beyond the schema; it repeats 'single account' which is already implied by account_id. Since the schema fully covers semantics, the baseline 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 'Create or update monthly balance history entries for a single account' - a specific verb-resource pair with scope (single account). It distinguishes from sibling balance-history tools by the upsert verb and explicit single-account focus, making its purpose unmistakable.

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 clear operational context: it is for a single account, monthly entries, past months only, and all-or-nothing. However, it does not explicitly state when to prefer this tool over upsert_crypto_synced_balance_history or unlike get/delete tools. The schema's account_type description notes the crypto_synced alternative, but the description itself stops short of explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upsert_budgetA
Idempotent

Create or update a budget for a category and budget period. The start_date must be a valid budget period start for the account (see get_budget_settings).

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoOptional notes for the budget period.
amountYesBudget amount.
currencyNoThree-letter lowercase currency code (defaults to primary currency).
start_dateYesBudget period start date in YYYY-MM-DD format. Must be a valid budget period start; if not, the API returns the previous and next valid start dates.
category_idYesCategory ID for the budget.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate idempotentHint=true. The description adds useful behavior about start_date validation and error response returning alternative dates, which is 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 two concise sentences. The first states the purpose, the second gives a key constraint. No unnecessary words.

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 description explains the date validation but does not mention what the response contains (e.g., the budget object) or how updates work (e.g., combining category_id and start_date). For a tool with no output schema, this leaves 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?

Schema description coverage is 100%, so baseline is 3. The description adds the hint to see get_budget_settings for start_date, providing marginal extra value but not significantly enhancing understanding.

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 or update a budget for a category and budget period', specifying the verb and resource. This distinguishes it from sibling tools like 'remove_budget' and 'get_budget_settings'.

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 advises that start_date must be a valid budget period start and refers to get_budget_settings for finding valid dates. This provides context for when to use the tool, though it lacks explicit exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upsert_crypto_synced_balance_historyA
Idempotent

Create or update monthly balance history entries for a synced crypto holding. Every month must be a past calendar month. If an entry sets symbol, it must match the symbol argument. The request is all-or-nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesTicker symbol of the holding within the account (e.g. eth).
balancesYesOne or more monthly balance entries to create or update. If any entry fails validation the entire request is rejected and nothing is updated.
account_idYesId of the synced crypto account.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses significant behavioral traits beyond the idempotentHint annotation: all-or-nothing atomicity, symbol matching requirement, and past-month validation. These are critical for safe and correct invocation and do not contradict 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 three concise sentences with no filler. It front-loads the purpose first and then lists essential constraints, earning every sentence's 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 a complete schema and idempotent annotation, the description covers all necessary behavioral context: operation type, temporal constraint, validation rule, and transaction atomicity. No critical invocation details are 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?

Schema coverage is 100%, so baseline is 3. The description adds cross-parameter constraints (symbol must match the argument) and array-level atomicity, which are not fully captured in the schema, providing meaningful additional parameter semantics.

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 uses a specific verb+resource+scope: 'Create or update monthly balance history entries for a synced crypto holding.' It clearly distinguishes this from siblings like upsert_account_balance_history by specifying 'synced crypto holding' and adds key constraints.

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?

Clear context is provided ('synced crypto holding' and 'past calendar month') and the all-or-nothing behavior gives important usage guidance. However, it does not explicitly name alternative tools for other account types or state when not to use this tool, so it falls short of a perfect score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

B3.4/5.0
Disambiguation3/5

Most tools target distinct resources, but the balance history family (get_balance_history, get_account_balance_history, get_crypto_synced_balance_history, delete_account_balance_history, delete_balance_history_entry) has overlapping boundaries that could confuse agents. Bulk vs singular transaction tools also require careful reading to avoid misapplication.

Naming Consistency4/5

Tool names overwhelmingly follow a verb_noun pattern (get_user, create_tag, update_transaction, delete_category). Minor deviations like trigger_plaid_fetch and attach_file_to_transaction break the pattern but are still readable and predictable.

Tool Count2/5

50 tools is very high for an agent to navigate, even for a full API wrapper. Many tools are highly specific (e.g., update_deleted_account_details, delete_crypto_synced_balance_history), suggesting the server prioritizes exhaustive coverage over usability.

Completeness3/5

The surface covers core CRUD for transactions, categories, tags, budgets, accounts, and balance history. However, there are no write operations for recurring items, and no rule management at all, which are notable gaps in the LunchMoney feature set.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    An MCP server that lets AI assistants interact with your Lunchmoney data, enabling natural language queries about transactions, budgets, and spending patterns.
    4
    16
    27
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A Model Context Protocol server that allows AI assistants to interact with Lunch Money accounts, enabling management of transactions, categories, budgets, and other financial data through natural language commands.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables AI assistants to interact directly with Lunch Money's financial API, allowing users to query transactions, access budget information, and perform financial analysis through natural language.
  • A
    license
    B
    quality
    C
    maintenance
    An MCP server providing full integration with the Lunch Money API to manage financial data including transactions, budgets, assets, and categories. It enables AI assistants to perform CRUD operations on financial records through a standardized HTTP interface.
    26
    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/akutishevsky/lunchmoney-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server