FinLynq
OfficialThis is FinLynq's MCP server: a read/write personal-finance API with 54 HTTP / 89 stdio tools for querying and managing accounts, transactions, budgets, goals, loans, portfolio, subscriptions, rules, imports, FX, and more.
Accounts & net worth: get account balances, net worth and trends, spending trends, income statements, weekly recaps, spotlight items, spending anomalies, cash-flow forecasts, and financial health scores.
Budgets: view budget summaries, create/update budgets, delete budgets.
Transactions: search, record, update, delete transactions; bulk record/update/delete; add/update/delete splits; record and update transfers; create and apply auto-categorization rules.
Goals & loans: create/update/delete financial goals; list loans, add/update/delete loans, view amortization schedules, and compare debt payoff plans.
Portfolio: add/update/delete holdings, get portfolio analysis and performance, trace holding quantities, and get investment insights.
Subscriptions: detect, list, add, update, delete subscriptions, and get subscription summaries.
FX: get FX rates, convert amounts, list/set/delete manual FX overrides.
Imports: preview/execute/cancel file imports, list pending uploads, manage import templates, import via CSV string, and use staged-import, bank-ledger, and reconciliation workflows (HTTP MCP).
Help: discover available tools, schemas, examples, and usage via the built-in help tool.
Finlynq
Two ways to use Finlynq: a free managed cloud at finlynq.com/cloud, or self-host with Docker.
Open-source personal finance with a first-party MCP server (54 HTTP / 89 stdio tools) so Claude, ChatGPT, Cursor, etc. can query and manage your finances.
Track your money here, analyze it anywhere.
Quick start — hosted
finlynq.com/cloud — click, register, import a CSV. No infra to manage.
A public demo lives at finlynq.com/cloud?demo=1 (credentials pre-filled, resets nightly). Connect it to Claude by pasting https://finlynq.com/mcp into Claude → Customize → Connectors.
Related MCP server: pocketledger
Quick start — self-hosted
curl -O https://raw.githubusercontent.com/finlynq/finlynq/main/docker-compose.yml
docker compose up -dBefore the first up, create a sibling .env file with three secrets, each generated with openssl rand -hex 32: PF_JWT_SECRET, PF_PEPPER (≥32 chars), and PF_STAGING_KEY (≥32 chars). Compose fails fast with a clear message if any is missing. Then open http://localhost:3000 and register. App + PostgreSQL run in Docker; sensitive fields are encrypted at rest with a per-user key derived from the account password. Change the default PostgreSQL password (POSTGRES_PASSWORD in .env) before exposing the container to anything but localhost. Full setup notes at finlynq.com/self-hosted.
Features
100+ MCP tools (HTTP & stdio) — read & write
AES-256-GCM envelope encryption · scrypt-derived KEK
CSV, Excel, OFX/QFX, PDF import
Budgets, portfolio, goals, loans
Natural-language AI chat
FIRE calculator & Monte Carlo sim
Rules & auto-categorize
Self-host or managed cloud
REST API + MCP (HTTP & stdio · OAuth 2.1 + DCR)
Dark mode, mobile-friendly UI
MCP server
First-party Model Context Protocol server with 54 HTTP / 89 stdio tools covering accounts, transactions, budgets, goals, loans, portfolio, subscriptions, FX rates, rules, splits, bulk edits, and file imports.
Claude Web / Mobile / Cursor / Windsurf — OAuth 2.1 + Dynamic Client Registration. Paste
https://finlynq.com/mcpinto the connector setup; no config file.Claude Desktop (stdio) — point at
mcp-server/index.tswithPF_USER_IDin the env block.Bearer API key — generate a
pf_*token in Settings → API Keys. Works for the MCP endpoint and for the REST routes under/api/. Note that apf_*key is unscoped and does not expire until you regenerate it, so treat it as full access to your account; the REST surface is what the web and mobile apps consume and its response shapes are not a stability guarantee — MCP is the supported integration surface.
Submitted to the Anthropic Connectors Directory on 2026-05-09. Full client setup, tool catalog, and the brokerage-statement recipe live in the Connect Your AI guide.
License
AGPL v3. If you run a modified version as a network service, you owe your users the source. The hosted offering at finlynq.com/cloud runs the same code as this repo.
Building something on Finlynq that can't carry that obligation? A commercial license is available, see COMMERCIAL.md.
Donation-based. No paid tiers. If Finlynq is useful to you, GitHub Sponsors or Ko-fi keep it shipping.
Docs
CHANGELOG.md — reverse-chronological log of every shipped change
docs/getting-started.md — first-run setup walkthrough
docs/faq.md — common questions
docs/mobile-setup.md — connect the companion mobile app
Connect Your AI guide — MCP architecture, tool catalog, and per-client setup
CONTRIBUTING.md — branching, commit style, PR flow
SECURITY.md — vulnerability disclosure
Available Tools
89 toolsadd_accountB
Create a new financial account
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Account name (must be unique) | |
| note | No | ||
| type | Yes | 'A'=asset, 'L'=liability | |
| alias | No | Optional short alias used to match the account when receipts or imports reference it by a non-canonical name (e.g. last 4 digits of a card, or a receipt label). | |
| group | No | Account group | |
| currency | No | Currency (defaults to your display currency) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint: false, destructiveHint: false), and the description does not disclose behaviors beyond the basic creation, such as uniqueness enforcement or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence, but it could be more informative without losing conciseness, such as noting required fields or defaults.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and six parameters, the description is minimal; it fails to explain return values, validation (e.g., unique name), or what happens on success.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (83%), so the description adds no meaningful parameter detail beyond what the schema already provides; the 'note' parameter lacks a description, but the description does not compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a new financial account' uses a specific verb and resource, clearly distinguishing it from sibling tools like update_account or delete_account.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternative guidance is provided; it is implied that this tool is for creating accounts, but no exclusions or comparisons are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_goalA
Create a new financial goal. Refused on stdio (Stream D Phase 4 — no DEK).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Goal name | |
| type | Yes | Goal type | |
| account | No | Legacy single-account linker — name or alias (fuzzy matched). Use HTTP MCP for multi-account. | |
| deadline | No | Deadline (YYYY-MM-DD) | |
| account_ids | No | Multi-account linker (issue #130). Refused on stdio — use HTTP MCP. | |
| target_amount | Yes | Target amount |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate no destructive or idempotent hints; the description adds that the tool is refused on stdio (Stream D Phase 4) due to no DEK, providing useful environmental context without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The first states the action, the second adds critical usage restriction. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description omits mention of return values. While parameter descriptions are rich, the tool description itself lacks completeness regarding expected results or prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with parameter descriptions. The tool description adds value by noting the refusal of account_ids on stdio and labeling account as legacy, which aids selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new financial goal,' providing a specific verb and resource. This effectively distinguishes it from sibling tools like update_goal and delete_goal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions refusal on stdio and hints at HTTP MCP for multi-account, but lacks explicit guidance on when to use this tool vs. 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.
add_loanC
Create a new loan
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| note | No | ||
| type | Yes | ||
| account | No | Linked account — name or alias (fuzzy matched against name; exact match on alias) | |
| principal | Yes | ||
| start_date | Yes | ||
| annual_rate | Yes | ||
| min_payment | No | ||
| term_months | Yes | ||
| extra_payment | No | ||
| payment_amount | No | ||
| payment_frequency | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show readOnlyHint:false and destructiveHint:false, but description adds no behavioral details beyond 'Create', e.g., side effects, permissions, or uniqueness constraints. Contradicts nothing but adds minimal value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise at 4 words, which is efficient but slightly under-informed. It's front-loaded and to the point, but could expand to add value without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 params, 6 required, no output schema), the description is incomplete. It lacks context about the loan creation process, required account, or default behaviors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 12 parameters with only 8% having descriptions. The tool description does not compensate by explaining parameters beyond the schema, leaving most parameters opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Create a new loan', specifying verb and resource. It doesn't distinguish from siblings like 'update_loan' or 'delete_loan', but those are different operations and the purpose is still clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, such as prerequisites like needing an existing account. The description provides no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_portfolio_holdingA
Create a portfolio holding (a single position like 'VEQT.TO' inside a brokerage account). The import pipeline auto-creates these from CSV/ZIP uploads; this tool is for manually adding a position the user wants to track without an import.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name of the holding | |
| note | No | ||
| symbol | No | Ticker symbol (e.g. 'VEQT.TO', 'BTC') | |
| account | Yes | Brokerage account name or alias (fuzzy matched). Required because uniqueness is per (account, name). | |
| currency | No | ||
| isCrypto | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no behavioral hints besides readOnlyHint=false, so the description must carry the burden. It states it creates a holding, which implies mutation, but does not disclose idempotency (false hint), uniqueness constraints, or failure modes. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste. Front-loaded with the core action and a differentiating note. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters and no output schema, the description is minimal. It lacks return value info, error conditions, and prerequisites (e.g., account must exist). Incomplete for a create operation in a complex context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 50% description coverage; the description adds context for 'account' and 'symbol' via examples but neglects 'note', 'currency', and 'isCrypto'. For parameters without schema descriptions, the tool description offers no additional meaning, leaving a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Create a portfolio holding' with a concrete example 'VEQT.TO' and distinguishes from the import pipeline, making its purpose distinct from siblings like update or delete portfolio holding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says this is for manual addition when not using CSV/ZIP imports, providing a clear when-to-use. However, it does not mention prerequisites like account existence or when not to use the tool at all (e.g., if holding already exists).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_snapshotA
Record a net worth snapshot for an asset (e.g. house value, car value). Stream D Phase 4: stdio cannot resolve account names — use HTTP MCP or the web UI.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Snapshot date (defaults to today) | |
| note | No | Optional note | |
| value | Yes | Current value | |
| account | Yes | Account name or alias (refused on stdio — Stream D Phase 4) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description adds no additional behavioral context such as effects on existing data, required permissions, or side effects. It is minimal beyond the annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences front-loading the purpose and critical usage limitation. Every sentence is necessary and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Missing details about the return value (e.g., confirmation or snapshot ID) and does not elaborate on the snapshot date meaning despite schema pattern. For a simple recording tool, 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the description adds context with examples (house value, car value) and notes about account name resolution issues. This meaningfully complements the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'record' and the resource 'net worth snapshot for an asset', with examples like house or car value. This differentiates it from siblings like get_net_worth, which retrieves net worth.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly warns that stdio cannot resolve account names and directs to use HTTP MCP or web UI. This provides clear when-not-to-use guidance and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_splitC
Add a single split to an existing transaction
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| tags | No | ||
| amount | Yes | ||
| account_id | No | ||
| category_id | No | ||
| description | No | ||
| transaction_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, destructiveHint=false) and the description only says 'add' without detailing side effects, permissions, or impact on the transaction. The tool creates a split but does not explain what happens to the parent transaction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, but it is too brief to be helpful. It efficiently states the core function but omits important details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, no output schema, and no parameter descriptions, the description is incomplete. It does not explain what a split is, how it relates to transactions, or any constraints on amounts or categories.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, leaving all 7 parameters undocumented in the schema. The description adds no information about parameters, not even the required transaction_id and amount. This is insufficient for an agent to understand correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add'), the resource ('a single split'), and the context ('to an existing transaction'). It is specific and distinguishes this tool from siblings like 'add_goal' or 'add_account'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as list_splits, update_split, replace_splits, or delete_split. There is no mention of prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_subscriptionC
Create a new subscription
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| notes | No | ||
| amount | Yes | ||
| account | No | Account name or alias (fuzzy matched against name; exact match on alias) | |
| cadence | Yes | ||
| category | No | ||
| currency | No | ||
| next_billing_date | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only restates the action already implied by annotations (readOnlyHint=false indicates write). It does not disclose idempotency, error behaviors, or side effects such as duplicate prevention or billing schedule implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded and contains no fluff. However, it is perhaps too terse given the number of parameters and lack of output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, 4 required, no output schema, and minimal annotations, the description is insufficient. It does not explain return behavior, validation rules, or what constitutes a successful creation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at only 13%, the description should compensate but does not mention any parameter meanings. The schema provides enums for cadence and currency, but the description adds no context for required fields like name, amount, or next_billing_date.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a new subscription' clearly identifies the action (create) and resource (subscription). It distinguishes from sibling tools like list_subscriptions, update_subscription, delete_subscription, and detect_subscriptions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, such as bulk_add_subscriptions or detect_subscriptions. No prerequisites or context for invocation are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_holdingBRead-onlyIdempotent
Deep-dive analysis of a single holding. Stream D Phase 4: stdio cannot decrypt holding/account names — use HTTP MCP or the web UI for this query.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | ||
| holdingId | No | ||
| reportingCurrency | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description's main behavioral contribution is the decryption limitation in stdio. This adds useful context beyond annotations. No mention of other behaviors like data freshness or rate limits, but the safety profile is clear from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first defines the purpose, the second provides a key usage constraint. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 optional parameters, no output schema, and no parameter documentation, the description lacks completeness. It omits return value details, parameter roles, and any example usage, leaving the agent underinformed despite annotations covering safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning no parameter descriptions in the input schema. The description fails to explain the three parameters (symbol, holdingId, reportingCurrency) or their roles, offering no compensation. This is a critical gap for agent invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Deep-dive analysis of a single holding', identifying the tool's specific verb and resource. It distinguishes from portfolio-level tools like `get_portfolio_analysis` by focusing on a single holding, but does not explicitly contrast with other single-holding analysis tools like `trace_holding_quantity`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a situational constraint: 'stdio cannot decrypt holding/account names — use HTTP MCP or the web UI for this query.' This guides usage for different transports but does not advise when to choose this tool over alternatives like `get_portfolio_analysis` or `get_investment_insights`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_rules_to_uncategorizedA
Find uncategorized transactions and apply matching rules to categorize them. FINLYNQ-84: skips rules with side-effect actions (set_account, create_transfer); skipped rules surface in the response.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max transactions to process (default 500) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which show no special hints), the description reveals that rules with side-effect actions (set_account, create_transfer) are skipped and that skipped rules are surfaced in the response. This adds valuable behavioral context, though it doesn't disclose the mutability of the operation or whether changes are reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first provides the core purpose, the second adds a critical behavioral detail. No superfluous words, achieving high information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch operation with no output schema, the description partially explains the response (skipped rules) but lacks overall return format details. It also doesn't relate to sibling categorization tools, leaving the agent to infer use cases. Adequate but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (one parameter with description). The description confirms the limit's role but adds no new semantic value beyond the schema's default mention. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('apply matching rules') and the target resource ('uncategorized transactions'). It is distinct from sibling tools like 'list_rules' or 'create_rule' by specifying the operation and the precondition of uncategorized status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for automatically categorizing uncategorized transactions using existing rules, but it does not explicitly contrast with alternative tools like 'execute_bulk_categorize' or 'suggest_transaction_details'. No 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.
bulk_add_subscriptionsB
Commit a set of detected subscriptions. Pass the candidates from detect_subscriptions + the confirmationToken.
| Name | Required | Description | Default |
|---|---|---|---|
| candidates | Yes | ||
| confirmation_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false (mutation). The description adds only 'Commit' which is obvious. No details on side effects, partial failures, or prerequisites beyond the required parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is direct and front-loaded. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bulk operation, the description lacks information about return values, partial success/failure handling, or validation. No output schema exists, so description should compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description mentions that 'candidates' come from detect_subscriptions, adding context beyond the schema which has 0% coverage. However, it does not describe the format or constraints of each parameter in detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it commits detected subscriptions, and references detect_subscriptions. However, it does not explicitly differentiate from add_subscription or list_subscriptions, which are sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Says to pass candidates from detect_subscriptions and confirmationToken, implying a workflow. But no explicit guidance on when not to use this tool (e.g., for single subscriptions) and no mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_record_transactionsC
Record multiple transactions at once (stdio — REFUSED). Stream D Phase 4: stdio cannot resolve account/category names without a DEK and the helper SELECTs that fuzzy-match names hit dropped plaintext columns. Use HTTP MCP at /mcp (full feature set) or the web UI.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | ||
| account_id | No | ||
| transactions | Yes | Array of transactions to record | |
| idempotencyKey | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false. The description adds the stdio limitation and mentions DEK and dropped columns, but lacks details on return behavior, effects, or error conditions, especially given no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise with two sentences that front-load the primary purpose. It avoids unnecessary details, though the stdio limitation could be condensed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters (including a nested array), 1 required, and no output schema, the description is incomplete. It omits success/error semantics, usage of dryRun, idempotencyKey, and account_id, leaving critical gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, and the description adds no explanation of the parameters (dryRun, account_id, transactions, idempotencyKey). The text focuses on the stdio issue instead of clarifying parameter meaning, leaving the agent underinformed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Record multiple transactions at once' which is a specific verb and resource. It distinguishes from sibling 'record_transaction' by implying bulk, though not explicitly. The stdio refusal context adds clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to use HTTP MCP or web UI instead of stdio, providing clear environment-based guidance. However, it does not discuss when to use this tool versus alternatives like record_transaction or other bulk tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_importADestructive
Cancel a pending MCP upload — marks the row as cancelled and deletes the file.
| Name | Required | Description | Default |
|---|---|---|---|
| upload_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as destructive, and the description adds specific behaviors: marks as cancelled and deletes the file. Consistent with annotations, adds useful context beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, well-structured sentence that front-loads the core action and consequences. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and clear action, the description covers the essentials. Absence of output schema or return value info is acceptable given the destructive nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not explain the sole parameter 'upload_id' beyond its type. The meaning and required format are left to the agent to infer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Cancel', the specific resource 'pending MCP upload', and the actions performed (marks cancelled, deletes file). It distinguishes from sibling tools like preview_import and execute_import.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for pending uploads that need cancellation but does not explicitly state when to use it versus alternatives or any prerequisites. Lacks explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_amountARead-onlyIdempotent
Convert an amount from one currency to another using triangulated FX rates
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | ||
| date | No | ||
| from | Yes | ||
| amount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true, so the description adds value by specifying 'triangulated FX rates', which implies internal conversion via a base currency. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 12 words, front-loading the core action and resource. No unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and low schema coverage, the description lacks crucial details such as the return format (e.g., converted amount or object), error handling for invalid currencies, and the role of the 'date' parameter for historical rates. The annotations partially compensate for safety, but not for functional completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only vaguely references 'amount', 'from', and 'to' without explaining their semantics or constraints. The optional 'date' parameter is not mentioned at all, despite having a regex pattern in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific action ('Convert an amount') and resource ('from one currency to another'), and includes the method ('using triangulated FX rates'). It clearly distinguishes from sibling tools like 'get_fx_rate' which only retrieves rates, not conversions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates when to use this tool (for actual amount conversion) vs sibling tools (e.g., 'get_fx_rate' for just the rate). However, it does not explicitly state when not to use it or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_categoryC
Create a new transaction category
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Category name (must be unique) | |
| note | No | ||
| type | Yes | 'E'=expense, 'I'=income, 'R'=transfer | |
| group | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description simply says 'Create', which implies mutation. Annotations indicate readOnlyHint=false and destructiveHint=false, which are consistent. However, no additional behavioral details are disclosed, such as whether existing categories with the same name cause an error or if there are limits on creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise. However, it lacks structure and could be expanded to include important details without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, 2 required, and no output schema, the description is too minimal. It does not explain what happens after creation (e.g., returns the created category) or any side effects, which is needed for complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 50% schema description coverage, the description adds no parameter information. It does not explain the meaning or constraints beyond what is already in the schema, such as the uniqueness requirement for name or the semantics of 'group'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (create) and the resource (transaction category). It is specific enough to convey the tool's function. However, it does not highlight any unique aspects that distinguish it from sibling tools like delete_category or other creation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, constraints, or situations where this tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ruleA
Create an auto-categorization rule for future imports. Stream D Phase 4 (stdio): pass assign_category_id (numeric) — assign_category (name) is refused.
| Name | Required | Description | Default |
|---|---|---|---|
| priority | No | Default 0 | |
| rename_to | No | ||
| assign_tags | No | ||
| match_payee | Yes | Payee pattern (supports % wildcards) | |
| assign_category | No | REFUSED on stdio (Stream D Phase 4). Pass `assign_category_id` instead. | |
| assign_category_id | No | Category FK (categories.id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate no readOnly, idempotent, or destructive hints. The description adds the note about assign_category being refused on stdio, but does not disclose side effects like immediate activation, permissions required, or whether existing transactions are affected. Behavioral transparency is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that start with the primary purpose and immediately add a critical implementation detail. No redundant information, and the structure is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose and a key parameter nuance, but lacks details on post-creation behavior, wildcard usage in match_payee, or how to confirm rule activation. Given no output schema and six parameters, it is somewhat incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 67% schema coverage, the description adds value by clarifying the relationship between assign_category and assign_category_id, and the default value for priority. This goes beyond the schema, making parameter usage clearer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create' and the resource 'auto-categorization rule' with the scope 'for future imports'. It distinguishes this tool from siblings like update_rule, delete_rule, and test_rule by specifying the action and timing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use assign_category_id over assign_category, especially for Stream D Phase 4. However, it does not contrast with other rule-related tools beyond that, missing opportunities to exclude alternatives like update_rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_accountADestructiveIdempotent
Delete an account by id (only if it has no transactions, unless force=true). Stream D Phase 4 (stdio): pass account_id (numeric) — account (name) is refused.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| account | No | REFUSED on stdio (Stream D Phase 4). Pass `account_id` instead. | |
| account_id | No | Account FK (accounts.id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: it explains the conditional deletion (only if no transactions unless force=true) and the stdio protocol restriction. This aligns with the destructiveHint=true and idempotentHint=true annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, and every word adds value. No redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential usage, conditions, and parameter guidance. For a destructive tool without output schema, it provides sufficient context for an AI agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides a concise explanation of the 'account_id' and 'account' parameters, reinforcing the schema descriptions. It adds value by clarifying the stdio context, but the schema already covers 67% of parameters with descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete an account by id' and includes the condition about transactions and force flag, distinguishing it from sibling delete tools for other entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies when to use (delete account) and includes a note about the 'account' parameter being refused on stdio, guiding the agent to use 'account_id' instead. However, it does not explicitly contrast with other delete tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_budgetADestructiveIdempotent
Delete a budget entry for a category/month. Stream D Phase 4 (stdio): pass category_id (numeric) — category (name) is refused.
| Name | Required | Description | Default |
|---|---|---|---|
| month | Yes | Month (YYYY-MM) | |
| category | No | REFUSED on stdio (Stream D Phase 4). Pass `category_id` instead. | |
| category_id | No | Category FK (categories.id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds useful behavioral context: the category parameter is refused on stdio and category_id must be used. It does not cover what happens if the budget entry does not exist, but overall adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that front-load the purpose immediately and then deliver a crucial usage caveat. Every word serves a purpose with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately covers essential behavior for a delete tool. It could mention prerequisites (e.g., budget entry must exist) or error handling, but the combination with annotations and high schema coverage makes it fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description provides critical parameter semantics: it clarifies that category is refused and category_id should be used instead. This goes beyond the schema's own description for the category field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a budget entry for a category/month.' It uses a specific verb (delete) and resource (budget entry), and distinguishes from sibling tools like set_budget (create/update) and get_budget_summary (read).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides specific guidance: 'Stream D Phase 4 (stdio): pass category_id (numeric) — category (name) is refused.' This clearly advises which parameter to use and warns against using the category name. However, it does not explicitly compare to alternatives like delete_category for deleting entire categories.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_categoryADestructiveIdempotent
Delete a category by id. Refuses if any transactions/rules/subscriptions still reference it. Stream D Phase 4 (stdio): the name parameter is refused — pass id (numeric). confirmation_token is optional on stdio (mirrors the HTTP envelope but not strictly required since the operation already takes an explicit numeric id).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Category FK (categories.id). | |
| name | No | REFUSED on stdio (Stream D Phase 4). Pass `id` instead. | |
| confirmation_token | No | Optional token from HTTP preview_delete_category (5-min TTL). Stdio accepts the call without one — the FK refuse-check is enforced unconditionally. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Builds on annotations (destructiveHint=true, idempotentHint=true) by describing the refusal behavior when dependencies exist. Also explains parameter-level behavior (name refused, confirmation_token optional). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no fluff. The first sentence states the core purpose immediately, and the remaining two add essential contextual details. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a deletion operation, but lacks explicit mention of return value or success/error behavior. The purpose of 'confirmation_token' is mentioned but not fully explained. The description is functional but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), but description adds significant value: clarifies that 'name' parameter is refused on stdio and that 'confirmation_token' is optional despite being part of the schema. This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Delete a category by id' with specific verb and resource. Distinguishes itself from sibling delete tools (e.g., delete_subscription, delete_account) by mentioning the refusal condition when referenced by transactions/rules/subscriptions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: refuses if category is still referenced, advises using 'id' instead of 'name' on stdio, and clarifies that confirmation_token is optional. Lacks direct comparison to alternatives like updating instead of deleting, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_fx_overrideADestructiveIdempotent
Delete a manual FX rate override by id
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true and idempotentHint=true, signaling destructive but idempotent behavior. The description adds only 'by id' but no additional context (e.g., authorization needed, what happens if id not found). With annotations covering the safety profile, the description contributes minimally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, complete sentence with no superfluous words. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with one parameter and annotations providing destructive and idempotent hints, the description is mostly adequate. It lacks return value or error details, but given no output schema and the straightforward nature, it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must clarify the parameter. It only says 'by id', implying the id is an identifier, but does not specify its meaning (e.g., FX override id from list_fx_overrides) or format. The agent lacks guidance on how to obtain the id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a manual FX rate override by id', specifying the action, resource, and method. It distinguishes from sibling tools like set_fx_override or list_fx_overrides, which handle create/update or read operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool vs alternatives. It does not mention prerequisites, typical workflow, or scenarios where deletion is appropriate. Sibling tool names are listed but not referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_goalADestructiveIdempotent
Delete a financial goal by id. Stream D Phase 4 (stdio): pass goal_id (numeric) — goal (name) is refused.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | REFUSED on stdio (Stream D Phase 4). Pass `goal_id` instead. | |
| goal_id | No | Goal FK (goals.id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and idempotent behavior. The description adds context about the stream-dependent parameter refusal, which is useful beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with action and resource, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with fully described parameters and no output schema, the description covers all necessary context including the stream nuance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions. The description adds value by explaining the stdio restriction on the `goal` parameter and reinforcing the numeric nature of `goal_id`.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Delete) and the resource (a financial goal). It specifies the key parameter `goal_id` and distinguishes this tool from siblings like add_goal and update_goal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on using `goal_id` instead of `goal` on stdio, which helps the agent choose the correct parameter. It implies this is the only way to delete a goal, but does not mention when not to use it or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_loanBDestructiveIdempotent
Delete a loan by id
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true, so the description adds minimal behavioral context beyond confirming deletion. It does not discuss permanence, cascading effects, or error states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at 4 words, front-loading the verb and resource without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with one param and no output schema, the description is minimally adequate but could include a note on effects (e.g., permanent deletion) or success/error behavior. Sibling delete tools have similar brevity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description only mentions 'by id' for the single required parameter. It does not clarify that the ID is the loan's numeric identifier obtainable from list_loans, leaving ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Delete a loan by id' clearly states the action (delete), the resource (a loan), and the mechanism (by id), distinguishing it from siblings like add_loan or update_loan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool or alternatives is provided. The description does not indicate prerequisites, such as first using list_loans to obtain the ID, or when to prefer other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_portfolio_holdingADestructiveIdempotent
Delete a portfolio holding. Transactions referencing it survive — the FK is set to NULL automatically (no data loss; they fall back to the orphan-aggregation path until reassigned).
| Name | Required | Description | Default |
|---|---|---|---|
| holding | Yes | Holding name OR symbol (fuzzy matched) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds valuable context: transactions survive, no data loss, and fallback to orphan-aggregation path. This goes beyond the annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the action, the second explains the impact. It is concise and front-loaded with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully explains the effect of the tool (what happens to transactions) and the parameter is well-defined in the schema. It is complete for a delete operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already describes the parameter as 'Holding name OR symbol (fuzzy matched)'. The description does not add additional meaning to the parameter, so baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a portfolio holding' with a specific verb and resource. It also explains the behavioral nuance about transactions surviving, which distinguishes it from siblings like update or add holding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that transactions referencing the holding survive with FK set to NULL, indicating when to use (delete while preserving transactions). However, it does not explicitly state when not to use or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_ruleBDestructiveIdempotent
Delete a transaction rule by id
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the description adds no extra behavioral context. It does not contradict the annotations, but also does not elaborate on any side effects or requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence. It is efficient but could benefit from slightly more detail without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with one parameter, the description minimally covers what the tool does. Annotations fill in safety context. However, it does not mention that the id must correspond to an existing rule or what happens upon deletion.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description only mentions 'by id' without adding any meaning beyond the schema's property definition. No constraints, format, or semantics are clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete' and the resource 'transaction rule', and specifies the identifier 'by id'. It effectively distinguishes from sibling tools that delete other resources like subscriptions or splits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool vs alternatives such as update_rule or list_rules. No prerequisites, exclusions, or context for invocation are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_splitBDestructiveIdempotent
Delete a split by id
| Name | Required | Description | Default |
|---|---|---|---|
| split_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true. The description adds no new behavioral context beyond confirming deletion. Adequate but no extra detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 5 words, very concise. However, brevity sacrifices useful detail; still well-structured for a simple operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with one parameter and no output schema. Description is minimal but covers the basic action. Lacks error handling, return value, and differentiation from sibling delete tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. It only mentions 'by id' without clarifying what split_id represents, its format, or constraints. Insufficient for a parameter without schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Delete' and resource 'split', with the identifier 'by id'. It distinguishes from siblings like list_splits (read), add_split (create), and update_split (modify).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., update_split, replace_splits). No context or exclusions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_subscriptionBDestructiveIdempotent
Permanently delete a subscription by id
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true and idempotentHint=true. The description adds 'permanently', reinforcing the destructive nature, but does not disclose additional behavioral details (e.g., cascading effects, permissions required).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no superfluous words. It is front-loaded with the key action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (one parameter, no output schema) and the presence of annotations, the description is nearly adequate but lacks details on error behavior or what happens post-deletion. It meets a minimal standard.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description only mentions 'by id' without explaining what the id represents or constraints on its value. The agent must infer the format and source from context alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('permanently delete') and the resource ('subscription by id'), making the tool's purpose unambiguous. It is specific and distinguishes it from other delete tools by resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, such as when to delete a subscription vs. update or disable it. No preconditions or contexts are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_transactionADestructiveIdempotent
Permanently delete a transaction by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Transaction ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description specifies that the deletion is permanent, which adds behavioral context beyond the annotations' destructiveHint=true and idempotentHint=true. However, it does not disclose potential side effects like cascading deletions or permissions needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant words. It is front-loaded and efficiently conveys the core action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter, no output schema, and a straightforward destructive operation, the description is complete. It states the action, permanence, and identification method without unnecessary detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'id' is described in the input schema with equivalent detail. The description adds no additional meaning beyond what the schema already provides, and schema coverage is 100%, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (delete), resource (transaction), and method (by ID). This distinguishes it from sibling delete tools for other resources like delete_subscription or delete_split.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when wanting to delete a transaction, but does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. For a simple delete, the purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_transferADestructiveIdempotent
Permanently delete BOTH legs of a transfer pair in one statement. Identify by linkId OR by either leg's id.
| Name | Required | Description | Default |
|---|---|---|---|
| linkId | No | ||
| transactionId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations: it specifies that both legs are deleted and mentions identification methods. It does not contradict annotations (destructiveHint=true is consistent) and supplements the idempotentHint with operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words, front-loading the action and essential identification info.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no output schema, the description covers the main action and identification, but could mention irreversibility or error conditions for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description compensates by indicating that either linkId or transactionId can identify the transfer. However, it does not explain the relationship between parameters or their exact roles (e.g., transactionId is a leg's id).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'delete', the resource 'transfer pair', and specifies it deletes both legs. It also explains identification methods (by linkId or leg id), distinguishing it from siblings 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for deleting both legs of a transfer in one operation, suggesting efficiency over deleting legs individually, but lacks explicit when-not-to-use guidance or direct alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_subscriptionsARead-onlyIdempotent
Scan recent transactions and return candidate subscriptions with regular cadence + stable amount. Returns a confirmationToken for bulk_add_subscriptions.
| Name | Required | Description | Default |
|---|---|---|---|
| lookback_months | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description carries a lower burden. It adds that the tool returns candidate subscriptions and a confirmationToken, which is helpful but not deeply detailed (e.g., no mention of whether the tool modifies state or requires specific permissions).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the primary action, and contains no redundant words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, clear output token), the description covers the essential functionality and return value. It is complete enough for an agent to understand the tool's purpose, though it could mention default behavior for lookback_months.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate. It mentions 'recent transactions' which implicitly relates to the lookback_months parameter, but does not explicitly explain the parameter's meaning or effect. The description fails to fully clarify the parameter's usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action ('Scan recent transactions'), the resource ('subscriptions'), and the criteria ('regular cadence + stable amount'). It distinguishes itself from sibling tools like list_subscriptions (which lists existing ones) and bulk_add_subscriptions (which uses the token).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the return value is a 'confirmationToken for bulk_add_subscriptions', which provides clear context for the tool's role in a workflow. However, it does not explicitly state when to use this detection tool versus alternatives like list_subscriptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_bulk_categorizeA
Commit a bulk-categorize. Must be preceded by preview_bulk_categorize.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | Yes | ||
| category_id | Yes | ||
| confirmation_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false (not read-only). The description confirms it commits, which is expected. No additional behavioral traits (e.g., side effects, permissions) are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that front-load the core purpose and prerequisite. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has three required parameters (including a nested 'filter' object) and no output schema, but the description provides no details about these parameters or the return value, making it incomplete for complex invocations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain any parameters, leaving the agent to infer meaning solely from names and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Commit') and the resource ('bulk-categorize'), and distinguishes from siblings by specifying the prerequisite preview_bulk_categorize.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states it must be preceded by preview_bulk_categorize, providing a clear prerequisite. However, no alternative tools or exclusion criteria are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_bulk_deleteADestructiveIdempotent
Commit a bulk delete. Must be preceded by preview_bulk_delete.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | Yes | ||
| confirmation_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and idempotent. The description adds the ordering constraint but little else regarding behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no redundancy, front-loading the key action and prerequisite.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Does not describe return values or success/error outcomes, and lacks explanation for the required parameters; given no output schema, more context is needed for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no descriptions (0% coverage), and the description does not explain the purpose of the filter or confirmation_token parameters, leaving the agent to infer from names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (commit) and resource (bulk delete), and distinguishes from preview_bulk_delete by noting it's the commit step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states that it must be preceded by preview_bulk_delete, providing a clear precondition and usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_bulk_updateA
Commit a bulk update. Must be preceded by preview_bulk_update with the same filter+changes. Returns { updated, unappliedChanges } where each unappliedChanges entry is { field, requestedValue, reason }. Stdio-accepted changes keys: category_id, category (name), account_id, date, note, payee, is_business, tags. Aborts (no commit) when ALL requested changes failed to resolve.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | Yes | ||
| changes | Yes | ||
| confirmation_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes return value structure and abort condition. Annotations indicate mutation (readOnlyHint false, destructiveHint false) but no contradiction. Adds context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, front-loaded with key action and precondition. Four sentences cover essential details without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Describes changes keys and return format, but filter and confirmation_token are under-documented. No output schema, so return info is helpful but still incomplete for a complex tool with nested objects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. Description only lists accepted changes keys, but does not explain filter or confirmation_token parameters. Missing key information for agent usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Commit a bulk update.' and differentiates from preview_bulk_update by specifying it must be preceded by it. The verb 'commit' and resource 'bulk update' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Must be preceded by preview_bulk_update with the same filter+changes', providing a clear precondition. Also explains abort behavior. Does not discuss when to avoid, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_importC
Commit an uploaded file. Stream D Phase 4: stdio cannot resolve account/category names without a DEK — refused entirely. Use HTTP MCP at /mcp or the web UI.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | No | ||
| upload_id | No | ||
| template_id | No | ||
| column_mapping | No | ||
| confirmation_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include destructiveHint=false, but the description does not clarify what 'commit' entails (e.g., whether it modifies data permanently) beyond stating it's an upload commit. The note about stdio is a transport limitation, not behavioral disclosure. No additional behavior is explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but includes irrelevant debugging information ('Stream D Phase 4: stdio cannot resolve...') that does not aid tool usage and wastes tokens. The core message is buried under technical jargon.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, nested objects, no output schema) and low schema coverage, the description is severely incomplete. It fails to explain prerequisites, return values, the commit process, or how to obtain the required confirmation_token. An AI agent lacks sufficient context to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 5 parameters with 0% schema description coverage. The description provides no explanation of any parameter (e.g., confirmation_token, file_path, column_mapping). The agent receives no guidance on parameter meaning or usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Commit an uploaded file,' which clearly identifies the action and resource. It distinguishes from sibling tools like preview_import and cancel_import. However, the additional technical note about Stream D Phase 4 and stdio is confusing and detracts from clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises using HTTP MCP or web UI instead of stdio, providing a usage constraint. However, it lacks explicit guidance on when to use this tool vs. alternatives like import_with_template or preview_import, and no when-not-to-use scenarios are described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finlynq_helpARead-onlyIdempotent
Discover available tools, schema, and usage examples
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | ||
| tool_name | No | Get help for a specific tool |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description 'Discover' aligns with read-only behavior, but it adds no extra information about traits like rate limits, permissions, or the nature of returned content. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a single sentence of six words. It is front-loaded and contains no filler, earning its place by capturing the tool's entire purpose efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (help function with two optional parameters), the description is largely adequate. However, it does not mention what the output or return format looks like, which could be helpful but is not critical for a discovery tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (only tool_name has a description). The description does not add any parameter meaning beyond what is already in the input schema. The topic enum is fully defined in the schema, and tool_name's schema description is minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Discover available tools, schema, and usage examples'. It uses a specific verb 'Discover' and identifies distinct resources, distinguishing it from sibling tools that perform specific financial operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the agent needs to explore available tools or their details, but it does not explicitly state when to use this tool versus alternatives (e.g., for specific task-oriented queries). No exclusions or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_balancesARead-onlyIdempotent
Get current balances for all accounts, grouped by type (asset/liability). Each balance is in its own (account) currency; the response surfaces reportingCurrency for cross-currency context. Stream D Phase 4: stdio cannot decrypt account names — use HTTP MCP or the web UI for this query.
| Name | Required | Description | Default |
|---|---|---|---|
| currency | No | Filter by currency | |
| reportingCurrency | No | ISO code; defaults to user's display currency. Returned as response metadata for cross-currency aggregation context. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds valuable behavioral context: currency handling (each balance in its own currency, reportingCurrency surfaced for cross-currency) and a critical streaming limitation ('stdio cannot decrypt account names'). This goes beyond annotations to inform agent behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each adding unique value: purpose, currency behavior, streaming limitation. No redundant text, front-loaded with core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description should more thoroughly explain the response structure. It mentions grouping and currencies but doesn't specify fields like account names or whether balances are arrays. The decryption note hints at content, but overall, it's adequate but not fully explicit for a medium-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds context for reportingCurrency (returned as response metadata) but adds nothing beyond the schema for the currency parameter. Overall, it provides marginal added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get current balances for all accounts, grouped by type (asset/liability)'. This is a specific verb and resource, and it distinguishes the tool from siblings like get_net_worth or get_budget_summary which serve different financial summary purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly guide when to use this tool over siblings. It includes a note about stdio decryption limitations, which is useful for tool selection context, but lacks direct comparisons or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_budget_summaryARead-onlyIdempotent
Get budget vs actual spending for a specific month. Stream D Phase 4: stdio cannot decrypt category names — use HTTP MCP or the web UI for this query.
| Name | Required | Description | Default |
|---|---|---|---|
| month | Yes | Month in YYYY-MM format | |
| reportingCurrency | No | ISO code; defaults to user's display currency. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds the important behavioral limitation about category name decryption in stdio, which goes beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences. The first sentence states core purpose, and the second adds critical context. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 2 parameters, no output schema, and siblings list, the description covers core function and a key limitation. It could hint at response structure, but is sufficiently complete for the complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions already present. The tool description does not add additional meaning to the parameters beyond what is in the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb ('Get') and resource ('budget vs actual spending for a specific month'), making the purpose distinct from siblings like get_spending_trends or get_income_statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides specific guidance: stdio transport cannot decrypt category names, advising use of HTTP MCP or web UI when full category names are needed. However, it does not explicitly compare with sibling tools like get_spending_trends.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cash_flow_forecastARead-onlyIdempotent
Project cash flow for the next 30, 60, or 90 days based on recurring transactions and current balances
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Forecast horizon in days (default 90) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is clear. The description adds behavioral context by specifying that the forecast is based on recurring transactions and current balances, which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that front-loads the verb and resource. Every word is meaningful and there is no redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers the purpose and data sources. However, it does not specify the return format (e.g., numeric values, chart), which is a minor gap. Still, it is largely complete given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter 'days' is well-described in the schema. The description adds the context of the forecast being based on recurring transactions and balances, but this doesn't significantly enhance the parameter semantics beyond the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool projects cash flow for specific horizons (30, 60, or 90 days) based on recurring transactions and balances. It distinguishes from sibling tools like get_budget_summary or get_spending_trends by focusing on future cash position.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for forecasting cash flow but does not explicitly state when to use this tool versus alternatives or provide exclusion conditions. The context of sibling tools gives some implicit guidance, but no direct when/when-not/alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_categoriesARead-onlyIdempotent
List all available transaction categories. Stream D Phase 4: stdio cannot decrypt category names — use HTTP MCP or the web UI for this query.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive behavior. Description adds crucial transport-specific limitation about decryption, which is beyond annotations. Does not detail output format 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no fluff. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with rich annotations, description is adequate. Missing details about output format but acceptable given simplicity and the transport caveat.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so baseline 4 applies. Schema coverage is 100% trivially. No additional parameter info needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List all available transaction categories' with a specific verb and resource. Distinguishes from siblings like get_account_balances or create_category.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context that stdio transport cannot decrypt names, advising to use HTTP MCP or web UI. Implicitly tells when not to use this tool under stdio, though lacks explicit alternatives for normal use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_debt_payoff_planARead-onlyIdempotent
Compare avalanche vs snowball payoff across all user loans. Loan balances stay in each loan's own currency; reportingCurrency is surfaced as metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| strategy | No | ||
| extra_payment | No | ||
| reportingCurrency | No | ISO code; defaults to user's display currency. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is clear. Description adds valuable context about loan balances staying in original currency and reportingCurrency as metadata, enhancing transparency beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences convey the core function and an important detail. No superfluous words. Well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, and the description does not specify the return format (e.g., plan details, comparison results). While the purpose is clear, an agent might need more context about what data is returned. Adequate for a simple tool but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (33%). Description explains the 'strategy' parameter implicitly but does not clarify 'extra_payment' or 'reportingCurrency' beyond the schema's brief description. The description adds limited value to parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'compare' and the resource 'avalanche vs snowball payoff across all user loans'. Distinguishes from siblings like get_loans and get_loan_amortization. Adds specific context about multi-currency handling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for comparing debt payoff strategies. Does not explicitly state when not to use or provide alternatives, but the context is clear enough given sibling tool names. Could be more explicit about scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financial_health_scoreBRead-onlyIdempotent
Calculate a financial health score. Stream D Phase 4: stdio cannot decrypt category names (used by the budget-adherence component) — use HTTP MCP at /mcp or the web UI.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds a useful note about decryption constraints (stdio cannot decrypt category names) and suggests an alternative interface (HTTP MCP or web UI). This exceeds what annotations provide without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is clear and front-loaded, but the second sentence is verbose and includes technical implementation details that are not concise. It could be reduced to focus on the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should explain what the financial health score represents or its range. It does not, leaving the agent without information about the return value. The presence of many sibling tools also suggests more context would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the description does not need to add parameter semantics. According to guidelines, 0 parameters yields a baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Calculate a financial health score' which is a clear verb+resource, but the following sentences add extraneous technical details about decryption and HTTP MCP that distract from the purpose and may confuse the agent. It does not explicitly distinguish from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool versus alternatives. It mentions a technical limitation regarding decryption but does not clarify usage context or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fx_rateARead-onlyIdempotent
Get the FX rate to convert 1 unit of from into to on date. Cross-rates triangulate through USD; user overrides win.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | ||
| date | No | ||
| from | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and no destructiveness. The description adds value by disclosing that cross-rates triangulate through USD and that user overrides win, which are important behavioral traits beyond the annotations. It does not contradict any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that efficiently convey purpose and key behavior. The first sentence front-loads the core action, while the second adds critical nuance. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no output schema and no parameter descriptions, the description covers the essential purpose and key behavioral context (triangulation, override priority). However, it lacks clarification on the return value format (e.g., numeric rate for 1 unit of from in terms of to) and any assumptions about date handling, leaving minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate. It gives context to 'from', 'to', and 'date' by placing them in a sentence ('convert 1 unit of from into to on date'), indicating their roles. However, it does not specify acceptable formats (e.g., ISO currency codes for from/to) or provide examples, leaving some interpretation to the user.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get the FX rate to convert 1 unit of `from` into `to` on `date`'. It clearly states the action and the inputs, leaving no ambiguity about what the tool does. It also differentiates from sibling tools like convert_amount by focusing on rate retrieval rather than amount conversion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool versus alternatives. It mentions cross-rate behavior and user overrides, but fails to explicitly state when to use get_fx_rate over convert_amount, list_fx_overrides, or set_fx_override. No when-not or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_goalsARead-onlyIdempotent
Get all financial goals. Stdio cannot decrypt names (no DEK on this transport) — name and per-account display names come back null. Each goal carries accountIds: number[] (issue #130 multi-account linking) — use HTTP MCP or the web UI to see decrypted names AND progress numbers (currentAmount, progress, percentComplete, remaining, monthlyNeeded). Stdio doesn't surface progress because the shared helper (issue #233) requires the Drizzle pg client and the holdings-value aggregator, neither of which are wired into the stdio transport.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint. The description adds crucial behavioral details: names return null on stdio transport, progress numbers are not surfaced, and accountIds array is present. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then provides necessary technical details. It is slightly lengthy but each sentence adds value; no redundancy. Could be slightly more concise but still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description comprehensively explains what the tool returns (goals with null names, accountIds) and why. It also notes limitations and alternative tools for richer data, making it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (no parameters), so baseline is 3. The description does not need to add parameter info since there are none. No additional value or deficit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get all financial goals.' The verb and resource are specific, and it distinguishes itself from sibling tools that handle transactions, budgets, accounts, etc., by focusing on goals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool vs alternatives: 'use HTTP MCP or the web UI to see decrypted names AND progress numbers.' It also explains what is missing on stdio transport, providing clear guidance on usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_import_templatesARead-onlyIdempotent
List all saved CSV import templates. Optionally supply comma-separated file headers to get match scores for each template.
| Name | Required | Description | Default |
|---|---|---|---|
| headers | No | Comma-separated CSV column headers to score against templates |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description adds that supplying headers returns match scores, which is behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, front-loaded with the primary purpose. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with one optional parameter and no output schema, the description covers both base functionality and the optional scoring behavior completely. No missing details noted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description explains that the 'headers' parameter is used to get match scores, adding meaning beyond the schema's field description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('List') and a clear resource ('saved CSV import templates'), and optionally describes a secondary function (scoring against headers). It distinguishes itself from sibling tools like 'import_with_template' by focusing on listing rather than importing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing templates and optionally scoring headers, but it does not explicitly state when to use this tool versus alternatives (e.g., preview_import) or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_income_statementARead-onlyIdempotent
Generate income statement for a period. Stream D Phase 4: stdio cannot decrypt category names — use HTTP MCP or the web UI for this query.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | End date (YYYY-MM-DD) | |
| start_date | Yes | Start date (YYYY-MM-DD) | |
| reportingCurrency | No | ISO code; defaults to user's display currency. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds a behavioral trait (inability to decrypt category names via stdio) that annotations do not cover, enhancing transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: purpose and a critical usage caveat. No redundancy, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, and the description does not explain the return structure of the income statement. However, given the tool's name and common knowledge, it is partially complete. Lacks details on what financial data is returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description mentions 'period' indirectly but does not add meaningful semantics beyond what the schema already provides for start_date, end_date, and reportingCurrency.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates an income statement for a period, with a specific verb and resource. It distinguishes from sibling tools like get_budget_summary or get_net_worth.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly warns against using with stdio transport for category decryption and directs to HTTP MCP or web UI, providing clear when-not-to-use and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_investment_insightsCRead-onlyIdempotent
Portfolio-level investment analytics. Stream D Phase 4: stdio cannot decrypt holding names — use HTTP MCP or the web UI for this query.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| targets | No | ||
| benchmark | No | ||
| reportingCurrency | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds a notable behavioral trait: that stdio transport cannot decrypt holding names, which is a valuable context for the agent. However, it does not disclose other potential behaviors like response format or error conditions. Overall, adequate beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, no wasted words. The first sentence states the purpose, the second adds a key limitation. It is front-loaded with the main action. However, it could be slightly more structured (e.g., parameter descriptions) without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters (including a nested array), no output schema, and the description clarifies neither parameters nor return values, the description is incomplete. The annotation provides safety info, but the agent would not know what insights are returned or how to use parameters effectively. The limitation info helps a bit, but overall insufficient for a tool with this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the description provides no information about the four parameters (mode, targets, benchmark, reportingCurrency). The parameter names and types are in the schema, but their semantics are completely unexplained. For a tool with multiple parameters including a nested array, this is a critical gap. The description must compensate but fails to do so.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Portfolio-level investment analytics' which clearly indicates the tool provides aggregated insights about investments. However, it does not differentiate from sibling tools like get_portfolio_analysis or get_portfolio_performance, which likely have similar scopes. The mention of 'decrypt holding names' gives a hint of the data involved, but overall purpose is adequately communicated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a limitation (stdio cannot decrypt holding names) and suggests using HTTP MCP or web UI instead. This provides some context on when to use this tool, but it lacks explicit comparisons to sibling tools or guidance on when to choose this over others. No when-not-to-use scenarios are described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_loan_amortizationARead-onlyIdempotent
Full amortization schedule for a loan. Amounts are in the loan's own currency; the response surfaces both the loan currency and reportingCurrency for context.
| Name | Required | Description | Default |
|---|---|---|---|
| loan_id | Yes | ||
| as_of_date | No | YYYY-MM-DD (default: today) | |
| reportingCurrency | No | ISO code; defaults to user's display currency. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations that declare read-only and idempotent behavior, the description adds significant context: amounts are in the loan's own currency and the response includes both loan currency and reportingCurrency. This helps the agent understand currency handling without needing to call the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the primary purpose. Every word adds value with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters and no output schema, the description gives the core output type (amortization schedule) and currency context. However, it omits details like the schedule's temporal range (per payment period) or whether it's a future projection. Adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% (as_of_date and reportingCurrency described). The description adds slight value by mentioning that reportingCurrency appears in response, but does not explain loan_id or as_of_date. Overall, the description does not substantially enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Full amortization schedule for a loan', clearly identifying the resource (amortization schedule) and action (get). This distinguishes it from sibling tools such as list_loans or get_debt_payoff_plan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. For example, it does not contrast with get_debt_payoff_plan (a summary) or other loan tools. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_loansARead-onlyIdempotent
Get all loans with amortization summary. Stream D Phase 4: stdio cannot decrypt loan names — use HTTP MCP or the web UI for this query.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, but the description adds a key behavioral limitation: stdio cannot decrypt loan names. This goes beyond annotations by disclosing a real-world constraint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first defines purpose, second provides crucial usage constraint. No superfluous words, front-loads the key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description 'amortization summary' gives a reasonable expectation of return content. However, it could be slightly more explicit about the returned fields. Overall sufficient for a zero-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so baseline is 4. The description does not need to add parameter details, and the schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves all loans with amortization summary, distinguishing it from siblings like list_loans (likely basic info) and get_loan_amortization (single loan). The verb 'get' and resource 'loans' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly warns that stdio cannot decrypt loan names, advising to use HTTP MCP or web UI instead. This provides clear when-not-to-use guidance, though it does not mention alternative sibling tools like list_loans.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_net_worthARead-onlyIdempotent
Net worth across all accounts. Returns per-currency assets/liabilities/net. Pass months > 0 for a trend; omit for current totals. reportingCurrency is surfaced as metadata for cross-currency context. NOTE: this stdio surface values ALL accounts (incl. investment) at ledger / net-contribution basis (SUM(transactions.amount)); market-valued investment balances are available only over the HTTP MCP transport on an OAuth/built-in-chat connection (which carries a decryption key).
| Name | Required | Description | Default |
|---|---|---|---|
| months | No | If set, return a trend over the last N months | |
| currency | No | Filter by currency | |
| reportingCurrency | No | ISO code; defaults to user's display currency. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds critical context: it explains the calculation basis (SUM of transactions) and warns that market-valued investment balances are only available over HTTP. This goes beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, front-loading the core purpose then explaining parameters and a note. However, the note about HTTP vs stdio is somewhat lengthy and could be slightly trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description adequately explains the return shape (per-currency assets/liabilities/net) and parameter effects. It also addresses the stdio limitation for investment balances. Some might expect more detail on the trend structure, but it's sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds value: 'months > 0' for trend, 'reportingCurrency' defaults to user's display currency, and 'currency' filters. The description clarifies the behavior beyond the schema's description fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Net worth across all accounts. Returns per-currency assets/liabilities/net.' This clearly identifies the tool's purpose and distinguishes it from sibling tools like get_account_balances.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to pass the 'months' parameter for a trend and when to omit it for current totals. It also notes that 'reportingCurrency' is metadata for cross-currency context. While it doesn't explicitly list when not to use, the instructions are clear for the intended use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolio_analysisARead-onlyIdempotent
Portfolio holdings with allocation breakdown. Stream D Phase 4: stdio cannot decrypt holding/account names — use HTTP MCP or the web UI for this query. Schema includes account_id / account filters for parity with HTTP, but they are unused on this transport.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Account name/alias (parity with HTTP — unused on stdio under Stream D Phase 4). | |
| symbols | No | ||
| account_id | No | Account FK (parity with HTTP transport — unused on stdio under Stream D Phase 4). | |
| reportingCurrency | No | ISO code; defaults to user's display currency. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by disclosing that holding/account names cannot be decrypted on stdio (Stream D Phase 4 limitation) and that account/account_id filters are ignored on this transport. This goes beyond the annotations to set transport-specific expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. The first sentence immediately states the core purpose. The second adds critical transport-specific limitations with no redundant or extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema, the description should ideally outline return fields or behavior. It covers the main purpose and a key limitation, but omits details about the 'symbols' parameter's effect, what allocation breakdown entails, and the response structure. Adequate for a simple read-only tool but with gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 75% schema coverage, baseline is 3. The description notes that account and account_id are unused, but does not clarify the purpose of the 'symbols' parameter (which lacks a schema description) or provide additional semantics for reportingCurrency. The description adds no 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Portfolio holdings with allocation breakdown' which specifies the verb (get/retrieve), resource (portfolio holdings), and output (allocation breakdown). It distinguishes from siblings like get_portfolio_performance, analyze_holding, and trace_holding_quantity by focusing on current holdings and allocation rather than performance or deep analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when not to use this tool on stdio ('use HTTP MCP or the web UI for this query') and notes that account/account_id filters are unused on this transport, guiding agents to alternative tools or transports for decrypted names or account-specific queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolio_performanceARead-onlyIdempotent
Portfolio performance: cost basis and realized P&L by holding. Stream D Phase 4: stdio cannot decrypt holding names — use HTTP MCP or the web UI for this query.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | ||
| reportingCurrency | No | ISO code; defaults to user's display currency. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, which the description aligns with. The description adds useful behavioral context about decryption limitations (stdio cannot decrypt holding names), which annotations do not cover. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states the core purpose, second provides a critical usage limitation. No wasted words; information is front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the parameter simplicity and no output schema, the description covers the essential purpose and a key behavior (decryption limitation). However, it does not hint at the output structure (e.g., list of holdings with cost basis), leaving some ambiguity for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: only reportingCurrency has a description. The description does not add any parameter-specific information beyond the schema. For period, the enum values are self-explanatory, but no additional context like 'all includes everything' is given. The description could have compensated but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool returns 'portfolio performance: cost basis and realized P&L by holding', specifying the verb and resource. However, it does not explicitly differentiate from sibling tools like get_portfolio_analysis or get_investment_insights, leaving some ambiguity about when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a specific usage limitation: 'Stream D Phase 4: stdio cannot decrypt holding names — use HTTP MCP or the web UI for this query.' This guides the agent when to avoid this tool over alternative transports. No explicit when-not or alternatives for sibling tools, but the context is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recurring_transactionsARead-onlyIdempotent
Get detected recurring transactions (subscriptions, bills, salary). Average amounts stay in each transaction's account currency; reportingCurrency is surfaced as metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| reportingCurrency | No | ISO code; defaults to user's display currency. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true, so the description adds limited behavioral context. It states that average amounts stay in account currency and reportingCurrency is metadata, but does not disclose pagination or other traits beyond what annotations cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long and directly addresses the tool's function and key detail without extraneous text. It could be slightly more structured, but it remains concise and front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is provided, so the description should elaborate on return values. It mentions average amounts and metadata but does not fully describe the response structure or fields. For a read-only list tool, it is adequate but not completely thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter (reportingCurrency) is well-described in the schema as ISO code. The description adds that it defaults to the user's display currency, providing clarity beyond the schema definition. Schema coverage is 100%, so description adds meaningful value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves detected recurring transactions and provides concrete examples (subscriptions, bills, salary). It specifies average amounts and reportingCurrency behavior, making the purpose distinct from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fetching recurring transaction data but does not explicitly state when to use this tool versus alternatives like get_spending_trends or get_budget_summary. No exclusion criteria or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spending_anomaliesARead-onlyIdempotent
Find spending categories with >30% deviation from their 3-month average. Stream D Phase 4: stdio cannot decrypt category names — use HTTP MCP at /mcp or the web UI.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the tool as read-only, idempotent, and non-destructive, which the description complements by warning that stdio cannot decrypt category names. This behavioral insight is valuable and goes beyond annotations, though it doesn't detail what the output contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: one explaining the core functionality, another providing a critical usage limitation. Every sentence is necessary and front-loaded. No redundant or extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with no parameters and good annotations, but it lacks any description of the output format. Given no output schema, the agent might not know what to expect (e.g., a list of categories, percentages). This is a moderate gap for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (empty schema). The description correctly omits parameter details, as there are none. The baseline for no parameters is 4, and no extra value is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds spending categories with >30% deviation from their 3-month average. This is a specific verb-resource pair with a precise threshold, differentiating it from sibling tools like 'get_spending_trends' which do not focus on anomalies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a limitation ('stdio cannot decrypt category names') and suggests alternatives (HTTP MCP, web UI), but does not provide guidance on when to use this tool versus other spending-related tools. No explicit when-to-use or when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spending_trendsBRead-onlyIdempotent
Get spending trends over time grouped by category. Stream D Phase 4: stdio cannot decrypt category names — use HTTP MCP or the web UI for this query.
| Name | Required | Description | Default |
|---|---|---|---|
| months | No | Months to look back (default 12) | |
| period | Yes | Aggregation period | |
| reportingCurrency | No | ISO code; defaults to user's display currency. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses that category names are undecryptable in stdio, which is a behavioral trait affecting interpretation of results. This adds value without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences. The first sentence clearly states the purpose. The second sentence adds a useful caveat about decryption limitations. No unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose and a key behavioral constraint, but lacks information about return values or output structure. Given the absence of an output schema and moderate complexity, a more complete description would include expected data format or ranges.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters having descriptions. The description adds no additional meaning beyond what the schema already provides. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves spending trends grouped by category over time. The verb 'get' and specific resource 'spending trends over time grouped by category' make the purpose clear. It does not explicitly differentiate from sibling tools, but the purpose is specific enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus other tools. While it mentions a limitation (category names not decrypted in stdio), it does not suggest alternative tools for different contexts 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.
get_spotlight_itemsARead-onlyIdempotent
Get current attention items. Stream D Phase 4: stdio cannot decrypt category/subscription names — use HTTP MCP or the web UI for this query.
| Name | Required | Description | Default |
|---|---|---|---|
| reportingCurrency | No | ISO code; defaults to user's display currency. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint; the description adds a specific behavioral constraint: 'stdio cannot decrypt category/subscription names.' This provides valuable context beyond the annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two short sentences with no fluff. The first sentence states the core purpose, and the second provides important behavioral context. Every word contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema, annotations present), the description covers the main purpose and a key limitation. However, it does not describe the return value, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single parameter 'reportingCurrency'; the description does not add any additional meaning or context for this parameter, so 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get current attention items,' which clearly identifies the action and resource. The verb 'Get' and noun 'attention items' provide a specific purpose, and it is distinguishable from sibling tools that focus on budgets, transactions, or categories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving current attention items but does not explicitly state when to use this tool versus alternatives. It provides a limitation note about stdio decryption but lacks direct guidance on 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_subscription_summaryARead-onlyIdempotent
Get all tracked subscriptions with total monthly cost and upcoming renewals. Stream D Phase 4: stdio cannot decrypt subscription/category names — use HTTP MCP at /mcp or the web UI for this query.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, indicating a safe, non-destructive operation. The description adds a behavioral note about decryption limitations during stdio transport, which is beyond what annotations provide. This adds valuable context for the agent, though it could be more comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences. The first sentence clearly states the function. The second provides an important usage constraint. No wasted words or information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no input or output schema. The description explains what it returns (subscriptions with total monthly cost and upcoming renewals) and offers a constraint. For a summary tool, this is reasonably complete, though it could elaborate on the output format or structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and schema coverage is 100% (empty schema). The description does not need to explain parameters. Baseline for 0 params is 4. The description does not add anything beyond the schema, but that is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Get all tracked subscriptions with total monthly cost and upcoming renewals.' This clearly identifies the tool as retrieving a summary of subscriptions with specific cost and renewal info. However, it does not explicitly distinguish from the sibling tool 'list_subscriptions', which might also list subscriptions. The difference is implied but not stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a caveat about stdio not being able to decrypt names, advising to use HTTP MCP or web UI. This provides context but does not give explicit guidance on when to use this tool versus alternatives like 'list_subscriptions' or other query tools. No when/not-when instructions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transaction_rulesARead-onlyIdempotent
List all transaction auto-categorization rules. FINLYNQ-84: returns JSONB conditions+actions. Stream D Phase 4: stdio cannot decrypt the joined category name; only the action FK ids are returned.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly and idempotent behavior. The description adds value by specifying the return structure (JSONB conditions+actions) and a key limitation: stdio cannot decrypt joined category names, only FK ids. This goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of only two sentences, both front-loaded. The first states the core purpose, and the second adds two specific notes. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless tool with strong annotations and no output schema, the description covers the key behavioral aspects (return format, limitation). It could mention pagination or that it returns all rules, but overall it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters and 100% schema description coverage. Since there are no parameters to document, the description adds no further parameter semantics. A baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'transaction auto-categorization rules', making the tool's purpose immediately identifiable. It also includes specific details about the return format (JSONB conditions+actions) to differentiate from similar tools like list_rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as list_rules. It lacks context about prerequisites, when not to use it, or how it fits into a workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_weekly_recapARead-onlyIdempotent
Get a weekly financial recap. Stream D Phase 4: stdio cannot decrypt category names — use HTTP MCP or the web UI for this query.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | End date for the week (YYYY-MM-DD). Defaults to current week. | |
| reportingCurrency | No | ISO code; defaults to user's display currency. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and destructiveHint=false, which the description does not contradict. The description adds value by disclosing that via stdio, category names will not be decrypted, which is a behavioral constraint beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: two sentences, no fluff. The first sentence states the purpose, and the second provides a critical usage limitation. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description does not explain what a 'weekly recap' contains, leaving the agent without knowledge of the expected return structure. However, the purpose is clear and the input schema is fully documented, making it minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all parameters with descriptions, achieving 100% coverage. The description adds no additional meaning beyond what the schema provides, so it meets the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a weekly financial recap.' It uses a specific verb and resource. However, it does not differentiate from sibling tools like get_budget_summary or get_spending_trends, which could also provide financial summaries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a usage note about stdio not being able to decrypt category names, suggesting an alternative (HTTP MCP or web UI). However, it does not explicitly state when to use this tool versus others or provide clear when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_with_templateA
Import transactions from a CSV string using a saved template. Returns a summary of imported, skipped (duplicate), and errored rows.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, parse and validate without inserting. Default: false | |
| account_id | No | Account ID to assign transactions to (overrides template default) | |
| csv_content | Yes | Raw CSV file content as a string | |
| template_id | Yes | ID of the import template to use |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write operation (readOnlyHint=false). The description confirms mutation and adds that duplicates are skipped, but doesn't detail side effects like overwrite behavior or error handling beyond the summary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first sentence front-loads the core purpose, and the second efficiently summarizes the return value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequately covers the core action and return, but lacks details on expected CSV format, prerequisites (e.g., template existence), and error scenarios. Given the presence of similar sibling tools, more context would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing descriptions for all parameters. The tool description adds minimal extra meaning beyond the schema, such as 'using a saved template' for template_id, but doesn't elaborate on dry_run or account_id behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'import', the resource 'transactions', and the method 'using a saved template'. It distinguishes from sibling tools like preview_import and execute_import by specifying template usage and return summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like preview_import or execute_import. Prerequisites like template existence are implied but not stated, and there is no mention of when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_fx_overridesARead-onlyIdempotent
List the user's manual FX rate overrides (rate_to_usd pins by currency over date ranges)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, making the safety profile clear. The description adds value by specifying that the tool lists 'manual FX rate overrides' and explains they are 'rate_to_usd pins by currency over date ranges', providing context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence (19 words) that front-loads the action and resource. Every word serves a purpose, with no redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters, no output schema, and annotations covering safety, the description is complete. It adequately explains what the tool lists and the nature of the overrides, leaving no gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters (0 params) and schema description coverage is 100% (trivially). With no parameters, the description adds no parameter-specific info, but the baseline for 0 params is 4, and the description does not detract.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'manual FX rate overrides', with additional context explaining they are 'rate_to_usd pins by currency over date ranges'. This effectively distinguishes it from siblings like get_fx_rate, set_fx_override, and delete_fx_override.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool over alternatives (e.g., get_fx_rate). Usage is implied by the action 'List' but lacks explicit guidance on when-not-to-use or alternative tool names. The presence of sibling tools like get_fx_rate provides some implicit differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_loansARead-onlyIdempotent
List all loans. Stream D Phase 4: stdio cannot decrypt loan / linked-account names — use HTTP MCP or the web UI for this query.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint. The description adds valuable context about a limitation (no decryption in stdio mode) that goes beyond the annotations, enhancing transparency for selecting the correct invocation channel.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, followed by a critical constraint. Every sentence adds value without redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and annotations covering safety, the description provides sufficient context: it lists all loans and warns about a platform limitation. This is 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema description coverage is 100%. The description does not need to add parameter info. With zero parameters, the baseline is 4, and the description meets expectations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all loans. However, it does not explicitly differentiate from the sibling tool 'get_loans', which may have a similar purpose. The additional context about decryption limitations adds clarity but does not scope the tool's core function uniquely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that the tool cannot decrypt loan names when using stdio and directs the agent to use HTTP MCP or the web UI instead. This provides clear when-to-use and when-not-to-use guidance, including specific alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pending_uploadsARead-onlyIdempotent
List uploaded files that are pending or previewed (not yet executed or cancelled).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds the status filter ('pending or previewed'), which is useful behavioral context but does not disclose other traits like authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the essential information without any unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description adequately explains the purpose and scope. However, it omits details about the return format, which might be useful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description does not need to elaborate. Baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'uploaded files' with a specific status filter ('pending or previewed'), distinguishing it from other list tools like preview_import or execute_import.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing pending/previewed uploads but does not provide explicit guidance on when to use this tool over alternatives or mention exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rulesARead-onlyIdempotent
List all auto-categorization rules. FINLYNQ-84: returns JSONB conditions+actions. Stream D Phase 4: stdio cannot decrypt category/account/holding names.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, destructiveHint=false, idempotentHint=true. The description adds useful behavioral context: the output returns JSONB conditions+actions and notes that stdio cannot decrypt certain names. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the main purpose. Every sentence adds value: listing, output format, and a critical limitation. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool is simple with no parameters and good annotations. The description covers output format (JSONB conditions+actions) and a key limitation. Could elaborate on the return structure (e.g., array of objects) but is adequate for use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so the description does not need to add parameter meaning. Schema description coverage is 100% (trivially). Baseline score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists 'all auto-categorization rules,' which is a specific verb-resource pair. It distinguishes from siblings like 'get_transaction_rules' by specifying the resource type. No ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some context (returns JSONB conditions+actions, stdio limitation on decryption) but does not explicitly state when to use this tool versus alternatives, nor does it give when-not conditions or prerequisites. Usage is implied by purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_splitsARead-onlyIdempotent
List all splits for a transaction. Stream D Phase 4 (stdio): category_name / account_name are omitted (cannot decrypt name_ct); ids are still returned.
| Name | Required | Description | Default |
|---|---|---|---|
| transaction_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds extra behavioral info about the omission of category_name/account_name due to encryption, which is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff. First sentence gives core purpose, second adds a critical caveat. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and no output schema. The description covers purpose and a key limitation. However, it could clarify what the return value contains, even though no schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description should compensate, but it only implicitly mentions transaction_id. No additional details about the parameter's format or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List all splits') and the resource ('for a transaction'), differentiating it from sibling tools like delete_split, add_split, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context about a limitation (encrypted fields omitted) but lacks explicit guidance on when to use this tool versus alternatives. However, given its simple nature, the purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_subscriptionsARead-onlyIdempotent
List all subscriptions. Stream D Phase 4: stdio cannot decrypt subscription/category/account names — use HTTP MCP or the web UI for this query.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds critical behavioral context beyond the annotations: 'Stream D Phase 4: stdio cannot decrypt subscription/category/account names.' This reveals a transport-specific limitation that affects the returned data. Annotations are readOnlyHint, idempotentHint, destructiveHint, none of which contradict this added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, with the first stating the purpose and the second providing essential usage guidance. Every word earns its place; no redundancies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple schema (one optional parameter) and no output schema, the description covers the key behavioral constraint (transport limitation) and purpose. It lacks parameter documentation, but the enum is clear. Annotations cover safety. Almost complete for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one optional parameter 'status' with an enum, but schema description coverage is 0%. The description does not mention the parameter or explain its effect. While the enum values are self-explanatory, the description adds no value beyond the schema, and with 0% schema coverage, it should compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all subscriptions,' which is a specific verb+resource. It distinguishes from sibling tools like add_subscription, delete_subscription, and get_subscription_summary. The additional note about decryption limitations further clarifies 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'use HTTP MCP or the web UI for this query' when decrypted names are needed. This tells the agent when to use an alternative. However, it does not explicitly state when NOT to use this tool, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_bank_ledgerBDestructive
Maintain bank-ledger rows and balance anchors: list_anchors/upsert_anchor/find_duplicates/delete_row (HTTP MCP only — stdio refuses; the reconcile cohort needs the DEK).
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | The bank-ledger operation (HTTP MCP only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive behavior (destructiveHint=true). The description adds that it is HTTP MCP only and mentions the DEK dependency, but does not detail consequences of operations like delete_row or how the DEK is used. Some additional context, but not deeply transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that tries to convey multiple pieces of information but is dense and uses jargon ('DEK', 'cohort'). It is not optimally concise or well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's multi-operation nature, platform constraint, and opaque dependency, the description is insufficient. It does not explain what each operation does, what a 'bank-ledger' is, or the role of the DEK. There is no output schema, and the description does not compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a description for the single parameter 'op'. The description in the tool text lists possible operations, adding value beyond the schema's generic description. However, it does not map each operation to the parameter value or explain each operation's behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it maintains bank-ledger rows and balance anchors and lists specific operations (list_anchors, upsert_anchor, find_duplicates, delete_row), providing a clear purpose. It somewhat distinguishes from siblings by being a dedicated ledger management tool, though the concept of 'bank-ledger' is not elaborated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions platform constraints ('HTTP MCP only — stdio refuses') and an opaque dependency ('the reconcile cohort needs the DEK') but provides no guidance on when to use this tool versus alternatives like delete_transaction or reconcile, nor 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.
manage_statement_importADestructive
Manage the staged-import lifecycle: upload/list/get/list_rows/update_row/link_transfer_pair/approve/send_to_bank_ledger/apply_rules/reject (HTTP MCP only — stdio refuses; staging needs the DEK).
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | The staged-import operation (HTTP MCP only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, and the description lists both read and write operations, implying state changes. The description adds the protocol and DEK constraints but does not elaborate on side effects of individual sub-operations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the purpose and lists operations. It is fairly concise, though the list of operations using slashes could be more readable if separated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic purpose, operations, and constraints, but does not explain the details or side effects of each sub-operation. Given the complexity of managing a lifecycle, more context on prerequisites or outcomes would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by enumerating the allowed operations (upload/list/get/list_rows/...), which are not listed as enum in the schema, thus providing practical guidance beyond the generic parameter description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages the staged-import lifecycle and enumerates specific operations (upload, list, get, etc.), providing a specific verb and resource. It also distinguishes from sibling tools by noting it is HTTP MCP only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly restricts usage to HTTP MCP (excluding stdio) and mentions the DEK requirement, giving clear context on when to use the tool. However, it does not explicitly list alternatives or when not to use it beyond the protocol restriction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_bulk_categorizeARead-onlyIdempotent
Preview a bulk-categorize (shortcut for preview_bulk_update with only category_id).
| Name | Required | Description | Default |
|---|---|---|---|
| filter | Yes | ||
| category_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, which cover safety and idempotency. The description adds that it is a preview operation, consistent with annotations, but does not provide additional behavioral traits such as authorization needs or rate limits. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the tool's purpose and relation to a sibling. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and a complex nested filter parameter. The description does not explain the preview's return format or how the filter selects records, leaving significant gaps for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must add meaning to the parameters. It mentions 'with only category_id' but does not explain the filter object's structure or the category_id's role beyond being the target. Both parameters remain underdescribed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it previews a bulk-categorize operation and distinguishes itself as a shortcut for preview_bulk_update that only changes category_id. This provides a specific verb and resource with differentiation from a sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly indicates this is a shortcut for preview_bulk_update when only category_id is changed, implying the appropriate use case. However, it does not explicitly state when not to use it or list alternatives beyond preview_bulk_update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_bulk_deleteARead-onlyIdempotent
Preview a bulk delete. Returns affected count, sample rows, and a confirmationToken (5-min TTL).
| Name | Required | Description | Default |
|---|---|---|---|
| filter | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=true and destructiveHint=false, indicating no side effects. The description adds value by revealing that it returns a confirmationToken with a 5-minute TTL, which is behavioral context not covered by annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately conveys the tool's purpose and key outputs. No extraneous information; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the return values well but omits details about the sole input parameter ('filter') and does not explicitly state that no actual deletion occurs (though 'preview' implies it). Given the tool's moderate complexity and lack of output schema, the description is somewhat incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the 'filter' parameter fields. The description does not explain what the filter contains or how to use its sub-fields (ids, dates, etc.), relying entirely on the schema. A score of 2 reflects the failure to compensate for missing parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Preview a bulk delete' and lists specific outputs (affected count, sample rows, confirmationToken with TTL). This distinguishes it from siblings like 'execute_bulk_delete' and 'preview_bulk_update' by emphasizing the preview nature and the token generation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for previewing before executing, but it does not explicitly state when to use it versus alternatives like 'execute_bulk_delete' or provide any exclusions. The context from sibling names helps, but the description alone lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_bulk_updateARead-onlyIdempotent
Preview a bulk update over transactions matching filter. Returns affected count, before/after samples, an unappliedChanges array, and a confirmationToken (5-min TTL). Each unappliedChanges entry is { field, requestedValue, reason } — field is the change key, requestedValue is the value you sent, reason explains the failure. sampleAfter.category reflects the resolved category display name when category (name) resolved. Stdio-accepted changes keys: category_id, category (name → id), account_id, date, note, payee, is_business, tags. Unknown keys fail. (HTTP transport additionally supports quantity, portfolioHoldingId, portfolioHolding.)
| Name | Required | Description | Default |
|---|---|---|---|
| filter | Yes | ||
| changes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value by detailing return fields (affected count, before/after samples, unappliedChanges, confirmationToken with 5-min TTL), explaining unappliedChanges structure, and noting transport-specific key differences. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, efficiently front-loaded with the main purpose and return values, then unpacking details. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the nested schema and no output schema, the description covers return values and change key constraints well. It could be more complete by explaining filter fields or error handling, but the schema and the provided details suffice for a preview tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning for the changes parameter by listing accepted keys and explaining category name-to-id resolution and transport differences. The filter parameter receives less elaboration, only referencing it as 'matching `filter`'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Preview a bulk update over transactions matching `filter`', clearly stating the verb and resource. It distinguishes from sibling tools like execute_bulk_update and preview_bulk_delete by the preview and update context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides transport-specific guidance on accepted change keys, but does not explicitly state when to use this tool over alternatives, such as before executing a bulk update. It implies the preview nature but lacks explicit when/when-not instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_importARead-onlyIdempotent
Preview an uploaded CSV/OFX/QFX file. Stream D Phase 4: stdio cannot resolve account names from the import file (cannot decrypt accounts.name_ct) — use HTTP MCP or the web UI for imports.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | No | ||
| upload_id | No | ||
| template_id | No | ||
| column_mapping | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, and the description reinforces this with 'Preview'. It adds valuable behavioral context by noting the account name resolution limitation, which goes beyond what annotations provide. No contradiction found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence plus a brief technical note. It's front-loaded with the core purpose and avoids redundancy. Could add more detail without becoming verbose, but it's efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 4 parameters, 0% schema coverage, and no output schema, the description is incomplete. It explains the overall purpose but omits parameter descriptions, return behavior, and usage details. The complexity of nested objects (column_mapping) is not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for 4 parameters (file_path, upload_id, template_id, column_mapping). It fails to explain any parameter purpose, leaving the agent to infer from names. This is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool previews uploaded CSV/OFX/QFX files, which is a specific verb-resource pair. It distinguishes from sibling tools like execute_import by focusing on previewing, though it doesn't explicitly list alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells when to use (preview import files) and gives an explicit limitation: stdio cannot resolve account names, suggesting alternatives like HTTP MCP or web UI for imports. This provides clear context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reconcileB
Reconcile a bank statement against the ledger for one account: suggest/accept/unlink/materialize/apply_rules (HTTP MCP only — stdio refuses; reconcile needs the DEK).
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | The reconcile operation (HTTP MCP only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are present but minimal (no destructive hint, no idempotent hint, etc.). The description adds only that it is HTTP-only and requires DEK, but does not elaborate on behavioral traits like data modifications, rollback possibilities, or side effects of each operation (e.g., 'accept' likely modifies data). The term 'reconcile' implies changes, but the description lacks transparency about what happens to the ledger or statement. Score 2: description adds little 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the purpose and then lists operations and constraints. It is concise and avoids unnecessary words. However, it could be improved with a structured format (e.g., bullet list for operations). Score 4: very efficient but not perfectly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks information about return values (no output schema) and does not explain the reconciliation process or how it interacts with other tools. Given the complexity of reconciliation and the presence of sibling tools like 'manage_statement_import' and 'manage_bank_ledger', the description should guide the agent on when to use this specific tool. Missing output description and contextual decision support. Score 2: incomplete for a non-trivial operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter 'op' with a schema description 'The reconcile operation (HTTP MCP only).' This is vague, but the main description lists the allowed values (suggest/accept/unlink/materialize/apply_rules). Since schema_description_coverage is 100% (the parameter has a description), baseline is 3. The main description compensates slightly by clarifying valid values, but the schema itself would benefit from enums. Score 3: adequate but relies on main description for meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: reconciling a bank statement against the ledger for one account. It lists the specific operations (suggest/accept/unlink/materialize/apply_rules) and mentions the HTTP-only constraint, making the purpose clear. However, it does not explicitly distinguish from sibling tools like 'manage_statement_import' or 'manage_bank_ledger', which could be overlapping. Score 4 because it is specific and actionable but lacks direct sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a critical usage guideline: 'HTTP MCP only — stdio refuses; reconcile needs the DEK.' This explicitly tells the agent when the tool cannot be used (over stdio) and notes a dependency (DEK). It also lists the valid operations, giving context for usage. While it doesn't mention alternatives explicitly, the constraint is strong enough to guide appropriate invocation. Score 4 for clear guidance on modality and prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_transactionA
Record a single transaction (stdio). Stream D Phase 4: pass account_id (numeric) — account (name) is refused because stdio has no DEK to resolve names. category (name) is also refused; pass category_id instead, or omit for auto-detection. For cross-currency entries pass enteredAmount + enteredCurrency. Pass dryRun: true to validate + resolve without writing.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD (default: today) | |
| note | No | ||
| tags | No | Comma-separated tags | |
| payee | Yes | Payee or merchant name | |
| amount | Yes | Amount in account currency (negative=expense, positive=income). | |
| dryRun | No | When true, run validation/resolution and return a preview WITHOUT writing. | |
| account | No | REFUSED on stdio (Stream D Phase 4). Pass `account_id` instead. | |
| category | No | REFUSED on stdio (Stream D Phase 4). Pass `category_id` instead, or omit for auto-detection. | |
| account_id | No | Account FK (accounts.id). Required on stdio. | |
| category_id | No | Category FK (categories.id). Use this instead of `category` on stdio. | |
| enteredAmount | No | User-typed amount in enteredCurrency. | |
| enteredCurrency | No | ISO code (USD/CAD/...) of enteredAmount; defaults to account currency. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (which show readOnlyHint=false), the description discloses key behavioral traits: stdio-specific refusal of string account/category, auto-detection of category when omitted, validation behavior with dryRun, and cross-currency support. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 sentences), front-loaded with purpose, and every sentence adds value without redundancy. No unnecessary words or information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (12 params, 2 required) and no output schema, the description covers key points: stdio restrictions, dry run, cross-currency. However, it does not mention what the tool returns upon success (likely the created transaction), which could be important for follow-up actions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (92%), but the description adds critical context: account and category are refused on stdio (despite being in schema), explaining why and providing alternatives. It also clarifies the enteredAmount/enteredCurrency pair for cross-currency entries, adding meaning beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb 'Record', the resource 'single transaction', and the context 'stdio', distinguishing it from sibling tools like bulk_record_transactions. It clearly identifies the tool's function and scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool (recording a single transaction on stdio), what parameters to avoid (account, category) and what alternatives to use (account_id, category_id), and the option of dry run for validation without writing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_transferA
Record a transfer between two of the user's accounts (stdio). Stream D Phase 4: pass from_account_id and to_account_id (numeric) — the fromAccount/toAccount/holding/destHolding name fields are refused because stdio cannot resolve names. For investment buys/sells/transfers use the portfolio_* tools on HTTP MCP. Auto-creates a Transfer category (type='R') if missing. For cross-currency transfers pass receivedAmount to lock the bank's landed amount.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD (default: today) | |
| note | No | ||
| tags | No | ||
| amount | Yes | Cash amount sent, in SOURCE account's currency. | |
| holding | No | REFUSED on stdio (Stream D Phase 4). In-kind transfers require name resolution — use HTTP MCP. | |
| quantity | No | REFUSED on stdio when paired with `holding`. | |
| toAccount | No | REFUSED on stdio (Stream D Phase 4). Pass `to_account_id` instead. | |
| destHolding | No | REFUSED on stdio (Stream D Phase 4). | |
| fromAccount | No | REFUSED on stdio (Stream D Phase 4). Pass `from_account_id` instead. | |
| destQuantity | No | ||
| to_account_id | No | Destination account FK (accounts.id). Required on stdio. | |
| receivedAmount | No | Cross-currency override: actual amount that landed in the destination. | |
| from_account_id | No | Source account FK (accounts.id). Required on stdio. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no destructive or readOnly hints. Description adds: auto-creates Transfer category if missing, refusal of certain fields on stdio, and cross-currency behavior. Good context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single dense paragraph covering all key aspects without redundancy. Each sentence adds value. Could be slightly better structured (e.g., bullet points for refusals), but highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
13 parameters, no output schema, moderate complexity. Description covers purpose, constraints, alternatives, side effects. Missing details on return value or error conditions, but overall complete for an experienced agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 77%, baseline 3. Description adds meaning: explains why fromAccount/holding are refused (name resolution limitation), clarifies amount currency, and defines receivedAmount for cross-currency. Compensates for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with 'Record a transfer between two of the user's accounts (stdio)' – a specific verb+resource. Distinguishes from sibling portfolio_* tools and update_transfer. Clearly scoped to stdio transfers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when not to use: 'For investment buys/sells/transfers use the portfolio_* tools on HTTP MCP.' Also explains that name fields are refused on stdio, directing to numeric IDs. Provides guidance for cross-currency via receivedAmount.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorder_rulesB
Reorder rules — first id in ordered_ids becomes highest priority
| Name | Required | Description | Default |
|---|---|---|---|
| ordered_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals that reordering changes priority but fails to disclose potential side effects, error conditions (e.g., invalid IDs), or whether the operation is idempotent. Annotations provide no additional safety hints (readOnlyHint=false, destructiveHint=false), so the description carries the full burden and is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no extraneous words. It directly states the tool's purpose and the key behavioral detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (1 parameter, no output schema), the description is incomplete. It omits important context such as prerequisites (existing rules), behavior for duplicate or invalid IDs, and whether the order of rules not in the list is preserved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to the 'ordered_ids' parameter by explaining its effect ('first id becomes highest priority'), which compensates for the 0% schema coverage. However, it does not explain that the IDs must correspond to existing rules or what happens to omitted rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Reorder rules' and specifies the effect: 'first id in `ordered_ids` becomes highest priority'. This distinguishes it from sibling tools like list_rules, create_rule, etc., which do not reorder rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when reordering is needed but provides no explicit context or alternatives. It does not mention when not to use it or how it differs from update_rule, which might change individual rule priorities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_splitsADestructiveIdempotent
Atomically replace all splits on a transaction. Validates sum equals parent amount (±$0.01).
| Name | Required | Description | Default |
|---|---|---|---|
| splits | Yes | ||
| transaction_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include destructiveHint=true and idempotentHint=true. The description adds that the operation is atomic and validates the sum equals the parent amount within tolerance. This provides valuable context beyond annotations, though it does not detail consequences like deletion of existing splits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with one sentence plus a validation note. It is front-loaded with the core action ('Atomically replace all splits') and includes essential constraints. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and low parameter coverage, the description lacks details on return values, error conditions, prerequisites (e.g., transaction existence), and post-conditions. For a destructive mutation, this is insufficient for complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema documentation coverage is 0%, meaning no parameter descriptions in the schema. The tool description only mentions transaction_id and splits array but does not explain individual item properties (amount, note, tags, etc.). The description adds minimal value for parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it atomically replaces all splits on a transaction, with a validation condition. This is distinct from sibling tools like add_split, update_split, and delete_split, as it replaces all splits in one operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (atomically replace all splits) but does not explicitly state when not to use or provide alternatives. It contrasts with incremental split tools but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_transactionsARead-onlyIdempotent
Flexible transaction search. Stream D Phase 4: stdio cannot decrypt account/category names — account and category (name) filters and the joined name fields are unavailable. Use HTTP MCP at /mcp or the web UI for full search.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| limit | No | ||
| payee | No | ||
| category | No | ||
| end_date | No | ||
| account_id | No | ||
| max_amount | No | ||
| min_amount | No | ||
| start_date | No | ||
| portfolio_holding_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds key behavioral context: the limitation that stdio cannot decrypt account/category names, making those filters unavailable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. The first sentence immediately states the purpose, and the second sentence adds critical limitations and alternatives. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 10 parameters, no output schema, and no parameter descriptions, the description is insufficiently complete. It does not mention return format, pagination, or how to use most parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It clarifies that 'account' and 'category' name filters are unavailable, but provides no explanation for the other 8 parameters (tags, payee, amounts, dates, limit, portfolio_holding_id).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Flexible transaction search' which conveys the tool's purpose. However, it does not explicitly differentiate from sibling tools, though no other transaction search tool exists in the list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool and provides clear alternatives: 'Use HTTP MCP at /mcp or the web UI for full search' for cases where account/category name filters are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_budgetAIdempotent
Set or update a budget for a category in a specific month. Stream D Phase 4: stdio cannot resolve category names — pass the category id via HTTP MCP, or use the web UI.
| Name | Required | Description | Default |
|---|---|---|---|
| month | Yes | Month (YYYY-MM) | |
| amount | Yes | Budget amount (positive number) | |
| category | Yes | Category name (refused on stdio — Stream D Phase 4) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate mutation and idempotency. The description adds context about a critical behavioral constraint (category name resolution on stdio), which is beyond what annotations provide. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The first states the purpose, the second provides critical usage guidance. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has three parameters and no output schema, the description covers the essential purpose and a key limitation. It is complete enough for an agent to use correctly, though a note about the response format could be useful but not necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. The description does not add new information about parameters beyond what's in the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Set or update a budget for a category in a specific month,' which is a specific action on a specific resource. It distinguishes from siblings like 'delete_budget'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly warns that the tool might not work on stdio due to category name resolution issues, and suggests alternatives: 'pass the category id via HTTP MCP, or use the web UI.' This gives clear when-not and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_fx_overrideAIdempotent
Pin a manual FX rate. Stored as rate_to_usd internally; one side of the from/to pair must be USD.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | ||
| date | Yes | ||
| from | Yes | ||
| note | No | ||
| rate | Yes | ||
| dateTo | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent and non-destructive behavior. The description adds value by explaining internal storage ('rate_to_usd') and the USD requirement, which are not in annotations. No contradiction detected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action ('Pin a manual FX rate'), followed by essential constraints and storage detail. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the core concept and a key constraint, but lacks details on optional parameters like note and dateTo (which suggests a date range). With no output schema and 6 parameters, the description is moderate in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no direct parameter explanations. It indirectly hints at from/to parameters via the USD constraint, but leaves date, rate, note, and dateTo unexplained. This is insufficient for 6 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Pin' and the resource 'manual FX rate', with additional details on internal storage and a critical constraint. It distinguishes itself from sibling tools like get_fx_rate, list_fx_overrides, and delete_fx_override.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear constraint ('one side must be USD') and implies this tool is for setting overrides rather than reading or deleting. It does not explicitly state when not to use it, but the context is sufficient with sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_transaction_detailsBRead-onlyIdempotent
Suggest category + tags for a transaction. Stream D Phase 4: stdio cannot decrypt category names — use HTTP MCP at /mcp or the web UI.
| Name | Required | Description | Default |
|---|---|---|---|
| payee | Yes | ||
| top_n | No | ||
| amount | No | ||
| account_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds the important transport constraint but does not detail other behaviors like output format or performance. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the tool's purpose followed by a critical usage constraint. Every sentence earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four parameters and no output schema, the description is too minimal. It omits parameter explanations, output details, and how suggestions are generated, leaving significant gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It does not mention any of the four parameters (payee, top_n, amount, account_id), failing to add meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool suggests category and tags for a transaction, using specific verb 'suggest' and resource 'category + tags'. While it does not explicitly differentiate from siblings like get_categories, the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises against using this tool in stdio mode due to decryption limitations, directing users to HTTP MCP or web UI. This provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_ruleBRead-onlyIdempotent
Dry-run a rule pattern against the user's existing transactions. Stream D Phase 4: stdio cannot decrypt category/account names — use HTTP MCP or the web UI for this query.
| Name | Required | Description | Default |
|---|---|---|---|
| match_type | No | ||
| match_field | No | ||
| match_payee | No | ||
| match_value | No | ||
| sample_size | No | ||
| match_amount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds context that this is a 'dry-run' (no modifications), and warns about decryption limitations, providing behavioral insight beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief (two sentences) but lacks necessary detail, especially regarding parameters. While it is front-loaded with purpose and usage context, it earns its words, but the lack of parameter information makes it under-specified for practical use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters, no output schema, and 0% schema description coverage, the description must compensate. It does not explain what a 'dry-run' does, what the parameters mean, or what the tool returns. This is severely incomplete for an AI 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the input schema provides no descriptions for the 6 parameters. The description does not explain any parameter semantics, leaving the agent without guidance on how to fill fields like match_type, match_payee, etc. This is a critical gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Dry-run a rule pattern against the user's existing transactions.' This is a specific verb-resource combination that distinguishes it from sibling tools like create_rule or apply_rules_to_uncategorized.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context about when to use this tool vs alternatives: 'Stream D Phase 4: stdio cannot decrypt category/account names — use HTTP MCP or the web UI for this query.' It tells users that the tool has limitations in certain environments and suggests alternatives, though it doesn't directly compare to other rule-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trace_holding_quantityARead-onlyIdempotent
Per-transaction quantity contributions for a single holding. Stream D Phase 4 (stdio): pass holdingId (numeric) — symbol (name) is refused because stdio cannot decrypt names.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | REFUSED on stdio (Stream D Phase 4). Pass `holdingId` instead. | |
| holdingId | No | Filter to this exact portfolio_holdings.id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive. The description adds important behavioral detail: symbol is refused on stdio due to decryption limitation, and the tool returns per-transaction contributions. This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first for purpose, second for usage context. No wasted words, efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers purpose and a key constraint, it lacks details about the output format (list of contributions) and temporal scope. With no output schema, more completeness would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Parameter descriptions in schema are 100% covered. The description adds value by explaining the behavioral difference between the two parameters: one works universally, the other is refused on stdio. This clarifies their appropriate usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Per-transaction quantity contributions for a single holding,' using a specific verb-resource. It distinguishes from siblings by focusing on per-transaction detail rather than aggregated analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context-specific guidance: on stdio, use holdingId, not symbol. It implicitly advises against using symbol when the system cannot decrypt names. However, it lacks explicit comparison to sibling tools like get_portfolio_analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_accountBIdempotent
Update name, group, currency, note, or alias of an account
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| note | No | ||
| alias | No | New alias — short shorthand used to match receipts/imports. Pass an empty string to clear. | |
| group | No | ||
| account | Yes | Current account name or alias (fuzzy matched against name; exact match on alias) | |
| currency | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true and destructiveHint=false, indicating safe behavior. The description does not contradict annotations but adds no new behavioral context (e.g., effects on other data, required permissions).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence clearly stating the action and affected fields. No unnecessary words; front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks details on return value, partial vs full update behavior, and how missing optional fields are handled. Schema provides some details on account matching and alias clearing, but description omits these nuances.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 33%, with only alias and account having descriptions. The description lists updatable fields but does not explain constraints, defaults, or behavior beyond what the schema provides for alias (clearing) and account (fuzzy matching).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates specific fields (name, group, currency, note, or alias) of an account. It distinguishes itself from sibling tools like add_account and delete_account by focusing on modification of existing accounts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., add_account, delete_account). No prerequisites or exclusionary conditions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_goalAIdempotent
Update a financial goal's target, deadline, status, or linked accounts. Refused on stdio (Stream D Phase 4 — no DEK).
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | Goal name (fuzzy matched) | |
| name | No | Rename the goal | |
| status | No | ||
| deadline | No | ||
| account_ids | No | Replace linked accounts (issue #130). Refused on stdio — use HTTP MCP. | |
| target_amount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (idempotentHint=true, destructiveHint=false), the description adds that the tool is refused on stdio and that account_ids need HTTP MCP, which is useful operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences clearly state the purpose and platform restriction, with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers key aspects for a mutation tool but could mention idempotency or the effect of partial updates for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 50%, the description adds fuzzy matching for 'goal', platform restrictions for 'account_ids', and lists main parameters. However, it does not elaborate on format for 'deadline' or 'target_amount' beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates a financial goal's target, deadline, status, or linked accounts, distinguishing it from sibling tools like add_goal and delete_goal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It specifies platform restrictions (refused on stdio) and advises using HTTP MCP for the account_ids parameter, but does not explicitly contrast with other update tools like update_transaction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_loanAIdempotent
Update any field of an existing loan by id
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| note | No | ||
| type | No | ||
| account | No | Linked account — name or alias (fuzzy matched against name; exact match on alias). Empty string clears the link. | |
| principal | No | ||
| start_date | No | ||
| annual_rate | No | ||
| term_months | No | ||
| extra_payment | No | ||
| payment_amount | No | ||
| payment_frequency | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutation (readOnlyHint=false) and idempotency (idempotentHint=true); the description adds the 'by id' scope but does not disclose other behaviors like partial updates or response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, zero waste, easily parsable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 12 parameters, no output schema, and sparse descriptions, the tool needs more context about behavior (e.g., partial update semantics) to be fully usable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 8% (one parameter documented); the description does not add any parameter-specific meaning beyond naming the resource.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update') and resource ('existing loan by id'), distinguishing it from sibling tools like add_loan, delete_loan, or list_loans.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like updating a different entity; usage is implied but not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_portfolio_holdingAIdempotent
Update a portfolio holding's name, symbol, currency, isCrypto, or note. Renames cascade to all transactions automatically because get_portfolio_analysis groups by FK, not by string. NOTE: the legacy account parameter is REFUSED (issue #99) — moving a holding to a different account would leave stale holding_accounts rows and broken transaction account attribution. To move shares between accounts use record_transfer (in-kind); to re-attribute existing transactions update them individually.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| note | No | ||
| symbol | No | Pass empty string to clear | |
| account | No | REFUSED (issue #99): account moves create stale state. Use record_transfer (in-kind) instead. | |
| holding | Yes | Current holding name OR symbol (fuzzy matched) | |
| currency | No | ||
| isCrypto | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a key behavioral trait: renaming a holding cascades to all transactions because get_portfolio_analysis groups by foreign key, not by string. It also warns about stale rows from account moves, adding value beyond the annotations (which show destructiveHint=false and idempotentHint=true, with no contradiction).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a clear note, all front-loaded with essential information. Every sentence adds value: purpose, cascade behavior, and refusal warning with alternatives. No extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters, no output schema, and good annotations, the description adequately covers behavior, cascading effects, and caveats. It explains what happens when renaming, why account moves are refused, and directs to appropriate alternatives. No gaps for an update tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 43% (3 of 7 parameters have descriptions). The description lists the modifiable fields and explains the refusal of the account parameter, which compensates for missing schema descriptions. However, it could provide more detail on constraints like maxLength for name or note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'update' and the resource 'portfolio holding', listing specific modifiable fields (name, symbol, currency, isCrypto, note). It distinguishes itself from siblings like record_transfer and update_transaction by describing their appropriate use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly warns against using the legacy 'account' parameter, explains why it is refused, and provides two concrete alternatives: record_transfer for moving shares between accounts and updating transactions individually for re-attribution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ruleAIdempotent
Update a transaction rule. FINLYNQ-84: accepts the legacy shorthand (match_payee + assign_category_id) which is synthesized into the v2 JSONB shape, or the v2 fields (conditions / actions). Stream D Phase 4: assign_category by NAME is refused on stdio; pass numeric id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| actions | No | v2: Action[] JSON. Replaces actions entirely. | |
| priority | No | ||
| is_active | No | ||
| rename_to | No | ||
| conditions | No | v2: ConditionGroup JSON. Replaces conditions entirely. | |
| assign_tags | No | ||
| match_payee | No | Legacy: payee/contains condition | |
| assign_category | No | REFUSED on stdio (Stream D Phase 4). Pass `assign_category_id` instead. | |
| assign_category_id | No | Legacy: category FK for set_category action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false (modifying), destructiveHint=false, and idempotentHint=true. The description adds behavioral context: it accepts both legacy and v2 formats, and warns about assign_category refusal. However, it does not disclose partial vs full replacement behavior or side effects on existing rules.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each serving a distinct purpose: stating the action, explaining the v1/v2 distinction, and warning about a restricted field. Front-loaded with the primary purpose. No superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, legacy/v2 fields, one field restricted), the description covers the core behaviors but lacks guidance on the v2 JSON format for conditions/actions and does not explain output or error handling. Relies on schema for some details, which is partially helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (45%). The description explains the legacy/v2 duality for match_payee, assign_category_id, actions, and conditions, adding meaning beyond the schema. However, it omits explanation for parameters like name, priority, is_active, rename_to, and assign_tags, which remain unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update a transaction rule' and distinguishes between legacy and v2 field formats. It also provides specific details about field usage, making the purpose unambiguous relative to sibling tools like create_rule and delete_rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use legacy fields vs. v2 fields (e.g., 'accepts the legacy shorthand ... or the v2 fields'). Warns that `assign_category` by name is refused on stdio and to use numeric id instead. Does not explicitly contrast with other rule tools (e.g., create_rule) for scenario selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_splitCIdempotent
Update fields of an existing split
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| tags | No | ||
| amount | No | ||
| split_id | Yes | ||
| account_id | No | ||
| category_id | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotence and non-destructiveness. The description adds no extra behavioral context beyond stating it updates fields, which does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise, single sentence. No wasted words, but the brevity sacrifices informativeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having many optional parameters and no output schema, the description offers minimal context. An agent needs more details to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and no parameter details in the description, agents must rely solely on schema types. The description provides no semantic help for the 7 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it updates an existing split, using a specific verb and resource. It distinguishes from create/delete operations but could be more precise about the type of update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like add_split or replace_splits. The description lacks context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_subscriptionBIdempotent
Update any field of an existing subscription
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| notes | No | ||
| amount | No | ||
| status | No | ||
| account | No | Account name or alias (fuzzy matched against name; exact match on alias). Empty string clears. | |
| cadence | No | ||
| category | No | Empty string clears | |
| currency | No | ||
| next_billing_date | No | ||
| cancel_reminder_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it is a mutation (readOnlyHint=false), non-destructive, and idempotent. The description adds no extra behavioral context beyond these annotations, such as authorization needs or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. However, it is so terse that it omits useful details, preventing a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, no output schema), the description is overly minimal. It fails to mention return values, idempotency consequences, or field update constraints, leaving significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 18% schema description coverage, the description does not compensate by explaining parameter meanings or usage patterns. It merely says 'any field', which adds no semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'update', the resource 'subscription', and the scope 'any field'. It effectively distinguishes this tool from sibling tools like add_subscription, delete_subscription, and list_subscriptions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention prerequisites or when not to use it. The purpose is implied but not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_transactionAIdempotent
Update fields of an existing transaction by ID. Stream D Phase 4 (stdio): pass category_id (numeric) — category (name) is refused because stdio cannot resolve names. Pass enteredAmount + enteredCurrency to re-lock cross-currency rate; passing only amount updates the account-side without touching entered_*.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Transaction ID | |
| date | No | ||
| note | No | ||
| tags | No | ||
| payee | No | ||
| amount | No | Amount in account currency. Doesn't touch entered_* side. | |
| category | No | REFUSED on stdio (Stream D Phase 4). Pass `category_id` instead. | |
| category_id | No | Category FK (categories.id). Use this instead of `category` on stdio. | |
| enteredAmount | No | ||
| enteredCurrency | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate write (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds stream-specific behavior (category refused on stdio) and cross-currency locking details, which are valuable beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second packs critical usage rules. No fluff, all information earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers essential behavior (stream limitation, cross-currency update) but does not mention return value or idempotency (though annotations cover idempotency). Generally complete for a complex tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 40% schema description coverage, the description compensates by explaining the relationship between category/category_id and amount/enteredAmount+enteredCurrency. It adds context for key parameters but omits details for note, tags, payee.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update fields of an existing transaction by ID,' specifying the verb (update), resource (transaction), and identifier (by ID). It distinguishes from sibling creation (record_transaction) and deletion tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: use category_id instead of category for stdio, and pass enteredAmount+enteredCurrency to re-lock cross-currency rate vs. amount alone. This helps the agent choose correct parameters and avoid refusal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_transferAIdempotent
Update both legs of an existing transfer pair atomically. Stream D Phase 4 (stdio): pass from_account_id/to_account_id (numeric) — fromAccount/toAccount (names) are refused. Identify pair by linkId OR by either leg's transaction id.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| note | No | ||
| tags | No | ||
| amount | No | ||
| linkId | No | ||
| toAccount | No | REFUSED on stdio (Stream D Phase 4). Pass `to_account_id` instead. | |
| fromAccount | No | REFUSED on stdio (Stream D Phase 4). Pass `from_account_id` instead. | |
| to_account_id | No | ||
| transactionId | No | ||
| receivedAmount | No | ||
| from_account_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond annotations by disclosing atomicity and the account parameter refusal on stdio. Annotations already indicate idempotentHint=true and destructiveHint=false, so no contradiction. Could mention error conditions or rollback behavior, but current info is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences pack critical information: atomic update, identification methods, and account parameter variant. No wasted words, front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key points (atomicity, identification) but omits prerequisites (transfer must exist), return values, and explanation of remaining parameters. Adequate for a tool with idempotentHint but incomplete for a complex update operation with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 18% schema description coverage, description must compensate for many undocumented parameters (date, note, tags, amount, receivedAmount). It only covers identification and account naming. Many parameters lack explanation, leaving agents guessing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool updates both legs of an existing transfer atomically, which is a specific verb+resource. It distinguishes from sibling tools like record_transfer (create) and delete_transfer by specifying 'update existing' and 'atomically'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides usage guidance on identifying the transfer by linkId or transactionId, and warns about account parameter naming for stdio. However, it does not explicitly state when to use this tool versus record_transfer or delete_transfer, which would improve guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
89 tool updates
v3.4.1- First observed
add_account - First observed
add_goal - First observed
add_loan - First observed
add_portfolio_holding - First observed
add_snapshot - First observed
add_split - First observed
add_subscription - First observed
analyze_holding - First observed
apply_rules_to_uncategorized - First observed
bulk_add_subscriptions - First observed
bulk_record_transactions - First observed
cancel_import - First observed
convert_amount - First observed
create_category - First observed
create_rule - First observed
delete_account - First observed
delete_budget - First observed
delete_category - First observed
delete_fx_override - First observed
delete_goal - First observed
delete_loan - First observed
delete_portfolio_holding - First observed
delete_rule - First observed
delete_split - First observed
delete_subscription - First observed
delete_transaction - First observed
delete_transfer - First observed
detect_subscriptions - First observed
execute_bulk_categorize - First observed
execute_bulk_delete - First observed
execute_bulk_update - First observed
execute_import - First observed
finlynq_help - First observed
get_account_balances - First observed
get_budget_summary - First observed
get_cash_flow_forecast - First observed
get_categories - First observed
get_debt_payoff_plan - First observed
get_financial_health_score - First observed
get_fx_rate - First observed
get_goals - First observed
get_import_templates - First observed
get_income_statement - First observed
get_investment_insights - First observed
get_loan_amortization - First observed
get_loans - First observed
get_net_worth - First observed
get_portfolio_analysis - First observed
get_portfolio_performance - First observed
get_recurring_transactions - First observed
get_spending_anomalies - First observed
get_spending_trends - First observed
get_spotlight_items - First observed
get_subscription_summary - First observed
get_transaction_rules - First observed
get_weekly_recap - First observed
import_with_template - First observed
list_fx_overrides - First observed
list_loans - First observed
list_pending_uploads - First observed
list_rules - First observed
list_splits - First observed
list_subscriptions - First observed
manage_bank_ledger - First observed
manage_statement_import - First observed
preview_bulk_categorize - First observed
preview_bulk_delete - First observed
preview_bulk_update - First observed
preview_import - First observed
reconcile - First observed
record_transaction - First observed
record_transfer - First observed
reorder_rules - First observed
replace_splits - First observed
search_transactions - First observed
set_budget - First observed
set_fx_override - First observed
suggest_transaction_details - First observed
test_rule - First observed
trace_holding_quantity - First observed
update_account - First observed
update_goal - First observed
update_loan - First observed
update_portfolio_holding - First observed
update_rule - First observed
update_split - First observed
update_subscription - First observed
update_transaction - First observed
update_transfer
TDQS
Scored across 89 tools
Several tools are near-duplicates: get_transaction_rules and list_rules both list the same rules, get_loans and list_loans overlap, and the bulk_categorize preview/execute tools are explicitly shortcuts for the bulk_update tools. Many analytics/read tools also have fuzzy boundaries, though their descriptions are detailed enough to help in some cases.
Naming is mostly snake_case, but verb usage is inconsistent: get_ vs list_ for reads, add_/create_/record_/set_ for writes, and one-off verbs like trace_, analyze_, suggest_, and manage_. The duplicate get_transaction_rules/list_rules pair makes the inconsistency especially visible.
At 89 tools, this is an extreme count for an MCP surface, even for a broad finance domain. The count is inflated by duplicate listing tools, preview/execute pairs, and several HTTP-only or stdio-refused operations that are effectively dead weight on this transport.
The server covers many domains—accounts, transactions, budgets, loans, subscriptions, rules, portfolio, FX, imports, and analytics—with most areas having reasonable CRUD/lifecycle coverage. However, notable gaps remain: no category update/rename, no singular account or transaction read tool, no way to list all budgets, and several core operations are gated to HTTP/web UI.
Maintenance
Related MCP Connectors
Personal finance for AI agents — onboard, import statements, categorize & budget over MCP.
- financeOAuthcom.zoninga
Personal finance for AI agents: accounts, budgets, goals, 9-strategy debt payoff, reports. OAuth 2.1
Headless API-first double-entry accounting & bookkeeping engine. 84 MCP tools over HTTP.
Track expenses, budgets, balances, transfers, and multi-currency reports with OAuth-secured tools.
Related MCP Servers
- AlicenseAqualityCmaintenanceSelf-hosted, read-only MCP server that connects banks, credit cards, loans, and brokerage accounts via Plaid. 9 tools for balances, transactions, recurring charges, liabilities, and investment holdings.97MIT
- FlicenseNot gradedqualityBmaintenanceMCP server for personal finance management. Enables natural language expense logging, budgeting, recurring charge detection, and statement import with deterministic local calculations.-
- FlicenseNot gradedqualityBmaintenanceSelf-hosted household finance app for shared expenses, budgets, investments, loans, and zakat, exposing MCP tools for AI agents to manage finances via natural language.3-
- AlicenseBqualityAmaintenanceEnables local-first personal finance management through deterministic tools for importing, categorizing, and analyzing bank transactions.36MIT