Skip to main content
Glama
oliverames

YNAB MCP Server

by oliverames

Search Transactions

search_transactions
Read-onlyIdempotent

Search YNAB transactions by text or amount, with pagination, to return focused results instead of large budget dumps.

Instructions

Search transactions by text and/or amount, with pagination. The server fetches the (optionally account- and date-bounded) transaction list from YNAB and filters it before responding, so a busy budget returns a small page instead of a multi-megabyte dump that can exceed client tool timeouts. 'query' is a case-insensitive substring match over payee_name, import_payee_name_original (raw bank string), memo, account_name, category_name, and split rows' payee/memo/category. 'amount' matches on absolute value with half-cent tolerance, so 12.34 finds a -12.34 outflow. Results are newest-first; page with limit/offset using the returned next_offset. Provide at least one of query or amount.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoPage size (default 50, max 500)
queryNoText to find in payee, raw import payee, memo, account, or category (case-insensitive substring)
amountNoAmount in dollars to match on absolute value (12.34 matches -12.34 and 12.34)
offsetNoNumber of matches to skip (default 0); pass next_offset from the previous page
budgetIdNoBudget ID (uses default if not provided)
accountIdNoRestrict the search to one account
sinceDateNoOnly search transactions on or after this date (YYYY-MM-DD). If omitted, YNAB defaults to one year ago.
untilDateNoOnly search transactions on or before this date (YYYY-MM-DD)

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv5.4.0

TDQS

A4.8/5.0
Behavior5/5

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

Despite strong annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false), the description adds substantial behavioral detail: the server fetches and filters locally, query is a case-insensitive substring over specific fields, amount matches on absolute value with half-cent tolerance, results are newest-first, and pagination uses next_offset. This goes far beyond what the annotations alone communicate and is consistent with them.

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

Conciseness5/5

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

The description is front-loaded with the core purpose and then efficiently delivers high-value details: implementation rationale, field coverage, amount tolerance, ordering, pagination, and a required-argument constraint. Every sentence earns its place. It is detailed but not bloated, and the most important information appears first.

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?

This is a complex, eight-parameter tool, but the description covers the essential usage contract thoroughly: what is searched, how amount matching behaves, optional bounds, result ordering, pagination, and the minimum-argument requirement. An output schema exists for return shapes, and annotations cover safety, so no critical operational context is missing.

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

Parameters5/5

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

Schema description coverage is 100%, but the description still adds crucial meaning: the exact set of fields query searches, the absolute-value half-cent tolerance for amount, the account/date bounding behavior, and the requirement to provide at least one of query or amount. It also explains the limit/offset pagination contract with next_offset, enriching the schema's otherwise mechanical parameter descriptions.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Search transactions by text and/or amount, with pagination.' It clearly differentiates this from listing tools by emphasizing text/amount filtering and pagination, and even details the exact fields searched. An agent can immediately identify what this tool does.

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

Usage Guidelines4/5

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

The description gives clear context for use: it filters a potentially large YNAB transaction list and returns a small page, explicitly advising against multi-megabyte dumps that could exceed timeouts. It also states the requirement 'Provide at least one of query or amount' and explains pagination via next_offset. It does not explicitly name a sibling alternative such as get_transactions when no filtering is needed, so it stops short of a full when-to-use/when-not-to-use contrast.

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