Skip to main content
Glama

Server Details

Personal finance tracker: accounts, transactions, budgets, investments and analytics over OAuth.

Ownership verified
Status
Healthy
Uptime
84.9% over 22 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
letehaha/moneymatter
GitHub Stars
160

TDQS

B3.4/5.0

Scored across 113 tools

Disambiguation3/5

Many tools are individually distinct, but the 113-tool set has several overlapping or easily confused areas: get_accounts vs get_balance_history, search_transactions vs get_expenses_for_period/get_spending_by_categories, transfer_account_to_portfolio vs link_transaction_to_portfolio vs create_portfolio_cash_transaction, and multiple tracker/subscription suggestion flows. The detailed descriptions help resolve most ambiguity, but the sheer breadth makes misselection plausible.

Naming Consistency3/5

Most names use snake_case verb_noun patterns, which is readable, but listing operations are inconsistently split between get_* and list_* (e.g. get_accounts/get_categories/get_payees vs list_venture_deals/list_portfolio_transfers/list_tracker_suggestions). There are also related verb variants such as add/link/assign and create/transfer.

Tool Count1/5

113 tools is an extreme mismatch for a coherent MCP tool surface. Even though the domain is broad, this volume makes the toolset hard to navigate and violates the expectation of a well-scoped set.

Completeness4/5

The surface covers a very wide range of finance workflows: transactions, categories, tags, payees, groups, subscriptions, trackers, portfolios, investments, venture deals, goals, and automations. There are minor gaps such as no account creation/update beyond archive/adjust, no explicit budget-plan tools, and limited attachment lifecycle beyond upload URL creation.

Available Tools

113 tools
accept_tracker_suggestionsAInspect

Accept pending smart-tracking suggestions of a tracker the user owns: each suggested transaction is linked to the tracker. Suggestion ids come from list_tracker_suggestions; fails if any is not pending. Returns resolvedCount.

NameRequiredDescriptionDefault
trackerIdYesID of a tracker the user owns
suggestionIdsYesSuggestion IDs from list_tracker_suggestions

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description must carry the behavioral load, and it does well: it discloses the mutation effect (transactions linked to the tracker), the ownership constraint on trackerId, and the atomic-ish failure condition ('fails if any is not pending'), plus the returned field resolvedCount. It does not describe auth scope beyond ownership, rate limits, or whether the failure rolls back all links, leaving some gaps.

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

Conciseness5/5

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

Three compact sentences, front-loaded with the action and effect, then provenance of ids, then failure/return behavior. No filler.

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

Completeness4/5

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

For a two-parameter mutation with no output schema and no annotations, the description covers effect, provenance, failure condition, and return value. Remaining gaps are secondary (rollback semantics, explicit alternative tool) rather than things an agent needs to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters are documented in the schema, so the baseline is 3. The description's note that ids come from list_tracker_suggestions and that trackerId must be owned mostly restates what the schema already says, adding little beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (accept) plus resource (pending smart-tracking suggestions of a tracker) and the side effect (each suggested transaction is linked to the tracker). It is clearly distinguishable from the sibling list_tracker_suggestions (which supplies ids) and reject_tracker_suggestions (implied opposite).

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?

Tells the agent where the suggestion ids come from (list_tracker_suggestions) and the precondition for success (all must be pending, otherwise the call fails). It stops short of explicitly naming reject_tracker_suggestions as the alternative for declining, so it is clear context rather than full when/when-not routing.

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

add_transactions_to_groupAInspect

Add one or more transactions to an existing transaction group. Transfer pairs are auto-included. Returns the updated group with all its transactions. Requires finance:write scope.

NameRequiredDescriptionDefault
groupIdYesID of the transaction group to add transactions to
transactionIdsYesIDs of transactions to add to the group

TDQS

A3.6/5.0
Behavior4/5

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

No annotations, so the description carries the full burden and does a solid job: it discloses an automatic side effect ('Transfer pairs are auto-included'), an auth requirement ('Requires finance:write scope'), and return behavior. Gaps remain — no mention of validation errors, duplicate handling, or partial-failure behavior for the array input.

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 short, front-loaded sentences with zero filler. The core action leads, followed by the non-obvious side effect, return shape, and auth need — each sentence earns its place.

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

Completeness4/5

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

For a simple two-parameter mutation with no output schema, the description covers the return value, an automatic side effect, and the auth scope. Only behavioral edge cases (idempotency, error conditions) are absent, 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?

Schema description coverage is 100% and both parameters are documented in the schema (groupId, transactionIds). The description adds only the cardinality hint 'one or more', which is already captured by the array type, so the baseline 3 applies.

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?

States a specific verb and resource: 'Add one or more transactions to an existing transaction group.' The resource naming naturally separates it from add_transactions_to_budget and remove_transactions_from_group, but it never names those siblings explicitly, so differentiation rests on the reader's inference.

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 phrase 'existing transaction group' implies a prerequisite and the resource scoping implies usage, but there is no explicit when-to-use, when-not-to-use, or alternative pointer (e.g., add_transactions_to_budget vs this). An agent must infer the choice from the resource name alone.

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

add_transactions_to_trackerAInspect

Manually link one or more transactions to a tracker, alongside any links its category and tag rules add. Returns a success message on completion.

NameRequiredDescriptionDefault
trackerIdYesID of the tracker to link transactions to
transactionIdsYesIDs of the transactions to add to the tracker

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries full behavioral burden. It discloses an important side effect (category and tag rules also add links) and mentions a success message return, but omits permission requirements, idempotency, and handling of already-linked transactions.

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 zero waste: first states the action, then the side effect and return behavior. Information is front-loaded and appropriately sized.

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

Completeness3/5

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

Given no output schema and no annotations, the description should ideally explain return values and failure modes more thoroughly. It provides the key side-effect context but leaves the 'success message' vague and omits permission or error behavior, so it is only 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?

Schema description coverage is 100%, so both parameters are fully documented in the schema. The description adds no extra parameter meaning beyond saying 'one or more transactions' and 'a tracker', so the baseline of 3 applies.

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 a specific verb (manually link) and resource (one or more transactions to a tracker). The word 'manually' implicitly distinguishes this from automatic suggestion acceptance (accept_tracker_suggestions), but it does not explicitly name any 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 Guidelines3/5

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

The description implies usage through 'manually link' but provides no explicit when-to-use or when-not-to-use guidance. It does not name alternatives such as accept_tracker_suggestions or link_transactions_to_subscription, leaving routing to inference.

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

adjust_account_balanceAInspect

Set an account to a specific balance by creating an adjustment transaction for the difference. Returns the previous balance, new balance, and the generated transaction (null if the balance was already at the target).

NameRequiredDescriptionDefault
noteNoOptional note to attach to the adjustment transaction.
accountIdYesID of the account to adjust.
newBalanceYesTarget balance as a decimal (e.g. 1500.00). An adjustment transaction is created for the diff.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the key side effect (a transaction is created for the diff) and the no-op case (transaction is null when already at target) — a genuinely useful behavioral detail. It omits permission/auth requirements, whether investment or archived accounts are rejected, and whether the generated transaction is reversible or categorized.

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 tight sentences: the first gives the operation and mechanism, the second gives the return shape. Front-loaded and every clause 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?

Because there is no output schema, the description's explicit return-value sentence is doing real work and covers the null case. What remains thin is account-type/eligibility context for a mutation tool with zero annotations, but for a 3-parameter tool this is close to complete.

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

Parameters3/5

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

Schema coverage is 100%, so all three parameters are already documented in the schema, including the note field and the decimal example for newBalance. The description restates the diff-based semantics of newBalance but adds no new format or constraint detail, so baseline 3 applies.

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?

States a specific verb and resource (set an account to a specific balance) plus the mechanism used (an adjustment transaction for the difference), which clearly separates it from plain create_transaction or update_transaction. It never names a sibling, so the differentiation is implied rather than explicit.

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 the use case (getting an account to a target balance) and hints at an alternative path via 'adjustment transaction', but gives no explicit when-to-use/when-not-to guidance, no prerequisites (account must exist, be non-investment, etc.), and no exclusions.

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

archive_accountAInspect

Archive or unarchive a user account. Archiving removes the account from groups and unlinks subscriptions. Set archived=false to restore an archived account to active status.

NameRequiredDescriptionDefault
archivedYestrue to archive the account, false to unarchive (restore to active status).
accountIdYesID of the account to archive or unarchive.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses two important side effects: removal from groups and unlinking of subscriptions. However, it does not state whether the operation is reversible or what permissions are required, leaving gaps for a destructive mutation.

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 tightly written sentences, front-loaded with the core action, then the side effects, then the reverse case. No filler or repetition.

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 two-parameter mutation with no annotations and no output schema, the description covers the essential effects but omits permission requirements, reversibility details, and any return-value information. It is adequate but not 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?

The schema documents both parameters fully, including the boolean semantics of 'archived'. The description reinforces the false case with 'restore to active status,' adding a small amount of clarity about the unarchive effect, though it does not give new syntax or format guidance.

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 a specific verb and resource: 'Archive or unarchive a user account.' The title is null, so there is no redundancy there. However, it does not distinguish itself from the sibling archive_budget, which uses an analogous archiving 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 usage through the archived parameter ('Set archived=false to restore'), but it provides no explicit when-to-use guidance or exclusions relative to alternatives. No sibling tool is named or contrasted.

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

archive_trackerAInspect

Archive or unarchive a tracker. Pass isArchived: true to archive (sets status to "archived"), false to restore it to active. Returns the updated tracker.

NameRequiredDescriptionDefault
trackerIdYesID of the tracker to archive or unarchive
isArchivedYestrue to archive the tracker, false to restore it to active

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the concrete state change ("sets status to 'archived'"), the reversibility of the operation, and that the updated tracker is returned. It does not mention permission/auth requirements, side effects on the tracker's linked transactions or lines, or any rate limits.

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

Conciseness4/5

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

Three short sentences, front-loaded with the action, then the parameter mechanic, then the return value. Efficient overall, though the isArchived explanation partially duplicates what the schema already states.

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

Completeness4/5

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

For a two-parameter toggle with no output schema, the description is nearly sufficient: it covers the operation, the boolean meaning, and the returned value. It omits the side-effect scope (what archiving does to associated transactions/lines) and any auth context, which would round it out.

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

Parameters3/5

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

Schema description coverage is 100%, and both parameters already document themselves (trackerId = ID of the tracker, isArchived = true to archive / false to restore). The description's restatement of the isArchived semantics adds no meaning beyond the schema, so the baseline of 3 applies.

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 a specific verb pair and resource: "Archive or unarchive a tracker." An agent immediately knows this is a reversible state toggle on a tracker, not a delete. However, it never names or distinguishes itself from close siblings such as delete_tracker, update_tracker, or archive_account, which is what a 5 would require.

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?

Usage is implied through the boolean semantics (true = archive, false = restore), which is enough to invoke the tool, but there is no guidance on when to prefer this over delete_tracker or update_tracker, and no prerequisites or exclusions are stated.

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

assign_tags_to_transactionAInspect

Assign one or more tags to a transaction. Use when the user wants to label a transaction with existing tags. Already-assigned tags are silently skipped. Returns counts of added and skipped tags.

NameRequiredDescriptionDefault
tagIdYesID of the tag to assign.
transactionIdsYesList of transaction IDs to tag.

TDQS

A4/5.0
Behavior4/5

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

With no annotations present, the description carries the full burden and does well on the mutation semantics: it discloses that duplicate assignments are silently skipped (idempotent-ish behavior) and that the response contains added/skipped counts. It does not cover permission requirements, whether the tag must exist, or whether assigning tags triggers transaction automations.

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 short sentences, zero filler, with the core action stated first and the behavioral caveats and return shape following. Nothing needs to be trimmed.

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

Completeness4/5

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

For a two-parameter mutation with no annotations and no output schema, the description supplies the key facts an agent needs: the duplicate-skip behavior and the return counts. Remaining gaps are permission/prerequisite details and the absence of any alternative-tool routing.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters are documented in the schema, so the baseline is 3. The description adds the "existing tags" constraint on tagId but no format or cardinality detail beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb (assign) and resource (tags on a transaction), which cleanly separates it from siblings like remove_tags_from_transaction and add_transactions_to_group. The framing is slightly inverted versus the schema (one tagId applied to many transactionIds, not many tags to one transaction), which is a minor inaccuracy but does not obscure the 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?

"Use when the user wants to label a transaction with existing tags" gives a clear trigger condition and implicitly signals that the tag must already exist. It stops short of naming alternatives (remove_tags_from_transaction) or stating exclusions, so it is clear context without full routing guidance.

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

bulk_update_transactionsAInspect

Update multiple transactions at once. Provide transactionIds plus at least one of categoryId, tagIds, note, or payeeId. Tags can be added to, removed from, or replaced on all specified transactions.

NameRequiredDescriptionDefault
noteNoNote to set on all transactions
tagIdsNoTag IDs to apply according to tagMode
payeeIdNoPayee ID to assign to all transactions. Pass null to clear
tagModeNoHow to apply tagIds: add (default) appends, replace overwrites, remove removes those tags
categoryIdNoNew category ID to assign to all transactions
transactionIdsYesIDs of transactions to update

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It says the tool updates transactions in bulk and supports tag add/remove/replace, but it does not disclose permissions, partial-failure behavior, max batch size, reversibility, or return behavior, which are important for a bulk mutation.

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

Conciseness5/5

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

The description is three compact sentences with no filler. The purpose is front-loaded, followed by the required parameter combination and tag-mode behavior.

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 bulk mutation with no annotations and no output schema, the description covers purpose, required fields, and tag modes, but leaves out operational details such as batch limits, failure handling, and return shape. It is adequate but incomplete for an agent deciding whether and how safely to invoke it.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds a meaningful cross-field constraint not expressed in the schema: transactionIds must be supplied together with at least one of categoryId, tagIds, note, or payeeId.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description states a specific verb and resource: update multiple transactions at once. The bulk scope distinguishes it from single-transaction siblings such as update_transaction, and it lists the fields that can be changed.

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 gives a clear invocation rule: provide transactionIds plus at least one of categoryId, tagIds, note, or payeeId. It does not explicitly name when to use this versus update_transaction or the tag-specific sibling tools, so it lacks exclusion guidance.

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

create_attachment_upload_urlAInspect

Get a short-lived upload URL for attaching receipt/invoice files (JPEG, PNG, WebP, PDF) to a transaction. File bytes cannot be sent through MCP: POST each file as the raw request body to the returned url with the returned headers, plus the header named by filenameHeader set to the URI-encoded original filename of that file (e.g. via curl --data-binary). The URL works for multiple files until it expires. Requires a client that can make HTTP requests with local files.

NameRequiredDescriptionDefault
transactionIdYesID of the transaction to attach files to

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and discloses important behavior: the URL is short-lived, reusable across multiple files until expiry, and requires an HTTP-capable client. It does not mention authentication scopes, error handling, or upload side effects, which keeps it from a 5.

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 front-loaded with the tool's purpose, then efficiently adds operational instructions in a logical order. Every sentence contributes necessary context for correct invocation, with no filler.

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

Completeness4/5

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

For a tool with no output schema, the description covers the return components (url, headers, filenameHeader) and the required follow-up workflow, which is enough to use it correctly. It still omits exact expiry duration and formal response shape, so it is strong but not fully exhaustive.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents transactionId as the required UUID of the transaction to attach files to. The description adds only the general purpose of the parameter and no new syntax or format details, making the baseline 3 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 states a specific verb and resource: get a short-lived upload URL for attaching receipt/invoice files to a transaction. It also names accepted file types and the target entity, so an agent can identify exactly what this unique tool does.

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

Usage Guidelines5/5

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

It explicitly explains when to use it and the critical constraint that file bytes cannot be sent through MCP. It then gives the required alternative workflow: POST raw file contents to the returned URL with the returned headers and the filename header. It also states the client prerequisite, leaving no ambiguity.

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

create_categoryAInspect

Create a new transaction category. Supports nested categories via parentId — child categories inherit the parent color if none is provided. Use when the user wants a new category to classify transactions.

NameRequiredDescriptionDefault
iconNoOptional icon identifier for the category.
nameYesCategory name.
typeNoCategory type: "custom" (default, user-editable) or "internal" (system-managed).
colorNoHex color code (e.g. "#4CAF50"). Inherited from parent if omitted.
parentIdNoID of the parent category to create a subcategory.

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose real behavior — nested categories via parentId and color inheritance from the parent — but says nothing about permissions, duplicate-name handling, the effect of type='internal', or what the call returns, which leaves meaningful gaps for a mutation tool.

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?

Three short sentences, front-loaded with the core action before the nesting detail and the usage note. Each sentence carries information, though the closing 'use when' sentence is close to filler given the already-clear 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?

For a 5-parameter mutation tool with no annotations and no output schema, the description covers purpose and one notable behavior but omits return value, error/conflict behavior, and prerequisite permissions. Adequate but visibly incomplete.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description reinforces parentId/color inheritance but largely restates what the schema's own field descriptions already state, adding no new syntax or constraint 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?

States a specific verb and resource ('Create a new transaction category') that is unambiguous against catalog siblings such as create_tag and create_payee. It does not explicitly differentiate itself from those siblings, but the resource noun is distinct enough that no confusion arises.

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?

'Use when the user wants a new category to classify transactions' gives a clear triggering condition. There is no when-not guidance and no mention of alternatives (e.g. update_category for existing ones), which keeps it short of a 5.

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

create_goalAInspect

Create a savings goal: a target amount (optionally by a date) funded by percent shares or fixed amounts of one or more accounts. Fails when the goal currency has no exchange rate, an account would pass 100% shared across non-archived goals (the error names the account and its free %), or fixed amounts alone fall short of the target. Needs the Goals feature on the plan or an active trial. Returns the goal in the get_goals shape.

NameRequiredDescriptionDefault
nameYesGoal name
accountsYesAccounts backing the goal, at least one. Each is either { accountId, sharePercent } or { accountId, fixedAmount, fixedPosition? }. A fixedAmount (decimal in the account's currency) is taken from the balance first; when the balance can't cover every goal's fixed amount on the account, they are filled in fixedPosition order (0 first; omit it to keep the current place or append). sharePercent (0 < x <= 100) is the part of what is left after fixed amounts. Owned general, cash, current, saving, investment or crypto accounts only. An account's sharePercent values across non-archived goals cannot exceed 100%. When every account is a fixedAmount, their sum must reach targetAmount
targetDateNoOptional deadline (yyyy-MM-dd)
currencyCodeYesISO 4217 code of the target currency, e.g. USD. Usually the user's base currency
targetAmountYesTarget as a decimal amount in currencyCode (e.g. 5000.00)
plannedMonthlyNoOptional planned saving per month, decimal in currencyCode. When set it is used as the pace instead of the history
reachedHoldDaysNoDays (0-365, default 30) after first reaching the target during which a dip below it still counts as reached. 0 follows the balance live

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does well: it discloses the plan/trial prerequisite, specific failure modes including exchange-rate issues and the 100% shared-account constraint, and the return shape. It could add more about duplicate-goal handling or side effects, but the core behavior is transparent.

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 front-loaded with the create action, followed by failure conditions, prerequisite, and return shape in four efficient sentences. Every sentence contributes useful information with no filler.

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 7-parameter creation tool with detailed schema coverage, the description supplies the remaining context an agent needs: feature availability, failure modes, account-sharing constraints, and return shape via the get_goals reference. No output schema exists, but the description adequately explains the result.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema itself thoroughly documents parameters including the nested accounts funding rules. The description reinforces the funding model at a high level but does not add parameter-level 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 starts with a specific verb and resource: 'Create a savings goal', then specifies the target amount, optional date, and account-funding model. This clearly distinguishes it from sibling tools such as get_goals, 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 Guidelines4/5

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

It states a key prerequisite, 'Needs the Goals feature on the plan or an active trial', and lists failure conditions that help determine whether the call is viable. However, it does not explicitly name alternatives such as update_goal for modifying a goal or get_goals for listing goals.

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

create_investment_transactionAInspect

Record a new investment transaction (buy, sell, dividend, fee, etc.) in a portfolio. The security must already exist in the portfolio as a holding — call search_securities to resolve a ticker to a securityId, then ensure a holding exists. quantity, price, and fees are decimal strings (e.g. "10.5", "150.00", "0.00").

NameRequiredDescriptionDefault
dateYesWhen the trade occurred. Accepts a date-only value (ISO 8601, e.g. "2024-03-15") or a full datetime (e.g. "2024-03-15T09:30:00.000Z"); date-only is stored at UTC midnight.
feesYesTransaction fees/commissions as a decimal string (e.g. "0.00")
nameNoOptional label or note for this transaction
priceYesPrice per share/unit as a decimal string (e.g. "150.00")
categoryYesTransaction type: buy, sell, dividend, transfer, tax, fee, cancel, or other
quantityYesNumber of shares/units as a decimal string (e.g. "10.5")
securityIdYesSecurity ID — resolve via search_securities first
portfolioIdYesPortfolio ID (from get_portfolios)

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the holding-existence prerequisite, but does not cover permissions, side effects on balances/holdings, duplicate handling, or auth requirements for a mutation 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?

Three tightly packed sentences with no waste. Purpose is front-loaded, followed by the critical prerequisite and then the numeric formatting note.

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

Completeness4/5

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

For an 8-parameter mutation tool with no annotations and no output schema, the description covers the essential workflow and prerequisite. It is not exhaustive about side effects or return behavior, but the rich schema handles field-level details.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter. The description's decimal-string guidance for quantity, price, and fees largely repeats schema details rather than adding new semantic constraints, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (Record), resource (investment transaction), and scope (in a portfolio), with common categories in parentheses. This differentiates it from generic transaction tools and portfolio cash transaction tools without needing to open the schema.

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?

Gives a clear precondition and workflow: the security must already exist as a holding, and the agent should call search_securities to resolve a ticker to a securityId. It does not explicitly name when to use alternative tools such as create_portfolio_cash_transaction, but the context is strong.

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

create_payeeBInspect

Create a Payee (merchant/counterparty) for the user. Use when the user wants to register a new merchant before linking transactions. Returns the created Payee.

NameRequiredDescriptionDefault
nameYesDisplay name for the Payee, max 200 chars.
defaultCategoryIdNoOptional category id automatically applied to future transactions linked to this Payee.

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It mentions that a Payee is returned, but says nothing about duplicate-name handling, side effects on existing payees/transactions, or permission requirements. For a mutation tool with zero annotation coverage this is a significant gap.

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?

Three short sentences, front-loaded with the core action before the usage cue and return note. No filler, though 'Returns the created Payee' adds little concrete information given the absence of an output schema.

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 two-parameter create tool with a fully documented schema, the description covers purpose, when-to-use, and that something is returned. However, the return statement is vague with no output schema to fill in fields, and duplicate/permission behavior is unaddressed.

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 both parameters (name, defaultCategoryId) are already fully documented in the schema. The description adds no syntax, format, or constraint detail beyond that, so the baseline 3 applies.

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?

States a specific verb ('Create') and resource ('Payee'), and even clarifies the domain term as 'merchant/counterparty'. The create-vs-update/delete/get distinction from siblings is obvious from the verb alone, but no sibling is named explicitly, so it falls short of the top tier.

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 gives the triggering context: 'Use when the user wants to register a new merchant before linking transactions.' This is a clear condition for invocation. There is no when-not guidance (e.g., duplicates, or use update_payee instead), so it stops short of a 5.

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

create_portfolioAInspect

Create a new investment portfolio for the user. Use when the user wants to track a new brokerage account, retirement fund, or savings vehicle. Returns the created portfolio with its id, which can then be used with create_investment_transaction and get_portfolio_holdings.

NameRequiredDescriptionDefault
nameYesPortfolio name (must be unique for this user)
isEnabledNoWhether the portfolio is active (default: true)
descriptionNoOptional description of the portfolio
portfolioTypeYesType of portfolio: investment, retirement, savings, or other

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It helpfully discloses the return ('Returns the created portfolio with its id') and downstream linkage, which is valuable since there is no output schema. However, it omits permission requirements, the duplicate-name failure behavior (only hinted at in the schema), and any reversibility/side-effect notes for this mutation.

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 tight sentences, front-loaded with the action, followed by usage context and the return/follow-up. Every sentence earns its place with no filler.

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 create operation with a fully documented schema and no output schema, the description supplies the missing return-value and follow-up context. It is nearly complete, losing only minor points for not covering failure modes or prerequisites of a mutation tool with no annotations.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters including the enum values and the uniqueness constraint on name. The description adds no syntax or format detail beyond that, so the baseline 3 applies.

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?

Specific verb + resource ('Create a new investment portfolio') with clear scope ('for the user'). It distinguishes itself from the many other create_* siblings by naming the noun and the domain, though it does not explicitly contrast with near-neighbors like create_portfolio_cash_transaction or create_budget.

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

Usage Guidelines4/5

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

Gives concrete when-to-use context ('track a new brokerage account, retirement fund, or savings vehicle'), which maps cleanly onto the portfolioType enum. It stops short of naming when NOT to use it or naming an explicit alternative create tool, so it is clear context without exclusions.

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

create_portfolio_cash_transactionAInspect

Record a direct cash deposit into or withdrawal from an investment portfolio without touching any regular account — no bank transaction is created. Use transfer_account_to_portfolio / transfer_portfolio_to_account when the money moves to or from a tracked account.

NameRequiredDescriptionDefault
dateYesDate in YYYY-MM-DD format
typeYesdeposit adds cash to the portfolio, withdrawal removes it
amountYesAmount as a positive decimal string (e.g. "500.00")
descriptionNoOptional note
portfolioIdYesPortfolio ID (from get_portfolios)
currencyCodeYesCurrency of the cash (ISO 4217, e.g. "USD")
isAdjustmentNoSet true when the entry only reconciles recorded cash to reality (excluded from contribution reporting). Default: false

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden, and it does disclose a real behavioral trait: no bank transaction is created and no regular account is affected. It does not cover permissions needed, reversibility/undo path (e.g. delete_investment_transaction), or error behavior, which a mutation tool ideally should.

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 tight sentences with the primary behavior first and the routing rule second; every clause carries information and nothing is redundant.

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 7-parameter mutation tool with no annotations and no output schema, the description covers purpose, scope, and sibling routing well. It omits any note on required permissions, validation failures, or how to reverse the entry, leaving a small gap.

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

Parameters3/5

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

Schema description coverage is 100%, so all seven parameters (including the enum on type and the isAdjustment flag) are already documented in the schema. The description adds no parameter-level detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a precise verb and resource ('Record a direct cash deposit into or withdrawal from an investment portfolio') and scopes it negatively ('without touching any regular account'). An agent can distinguish it from the transfer siblings without opening the schema.

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 names the alternatives (transfer_account_to_portfolio / transfer_portfolio_to_account) and the condition that selects them ('when the money moves to or from a tracked account'). This is exactly the when-to-use/when-not guidance the dimension rewards.

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

create_subscriptionAInspect

Create a new subscription, recurring bill, or installment plan. Use type="subscription" for SaaS/streaming services, type="bill" for utilities, and type="installment" for a finite financed purchase paid off over a fixed number of payments. An installment requires maxOccurrences (number of payments) and dueDate (first payment date). expectedAmount is a decimal in the subscription currency. Requires finance:write scope.

NameRequiredDescriptionDefault
nameYesDisplay name of the subscription (e.g. "Netflix", "Electricity")
typeNoType: "subscription" (default), "bill", or "installment"
notesNoAdditional notes about the subscription
dueDateNoFirst payment date (ISO 8601). Required for installments; enables a payment schedule.
endDateNoEnd date if the subscription is finite (ISO 8601)
accountIdNoAccount ID to associate with this subscription
frequencyYesBilling frequency: weekly, biweekly, monthly, quarterly, semi_annual, annual
startDateYesStart date of the subscription (ISO 8601, e.g. "2024-01-01")
categoryIdNoCategory ID to associate with this subscription
expectedAmountNoExpected payment amount as a decimal (e.g. 9.99). Use with expectedCurrencyCode
maxOccurrencesNoTotal number of payments. Required for installments; null/omitted means an indefinite schedule.
transactionTypeNoTransaction type: "expense" (default) or "income"
expectedCurrencyCodeNoCurrency code for expectedAmount (e.g. "USD", "EUR")

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses the required auth scope (`finance:write`) and installment-specific constraints (`maxOccurrences` and `dueDate`), which are valuable. But it omits other behavioral details such as idempotency, side effects (e.g., schedule creation), or what happens on duplicate input, leaving gaps.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then flows logically through type guidance, installment requirements, amount format, and auth scope. Every sentence earns its place with no redundancy, and the size is appropriate for a 13-parameter tool.

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 13 parameters, no output schema, and no annotations, the description covers purpose, type usage, key installment constraints, amount semantics, and auth scope. It could do more to explain side effects or return behavior, but for a create tool it is largely 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%, so the baseline is 3. The description adds meaning by explaining the use cases for each `type` enum value (SaaS/streaming, utilities, financed purchase) and clarifying that `expectedAmount` is a decimal in the subscription currency, going beyond the schema's brief 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 states a specific verb (Create) and resource (subscription, recurring bill, or installment plan), and clearly distinguishes the three subtypes. The resource is distinct from siblings like create_transaction or create_budget.

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?

It gives clear context for choosing the `type` parameter (SaaS/streaming vs utilities vs financed purchase), which is helpful. However, it does not mention when to use this tool versus alternatives like `detect_subscription_candidates` or `link_transactions_to_subscription`, and offers no exclusions. Usage is implied rather than explicitly guided.

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

create_tagAInspect

Create a new tag that can be assigned to transactions. Use when the user wants to label or categorize transactions with a custom tag. Returns the created tag with its ID.

NameRequiredDescriptionDefault
iconNoOptional icon identifier for the tag.
nameYesTag name (must be unique for this user).
colorYesHex color code for the tag (e.g. "#FF5733").
descriptionNoOptional description of the tag.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It does disclose the return value ('Returns the created tag with its ID'), but says nothing about the uniqueness constraint on name (only implied via schema), permissions, or failure behavior when a duplicate name is supplied.

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 short sentences, front-loaded with the action, then usage, then return behavior. No filler; each sentence adds a distinct piece of 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?

With no output schema, the description usefully states the return value, and the schema fully covers parameters. It is nearly complete for a simple create tool, missing only error/uniqueness behavior and permission expectations.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter (name, color, icon, description) is documented in the schema. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

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?

States a specific verb and resource ('Create a new tag') and clarifies what the tag is for ('assigned to transactions'). It does not explicitly distinguish itself from nearby siblings like create_category or update_tag, so it falls short of a 5.

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?

Gives clear usage context: 'Use when the user wants to label or categorize transactions with a custom tag.' No when-not guidance or alternative (e.g., create_category for spend categorization) is offered, so it stops short of 5.

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

create_trackerAInspect

Create a tracker with an optional spending limit and date range. It does not create or change the period-based Budget plan. Set rulesEnabled with categoryIds and/or tagIds to auto-add matching transactions; link others with add_transactions_to_tracker. Set aiEnabled with aiDescription and startDate to turn on smart tracking; review its suggestions with list_tracker_suggestions. Returns the created tracker with its ID, status, rule categories and tags.

NameRequiredDescriptionDefault
nameYesTracker name
statusNoTracker status (default: active)
tagIdsNoRule tags
endDateNoTracker end date (ISO 8601)
aiEnabledNoTurn on smart tracking: an AI scans the date range and links or suggests matching transactions. Requires aiDescription and startDate
startDateNoTracker start date (ISO 8601)
categoryIdsNoRule categories; parent IDs include their children
limitAmountNoSpending limit as a decimal amount in the user's base currency (e.g. 500.00)
rulesCleanupNoRemove rule-added transactions that stop matching the rules. Default: true
rulesEnabledNoAuto-add the user's transactions in the date range matching any of categoryIds or tagIds. Needs at least one of them. Default: false
aiDescriptionNoPlain-language description of what belongs in the tracker (max 500 chars), e.g. "Trip to Lisbon: flights, hotels, food"
aiPreWindowDaysNoDays before startDate the AI also scans, for things booked in advance. One of 0, 14, 30, 60, 90, 180. Default: 60

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full load and does well: it discloses that rule matching auto-adds transactions (a write side effect on other records), that AI mode scans a date range and produces suggestions, and what the call returns (tracker with ID, status, rule categories and tags). It stops short of stating permission requirements or what happens on validation failure.

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?

Four sentences, front-loaded with the core action and its scope, then behavioral modes, then the return value. Every sentence adds information; only the return-value sentence is slightly redundant with an obvious creation result.

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 12-parameter creation tool with no output schema, the description covers scope, mode flags, follow-up tools, and the shape of the returned object. Minor gaps remain around failure modes and default behavior of rulesCleanup, which only the schema explains.

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 earns above that by surfacing cross-parameter dependencies (rulesEnabled needs categoryIds and/or tagIds; aiEnabled requires aiDescription and startDate) that are easy to miss when skim-reading 12 properties. It does not add format or unit details 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?

States a specific verb+resource ("Create a tracker") and immediately scopes it with the optional limit and date range. It also carves out the nearest ambiguous concept by declaring it does not create the period-based Budget plan, so an agent can separate it from budget-style tools without opening the schema.

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?

Gives concrete routing: use rulesEnabled with categoryIds/tagIds for auto-add, use add_transactions_to_tracker to link existing transactions, and use list_tracker_suggestions to review AI results. The only missing piece is an explicit statement of when not to call it (e.g. vs update_tracker for existing trackers), which is largely self-evident from the name.

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

create_tracker_lineAInspect

Add a line to a tracker: a named category set with its own optional limit. A transaction lands in at most one line — the first line by position whose category set (expanded to children) contains its category; spending matching no line counts as "other". Requires manage access to the tracker. Returns the created line with its ID, limit and categories.

NameRequiredDescriptionDefault
nameYesLine name
positionNo0-based order among the lines. Default: after the last line
trackerIdYesID of the tracker to add the line to
categoryIdsYesCategory IDs the line covers; parents expand to their children. Categories resolve against the tracker owner's tree.
limitAmountNoLine spending limit as a decimal amount in the tracker owner's base currency (e.g. 200.00). Omit or null for no limit

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the permission requirement, the first-match-by-position categorization rule, the 'other' fallback, and the return payload. It omits what happens to already-existing transactions when a new line is inserted earlier in the order, which is a meaningful behavioral gap for a mutation tool.

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?

Four tight sentences, front-loaded with the purpose, then matching semantics, then prerequisite, then return shape. Each sentence carries information; the only mild redundancy is restating child-category expansion that the schema also documents.

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 5-parameter create tool with no annotations and no output schema, the description covers purpose, prerequisite, matching behavior, and return value. The remaining gap is the side effect on existing transaction categorization, which an agent would otherwise have to guess.

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, but the description adds real meaning: it explains that a line's category set expands to children and that position determines which line captures a transaction (first match wins). That priority semantics for 'position' goes beyond the schema's '0-based order among the lines'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description opens with a specific verb+resource ('Add a line to a tracker') and immediately defines what a line is (a named category set with an optional limit), which is the domain concept an agent needs to distinguish this from update_tracker_line or create_tracker. Sibling names aren't cited, but the add-vs-update distinction 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?

It gives a clear precondition ('Requires manage access to the tracker') and explains the matching semantics that motivate creating a line, but it never explicitly says when to use this instead of update_tracker_line or how it relates to add_transactions_to_tracker. Context is clear; exclusions are absent.

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

create_transactionAInspect

Create a new transaction (income, expense, or transfer). Requires accountId, amount (decimal), transactionType, and transferNature. paymentType is optional and defaults to the default payment type of the account. For transfers, also provide destinationAccountId and destinationAmount. Use splits to categorize portions of the amount. Use originalAmount + originalCurrencyCode to record what the purchase cost in its invoice currency when that differs from the account currency. Use paymentLegs to pay one purchase from several accounts.

NameRequiredDescriptionDefault
noteNoOptional note or description for the transaction
timeNoTransaction date/time as ISO 8601 string. Defaults to now
amountYesTransaction amount as an unsigned decimal (e.g. 12.50). Never negative: transactionType sets the direction
splitsNoSplit the transaction across multiple categories
tagIdsNoTag IDs to assign to this transaction
payeeIdNoPayee ID to assign
accountIdYesID of the account the transaction belongs to
isPlannedNoMark the transaction as planned rather than an already-happened record
categoryIdNoCategory ID to assign to this transaction
paymentLegsNoPay this income/expense from up to 4 more accounts. Each item is either { accountId, amount } to create a part on another account, or { transactionId } to link an existing transaction as a part (its amount stays). amount is in that account's currency; when it differs from this transaction's currency also pass paymentAmount, the part's value in this transaction's currency. Not allowed for transfers, refunds, planned or category-split transactions
paymentTypeNoPayment method used. Defaults to the account's default payment type, or bankTransfer
originalAmountNoAmount in the currency the purchase was originally priced in (decimal), e.g. 66.42 for a PLN invoice paid from a UAH account. Informational only: never affects balances. Requires originalCurrencyCode
transferNatureYesTransfer type. Use not_transfer for regular income/expense
transactionTypeYesWhether this is income or expense
destinationAmountNoFor transfers: amount received in destination account (decimal, greater than 0)
destinationAccountIdNoFor transfers: destination account ID
originalCurrencyCodeNoISO 4217 code of originalAmount (e.g. "PLN"). Requires originalAmount. Cannot be combined with transfer fields
destinationTransactionIdNoFor transfers: link to an existing destination transaction instead of creating one

TDQS

A3.5/5.0
Behavior3/5

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

The description adds some behavioral context, such as paymentType defaulting to the account's default and originalAmount being informational only. But with no annotations, it does not fully disclose mutation side effects, permissions, idempotency, or what happens on failure, leaving meaningful gaps for a create operation.

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 action and required parameters, then moves through optional and advanced scenarios. It is dense but appropriately sized for an 18-parameter creation tool, with little wasted text.

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 fully described schema, the description provides an adequate high-level summary of required fields, transfers, splits, original currency, and payment legs. It omits some advanced fields like isPlanned or destinationTransactionId, but the schema covers them, and no output schema needs explanation.

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 parameter documentation is already strong. The description summarizes key fields and conditional groups, but largely repeats or compresses what the schema more precisely explains; it does not add substantial semantic detail 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 uses a specific verb and resource: 'Create a new transaction (income, expense, or transfer).' It clearly establishes scope and required fields, but does not explicitly differentiate this tool from siblings like update_transaction or split_transaction.

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

Usage Guidelines3/5

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

Usage is implied by 'Create a new transaction' and the conditional guidance for transfers, splits, original amounts, and payment legs. However, there is no explicit guidance on when to choose this tool versus alternatives such as update_transaction, split_transaction, or create_investment_transaction.

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

create_transaction_automationAInspect

Create a transaction automation rule that categorizes, tags, sets a payee, or edits the note of matching transactions. The rule is appended last in evaluation order and only fires for newly synced or imported bank transactions that are not transfers and not planned; existing transactions are never changed retroactively. Preview the conditions with preview_transaction_automation first. Requires finance:write scope.

NameRequiredDescriptionDefault
nameYesDisplay name of the rule (e.g. "Groceries to Food")
actionsYesActions applied when the conditions match. 1-4 actions, each type at most once. - { "type": "set_category", "categoryId": "<uuid>" } - { "type": "add_tags", "tagIds": ["<uuid>"] } with 1-20 tag ids - { "type": "set_payee", "payeeId": "<uuid>" } - { "type": "set_note", "mode": "replace" | "append" | "prepend", "value": "<text, max 200 chars>" } Every referenced category, tag, and payee must belong to the user, otherwise the call is rejected.
isEnabledNoDefaults to true
conditionsYesCondition tree: { match: "all" | "any", items: [...] }. 1-10 items, at most one transactionType item. Item shapes by field: - note | merchant (merchant is the bank-provided merchant/description text): { field, operator, value }. operator: contains_any | not_contains_any | starts_with_any | ends_with_any | equals_any | is_empty. value: 1-20 case-insensitive keywords, max 64 chars each; required unless operator is is_empty. Example: { "field": "merchant", "operator": "contains_any", "value": ["uber", "bolt"] } - payee | account | accountGroup | bankConnection: { field, operator, value }. operator: in | not_in. value: 1-20 UUIDs of that entity, all owned by the user. Example: { "field": "account", "operator": "in", "value": ["<accountId>"] } - amount: { field, operator, value: { min?, max? }, currency }. operator: gte | lte | between | equals. gte and equals take min only, lte takes max only, between takes both. Bounds are decimals (e.g. 12.50). currency: { "mode": "transaction" } compares in the currency of the transaction itself, { "mode": "base" } in the user base currency, { "mode": "specific", "code": "USD" } in a fixed currency. Example: { "field": "amount", "operator": "gte", "value": { "min": 100 }, "currency": { "mode": "base" } } - transactionType: { "field": "transactionType", "operator": "equals", "value": "income" | "expense" } - dayOfMonth: { "field": "dayOfMonth", "operator": "between", "value": { "min": 1, "max": 31 } }

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well: it discloses evaluation order (appended last), firing scope (newly synced/imported bank transactions only), exclusions (not transfers, not planned), the non-retroactive guarantee, and the required finance:write scope. These are exactly the behavioral facts an agent needs before writing.

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?

Front-loaded with the core purpose, then scope, then the preview prerequisite and scope requirement in order of importance. Four compact sentences with minimal waste, though the action enumeration slightly overlaps the schema.

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 nested, multi-branch mutation tool with no annotations and no output schema, the description supplies the critical behavioral context (firing scope, ordering, exclusions, auth scope) that structured fields don't cover. Nothing essential for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the nested action/condition schemas are exhaustively documented, so the schema does the heavy lifting. The description's action list ('categorizes, tags, sets a payee, or edits the note') merely restates action types already in the schema, adding little beyond it; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description opens with a specific verb+resource ('Create a transaction automation rule') and enumerates the four effects the rule can have (categorizes, tags, sets a payee, edits the note). This clearly distinguishes it from siblings like update_transaction_automation and delete_transaction_automation without needing to open any schema.

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

Usage Guidelines4/5

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

It explicitly routes the agent to preview_transaction_automation ('Preview the conditions ... first'), giving a concrete when-to-use instruction and a companion tool. It doesn't explicitly compare against update_transaction_automation for modifying an existing rule, so it falls short of full when/when-not coverage.

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

create_transaction_groupAInspect

Create a new transaction group that bundles related transactions together (e.g. a split bill). Requires at least 2 transactions. Transfer pairs are automatically included. Requires finance:write scope.

NameRequiredDescriptionDefault
nameYesDisplay name for the group
noteNoOptional note or description for the group
transactionIdsYesIDs of transactions to include in the group (minimum 2, maximum 50)

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses the finance:write scope and that transfer pairs are automatically included, but it does not explain what happens on failure, duplicate membership, or what the caller receives after creation.

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

Conciseness5/5

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

The description is four short sentences, front-loads the core action, and includes only useful constraints and an example. There is no redundant or wasted text.

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 mutation tool with no annotations and no output schema, the description covers the main call requirements: purpose, minimum transactions, automatic transfer inclusion, and auth scope. However, it does not state what is returned or how conflicting or duplicate transactions are handled, which leaves meaningful gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents name, note, and transactionIds including min/max constraints. The description repeats the minimum of 2 transactions but adds no parameter-level 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 states a specific verb and resource: 'Create a new transaction group that bundles related transactions together.' The split-bill example makes the grouping concept concrete. It is clearly distinct from create_transaction and add_transactions_to_group, though it does not explicitly name those siblings.

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 gives prerequisites such as 'Requires at least 2 transactions' and 'Requires finance:write scope,' but it does not say when to create a new group versus using add_transactions_to_group, update_transaction_group, or split_transaction. Usage is implied rather than explicitly routed.

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

create_venture_dealAInspect

Create a venture deal (private/illiquid investment record). All monetary amounts are decimal strings in the deal's currency (e.g. "16000"). Fee percentages are decimal fractions in [0,1] — e.g. 0.085 for 8.5%, NOT 8.5. If platformId is provided, omitted fee fields are auto-filled from the platform's defaults. Optionally creates the initial_investment event in the same operation when initialInvestment is supplied. Only the SPV vehicle type is supported in v1.

NameRequiredDescriptionDefault
nameYesDeal name (e.g. "SK 116 — Series A")
notesNoFree-text notes
carryPctNoCarry as a decimal fraction in [0,1] (e.g. 0.2 for 20%).
entryFeeNoEntry fee absolute amount in currency units. Defaults to principal * entryFeePct.
hurdlePctNoHurdle rate as a decimal fraction in [0,1].
principalYesPrincipal amount as a decimal string (e.g. "16000")
mgmtFeePctNoManagement fee as a decimal fraction in [0,1].
platformIdNoOptional platform id (from list_venture_platforms)
spvSubtypeNoSPV subtype: single_company or multi_company
entryFeePctNoEntry fee as a decimal fraction in [0,1] (e.g. 0.085 for 8.5%).
currencyCodeYesThree-letter ISO currency code (e.g. "USD")
targetCompanyNoFree-text portfolio company name
investmentDateYesInvestment date in YYYY-MM-DD
expectedExitDateNoExpected exit date (YYYY-MM-DD)
initialInvestmentNoOptional: also create the initial_investment event in the same transaction. cashFlowMode=out_of_wallet records the investment without linking to bank txs (event amount is stored but not reflected on cash-flow charts).

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it discloses genuinely useful behaviors beyond the schema: platform-default fee auto-fill when platformId is supplied, the side effect of also creating an initial_investment event in the same operation, and the v1 SPV-only limitation. It stops short of covering auth/permission requirements or error/reversibility behavior, so it is strong but not complete.

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?

Front-loaded with purpose, then ordered caveats (amount format, fee format, platform defaults, optional event, version limit). Each sentence carries distinct information with no filler.

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 15-parameter creation tool with a nested initialInvestment object and no output schema, the description adequately covers format conventions, defaulting behavior, and the composite side effect. It does not address permissions or failure modes, but the core invocation-critical context is present.

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, but the description adds real value: it clarifies that all monetary amounts are decimal strings in the deal currency, that fee percentages are fractions in [0,1] and emphatically NOT 8.5, and that omitted fee fields are auto-filled from platform defaults. This goes beyond what the schema descriptions convey.

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?

States a specific verb+resource ("Create a venture deal") and immediately disambiguates with the parenthetical "(private/illiquid investment record)", distinguishing it from create_portfolio and create_investment_transaction. An agent can tell it apart from sibling creation tools without opening the schema.

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

Usage Guidelines3/5

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

Provides contextual constraints (platformId triggers fee auto-fill; initialInvestment triggers event creation; only SPV is supported in v1) but never states when to choose this over siblings like create_venture_event or create_portfolio. Usage is only implied by the resource scope.

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

create_venture_eventAInspect

Record an event on a venture deal. The deal must already have an initial_investment before any other event type can be created (initial_investment must come first). Event date cannot precede the initial_investment date.

Rules per type (the schema is flat but the service enforces these — invalid combinations return a clear ValidationError): • initial_investment: grossAmount is auto-derived from the deal's principal + entryFee — do NOT pass it. cashFlowMode must be 'linked' or 'out_of_wallet'. • capital_call, fee_payment, distribution: require grossAmount. cashFlowMode must be 'linked' or 'out_of_wallet'. • exit: requires grossAmount AND navAfter. cashFlowMode must be 'linked' or 'out_of_wallet'. • nav_update, writedown: require navAfter. cashFlowMode must be 'none'.

For cashFlowMode='linked', the sum of linked transactions' amounts must equal the event's lpNetAmount (derived from grossAmount minus auto-computed carry for distribution/exit). For cashFlowMode='out_of_wallet', no transactions are linked — the event amount is recorded but does NOT affect bank balances or cash-flow charts.

Carry on distribution/exit is auto-computed (European waterfall by default). Pass lpNetAmountOverride / gpCarryOverride to override the computed values (e.g. when matching a GP's statement).

NameRequiredDescriptionDefault
typeYesEvent type
notesNoFree-text notes
dealIdYesVenture deal ID (from list_venture_deals)
navAfterNoPost-event NAV (decimal string). Required for nav_update, writedown, AND exit.
eventDateYesEvent date in YYYY-MM-DD
grossAmountNoGross amount (decimal string). Required for capital_call, fee_payment, distribution, exit.
quantityPctNoOptional partial-exit quantity fraction in [0,1] (used for partial exits).
cashFlowModeYeslinked = tie to existing bank txs; out_of_wallet = record event only; none = required for nav_update / writedown
transactionIdsNoBank transaction ids to link. Required when cashFlowMode=linked; must NOT be provided otherwise.
gpCarryOverrideNoOverride the auto-computed gpCarryAmount (distribution/exit only).
lpNetAmountOverrideNoOverride the auto-computed lpNetAmount (distribution/exit only).

TDQS

A4.2/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well: it discloses auto-derived values (grossAmount from principal+entryFee, auto-computed carry), the side-effect difference between 'linked' (sum must equal lpNetAmount) and 'out_of_wallet' (no effect on bank balances or cash-flow charts), error behavior (clear ValidationError on invalid combos), and override escape hatches. This is materially beyond what the schema alone conveys.

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?

Long but well-structured: the purpose and hard prerequisites are front-loaded, then bulleted per-type rules, then the cashFlowMode and carry semantics. Every section carries non-redundant information; the density is justified by the 11-parameter, 7-type surface.

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

Completeness4/5

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

Given no output schema and no annotations, the description covers prerequisites, per-type requirements, side effects, and error behavior thoroughly. The main omission is any hint of the response shape or whether the call is idempotent, but for a create tool with documented validation this is close to 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%, so the baseline is 3, but the description adds real conditional semantics the schema cannot express: which fields are required per event type, that grossAmount must NOT be passed for initial_investment, and that transactionIds must only accompany cashFlowMode='linked'. Only minor gaps remain (e.g. quantityPct usage is only lightly touched).

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?

States a specific verb+resource ('Record an event on a venture deal'), which cleanly separates it from create_venture_deal, create_venture_platform, and update_venture_event. It doesn't explicitly name a sibling to disambiguate against, but the resource boundary is unambiguous from the name and opening sentence.

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?

Gives concrete preconditions ('deal must already have an initial_investment before any other event type can be created') and a date-ordering constraint, plus per-type validity rules. It stops short of naming alternatives (e.g. when to prefer update_venture_event over creating a new event), so it lacks explicit exclusion guidance.

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

create_venture_platformAInspect

Create a venture investment platform (e.g. AngelList, a syndicate, a fund manager) so its default fees can be auto-applied when creating new deals. Fee fields are decimal fractions in [0,1] — e.g. pass 0.085 for 8.5%, NOT 8.5. Returns the created platform's id for use with create_venture_deal.

NameRequiredDescriptionDefault
nameYesPlatform name (must be unique for this user)
websiteNoPlatform website URL
descriptionNoFree-text description
defaultCarryPctNoDefault carry as a decimal fraction in [0,1] (e.g. 0.2 for 20%). Defaults to 0.
defaultHurdlePctNoDefault hurdle rate as a decimal fraction in [0,1]. Defaults to 0.
defaultMgmtFeePctNoDefault management fee as a decimal fraction in [0,1]. Defaults to 0.
defaultEntryFeePctNoDefault entry fee as a decimal fraction in [0,1] (e.g. 0.085 for 8.5%). Defaults to 0.

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose the useful return behavior (the created platform's id, for use with create_venture_deal), but says nothing about permissions, whether a duplicate name fails, or any side effects of creating the record.

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?

Three tight sentences, correctly front-loaded with purpose before the unit convention and the return-value note. The middle sentence duplicates guidance already in the schema, slightly diluting conciseness.

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 7-param creation tool with full schema coverage but no annotations and no output schema, the description supplies the two missing pieces an agent needs: the unit convention trap and what the call returns. Remaining gaps (auth requirements, uniqueness failure behavior) are modest.

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 all seven fields are already documented with units and defaults, making 3 the baseline. The description restates the decimal-fraction convention already present on each fee parameter ('NOT 8.5') and adds no new per-parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Opens with a specific verb+resource ('Create a venture investment platform') and grounds it with concrete examples (AngelList, syndicate, fund manager). It also states why the entity exists (to auto-apply default fees on new deals), which cleanly separates it from create_venture_deal and create_portfolio.

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?

Gives a clear when-to-use rationale — creating a platform to carry default fee settings into future deals — and names the downstream tool (create_venture_deal) that consumes its output. It does not state any exclusions or when-not-to-use conditions, so it falls short of a 5.

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

delete_categoryAInspect

Permanently delete a category by ID. This is destructive — if the category has linked transactions you must supply replaceWithCategoryId to reassign them first, otherwise the call will fail. Cannot delete a parent category that still has subcategories. Only call when the user explicitly confirms deletion.

NameRequiredDescriptionDefault
categoryIdYesID of the category to delete.
replaceWithCategoryIdNoID of the category to reassign linked transactions to. Required when the category has transactions.

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does so well: it discloses permanence ('permanently'), the destructive nature, two distinct failure modes (linked transactions without a replacement, parent category with subcategories), and a required reassignment step. It stops short of describing permission requirements or what the response returns, keeping it from a 5.

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 earning its place: the action, the conditional prerequisite with its failure consequence, and the hard constraint plus confirmation guardrail. The core action is front-loaded in the first clause.

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

Completeness4/5

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

No output schema or annotations exist, so the description must stand alone, and it covers action, prerequisites, failure modes, and a safety guardrail for a 2-parameter mutation. Minor gaps remain around permissions and side effects on the orphaned data once reassigned, but nothing needed to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so both parameters are already documented, giving a baseline of 3. The description goes beyond that by tying replaceWithCategoryId to its triggering condition and the consequence of omitting it (the call fails), which is semantic value the schema's terse 'Required when the category has transactions' only partially conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('Permanently delete a category by ID') with the scope qualifier 'permanently'. It is clearly distinguishable from sibling deletions like delete_budget, delete_tag, or delete_transaction, all of which target different resources.

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?

Gives an explicit precondition ('Only call when the user explicitly confirms deletion') and the exact condition under which the optional parameter becomes mandatory ('if the category has linked transactions you must supply replaceWithCategoryId'). It also names a hard when-not case: a parent category with subcategories cannot be deleted. No sibling tool offers category deletion, so no alternative needs naming.

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

delete_goalAInspect

Permanently delete a savings goal and free its account shares. Accounts and balances are not touched. Prefer update_goal with status archived to keep it. Returns { success: true }.

NameRequiredDescriptionDefault
goalIdYesID of the goal to delete

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden: it discloses irreversibility ("Permanently"), the side effect on account shares, an explicit non-effect on accounts/balances, and the return shape {"success": true}. What it omits is whether the deletion requires ownership/admin rights or fails when shares still exist — minor but real gaps for an irreversible mutation.

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?

Three short sentences, front-loaded with the destructive verb, then consequences, then the alternative. "Free its account shares" is slightly opaque phrasing, but every sentence earns its place and nothing is padding.

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 one-parameter irreversible delete with no output schema and no annotations, the description covers purpose, side effects, alternative, and return value — enough to call it correctly. It stops short of error conditions or permission requirements, which is the only meaningful remaining 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?

There is a single required goalId parameter with 100% schema description coverage, so the schema already fully documents it. The description adds no format, sourcing, or validation nuance beyond that, which is the baseline expectation when the schema does the work.

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?

States a specific verb and resource ("Permanently delete a savings goal") with the scope of the deletion spelled out. It clearly distinguishes itself from the sibling update_goal, which is named explicitly, so an agent can route without opening either schema.

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?

Names the alternative ("Prefer update_goal with status archived to keep it") and the condition that selects it, which is exactly the fork an agent faces with a delete tool. It also bounds the blast radius up front by saying accounts and balances are not touched.

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

delete_investment_transactionAInspect

Permanently delete an investment transaction. The holding and portfolio cash balance are automatically recalculated after deletion. This action is irreversible — confirm with the user before calling. Obtain transactionId from get_investment_transactions.

NameRequiredDescriptionDefault
transactionIdYesInvestment transaction ID to delete (from get_investment_transactions)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it declares the operation permanent and irreversible, warns to confirm first, and discloses the non-obvious side effect that the holding and portfolio cash balance are recalculated. It omits auth/permission requirements and error behavior, so it falls short of a 5.

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?

Four short sentences, front-loaded with the action and its consequence, then the irreversibility warning, then the ID source. No sentence is filler and each adds a distinct fact.

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

Completeness4/5

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

For a single-param destructive tool with no annotations and no output schema, the description covers the essentials: permanence, side effects, and ID provenance. It is nearly complete, though it could note permission requirements or what happens to the linked portfolio/holding records.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter is fully documented with a UUID pattern and source hint. The description's mention of obtaining transactionId from get_investment_transactions merely duplicates the schema, so it adds no meaning beyond structured data — baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb ('delete') and resource ('investment transaction'), and the qualifier 'investment' distinguishes it from the sibling delete_transaction. An agent can identify exactly what is being removed without opening the schema.

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?

Gives clear pre-call guidance ('confirm with the user before calling') and tells the agent where to obtain the ID ('from get_investment_transactions'). However, it never explicitly contrasts this with delete_transaction or states when an agent should prefer an alternative such as update_investment_transaction.

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

delete_payeeAInspect

Delete a Payee. Linked transactions retain their categoryId but their payeeId is set to null. Use cautiously — this is irreversible. Requires finance:delete scope.

NameRequiredDescriptionDefault
idYesPayee id to delete.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it declares irreversibility, the exact side effect on linked records (categoryId retained, payeeId nulled), and the required finance:delete scope. It stops short of describing the response or failure behavior (e.g., deleting a missing payee).

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 short sentences, zero waste, with the destructive side effect and the caution placed before the scope requirement. Every sentence earns its place.

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

Completeness4/5

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

For a one-parameter destructive tool with no annotations and no output schema, the description covers the critical unknowns: irreversibility, referential side effects, and authorization scope. Only the return/error behavior is left unstated, 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?

Single id parameter with 100% schema description coverage; the schema already says 'Payee id to delete.' The description adds nothing parameter-specific, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('Delete a Payee') and immediately qualifies the scope with what happens to linked transactions. An agent can distinguish it from create_payee, update_payee, and merge_payees without opening any schema.

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?

'Use cautiously — this is irreversible' sets a usage caution, but it never names an alternative such as merge_payees for the common case of consolidating duplicate payees, nor states when-not-to-use. Usage is implied rather than routed.

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

delete_portfolioAInspect

Permanently delete a portfolio and, if force is true, all its holdings, transactions, and cash balances. Without force, deletion is blocked when the portfolio has any data. This action is irreversible — confirm with the user before calling. Obtain portfolioId from get_portfolios.

NameRequiredDescriptionDefault
forceNoIf true, also deletes all holdings, transactions, and balances associated with this portfolio. Default: false.
portfolioIdYesPortfolio ID to delete (from get_portfolios)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full burden and does well: it discloses irreversibility, the cascade destruction of holdings/transactions/balances under force, the blocking condition, and a confirmation requirement. It omits permission/auth requirements and rate limits, which is the remaining gap.

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 tightly packed sentences: core action first, then the flag semantics, then the safety warning and ID source. No filler and every sentence earns its place.

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

Completeness4/5

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

For a destructive tool with no annotations and no output schema, the definition covers action, cascading effects, blocking condition, and irreversibility well. Missing only ancillary details like auth requirements or the effect on linked venture/transfer records.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description's explanation of force largely mirrors the schema's own description, and 'Obtain portfolioId from get_portfolios' repeats the schema note, so it adds little meaning beyond the structured 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?

States a specific verb and resource ('Permanently delete a portfolio') and immediately qualifies scope with the cascade behavior tied to the force flag. An agent can distinguish this from the sibling create_portfolio, update_portfolio, and get_portfolios without opening any schema.

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?

Clearly explains the force/no-force decision ('Without force, deletion is blocked when the portfolio has any data') and prescribes a user confirmation step. It does not name a sibling alternative (e.g., a soft-archive path) for cases where deletion is undesirable, so it stops short of 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.

delete_splitAInspect

Delete a single split from a transaction by its split ID (UUID string). DESTRUCTIVE: the split amount returns to the primary category. Fails if the split has refunds targeting it.

NameRequiredDescriptionDefault
splitIdYesUUID of the split to delete

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose key behavior: the operation is DESTRUCTIVE and the split amount returns to the primary category. It also names a failure condition when refunds target the split. It stops short of mentioning auth requirements or reversibility.

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 compact sentences that front-load the action and identifier, then layer the destructive side effect and failure condition. No filler text.

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

Completeness4/5

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

For a simple one-parameter deletion tool with no output schema, the definition covers purpose, side effect, and failure condition. Minor gaps remain (auth needs, relationship to the parent transaction), but nothing critical to correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the single parameter is already fully documented as 'UUID of the split to delete'. The description's '(UUID string)' merely restates that format and adds no new semantics. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (delete) and resource (split) with an explicit scope ('a single split from a transaction'). It clearly distinguishes itself from siblings like split_transaction (creates splits) and delete_transaction (removes the whole transaction), so an agent can identify it without opening the schema.

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 gives an implicit when-not condition ('Fails if the split has refunds targeting it') but does not name alternatives such as split_transaction or delete_transaction or state prerequisites. Usage is only implied, not spelled out.

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

delete_subscriptionAInspect

Permanently delete a subscription or recurring bill. Linked transaction associations are also removed. This action cannot be undone. Requires finance:delete scope.

NameRequiredDescriptionDefault
idYesUUID of the subscription to delete

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does well: it discloses irreversibility ('cannot be undone'), a cascade side effect ('Linked transaction associations are also removed'), and the required auth scope ('finance:delete scope'). It stops short of clarifying whether linked transactions themselves are deleted or merely unlinked, so 'associations' remains ambiguous.

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 short sentences, front-loaded with the action and its permanence, then the cascade effect, then the permission requirement. Every sentence earns its place with no filler.

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 one-parameter destructive tool with no annotations and no output schema, the description supplies the key context an agent needs before invoking: irreversibility, cascading deletion, and required scope. The only real gap is the ambiguity around what happens to the linked transactions themselves.

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 a single parameter with 100% schema description coverage ('UUID of the subscription to delete'), so the schema already carries the semantics. The description adds no format or sourcing detail (e.g., where to obtain the UUID), so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The first sentence gives a specific verb ('Permanently delete') and resource ('a subscription or recurring bill'), immediately distinguishing it from neighboring delete_* tools that target other resources. An agent can select this tool without opening the schema.

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 word 'Permanently' implicitly contrasts with the sibling toggle_subscription_active, but the description never names an alternative or states when deletion is preferable to deactivation/archiving. Usage is only implied.

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

delete_tagAInspect

Permanently delete a tag by ID. This is destructive — the tag will be removed and unlinked from all transactions. Only call when the user explicitly confirms deletion.

NameRequiredDescriptionDefault
idYesID of the tag to delete.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses irreversibility ('permanently'), the cascading side effect ('unlinked from all transactions'), and the confirmation requirement. It omits permission/auth requirements and error behavior, keeping it out of 5 territory.

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 tight sentences, front-loaded with the destructive nature before the confirmation gate. Every clause earns its place; nothing is redundant.

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

Completeness4/5

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

For a single-parameter delete with no output schema, the description supplies the key facts an agent needs: permanence, unlinking side effect, and the confirmation precondition. Auth requirements and failure modes are the only notable omissions.

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?

Only one parameter (id) and schema description coverage is 100%, with a UUID format and pattern fully documented in the schema. The description's 'by ID' adds no syntax or constraint information beyond that, so the baseline 3 applies.

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?

States a specific verb and resource ('Permanently delete a tag by ID'), and 'permanently' usefully distinguishes it from softer alternatives like archive/update operations in the sibling set. It does not explicitly name a sibling to route against, so it stops short of a 5.

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?

Gives an explicit gating precondition: 'Only call when the user explicitly confirms deletion.' That is clear when-to-use guidance, though it does not contrast with alternatives such as update_tag or archive-style operations, nor describe what to do if confirmation is absent.

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

delete_trackerBInspect

Permanently delete a tracker and all its transaction links. This action cannot be undone. Returns { success: true } on completion.

NameRequiredDescriptionDefault
trackerIdYesID of the tracker to delete

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the key traits: irreversibility, cascading removal of transaction links, and the return payload. It says nothing about required permissions or any other side effects (e.g. impact on tracker lines or suggestions), so it is partial rather than complete.

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 short sentences, front-loaded with the core action and immediately followed by the irreversible warning and return shape. Nothing is padded.

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

Completeness4/5

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

No output schema exists, but the description supplies the success response shape, plus scope and irreversibility. Only permission requirements and collateral effects on adjacent resources are unstated.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter is fully specified with type, format, pattern and description. The description adds no parameter-level detail, so the baseline 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?

Specific verb (delete) plus resource (tracker) and scope (all its transaction links). The adverb 'Permanently' implicitly distinguishes it from archive_tracker, but no sibling is named, so an agent must infer the archive-vs-delete choice itself.

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?

There is no when-to-use or when-not-to-use guidance. For an irreversible destructive tool with archive_tracker available as a non-destructive alternative, the absence of any routing hint is a meaningful gap.

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

delete_tracker_lineAInspect

Permanently delete a line from a tracker. Transactions are kept; their spending moves to the next matching line or to "other". Requires manage access to the tracker. Returns { success: true } on completion.

NameRequiredDescriptionDefault
lineIdYesID of the line to delete
trackerIdYesID of the tracker the line belongs to

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations the description carries the full burden and does so well: it discloses irreversibility ('Permanently delete'), the non-obvious side effect (transactions survive and their spending is reassigned to the next matching line or 'other'), the required permission level, and the return value. This is exactly the destructive-operation context an agent needs.

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

Conciseness5/5

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

Three short sentences, zero filler, and the destructive nature is front-loaded before the side-effect and permission details. Every sentence earns its place.

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

Completeness5/5

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

For a destructive mutation with no output schema, the description covers permanence, cascade behavior, authorization, and the response shape ({ success: true }), leaving no gap an agent would need to guess at before calling.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (lineId, trackerId) are documented in the schema, so the description adds no syntax or format detail beyond it. Baseline 3 for a fully-covered 2-parameter 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?

States a specific verb plus resource ('Permanently delete a line from a tracker'), which cleanly separates it from delete_tracker, delete_transaction and update_tracker_line in a crowded sibling list. An agent can identify the operation without opening the schema.

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 it applies ('Permanently delete a line') and gives a precondition ('Requires manage access to the tracker'), but never names an alternative or a when-not condition (e.g. archive_tracker, remove_transactions_from_tracker, update_tracker_line). Usage is inferable but not routed.

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

delete_transactionAInspect

Permanently delete a transaction by ID. DESTRUCTIVE: this cannot be undone. For transfer transactions, both sides of the transfer are deleted.

NameRequiredDescriptionDefault
idYesID of the transaction to delete

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does meaningful work: it discloses irreversibility ('cannot be undone') and the non-obvious cascade that both legs of a transfer are removed. It stops short of stating permission requirements or what happens to linked items like splits, tags, or refund links.

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, zero filler, with the destructive warning front-loaded immediately after the purpose. Every clause earns its place.

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

Completeness4/5

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

For a one-parameter destructive tool with no output schema and no annotations, the key risks (permanence, transfer cascade) are covered. Remaining gaps are secondary details like auth needs and treatment of linked records.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'id' param is fully documented as a UUID with a pattern, so the schema already does the work. The description adds only 'by ID', which is baseline-level reinforcement.

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?

States a specific verb+resource ('Permanently delete a transaction') and the identifier used to target it. It is distinguishable from the many other delete_* siblings by naming the resource, though it never explicitly contrasts itself with delete_investment_transaction or the archive_* 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 on when to use this versus alternatives such as archive_account, delete_transaction_group, or delete_split, nor any prerequisites or preconditions. The agent is left to infer that this is the tool for removing a single transaction.

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

delete_transaction_automationAInspect

Permanently delete a transaction automation rule. Transactions the rule already changed keep their values. This cannot be undone, so only call it when the user explicitly confirms deletion; to stop a rule temporarily set isEnabled to false via update_transaction_automation instead. Returns { success: true } on completion. Requires finance:delete scope.

NameRequiredDescriptionDefault
idYesUUID of the automation to delete

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: it discloses irreversibility ('This cannot be undone'), the side effect on already-changed transactions ('keep their values'), the required auth scope (finance:delete), and the return shape. Nothing critical is left undisclosed for a destructive operation.

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

Conciseness5/5

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

Five short sentences, each carrying distinct information (destructive semantics, side effect, confirmation requirement, alternative, return value, scope) and front-loaded with the core action. No filler or repetition.

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

Completeness5/5

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

For a destructive single-parameter tool with no annotations and no output schema, the description supplies everything an agent needs: irreversibility, confirmation requirement, alternative path, required scope, and the return value.

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 a single parameter whose schema description coverage is 100%, so the schema already documents 'id' as the UUID of the automation. The description adds no syntax or format detail beyond that, making the baseline 3 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?

States a specific verb (permanently delete) and precise resource (transaction automation rule), and distinguishes itself from sibling delete tools like delete_transaction_group by naming the exact entity. An agent can identify the operation without opening the schema.

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

Usage Guidelines5/5

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

Explicitly states when to call it (only on explicit user confirmation of deletion) and provides a named alternative for the adjacent case (set isEnabled to false via update_transaction_automation to stop a rule temporarily). This is a textbook when/when-not/alternative guidance.

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

delete_transaction_groupAInspect

Permanently delete a transaction group. The transactions themselves are NOT deleted — only the grouping is removed. This action cannot be undone. Requires finance:delete scope.

NameRequiredDescriptionDefault
idYesID of the transaction group to delete

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and does so well: it discloses irreversibility ('cannot be undone'), the exact scope of destruction (group only, not transactions), and the required permission scope (finance:delete). This is exactly the context an agent needs before invoking a destructive mutation.

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 tight sentences, front-loaded with the action, then the critical scope caveat, then the reversibility warning and permission requirement. Every sentence earns its place with no redundancy.

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 single-parameter destructive tool with no annotations and no output schema, the description covers everything an agent needs: what is destroyed, what is preserved, irreversibility, and auth scope. Nothing material is missing.

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

Parameters3/5

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

Schema description coverage is 100% – the single 'id' parameter is fully documented as 'ID of the transaction group to delete' with format and pattern constraints. The description adds no syntax or format detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('Permanently delete a transaction group') and immediately clarifies scope by distinguishing it from deleting the underlying transactions. This sharply differentiates it from the sibling delete_transaction and remove_transactions_from_group.

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

Usage Guidelines4/5

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

The description makes the use case clear (destructive group removal) and implicitly routes away from delete_transaction, but it doesn't name the alternative tool or explicitly state when to prefer removing transactions from a group versus deleting the group itself.

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

delete_venture_dealAInspect

Delete a venture deal. Cascade-deletes its events and event-link rows. Bank transactions previously linked to the deal's events remain intact in the main transactions list with their original state restored. With force=true the deal row is hard-deleted; otherwise it is soft-deleted. Confirm with the user before calling.

NameRequiredDescriptionDefault
forceNoIf true, hard-delete the deal row. Default: false (soft-delete).
dealIdYesVenture deal ID (from list_venture_deals)

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well: it discloses destruction scope (cascade-deletes events and event-link rows), a non-obvious side effect (linked bank transactions remain intact and are restored to their original state), and reversibility (soft-delete vs hard-delete via force). These are exactly the traits an agent needs before invoking a destructive operation.

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?

Front-loads the core action in the first sentence, then layers cascade scope, side effects, and confirmation guidance in a logical order. Slightly redundant with the schema on the force behavior, but every sentence is otherwise informative.

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

Completeness4/5

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

No output schema or annotations exist, so the description must stand alone, and it covers destruction scope, side effects, and reversibility adequately for correct invocation. Permission/auth requirements and error conditions are unaddressed, which is the only meaningful remaining gap.

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

Parameters3/5

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

Schema coverage is 100% and the schema already documents both parameters, including the force default and dealId provenance ('from list_venture_deals'). The description restates the force semantics rather than adding meaning beyond them, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('Delete a venture deal') and immediately scopes it with cascade behavior. An agent can distinguish it from sibling deletes like delete_venture_event or delete_venture_platform because the target resource is named precisely and the cascade relationship to those siblings is spelled out.

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 including a precondition ('Confirm with the user before calling') and explains the force parameter's selection semantics. It does not name alternatives or when-not-to-use conditions, but there is no obvious competing sibling that needs routing.

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

delete_venture_eventAInspect

Delete a venture event. Linked bank transactions are unlinked first (their original state is restored). The initial_investment cannot be deleted while other events still exist on the deal — delete the other events first. Pass deleteLinkedTransactions=true to also remove the bank tx rows themselves (not just the link); only do this when the user explicitly asks. Confirm with the user before calling.

NameRequiredDescriptionDefault
eventIdYesVenture event ID (from list_venture_events)
deleteLinkedTransactionsNoIf true, also delete the bank transaction rows that were linked. Default: false (unlink only).

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so well: it discloses that linked bank transactions are unlinked first and their original state restored, that setting deleteLinkedTransactions=true permanently removes bank transaction rows, and that the initial_investment has a dependency constraint. It also adds a safety instruction to confirm with the user.

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 front-loaded with the core action, then each following sentence adds distinct operational value: side effects, dependency, parameter semantics, and a safety check. There is no filler.

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

Completeness5/5

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

For a delete tool with no annotations and no output schema, the description covers the essential context: what is deleted, what happens to linked transactions, dependency restrictions, the destructive option, and a confirmation requirement. No critical behavioral gap remains for an agent to call 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?

Schema coverage is 100%, establishing a baseline of 3. The description goes beyond the schema by explaining the user-explicit-ask condition for deleteLinkedTransactions and the special constraint on the initial_investment event, but it adds no further semantic detail for the eventId parameter.

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 a specific verb and resource ('Delete a venture event') and adds constraints that clarify the scope. However, it does not explicitly distinguish this tool from sibling delete tools such as delete_venture_deal or delete_venture_platform, so it falls short of full 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 gives strong when/when-not guidance: deleteLinkedTransactions only 'when the user explicitly asks', initial_investment cannot be deleted while other events exist, and it says to confirm before calling. It does not name alternative tools (e.g., update_venture_event or delete_venture_deal) to route the agent, so it stops short of a full 5.

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

delete_venture_platformAInspect

Delete a venture platform. Existing deals that reference it have their platformId cleared (deals are preserved). With force=true, hard-deletes the platform; otherwise it is soft-deleted. Confirm with the user before calling — operates against the user's records.

NameRequiredDescriptionDefault
forceNoIf true, hard-delete the platform. Default: false (soft-delete).
platformIdYesVenture platform ID (from list_venture_platforms)

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations to lean on, the description carries the full load and does so well: it discloses the effect on related records (references have platformId cleared, deals preserved), the hard-vs-soft delete distinction for force, and the requirement to confirm with the user. This is exactly the behavioral context an agent needs before mutating user data.

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 tight sentences, front-loaded with the core action and side effects; the confirmation warning comes last as an operative caveat. No filler.

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 mutation tool with no annotations and no output schema, this covers side effects, the force decision, and user confirmation. It stops short of stating whether a hard delete is irreversible or what permissions are required, which would fully close the gap.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning beyond the schema by explaining the consequence of force (hard delete vs default soft delete) and the preservation of referencing deals.

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?

Opens with a specific verb+resource ('Delete a venture platform') and is clearly distinguishable from siblings like delete_venture_deal and delete_venture_event. An agent knows exactly what this targets.

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

Usage Guidelines3/5

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

Provides a confirmation instruction ('Confirm with the user before calling') and implies the force flag's decision point, but never states when to choose this over archive-style alternatives or when to prefer soft vs hard delete beyond the parameter's own semantics.

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

detect_subscription_candidatesAInspect

Scan the past 12 months of transactions to detect recurring payment patterns and generate subscription candidates. This operation can be slow on large transaction histories. Results are cached for 1 hour — subsequent calls within the cooldown return cached candidates. Check isFromCache in the response to know if the data is fresh. Requires finance:write scope (writes candidate records).

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well: it warns the operation 'can be slow on large transaction histories,' discloses a 1-hour result cache, tells the agent to read isFromCache for freshness, and states the required finance:write scope and its side effect (writes candidate records). This is exactly the behavioral context an agent needs before invoking a potentially expensive, mutating scan.

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?

Four tightly packed sentences, front-loaded with the core action, then performance, caching, and scope. Every sentence adds a distinct operational fact with no filler.

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

Completeness4/5

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

No output schema exists, yet the description flags the isFromCache response field, and with no parameters and no annotations the remaining burden (performance, caching, auth, side effects) is fully covered. It could go slightly further on how results relate to the existing candidate list, but it is otherwise 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?

The tool takes zero parameters, so the schema is empty and there is nothing to document. Baseline for a parameterless tool is 4; the description correctly adds no parameter noise.

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?

States a specific verb+resource: 'Scan the past 12 months of transactions to detect recurring payment patterns and generate subscription candidates.' This clearly distinguishes a detection/generation operation from the read-only sibling list_subscription_candidates. It does not explicitly name that sibling, so it falls just short of the top score.

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 caching note implies usage ('subsequent calls within the cooldown return cached candidates'), which tells the agent when calling again is worthwhile, but there is no explicit when-to-use versus list_subscription_candidates or create_subscription, and no stated prerequisites beyond the scope requirement.

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

dismiss_subscription_candidateAInspect

Dismiss a pending subscription candidate so it no longer appears in the candidate list. The underlying transactions are unaffected. Only pending candidates can be dismissed. Requires finance:write scope.

NameRequiredDescriptionDefault
candidateIdYesUUID of the subscription candidate to dismiss

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden well: it discloses the non-destructive side effect on underlying transactions, the pending-only precondition, and the required auth scope. This is solid behavioral context for a mutation tool, though it lacks details on return value or reversibility.

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 short sentences, front-loaded with the action and effect, followed by constraints and scopes. 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?

Given no output schema and one simple parameter, the description provides sufficient context: purpose, side effects, precondition, and required scope. Only minor gaps such as error behavior or return format remain, which are acceptable here.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already fully documents candidateId. The description adds no parameter-level detail, 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?

States a specific verb (dismiss) and resource (pending subscription candidate) with the observable effect on the candidate list. Distinguishes from sibling tools like delete_subscription (permanent) and detect_subscription_candidates.

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?

Clearly implies usage for pending candidates only ('Only pending candidates can be dismissed') and notes non-destructive relationship to transactions. Does not explicitly name alternatives (e.g., delete_subscription), but the constraint provides good context.

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

get_accountsBInspect

List all user accounts with current balances. Returns account name, type, currency, current balance (in original and base currency), and credit limit.

NameRequiredDescriptionDefault
typeNoFilter by account type (e.g., "checking", "savings", "credit_card")
includeExcludedFromStatsNoInclude accounts excluded from stats. Default: false

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it implies a read-only listing operation and usefully enumerates the returned fields (balances in original and base currency, credit limit), which no output schema provides. However it says nothing about authentication needs, pagination, ordering, or whether excluded-from-stats accounts appear by default, so behavioral coverage is partial.

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 tight sentences: the first front-loads the action and scope, the second enumerates return contents. Every clause earns its place with no filler.

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-required read tool with no annotations and no output schema, the description adequately covers purpose and return shape, and the schema covers both parameters. It stops short of noting that no filtering is applied by default or how results are ordered, but nothing essential to invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, with both the 'type' filter and 'includeExcludedFromStats' flag documented in the schema itself, so the baseline of 3 applies. The description adds nothing about either parameter, so it neither compensates nor detracts.

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 names a specific verb and resource ('List all user accounts with current balances') and enumerates what is returned, so the agent knows exactly what this tool fetches. It is clearly distinct from write siblings like adjust_account_balance or archive_account, though it never explicitly contrasts itself with the nearest read siblings such as get_portfolio_balances or get_user_profile.

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?

There is no statement of when to reach for this tool versus alternatives, no prerequisites, and no exclusions. The description only asserts that it lists all accounts, leaving the agent to infer context of use from the name alone.

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

get_balance_historyAInspect

Get account balance over time. If accountId is provided, returns balance history for that specific account. Otherwise, returns combined balance across all accounts.

NameRequiredDescriptionDefault
endDateNoEnd date (ISO 8601). Default: today
accountIdNoSpecific account ID. Omit for combined balance across all accounts.
startDateNoStart date (ISO 8601). Default: 30 days ago

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. 'Get' implies a safe read, but the description says nothing about granularity of the returned series, pagination, result caps, or auth requirements. It usefully discloses the per-account vs. aggregate branching, but for a no-annotation tool that is only partial coverage.

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?

Three short sentences with the core purpose front-loaded and no filler. The branching clause is placed logically after the purpose statement, though it slightly restates what the schema's accountId description already says.

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 3-parameter, zero-required, read-only query with a fully documented schema and no output schema, the description covers what is queried and the aggregate-vs-single behavior. The main omission is any hint about the shape or granularity of the returned history, which matters slightly without an output schema.

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

Parameters3/5

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

Schema description coverage is 100% — startDate, endDate and accountId all carry their own descriptions including defaults and the 'omit for combined' rule. The description restates the accountId semantics but adds no new syntax, format, or constraint information, so the baseline 3 applies.

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?

States a specific verb and resource ('Get account balance over time') and clarifies the branching behavior: per-account history when accountId is supplied, combined balance otherwise. It is clear on its own, but it never names the adjacent tools (get_cash_flow, get_portfolio_balances) that an agent might confuse it with.

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 gives conditional usage for its own parameter ('If accountId is provided... Otherwise...'), which is genuinely helpful. However it offers no guidance on when to prefer this tool over get_cash_flow or get_portfolio_balances, so routing among balance-related siblings is left to inference.

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

get_cash_flowBInspect

Get income, expenses, and net cash flow for a period with configurable granularity (monthly/biweekly/weekly). Returns period-by-period breakdown plus totals with savings rate.

NameRequiredDescriptionDefault
endDateYesPeriod end date (ISO 8601). Required.
accountIdNoFilter by specific account ID
startDateYesPeriod start date (ISO 8601). Required.
categoryIdsNoFilter by category IDs
granularityNoTime granularity. Default: monthly

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses the return shape (period-by-period breakdown, totals, savings rate), which is real value given there is no output schema. However, it says nothing about read-only safety, permissions, or rate limits for what is evidently a read query.

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

Conciseness4/5

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

Two tight sentences with the resource and scope front-loaded and zero filler. Could be slightly tighter by folding the parenthetical enum restatement, but nothing is wasted.

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

Completeness4/5

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

With no annotations and no output schema, the description compensates by describing the return contents (breakdown, totals, savings rate), which is the key missing structured info. It is complete enough to call the tool correctly, with the usage-guidance gap the main shortfall.

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 all five parameters are already documented. The description restates the granularity options (monthly/biweekly/weekly) which are already in the enum, and adds no syntax or semantics beyond the schema. Baseline 3 applies.

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?

Clear verb+resource: 'Get income, expenses, and net cash flow for a period' with configurable granularity. Distinguishes itself by aggregating income + expenses + net flow, but does not name any sibling such as get_expenses_for_period or get_spending_by_categories, so an agent must infer the boundary.

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 implies a per-period reporting use case but gives no explicit when-to-use, when-not-to-use, or alternatives. With siblings like get_expenses_for_period and get_spending_by_categories in the same family, the agent gets no routing guidance.

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

get_categoriesAInspect

List all transaction categories. Returns category ID, name, color, icon, type (income/expense), and parent ID for hierarchical categories.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the return fields (id, name, color, icon, type, parent id) and the hierarchical parent relationship, but says nothing about ordering, pagination, completeness, or whether it includes archived categories.

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 compact sentences with no filler. The primary purpose is front-loaded and the return-field detail follows it, so every sentence earns its place.

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

Completeness4/5

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

With no output schema and no annotations, the description must carry the return contract itself, and it does enumerate the fields. It is close to complete for a trivial zero-param list tool; only ordering/archived-item behavior is left unstated.

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 takes zero parameters, so there is no parameter syntax to document; the baseline for a 0-param tool is 4. The description appropriately uses its space to describe output rather than nonexistent inputs.

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?

States a specific verb+resource ('List all transaction categories') and enumerates the fields returned, so the agent knows exactly what it produces. It does not explicitly differentiate itself from siblings like get_spending_by_categories or get_tags, but the resource 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 Guidelines2/5

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

There is no when-to-use guidance, no exclusions, and no named alternative. 'List all' implies no filtering, but the description never tells the agent when to prefer this over create_category/update_category/get_spending_by_categories or how to get a single category.

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

get_expenses_for_periodAInspect

Get total expense amount for a date range. Returns a single total number. Use this for quick "how much did I spend" queries instead of summing transactions manually.

NameRequiredDescriptionDefault
endDateNoEnd date (ISO 8601). Default: today
accountIdNoFilter by specific account ID
startDateNoStart date (ISO 8601). Default: start of current month
excludedCategoryIdsNoExclude specific category IDs from total

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does disclose the return shape ('a single total number'), which is real value given there is no output schema, but it says nothing about whether transfers/refunds are included, permission requirements, or any rate limits. Adequate but thin for a zero-annotation 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 tight sentences, zero filler, front-loaded with what it returns before the usage hint. Every clause earns its place.

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

Completeness4/5

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

For a 4-param read tool with no output schema and no annotations, the description covers purpose, return type, and use case, while the schema covers all parameter semantics. The remaining gap is edge-case behavior (what is included or excluded in the total), which an agent would plausibly want.

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% – defaults for startDate/endDate, the account filter, and the category-exclusion list are all documented in the schema. The description adds no syntax, format, or interpretation beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource (get total expense amount) plus the scope (a date range) and the return shape (a single total number). The 'single total number' framing cleanly separates it from the aggregate-breakdown siblings like get_spending_by_categories or get_cash_flow.

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 frames the use case ('quick how much did I spend queries instead of summing transactions manually'), which tells the agent when to reach for it over search_transactions. It does not name any sibling tool as an alternative or state when this tool is the wrong choice, so it stops short of a 5.

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

get_goalsAInspect

List savings goals (active, paused, archived) in the user's order. Each goal has a target amount in its own currency (currencyCode), an optional targetDate and plannedMonthly, and the accounts backing it. Of an account's balance (minus its credit limit, never below 0), each fixedAmount (account currency) is taken first in fixedPosition order, then sharePercent is the part of what is left that counts toward the goal; exactly one of the two is set. progress holds currentValue, remaining, pace (plannedMonthly when set, else the median monthly change over recent full months), historicalPace, neededMonthly to hit targetDate, etaMonths and daysLeft, all amounts in the goal currency; progress.status is one of no_accounts, reached, overdue, no_date, insufficient_history, ahead, on_track, behind, paused, archived; it stays reached within reachedHoldDays of achievedAt even after a dip. progress is null when the goal currency has no exchange rate today. achievedAt/achievedAmount are set when the goal last reached its target; cleared when the target or currency changes, or when the goal is below target after reachedHoldDays. Not the envelope line goals of the Budget plan.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and largely meets it: it discloses computation semantics (fixedAmount vs sharePercent ordering, credit-limit floor), the status enumeration, the reachedHoldDays stickiness rule, achievedAt clearing conditions, and when progress is null. It does not discuss authorization, caching, or rate limits, so the behavioral picture of the read itself is incomplete.

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 basic purpose is front-loaded in the first sentence, but the remaining content is a single dense run-on covering currency conversion, allocation rules, and nine status values with no bullet structure or paragraph breaks. Every sentence carries information, but the wall of text makes it hard for an agent to scan.

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?

There is no output schema and no annotations, so the description must explain the return shape, and it does so exhaustively: per-goal currency, target fields, backing accounts, the full progress object, all status values, and null-progress conditions. Nothing an agent needs to interpret the result is missing.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline of 4 applies; there are no parameter semantics to add or omit. The description does not need to explain inputs because none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The first sentence states a specific verb and resource ('List savings goals') plus scope ('active, paused, archived') and ordering, and the final sentence explicitly excludes the Budget plan's envelope line goals, which is the distinguishing feature from sibling get_trackers. An agent can select this tool without opening any schema.

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 gives clear context (read/list savings goals) and an explicit exclusion ('Not the envelope line goals of the Budget plan'), but never states when to prefer it over siblings such as get_trackers or when a goal list is inappropriate. The routing is inferable rather than spelled out.

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

get_investment_transactionsAInspect

Investment transaction history: buy, sell, dividend, transfer, tax, fee, cancel, other. Each transaction includes amount, quantity, price, fees, date, category, and the embedded security. Distinct from search_transactions, which covers regular (non-investment) spending. Default: 20 most recent across all portfolios.

NameRequiredDescriptionDefault
limitNoMax results (default: 20)
offsetNoPagination offset (default: 0)
endDateNoEnd date (ISO 8601)
categoryNoFilter by transaction category
startDateNoStart date (ISO 8601)
securityIdNoRestrict to a specific security
portfolioIdNoRestrict to a specific portfolio

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden; it discloses the default window (20 most recent across all portfolios) and the returned fields, which is useful. However, it says nothing about pagination interaction with defaults, ordering guarantees, or any permission expectations for a financial data read.

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?

Three tight sentences that front-load what the tool returns before the sibling differentiation and default scope. The category enumeration is somewhat listy but earns its place by hinting at filterable values.

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 read-only list tool with a fully documented schema but no output schema, the description usefully enumerates the returned fields (amount, quantity, price, fees, date, category, embedded security) and the default scope. Only pagination/ordering semantics are left implicit.

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 every parameter is already documented in the schema; the description only reiterates the default limit of 20 and lists the category values already present as an enum. No additional syntax, format, or interaction guidance beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb+resource ('Investment transaction history') and enumerates the categories it covers, plus explicitly distinguishes itself from search_transactions which handles non-investment spending. An agent can unambiguously tell this apart from its closest sibling.

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?

Names the alternative tool (search_transactions) and the condition that selects it, and states the default behavior (20 most recent across all portfolios). It lacks explicit 'when not to use' guidance for the other investment siblings like get_portfolio_holdings or list_portfolio_transfers, but the core routing is clear.

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

get_payeeAInspect

Fetch a single Payee with aliases and computed stats. Useful when the user references a merchant by id and wants its full record.

NameRequiredDescriptionDefault
idYesPayee id.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It does reveal return content (aliases, computed stats), which is useful, but it never states that this is a read-only operation or what happens on an unknown id. Adequate but with a real gap for an annotation-free 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 short sentences, zero filler, with the primary action front-loaded and the usage condition second. Every clause earns its place.

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

Completeness4/5

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

For a single-parameter read tool with no output schema, the description supplies the essentials: what it returns (aliases, stats) and when to reach for it. Only the absence of read-only confirmation and not-found behavior keeps it from being fully complete.

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

Parameters3/5

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

Schema coverage is 100% and the sole parameter is documented as 'Payee id.' The description adds only that this id refers to a merchant/payee lookup, which is marginal. Baseline 3 applies when the schema does the heavy lifting.

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?

States a specific verb and resource ('Fetch a single Payee') and adds the payload detail ('with aliases and computed stats'). The word 'single' implicitly separates it from the sibling list tool get_payees, though it never names that sibling explicitly, so it stops just short of full 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?

Gives a concrete trigger condition: use it when the user references a merchant by id and wants the full record. That is clear usage context, but it names no alternatives (e.g. get_payees for listing) and states no exclusions or failure cases.

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

get_payeesAInspect

List Payees (merchants/counterparties) for the user, optionally filtered by a substring query. Returns Payee id, name, defaultCategoryId, and aggregated stats (transactionCount, netFlowRef, top category, last seen).

NameRequiredDescriptionDefault
qNoSubstring filter applied to the normalized Payee name.

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the disclosure burden. It partially meets it by naming the return shape (id, name, defaultCategoryId, aggregated stats) and the read-only listing semantics implied by 'List'. It stops short of stating pagination, result limits, or sort order — material omissions for a list endpoint with 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?

Two sentences with no filler, front-loaded with the verb and resource, then the filter, then the return shape in a parenthetical. The return enumeration is slightly dense but each clause carries distinct 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 one-parameter list tool with no output schema and no annotations, the description supplies the purpose, the filter semantics, and the return fields, which is the bulk of what an agent needs. The remaining gaps are pagination/limits and explicit sibling routing, both minor but non-trivial.

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%: the single 'q' parameter is already documented in-schema as a substring filter on the normalized payee name. The description adds only the word 'optional' beyond the schema. Baseline 3 applies when the schema does the heavy lifting.

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?

States a specific verb and resource ('List Payees') and disambiguates the domain term by defining a payee as 'merchants/counterparties for the user'. It also enumerates the returned fields, so an agent knows this is a bulk-listing read. It does not explicitly contrast with the sibling 'get_payee' (singular), leaving that differentiation to inference.

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

Usage Guidelines3/5

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

The description notes the filter is 'optional' and applied as a 'substring query', which implies the no-arg path lists everything. However, there is no explicit when-to-use guidance and no mention of the sibling tools an agent might reach for instead (get_payee for one payee, merge_payees for consolidation). Usage is implied rather than stated.

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

get_portfolio_balancesAInspect

Cash balances held in a portfolio, broken down per currency. Each entry includes totalCash and availableCash in the original currency plus their ref* equivalents converted to the user's base currency. Useful for answering 'how much cash do I have to invest'.

NameRequiredDescriptionDefault
portfolioIdYesPortfolio ID (from get_portfolios)
currencyCodeNoISO 4217 currency code (e.g., "USD"). Omit to return balances in all currencies.

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the disclosure burden. It does useful work by describing the response shape (totalCash, availableCash, and converted ref* fields), but says nothing about read-only nature, permissions, or freshness of the balance data.

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?

Three short sentences, front-loaded with the core definition before the response detail and the use-case hint. No filler, though the third sentence is more of a nice-to-have than essential information.

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

Completeness4/5

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

With no output schema, the description usefully explains what each entry contains and the base-currency conversion, covering the main return-value gap. For a simple read tool it is nearly complete; only permissions and read-only confirmation are absent.

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%: both portfolioId and currencyCode are documented in the schema, including the 'omit to return all currencies' behavior. The description adds no parameter-level detail beyond what the schema already provides, so the baseline of 3 applies.

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?

States a specific verb (get) and resource (cash balances in a portfolio), plus the scope (broken down per currency). An agent can tell this apart from holdings/summary tools in spirit, but the description never names the closest siblings (get_portfolio_holdings, get_portfolio_summary), so differentiation is implicit rather than explicit.

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 closing line gives an implied use case ('how much cash do I have to invest'), which signals when to reach for it. There is no explicit when-not guidance and no named alternative for portfolio value or holdings questions, so routing still requires inference.

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

get_portfolio_holdingsBInspect

Positions held in a portfolio with dynamically calculated market value, cost basis, and realized/unrealized gain (value and percent). Each holding includes the embedded security (symbol, name, asset class, currency). Filter by securityId to look at a single position.

NameRequiredDescriptionDefault
dateNoDate for historical valuation (ISO 8601). Default: latest available prices
securityIdNoFilter to a specific security
portfolioIdYesPortfolio ID (from get_portfolios)

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does usefully disclose that values are 'dynamically calculated' and that each holding embeds a security object, which sets expectations for the response shape. However, it says nothing about authorization requirements, pagination behavior for large portfolios, or how the historical date interacts with the required portfolioId, leaving real gaps for a read tool with zero annotation coverage.

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

Conciseness4/5

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

Three tight sentences with the core purpose and returned fields front-loaded, followed by supporting detail and the filter hint. Every sentence contributes; no filler or restatement of the tool name.

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

Completeness4/5

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

With no output schema, the description does the work of describing return values, covering computed fields, the embedded security, and the securityId filter. For a straightforward read tool this is nearly complete, though a note on result size or pagination would close the remaining gap.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are already documented (date defaults to latest prices, securityId filters, portfolioId sourced from get_portfolios). The description reinforces the securityId filter with the phrase 'look at a single position' but adds little syntax or semantics beyond the schema. Baseline 3 is appropriate when the schema does the heavy lifting.

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?

States a specific verb+resource (portfolio holdings) and enumerates the computed fields returned (market value, cost basis, realized/unrealized gain) plus the embedded security object. This is far more informative than a generic list tool. It doesn't, however, explicitly distinguish itself from siblings like get_portfolio_summary or get_portfolio_balances, so it stops short of a 5.

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 only usage hint is 'Filter by securityId to look at a single position,' which is parameter usage rather than when-to-use guidance. There is no statement about when to prefer this over get_portfolio_summary, get_portfolio_balances, or get_portfolios, which are the obvious alternatives in the sibling set.

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

get_portfoliosAInspect

List the user's investment portfolios. Returns id, name, portfolio type (investment/retirement/savings/other), description, enabled state, and creation date. Use the returned id with get_portfolio_summary, get_portfolio_holdings, get_portfolio_balances, and get_investment_transactions.

NameRequiredDescriptionDefault
limitNoMax results
offsetNoPagination offset (default: 0)
isEnabledNoFilter by enabled state
portfolioTypeNoFilter by portfolio type

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and delivers: it enumerates the returned fields (id, name, type, description, enabled state, creation date), which is valuable since no output schema exists. It does not mention pagination behavior or auth, keeping it short of a 5.

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, tightly front-loaded with the core purpose, then return shape, then downstream usage. No filler or redundancy.

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

Completeness4/5

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

For a 4-param, no-output-schema list tool this is nearly complete: purpose, return fields, and follow-up routing are all present. Only pagination semantics and the enabled/type filter semantics go unmentioned, which is minor given the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so limit, offset, isEnabled, and portfolioType are already documented with the type enum inline. The description adds no format or semantics beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (List) and resource (user's investment portfolios), and distinguishes from drill-down siblings like get_portfolio_summary and get_portfolio_holdings. An agent can tell exactly what this returns without opening the schema.

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 routes the agent forward: 'Use the returned id with get_portfolio_summary, get_portfolio_holdings, get_portfolio_balances, and get_investment_transactions.' This is clear context for a list-then-drill workflow, though it offers no when-not or filter-selection guidance.

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

get_portfolio_summaryBInspect

Portfolio-level aggregates for a single portfolio: total current market value, total cost basis, realized and unrealized gains (value and percent), cash balances, and total portfolio value (holdings + cash). All monetary values are decimals in the user's base currency.

NameRequiredDescriptionDefault
dateNoDate for historical snapshot (ISO 8601). Default: latest available prices
portfolioIdYesPortfolio ID (from get_portfolios)

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It adds genuine context ('All monetary values are decimals in the user's base currency'), which is useful, but says nothing about permissions, read-only nature, or rate limits. Adequate but incomplete for an annotation-free tool.

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 well-formed sentence that is front-loaded with the scope ('portfolio-level aggregates for a single portfolio') and then the returned fields. No wasted words, though the trailing currency note could be more tightly integrated.

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

Completeness4/5

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

With no output schema, the description takes on the job of explaining return values, and it does so by enumerating the aggregate metrics returned. Combined with the base-currency/decimal note, an agent knows what to expect. It would be complete at 5 if it also clarified the date-snapshot vs latest-price behavior.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (portfolioId and date) are already fully documented in the schema, including the reference to get_portfolios. The description adds no parameter syntax or format detail beyond what the schema supplies, so the baseline of 3 applies.

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?

States a specific resource ('portfolio-level aggregates for a single portfolio') and enumerates exactly what it returns: market value, cost basis, realized/unrealized gains, cash balances, and total value. This is far more than a tautology. It falls short of a 5 because it never distinguishes itself from close siblings like get_portfolio_holdings or get_portfolio_balances.

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 implies usage by listing the aggregate fields, but never states when to choose this over get_portfolio_holdings, get_portfolio_balances, or get_portfolios. There is no when-to-use, when-not, or alternative routing guidance.

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

get_spending_by_categoriesBInspect

Get spending breakdown by category for a date range. Returns each category with its total amount. Great for understanding where money goes. Defaults to current month expenses.

NameRequiredDescriptionDefault
endDateNoEnd date (ISO 8601). Default: today
accountIdNoFilter by specific account ID
startDateNoStart date (ISO 8601). Default: start of current month
categoryIdsNoOnly include specific category IDs
transactionTypeNoTransaction type. Default: expense
excludedCategoryIdsNoExclude specific category IDs

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose two useful traits: the per-category-total return shape and the current-month default window. It omits other behavioral context such as whether values are aggregated across accounts, currency, rounding, or sorting of results, so the safety/behavior profile is only partially covered.

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?

Four short sentences front-load the core behavior and return shape, with no wasted preamble. The sentence 'Great for understanding where money goes' is promotional filler rather than actionable information, which keeps it just short of a 5.

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 6-parameter, flexible read tool with no output schema and no annotations, the description supplies the essential return format and default window, which is genuinely needed. It still leaves gaps around multi-filter interaction, aggregation scope, and result ordering that an agent would benefit from knowing.

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 every parameter (accountId, categoryIds, excludedCategoryIds, transactionType, dates) is already documented in the schema. The description only restates the date range and the current-month default, adding nothing about the filter interplay, so the baseline 3 applies.

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 names a specific verb+resource ('Get spending breakdown by category for a date range') and states the return shape ('each category with its total amount'). It is clearly distinguishable from generic list tools, though it never names the adjacent analysis siblings (get_budget_spending_stats, get_expenses_for_period, get_cash_flow) that an agent could confuse it with.

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?

'Defaults to current month expenses' and 'Great for understanding where money goes' imply an analytical/browsing use case, but there is no explicit when-to-use or when-not-to-use guidance relative to the sibling spending/expense tools. Usage must be inferred from the phrasing rather than stated.

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

get_subscription_by_idAInspect

Retrieve a single subscription by its ID including all linked transactions (with match source and date) and the computed next expected payment date.

NameRequiredDescriptionDefault
idYesUUID of the subscription to retrieve

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are present, so the description carries the full burden. It does usefully disclose the response payload (linked transactions with match source and date, plus a computed next expected payment date), which is real value beyond the name. However, it says nothing about permissions, behavior when the ID is unknown, or whether the read is paginated.

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

Conciseness5/5

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

One sentence, front-loaded with the verb and resource, and every clause (linked transactions, match source and date, next expected payment date) conveys distinct information. No filler.

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

Completeness4/5

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

With no output schema, the description compensates by enumerating the returned fields, which is exactly what an agent needs to interpret the result. It is close to complete for a one-parameter read; only error/edge-case behavior is unaddressed.

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 single 'id' parameter is already documented as a UUID in the schema. The description adds only the redundant framing of 'by its ID', so the baseline 3 applies.

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?

States a specific verb ('Retrieve') and a precisely scoped resource ('a single subscription by its ID'), which implicitly separates it from the list-oriented sibling get_subscriptions. It does not name any sibling explicitly, so it falls just short of the top band.

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?

Usage is only implied: 'by its ID' tells the agent this is the point-lookup path when a subscription identifier is already known. There is no explicit statement of when to prefer this over get_subscriptions, get_subscriptions_summary, or get_upcoming_subscription_payments.

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

get_subscriptionsBInspect

List all subscriptions and recurring bills for the user. Returns name, frequency, expected amount, linked account/category, active state, and linked transaction count. Use isActive to filter active-only.

NameRequiredDescriptionDefault
typeNoFilter by type: "subscription", "bill", or "installment"
isActiveNoFilter by active state. Omit to return all subscriptions

TDQS

B3.2/5.0
Behavior3/5

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

No annotations, so the description carries the burden. It helpfully enumerates the returned fields (name, frequency, amount, linked account/category, active state, transaction count), but does not state that it is read-only, whether results paginate, or any auth/rate constraints.

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

Conciseness4/5

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

Two tight sentences with the core purpose front-loaded and no filler. The trailing isActive sentence is slightly redundant against the schema but still short and scannable.

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

Completeness4/5

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

With no output schema, the description compensates by listing return fields, and both parameters are covered. Adequate for a simple read-only list tool, though the lack of sibling routing leaves a small gap.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are already documented in the schema; the description's isActive sentence largely restates the schema's 'Filter by active state' text. The enum parameter 'type' (subscription/bill/installment) is not mentioned in the description at all.

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?

States a specific verb (List) and resource (subscriptions and recurring bills), plus what the records contain. Clear purpose, but it does not differentiate itself from close siblings like get_subscriptions_summary, get_subscription_by_id, or get_upcoming_subscription_payments.

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?

Only offers 'Use isActive to filter active-only', which is a parameter hint rather than usage guidance. No when-to-use-vs-alternatives or exclusions are given, so an agent must infer this is the unfiltered bulk-listing call from the name alone.

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

get_subscriptions_summaryAInspect

Aggregate summary across all active subscriptions with an expected amount, split by direction. Returns estimated monthly cost and projected yearly cost from expense subscriptions, expected monthly income from income subscriptions, active counts as { expense, income }, the user's average monthly income over the last 6 complete months (observed from transaction history, separate from subscription-based expected income), and percent of that income spent on subscriptions (all monetary values in the user base currency). Useful for "how much am I spending on subscriptions per month?", "how much recurring income do I have?", or "what share of my income goes to subscriptions?"

NameRequiredDescriptionDefault
typeNoLimit the summary to a specific type: "subscription", "bill", or "installment"

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations and no output schema, the description carries the full disclosure burden and does so well: it details what each returned figure represents and even notes the average income is observed from transaction history and separate from subscription-based expected income. It says nothing about permissions, currency-conversion behavior, or performance, which caps it below 5.

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 purpose is front-loaded in the opening clause, and each subsequent item earns its place by specifying a return metric. It is a heavy run-on enumeration, though, and could be tightened with a list rather than one long sentence.

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

Completeness4/5

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

With no output schema, the description must explain return values, and it does so comprehensively, plus it adds the six-month income calculation context. The only real gap is that the type filter from the schema is never acknowledged, creating a small mismatch with the 'all active subscriptions' framing.

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 single enum parameter is fully documented in the schema, so the baseline is 3. The description never mentions the type filter and instead says 'all active subscriptions', which could mislead an agent into thinking the tool cannot be scoped to bills or installments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description states a specific aggregate operation ('Aggregate summary across all active subscriptions... split by direction') and enumerates exactly which metrics it produces (monthly cost, yearly cost, expected income, active counts, average income, share spent). This scope is clearly distinct from the listing tools get_subscriptions / get_subscription_by_id, so an agent can route correctly.

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 supplies concrete trigger questions ('how much am I spending on subscriptions per month?', 'how much recurring income do I have?', 'what share of my income goes to subscriptions?') that map cleanly to invocation intent. It does not, however, name alternative tools or state when NOT to use it (e.g. use get_subscriptions for the raw list), so it stops short of explicit alternative routing.

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

get_tagsAInspect

List all user tags. Returns tag ID, name, color, and icon.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It signals a non-mutating read and goes beyond the name by naming the returned fields, but it says nothing about ordering, pagination, or whether the list is workspace-scoped or filtered by user.

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, purpose first and return fields second, with no filler. Every clause 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?

With no output schema present, the description usefully enumerates the returned fields (ID, name, color, icon), covering the main gap an agent would otherwise have. It is complete enough for a simple parameterless list call, though ordering and result-shape caveats are unaddressed.

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 takes zero parameters, so there is no parameter semantics to document. Per the baseline for parameterless tools, a 4 is appropriate; the description wastes no effort inventing arguments.

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?

States a specific verb and resource: 'List all user tags', which clearly distinguishes it from the sibling mutations create_tag, update_tag, and delete_tag. It does not, however, differentiate itself from the other get_*/list_* read siblings, so it stops short of a 5.

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 the usage ('List all user tags') but gives no explicit when-to-use guidance, prerequisites, or named alternatives such as retrieving a single tag by ID. For a trivial zero-parameter lister this implied framing is adequate but not instructive.

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

get_trackersAInspect

List trackers: spending watchers over a date range with an optional limit, holding hand-picked transactions plus those their category and tag rules link. They are not the period-based Budget plan (lines, assigned amounts, Ready to Assign), which no tool exposes. Filter by status (active, archived, closed). Returns tracker name, limit amount, status, date range, rule categories and tags, rulesEnabled (rules auto-link matching transactions of the owner), rulesCleanup (rule links that stop matching are removed), and lines: named category sets with their own optional limit (name, limitAmount as decimal, position, categories). A transaction lands in at most one line, the first by position whose categories (expanded to children) contain it; unmatched spending is "other". Per-line spent is in get_tracker_spending_stats. Smart tracking fields (owner-only): aiEnabled, aiDescription (what the AI looks for), aiPreWindowDays (days before startDate also scanned), aiLastScannedAt; its suggestions are in list_tracker_suggestions.

NameRequiredDescriptionDefault
statusNoFilter by tracker status. Default: active

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description fully carries the burden: it explains rulesEnabled (auto-links matching transactions), rulesCleanup (removes links that stop matching), the per-line allocation logic (first line by position whose categories contain the transaction, unmatched as 'other'), and owner-only AI fields. Rich behavioral disclosure.

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?

Front-loads the core purpose and then elaborates on return fields. The text is dense but every clause conveys needed information about return structure; it could be split into bullet-like segments for readability but remains front-loaded and purposeful.

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?

No output schema exists, so the description must explain return values, and it does so comprehensively: tracker name, limit amount, status, date range, rule categories and tags, rulesEnabled, rulesCleanup, lines structure, and AI tracking fields. Complete for correct invocation.

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

Parameters3/5

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

The single parameter status has 100% schema coverage including enum values and default. The description merely repeats the enum values ('active, archived, closed') without adding new semantic detail, which matches the baseline 3 when the schema already documents 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?

States a specific verb and resource: 'List trackers: spending watchers over a date range with an optional limit'. It explicitly distinguishes them from the period-based Budget plan and from related tools like get_tracker_spending_stats and list_tracker_suggestions.

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 context that these are not Budget plans and points to get_tracker_spending_stats for per-line spent and list_tracker_suggestions for AI suggestions. It does not explicitly say when to use this versus create_tracker or other siblings, but the scope and alternatives are clear.

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

get_tracker_spending_statsAInspect

Get spending statistics for a tracker: spending broken down by category and a time-series of expense vs income over the tracker period. Granularity is daily for ranges ≤62 days, weekly ≤184 days, monthly otherwise. Also returns spending by original currency, the top 5 payees, the biggest spending day, a summary (income, expense, balance, limit utilization %), per-line spent (lines: [{ lineId, spent }], match lineId against get_trackers lines) and otherSpent for spending that matches no line. Amounts are decimals.

NameRequiredDescriptionDefault
trackerIdYesID of the tracker to retrieve spending stats for

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so largely: it discloses the return shape (category breakdown, time series, currency split, top 5 payees, biggest day, summary with limit utilization, per-line spent plus otherSpent fallback) and the daily/weekly/monthly granularity cutoffs (62/184 days). The implied read-only nature and decimal amount format are covered, though permissions/auth expectations are not mentioned.

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?

Front-loaded with the core purpose followed by tightly packed detail, and every sentence adds information about returns or granularity. It is dense to the point of being a single long run-on paragraph, which slightly hurts scannability.

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?

There is no output schema, so the description must describe returns, and it does so comprehensively: breakdowns, time series, currency, payees, summary metrics, per-line attribution and the otherSpent bucket. An agent has everything needed to call it and interpret the result.

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

Parameters3/5

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

Schema description coverage is 100% for the single trackerId parameter, so the schema already documents it; the description adds no extra semantics about the ID format or source. Baseline 3 applies when the schema does the heavy lifting.

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?

States a specific verb and resource ('Get spending statistics for a tracker') and immediately scopes the output (category breakdown, expense-vs-income time series over the tracker period). It also references the sibling get_trackers as the source for lineId matching, so an agent can tell what this tool is for without opening a schema.

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?

Usage is implied (analyzing a tracker's spending), but the description never states when to prefer this over siblings like get_spending_by_categories, get_cash_flow, or get_trackers. It does explain the internal granularity thresholds, which is useful but not a when-to-use rule.

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

get_transaction_automationsAInspect

List the transaction automation rules (rules engine) of the user, ordered by evaluation order. Call it before updating, deleting, or reordering a rule to get its id. Returned fields: position is the 0-based evaluation order (rules run top to bottom on each newly synced or imported bank transaction and the first rule that applies an action wins), isEnabled whether the rule runs at all, matchCount and lastMatchedAt how often and when it last fired, and pausedReason which is non-null when a referenced category, tag, payee, or account was deleted (fix the rule and re-enable it). Automations fire only for new transactions on bank-connected accounts or imported rows, never for transfers, planned transactions, or transactions on manual (non-bank) accounts, and never change existing transactions retroactively.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: it documents each returned field's semantics (position as 0-based eval order with first-match-wins, isEnabled, matchCount/lastMatchedAt, pausedReason) and the engine's firing constraints (new bank/imported transactions only, never transfers, planned, or manual-account transactions, never retroactive).

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?

Front-loaded with purpose and the call-before-mutation guideline, then field semantics and firing rules. Every sentence is informative, though the single dense paragraph is long enough that the field definitions and firing constraints run together.

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?

There is no output schema, so the description's field-by-field explanation of the return shape is exactly the missing context an agent needs, and the firing-condition caveats close the remaining gap for a zero-input list 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?

The tool takes zero parameters, so the baseline is 4. The description adds meaningful semantics about the returned data even though there are no input arguments to clarify.

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?

States a specific verb (List) and resource (transaction automation rules / rules engine), plus scope (of the user, ordered by evaluation order). It is trivially distinguishable from create/update/delete/reorder_transaction_automation siblings.

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

Usage Guidelines5/5

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

Explicitly states when to call it: before updating, deleting, or reordering a rule, in order to get its id. This is actionable routing guidance rather than an implied use case.

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

get_transaction_groupsAInspect

List all transaction groups for the user. Groups bundle related transactions (e.g. split expenses). When includeTransactions is true, each group contains the full transaction list; otherwise returns aggregate counts and date ranges.

NameRequiredDescriptionDefault
includeTransactionsNoWhen true, embed full transaction data in each group. Default: false (aggregates only)

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose the branching return shape (full transaction list vs aggregate counts and date ranges), which is real behavioral value, but it says nothing about scope limits, pagination, permissions, or whether results are cached/filtered.

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 short sentences with zero filler; the core purpose is front-loaded and the parameter behavior follows immediately. Every sentence carries 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 single-optional-parameter read tool with no output schema, the description adequately covers what is returned and how the flag changes it. Minor gaps remain around pagination and result limits, but nothing critical blocks correct invocation.

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%, so the baseline is 3. The description goes slightly further by characterizing what the false branch returns ('aggregate counts and date ranges'), which the schema only calls 'aggregates only', adding concrete meaning to the flag.

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?

States a specific verb and resource ('List all transaction groups for the user') and explains the domain concept with a concrete example ('split expenses'). It does not explicitly distinguish itself from nearby siblings like get_transaction_automations or create_transaction_group, but the resource 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 Guidelines3/5

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

Usage is implied: the tool retrieves groups, and the flag paragraph hints at a lightweight vs detailed retrieval mode. There is no explicit when-to-use statement, no mention of alternatives, and no prerequisites or exclusions.

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

get_upcoming_subscription_paymentsAInspect

List upcoming subscription payments sorted by next expected payment date (soonest first). Returns subscription name, expected amount, currency, next payment date, and category. Only active subscriptions with an expectedAmount are included.

NameRequiredDescriptionDefault
typeNoFilter by type: "subscription", "bill", or "installment"
limitNoMaximum number of upcoming payments to return. Default: 5

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses the sort order, the return fields, and the filtering criteria (only active subscriptions with expectedAmount). It does not mention pagination behavior or what happens if limit is omitted, but the core behavioral traits are well covered.

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 waste. The sorting and scope constraints are front-loaded, followed by return fields and filtering criteria. Every phrase 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 (2 optional params, no output schema), the description is nearly complete. It could note that results are limited by the 'limit' parameter or mention the default, but it already covers scope, sort, and return. Minor gaps remain.

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

Parameters3/5

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

Schema coverage is 100% – both parameters are fully described in the schema, including the enum values for 'type' and the default for 'limit'. The description does not add any syntax or format details beyond what the schema provides, 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?

States a specific verb (List) and resource (upcoming subscription payments) with an explicit sort order (next expected payment date, soonest first). This is clearly distinguishable from siblings like get_subscriptions (all subscriptions) or get_subscription_by_id (single lookup).

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 through its scope ('upcoming', 'active subscriptions with an expectedAmount') but does not explicitly say when to use this tool vs alternatives like get_subscriptions or get_subscriptions_summary. The inclusion criteria act as implicit guidance.

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

get_user_profileAInspect

Get the user's base currency, configured currencies with exchange rates, and basic profile info. Call this first to understand the user's currency context.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It is clearly a read-only getter with no side effects, and it discloses the shape of returned data (currencies, exchange rates, profile). However, it says nothing about authentication context, caching, or whether the profile fields are truncated, leaving modest gaps for a zero-parameter read.

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, zero waste, with the returned content front-loaded and the usage directive second. Every clause 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?

With no output schema and no annotations, the description must convey what comes back, and it does enumerate the returned fields while also stating when to call it. For a trivial zero-param getter this is near-complete; only the exact profile field set remains unspecified.

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 takes zero parameters, so per the rubric the baseline is 4. There is nothing for the schema or description to disambiguate, and the description does not need to add parameter 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?

States a specific verb ('Get') and enumerates the resource contents: base currency, configured currencies with exchange rates, and basic profile info. 'Basic profile info' is slightly vague, but an agent can tell exactly what kind of data comes back. No sibling competes for this 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?

Explicitly instructs 'Call this first to understand the user's currency context,' which is clear sequencing guidance an agent can act on. It does not name exclusions or alternatives, but there is no sibling that overlaps enough to need one.

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

get_venture_dealAInspect

Retrieve a single venture deal by id, including its platform and currency. Pass includeEvents=true to also embed the deal's event history (sorted asc). Obtain the dealId from list_venture_deals.

NameRequiredDescriptionDefault
dealIdYesVenture deal ID (from list_venture_deals)
includeEventsNoWhen true, embed the deal's event history in the response. Default: false.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It usefully discloses what the response contains (platform, currency, optionally event history sorted ascending), but says nothing about permissions, error behavior, or what happens for a nonexistent id. Adequate but incomplete for a tool with zero annotation coverage.

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

Conciseness5/5

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

Two tight sentences with no waste. The core retrieval action is front-loaded, followed by the optional embedding and the ID source, in a logical order.

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?

There is no output schema, so the description must cover returns, and it does name the key response contents and the optional event history. Minor gaps remain around ordering guarantees, pagination (none needed for a single fetch), and failure modes, but it is sufficient for correct invocation.

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 both parameters are already documented in the schema, including includeEvents' default of false. The description adds only the 'sorted asc' ordering detail for the embedded events; the dealId provenance note merely repeats the schema. Baseline 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?

States a specific verb and resource: 'Retrieve a single venture deal by id.' The scope ('single', by id) distinguishes it from list_venture_deals and from mutation siblings like update_venture_deal, though it does not explicitly contrast with get_venture_deal_metrics.

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?

Gives clear context: obtain the dealId from list_venture_deals, and use includeEvents=true when event history is wanted. There is no explicit when-not guidance or mention of the metrics sibling, but the usage path is unambiguous.

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

get_venture_deal_metricsAInspect

Compute aggregated metrics for a venture deal: cost basis, current value (latest NAV), total distributions, absolute and percent P&L, TVPI (total value to paid-in), DPI (distributions to paid-in), and IRR. IRR returns null for degenerate cash flows (e.g. no inflows yet). Pass asOfDate (YYYY-MM-DD) to compute metrics as of a specific date.

NameRequiredDescriptionDefault
dealIdYesVenture deal ID (from list_venture_deals)
asOfDateNoCompute metrics as of this date (YYYY-MM-DD). Defaults to today.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose a genuinely useful edge case: 'IRR returns null for degenerate cash flows (e.g. no inflows yet).' However it omits other behavioral facts an agent would want, such as confirming this is a read-only computation and whether it depends on existing transactions/events.

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?

Front-loads the concrete metric list, follows with the IRR caveat, and closes with the parameter hint. Every sentence contributes; the acronym expansions (TVPI, DPI, NAV) add clarity without bloat.

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

Completeness4/5

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

With no output schema, the description compensates well by enumerating the exact return fields and flagging the IRR null case. It is slightly incomplete on usage context (when this beats fetching the deal directly), but otherwise sufficient for a two-parameter read 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 coverage is 100%, so both parameters are already documented in the schema, including defaults and patterns. The description restates asOfDate's format and only adds a 'defaults to today' style hint, 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?

States a specific verb ('Compute aggregated metrics') and resource ('a venture deal'), then enumerates the exact outputs (cost basis, NAV, distributions, P&L, TVPI, DPI, IRR). This clearly differentiates it from the sibling get_venture_deal, which would return the raw deal record rather than derived metrics.

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?

Usage is implied by the purpose and the asOfDate hint ('Pass asOfDate ... to compute metrics as of a specific date'), but there is no explicit when-to-use guidance or routing against siblings like get_venture_deal or get_venture_event. The agent must infer that this tool supersedes the plain getter when metrics are wanted.

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

get_venture_eventAInspect

Retrieve a single venture event by id, including its link rows (bank transactions linked to this event). Obtain the eventId from list_venture_events.

NameRequiredDescriptionDefault
eventIdYesVenture event ID (from list_venture_events)

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses that the response includes link rows (bank transactions linked to the event), which is real behavioral value, but it says nothing about authorization requirements or behavior when the id is not found. Partial coverage only.

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 compact sentences, front-loaded with the core purpose and followed by the operational hint about where to get the id. No filler.

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

Completeness4/5

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

For a simple single-entity read with no output schema, the description compensates by describing the return composition (link rows) and the ID provenance. Error/failure behavior is unaddressed, but nothing essential for invoking the tool correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single eventId parameter is fully documented (uuid format, pattern, and the 'from list_venture_events' note). The description's reminder of the ID source largely repeats what the schema already states, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (retrieve) and resource (venture event) with explicit scope (single, by id), and distinguishes itself from the list sibling by referencing list_venture_events as the ID source. An agent can tell it apart from list_venture_events and the other get_* venture tools without opening a schema.

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?

It implies usage by pointing to list_venture_events for the eventId, which gives a usable workflow hint, but there is no explicit when-to-use vs when-not or statement of what to do instead if the caller wants many events. Usage is implied rather than spelled out.

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

get_venture_platformAInspect

Retrieve a single venture platform by id. Returns full record including default fee fractions (decimals in [0,1]). Obtain the platformId from list_venture_platforms.

NameRequiredDescriptionDefault
platformIdYesVenture platform ID (from list_venture_platforms)

TDQS

A3.6/5.0
Behavior3/5

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

No annotations exist, so the description carries the full disclosure burden; 'Retrieve' reasonably implies a read-only operation, and the note about returned fee fractions (decimals in [0,1]) adds unit/format context beyond the schema. It says nothing about permissions, error behavior for a missing/invalid id, or record size, so it only partially covers the behavioral surface.

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

Conciseness4/5

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

Two tightly written sentences with the core action front-loaded and id sourcing trailing. 'Returns full record' is mildly vague, which is the only thing keeping this from a 5.

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 one-parameter read tool with no output schema, the description covers what is fetched, the key returned field semantics, and where the id comes from. Only minor gaps remain (auth requirements, behavior on unknown ids), which is appropriate for a tool of this simplicity.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter already documents itself as a UUID sourced from list_venture_platforms. The description restates that same provenance rather than adding new syntax or constraint detail, so the schema is doing the heavy lifting.

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?

Specific verb ('Retrieve') plus resource ('a single venture platform') and a scoping qualifier ('by id'), which cleanly separates it from a list-style sibling. It does not explicitly name a tool it is not, but the phrase 'Obtain the platformId from list_venture_platforms' effectively signals the list/get division of labor.

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?

Gives a clear prerequisite ('Obtain the platformId from list_venture_platforms'), which tells the agent both when to use this tool and where its input comes from. There are no explicit exclusions or failure-path guidance, which keeps it out of 5 territory.

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

list_portfolio_transfersAInspect

Cash movement history of a portfolio: account↔portfolio transfers, direct deposits/withdrawals, linked bank transactions, and currency exchanges. Each entry names the source/destination portfolio or account. Sorted by date, newest first. Returns { transfers, totalCount }.

NameRequiredDescriptionDefault
toNoOnly transfers on or before this date (YYYY-MM-DD)
fromNoOnly transfers on or after this date (YYYY-MM-DD)
limitNoMax results to return (default: 20)
offsetNoPagination offset (default: 0)
portfolioIdYesPortfolio ID (from get_portfolios)

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries full behavioral burden. It usefully discloses sort order (newest first), the return shape ({ transfers, totalCount }), and that each entry names its counterparty, but it says nothing about permission requirements, mutation risk, or pagination behavior beyond what the schema 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?

Four tight sentences, front-loaded with the resource scope, followed by contents, ordering, and return shape. No filler or repetition of the tool name.

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

Completeness4/5

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

No output schema exists, so the description properly discloses the return object ({ transfers, totalCount }) and ordering. Combined with fully documented input parameters, an agent has enough to invoke it correctly, though explicit filtering semantics (how from/to behave) and pagination expectations are left to the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters (from/to/limit/offset/portfolioId) are already documented in structured data. The description adds no parameter-level meaning (its 'names the source/destination' line concerns output, not inputs), so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description names a specific verb+resource (cash movement history of a portfolio) and enumerates exactly what it covers: account↔portfolio transfers, direct deposits/withdrawals, linked bank transactions, and currency exchanges. This scope definition lets an agent distinguish it from siblings like get_portfolio_summary or get_portfolio_balances without opening a schema.

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?

Usage is implied (fetch transfers for a given portfolio), and the schema ties portfolioId to get_portfolios, but the description offers no explicit when-to-use/when-not guidance or naming of an alternative sibling such as get_portfolio_summary or get_portfolio_holdings.

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

list_subscription_candidatesAInspect

List auto-detected subscription candidates sorted by confidence score. Call detect_subscription_candidates first to generate fresh candidates. Use status filter to see only pending, accepted, or dismissed candidates.

NameRequiredDescriptionDefault
statusNoFilter by candidate status. Omit to return all statuses

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses ordering (by confidence score) and a workflow prerequisite, but says nothing about pagination, result limits, whether candidates persist between calls, or that this is a non-mutating read. Adequate for a simple list tool, but not rich.

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

Conciseness5/5

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

Three short sentences, zero waste. The primary action is front-loaded, the prerequisite follows, and the filter hint comes last.

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 one-parameter list tool with no output schema and no annotations, the description covers what the tool returns conceptually (candidates ranked by confidence), the prerequisite to populate them, and how to filter. It stops short of describing candidate fields or volume behavior, but an agent has enough to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100% and the single enum parameter is fully documented in the schema. The description restates the filter and its values (pending, accepted, dismissed) without adding syntax or behavior beyond what the enum already conveys, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (List) and resource (auto-detected subscription candidates) with the ordering criterion (confidence score). It is immediately distinguishable from detect_subscription_candidates (which generates) and get_subscriptions (which lists actual 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?

Explicitly names the prerequisite tool ('Call detect_subscription_candidates first to generate fresh candidates') and explains the purpose of the status filter. It does not call out when to prefer this over get_subscriptions or get_subscription_by_id, but the workflow dependency is the key guidance and it is stated.

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

list_tracker_suggestionsAInspect

Smart-tracking state of a tracker the user owns. pending: transactions the AI suggests linking, each with a suggestion id, score (0-1), the AI reason, and a transaction summary; accept or reject them by suggestion id with accept_tracker_suggestions / reject_tracker_suggestions. aiMatched: transactions the AI linked or the user accepted, still linked, with their reason. scan: status (idle, queued, running), startedAt, lastScannedAt, and pausedReason (archived, no_start_date, ended, plan, allowance, unavailable) when scanning cannot run; plan means the plan does not include smart tracking and the user has no AI connection of their own.

NameRequiredDescriptionDefault
trackerIdYesID of a tracker the user owns

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does much of it: it details the structure of pending items (suggestion id, 0-1 score, AI reason), the meaning of aiMatched, and the full scan status/pausedReason vocabulary. It does not explicitly state read-only/side-effect-free behavior, but the richness of the return disclosure is well above the annotation-free baseline.

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?

It is dense but front-loaded: the opening sentence frames the tool, then each subsequent clause maps to one bucket (pending, aiMatched, scan). Every sentence earns its place by disclosing return structure, though the enum-heavy scan sentence is fairly packed.

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?

There is no output schema and no annotations, so the description must explain the return values, and it does so thoroughly across all three buckets including pausedReason values. It is nearly complete for a one-parameter read tool; only an explicit read-only statement is missing.

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

Parameters3/5

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

There is a single parameter (trackerId) at 100% schema description coverage, so the schema already documents it fully. The description's phrase 'a tracker the user owns' restates ownership scope already captured in the schema, adding no new syntax or constraint, so the baseline 3 applies.

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 names a specific resource (smart-tracking state of a tracker the user owns) and enumerates the three response buckets (pending, aiMatched, scan), which lets an agent tell it apart from action siblings like accept_tracker_suggestions. The listing verb itself is only implied rather than stated, so it falls short of a full 5.

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?

It routes the agent to accept_tracker_suggestions / reject_tracker_suggestions for the follow-up actions, which is useful context. However, it never states when to call this tool versus get_trackers or get_tracker_spending_stats, so the guidance is implied rather than explicit.

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

list_venture_dealsAInspect

List the user's venture deals (private/illiquid investments through SPVs, syndicates, or direct vehicles). Returns each deal's id, name, status (outstanding | partial_exit | fully_exited | written_off), platform, currency, principal, entry fee, fee fractions, dates, and target company. Use the returned id with get_venture_deal, get_venture_deal_metrics, list_venture_events, and update_venture_deal.

NameRequiredDescriptionDefault
limitNoMax results
offsetNoPagination offset (default: 0)
statusNoFilter by status
platformIdNoFilter by platform id

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full behavioral burden. It does disclose the return payload's key fields (id, name, status, platform, currency, principal, entry fee, fee fractions, dates, target company) and enumerates the status enum values, which is helpful context. But it omits pagination behavior (default limit, max limit), ordering, and any auth or rate-limit details. For a list tool with no annotations, this is a moderate gap.

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 zero waste. The first states purpose and scope; the second lists the return fields and then the follow-up tools. Front-loaded and earns every word.

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

Completeness4/5

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

The description is largely complete for a list tool: it explains what the tool returns, clarifies the domain, and routes the agent to related tools. It does not mention pagination defaults or limits despite offset/limit parameters, and there is no output schema to fall back on, leaving a small gap. Overall, adequate but not exhaustive.

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 all four parameters (limit, offset, status, platformId) are documented in the schema. The description does not repeat parameter syntax or add format details, and it correctly relies on the schema for that. Baseline 3 is appropriate when schema coverage is complete.

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?

States a specific verb ('List') and resource ('venture deals'), plus a parenthetical clarifying the domain (private/illiquid investments through SPVs, syndicates, or direct vehicles). This distinguishes it from siblings like list_venture_events, list_venture_platforms, and list_portfolio_transfers, which cover adjacent but different resources.

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 a clear follow-up path: 'Use the returned id with get_venture_deal, get_venture_deal_metrics, list_venture_events, and update_venture_deal.' This tells the agent what to do next with the results. However, it doesn't state when this tool should be preferred over alternatives (e.g., if there were a search variant) or any prerequisites, so it stops short of 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.

list_venture_eventsAInspect

List events for a venture deal in chronological order (oldest first). Each event has a type (initial_investment | capital_call | distribution | nav_update | exit | writedown | fee_payment), date, amounts, cashFlowMode, and embedded link rows (when the event is tied to bank transactions). Use the returned event ids with get_venture_event, update_venture_event, and delete_venture_event.

NameRequiredDescriptionDefault
dealIdYesVenture deal ID (from list_venture_deals)

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses the ordering guarantee (oldest first) and the shape of returned rows, which is real added context, but it omits read-only/safety framing, pagination or result-size behavior, and permission needs for a listing operation. Useful but not complete for an unannotated tool.

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

Conciseness4/5

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

Two sentences, purpose front-loaded before the return-shape detail, with no filler. Slightly dense in enumerating every event field, but each element serves an agent that has no output schema to consult.

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?

Because there is no output schema, the description must describe returns, and it does so by naming the event fields, the type enum values, and the conditional embedded link rows. It does not explain the amounts/cashFlowMode semantics or pagination, leaving minor gaps for a simple single-parameter list 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?

Only one parameter (dealId) and schema description coverage is 100%, with the schema itself noting it comes from list_venture_deals. The description adds no format, constraint, or example beyond that, so the baseline 3 for schema-carried semantics 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?

Specific verb (List) plus resource (venture events) scoped to a venture deal, with ordering disclosed up front. It names the follow-up siblings (get/update/delete_venture_event), so an agent can distinguish this listing tool from the mutation tools that share the same entity.

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

Usage Guidelines4/5

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

It explicitly routes the agent to the correct follow-up tools ('Use the returned event ids with get_venture_event, update_venture_event, and delete_venture_event'), which is genuine workflow guidance. It stops short of saying when NOT to use this tool or pointing to list_venture_deals to obtain the dealId, so a 5 is not warranted.

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

list_venture_platformsAInspect

List the user's venture investment platforms (SPV syndicators, fund managers). Returns each platform's id, name, website, description, and default fee fractions (entry fee, management fee, carry, hurdle). Fee values are decimals in [0,1] — e.g. 0.085 means 8.5%. Use the returned id with get_venture_platform, create_venture_deal, and update_venture_platform.

NameRequiredDescriptionDefault
limitNoMax results
offsetNoPagination offset (default: 0)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the return shape (id, name, website, description, fee fractions) and, crucially, the unit semantics of fee values ('decimals in [0,1] — e.g. 0.085 means 8.5%'), which prevents a real class of misinterpretation. It does not cover pagination behavior or result ordering, but the units disclosure is high-value behavioral context.

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

Conciseness5/5

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

Three compact sentences, front-loaded with purpose, then return fields, then unit clarification, then routing. Every sentence carries distinct information and none is redundant.

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

Completeness4/5

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

No output schema exists, so the description must describe returns — and it does, listing the exact fields and their semantics. Combine that with the downstream id usage and the tool is callable without further context. Minor gap: no mention of pagination or default result limits.

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% — both limit and offset are documented in the schema. The description adds no additional parameter syntax, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb+resource ('List the user's venture investment platforms') and disambiguates the domain with parenthetical examples (SPV syndicators, fund managers). Clearly distinguishable from sibling list tools like list_venture_deals or list_venture_events.

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 downstream routing: 'Use the returned id with get_venture_platform, create_venture_deal, and update_venture_platform.' This tells the agent when this tool is a prerequisite. However, it doesn't state when NOT to use it or contrast with other listing tools.

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

merge_payeesAInspect

Merge a source Payee into a target Payee. Transactions and aliases move to the target; the target wins silently on defaultCategoryId conflict; the source is deleted. Use to dedupe near-duplicates like "Amazon" and "AMZN MKT". Requires finance:delete scope.

NameRequiredDescriptionDefault
sourceIdYesPayee id to merge from (will be deleted).
targetIdYesPayee id to merge into (kept).

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and does so well: it discloses that transactions and aliases move, that the target silently wins on defaultCategoryId conflict, that the source is deleted, and that finance:delete scope is required. This gives the agent a clear picture of the destructive and conflict-resolution behavior beyond the input schema.

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 compact and front-loaded: it states the operation first, then the key side effects, then the use case and permission requirement. Every sentence adds distinct, necessary information with no waste.

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

Completeness5/5

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

For a two-parameter merge tool with no annotations and no output schema, the description supplies the important behavioral, conflict-resolution, deletion, and permission context an agent needs to invoke it safely. Return values need not be explained because no output schema exists.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already explains that sourceId is deleted and targetId is kept. The description reinforces the source/target relationship but does not add new syntax, constraints, or format details for either parameter, so the schema does the heavy lifting and a 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 names a specific verb and resource ('Merge a source Payee into a target Payee') and immediately distinguishes the operation from simple deletion or update by explaining that transactions and aliases move to the target while the source is deleted. An agent can identify this as a deduplication/merge operation without checking 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 Guidelines4/5

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

It gives a clear trigger ('Use to dedupe near-duplicates like "Amazon" and "AMZN MKT"') and states a required scope ('Requires finance:delete scope'), which helps the agent decide when this tool is appropriate. It does not explicitly name alternatives such as update_payee or delete_payee, so it falls short of the highest bar.

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

preview_transaction_automationAInspect

Dry-run a set of automation conditions against up to the last 1000 eligible existing transactions and return { matchedCount, scannedCount, matches } where matches is capped at 5 sample transactions. Nothing is modified. Use it to sanity-check conditions before create_transaction_automation or update_transaction_automation. Note that a live automation fires on its own only for newly synced or imported bank transactions that are not transfers and not planned; existing transactions change only when the user runs "Apply to past transactions" for a saved rule in the app.

NameRequiredDescriptionDefault
conditionsYesCondition tree: { match: "all" | "any", items: [...] }. 1-10 items, at most one transactionType item. Item shapes by field: - note | merchant (merchant is the bank-provided merchant/description text): { field, operator, value }. operator: contains_any | not_contains_any | starts_with_any | ends_with_any | equals_any | is_empty. value: 1-20 case-insensitive keywords, max 64 chars each; required unless operator is is_empty. Example: { "field": "merchant", "operator": "contains_any", "value": ["uber", "bolt"] } - payee | account | accountGroup | bankConnection: { field, operator, value }. operator: in | not_in. value: 1-20 UUIDs of that entity, all owned by the user. Example: { "field": "account", "operator": "in", "value": ["<accountId>"] } - amount: { field, operator, value: { min?, max? }, currency }. operator: gte | lte | between | equals. gte and equals take min only, lte takes max only, between takes both. Bounds are decimals (e.g. 12.50). currency: { "mode": "transaction" } compares in the currency of the transaction itself, { "mode": "base" } in the user base currency, { "mode": "specific", "code": "USD" } in a fixed currency. Example: { "field": "amount", "operator": "gte", "value": { "min": 100 }, "currency": { "mode": "base" } } - transactionType: { "field": "transactionType", "operator": "equals", "value": "income" | "expense" } - dayOfMonth: { "field": "dayOfMonth", "operator": "between", "value": { "min": 1, "max": 31 } }

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: 'Nothing is modified' declares the safe read profile, plus a scan bound (last 1000 eligible transactions), a result cap (5 sample matches), and the return shape. It also discloses non-obvious domain behavior about when live automations fire versus existing transactions changing.

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?

Front-loaded with the operation, then usage guidance, then caveats. Efficient overall, though the final sentence about when a live automation fires is lengthy and somewhat tangential to invoking this specific tool.

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 one-parameter tool with no output schema, the description fully covers what an agent needs: the dry-run semantics, the scan ceiling, the sampled result shape, and the create/update context. Nothing required to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the nested conditions schema is exhaustively documented (per-field operators, value shapes, examples). The description adds only the phrase 'set of automation conditions' and does not extend parameter meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (dry-run a set of automation conditions) against a specific resource (existing transactions), and explicitly contrasts itself with create/update_transaction_automation. An agent can distinguish it from sibling automation tools without opening any schema.

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 says to use it 'to sanity-check conditions before create_transaction_automation or update_transaction_automation,' naming both alternatives and the condition that routes to them. It further clarifies the live-vs-preview semantics so the agent knows when a preview is even meaningful.

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

reject_tracker_suggestionsAInspect

Reject smart-tracking suggestions of a tracker the user owns: pending ones are dismissed, and AI-linked or accepted ones are also unlinked from the tracker. The AI will not suggest these transactions again. Suggestion ids come from list_tracker_suggestions (pending or aiMatched). Returns resolvedCount.

NameRequiredDescriptionDefault
trackerIdYesID of a tracker the user owns
suggestionIdsYesSuggestion IDs from list_tracker_suggestions

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and delivers: it explains the differing effects on pending vs AI-linked/accepted suggestions (dismissed vs unlinked), that the AI will not re-suggest, and that ownership of the tracker is required. It lacks detail on reversibility of the unlink or any permission/rate-limit notes, but covers the essential side effects.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the core action and effect, then the id source and return value. No filler or redundancy.

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

Completeness4/5

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

For a 2-param mutation tool with no annotations and no output schema, the description supplies the behavioral effects, the input provenance, and the single return value (resolvedCount). Only minor gaps remain around error/permission behavior and edge cases, so it is nearly complete.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is a 3; the description goes beyond the schema by narrowing which suggestions to pass ('pending or aiMatched') and reaffirming the trackerId ownership constraint, adding genuine semantic value even though the source tool is already in the schema 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?

States a specific verb ('Reject') and resource ('smart-tracking suggestions of a tracker the user owns'), which immediately distinguishes it from the sibling accept_tracker_suggestions. An agent can tell what the tool does without opening the schema.

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?

Tells the agent where the required input comes from ('Suggestion ids come from list_tracker_suggestions (pending or aiMatched)'), giving clear context for invocation. It does not explicitly name accept_tracker_suggestions as the contrasting alternative or state when-not to use it, so it stops short of full when/when-not guidance.

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

remove_tags_from_transactionBInspect

Remove a tag from one or more transactions. Use when the user wants to untag transactions. Returns the count of removed tag links.

NameRequiredDescriptionDefault
tagIdYesID of the tag to remove from transactions.
transactionIdsYesList of transaction IDs to remove the tag from.

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden for a mutation tool. It discloses the return value (count of removed tag links), but says nothing about whether the removal is reversible, what happens if some transactionIds are invalid or untagged, or that it only severs the link rather than deleting the tag. For a write operation with zero annotation coverage this is a notable gap.

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?

Three short sentences, front-loaded with the action, with no padding. The usage sentence is mildly redundant with the purpose sentence, keeping it just short of a 5.

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

Completeness4/5

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

With no output schema, the description usefully states the return value (count of removed tag links), and it covers batch scope and the untagging intent. Missing confirmation of idempotency or partial-failure behavior, but the essential information for calling the tool correctly is present.

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 both parameters (tagId, transactionIds) are already self-documenting with UUID formats. The description adds only the batch nuance ('one or more transactions'), which the array-typed schema already implies. Baseline 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?

States a specific verb ('Remove') plus resource ('a tag') and scope ('one or more transactions'), which clearly distinguishes it from the inverse sibling assign_tags_to_transaction. It never names that sibling or any other alternative, so it stops short of explicit 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 Guidelines3/5

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

'Use when the user wants to untag transactions' states a use condition, but it essentially restates the purpose sentence rather than adding routing logic. No mention of when NOT to use it (e.g. deleting the tag itself via delete_tag, or removing from a single transaction vs bulk), and no prerequisites.

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

remove_transactions_from_groupAInspect

Remove transactions from a group. If removal would leave fewer than 2 transactions, pass force=true to dissolve the group entirely (transactions are kept). Requires finance:write scope.

NameRequiredDescriptionDefault
forceNoWhen true, dissolves the group if too few transactions would remain. Default: false (returns error instead)
groupIdYesID of the transaction group
transactionIdsYesIDs of transactions to remove from the group

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the auth scope (finance:write), the default error path when force is omitted, and that dissolving the group keeps the transactions. It leaves some side-effect detail unstated (e.g. whether the removed transactions persist independently in the ledger).

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 short sentences, front-loaded with the core action, then the force rule, then the scope requirement. Every sentence carries information an agent needs.

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

Completeness4/5

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

For a mutation tool with no annotations and no output schema, the description covers the key behaviors: conditional dissolution, the error path, and the required permission. It stops short of stating whether removal itself is reversible or whether transactions persist outside the group.

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

Parameters3/5

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

Schema description coverage is 100% and the force parameter is already well documented inline. The description adds only one nuance beyond the schema ('transactions are kept'), so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource: 'Remove transactions from a group.' The operation is unambiguous and clearly distinguishable from the add_transactions_to_group and remove_transactions_from_budget siblings without opening any schema.

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?

Gives a concrete conditional: pass force=true when the removal would leave fewer than 2 transactions, otherwise the call errors. It also names the required finance:write scope. It does not explicitly contrast with alternatives like delete_transaction_group, so a 4 rather than a 5.

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

remove_transactions_from_trackerAInspect

Unlink one or more transactions from a tracker. Does not delete the transactions themselves. Returns nothing on success.

NameRequiredDescriptionDefault
trackerIdYesID of the tracker to unlink transactions from
transactionIdsYesIDs of the transactions to remove from the tracker

TDQS

A3.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden, and it does answer the two highest-value questions for a mutation tool: the operation is non-destructive to the underlying transactions, and it produces no return payload. It stops short of covering permission requirements, idempotency, or what happens when an ID is not currently linked to the tracker.

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 short sentences, the core action front-loaded, with each subsequent sentence adding a distinct fact (non-destructiveness, return behavior). Nothing is padded or repeated from the name.

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

Completeness4/5

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

For a two-parameter tool with full schema coverage and no output schema, the description supplies the missing return-value information and the safety profile that annotations would otherwise carry. Remaining gaps are edge-case behavior on invalid or unlinked IDs rather than anything needed for a correct call.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (trackerId, transactionIds) are documented in the schema, so the baseline is 3. The description's only added signal is the 'one or more' phrasing, which confirms array/batch semantics already implied by the array type — no format, ordering, or constraint detail 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 gives a specific verb plus resource ('Unlink ... transactions from a tracker') and the plural scope is explicit, which cleanly separates it from the transaction-mutating siblings like delete_transaction. It does not name the near-identical siblings (remove_transactions_from_group, unlink_transactions_from_subscription), but the resource noun 'tracker' does the disambiguating work.

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?

There is no statement of when to reach for this tool versus remove_transactions_from_group, unlink_transactions_from_subscription, or delete_transaction — the reader must infer the selection rule from the noun alone. The only adjacent help is the scope clarification that transactions are not deleted, which hints at 'unlink' semantics but is not framed as usage guidance.

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

reorder_transaction_automationsAInspect

Reorder the transaction automation rules of the user. Rules are evaluated top to bottom on each newly synced or imported bank transaction and the first rule that applies an action wins, so ordering decides which rule takes precedence when several match. Returns the rules in their new order. Requires finance:write scope.

NameRequiredDescriptionDefault
idsYesEvery automation id of the user, in the desired top-to-bottom order. Must contain exactly the current full set (get it from get_transaction_automations first) or the call fails with a conflict.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden, and it does well: it discloses overwrite semantics (the full ordered set replaces existing order), the conflict-failure behavior, the required finance:write scope, and the returned payload. It does not say whether the operation is reversible or how concurrent reorders are handled, which keeps it below a 5.

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 tightly written sentences: operation, the semantic reason ordering matters, then the return value and scope requirement. Nothing is repeated from the schema and the key constraint is front-loaded.

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

Completeness4/5

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

With no output schema, the description usefully states the return (rules in their new order), and it covers the prerequisite fetch, the scope requirement, and the evaluation semantics. Complete enough for a one-parameter mutation, though a note on authorization failure or undo behavior would round it out.

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?

Only one parameter and schema coverage is 100%, so the schema already documents 'ids' as the full ordered UUID set with a max of 100 items. The description adds no syntax or format detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb ('reorder') plus the exact resource ('transaction automation rules of the user'), which cleanly distinguishes it from the create/update/delete_transaction_automation siblings. An agent knows immediately this is a bulk ordering operation, not an attribute edit.

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?

Explains the operational context — rules evaluate top to bottom and the first match wins — which tells the agent why ordering matters, and the schema directs it to fetch the current set from get_transaction_automations first. It stops short of explicitly naming update_transaction_automation as the alternative for editing a single rule, so it is clear but not fully routing.

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

search_securitiesAInspect

Search for securities (stocks, ETFs, crypto, etc.) by ticker symbol or company name. Call this before create_investment_transaction to resolve a human-readable ticker (e.g. "AAPL") into a securityId. If portfolioId is provided, each result includes isInPortfolio to indicate whether the security is already tracked in that portfolio.

NameRequiredDescriptionDefault
limitNoMaximum number of results to return (default: 20)
queryYesTicker symbol or company name to search for (e.g. "AAPL", "Apple")
portfolioIdNoPortfolio ID to annotate results with isInPortfolio flag (from get_portfolios)

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden. It discloses meaningful conditional behavior — that supplying portfolioId enriches each result with an isInPortfolio flag — and frames itself as a lookup step producing a securityId. It does not mention result ordering, pagination, or ambiguity handling when a query matches multiple securities, which is a gap for a search endpoint.

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

Conciseness5/5

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

Three tight sentences and no filler. The core purpose comes first, the workflow guidance second, and the conditional annotation behavior last — a well-ordered, front-loaded structure.

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

Completeness4/5

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

With no output schema, the description usefully names two returned fields (securityId, isInPortfolio) and the downstream consumer, which is enough for an agent to use the result correctly. It stops short of describing result shape, ranking, or what happens on zero matches, leaving a modest gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters (limit default 20, query format, portfolioId source). The description restates the portfolioId effect but adds no syntax or format detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('Search for securities') plus the accepted input domain (ticker, company name) and the covered asset classes. No sibling tool does security lookup, so it is easily distinguished from the many transaction/portfolio 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?

Explicitly sequences the tool: 'Call this before create_investment_transaction to resolve a human-readable ticker into a securityId.' This tells the agent both when to use it and why, which is exactly the routing information a multi-step workflow needs.

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

search_transactionsBInspect

Search and filter transactions. Returns transaction amount (original + base currency), category, account, note, date, type, and tags. Use date filters to limit results. Default: last 30 days, 50 items.

NameRequiredDescriptionDefault
limitNoMax results (default: 50, max: 500)
orderNoSort order by date (default: desc)
offsetNoPagination offset (default: 0)
searchNoSearch in transaction notes
tagIdsNoFilter by tag IDs
endDateNoEnd date (ISO 8601). Default: today
amountMaxNoMaximum amount (decimal, in original currency)
amountMinNoMinimum amount (decimal, in original currency)
startDateNoStart date (ISO 8601). Default: 30 days ago
accountIdsNoFilter by account IDs
categoryIdsNoFilter by category IDs
excludeRefundsNoExclude refund transactions
transactionTypeNoFilter by transaction type
excludeTransfersNoExclude transfer transactions

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses the default scope (last 30 days, 50 items) and the return-field set, which matters with no output schema. It says nothing about permissions, how filters combine, or how pagination interacts with the defaults, leaving notable gaps for a 14-parameter query tool.

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?

Three short sentences with no filler, front-loaded with the core purpose. The return-field enumeration is a little list-like but each item is informational, so little is wasted.

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 14 optional parameters and no output schema, listing return fields is a valuable addition, and defaults are covered. Still missing are how multiple filters combine, the search field's scope beyond the schema note, and any indication that results are paginated via offset.

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 every filter, its unit, and its default is already documented in the schema. The description's reference to date filters and defaults merely echoes startDate/endDate/limit without adding syntax or semantics 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?

States a specific verb+resource ("Search and filter transactions") and enumerates the returned fields, so the agent knows exactly what kind of tool this is. However, with ~80 siblings including get_expenses_for_period, get_cash_flow, and get_spending_by_categories, it offers no differentiation from other transaction-read 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?

"Use date filters to limit results" is a usage hint, not a when-to-use rule, and the default window/size is behavioral context rather than guidance. No alternatives are named and no exclusions are given, despite several sibling tools that also return transaction data.

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

split_transactionAInspect

Split a transaction across multiple categories. Provide the transactionId and an array of splits whose amounts sum to the transaction total. Replaces any existing splits on the transaction.

NameRequiredDescriptionDefault
splitsYesSplit portions — amounts must sum to the full transaction amount
transactionIdYesID of the transaction to split

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses that existing splits are replaced (a destructive overwrite) and imposes the sum-equals-total constraint, but it omits permission requirements, what happens if amounts don't sum correctly, atomicity, and the response shape.

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 tight sentences with zero waste; the core action and the critical overwrite warning are front-loaded before the parameter guidance.

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 mutation tool with no annotations and no output schema, the description covers the essential semantics (sum constraint and replacement of existing splits). It still leaves meaningful gaps around error behavior on mismatched sums, permissions, and what the operation returns, which an agent would need to call it confidently.

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 both parameters and nested split fields are already documented, including the sum constraint. The description restates the sum-to-total rule but adds no syntax or format detail beyond 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 states a specific verb and resource ('Split a transaction across multiple categories'), which is unambiguous and clearly distinct from siblings like update_transaction or delete_split. An agent can identify the operation without opening the schema.

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?

It explains the invocation form (provide transactionId and splits summing to the total) and that existing splits are replaced, which implies usage context. However, it never states when to use this versus update_transaction or delete_split, nor any prerequisites or conditions that select this tool over alternatives.

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

toggle_subscription_activeAInspect

Activate or deactivate a subscription. Inactive subscriptions are excluded from upcoming payment calculations and summary totals. Requires finance:write scope.

NameRequiredDescriptionDefault
idYesUUID of the subscription
isActiveYesTrue to activate the subscription, false to deactivate it

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does disclose a real downstream consequence: inactive subscriptions drop out of upcoming payment calculations and summary totals. It also states the required finance:write scope. It stops short of saying whether the change is reversible, idempotent, or what happens to already-generated payment records.

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 short sentences, front-loaded with the action, then the side effect, then the permission requirement. Every sentence earns its place 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?

For a two-parameter toggle with no annotations and no output schema, the description covers the action, the downstream data effect, and the auth requirement, which is enough to invoke it correctly. Only a note on reversibility or error behavior is missing.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (id, isActive) are already documented in the schema with clear semantics, so the baseline of 3 applies. The description adds no syntax or format detail beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb pair (activate/deactivate) and resource (subscription), so the operation is unambiguous. It does not, however, distinguish itself from the sibling update_subscription, which an agent could reasonably assume also flips the isActive field.

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?

Usage is implied by the name and description (use it to flip active state), but there is no explicit when-to-use guidance or contrast against update_subscription or delete_subscription. The prerequisite (finance:write scope) is stated, which helps but is an auth constraint rather than a usage rule.

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

transfer_account_to_portfolioAInspect

Move cash from a regular account into an investment portfolio. Creates an expense transaction on the account and increases the portfolio cash balance. Use link_transaction_to_portfolio instead when the bank transaction already exists.

NameRequiredDescriptionDefault
dateYesTransfer date in YYYY-MM-DD format
amountYesAmount as a positive decimal string (e.g. "500.00")
accountIdYesSource account ID (from get_accounts). The transfer uses the account currency
descriptionNoOptional note for the transfer
portfolioIdYesDestination portfolio ID (from get_portfolios)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does disclose the two concrete write effects: an expense transaction is created on the account and the portfolio cash balance increases. It stops short of permissions, reversibility, or failure behavior, but the mutation side effects are unusually well spelled out for an unannotated 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?

Three short sentences, front-loaded with purpose, then side effects, then the disambiguation rule. No filler or restatement of the tool name.

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 5-parameter mutation with no annotations and no output schema, the description covers purpose, side effects, and the sibling alternative, which is most of what an agent needs. Return-value expectations and error/currency edge cases remain unstated, but nothing critical for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already documents date format, positive decimal amount, currency behavior, and source/destination ID origins. The description adds only the account-to-portfolio direction already implied by the parameter names, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb ('Move cash'), both resources ('regular account', 'investment portfolio') and the direction of transfer, which distinguishes it from transfer_portfolio_to_account and link_transaction_to_portfolio. An agent can select it without opening the schema.

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 names the alternative (link_transaction_to_portfolio) and the condition that selects it ('when the bank transaction already exists'). This is a clear when-to-use-this vs when-to-use-that rule.

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

transfer_portfolio_to_accountAInspect

Withdraw cash from an investment portfolio into a regular account. Creates an income transaction on the account and decreases the portfolio cash balance. Use link_transaction_to_portfolio instead when the bank transaction already exists.

NameRequiredDescriptionDefault
dateYesTransfer date in YYYY-MM-DD format
amountYesAmount as a positive decimal string (e.g. "500.00")
accountIdYesDestination account ID (from get_accounts)
descriptionNoOptional note for the transfer
portfolioIdYesSource portfolio ID (from get_portfolios)
currencyCodeYesCurrency of the cash withdrawn from the portfolio (ISO 4217, e.g. "USD")

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does meaningful work: it discloses both side effects (an income transaction is created on the account, the portfolio cash balance decreases). It stops short of stating reversibility, idempotency, or permission requirements for what is clearly a money-moving mutation.

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 earning its place: the operation, the resulting state change, and the alternative-route condition. The core action is front-loaded and nothing is redundant.

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 six-parameter mutation with no output schema and no annotations, the description supplies the essential causal model (transaction created, balance decreased) and the key routing rule. What's missing is whether the operation can be undone (unlink_transaction_from_portfolio exists as a sibling) and what the call returns.

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 all six parameters are already documented, including the positive-decimal constraint and the source/destination ID provenance. The description adds only directional framing (portfolio is source, account is destination), which the schema's own descriptions largely cover; 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 names a specific verb and direction ('Withdraw cash from an investment portfolio into a regular account'), and the directionality distinguishes it from the reverse sibling transfer_account_to_portfolio without the agent needing to open either schema.

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

Usage Guidelines4/5

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

It explicitly routes to link_transaction_to_portfolio with the selecting condition 'when the bank transaction already exists', which is exactly the discriminating case. It doesn't mention the mirror-image sibling transfer_account_to_portfolio or warn against double-counting an already-linked transfer, so it stops just short of full when/when-not coverage.

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

update_categoryBInspect

Update an existing category by ID. Use when the user wants to rename, recolor, or change the icon of a category. Returns the updated category records.

NameRequiredDescriptionDefault
iconNoNew icon identifier, or null to clear it.
nameNoNew category name.
colorNoNew hex color code (e.g. "#4CAF50").
categoryIdYesID of the category to update.

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It says 'Returns the updated category records' but does not disclose permission requirements, whether partial updates are allowed, what happens to unspecified fields, or whether the change is reversible. For a mutation tool with zero annotation coverage, this is a major gap.

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?

Three short sentences, front-loaded with the verb and resource, with no redundant filler. Efficient and readable, though the return-value sentence is somewhat boilerplate.

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 mutation tool with no annotations, no output schema, and full schema coverage, the description is thin on behavioral context. It omits permissions, partial-update semantics, and error handling. It covers purpose but leaves significant operational gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters, including that icon can be null to clear it. The description only lists the field names and adds no syntax or semantics beyond the schema. Baseline 3 is appropriate when the schema does the heavy lifting.

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?

States a specific verb+resource ('Update an existing category by ID') and names the mutable fields (rename, recolor, change icon). It does not explicitly distinguish itself from sibling update tools like update_tag or update_budget, but the resource is unambiguous. Clear but no 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 sentence 'Use when the user wants to rename, recolor, or change the icon of a category' gives a clear usage context tied to the updatable fields. It does not mention when not to use it or point to alternatives, so it stops short of explicit routing.

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

update_goalAInspect

Update a savings goal. Only passed fields change; accounts replaces the whole set. Use status to pause, archive or restore a goal. Fails when an account would pass 100% shared across non-archived goals, the new currency has no exchange rate, or fixed amounts alone fall short of the target. Needs the Goals feature on the plan or an active trial. Returns the goal in the get_goals shape.

NameRequiredDescriptionDefault
nameNoNew goal name
goalIdYesID of the goal to update
statusNoactive, paused or archived. Archiving frees the accounts' shares; restoring re-checks that every account stays within 100%
accountsNoReplaces the whole set of backing accounts, each { accountId, sharePercent } or { accountId, fixedAmount, fixedPosition? } as in create_goal. Each account's sharePercent values across non-archived goals cannot exceed 100%
targetDateNoNew deadline (yyyy-MM-dd). Pass null to remove it
currencyCodeNoNew target currency (ISO 4217)
targetAmountNoNew target, decimal in the goal currency
plannedMonthlyNoNew planned saving per month, decimal in the goal currency. Pass null to fall back to the historical pace
reachedHoldDaysNoDays (0-365, default 30) after first reaching the target during which a dip below it still counts as reached. 0 follows the balance live

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well: it discloses destructive replacement semantics for accounts, the failure conditions (100% share overflow, missing exchange rate, fixed-amount shortfall), plan prerequisites, and the return shape. These are the kind of side effects and constraints an agent needs before mutating state.

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?

Front-loaded with the core action and update semantics, then failure modes, prerequisites, and return shape. Dense but nearly every clause earns its place; only the enumerated failure list is a touch long, though it is high-value.

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 9-parameter mutation with no annotations and no output schema, the description is complete: it covers partial-update behavior, replacement semantics, failure conditions, prerequisites, and explicitly names the return shape (get_goals shape). An agent can call it correctly without further inference.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuine value beyond the schema: it explains that accounts replaces the entire set and that status drives pause/archive/restore, which the schema enumerates but does not explain consequentially. This lifts it above baseline.

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?

States a specific verb and resource ("Update a savings goal") and the partial-update semantics ("Only passed fields change") distinguish it from a full create. It does not explicitly name create_goal/delete_goal as alternatives, but the verb is specific and 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?

Provides clear context for use: partial field updates, accounts full-replacement behavior, and status to pause/archive/restore. It also states a prerequisite (Goals feature or active trial). No explicit when-not or named-alternative routing, so it falls short of a 5.

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

update_investment_transactionAInspect

Update an existing investment transaction — correct the date, quantity, price, fees, category, or label. Obtain the transactionId from get_investment_transactions. Only provided fields are changed; the holding recalculation runs automatically after every update.

NameRequiredDescriptionDefault
dateNoWhen the trade occurred. Accepts a date-only value (ISO 8601, e.g. "2024-03-15") or a full datetime (e.g. "2024-03-15T09:30:00.000Z"); date-only is stored at UTC midnight.
feesNoNew fees/commissions as a decimal string
nameNoNew label or note
priceNoNew price per share as a decimal string
categoryNoNew transaction category
quantityNoNew share quantity as a decimal string
transactionIdYesInvestment transaction ID (from get_investment_transactions)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does reasonably well: it discloses partial-update behavior and the automatic holding recalculation side effect after every update. It omits permissions/auth requirements and whether changes are reversible, keeping it short of a 5.

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 tight sentences, front-loaded with the action, followed by the ID source and the update side effect. No filler or redundancy.

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

Completeness4/5

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

For a mutation tool with no annotations and no output schema, the description covers what is changed, where the ID comes from, and the recalculating side effect. It leaves the response shape and failure/validation behavior unaddressed, but nothing critical to invoking it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every field's type and format. The description's field list adds only high-level confirmation of what is editable and does not clarify formats, decimal-string semantics, or category enum meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb+resource ('Update an existing investment transaction') and enumerates the mutable fields (date, quantity, price, fees, category, label). The 'investment' qualifier cleanly distinguishes it from the generic update_transaction sibling, so an agent can route without opening the schema.

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 names get_investment_transactions as the source of the required transactionId, which is the key precondition. It also clarifies patch semantics ('Only provided fields are changed'), though it offers no when-not guidance or named alternative for related edits.

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

update_payeeBInspect

Rename a Payee or set/clear its defaultCategoryId. Renaming preserves the previous canonical name as an alias so historical matches still resolve.

NameRequiredDescriptionDefault
idYesPayee id.
nameNoNew display name.
defaultCategoryIdNoNew default category id, or null to clear.

TDQS

B3.3/5.0
Behavior3/5

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

No annotations exist, so the description must carry the behavioral burden. It does disclose one genuinely valuable trait – that renaming retains the prior canonical name as an alias so historical matches still resolve – but says nothing about partial-update semantics (whether omitted fields are left untouched), authorization needs, or reversibility of the category change.

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 tight sentences that front-load the two mutation modes, followed immediately by the one non-obvious side effect. No filler, no restatement of the tool name.

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 mutation tool with no annotations and no output schema, the description covers the operations and one important side effect, which is the minimum viable level. It still omits whether updates are partial or full-replacement and what the caller gets back, leaving meaningful gaps.

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

Parameters3/5

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

Schema coverage is 100%, so all three parameters are already documented, including 'null to clear' for defaultCategoryId. The description restates the clear-vs-set distinction without adding syntax, format, or constraint detail beyond the schema, making the baseline 3 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?

States the specific actions precisely: renaming a payee and setting/clearing its default category, with the target resource named. It is distinguishable from create_payee, delete_payee, and get_payee, though it never explicitly contrasts itself with merge_payees, the nearest ambiguous sibling.

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 implies usage through the two mutation variants but gives no explicit when-to-use guidance, no prerequisites, and no mention of alternatives such as merge_payees for consolidating duplicates. An agent must infer routing from context.

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

update_portfolioAInspect

Update an existing portfolio's name, type, description, or enabled state. Use when the user wants to rename, recategorize, or disable one of their portfolios. Obtain the portfolioId from get_portfolios first. Only the fields provided are changed.

NameRequiredDescriptionDefault
nameNoNew portfolio name (must be unique for this user)
isEnabledNoEnable or disable the portfolio
descriptionNoNew description (pass null to clear)
portfolioIdYesPortfolio ID (from get_portfolios)
portfolioTypeNoNew portfolio type: investment, retirement, savings, or other

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses partial-update semantics ('Only the fields provided are changed') and a prerequisite lookup step, but says nothing about required permissions, reversibility, side effects of disabling, or failure modes for a mutation 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?

Three tightly packed sentences that front-load the purpose, then usage, then prerequisite and partial-update behavior. No filler or repetition; every sentence contributes actionable 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 5-parameter mutation tool with a fully-described schema and no output schema, the description covers purpose, use cases, prerequisite, and update semantics. It lacks authorization/response details, but those gaps are modest given the schema coverage and lack of output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents each parameter, including uniqueness and null-clearing behavior. The description repeats the field names and adds partial-update meaning, but adds no syntax or constraints beyond the structured schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Starts with a specific verb + resource ('Update an existing portfolio') and enumerates the exact mutable fields (name, type, description, enabled state). This clearly distinguishes it from create_portfolio, delete_portfolio, and read-only get_portfolios without needing to name them.

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 when to use it ('when the user wants to rename, recategorize, or disable') and gives the prerequisite to obtain the portfolioId from get_portfolios first. It does not name alternatives or conditions when not to use it, but the context is clear enough for selection.

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

update_subscriptionAInspect

Update fields on an existing subscription or bill. Only provided fields are changed. To toggle active state use toggle_subscription_active instead. Requires finance:write scope.

NameRequiredDescriptionDefault
idYesUUID of the subscription to update
nameNoNew display name
typeNoNew type: "subscription", "bill", or "installment". Switching to installment requires maxOccurrences and dueDate to be set (pass them in the same call).
notesNoNew notes, or null to clear
dueDateNoNew first/next payment date (ISO 8601), or null to clear the schedule
endDateNoNew end date (ISO 8601), or null to clear
isActiveNoActive state (prefer toggle_subscription_active instead)
accountIdNoNew account ID, or null to clear
frequencyNoNew billing frequency
startDateNoNew start date (ISO 8601)
categoryIdNoNew category ID, or null to clear
expectedAmountNoNew expected payment amount as a decimal (e.g. 9.99)
maxOccurrencesNoNew total number of payments, or null for an indefinite schedule
expectedCurrencyCodeNoNew currency code for expectedAmount

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the burden; it usefully discloses partial-update semantics and the required finance:write scope, plus a redirect for the isActive field. It omits other behavioral traits such as reversibility, error behavior on invalid type switches, or effects on linked transactions, so it is adequate rather than rich.

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 short sentences, all front-loaded: purpose, partial-update behavior, then the alternative and prerequisite. No filler or repetition.

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

Completeness4/5

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

For a 14-parameter mutation tool with no annotations and no output schema, the description covers the key items an agent needs: what it modifies, that updates are partial, the required scope, and the correct alternative for toggling. Missing only secondary details like return value or downstream effects, which is minor given the fully documented schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 14 parameters (including null-to-clear and installment constraints). The description's 'Only provided fields are changed' adds partial-update meaning, but no per-parameter detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb ('Update') and resource ('fields on an existing subscription or bill'), and adds that it is a partial update ('Only provided fields are changed'). It also names the sibling toggle_subscription_active as the tool to use for the one case it does not cover, so an agent can distinguish it without opening a schema.

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?

Gives an explicit when-not/alternative ('To toggle active state use toggle_subscription_active instead') and a prerequisite ('Requires finance:write scope'). It does not address when to prefer this over link_transactions_to_subscription or update_transaction, but the routing to the closest sibling is clear.

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

update_tagAInspect

Update an existing tag by ID. Use when the user wants to rename, recolor, or change the icon/description of a tag. Returns the updated tag.

NameRequiredDescriptionDefault
idYesID of the tag to update.
iconNoNew icon identifier, or null to clear it.
nameNoNew tag name (must be unique for this user).
colorNoNew hex color code for the tag (e.g. "#FF5733").
descriptionNoNew description, or null to clear it.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the entire behavioral burden. It discloses that this mutates an existing record and that it 'Returns the updated tag,' which is useful given no output schema. However, it omits permission/auth requirements, whether unmentioned fields are preserved or cleared (partial-update semantics), and the uniqueness failure mode of name.

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?

Three tight sentences with the purpose front-loaded and no filler. Each sentence adds something (operation, trigger conditions, return value), though the structure is plain rather than notably well-organized.

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 straightforward 5-parameter update with no annotations and no output schema, the description covers purpose, when-to-use, and the return value, which is the key gap output_schema would otherwise fill. It is only missing behavioral detail (auth, partial-update semantics) for a mutation 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 every parameter (id, name, color, icon, description) is already documented by the schema with formats and null semantics. The description only restates which fields are updatable (rename/recolor/icon/description) and adds no format or edge-case detail beyond the schema, so the baseline 3 applies.

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?

States a specific verb and resource ('Update an existing tag by ID'), so an agent immediately knows the operation. It does not explicitly differentiate itself from neighbors like create_tag, delete_tag, or update_category, but the resource noun makes the target 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?

'Use when the user wants to rename, recolor, or change the icon/description of a tag' gives clear, concrete trigger conditions. It stops short of stating when-not to use it or pointing to an alternative (e.g. delete_tag, assign_tags_to_transaction), so it lands at a solid 4 rather than 5.

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

update_trackerAInspect

Update the name, date range, spending limit, or rules (categories, tags, auto-add) of an existing tracker. Only passed fields change; limitAmount null removes the limit. With rules on, every update re-checks all transactions against them. Lines are managed with create_tracker_line, update_tracker_line and delete_tracker_line. Changing smart-tracking fields or dates rescans the tracker and fails while a scan is already queued or running. Returns the updated tracker record.

NameRequiredDescriptionDefault
nameNoNew tracker name
tagIdsNoReplace the rule tags
endDateNoNew end date (ISO 8601)
aiEnabledNoTurn smart tracking on or off. Owner only; enabling needs a description and a start date (already saved or passed here)
startDateNoNew start date (ISO 8601)
trackerIdYesID of the tracker to update
categoryIdsNoReplace the rule categories; parent IDs include their children
limitAmountNoNew spending limit as a decimal amount in the user's base currency (e.g. 500.00). Pass null to remove the limit
rulesCleanupNoRemove rule-added transactions that stop matching the rules
rulesEnabledNoAuto-add the user's transactions in the date range matching the rule categories or tags
aiDescriptionNoPlain-language description of what belongs in the tracker (max 500 chars). Owner only; null clears it
aiPreWindowDaysNoDays before startDate the AI also scans. One of 0, 14, 30, 60, 90, 180. Owner only

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses partial-update semantics ('Only passed fields change'), that limitAmount null removes the limit, that every update re-checks all transactions when rules are on, and that date/smart-field changes trigger a rescan that can fail. It also states it returns the updated record. It omits permission requirements (owner-only) that appear only in schema descriptions, but the mutation and side-effect behavior is well covered.

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?

Front-loaded with the primary action and scoping, then terse sentences covering partial-update semantics, side effects, line-tool routing, and the rescan failure condition. Every sentence carries functional information; it is slightly dense but not padded.

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 12-parameter mutation tool with no annotations and no output schema, the description covers the key operational risks (rescans, re-checks, failure while scanning) and states the return value. Permission details live in the schema, so an agent has enough to call this correctly; only per-field nuance depends on schema reading.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds cross-parameter meaning beyond the schema by explaining that only supplied fields change and that null on limitAmount removes the limit rather than erroring. It does not restate individual parameter constraints (enum, owner-only), which the schema already handles, so it stays a modest value-add over baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (Update) and resource (existing tracker) and enumerates the updatable facets: name, date range, spending limit, rules. It also explicitly demarcates scope by naming create_tracker_line/update_tracker_line/delete_tracker_line as the tools for line management, so an agent can distinguish this from sibling tracker tools without reading schemas.

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?

Routes line editing to the three line-specific siblings and warns that changes to smart-tracking fields or dates fail while a scan is queued or running, which is genuine when/when-not guidance. It does not explicitly compare against create_tracker or archive_tracker, but the mutation scope and failure condition are clearly stated.

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

update_tracker_lineAInspect

Update a tracker line: name, categories, limit, or position. Only passed fields change. A transaction lands in at most one line — the first line by position whose category set (expanded to children) contains its category; spending matching no line counts as "other". Requires manage access to the tracker. Returns the updated line.

NameRequiredDescriptionDefault
nameNoNew line name
lineIdYesID of the line to update
positionNoNew 0-based order. Earlier lines win when category sets overlap
trackerIdYesID of the tracker the line belongs to
categoryIdsNoReplace the categories the line covers; parents expand to their children
limitAmountNoNew line limit as a decimal amount in the tracker owner's base currency. Pass null to remove the limit

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations present, the description carries the full behavioral burden and does so well: it discloses partial-update semantics, the manage-access requirement, the return value, and non-obvious domain rules about category precedence and the 'other' fallback bucket. This is exactly the context an agent cannot get from the 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?

Front-loads the verb and resource, then layers semantics efficiently in four sentences. The middle sentence on transaction-to-line matching is somewhat expansive for an update tool but is justified because it explains how position and categoryIds actually behave.

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

Completeness4/5

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

No output schema exists, and the description closes that gap by stating 'Returns the updated line.' It covers auth, mutation scope, and matching semantics. It does not describe the shape of the returned line object, a minor remaining gap.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are already documented, including 'Earlier lines win when category sets overlap' and 'parents expand to their children'. The description restates the field list and matching rule without adding syntax or constraints beyond the schema, which matches the baseline 3 for high-coverage schemas.

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?

States a specific verb (update) plus resource (tracker line) and enumerates exactly which fields are mutable: name, categories, limit, position. This cleanly separates it from create_tracker_line and delete_tracker_line, which share the same resource noun.

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?

Gives clear operational context: 'Only passed fields change' establishes patch semantics, and 'Requires manage access to the tracker' states a prerequisite. It does not explicitly name alternatives such as update_tracker or create_tracker_line, so it falls short of full when/when-not routing.

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

update_transactionAInspect

Update an existing transaction by ID. All fields except id are optional — only provide what you want to change. Pass tagIds: null to clear all tags, or tagIds: [] to do the same. Pass splits: null to clear all splits. Pass payeeId: null to clear the payee. Use originalAmount + originalCurrencyCode to record what the purchase cost in its invoice currency when that differs from the account currency. Use paymentLegs to change which accounts a multi-account payment is paid from.

NameRequiredDescriptionDefault
idYesID of the transaction to update
noteNoNew note. Pass null to clear
timeNoNew date/time as ISO 8601 string
amountNoNew amount as an unsigned decimal (e.g. 12.50). Never negative: transactionType sets the direction
splitsNoReplace splits. Pass null or empty array to clear all splits
tagIdsNoReplace tags. Pass null or empty array to clear all tags
payeeIdNoPayee ID to assign. Pass null to clear
accountIdNoMove transaction to a different account
categoryIdNoNew category ID
paymentLegsNoReplace the payment's other accounts (same item shape as create_transaction). Keep a current part by passing its transactionId (see paymentParts in search_transactions), optionally with a new amount unless it is a linked part; an omitted created part is deleted, an omitted linked part becomes a standalone transaction again. Pass null or [] to make it a single-account transaction. Omit to leave the parts unchanged
paymentTypeNoPayment method used
originalAmountNoAmount in the currency the purchase was originally priced in (decimal), e.g. 66.42 for a PLN invoice paid from a UAH account. Informational only: never affects balances. Requires originalCurrencyCode. Pass null on both to clear
transferNatureNoTransfer type
transactionTypeNoChange whether this is income or expense
destinationAmountNoFor transfers: new amount received in destination account (decimal, greater than 0)
destinationAccountIdNoFor transfers: new destination account ID
originalCurrencyCodeNoISO 4217 code of originalAmount (e.g. "PLN"). Requires originalAmount. Cannot be combined with transfer fields
destinationTransactionIdNoFor transfers: link to an existing destination transaction

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden well: it discloses destructive clearing semantics (null or [] clears tags/splits, null clears payee), that originalAmount is informational and never affects balances, and that omitting created payment legs deletes them while omitting linked legs makes them standalone. It does not mention required permissions, reversibility, or atomicity, which are meaningful gaps for a mutation tool.

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 update contract, then moves through clearing behavior and special fields in a logical order. A few sentences are slightly redundant (tagIds null vs [] 'to do the same'), but nothing is wasted overall.

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

Completeness4/5

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

For an 18-parameter mutation tool with no annotations and no output schema, the description covers the most error-prone behaviors: partial updates, clearing sentinels, originalAmount pairing, and payment-leg replacement semantics. It omits permissions, error behavior, and guidance on when to use specialized siblings, which leaves some contextual gaps.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds patch semantics and explicitly distinguishes null from [] for tagIds and splits. It also frames originalAmount + originalCurrencyCode as an invoice-currency pair and paymentLegs as a multi-account payment modifier, adding useful meaning beyond the already-detailed 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 opens with a specific verb and resource: 'Update an existing transaction by ID.' That clearly scopes the tool to a single transaction and distinguishes it from bulk_update_transactions, though it never explicitly names any sibling alternative.

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 explains the partial-update contract ('only provide what you want to change') and governs sentinel values for clearing tags, splits, and payee. It does not say when to use bulk_update_transactions, split_transaction, or delete_split instead, so exclusions are absent.

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

update_transaction_automationAInspect

Update a transaction automation rule. Only provided fields change; conditions and actions are replaced wholesale, not merged. Setting isEnabled to true or changing conditions/actions re-validates every referenced category, tag, payee, and account and clears pausedReason, so this is how a rule paused by a deleted reference is repaired. Position is not changed here, use reorder_transaction_automations. Requires finance:write scope.

NameRequiredDescriptionDefault
idYesUUID of the automation
nameNoNew display name
actionsNoActions applied when the conditions match. 1-4 actions, each type at most once. - { "type": "set_category", "categoryId": "<uuid>" } - { "type": "add_tags", "tagIds": ["<uuid>"] } with 1-20 tag ids - { "type": "set_payee", "payeeId": "<uuid>" } - { "type": "set_note", "mode": "replace" | "append" | "prepend", "value": "<text, max 200 chars>" } Every referenced category, tag, and payee must belong to the user, otherwise the call is rejected.
isEnabledNoEnable or disable the rule
conditionsNoCondition tree: { match: "all" | "any", items: [...] }. 1-10 items, at most one transactionType item. Item shapes by field: - note | merchant (merchant is the bank-provided merchant/description text): { field, operator, value }. operator: contains_any | not_contains_any | starts_with_any | ends_with_any | equals_any | is_empty. value: 1-20 case-insensitive keywords, max 64 chars each; required unless operator is is_empty. Example: { "field": "merchant", "operator": "contains_any", "value": ["uber", "bolt"] } - payee | account | accountGroup | bankConnection: { field, operator, value }. operator: in | not_in. value: 1-20 UUIDs of that entity, all owned by the user. Example: { "field": "account", "operator": "in", "value": ["<accountId>"] } - amount: { field, operator, value: { min?, max? }, currency }. operator: gte | lte | between | equals. gte and equals take min only, lte takes max only, between takes both. Bounds are decimals (e.g. 12.50). currency: { "mode": "transaction" } compares in the currency of the transaction itself, { "mode": "base" } in the user base currency, { "mode": "specific", "code": "USD" } in a fixed currency. Example: { "field": "amount", "operator": "gte", "value": { "min": 100 }, "currency": { "mode": "base" } } - transactionType: { "field": "transactionType", "operator": "equals", "value": "income" | "expense" } - dayOfMonth: { "field": "dayOfMonth", "operator": "between", "value": { "min": 1, "max": 31 } }

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well: partial-update semantics ('only provided fields change'), the destructive replace-not-merge behavior on conditions/actions, the side effect of re-validating references and clearing pausedReason, and the auth requirement. These are exactly the traits an agent needs before mutating nested rule data.

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?

Four tight sentences, front-loaded with the update semantics and side effects, then the exclusion and the required scope. No filler or restatement of the tool name.

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 no-annotation mutation tool with deeply nested schemas and no output schema, the description supplies the missing behavioral context: merge behavior, re-validation side effects, pause-repair use case, scope, and the sibling for reordering. Nothing essential to correct invocation is absent.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description still adds value by clarifying merge vs replace semantics for conditions/actions, which the schema does not state. It does not, however, expand on id, name, or isEnabled beyond what the schema already documents.

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?

Opens with a specific verb+resource ('Update a transaction automation rule') and immediately names the sibling it is not for position changes (reorder_transaction_automations). An agent can distinguish it from the create/delete/reorder siblings without opening a schema.

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

Usage Guidelines5/5

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

Explicitly states when to use it ('this is how a rule paused by a deleted reference is repaired') and when not to ('Position is not changed here, use reorder_transaction_automations'), plus the required finance:write scope. Both an alternative and a triggering condition are given.

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

update_transaction_groupAInspect

Update the name or note of an existing transaction group. To change group membership use add_transactions_to_group or remove_transactions_from_group. Requires finance:write scope.

NameRequiredDescriptionDefault
idYesID of the transaction group to update
nameNoNew display name for the group
noteNoNew note for the group (pass null to clear)

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description must carry the load; it does disclose the required scope and the fact that only metadata (name/note) is touched, which prevents accidental membership changes. It does not state whether omitted fields stay unchanged, what errors look like for a bad UUID, or whether the call is idempotent, leaving some behavioral gaps for a mutation 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?

Three short sentences, front-loaded with the action and constrained scope, followed by the redirect and the permission requirement. Every sentence carries distinct information with no repetition.

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

Completeness4/5

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

For a small three-parameter mutation with a fully documented schema, the description covers purpose, exclusions, and authorization. It stops short of describing what comes back (no output schema exists) and whether a no-op body is rejected, but nothing essential to invoking it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, including the null-clears-the-note semantics and the UUID pattern, so the schema does the heavy lifting. The description reinforces which two fields are in play but adds no format or edge-case detail beyond that baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('Update ... an existing transaction group') and immediately bounds the mutation surface to name or note. That scoping distinguishes it from the many other transaction-group siblings such as add_transactions_to_group and delete_transaction_group.

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

Usage Guidelines5/5

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

Explicitly routes the agent elsewhere for the most likely confusion: 'To change group membership use add_transactions_to_group or remove_transactions_from_group.' It also names the precondition (finance:write scope), so the agent knows when the call is legal.

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

update_venture_dealAInspect

Update a venture deal. Only provided fields change. Once any event exists on the deal, the terms (principal, entryFee, entryFeePct, carryPct, hurdlePct, investmentDate, currencyCode) are locked — changing them would silently stale the carry math. Delete the events first if the user needs to fix terms. Status can be overridden manually (auto-progression normally derives it from events). Fee percentages are decimal fractions in [0,1].

NameRequiredDescriptionDefault
nameNoNew deal name
notesNoNew notes (or null to clear)
dealIdYesVenture deal ID (from list_venture_deals)
statusNoOverride the deal status manually
carryPctNoNew carry fraction in [0,1] (locked once events exist)
entryFeeNoNew entry fee amount (locked once events exist)
hurdlePctNoNew hurdle fraction in [0,1] (locked once events exist)
principalNoNew principal (locked once events exist)
mgmtFeePctNoNew management fee fraction in [0,1]
platformIdNoMove to a different platform (or null to clear)
spvSubtypeNoNew SPV subtype
entryFeePctNoNew entry fee fraction in [0,1] (locked once events exist)
currencyCodeNoNew currency code (locked once events exist)
targetCompanyNoNew target company name
investmentDateNoNew investment date (locked once events exist)
expectedExitDateNoNew expected exit date (or null to clear)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and discharges it well: it discloses the terms-lock once events exist, the stale-carry-math hazard, status auto-progression vs manual override, and the decimal-fraction unit convention. It omits auth/permission needs and reversibility, but the mutation hazards unique to this tool are clearly surfaced.

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?

Front-loads the operation and patch semantics, then layers the lock rule, the remedy, the status override, and the unit convention. Every sentence is load-bearing with no filler.

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 16-parameter mutation tool with no annotations and no output schema, the description covers the risky semantics an agent must know before calling. It leaves out error behavior on locked-field attempts and any permission requirements, but is otherwise 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?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: it enumerates which fields are locked once events exist (principal, entryFee, entryFeePct, carryPct, hurdlePct, investmentDate, currencyCode) and reinforces that fee percentages are fractions in [0,1]. This cross-field conditional constraint is not expressible in the flat 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 opening sentence states a specific verb ('Update') and resource ('venture deal'), and 'Only provided fields change' clarifies the patch semantics. It is distinguishable from update_venture_event / update_venture_platform by resource name, though it never explicitly contrasts itself with those siblings.

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

Usage Guidelines4/5

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

Gives actionable when-to-use context: 'Delete the events first if the user needs to fix terms' and 'Status can be overridden manually.' It explains the conditions under which locked fields become mutable, but does not name the alternative tool (update_venture_event) for editing events.

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

update_venture_eventAInspect

Update a venture event. Only provided fields change. eventDate must stay on/after the initial_investment date (and moving an initial_investment past existing later events is rejected).

Override semantics for gpCarryAmount / lpNetAmount: • Omit the field → no change. • Pass a string value → set the manual override; flips the corresponding *Overridden flag to true. • Pass null → currently treated the same as omitting (no semantic clear). To clear an existing override, use resetOverrides: true instead.

The event type cannot be changed — delete and recreate instead.

NameRequiredDescriptionDefault
notesNoNew notes (or null to clear)
eventIdYesVenture event ID (from list_venture_events)
navAfterNoNew post-event NAV (decimal string)
eventDateNoNew event date (YYYY-MM-DD)
grossAmountNoNew gross amount (decimal string)
lpNetAmountNoSet the manual lpNetAmount override; flips lpNetAmountOverridden=true. To clear, use resetOverrides=true.
quantityPctNoNew partial-exit quantity fraction in [0,1]
gpCarryAmountNoSet the manual gpCarry override; flips gpCarryOverridden=true. To clear, use resetOverrides=true.
resetOverridesNoWhen true, clears both override flags and re-computes carry from deal terms.

TDQS

A4.2/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and delivers: partial-update semantics, the eventDate constraint tied to initial_investment, rejection of retroactive moves, the override tri-state behavior including the non-obvious fact that null equals omitting, and that resetOverrides recomputes carry from deal terms. This is exactly the non-schema behavior an agent needs.

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

Conciseness4/5

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

Front-loaded with the core operation and constraints, then a well-structured bullet block for the override rules. Every sentence carries real information; the formatting is slightly heavy but not padded.

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 9-parameter mutation tool with no annotations and no output schema, the description covers update semantics, validation constraints, and the override/reset behavior thoroughly. Gaps are minor: no note on permissions or on what the response returns, though the latter is not strictly required.

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 exceeds it by explaining the override semantics of gpCarryAmount/lpNetAmount (what flips which flag), the no-op nature of null, and what resetOverrides actually does. It does not, however, clarify navAfter/grossAmount/quantityPct beyond the schema text.

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?

States a specific verb+resource ("Update a venture event") and immediately scopes it with partial-update semantics ("Only provided fields change"). It does not name a sibling tool for comparison, and the create/delete counterparts must be inferred from the mention of "delete and recreate".

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?

Gives concrete routing guidance: event type cannot be changed, so delete and recreate instead; and to clear an override use resetOverrides rather than null. It does not explicitly name delete_venture_event or create_venture_event as the alternatives, but the when-to-use/when-not logic is clear.

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

update_venture_platformAInspect

Update an existing venture platform's name, website, description, or default fees. Only provided fields change. Updating default fees does NOT retroactively change fees on existing deals — those are snapshotted at deal creation. Fee fractions are decimals in [0,1].

NameRequiredDescriptionDefault
nameNoNew platform name (must be unique for this user)
websiteNoNew website URL (pass null to clear)
platformIdYesVenture platform ID (from list_venture_platforms)
descriptionNoNew description (pass null to clear)
defaultCarryPctNoNew default carry as a decimal fraction in [0,1] (e.g. 0.2 for 20%).
defaultHurdlePctNoNew default hurdle rate as a decimal fraction in [0,1].
defaultMgmtFeePctNoNew default management fee as a decimal fraction in [0,1].
defaultEntryFeePctNoNew default entry fee as a decimal fraction in [0,1] (e.g. 0.085 for 8.5%).

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does add real behavioral value: it discloses partial-update semantics and, importantly, that changing default fees is NOT retroactive because existing deals snapshot their fees. It does not cover auth/permission needs, uniqueness failure behavior, or the 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?

Four tightly packed sentences with no filler; the mutable-field list, patch semantics, and the critical fee-snapshot caveat are front-loaded. Every sentence earns its place.

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

Completeness4/5

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

For a mutation tool with no annotations and no output schema but full schema coverage, the description covers the essential behavioral caveats. Remaining gaps (permissions, name-collision errors, return value) are modest given the rich schema.

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

Parameters3/5

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

Schema description coverage is 100%, so all 8 parameters are already documented, including the [0,1] fraction semantics and null-clearing for website/description. The description's 'Fee fractions are decimals in [0,1]' merely restates schema content, so the baseline of 3 applies.

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?

Specific verb+resource ('Update an existing venture platform') with an enumeration of the mutable fields (name, website, description, default fees). An agent can distinguish it from update_venture_deal/update_venture_event by resource, though no sibling is named explicitly.

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?

'Only provided fields change' clarifies patch semantics, which implicitly tells the agent it can send a subset of fields. However, there is no explicit when-to-use guidance versus alternatives (e.g. create_venture_platform, delete_venture_platform) and no stated prerequisites or permissions.

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. 2 tool updates
    • Changedcreate_transaction3 fields changed
      • addedInput schema / properties / paymentLegs
        Added value: +{
        +  "description": "Pay this income/expense from up to 4 more accounts. Each item is either { accountId, amount } to create a part on another account, or { transactionId } to link an existing transaction as a part (its amount stays). amount is in that account's currency; when it differs from this transaction's currency also pass paymentAmount, the part's value in this transaction's currency. Not allowed for transfers, refunds, planned or category-split transactions",
        +  "items": {
        +    "anyOf": [
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "amount": {
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          },
        +          "paymentAmount": {
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          },
        +          "transactionId": {
        +            "format": "uuid",
        +            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "transactionId"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "accountId": {
        +            "format": "uuid",
        +            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +            "type": "string"
        +          },
        +          "amount": {
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          },
        +          "paymentAmount": {
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "accountId",
        +          "amount"
        +        ],
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  "maxItems": 4,
        +  "type": "array"
        +}
      • changedInput schema / properties / paymentType / description
        Previous value: -"Payment method used"New value: +"Payment method used. Defaults to the account's default payment type, or bankTransfer"
      • changedInput schema / required
        Previous value: -[
        -  "accountId",
        -  "amount",
        -  "transactionType",
        -  "paymentType",
        -  "transferNature"
        -]New value: +[
        +  "accountId",
        +  "amount",
        +  "transactionType",
        +  "transferNature"
        +]
    • Changedupdate_transaction1 field changed
      • addedInput schema / properties / paymentLegs
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "amount": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "paymentAmount": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "transactionId": {
        +                "format": "uuid",
        +                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "transactionId"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "accountId": {
        +                "format": "uuid",
        +                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +                "type": "string"
        +              },
        +              "amount": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "paymentAmount": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "accountId",
        +              "amount"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      },
        +      "maxItems": 4,
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Replace the payment's other accounts (same item shape as create_transaction). Keep a current part by passing its transactionId (see paymentParts in search_transactions), optionally with a new amount unless it is a linked part; an omitted created part is deleted, an omitted linked part becomes a standalone transaction again. Pass null or [] to make it a single-account transaction. Omit to leave the parts unchanged"
        +}
  2. 7 tool updates
    • Changedadjust_account_balance1 field changed
      • addedInput schema / properties / note / maxLength
        Added value: +1000
    • Changedbulk_update_transactions1 field changed
      • addedInput schema / properties / note / maxLength
        Added value: +1000
    • Changedcreate_transaction2 fields changed
      • addedInput schema / properties / note / maxLength
        Added value: +1000
      • changedInput schema / properties / splits / items / properties / note / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 100,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcreate_transaction_group1 field changed
      • addedInput schema / properties / note / maxLength
        Added value: +500
    • Changedsplit_transaction1 field changed
      • changedInput schema / properties / splits / items / properties / note / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 100,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedupdate_transaction2 fields changed
      • changedInput schema / properties / note / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 1000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / splits / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "properties": {
        -        "amount": {
        -          "description": "Amount for this split portion (decimal, greater than 0)",
        -          "exclusiveMinimum": 0,
        -          "type": "number"
        -        },
        -        "categoryId": {
        -          "description": "Category ID for this split portion",
        -          "format": "uuid",
        -          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        -          "type": "string"
        -        },
        -        "note": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Optional note for this split"
        -        }
        -      },
        -      "required": [
        -        "categoryId",
        -        "amount"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "properties": {
        +        "amount": {
        +          "description": "Amount for this split portion (decimal, greater than 0)",
        +          "exclusiveMinimum": 0,
        +          "type": "number"
        +        },
        +        "categoryId": {
        +          "description": "Category ID for this split portion",
        +          "format": "uuid",
        +          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +          "type": "string"
        +        },
        +        "note": {
        +          "anyOf": [
        +            {
        +              "maxLength": 100,
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Optional note for this split"
        +        }
        +      },
        +      "required": [
        +        "categoryId",
        +        "amount"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedupdate_transaction_group1 field changed
      • changedInput schema / properties / note / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 500,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  3. 3 tool updates
    • Changedcreate_tracker7 fields changed
      • changedInput schema / properties / aiEnabled / description
        Previous value: -"Turn on smart tracking: an AI scans the date range and links or suggests matching transactions. Manual trackers only; requires aiDescription and startDate"New value: +"Turn on smart tracking: an AI scans the date range and links or suggests matching transactions. Requires aiDescription and startDate"
      • removedInput schema / properties / autoInclude
        Removed value: -{
        -  "description": "Auto-include transactions in the date range when creating (manual trackers only)",
        -  "type": "boolean"
        -}
      • changedInput schema / properties / categoryIds / description
        Previous value: -"Category IDs to link (only used when type is \"category\")"New value: +"Rule categories; parent IDs include their children"
      • addedInput schema / properties / rulesCleanup
        Added value: +{
        +  "description": "Remove rule-added transactions that stop matching the rules. Default: true",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / rulesEnabled
        Added value: +{
        +  "description": "Auto-add the user's transactions in the date range matching any of categoryIds or tagIds. Needs at least one of them. Default: false",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / tagIds
        Added value: +{
        +  "description": "Rule tags",
        +  "items": {
        +    "format": "uuid",
        +    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / type
        Removed value: -{
        -  "description": "Tracker type: manual (transactions linked explicitly) or category (auto-tracks by category). Default: manual",
        -  "enum": [
        -    "manual",
        -    "category"
        -  ],
        -  "type": "string"
        -}
    • Changedcreate_tracker_line1 field changed
      • changedInput schema / properties / categoryIds / description
        Previous value: -"Category IDs the line covers; parents expand to their children. On a category tracker they must be categories the tracker tracks. Categories resolve against the tracker owner's tree."New value: +"Category IDs the line covers; parents expand to their children. Categories resolve against the tracker owner's tree."
    • Changedupdate_tracker6 fields changed
      • changedInput schema / properties / aiEnabled / description
        Previous value: -"Turn smart tracking on or off. Owner only; manual trackers only; enabling needs a description and a start date (already saved or passed here)"New value: +"Turn smart tracking on or off. Owner only; enabling needs a description and a start date (already saved or passed here)"
      • removedInput schema / properties / autoInclude
        Removed value: -{
        -  "description": "Whether to auto-include transactions in the date range",
        -  "type": "boolean"
        -}
      • changedInput schema / properties / categoryIds / description
        Previous value: -"Replace the linked category IDs (only applies to category-type trackers)"New value: +"Replace the rule categories; parent IDs include their children"
      • addedInput schema / properties / rulesCleanup
        Added value: +{
        +  "description": "Remove rule-added transactions that stop matching the rules",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / rulesEnabled
        Added value: +{
        +  "description": "Auto-add the user's transactions in the date range matching the rule categories or tags",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / tagIds
        Added value: +{
        +  "description": "Replace the rule tags",
        +  "items": {
        +    "format": "uuid",
        +    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  4. 4 tool updates
    • Addedcreate_goal
    • Addeddelete_goal
    • Addedget_goals
    • Addedupdate_goal
  5. 28 tool updates
    • Removedaccept_budget_suggestions
    • Addedaccept_tracker_suggestions
    • Removedadd_transactions_to_budget
    • Addedadd_transactions_to_tracker
    • Removedarchive_budget
    • Addedarchive_tracker
    • Removedcreate_budget
    • Removedcreate_budget_line
    • Addedcreate_tracker
    • Addedcreate_tracker_line
    • Removeddelete_budget
    • Removeddelete_budget_line
    • Addeddelete_tracker
    • Addeddelete_tracker_line
    • Removedget_budget_spending_stats
    • Removedget_budgets
    • Addedget_tracker_spending_stats
    • Addedget_trackers
    • Removedlist_budget_suggestions
    • Addedlist_tracker_suggestions
    • Removedreject_budget_suggestions
    • Addedreject_tracker_suggestions
    • Removedremove_transactions_from_budget
    • Addedremove_transactions_from_tracker
    • Removedupdate_budget
    • Removedupdate_budget_line
    • Addedupdate_tracker
    • Addedupdate_tracker_line
  6. 11 tool updates
    • Addedaccept_budget_suggestions
    • Changedbulk_update_transactions1 field changed
      • addedInput schema / properties / payeeId
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "uuid",
        +      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Payee ID to assign to all transactions. Pass null to clear"
        +}
    • Changedcreate_budget3 fields changed
      • addedInput schema / properties / aiDescription
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 500,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Plain-language description of what belongs in the tracker (max 500 chars), e.g. \"Trip to Lisbon: flights, hotels, food\""
        +}
      • addedInput schema / properties / aiEnabled
        Added value: +{
        +  "description": "Turn on smart tracking: an AI scans the date range and links or suggests matching transactions. Manual trackers only; requires aiDescription and startDate",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / aiPreWindowDays
        Added value: +{
        +  "description": "Days before startDate the AI also scans, for things booked in advance. One of 0, 14, 30, 60, 90, 180. Default: 60",
        +  "enum": [
        +    0,
        +    14,
        +    30,
        +    60,
        +    90,
        +    180
        +  ],
        +  "type": "number"
        +}
    • Addedcreate_budget_line
    • Changedcreate_transaction1 field changed
      • addedInput schema / properties / payeeId
        Added value: +{
        +  "description": "Payee ID to assign",
        +  "format": "uuid",
        +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +  "type": "string"
        +}
    • Addeddelete_budget_line
    • Addedlist_budget_suggestions
    • Addedreject_budget_suggestions
    • Changedupdate_budget6 fields changed
      • addedInput schema / properties / aiDescription
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 500,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Plain-language description of what belongs in the tracker (max 500 chars). Owner only; null clears it"
        +}
      • addedInput schema / properties / aiEnabled
        Added value: +{
        +  "description": "Turn smart tracking on or off. Owner only; manual trackers only; enabling needs a description and a start date (already saved or passed here)",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / aiPreWindowDays
        Added value: +{
        +  "description": "Days before startDate the AI also scans. One of 0, 14, 30, 60, 90, 180. Owner only",
        +  "enum": [
        +    0,
        +    14,
        +    30,
        +    60,
        +    90,
        +    180
        +  ],
        +  "type": "number"
        +}
      • addedInput schema / properties / limitAmount / anyOf
        Added value: +[
        +  {
        +    "exclusiveMinimum": 0,
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / limitAmount / description
        Previous value: -"New spending limit as a decimal amount in the user's base currency (e.g. 500.00)"New value: +"New spending limit as a decimal amount in the user's base currency (e.g. 500.00). Pass null to remove the limit"
      • removedInput schema / properties / limitAmount / type
        Removed value: -"number"
    • Addedupdate_budget_line
    • Changedupdate_transaction1 field changed
      • addedInput schema / properties / payeeId
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "uuid",
        +      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Payee ID to assign. Pass null to clear"
        +}
  7. 8 tool updates
    • Changedadd_transactions_to_budget2 fields changed
      • changedInput schema / properties / budgetId / description
        Previous value: -"ID of the budget to link transactions to"New value: +"ID of the tracker to link transactions to"
      • changedInput schema / properties / transactionIds / description
        Previous value: -"IDs of the transactions to add to the budget"New value: +"IDs of the transactions to add to the tracker"
    • Changedarchive_budget2 fields changed
      • changedInput schema / properties / budgetId / description
        Previous value: -"ID of the budget to archive or unarchive"New value: +"ID of the tracker to archive or unarchive"
      • changedInput schema / properties / isArchived / description
        Previous value: -"true to archive the budget, false to restore it to active"New value: +"true to archive the tracker, false to restore it to active"
    • Changedcreate_budget6 fields changed
      • changedInput schema / properties / autoInclude / description
        Previous value: -"Auto-include transactions in the date range when creating (manual budgets only)"New value: +"Auto-include transactions in the date range when creating (manual trackers only)"
      • changedInput schema / properties / endDate / description
        Previous value: -"Budget end date (ISO 8601)"New value: +"Tracker end date (ISO 8601)"
      • changedInput schema / properties / name / description
        Previous value: -"Budget name"New value: +"Tracker name"
      • changedInput schema / properties / startDate / description
        Previous value: -"Budget start date (ISO 8601)"New value: +"Tracker start date (ISO 8601)"
      • changedInput schema / properties / status / description
        Previous value: -"Budget status (default: active)"New value: +"Tracker status (default: active)"
      • changedInput schema / properties / type / description
        Previous value: -"Budget type: manual (transactions linked explicitly) or category (auto-tracks by category). Default: manual"New value: +"Tracker type: manual (transactions linked explicitly) or category (auto-tracks by category). Default: manual"
    • Changeddelete_budget1 field changed
      • changedInput schema / properties / budgetId / description
        Previous value: -"ID of the budget to delete"New value: +"ID of the tracker to delete"
    • Changedget_budget_spending_stats1 field changed
      • changedInput schema / properties / budgetId / description
        Previous value: -"ID of the budget to retrieve spending stats for"New value: +"ID of the tracker to retrieve spending stats for"
    • Changedget_budgets1 field changed
      • changedInput schema / properties / status / description
        Previous value: -"Filter by budget status. Default: active"New value: +"Filter by tracker status. Default: active"
    • Changedremove_transactions_from_budget2 fields changed
      • changedInput schema / properties / budgetId / description
        Previous value: -"ID of the budget to unlink transactions from"New value: +"ID of the tracker to unlink transactions from"
      • changedInput schema / properties / transactionIds / description
        Previous value: -"IDs of the transactions to remove from the budget"New value: +"IDs of the transactions to remove from the tracker"
    • Changedupdate_budget3 fields changed
      • changedInput schema / properties / budgetId / description
        Previous value: -"ID of the budget to update"New value: +"ID of the tracker to update"
      • changedInput schema / properties / categoryIds / description
        Previous value: -"Replace the linked category IDs (only applies to category-type budgets)"New value: +"Replace the linked category IDs (only applies to category-type trackers)"
      • changedInput schema / properties / name / description
        Previous value: -"New budget name"New value: +"New tracker name"
  8. 3 tool updates
    • Changedcreate_transaction6 fields changed
      • changedInput schema / properties / amount / description
        Previous value: -"Transaction amount as a decimal (e.g. 12.50)"New value: +"Transaction amount as an unsigned decimal (e.g. 12.50). Never negative: transactionType sets the direction"
      • addedInput schema / properties / amount / minimum
        Added value: +0
      • changedInput schema / properties / destinationAmount / description
        Previous value: -"For transfers: amount received in destination account (decimal)"New value: +"For transfers: amount received in destination account (decimal, greater than 0)"
      • addedInput schema / properties / destinationAmount / exclusiveMinimum
        Added value: +0
      • changedInput schema / properties / splits / items / properties / amount / description
        Previous value: -"Amount for this split portion (decimal)"New value: +"Amount for this split portion (decimal, greater than 0)"
      • addedInput schema / properties / splits / items / properties / amount / exclusiveMinimum
        Added value: +0
    • Changedsplit_transaction2 fields changed
      • changedInput schema / properties / splits / items / properties / amount / description
        Previous value: -"Amount for this split portion (decimal)"New value: +"Amount for this split portion (decimal, greater than 0)"
      • addedInput schema / properties / splits / items / properties / amount / exclusiveMinimum
        Added value: +0
    • Changedupdate_transaction5 fields changed
      • changedInput schema / properties / amount / description
        Previous value: -"New amount as a decimal (e.g. 12.50)"New value: +"New amount as an unsigned decimal (e.g. 12.50). Never negative: transactionType sets the direction"
      • addedInput schema / properties / amount / minimum
        Added value: +0
      • changedInput schema / properties / destinationAmount / description
        Previous value: -"For transfers: new amount received in destination account (decimal)"New value: +"For transfers: new amount received in destination account (decimal, greater than 0)"
      • addedInput schema / properties / destinationAmount / exclusiveMinimum
        Added value: +0
      • changedInput schema / properties / splits / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "properties": {
        -        "amount": {
        -          "description": "Amount for this split portion (decimal)",
        -          "type": "number"
        -        },
        -        "categoryId": {
        -          "description": "Category ID for this split portion",
        -          "format": "uuid",
        -          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        -          "type": "string"
        -        },
        -        "note": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Optional note for this split"
        -        }
        -      },
        -      "required": [
        -        "categoryId",
        -        "amount"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "properties": {
        +        "amount": {
        +          "description": "Amount for this split portion (decimal, greater than 0)",
        +          "exclusiveMinimum": 0,
        +          "type": "number"
        +        },
        +        "categoryId": {
        +          "description": "Category ID for this split portion",
        +          "format": "uuid",
        +          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +          "type": "string"
        +        },
        +        "note": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Optional note for this split"
        +        }
        +      },
        +      "required": [
        +        "categoryId",
        +        "amount"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  9. 103 tool updates
    • First observedadd_transactions_to_budget
    • First observedadd_transactions_to_group
    • First observedadjust_account_balance
    • First observedarchive_account
    • First observedarchive_budget
    • First observedassign_tags_to_transaction
    • First observedbulk_update_transactions
    • First observedcreate_attachment_upload_url
    • First observedcreate_budget
    • First observedcreate_category
    • First observedcreate_investment_transaction
    • First observedcreate_payee
    • First observedcreate_portfolio
    • First observedcreate_portfolio_cash_transaction
    • First observedcreate_subscription
    • First observedcreate_tag
    • First observedcreate_transaction
    • First observedcreate_transaction_automation
    • First observedcreate_transaction_group
    • First observedcreate_venture_deal
    • First observedcreate_venture_event
    • First observedcreate_venture_platform
    • First observeddelete_budget
    • First observeddelete_category
    • First observeddelete_investment_transaction
    • First observeddelete_payee
    • First observeddelete_portfolio
    • First observeddelete_split
    • First observeddelete_subscription
    • First observeddelete_tag
    • First observeddelete_transaction
    • First observeddelete_transaction_automation
    • First observeddelete_transaction_group
    • First observeddelete_venture_deal
    • First observeddelete_venture_event
    • First observeddelete_venture_platform
    • First observeddetect_subscription_candidates
    • First observeddismiss_subscription_candidate
    • First observedget_accounts
    • First observedget_balance_history
    • First observedget_budget_spending_stats
    • First observedget_budgets
    • First observedget_cash_flow
    • First observedget_categories
    • First observedget_expenses_for_period
    • First observedget_investment_transactions
    • First observedget_payee
    • First observedget_payees
    • First observedget_portfolio_balances
    • First observedget_portfolio_holdings
    • First observedget_portfolio_summary
    • First observedget_portfolios
    • First observedget_spending_by_categories
    • First observedget_subscription_by_id
    • First observedget_subscriptions
    • First observedget_subscriptions_summary
    • First observedget_tags
    • First observedget_transaction_automations
    • First observedget_transaction_groups
    • First observedget_upcoming_subscription_payments
    • First observedget_user_profile
    • First observedget_venture_deal
    • First observedget_venture_deal_metrics
    • First observedget_venture_event
    • First observedget_venture_platform
    • First observedlink_refund
    • First observedlink_transaction_to_portfolio
    • First observedlink_transactions_to_subscription
    • First observedlink_transfer
    • First observedlist_portfolio_transfers
    • First observedlist_subscription_candidates
    • First observedlist_venture_deals
    • First observedlist_venture_events
    • First observedlist_venture_platforms
    • First observedmerge_payees
    • First observedpreview_transaction_automation
    • First observedremove_tags_from_transaction
    • First observedremove_transactions_from_budget
    • First observedremove_transactions_from_group
    • First observedreorder_transaction_automations
    • First observedsearch_securities
    • First observedsearch_transactions
    • First observedsplit_transaction
    • First observedtoggle_subscription_active
    • First observedtransfer_account_to_portfolio
    • First observedtransfer_portfolio_to_account
    • First observedunlink_refund
    • First observedunlink_transaction_from_portfolio
    • First observedunlink_transactions_from_subscription
    • First observedunlink_transfer
    • First observedupdate_budget
    • First observedupdate_category
    • First observedupdate_investment_transaction
    • First observedupdate_payee
    • First observedupdate_portfolio
    • First observedupdate_subscription
    • First observedupdate_tag
    • First observedupdate_transaction
    • First observedupdate_transaction_automation
    • First observedupdate_transaction_group
    • First observedupdate_venture_deal
    • First observedupdate_venture_event
    • First observedupdate_venture_platform

Publisher details

Operator
Individual
Operator website
Not applicable
Vendor relationship
Not applicable
Trust center
Not applicable
Restrictions
Cloud is under subscription, self-hosted is free · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables users to read and analyze personal financial data and perform operations such as managing transactions, accounts, categories, budgets, and reminders through the official API.
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    open-source personal finance app with a first-party MCP server. 91 HTTP tools (OAuth 2.1 + DCR) and 87 stdio tools cover transactions, budgets, accounts, portfolio analytics, FX conversion, loans, subscriptions, goals, importers, and rules. Users self-host with Docker + PostgreSQL or use the managed cloud
    89
    25
    AGPL 3.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    Exposes personal-finance tools like accounts, transactions, spending analysis, budgets, bills, reminders, portfolio, and goals via MCP, enabling any MCP client to query financial data.
    -
  • A
    license
    B
    quality
    C
    maintenance
    Enables local-first personal finance management through deterministic tools for importing, categorizing, and analyzing bank transactions.
    36
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.