Skip to main content
Glama
chrisguidry
by chrisguidry

you-need-an-mcp

An MCP server that lets an LLM read and manage a YNAB plan. It can answer questions about accounts, categories, spending, and scheduled transactions, and it can enter and edit transactions, assign and move money, and manage scheduled transactions. YNAB now calls budgets "plans", and so does this server.

Setup

1. Install Dependencies

uv sync

2. Get YNAB Access Token

To use this MCP server, you need a YNAB Personal Access Token:

  1. Log into your YNAB account at https://app.ynab.com

  2. Go to Account Settings (click your email in the top right corner)

  3. Click on Developer Settings in the left sidebar

  4. Click New Token

  5. Enter a token name (e.g., "MCP Server")

  6. Click Generate

  7. Copy the generated token (you won't be able to see it again)

3. Set Environment Variables

export YNAB_ACCESS_TOKEN=your_token_here

Set the plan ID used by all tools (required). It is the ID in the address of your plan in YNAB's web app: https://app.ynab.com/<plan-id>/....

export YNAB_PLAN=your_plan_id_here

To serve only the tools that read the plan, set YNAB_READ_ONLY to any non-empty value. The tools that change the plan are then not offered at all.

export YNAB_READ_ONLY=1

4. Run the Server

uv run python server.py

Windows / Managed Machines

If uvx or you-need-an-mcp.exe fails with Access is denied (os error 5), endpoint security may be blocking the generated console-script executable. Launch the server through the environment's python.exe instead.

For a source checkout, after installing dependencies with uv sync --locked, run these PowerShell commands from the repository directory:

$env:YNAB_ACCESS_TOKEN = "<your-token>"
$env:YNAB_PLAN = "<your-plan-id>"
& .\.venv\Scripts\python.exe -m server

For a persistent tool installation of a version with module-launch support (uv tool install git+https://github.com/chrisguidry/you-need-an-mcp.git), locate the interpreter using uv tool dir rather than assuming a fixed installation path:

$toolDirectory = uv tool dir
$python = Join-Path $toolDirectory "you-need-an-mcp\Scripts\python.exe"
& $python -I -m server

To register that installed environment with Claude Code, replace the placeholders with your configuration:

claude mcp add ynab --scope user `
  -e "YNAB_ACCESS_TOKEN=<your-token>" -e "YNAB_PLAN=<your-plan-id>" `
  -- $python -I -m server

The module launch runs the same MCP server as the console-script entry point. For installed tools, -I prevents an unrelated server.py in the current directory from shadowing the installed module. It requires an installed environment and permission to execute its interpreter. If endpoint security also prevents installation or interpreter execution, use your organization's approved setup process.

Related MCP server: YNAB MCP Server

Available Tools

Every tool is tagged read or write, and carries MCP annotations that tell a client whether it only reads, adds, changes, or deletes, so the client can ask you before a change. All amounts are in your plan's currency, not milliunits.

Plan and months

  • get_plan - The plan's name, the months it covers, and its currency format

  • get_plan_month - One month's income, assigned, activity, Ready to Assign, age of money, and categories

  • list_plan_months - Every month's totals, newest first

  • get_month_category - One category's amounts and target for a month

Accounts

  • list_accounts - Accounts with balances, optionally including closed ones

  • create_account - Add an account that you track by hand

Categories and assigning money

  • list_categories / list_category_groups - Categories by group, with this month's assigned, activity, available, and target

  • create_category, update_category - Add or change a category and its target

  • create_category_group, rename_category_group - Manage category groups

  • assign_money - Assign more to a category from Ready to Assign, or take some back

  • set_assigned - Set exactly what a category has assigned

  • move_money - Move assigned money from one category to another

  • list_money_movements - The history of money assigned and moved

Payees

  • list_payees, find_payee - Browse or search payees

  • create_payee, rename_payee - Manage payees

Transactions

  • list_transactions - Filter by account, category, payee, dates, amounts, unapproved or uncategorized status, and text

  • get_transaction - One transaction, with its splits

  • create_transactions - Enter spending, income, transfers, and splits

  • update_transactions - Approve, categorize, and fix transactions in bulk

  • delete_transaction - Delete a transaction

  • import_transactions - Import new transactions from linked banks now

Scheduled transactions

  • list_scheduled_transactions, get_scheduled_transaction - Upcoming bills and income

  • create_scheduled_transaction, update_scheduled_transaction, delete_scheduled_transaction - Manage schedules

  • enter_scheduled_transaction - Enter a scheduled transaction now, before its date, and move the schedule to its next date

YNAB's API cannot create or change split scheduled transactions, and it cannot attach receipts to transactions.

Pagination

Every listing tool takes limit and offset. Check pagination.has_more, and raise offset by limit to get the next page.

Security Note

Keep your YNAB access token secure and never commit it to version control. The token can read and change everything in your YNAB account. Use YNAB_READ_ONLY when you want the server to only read.

Available Tools

32 tools
assign_moneyAssign moneyA
Destructive

Assign more money to a category from Ready to Assign, or take some back.

This adds to what is already assigned: assigning 100 to a category with 250 assigned leaves 350 assigned. A negative amount returns money to Ready to Assign. Calling this twice assigns twice, so do not retry it blindly after an error; check the category with get_month_category first.

For categories with NEED targets that refill each month, the full target is usually assigned every month, whatever is available.

NameRequiredDescriptionDefault
monthNoWhich plan month (default: "current"): • "current": This calendar month • "last": The previous calendar month • "next": The next calendar month • A date: The month containing that date, such as 2024-03-01current
amountYesAmount in currency units to add to the assigned amount. Negative takes money back to Ready to Assign (required)
category_idYesCategory to assign to (required)

Output Schema

NameRequiredDescription
changesYesEach category that changed, in the order they changed

TDQS

A4.3/5.0
Behavior4/5

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

Corroborates and enriches the annotations (idempotentHint=false, destructiveHint=true) with a worked arithmetic example (100 onto 250 leaves 350) and a clear statement that repeated calls compound. It does not discuss permissions, reversibility of a mistaken assignment, or currency/precision handling, so it stops short of full 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?

The action and direction are front-loaded in sentence one, and the retry warning is well placed. The closing sentence about NEED targets is the weakest link – it is vague ('usually assigned every month, whatever is available') and adds bulk without a crisp rule.

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 annotations carrying the safety profile and an output schema present, the description covers the mutation's additive nature and its retry hazard, which is what an agent needs before calling it. It omits any mention of how it relates to set_assigned/move_money or what error conditions look like beyond the retry warning.

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 earns an extra point by clarifying delta semantics with a concrete stacked-assignment example and by pairing negative amounts with the Ready to Assign return path. The month parameter is left entirely to the schema.

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

Purpose5/5

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

The first sentence names a specific verb (assign) and resource (money to a category from Ready to Assign) and states both directions of the operation. 'This adds to what is already assigned' implicitly separates it from the set-based sibling set_assigned without needing 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 operational guidance: negative amounts reverse the flow, and it explicitly warns against blind retries after an error, pointing to get_month_category as the verification step. It does not explicitly compare against set_assigned or move_money, so the agent must infer the choice from the additive wording.

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

create_accountCreate accountA

Create an account that the user tracks by hand, such as cash or a new savings account. The account is not connected to a bank.

NameRequiredDescriptionDefault
nameYesAccount name (required)
typeYesAccount type: "checking", "savings", "cash", "creditCard", "otherAsset", or "otherLiability" (required)
balanceYesStarting balance in currency units. Use a negative balance for money owed on a credit card or liability (required)

Output Schema

NameRequiredDescription
idYesUnique account identifier
nameYesUser-defined account name
noteNoUser-defined account notes
typeYesAccount type. Common values: 'checking', 'savings', 'creditCard', 'cash', 'lineOfCredit', 'otherAsset', 'otherLiability', 'mortgage', 'autoLoan', 'studentLoan', 'personalLoan', 'medicalDebt', 'otherDebt'
closedYesWhether this account has been closed
balanceYesCurrent balance in currency units
on_budgetYesWhether this account's money is part of the plan
cleared_balanceYesBalance of cleared transactions in currency units
transfer_payee_idYesPayee to use on a transaction that transfers into this account
uncleared_balanceYesBalance of uncleared transactions in currency units
last_reconciled_atNoWhen the account was last reconciled
debt_escrow_amountsNoEscrow amounts by date for mortgage accounts. Keys are dates, values are escrow amounts in currency units
debt_interest_ratesNoInterest rates by date for debt accounts. Keys are dates, values are interest rates as decimals (e.g., 0.03375 for 3.375%)
direct_import_linkedNoWhether the account imports from a bank connection
debt_minimum_paymentsNoMinimum payment amounts by date for debt accounts. Keys are dates, values are payment amounts in currency units
direct_import_in_errorNoWhether the bank connection needs the user's attention

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the write/safety profile is covered. The description adds the meaningful behavioral point that the created account has no bank link, but says nothing about duplicate-name handling, whether the account can later be linked, or what a non-idempotent repeat call does.

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, no filler, and the key scope constraint ('tracked by hand') appears before the clarifying 'not connected to a bank.' Every sentence earns its place.

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

Completeness4/5

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

For a simple three-param creation tool with full schema coverage and an output schema, the description covers what is created and the manual-account scope. It is slightly thin on post-creation behavior (duplicates, visibility in list_accounts), but nothing essential to making the call 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 all three required parameters documented including the enum values for 'type' and the negative-balance convention for 'balance'. The description adds no parameter-level meaning 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?

The description gives a specific verb and resource ('Create an account') and immediately scopes it to manually tracked accounts like cash or savings, with the clarifying constraint 'not connected to a bank.' It does not reference any sibling tool (e.g. list_accounts) to sharpen the boundary, so it stops 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?

'Create an account that the user tracks by hand' plus 'not connected to a bank' effectively states the condition under which this tool applies and implicitly excludes synced bank accounts. No alternative tool or follow-up action (e.g. how to record transactions afterward) is named, so it is clear context rather than explicit alternatives.

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

create_categoryCreate categoryC

Create a category in a category group, optionally with a target.

NameRequiredDescriptionDefault
nameYesCategory name (required)
noteNoCategory note (optional)
target_dateNoDate the target amount should be reached, for a balance by a date. Cannot be combined with target_frequency (optional)
target_amountNoTarget amount in currency units. Setting it on a category with no target creates a monthly NEED target (optional)
target_frequencyNoMake a repeating NEED target of target_amount every "weekly", "monthly", or "yearly". Requires target_amount (optional)
category_group_idYesGroup to create the category in (required)
target_needs_whole_amountNoFor NEED targets, whether the whole target is needed every period (true) or the rollover counts toward it (false) (optional)

Output Schema

NameRequiredDescription
idYesUnique category identifier
nameYesCategory name
noteNoCategory notes
activityNoActivity this month (negative = spending)
assignedNoAmount assigned this month
internalNoWhether YNAB manages this category itself. 'Inflow: Ready to Assign' is internal: categorize income to it.
availableNoAmount available to spend, including rollover
target_dateNoDate the target should be met, for targets with a date
target_typeNoTarget type: NEED (needed for spending, refills each period), TB (have a balance), TBD (have a balance by a date), MF (fund monthly), DEBT (pay down a debt)
target_amountNoTarget amount
category_group_idYesCategory group ID
target_underfundedNoAmount still needed this month to stay on track
category_group_nameNoCategory group name
target_overall_leftNoAmount still needed to meet the target this period
target_percentage_completeNoHow much of the target is funded, as a percentage

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare it is a non-read-only, non-idempotent, non-destructive, closed-world write, so the safety profile is covered. The description adds nothing beyond that: no mention of uniqueness constraints on name, what happens if the group id is invalid, or the default behavior when target_amount is supplied without frequency (the schema notes a monthly NEED target is created).

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?

A single short sentence with no redundancy, but it is terse to the point of under-specification — the 'optionally with a target' clause is the only non-obvious content and it is left unexplored.

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?

An output schema exists and the input schema is fully described, so most information is available elsewhere. However, for a 7-parameter creation tool with no annotations covering validation or defaults, the description should do more than one sentence to be considered complete.

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

Parameters3/5

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

Schema description coverage is 100%, so all seven parameters are already documented in the schema, including the target_* interaction rules. The description only gestures at the optional target without adding format or interaction detail 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?

States a specific verb and resource ('Create a category') plus its containment ('in a category group') and the optional target aspect. It is distinguishable from list_categories, update_category, and create_category_group at a glance, though it doesn't 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 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 update_category (e.g. category must not already exist) or create_category_group. Nothing about prerequisites such as needing a valid existing category_group_id, and no exclusions are stated.

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

create_category_groupCreate category groupB

Create an empty category group.

NameRequiredDescriptionDefault
nameYesGroup name, at most 50 characters (required)

Output Schema

NameRequiredDescription
idYesUnique category group identifier
nameYesCategory group name

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare this is a non-read-only, non-destructive, non-idempotent, closed-world mutation, so the safety profile is covered. The description adds only the 'empty' detail — nothing about name uniqueness, error behavior on duplicates, or limits beyond the schema's 50-character cap.

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 short sentence with the verb front-loaded and no filler. There is no wasted text and nothing is buried.

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?

An output schema exists, so return values need no explanation, and annotations cover the mutation profile. However, for a create operation the description leaves open practical questions (uniqueness of name, where the group surfaces) that a slightly longer description could close.

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 'name' parameter is documented with a 50-character limit, so the schema carries the semantics. The description contributes nothing about the name beyond what is already structured; 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 ... category group'), and the qualifier 'empty' signals that no categories are included at creation. It does not contrast with siblings like create_category or rename_category_group, but the action 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 guidance on when to use this versus create_category (which presumably also needs a group) or how it fits with list_category_groups. The agent must infer that a group must exist before categories can be assigned to it.

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

create_payeeCreate payeeA

Create a payee.

A new transaction can also create its payee by giving payee_name, so this is only needed to set up a payee before any transaction uses it.

NameRequiredDescriptionDefault
nameYesPayee name, at most 500 characters (required)

Output Schema

NameRequiredDescription
idYesUnique payee identifier
nameYesPayee name
transfer_account_idNoFor a transfer payee, the account that transfers to it go into

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), so the bar is lower. The description adds the useful workflow fact that transactions can self-create payees, but says nothing about duplicate handling, whether a name collision errors or succeeds, or what the output contains – relevant gaps for a non-idempotent write.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and followed immediately by the disambiguation. Nothing is repeated from the schema or annotations.

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?

A one-parameter create tool with an output schema and full annotation coverage needs little more: the agent knows what it does, when it is unnecessary, and that the result is returned in a defined shape. Nothing required 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 only parameter (name) is documented with its 500-character limit and required status. The description adds no parameter-level meaning 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 the specific verb and resource ('Create a payee') and contrasts it with the implicit alternative of letting a transaction auto-create the payee via payee_name, so an agent can tell it apart from the transaction-creation path without reading the schema. It stops short of naming the concrete sibling tool by name, keeping it at a 4.

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 explicit when-to-use guidance ('only needed to set up a payee before any transaction uses it') and implicitly says when not to use it. It does not address what happens if the payee already exists, which matters given idempotentHint=false.

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

create_scheduled_transactionCreate scheduled transactionC

Schedule a transaction: a bill, a paycheck, or a regular transfer.

NameRequiredDescriptionDefault
dateYesFirst date it happens: in the future, at most 5 years out (required)
memoNoMemo, at most 500 characters (optional)
amountYesAmount in currency units: negative for spending, positive for income (required)
payee_idNoPayee, by ID (optional)
frequencyYesHow often it repeats, or "never" for once (required)
account_idYesAccount it happens in (required)
flag_colorNoFlag color (optional)
payee_nameNoPayee by name, when payee_id is not given. YNAB uses the payee with this name, or creates it (optional)
category_idNoCategory. Credit card payment categories are not allowed (optional)
transfer_account_idNoFor a transfer, the other account. Use instead of a payee (optional)

Output Schema

NameRequiredDescription
idYesUnique scheduled transaction identifier
flagNoFlag as 'Name (Color)' format
memoNoUser-entered memo
amountYesAmount in currency units (negative = spending, positive = income)
payee_idNoPayee ID
date_nextYesNext occurrence date
frequencyYesHow often it happens
account_idYesAccount ID
date_firstYesFirst occurrence date
payee_nameNoPayee name
category_idNoCategory ID
account_nameNoAccount name
category_nameNoCategory name
subtransactionsNoThe parts of a split scheduled transaction
transfer_account_idNoFor a transfer, the other account

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare this is a non-read-only, non-idempotent, non-destructive, closed-world mutation, so the safety profile is covered. The description adds nothing beyond that: it does not say whether scheduling creates future transactions automatically, whether duplicates are created on repeat calls (relevant given idempotentHint=false), or what the required permissions are.

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 with no filler and the core purpose front-loaded. It is efficient, though its brevity borders on under-specification rather than tightness.

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?

An output schema exists and parameters are fully documented, so the description needn't cover return values. However, for a ten-parameter mutation that establishes a recurring schedule, the description omits the one thing structure cannot convey: how scheduled transactions behave (auto-creation of future entries, effect of the date/frequency pairing).

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 all ten properties carry meaningful descriptions, including the frequency enum and the payee_id vs payee_name interaction. The description adds no parameter-level 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 gives a specific verb (schedule) and resource (transaction) and adds examples of what that means in practice: bill, paycheck, regular transfer. It does not, however, distinguish this from sibling create_transactions (one-time) or update_scheduled_transaction, so sibling differentiation is left to the name alone.

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 explicit guidance on when to use this versus create_transactions for a single-dated transaction, nor when to use it versus update_scheduled_transaction or enter_scheduled_transaction. The agent must infer the scheduling lifecycle entirely from tool names.

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

create_transactionsCreate transactionsA

Create one or more transactions in one request.

Use this to enter spending from a receipt, record income, enter a transfer between accounts, or add a split transaction. Calling this twice enters the transactions twice.

Example entries:

  • Spending: account_id=, date=2024-03-02, amount=-43.17, payee_name="Kroger", category_id=

  • Income: amount=2500, payee_name="Acme Payroll", category_id=<Inflow: Ready to Assign>

  • Transfer: account_id=, amount=-200, transfer_account_id=, no category

  • Split: amount=-80, payee_name="Target", no category, splits=[ {amount: -50, category_id: }, {amount: -30, category_id: }]

NameRequiredDescriptionDefault
transactionsYesThe transactions to create (required)

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare this is a non-idempotent, non-destructive write. The description reinforces the non-idempotent behavior with 'Calling this twice enters the transactions twice,' which is exactly the kind of context an agent needs. It does not discuss permissions or partial-failure behavior, but with annotations covering the safety profile this is strong.

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 purpose is front-loaded, followed by usage, a duplicate warning, and compact examples. Every sentence carries information an agent needs to construct a correct call.

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 complex batch-mutation tool with nested splits and transfers, the description covers the main entry patterns and the duplication hazard. It omits preconditions like account existence and error/partial-failure behavior, but an output schema exists and the input schema is fully annotated, so only minor gaps remain.

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 meaningful example patterns: transfers use transfer_account_id with no category, income uses 'Inflow: Ready to Assign', and splits show component amounts. These examples clarify semantics beyond field-level documentation.

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 first sentence gives a specific verb (Create), resource (transactions), and scope (one or more in one request). It does not explicitly contrast with siblings like update_transactions or import_transactions, but the batch-create intent is unmistakable.

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

Usage Guidelines4/5

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

It lists concrete use cases (receipt spending, income, transfers, splits), which tells an agent when to reach for this tool. It also warns that calling twice duplicates entries, a crucial usage constraint. However, it does not name alternatives or state exclusions.

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

delete_scheduled_transactionDelete scheduled transactionA
DestructiveIdempotent

Delete a scheduled transaction, so it stops happening. Transactions it already entered stay. Confirm with the user before deleting.

NameRequiredDescriptionDefault
scheduled_transaction_idYesScheduled transaction to delete (required)

Output Schema

NameRequiredDescription
idYesUnique scheduled transaction identifier
flagNoFlag as 'Name (Color)' format
memoNoUser-entered memo
amountYesAmount in currency units (negative = spending, positive = income)
payee_idNoPayee ID
date_nextYesNext occurrence date
frequencyYesHow often it happens
account_idYesAccount ID
date_firstYesFirst occurrence date
payee_nameNoPayee name
category_idNoCategory ID
account_nameNoAccount name
category_nameNoCategory name
subtransactionsNoThe parts of a split scheduled transaction
transfer_account_idNoFor a transfer, the other account

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is known. The description still adds genuinely new context: deletion is non-cascading ("Transactions it already entered stay") and requires user confirmation, which no structured field conveys. It stops short of saying the schedule deletion itself is irreversible or what happens to a bad ID.

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 effect, then the scope caveat, then the confirmation requirement. No filler and nothing an agent must read past to find the core operation.

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 an output schema present and full schema description coverage, the description only needs to cover behavior, which it largely does: effect, non-cascading scope, and confirmation. The missing piece is whether the schedule deletion can be undone, a meaningful gap for a destructive 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% on a single required parameter, so the schema already explains scheduled_transaction_id as the UUID of the schedule to delete. The description adds no format, lookup, or validation guidance beyond that, making the baseline 3 correct.

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 ("Delete a scheduled transaction") plus the practical effect ("so it stops happening"), which separates it from delete_transaction and update_scheduled_transaction by resource name. It does not explicitly name the sibling to use instead when the intent is to skip only one occurrence.

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 one concrete operational guideline — "Confirm with the user before deleting" — which is real usage guidance. However, it never addresses the main ambiguity for an agent: when to delete the schedule versus using update_scheduled_transaction to change it or enter_scheduled_transaction to record an occurrence.

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

delete_transactionDelete transactionA
DestructiveIdempotent

Delete a transaction. Confirm with the user before deleting.

NameRequiredDescriptionDefault
transaction_idYesTransaction to delete (required)

Output Schema

NameRequiredDescription
idYesUnique transaction identifier
dateYesTransaction date
flagNoFlag as 'Name (Color)' format
memoNoUser-entered memo
amountYesAmount in currency units (negative = spending, positive = income)
clearedYesCleared status: 'cleared', 'uncleared', or 'reconciled'
approvedYesWhether the transaction is approved
payee_idNoPayee ID
account_idYesAccount ID
payee_nameNoPayee name
category_idNoCategory ID
account_nameNoAccount name
category_nameNoCategory name
subtransactionsNoThe parts of a split transaction
transfer_account_idNoFor a transfer, the other account
parent_transaction_idNoParent transaction ID if this is a part of a split
import_payee_name_originalNoFor an imported transaction, the payee exactly as the bank wrote it. Useful for working out the real payee and category.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered by structured data. The description adds the confirmation requirement, a real behavioral instruction beyond the annotations, but does not say whether deletion is permanent or what side effects occur (e.g., impact on account balance).

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

Conciseness5/5

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

Two short sentences with zero filler, and the confirm-before-deleting warning is front-loaded where an agent will see it. Nothing is padded or redundant.

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?

An output schema exists and annotations cover the safety profile, and the single parameter is fully documented, so the basics are complete. Still missing is whether deletion is irreversible or has cascading effects on related records, which matters for a finance-domain 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% for the single transaction_id parameter, so the schema already fully documents it. The description adds no format, sourcing, or validation 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.

Purpose4/5

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

States a specific verb (delete) and resource (a transaction), which is unambiguous on its own. It does not explicitly distinguish itself from update_transactions or delete_scheduled_transaction, relying on the name for differentiation.

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

Usage Guidelines3/5

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

The instruction 'Confirm with the user before deleting' gives a clear operational precondition, which is genuinely useful. However, there is no guidance on when to delete versus update/correct a transaction, nor any mention of alternatives among the many sibling tools.

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

enter_scheduled_transactionEnter scheduled transactionA
Destructive

Enter a scheduled transaction now, before its date, like YNAB's "Enter Now". Use this when a bill is paid early or a paycheck arrives early.

This creates the transaction and moves the schedule to the occurrence after its next one. A schedule that happens only once is deleted. Split scheduled transactions, and those that repeat "twiceAMonth", cannot be entered this way; enter them in YNAB. Calling this twice enters two occurrences.

NameRequiredDescriptionDefault
dateNoDate of the transaction, not in the future (default: today)
memoNoMemo for the transaction (default: the scheduled memo)
amountNoAmount in currency units, when it differs from the scheduled amount (optional)
scheduled_transaction_idYesScheduled transaction to enter (required)

Output Schema

NameRequiredDescription
scheduleNoThe schedule, moved to its next date, or null if it happened only once and is now deleted
transactionYesThe transaction entered

TDQS

A4.5/5.0
Behavior4/5

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

Adds substantial context beyond the annotations: the schedule advances to the occurrence after next, one-time schedules are deleted, and repeat calls create duplicate transactions (consistent with idempotentHint=false and destructiveHint=true). What it doesn't cover is the failure mode for unsupported schedule types — whether the call errors out or silently does nothing.

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 the action and its trigger, then the state changes, then the limitations, then the duplicate-call warning — a natural decision order. No sentence is redundant; the YNAB analogy and the 'twiceAMonth' exclusion each carry distinct information.

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

Completeness5/5

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

For a destructive, non-idempotent mutation with an output schema, the description covers everything an agent needs to decide and act: when to use it, what it mutates, what it deletes, and which inputs it rejects. Return-value details are correctly left to the 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 all four parameters (including date defaulting to today and memo/amount defaults) are already documented. The description only indirectly touches the date parameter via 'before its date' and says nothing about memo or amount overrides, so it does not add meaning beyond the schema. 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+resource (enter a scheduled transaction early) and pins down the semantics with the YNAB 'Enter Now' analogy and 'before its date'. This clearly separates it from create_scheduled_transaction and update_scheduled_transaction, which act on the schedule itself rather than materializing an occurrence.

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 trigger ('when a bill is paid early or a paycheck arrives early') and explicit exclusions (split schedules and 'twiceAMonth' cannot be entered this way — use YNAB). It even warns that a second call enters a second occurrence, which preempts the most likely misuse.

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

find_payeeFind payeeA
Read-only

Find payees whose names contain a search term, ignoring case.

Example queries this tool can answer:

  • "Find Amazon payee ID" (use name_search="amazon")

  • "Show me all Starbucks locations" (use name_search="starbucks")

  • "Find payees with 'grocery' in the name" (use name_search="grocery")

NameRequiredDescriptionDefault
limitNoMaximum number of matching payees to return (default: 10)
name_searchYesText to look for in payee names. Examples: "amazon", "starbucks", "grocery" (required)

Output Schema

NameRequiredDescription
payeesYesList of payees
paginationYesPagination information

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral detail by specifying case-insensitive substring matching. It omits result ordering or no-match behavior, but the output schema covers return structure.

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 core behavior is front-loaded in a single sentence, followed by illustrative examples. The three examples are somewhat repetitive but each demonstrates a different phrasing of the same underlying query, so they earn their 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 annotations, a complete input schema, and an output schema, the description provides enough context to call the tool correctly. The only minor gap is absence of guidance on result ordering or behavior when there are zero matches.

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 name_search and limit are fully documented in the input schema. The description's examples reinforce name_search usage but add no syntax or constraint information beyond what the schema already provides. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb ('Find'), resource ('payees'), and matching scope ('names contain a search term, ignoring case'). This clearly distinguishes it from sibling list_payees (which has no filter) and write tools like create_payee or rename_payee.

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 example queries map natural-language intents to name_search values, which gives clear usage context. However, it does not explicitly state when to use this versus list_payees or what happens when no match is found, so the guidance is strong but not exhaustive.

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

get_month_categoryGet month categoryA
Read-only

Get one category's assigned, activity, available, and target for a month.

NameRequiredDescriptionDefault
monthNoWhich plan month (default: "current"): • "current": This calendar month • "last": The previous calendar month • "next": The next calendar month • A date: The month containing that date, such as 2024-03-01current
category_idYesCategory to look up (required)

Output Schema

NameRequiredDescription
idYesUnique category identifier
nameYesCategory name
noteNoCategory notes
activityNoActivity this month (negative = spending)
assignedNoAmount assigned this month
internalNoWhether YNAB manages this category itself. 'Inflow: Ready to Assign' is internal: categorize income to it.
availableNoAmount available to spend, including rollover
target_dateNoDate the target should be met, for targets with a date
target_typeNoTarget type: NEED (needed for spending, refills each period), TB (have a balance), TBD (have a balance by a date), MF (fund monthly), DEBT (pay down a debt)
target_amountNoTarget amount
category_group_idYesCategory group ID
target_underfundedNoAmount still needed this month to stay on track
category_group_nameNoCategory group name
target_overall_leftNoAmount still needed to meet the target this period
target_percentage_completeNoHow much of the target is funded, as a percentage

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds which budget figures are returned (assigned, activity, available, target), which is mildly useful, but says nothing about permissions, missing-category behavior, or how the values are scoped.

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

Conciseness5/5

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

A single front-loaded sentence with zero filler; the key scope words ('one category', 'for a month') come first.

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 annotations, full schema coverage, and an output schema, the description only needs to frame the call, which it does. The one residual gap is that it doesn't relate the tool to its closely-named siblings, leaving routing slightly under-specified.

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 a detailed enum/date explanation for 'month' and a required note for 'category_id', so the schema carries the parameter burden. The description only restates the category and month framing, adding no syntax or format 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 names a specific verb ('Get') and resource ('one category's assigned, activity, available, and target for a month'), and the phrase 'one category' implicitly distinguishes it from month-wide siblings like get_plan_month. It never names a sibling explicitly, so an agent must infer the boundary from the phrasing.

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 'for a month' on a single category, but there is no explicit when-to-use, when-not, or pointer to alternatives such as get_plan_month or list_categories. The agent has to reason about the boundary itself.

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

get_planGet planA
Read-only

Get the plan's name, the months it covers, and its currency and date formats. Use the currency format to write amounts the way the user sees them in YNAB.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
idYesThe plan's ID, as configured
nameNoThe plan's name
last_monthNoLatest month
date_formatYesHow the plan writes dates
first_monthNoEarliest month
currency_formatYesHow the plan writes amounts of money
last_modified_onNoWhen anything in the plan last changed

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real value on top: the exact fields returned and the practical rule that the returned currency format should drive how amounts are displayed to the user. It does not discuss caching or whether plan settings can shift mid-session, but with annotations carrying the safety burden this is solid.

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

Conciseness5/5

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

Two short sentences, front-loaded with the returned fields, then the one actionable tip. Nothing is repeated or 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?

Zero params, no nested objects, an output schema, and read-only annotations mean the description only needed to frame purpose and any non-obvious usage. It does that, plus the currency-format tip. Minor gap: it never clarifies which plan is returned (last-used vs. default), which an agent might wonder about.

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 correctly implies a no-argument call that returns the current plan's metadata, consistent with the empty 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 and resource ('Get the plan') and enumerates exactly what comes back: name, months covered, currency and date formats. That field list implicitly separates it from get_plan_month and list_plan_months, which drill into per-month data, though no sibling is named outright.

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 only guidance is output-side: 'Use the currency format to write amounts the way the user sees them in YNAB.' There is no statement of when to call this versus get_plan_month or list_plan_months, and no prerequisites; usage is inferred from the zero-arg, plan-level nature of the tool.

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

get_plan_monthGet plan monthB
Read-only

Get one month of the plan: income, assigned, activity, Ready to Assign, age of money, and each visible category's amounts for that month.

NameRequiredDescriptionDefault
limitNoMaximum number of categories to return per page (default: 50)
monthNoWhich plan month (default: "current"): • "current": This calendar month • "last": The previous calendar month • "next": The next calendar month • A date: The month containing that date, such as 2024-03-01current
offsetNoNumber of categories to skip for pagination (default: 0)

Output Schema

NameRequiredDescription
noteNoThe user's note for this month
monthYesFirst day of the plan month
incomeYesIncome categorized to 'Inflow: Ready to Assign'
activityYesTotal activity, excluding income to Ready to Assign
assignedYesTotal assigned across categories
categoriesYesCategories with their amounts for this month
paginationYesPagination information for the categories
age_of_moneyNoAge of money in days: how long money sits before it is spent
ready_to_assignYesMoney not yet assigned to a category (can be negative)

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds useful scope context by naming the returned fields and flagging that only *visible* categories appear, which hints at permission-based filtering. It does not mention pagination despite limit/offset parameters, which is a real behavioral gap for a tool returning a category list.

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

Conciseness5/5

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

A single front-loaded sentence with a specific verb and a compact field list; every clause conveys returnable data rather than filler. No redundancy with the title beyond the unavoidable 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 an output schema present and all three parameters fully documented, the description only needs to convey scope, which it does well by listing the month's components. The one omission is that paginated category results exist but go unmentioned in the description.

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 month parameter is already fully documented with enum meanings and date format, so the schema does the heavy lifting. The description adds nothing about which parameter controls the category pagination or how "current" resolves. 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 ("Get one month of the plan") and enumerates the exact payload: income, assigned, activity, Ready to Assign, age of money, and per-category amounts. The scoping to a single month implicitly separates it from get_plan and list_plan_months, though no sibling is named outright.

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 statement of when to call this versus get_plan (whole-plan view), list_plan_months (month inventory), or get_month_category (single category detail), all of which appear in the sibling list. The use case is inferable from the description but never stated, and no prerequisites or exclusions are given.

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

get_scheduled_transactionGet scheduled transactionC
Read-only

Get one scheduled transaction.

NameRequiredDescriptionDefault
scheduled_transaction_idYesScheduled transaction to get (required)

Output Schema

NameRequiredDescription
idYesUnique scheduled transaction identifier
flagNoFlag as 'Name (Color)' format
memoNoUser-entered memo
amountYesAmount in currency units (negative = spending, positive = income)
payee_idNoPayee ID
date_nextYesNext occurrence date
frequencyYesHow often it happens
account_idYesAccount ID
date_firstYesFirst occurrence date
payee_nameNoPayee name
category_idNoCategory ID
account_nameNoAccount name
category_nameNoCategory name
subtransactionsNoThe parts of a split scheduled transaction
transfer_account_idNoFor a transfer, the other account

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered, but the description adds nothing beyond that — no note on not-found behavior, no indication the record is a template rather than a posted transaction. For a read with rich annotations the bar is lower, yet zero added context is still weak.

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?

One short, front-loaded sentence with no filler, so it is concise. However, the brevity reflects under-specification rather than tightness — nothing beyond the bare minimum is stated.

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

Completeness3/5

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

The tool is simple: one required ID, full schema coverage, and an output schema so return values need not be described. Given that, the description is minimally sufficient, though it omits any guidance on where the ID comes from or how it differs from get_transaction.

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

Parameters3/5

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

With a single parameter at 100% schema description coverage (uuid format, required, described as the transaction to get), the schema carries parameter meaning fully. The description adds no syntax or sourcing detail, so baseline 3 applies.

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

Purpose2/5

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

"Get one scheduled transaction" essentially restates the tool name and title without adding scope or disambiguation. It does identify verb and resource, but an agent gets no help distinguishing it from get_transaction or list_scheduled_transactions.

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 mention of the sibling list_scheduled_transactions for fetching many, and no note on whether the ID must come from that listing first. The agent must infer all routing 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_transactionGet transactionA
Read-only

Get one transaction, including the parts of a split.

NameRequiredDescriptionDefault
transaction_idYesTransaction to get (required)

Output Schema

NameRequiredDescription
idYesUnique transaction identifier
dateYesTransaction date
flagNoFlag as 'Name (Color)' format
memoNoUser-entered memo
amountYesAmount in currency units (negative = spending, positive = income)
clearedYesCleared status: 'cleared', 'uncleared', or 'reconciled'
approvedYesWhether the transaction is approved
payee_idNoPayee ID
account_idYesAccount ID
payee_nameNoPayee name
category_idNoCategory ID
account_nameNoAccount name
category_nameNoCategory name
subtransactionsNoThe parts of a split transaction
transfer_account_idNoFor a transfer, the other account
parent_transaction_idNoParent transaction ID if this is a part of a split
import_payee_name_originalNoFor an imported transaction, the payee exactly as the bank wrote it. Useful for working out the real payee and category.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds one substantive behavioral detail — that split parts are included — but says nothing about missing-ID behavior or the scope of the returned record.

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

Conciseness5/5

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

A single front-loaded sentence with no filler, and the differentiating detail (split parts) arrives immediately. 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 an output schema covering the return shape and annotations covering the read-only safety profile, the description only needs to establish scope and the split nuance, which it does. The slight gap is the absence of any error/not-found or sibling-routing context.

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

Parameters3/5

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

Schema description coverage is 100% with a single required parameter, so the schema already defines transaction_id fully. The description adds no format, source, or lookup guidance beyond what the schema provides, making baseline 3 correct.

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 one transaction') and the singular scope distinguishes it from the sibling list_transactions. It stops short of explicitly naming that sibling, so the differentiation is implied rather than stated.

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

Usage Guidelines3/5

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

The phrase 'one transaction' implies lookup by ID, which implies use when you already have a transaction_id, but the description never says when to prefer this over list_transactions or what happens if the ID is unknown. Usage is inferable but not guided.

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

import_transactionsImport transactionsA

Ask YNAB to import new transactions from the plan's linked bank accounts now, instead of waiting for its next scheduled import.

Imported transactions arrive unapproved. Find them with list_transactions and status="unapproved".

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
imported_countYesNumber of new transactions
transaction_idsYesIDs of the new transactions

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-idempotent, non-destructive, closed-world. The description adds genuinely non-derivable behavior: the import is a request to YNAB and results land as unapproved transactions, plus how to retrieve them. It does not state whether the call returns immediately or blocks, which is the one remaining behavioral unknown.

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: what it does, the timing it replaces, and the follow-up. Front-loaded with the action, no repetition of the title, zero 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 zero-param trigger with annotations covering the safety profile and an output schema covering the response shape, everything an agent needs is present: the action, its timing semantics, and how to observe the result afterward. Nothing material 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?

Zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly spends no words on inputs and instead explains downstream effects.

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: trigger a bank-account transaction import from the plan's linked accounts, explicitly contrasted with the next scheduled import. It implicitly separates itself from create_transactions (manual entry) via 'linked bank accounts', but never names that sibling, so differentiation is inferred rather than stated.

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 triggering condition ('now, instead of waiting for its next scheduled import') and a concrete follow-up path (list_transactions with status="unapproved"). No explicit when-not or exclusions, but the use case is unambiguous for a zero-param action.

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

list_accountsList accountsA
Read-only

List the plan's accounts with their balances.

Each account includes its transfer_payee_id: use it as the payee of a transaction to transfer money into that account.

NameRequiredDescriptionDefault
limitNoMaximum number of accounts to return per page (default: 100)
offsetNoNumber of accounts to skip for pagination (default: 0)
include_closedNoWhether to include closed accounts (default: false)

Output Schema

NameRequiredDescription
accountsYesList of accounts
paginationYesPagination information

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish read-only and closed-world behavior, and the description adds useful context that accounts include balances and transfer_payee_id. It does not discuss pagination or whether closed accounts are included by default, but those details are covered by 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.

Conciseness5/5

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

Two short sentences with no wasted wording. The core action and resource are front-loaded, followed immediately by the most useful field-level context.

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

Completeness5/5

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

For a simple read-only listing tool with fully described parameters, annotations, and an output schema, the description provides enough context to select and invoke it correctly. The transfer_payee_id note adds practical orientation without needing to repeat schema or output 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 limit, offset, and include_closed are already fully documented in the schema. The description adds no additional parameter semantics beyond what the schema provides, making 3 the appropriate 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?

Clearly states the specific action (list) and resource (the plan's accounts), and adds that balances are included. It does not explicitly differentiate from sibling tools such as create_account or list_payees, 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 Guidelines3/5

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

The description explains a practical follow-up use for transfer_payee_id when transferring money into an account, but it does not state when to choose list_accounts over related siblings or when not to use it. 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.

list_categoriesList categoriesA
Read-only

List the plan's categories with this month's amounts and targets.

Only returns visible categories. Hidden and deleted categories are excluded. Categories come in the order the plan shows them, group by group.

NameRequiredDescriptionDefault
limitNoMaximum number of categories to return per page (default: 50)
offsetNoNumber of categories to skip for pagination (default: 0)

Output Schema

NameRequiredDescription
categoriesYesList of categories
paginationYesPagination information

TDQS

A3.8/5.0
Behavior4/5

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

The description adds useful behavior beyond the read-only annotations: only visible categories are returned, hidden and deleted categories are excluded, and results follow the plan's group-by-group ordering. It does not cover pagination behavior, but the schema already documents limit and offset.

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

Conciseness5/5

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

The description is short, front-loaded with the core purpose, and every sentence contributes useful information about scope, filtering, or ordering. There is no 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?

The description is largely complete for a simple list tool: it explains what is returned, which categories are excluded, and how results are ordered. With annotations, full parameter schema coverage, and an output schema, the remaining omissions are minor.

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 limit and offset are already well documented in the input schema. The description does not add parameter-specific meaning beyond what the schema provides, which is acceptable at the 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?

The description states a specific verb and resource: list the plan's categories, including this month's amounts and targets. It is clear what the tool returns, but it does not explicitly distinguish itself from siblings such as list_category_groups or get_month_category.

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

Usage Guidelines3/5

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

Usage is implied by the description: use this to list categories in plan display order. However, there is no explicit guidance on when to use this versus list_category_groups, get_month_category, or other category-related siblings.

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

list_category_groupsList category groupsA
Read-only

List the plan's category groups with this month's totals.

Lighter than list_categories when only the overview by group is needed.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds one useful behavioral fact — the results carry this month's aggregated totals rather than raw categories — but says nothing about ordering, empty groups, or plan-month edge cases. Modest value beyond the annotations.

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

Conciseness5/5

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

Two short sentences, each earning its place: the first defines output content and scope, the second handles routing. The differentiating detail is front-loaded rather than buried.

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

Completeness4/5

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

With no parameters, an output schema to explain return values, and read-only annotations, the description covers everything needed to invoke the tool correctly. The only minor gap is not clarifying whether 'this month' means the calendar month or the selected plan month.

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 nothing for the description to disambiguate. Baseline 4 applies; the description correctly does not invent parameter discussion.

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 the plan's category groups') plus the scope of the data returned ('this month's totals'). The second sentence explicitly distinguishes it from the sibling list_categories, so an agent can pick between them 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?

Names the concrete alternative (list_categories) and the exact condition that selects this one ('when only the overview by group is needed'), including the tradeoff ('lighter'). Both when-to-use and which-sibling-not are explicit.

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

list_money_movementsList money movementsA
Read-only

List the history of money assigned and moved between categories.

Use this to explain why a category's assigned amount changed: each entry says how much moved, from where, to where, and when.

NameRequiredDescriptionDefault
limitNoMaximum number of movements to return per page (default: 50)
monthNoWhich plan month (default: "current"), or null for every month: • "current": This calendar month • "last": The previous calendar month • "next": The next calendar month • A date: The month containing that date, such as 2024-03-01current
offsetNoNumber of movements to skip for pagination (default: 0)

Output Schema

NameRequiredDescription
paginationYesPagination information
money_movementsYesMoney movements, most recent first

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety and scope are covered. The description adds that each entry conveys amount, source, destination, and time, but says nothing about pagination behavior, ordering, or result size beyond what the params declare. With annotations carrying the safety profile, this is adequate but not rich.

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

Conciseness5/5

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

Two short sentences with zero waste; the resource definition comes first and the motivating use case second. Nothing is repeated from the schema or annotations.

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?

An output schema exists and the input schema is fully documented, so return values and parameter details need not be in the description. Purpose and usage are both covered; only minor context such as ordering or how pagination interacts with the month filter is 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 description coverage is 100%, and the limit/offset/month parameters are fully documented in the schema including enum meanings and defaults. The description adds no parameter-level meaning beyond that, 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 ('List') and a specific resource ('history of money assigned and moved between categories'), which cleanly separates it from ledger-oriented siblings like list_transactions and from mutating siblings like assign_money and move_money. The second sentence reinforces what the resource represents rather than restating the name.

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 use case: explaining why a category's assigned amount changed. That tells the agent when to reach for it, but it does not name alternatives or exclusions (e.g., use list_transactions for actual bank activity, or assign_money/move_money to change amounts).

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

list_payeesList payeesA
Read-only

List the plan's payees, sorted by name.

Payees are the people and businesses money goes to and comes from. To find a particular payee, find_payee is much faster than paging through this list. Deleted payees are excluded.

NameRequiredDescriptionDefault
limitNoMaximum number of payees to return per page (default: 50)
offsetNoNumber of payees to skip for pagination (default: 0)

Output Schema

NameRequiredDescription
payeesYesList of payees
paginationYesPagination information

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety and scope are covered. The description adds genuinely new behavior: results are sorted by name and soft-deleted payees are omitted, which an agent needs to interpret an empty or short result set. It leaves paging behavior implicit, but the schema carries that.

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 waste: purpose first, then the domain gloss, then the routing advice and the exclusion note. Every sentence carries information the agent could not get from structured fields.

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?

With a 2-parameter schema at full coverage, read-only annotations, and an output schema, the only gaps left are return format and pagination mechanics, both already structured. The description covers the remaining semantic questions (ordering, deleted records, when to use a sibling instead).

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 limit and offset are fully documented there with defaults, so the schema does the heavy lifting. The description adds nothing about pagination strategy or page-size tradeoffs, 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 ('List the plan's payees') plus the ordering ('sorted by name'), which an agent cannot infer from the name alone. It also defines what a payee is, removing ambiguity about the resource, and explicitly distinguishes itself from find_payee.

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 tool (find_payee) and the exact condition that selects it ('to find a particular payee'), calling it 'much faster than paging through this list'. It also states the enumeration rule that deleted payees are excluded, so the agent knows what this list will and won't contain.

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

list_plan_monthsList plan monthsA
Read-only

List the plan's months with their totals, newest first.

Use this for trends over time: income, assigned, and activity by month, how Ready to Assign changed, and how age of money moved.

NameRequiredDescriptionDefault
limitNoMaximum number of months to return per page (default: 12)
offsetNoNumber of months to skip for pagination (default: 0)

Output Schema

NameRequiredDescription
monthsYesMonths, newest first
paginationYesPagination information

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds value beyond that by disclosing result ordering (newest first) and the specific content of the returned totals, which the agent cannot get from the annotations alone.

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

Conciseness5/5

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

Two short sentences with the core operation and ordering front-loaded, followed by one sentence of usage context. 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?

An output schema exists, parameters are fully documented, ordering is stated, and the description names the metrics returned. What remains unstated is how pagination interacts with the 'newest first' ordering, 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 limit and offset are documented inline, including defaults. The description adds no pagination or parameter semantics 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.

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 the plan's months with their totals') plus the ordering ('newest first'), so the operation is unambiguous. It does not explicitly name the singular sibling get_plan_month, so differentiation from that tool is left to be inferred from the name.

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 this for trends over time' gives a clear positive selection context and enumerates the specific trend dimensions (income, assigned, activity, Ready to Assign, age of money). It stops short of naming an alternative such as get_plan_month for a single month, so there is no exclusion guidance.

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

list_scheduled_transactionsList scheduled transactionsA
Read-only

List scheduled transactions, soonest first, with filters that can be combined.

Example queries this tool can answer:

  • "Show me all monthly recurring expenses" (use frequency="monthly")

  • "What bills are due in the next 7 days?" (use upcoming_days=7)

  • "List all Netflix subscriptions" (find the payee first, then use payee_id)

  • "Show scheduled income over $100" (use min_amount=100)

NameRequiredDescriptionDefault
limitNoMaximum number to return per page (default: 25)
offsetNoNumber to skip for pagination (default: 0)
payee_idNoOnly scheduled transactions with this payee (optional)
frequencyNoOnly scheduled transactions that repeat this often (optional)
account_idNoOnly scheduled transactions in this account (optional)
max_amountNoOnly amounts <= this, in currency units. Spending is negative (optional)
min_amountNoOnly amounts >= this, in currency units. Spending is negative (optional)
category_idNoOnly scheduled transactions in this category (optional)
upcoming_daysNoOnly scheduled transactions due within this many days (optional)

Output Schema

NameRequiredDescription
paginationYesPagination information
scheduled_transactionsYesList of scheduled transactions

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds the meaningful traits that filters are combinable (AND semantics) and that results are ordered soonest-first, but says nothing about pagination totals or result volume beyond what limit/offset already imply.

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 core statement is front-loaded in a single sentence, followed by a compact example block. Each example carries a concrete parameter mapping rather than filler, though four examples is slightly more than strictly needed for nine self-documented parameters.

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 an output schema present, annotations covering safety, and 100% schema coverage on all nine params, the description only needs to add the non-obvious traits — it does that via filter combinability and render order. Minor gaps remain around result volume/pagination behavior and cross-tool sequencing beyond the payee hint.

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, payee_id, frequency, amounts, account, category and upcoming_days are all already documented in the schema. The description's examples largely restate those semantics; the one genuine addition is the workflow hint that payee_id requires resolving the payee first (presumably via find_payee). That justifies the baseline 3 but not more.

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 scheduled transactions') plus a meaningful implicit sort ('soonest first'), which separates it from the plural list_transactions and the singular get_scheduled_transaction. It does not explicitly name a sibling or state exclusion conditions, 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?

The example-query block effectively maps natural-language intents to concrete parameter choices (frequency="monthly", upcoming_days=7, min_amount=100), giving clear context for when each filter applies. It omits when not to use this tool or which sibling to prefer for single-record or posted-transaction lookups.

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

list_transactionsList transactionsA
Read-only

List transactions, newest first, with filters that can be combined.

Example queries this tool can answer:

  • "Show me all transactions over $50 in Dining Out this year" → category_id=, max_amount=-50, since_date=2024-01-01

  • "What do I still need to review?" → status="unapproved"

  • "What hasn't been categorized?" → status="uncategorized"

  • "How much did we spend at Amazon in March?" → payee_id=, since_date=2024-03-01, until_date=2024-03-31

  • "Find the soccer registration fee" → text_search="soccer"

Filtering by category or payee returns each part of a split transaction as its own row, with parent_transaction_id set.

NameRequiredDescriptionDefault
limitNoMaximum number of transactions to return per page (default: 25)
offsetNoNumber of transactions to skip for pagination (default: 0)
statusNo"unapproved" for transactions waiting for the user's review, or "uncategorized" for transactions with no category (optional)
payee_idNoOnly transactions with this payee (optional)
account_idNoOnly transactions in this account (optional)
max_amountNoOnly transactions with amount <= this, in currency units. Spending is negative, so -50 means "spent at least 50" (optional)
min_amountNoOnly transactions with amount >= this, in currency units. Spending is negative, so -50 means "spent at most 50" (optional)
since_dateNoOnly transactions on or after this date (optional)
until_dateNoOnly transactions on or before this date (optional)
category_idNoOnly transactions in this category (optional)
text_searchNoOnly transactions whose payee name, memo, or original bank payee contains this text, ignoring case (optional)

Output Schema

NameRequiredDescription
paginationYesPagination information
transactionsYesList of transactions

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description adds genuinely non-obvious behavior — newest-first ordering and that category/payee filters explode splits into separate rows with parent_transaction_id set. It doesn't discuss pagination limits or result size, but the key behavioral risk (split rows inflating counts) is disclosed.

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

Conciseness5/5

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

Purpose is front-loaded in one sentence, followed by scannable example mappings and a final caveat sentence. Each block earns its place; the examples are dense with mapping information rather than 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 11 optional params, an output schema present, and rich annotations, the description covers the remaining burden well: ordering, combinability, split-row behavior, and intent-to-parameter mapping. Only pagination/result-size expectations are left implicit.

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 baseline is 3, but the description adds value beyond the schema by showing parameter combinations in context (e.g., payee_id + date range for 'Amazon in March') and interpreting status values through intent questions. This is real semantic value the property docs alone don't convey.

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 plus ordering ('List transactions, newest first') and that filters combine. It doesn't explicitly distinguish itself from get_transaction, but the list-vs-single distinction is clear from the name pairing.

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?

Worked example queries map natural-language intents to concrete parameter sets, which tells an agent when this tool fits and how to configure it. It stops short of naming alternatives (e.g., get_transaction for a known ID) or stating exclusions, so it isn't full 5-level routing guidance.

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

move_moneyMove moneyA
Destructive

Move assigned money from one category to another within a month.

This is how to cover overspending or reallocate: it takes the amount off one category's assigned amount and adds it to the other's. Ready to Assign does not change. If YNAB rejects the second change, the first is put back before the error is reported.

NameRequiredDescriptionDefault
monthNoWhich plan month (default: "current"): • "current": This calendar month • "last": The previous calendar month • "next": The next calendar month • A date: The month containing that date, such as 2024-03-01current
amountYesAmount in currency units to move, greater than zero (required)
to_category_idYesCategory to give the money to (required)
from_category_idYesCategory to take the money from (required)

Output Schema

NameRequiredDescription
changesYesEach category that changed, in the order they changed

TDQS

A4.5/5.0
Behavior5/5

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

Despite annotations already marking this as destructive and non-idempotent, the description adds meaningful behavioral detail: it explains the paired debit/credit effect and that Ready to Assign remains unchanged. It also discloses rollback behavior if the second change is rejected, which is valuable 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?

The description is tightly structured across three short sentences, with the core operation front-loaded. Each sentence contributes useful information: purpose, effect, and failure behavior.

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

Completeness5/5

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

Given the output schema and annotations, the description covers the important behavioral context an agent needs: category-to-category movement, no Ready to Assign change, and rollback on failure. 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%, so the parameter descriptions already carry the main semantics for month, amount, and category IDs. The tool description reinforces the direction of the amount movement, but does not add substantial syntax or format guidance beyond the schema.

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

Purpose5/5

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

The description states a specific verb and resource: moving assigned money from one category to another within a month. It also clarifies that Ready to Assign does not change, which distinguishes this operation from assign_money or set_assigned even without naming them directly.

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 use cases: covering overspending or reallocating between categories. However, it does not explicitly state when not to use it or name alternative tools such as assign_money, 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.

rename_category_groupRename category groupC
DestructiveIdempotent

Rename a category group.

NameRequiredDescriptionDefault
nameYesNew group name, at most 50 characters (required)
category_group_idYesGroup to rename (required)

Output Schema

NameRequiredDescription
idYesUnique category group identifier
nameYesCategory group name

TDQS

C2.3/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds no additional context—no mention of the destructive effect on transactions or budgets referencing the group, no length/validation notes beyond the schema, and no return behavior.

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

Conciseness3/5

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

The single sentence is concise and front-loaded with the action, but it is under-specified rather than efficiently minimal. There is no wasted wording, but there is also almost no content.

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 destructive, idempotent mutation tool, the description should disclose consequences (e.g., effect on existing category references) and any constraints. With an output schema present, return values need not be explained, but the behavioral side is essentially 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 description coverage is 100%, with both parameters documented including the 50-character limit and UUID format, so the baseline is 3. The description adds nothing beyond the schema, but it doesn't need to.

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

Purpose2/5

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

The description 'Rename a category group.' only restates the tool name and title, making it a tautology under the rubric. It does identify the verb (rename) and resource (category group), but gives no scope or distinction from related siblings like rename_payee or update_category.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as create_category_group or update_category, and no preconditions are stated. The agent must infer usage entirely from the name.

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

rename_payeeRename payeeA
DestructiveIdempotent

Rename a payee. Every transaction with this payee shows the new name.

NameRequiredDescriptionDefault
nameYesNew payee name, at most 500 characters (required)
payee_idYesPayee to rename (required)

Output Schema

NameRequiredDescription
idYesUnique payee identifier
nameYesPayee name
transfer_account_idNoFor a transfer payee, the account that transfers to it go into

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, so the risk profile is covered. The description adds genuinely useful blast-radius context that annotations cannot convey: the rename propagates to every transaction with that payee. It stops short of saying whether the rename is reversible or what permissions are needed, but the key behavioral consequence is disclosed.

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

Conciseness5/5

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

Two short sentences, zero filler, with the core action first and the side effect second. Nothing could be removed without losing 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 an output schema present, return values need no explanation, and annotations cover the safety profile. The one remaining gap is the absence of any guidance on prerequisites or error conditions, though for a two-parameter rename the description is otherwise sufficient.

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

Parameters3/5

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

Schema coverage is 100%, so payee_id and name are fully documented in the schema, including the 500-character limit. The description adds no parameter-level detail beyond implying that name is the field reflected in transactions, 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?

A specific verb ('Rename') and resource ('payee') stated up front, cleanly separated from siblings like create_payee, list_payees, and find_payee. The second sentence clarifies the scope of the operation, so an agent knows exactly what changes.

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

Usage Guidelines2/5

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

The description never says when to use this versus create_payee or find_payee, nor does it state preconditions (does the payee need to exist, does it require an ID first?). The propagation note hints at consequences but gives no decision guidance.

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

set_assignedSet assigned amountA
DestructiveIdempotent

Set exactly how much is assigned to a category in a month.

Unlike assign_money, this replaces the assigned amount, so it is safe to retry. Ready to Assign absorbs the difference.

NameRequiredDescriptionDefault
monthNoWhich plan month (default: "current"): • "current": This calendar month • "last": The previous calendar month • "next": The next calendar month • A date: The month containing that date, such as 2024-03-01current
amountYesThe category's new assigned amount in currency units (required)
category_idYesCategory to set (required)

Output Schema

NameRequiredDescription
changesYesEach category that changed, in the order they changed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=true; the description earns extra credit by explaining WHY it is retryable (overwrite semantics) and by disclosing a non-obvious side effect: 'Ready to Assign absorbs the difference'. That budget-side effect is not derivable from the schema or annotations and is the kind of context an agent needs before mutating a budget.

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 what it does, then the sibling contrast, then the side effect. No restated field lists and nothing extraneous; the retry note is brief and functional rather than 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 3-parameter mutation with an output schema and rich annotations, the description covers the differentiating semantics and the Ready to Assign side effect, which is the main hidden behavior. Minor gaps (e.g., behavior with negative or non-numeric amounts, interaction with existing over-allocations) remain but are not blocking.

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 month enum/date union and the amount/category semantics, so the schema does the heavy lifting. The description adds only the notion that amount is the new total rather than a delta, which is already implied by 'new assigned amount' in the schema. 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 (set the assigned amount for a category in a month) with explicit scope. It also names the sibling it is not (assign_money) and the exact behavioral difference, so an agent can distinguish the two 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 Guidelines4/5

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

Explicitly contrasts with assign_money ('this replaces the assigned amount') and gives a decision-relevant property (safe to retry). It stops short of a positive rule for when assign_money is the better choice, but the replacement-vs-adjustment distinction 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_categoryUpdate categoryA
DestructiveIdempotent

Rename a category, change its note, move it to another group, or set its target. Only the fields given change.

To change what is assigned to a category, use assign_money or set_assigned.

NameRequiredDescriptionDefault
nameNoNew category name (optional)
noteNoNew category note (optional)
category_idYesCategory to update (required)
target_dateNoDate the target amount should be reached, for a balance by a date. Cannot be combined with target_frequency (optional)
target_amountNoTarget amount in currency units. Setting it on a category with no target creates a monthly NEED target (optional)
target_frequencyNoMake a repeating NEED target of target_amount every "weekly", "monthly", or "yearly". Requires target_amount (optional)
category_group_idNoGroup to move the category to (optional)
target_needs_whole_amountNoFor NEED targets, whether the whole target is needed every period (true) or the rollover counts toward it (false) (optional)

Output Schema

NameRequiredDescription
idYesUnique category identifier
nameYesCategory name
noteNoCategory notes
activityNoActivity this month (negative = spending)
assignedNoAmount assigned this month
internalNoWhether YNAB manages this category itself. 'Inflow: Ready to Assign' is internal: categorize income to it.
availableNoAmount available to spend, including rollover
target_dateNoDate the target should be met, for targets with a date
target_typeNoTarget type: NEED (needed for spending, refills each period), TB (have a balance), TBD (have a balance by a date), MF (fund monthly), DEBT (pay down a debt)
target_amountNoTarget amount
category_group_idYesCategory group ID
target_underfundedNoAmount still needed this month to stay on track
category_group_nameNoCategory group name
target_overall_leftNoAmount still needed to meet the target this period
target_percentage_completeNoHow much of the target is funded, as a percentage

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true; the description usefully mitigates the destructive concern by stating 'Only the fields given change,' i.e. PATCH-style partial semantics, so the agent knows omitted fields are not wiped. It does not disclose permission requirements or what happens when a target is unset/null-passed, which matters given the destructive flag.

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

Conciseness5/5

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

Two sentences, no filler. The capability list and the partial-update guarantee are front-loaded before the alternative-routing sentence, so the most decision-relevant information comes first.

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 with annotations and an output schema, the description covers what can change and the non-destructive-by-default field scoping. It omits edge behavior an agent might need — clearing an existing target, permission/auth expectations, and effects of target changes on budgeting — but the schema covers the parameter-level detail.

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

Parameters3/5

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

Schema description coverage is 100%, so every one of the 8 parameters (including the target_date/target_frequency conflict and target_frequency requiring target_amount) is already documented in the schema. The description only restates the field groups at a high level and leaves the key ambiguity unresolved: whether passing null clears a field versus omitting it. 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 (update) plus the resource and enumerates exactly the updateable facets: rename, note, group move, target. It also explicitly names the adjacent capabilities handled elsewhere (assign_money, set_assigned), so an agent can separate this tool from siblings that also sound like 'changing a category'.

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

Usage Guidelines4/5

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

Provides a clear routing rule for the most likely confusion: 'To change what is assigned to a category, use assign_money or set_assigned.' That is a genuine when-not clause naming alternatives. It does not cover other nearby cases (e.g., when to use create_category vs. this tool, or renaming a group via rename_category_group), so it stops short of fully explicit routing.

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

update_scheduled_transactionUpdate scheduled transactionA
DestructiveIdempotent

Change a scheduled transaction. Fields left out do not change.

Use this when a bill's amount changes, it moves to another day or account, or it repeats on a new schedule. Split scheduled transactions cannot be changed through YNAB's API.

NameRequiredDescriptionDefault
dateNoNew next date: in the future, at most 5 years out (optional)
memoNoNew memo. An empty memo clears it (optional)
amountNoNew amount in currency units (optional)
payee_idNoNew payee, by ID (optional)
frequencyNoNew frequency (optional)
account_idNoNew account (optional)
flag_colorNoNew flag color (optional)
payee_nameNoNew payee by name. Creates it if new (optional)
category_idNoNew category (optional)
transfer_account_idNoMake it a transfer with this account (optional)
scheduled_transaction_idYesScheduled transaction to change (required)

Output Schema

NameRequiredDescription
idYesUnique scheduled transaction identifier
flagNoFlag as 'Name (Color)' format
memoNoUser-entered memo
amountYesAmount in currency units (negative = spending, positive = income)
payee_idNoPayee ID
date_nextYesNext occurrence date
frequencyYesHow often it happens
account_idYesAccount ID
date_firstYesFirst occurrence date
payee_nameNoPayee name
category_idNoCategory ID
account_nameNoAccount name
category_nameNoCategory name
subtransactionsNoThe parts of a split scheduled transaction
transfer_account_idNoFor a transfer, the other account

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already declare this operation destructive and idempotent. The description adds meaningful behavioral context beyond annotations: omitted fields remain unchanged, and split scheduled transactions cannot be updated. It does not explain the practical consequences of the destructive update, but the annotation covers the safety profile.

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 partial-update rule, followed by usage scenarios and a key API limitation. Every sentence adds useful information without 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 an 11-parameter mutation tool with full schema descriptions, an output schema, and annotations covering safety behavior, the description provides enough context: what the tool changes, how omitted fields behave, when to use it, and a critical unsupported case.

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 schema carries most parameter details. The description adds the important partial-update semantic ('Fields left out do not change'), which is not explicit in the schema and affects how all optional parameters should be interpreted.

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

Purpose5/5

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

The description uses a specific verb and resource ('Change a scheduled transaction') and immediately distinguishes the operation from create/delete/enter sibling tools by naming the exact change scenarios: amount, day, account, or recurrence schedule.

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 when-to-use guidance ('when a bill's amount changes, it moves to another day or account, or it repeats on a new schedule') and one important exclusion (split scheduled transactions cannot be changed). It stops short of explicitly naming alternative sibling tools to use when this tool does not apply.

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

update_transactionsUpdate transactionsA
DestructiveIdempotent

Change one or more existing transactions in one request.

Each change names a transaction and only the fields to change; every other field stays as it is. This is the tool for reviewing transactions: approve them, categorize them, fix payees, set memos, flag them, or mark them cleared.

Example changes:

  • Approve and categorize: {id: , approved: true, category_id: }

  • Fix the payee: {id: , payee_name: "Costco"}

  • Clear the memo and the flag: {id: , memo: "", clear_flag: true}

NameRequiredDescriptionDefault
changesYesThe changes, one per transaction (required)

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Beyond annotations, the description discloses partial-update behavior ('only the fields to change; every other field stays as it is') and batch semantics ('one or more existing transactions in one request'). It does not explain atomicity, failure behavior, or permission requirements, but the annotations already carry destructive, idempotent, and readOnly hints.

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

Conciseness5/5

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

The definition is front-loaded with the core operation, then adds compact examples. The sentences and bullets are information-dense without being bloated.

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 full schema coverage, an output schema, and rich annotations, the description covers batch updates, partial updates, and common update scenarios. Missing atomicity or error-handling details are minor for this tool because structured fields already cover return and safety semantics.

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, default, enum, and update constraint. The description's example changes reinforce usage but add little semantic detail beyond what the schema already provides, fitting 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?

The description opens with a specific verb and resource: 'Change one or more existing transactions in one request.' It scopes the operation to existing transactions and names concrete update types, making it distinguishable from create/delete transaction siblings.

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

Usage Guidelines4/5

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

It clearly states this is the tool for reviewing transactions and lists approve, categorize, fix payees, set memos, flag, and mark cleared. It does not explicitly name when not to use it or point to sibling alternatives, but the intended usage context is strong.

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. 32 tool updatesv0.1.0
    • First observedassign_money
    • First observedcreate_account
    • First observedcreate_category
    • First observedcreate_category_group
    • First observedcreate_payee
    • First observedcreate_scheduled_transaction
    • First observedcreate_transactions
    • First observeddelete_scheduled_transaction
    • First observeddelete_transaction
    • First observedenter_scheduled_transaction
    • First observedfind_payee
    • First observedget_month_category
    • First observedget_plan
    • First observedget_plan_month
    • First observedget_scheduled_transaction
    • First observedget_transaction
    • First observedimport_transactions
    • First observedlist_accounts
    • First observedlist_categories
    • First observedlist_category_groups
    • First observedlist_money_movements
    • First observedlist_payees
    • First observedlist_plan_months
    • First observedlist_scheduled_transactions
    • First observedlist_transactions
    • First observedmove_money
    • First observedrename_category_group
    • First observedrename_payee
    • First observedset_assigned
    • First observedupdate_category
    • First observedupdate_scheduled_transaction
    • First observedupdate_transactions

TDQS

A3.5/5.0

Scored across 32 tools

Disambiguation5/5

Tools are organized by resource and action, and near-neighbors are explicitly contrasted: assign_money vs set_assigned vs move_money, list_payees vs find_payee, and get_plan_month vs get_month_category. An agent can reliably distinguish the intended tool from names and descriptions.

Naming Consistency5/5

Names consistently use snake_case with verb-first patterns such as get_, list_, create_, update_, delete_, and rename_. Pluralization is semantically consistent for batch-oriented transaction tools, and exceptions like set_assigned remain clear.

Tool Count3/5

32 tools is a heavy surface for an MCP server and may strain tool selection, even though the YNAB domain is broad and most tools map to real operations. The set is cohesive and not duplicative, but it sits above the comfortable range.

Completeness4/5

Core workflows are well covered: transaction and scheduled-transaction lifecycles are complete, money movement is supported, and plan/category/account/payee reads and creates/updates exist. Gaps remain around account/category/payee deletion and some detail lookups, though these may reflect YNAB API limits.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    An MCP server that allows users to interact with YNAB data, enabling access to account balances, transactions, and the creation of new transactions through the Model Context Protocol.
    8
    6
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    A Model Context Protocol server that enables AI-powered interaction with YNAB (You Need A Budget) data, allowing users to query their budgets through conversational interfaces.
    22
    508 npm
    160
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server for interacting with YNAB (You Need A Budget). Provides tools for accessing budget data through MCP-enabled clients like Claude Desktop.
    4
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that exposes the full YNAB API, allowing LLMs to read and manage budgets, accounts, and transactions through natural language. It features 49 specialized tools for comprehensive financial management, including category updates, money movements, and transaction tracking.
    47
    108 npm
    MIT