Skip to main content
Glama
finlynq

FinLynq

Official
by finlynq

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.

License: AGPL v3

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 -d

Before 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/mcp into the connector setup; no config file.

  • Claude Desktop (stdio) — point at mcp-server/index.ts with PF_USER_ID in 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 a pf_* 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

Available Tools

89 tools
add_accountB

Create a new financial account

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesAccount name (must be unique)
noteNo
typeYes'A'=asset, 'L'=liability
aliasNoOptional 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).
groupNoAccount group
currencyNoCurrency (defaults to your display currency)

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesGoal name
typeYesGoal type
accountNoLegacy single-account linker — name or alias (fuzzy matched). Use HTTP MCP for multi-account.
deadlineNoDeadline (YYYY-MM-DD)
account_idsNoMulti-account linker (issue #130). Refused on stdio — use HTTP MCP.
target_amountYesTarget amount

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
noteNo
typeYes
accountNoLinked account — name or alias (fuzzy matched against name; exact match on alias)
principalYes
start_dateYes
annual_rateYes
min_paymentNo
term_monthsYes
extra_paymentNo
payment_amountNo
payment_frequencyNo

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name of the holding
noteNo
symbolNoTicker symbol (e.g. 'VEQT.TO', 'BTC')
accountYesBrokerage account name or alias (fuzzy matched). Required because uniqueness is per (account, name).
currencyNo
isCryptoNo

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoSnapshot date (defaults to today)
noteNoOptional note
valueYesCurrent value
accountYesAccount name or alias (refused on stdio — Stream D Phase 4)

TDQS

A4.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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

Schema description coverage is 100% and the description adds 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.

Purpose5/5

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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
tagsNo
amountYes
account_idNo
category_idNo
descriptionNo
transaction_idYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Add'), 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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as 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

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
notesNo
amountYes
accountNoAccount name or alias (fuzzy matched against name; exact match on alias)
cadenceYes
categoryNo
currencyNo
next_billing_dateYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, 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_holdingB
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolNo
holdingIdNo
reportingCurrencyNo

TDQS

B3.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax transactions to process (default 500)

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
candidatesYes
confirmation_tokenYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNo
account_idNo
transactionsYesArray of transactions to record
idempotencyKeyNo

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

Cancel a pending MCP upload — marks the row as cancelled and deletes the file.

ParametersJSON Schema
NameRequiredDescriptionDefault
upload_idYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a simple tool with 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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_amountA
Read-onlyIdempotent

Convert an amount from one currency to another using triangulated FX rates

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes
dateNo
fromYes
amountYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCategory name (must be unique)
noteNo
typeYes'E'=expense, 'I'=income, 'R'=transfer
groupNo

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (create) and the resource (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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. There 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
priorityNoDefault 0
rename_toNo
assign_tagsNo
match_payeeYesPayee pattern (supports % wildcards)
assign_categoryNoREFUSED on stdio (Stream D Phase 4). Pass `assign_category_id` instead.
assign_category_idNoCategory FK (categories.id).

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo
accountNoREFUSED on stdio (Stream D Phase 4). Pass `account_id` instead.
account_idNoAccount FK (accounts.id).

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_budgetA
DestructiveIdempotent

Delete a budget entry for a category/month. Stream D Phase 4 (stdio): pass category_id (numeric) — category (name) is refused.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthYesMonth (YYYY-MM)
categoryNoREFUSED on stdio (Stream D Phase 4). Pass `category_id` instead.
category_idNoCategory FK (categories.id).

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCategory FK (categories.id).
nameNoREFUSED on stdio (Stream D Phase 4). Pass `id` instead.
confirmation_tokenNoOptional token from HTTP preview_delete_category (5-min TTL). Stdio accepts the call without one — the FK refuse-check is enforced unconditionally.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_overrideA
DestructiveIdempotent

Delete a manual FX rate override by id

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_goalA
DestructiveIdempotent

Delete a financial goal by id. Stream D Phase 4 (stdio): pass goal_id (numeric) — goal (name) is refused.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNoREFUSED on stdio (Stream D Phase 4). Pass `goal_id` instead.
goal_idNoGoal FK (goals.id).

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Delete) 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.

Usage Guidelines4/5

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_loanB
DestructiveIdempotent

Delete a loan by id

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance on when to use this tool 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_holdingA
DestructiveIdempotent

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
holdingYesHolding name OR symbol (fuzzy matched)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true. The description adds 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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_ruleB
DestructiveIdempotent

Delete a transaction rule by id

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Delete' and the resource '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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool 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_splitB
DestructiveIdempotent

Delete a split by id

ParametersJSON Schema
NameRequiredDescriptionDefault
split_idYes

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives (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_subscriptionB
DestructiveIdempotent

Permanently delete a subscription by id

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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

Given the simplicity of the tool (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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, 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_transactionA
DestructiveIdempotent

Permanently delete a transaction by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTransaction ID to delete

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (delete), 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.

Usage Guidelines3/5

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_transferA
DestructiveIdempotent

Permanently delete BOTH legs of a transfer pair in one statement. Identify by linkId OR by either leg's id.

ParametersJSON Schema
NameRequiredDescriptionDefault
linkIdNo
transactionIdNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'delete', the resource '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.

Usage Guidelines3/5

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_subscriptionsA
Read-onlyIdempotent

Scan recent transactions and return candidate subscriptions with regular cadence + stable amount. Returns a confirmationToken for bulk_add_subscriptions.

ParametersJSON Schema
NameRequiredDescriptionDefault
lookback_monthsNo

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's simplicity (one 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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterYes
category_idYes
confirmation_tokenYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_deleteA
DestructiveIdempotent

Commit a bulk delete. Must be preceded by preview_bulk_delete.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterYes
confirmation_tokenYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterYes
changesYes
confirmation_tokenYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathNo
upload_idNo
template_idNo
column_mappingNo
confirmation_tokenYes

TDQS

C2.5/5.0
Behavior2/5

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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_helpA
Read-onlyIdempotent

Discover available tools, schema, and usage examples

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNo
tool_nameNoGet help for a specific tool

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, 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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's simplicity (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.

Parameters3/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: '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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
currencyNoFilter by currency
reportingCurrencyNoISO code; defaults to user's display currency. Returned as response metadata for cross-currency aggregation context.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds 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.

Purpose5/5

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.

Usage Guidelines3/5

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

The description does not explicitly guide when to use this tool 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_summaryA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthYesMonth in YYYY-MM format
reportingCurrencyNoISO code; defaults to user's display currency.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's 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.

Usage Guidelines4/5

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_forecastA
Read-onlyIdempotent

Project cash flow for the next 30, 60, or 90 days based on recurring transactions and current balances

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoForecast horizon in days (default 90)

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a simple tool with 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_planA
Read-onlyIdempotent

Compare avalanche vs snowball payoff across all user loans. Loan balances stay in each loan's own currency; reportingCurrency is surfaced as metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
strategyNo
extra_paymentNo
reportingCurrencyNoISO code; defaults to user's display currency.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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_rateA
Read-onlyIdempotent

Get the FX rate to convert 1 unit of from into to on date. Cross-rates triangulate through USD; user overrides win.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes
dateNo
fromYes

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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

For a simple tool with 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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

Given no parameters and no output schema, the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

The description explicitly states when to use 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_templatesA
Read-onlyIdempotent

List all saved CSV import templates. Optionally supply comma-separated file headers to get match scores for each template.

ParametersJSON Schema
NameRequiredDescriptionDefault
headersNoComma-separated CSV column headers to score against templates

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a simple read-only 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

The description implies usage for listing 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_statementA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYesEnd date (YYYY-MM-DD)
start_dateYesStart date (YYYY-MM-DD)
reportingCurrencyNoISO code; defaults to user's display currency.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description 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.

Purpose5/5

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.

Usage Guidelines5/5

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_insightsC
Read-onlyIdempotent

Portfolio-level investment analytics. Stream D Phase 4: stdio cannot decrypt holding names — use HTTP MCP or the web UI for this query.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
targetsNo
benchmarkNo
reportingCurrencyNo

TDQS

C2.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
loan_idYes
as_of_dateNoYYYY-MM-DD (default: today)
reportingCurrencyNoISO code; defaults to user's display currency.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives. 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_loansA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves all 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.

Usage Guidelines4/5

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_worthA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
monthsNoIf set, return a trend over the last N months
currencyNoFilter by currency
reportingCurrencyNoISO code; defaults to user's display currency.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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

Schema coverage is 100%, and the description adds value: '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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoAccount name/alias (parity with HTTP — unused on stdio under Stream D Phase 4).
symbolsNo
account_idNoAccount FK (parity with HTTP transport — unused on stdio under Stream D Phase 4).
reportingCurrencyNoISO code; defaults to user's display currency.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNo
reportingCurrencyNoISO code; defaults to user's display currency.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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

Get detected recurring transactions (subscriptions, bills, salary). Average amounts stay in each transaction's account currency; reportingCurrency is surfaced as metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
reportingCurrencyNoISO code; defaults to user's display currency.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves 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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
reportingCurrencyNoISO code; defaults to user's display currency.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's simplicity (one 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.

Parameters3/5

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

The input schema has 100% description coverage for the single parameter '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.

Purpose4/5

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.

Usage Guidelines3/5

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

The description implies usage for retrieving 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_summaryA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource '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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives 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_recapA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoEnd date for the week (YYYY-MM-DD). Defaults to current week.
reportingCurrencyNoISO code; defaults to user's display currency.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get a 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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoIf true, parse and validate without inserting. Default: false
account_idNoAccount ID to assign transactions to (overrides template default)
csv_contentYesRaw CSV file content as a string
template_idYesID of the import template to use

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives 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_overridesA
Read-onlyIdempotent

List the user's manual FX rate overrides (rate_to_usd pins by currency over date ranges)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and 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.

Conciseness5/5

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.

Completeness5/5

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

For a tool with no parameters, 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.

Parameters4/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource '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.

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool 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_loansA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all 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.

Usage Guidelines5/5

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_uploadsA
Read-onlyIdempotent

List uploaded files that are pending or previewed (not yet executed or cancelled).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's simplicity (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.

Parameters4/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list' and the resource '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.

Usage Guidelines3/5

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

List all auto-categorization rules. FINLYNQ-84: returns JSONB conditions+actions. Stream D Phase 4: stdio cannot decrypt category/account/holding names.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists 'all 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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
transaction_idYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
opYesThe bank-ledger operation (HTTP MCP only).

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
opYesThe staged-import operation (HTTP MCP only).

TDQS

A4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds 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.

Purpose5/5

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.

Usage Guidelines4/5

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_categorizeA
Read-onlyIdempotent

Preview a bulk-categorize (shortcut for preview_bulk_update with only category_id).

ParametersJSON Schema
NameRequiredDescriptionDefault
filterYes
category_idYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_deleteA
Read-onlyIdempotent

Preview a bulk delete. Returns affected count, sample rows, and a confirmationToken (5-min TTL).

ParametersJSON Schema
NameRequiredDescriptionDefault
filterYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_updateA
Read-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.)

ParametersJSON Schema
NameRequiredDescriptionDefault
filterYes
changesYes

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathNo
upload_idNo
template_idNo
column_mappingNo

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
opYesThe reconcile operation (HTTP MCP only).

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoYYYY-MM-DD (default: today)
noteNo
tagsNoComma-separated tags
payeeYesPayee or merchant name
amountYesAmount in account currency (negative=expense, positive=income).
dryRunNoWhen true, run validation/resolution and return a preview WITHOUT writing.
accountNoREFUSED on stdio (Stream D Phase 4). Pass `account_id` instead.
categoryNoREFUSED on stdio (Stream D Phase 4). Pass `category_id` instead, or omit for auto-detection.
account_idNoAccount FK (accounts.id). Required on stdio.
category_idNoCategory FK (categories.id). Use this instead of `category` on stdio.
enteredAmountNoUser-typed amount in enteredCurrency.
enteredCurrencyNoISO code (USD/CAD/...) of enteredAmount; defaults to account currency.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoYYYY-MM-DD (default: today)
noteNo
tagsNo
amountYesCash amount sent, in SOURCE account's currency.
holdingNoREFUSED on stdio (Stream D Phase 4). In-kind transfers require name resolution — use HTTP MCP.
quantityNoREFUSED on stdio when paired with `holding`.
toAccountNoREFUSED on stdio (Stream D Phase 4). Pass `to_account_id` instead.
destHoldingNoREFUSED on stdio (Stream D Phase 4).
fromAccountNoREFUSED on stdio (Stream D Phase 4). Pass `from_account_id` instead.
destQuantityNo
to_account_idNoDestination account FK (accounts.id). Required on stdio.
receivedAmountNoCross-currency override: actual amount that landed in the destination.
from_account_idNoSource account FK (accounts.id). Required on stdio.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
ordered_idsYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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

The description is a single, front-loaded sentence with no extraneous words. It 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.

Completeness2/5

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

Given the simplicity of the tool (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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_splitsA
DestructiveIdempotent

Atomically replace all splits on a transaction. Validates sum equals parent amount (±$0.01).

ParametersJSON Schema
NameRequiredDescriptionDefault
splitsYes
transaction_idYes

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

The description implies when to use (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_transactionsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
limitNo
payeeNo
categoryNo
end_dateNo
account_idNo
max_amountNo
min_amountNo
start_dateNo
portfolio_holding_idNo

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness2/5

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

With 10 parameters, no output schema, and 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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines5/5

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

The description explicitly states when to use the tool 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_budgetA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthYesMonth (YYYY-MM)
amountYesBudget amount (positive number)
categoryYesCategory name (refused on stdio — Stream D Phase 4)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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

The description is two concise sentences. The first states the purpose, the second 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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

Pin a manual FX rate. Stored as rate_to_usd internally; one side of the from/to pair must be USD.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes
dateYes
fromYes
noteNo
rateYes
dateToNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
payeeYes
top_nNo
amountNo
account_idNo

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
match_typeNo
match_fieldNo
match_payeeNo
match_valueNo
sample_sizeNo
match_amountNo

TDQS

B3.4/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: '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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolNoREFUSED on stdio (Stream D Phase 4). Pass `holdingId` instead.
holdingIdNoFilter to this exact portfolio_holdings.id.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: '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.

Usage Guidelines4/5

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

Update name, group, currency, note, or alias of an account

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
noteNo
aliasNoNew alias — short shorthand used to match receipts/imports. Pass an empty string to clear.
groupNo
accountYesCurrent account name or alias (fuzzy matched against name; exact match on alias)
currencyNo

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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

Lacks details on return value, 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.

Parameters3/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates 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.

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., 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_goalA
Idempotent

Update a financial goal's target, deadline, status, or linked accounts. Refused on stdio (Stream D Phase 4 — no DEK).

ParametersJSON Schema
NameRequiredDescriptionDefault
goalYesGoal name (fuzzy matched)
nameNoRename the goal
statusNo
deadlineNo
account_idsNoReplace linked accounts (issue #130). Refused on stdio — use HTTP MCP.
target_amountNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates 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.

Usage Guidelines4/5

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

Update any field of an existing loan by id

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNo
noteNo
typeNo
accountNoLinked account — name or alias (fuzzy matched against name; exact match on alias). Empty string clears the link.
principalNo
start_dateNo
annual_rateNo
term_monthsNo
extra_paymentNo
payment_amountNo
payment_frequencyNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate mutation (readOnlyHint=false) and idempotency (idempotentHint=true); the description adds 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives 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_holdingA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
noteNo
symbolNoPass empty string to clear
accountNoREFUSED (issue #99): account moves create stale state. Use record_transfer (in-kind) instead.
holdingYesCurrent holding name OR symbol (fuzzy matched)
currencyNo
isCryptoNo

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'update' and the resource '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.

Usage Guidelines5/5

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNo
actionsNov2: Action[] JSON. Replaces actions entirely.
priorityNo
is_activeNo
rename_toNo
conditionsNov2: ConditionGroup JSON. Replaces conditions entirely.
assign_tagsNo
match_payeeNoLegacy: payee/contains condition
assign_categoryNoREFUSED on stdio (Stream D Phase 4). Pass `assign_category_id` instead.
assign_category_idNoLegacy: category FK for set_category action

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

Update fields of an existing split

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
tagsNo
amountNo
split_idYes
account_idNo
category_idNo
descriptionNo

TDQS

C2.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like 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_subscriptionB
Idempotent

Update any field of an existing subscription

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNo
notesNo
amountNo
statusNo
accountNoAccount name or alias (fuzzy matched against name; exact match on alias). Empty string clears.
cadenceNo
categoryNoEmpty string clears
currencyNo
next_billing_dateNo
cancel_reminder_dateNo

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'update', the resource '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.

Usage Guidelines3/5

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

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_*.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTransaction ID
dateNo
noteNo
tagsNo
payeeNo
amountNoAmount in account currency. Doesn't touch entered_* side.
categoryNoREFUSED on stdio (Stream D Phase 4). Pass `category_id` instead.
category_idNoCategory FK (categories.id). Use this instead of `category` on stdio.
enteredAmountNo
enteredCurrencyNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
noteNo
tagsNo
amountNo
linkIdNo
toAccountNoREFUSED on stdio (Stream D Phase 4). Pass `to_account_id` instead.
fromAccountNoREFUSED on stdio (Stream D Phase 4). Pass `from_account_id` instead.
to_account_idNo
transactionIdNo
receivedAmountNo
from_account_idNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 89 tool updatesv3.4.1
    • First observedadd_account
    • First observedadd_goal
    • First observedadd_loan
    • First observedadd_portfolio_holding
    • First observedadd_snapshot
    • First observedadd_split
    • First observedadd_subscription
    • First observedanalyze_holding
    • First observedapply_rules_to_uncategorized
    • First observedbulk_add_subscriptions
    • First observedbulk_record_transactions
    • First observedcancel_import
    • First observedconvert_amount
    • First observedcreate_category
    • First observedcreate_rule
    • First observeddelete_account
    • First observeddelete_budget
    • First observeddelete_category
    • First observeddelete_fx_override
    • First observeddelete_goal
    • First observeddelete_loan
    • First observeddelete_portfolio_holding
    • First observeddelete_rule
    • First observeddelete_split
    • First observeddelete_subscription
    • First observeddelete_transaction
    • First observeddelete_transfer
    • First observeddetect_subscriptions
    • First observedexecute_bulk_categorize
    • First observedexecute_bulk_delete
    • First observedexecute_bulk_update
    • First observedexecute_import
    • First observedfinlynq_help
    • First observedget_account_balances
    • First observedget_budget_summary
    • First observedget_cash_flow_forecast
    • First observedget_categories
    • First observedget_debt_payoff_plan
    • First observedget_financial_health_score
    • First observedget_fx_rate
    • First observedget_goals
    • First observedget_import_templates
    • First observedget_income_statement
    • First observedget_investment_insights
    • First observedget_loan_amortization
    • First observedget_loans
    • First observedget_net_worth
    • First observedget_portfolio_analysis
    • First observedget_portfolio_performance
    • First observedget_recurring_transactions
    • First observedget_spending_anomalies
    • First observedget_spending_trends
    • First observedget_spotlight_items
    • First observedget_subscription_summary
    • First observedget_transaction_rules
    • First observedget_weekly_recap
    • First observedimport_with_template
    • First observedlist_fx_overrides
    • First observedlist_loans
    • First observedlist_pending_uploads
    • First observedlist_rules
    • First observedlist_splits
    • First observedlist_subscriptions
    • First observedmanage_bank_ledger
    • First observedmanage_statement_import
    • First observedpreview_bulk_categorize
    • First observedpreview_bulk_delete
    • First observedpreview_bulk_update
    • First observedpreview_import
    • First observedreconcile
    • First observedrecord_transaction
    • First observedrecord_transfer
    • First observedreorder_rules
    • First observedreplace_splits
    • First observedsearch_transactions
    • First observedset_budget
    • First observedset_fx_override
    • First observedsuggest_transaction_details
    • First observedtest_rule
    • First observedtrace_holding_quantity
    • First observedupdate_account
    • First observedupdate_goal
    • First observedupdate_loan
    • First observedupdate_portfolio_holding
    • First observedupdate_rule
    • First observedupdate_split
    • First observedupdate_subscription
    • First observedupdate_transaction
    • First observedupdate_transfer

TDQS

C2.9/5.0

Scored across 89 tools

Disambiguation2/5

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 Consistency2/5

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.

Tool Count1/5

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.

Completeness3/5

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

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Self-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.
    9
    7
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server for personal finance management. Enables natural language expense logging, budgeting, recurring charge detection, and statement import with deterministic local calculations.
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    Self-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
    -
  • A
    license
    B
    quality
    A
    maintenance
    Enables local-first personal finance management through deterministic tools for importing, categorizing, and analyzing bank transactions.
    36
    MIT