Skip to main content
Glama

Bankstatemently

Server Details

Convert PDF bank statements into structured transactions, accounts, and balances.

Ownership verified
Status
Healthy
Uptime
100.0% over 62 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
bankstatemently/plugins
GitHub Stars
1
Server Listing
bankstatemently

TDQS

A3.8/5.0

Scored across 22 tools

Disambiguation4/5

Most tools target clearly distinct resources/actions, and the descriptions for list_transactions vs list_outflows vs list_transfers explicitly warn against confusing them. The one soft spot is the analytics cluster (aggregate, compare, group_by, time_series, top_n), where an agent may hesitate between 'single metric', 'group by dimension', and 'top N', though the descriptions do delineate them.

Naming Consistency4/5

Names are uniformly snake_case and mostly follow a verb_noun pattern (convert_statement, adjudicate_outflows, list_transfers, create_memory). A handful of standalone bare terms (aggregate, compare, group_by, time_series, top_n) deviate from the pattern but remain clear and readable.

Tool Count3/5

At 22 tools this is on the heavy side of the 3-15 sweet spot, and five of them form an analytics cluster (aggregate/compare/group_by/time_series/top_n) that could plausibly collapse into fewer parameterized tools. Each still has a defensible purpose across the statement lifecycle, memories, transfers/outflows, credits, and benchmark, so it is borderline rather than bloated.

Completeness4/5

The surface covers a lot: conversion (convert/get/list/dismiss/rate/categorize), analysis (aggregate/compare/group_by/time_series/top_n), transfer and outflow reconciliation with adjudication, uploads, credits, memory, and benchmark evaluation. Minor gaps remain, e.g. no delete_memory and no explicit re-process/update for statements, but agents can work around these.

Available Tools

22 tools
adjudicate_outflowsAdjudicate OutflowsAInspect

Decide where an "unresolved" debit from list_outflows went (the documents' claims conflict and nothing settles them). Pass "verdict" and "transactionIds" when the user has told you; leave "verdict" out to let the AI judge decide the named rows, or every unresolved row. Returns the updated list_outflows answer.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoOptional structural scope (WHO × WHEN). Omit to search across all your completed statements. "accounts" is a list of account/product chips ({ kind: "account" | "product", id }, the id of an account descriptor or product returned by a tool); "dateRange" bounds by transaction date (YYYY-MM-DD).
verdictNoWhere the money went, as the user said. Omit to let the judge decide.
dateRangeNoSame range as list_outflows: which debits the returned list_outflows answer reports.
transactionIdsNotransactionId of rows as list_outflows returned them in "unresolved". Required with verdict; omit to judge every unresolved row.

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeYes
dateRangeYes
unresolvedYes
adjudicationYes
destinationsYes
mayBeOwnAccountYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations disclose this is a write (readOnlyHint=false) but non-destructive (destructiveHint=false). The description adds meaningful behavior beyond that: the fallback-to-judge semantics and that it returns the updated list_outflows answer, so the agent knows the effect is recording a verdict rather than mutating raw data.

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

Conciseness5/5

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

Three tightly packed sentences: the action and its precondition first, then parameter-handling rules, then the return. No filler and the most important information is front-loaded.

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

Completeness4/5

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

With an output schema present the return need not be explained, and the nested scope/dateRange parameters are fully schema-documented. The description covers the judge fallback and the data source, leaving only minor implicit details (permissions, reversibility) unstated.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning by explaining the verdict/transactionIds interaction and the default scope ('every unresolved row'). That conditional coupling of parameters is not obvious from the schema alone.

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 ('Decide where an "unresolved" debit went') and names its data source (list_outflows), which makes the operation concrete. It does not explicitly distinguish itself from the sibling adjudicate_transfers, so an agent must infer that this handles outflows while that one handles transfers.

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

Usage Guidelines4/5

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

Gives clear conditional guidance: pass verdict/transactionIds when the user has stated the answer; omit verdict to let the AI judge decide the named rows or every unresolved row. The trigger (unresolved debits whose documentary claims conflict) is stated, though no explicit exclusion or alternative tool is named.

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

adjudicate_transfersAdjudicate TransfersAInspect

Decide whether ambiguous pairs from list_transfers are transfers. Pass "verdict" when the user has told you; leave it out to let the AI judge decide. Returns the updated list_transfers answer.

ParametersJSON Schema
NameRequiredDescriptionDefault
pairsNoPairs as list_transfers returned them. Required with verdict; omit to judge every open pair.
scopeNoOptional structural scope (WHO × WHEN). Omit to search across all your completed statements. "accounts" is a list of account/product chips ({ kind: "account" | "product", id }, the id of an account descriptor or product returned by a tool); "dateRange" bounds by transaction date (YYYY-MM-DD).
verdictNoThe user's verdict. Omit to let the judge decide.
amountMinNoSame floor as list_transfers.

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeYes
ambiguousYes
transfersYes
unmatchedNo
adjudicationYes
ambiguousCountYes
matchWindowDaysYes
accountSuccessionsYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already convey that this is not read-only (readOnlyHint=false), so the agent knows a mutation occurs, and the description adds the useful behavioral fact that omitting verdict delegates to an AI judge. It never says what is persisted or whether a written verdict is reversible, which matters for a non-read-only tool.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core action and followed by the conditional rule and return value. 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, so return values need not be explained, and the description correctly notes it returns the updated list_transfers answer. Scope and pair semantics are fully covered in the schema; the only gap is any note on persistence/effect of the verdict in a non-read-only operation.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents pairs, scope, verdict and amountMin in detail, including the omit-to-auto-judge behavior. The description largely restates the verdict/pairs semantics rather than adding syntax or format 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 a specific verb and resource — deciding whether ambiguous pairs from list_transfers are transfers — which is clearly distinct from list_transfers itself and parallel to the sibling adjudicate_outflows. It does not explicitly name the alternative, but the purpose is unambiguous.

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

Usage Guidelines4/5

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

"Pass 'verdict' when the user has told you; leave it out to let the AI judge decide" gives a clear conditional rule for choosing between the two modes of the call. What is left implicit is the trigger for calling the tool at all (i.e., only after list_transfers yields ambiguous pairs), though the first sentence strongly implies this workflow.

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

aggregateAggregate TransactionsA
Read-only
Inspect

Compute a single metric (sum/average/count/max/min) over a filtered set of transactions across your converted statements. Results are per-currency — never sum across currencies yourself. Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range. For "how many credits do I have" / processing quota / remaining pages, use get_credits instead — that is not a transaction.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoOptional structural scope (WHO × WHEN). Omit to search across all your completed statements. "accounts" is a list of account/product chips ({ kind: "account" | "product", id }, the id of an account descriptor or product returned by a tool); "dateRange" bounds by transaction date (YYYY-MM-DD).
filterNoSubset of transactions to operate on. All fields are optional and combined with AND logic.
metricYesAggregation metric.

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeYes
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds a genuinely non-obvious behavioral rule beyond the structured data: results are per-currency and must never be summed across currencies. It does not mention limits, row caps, or result ordering, so it is not exhaustive.

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

Conciseness5/5

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

Four tight sentences, front-loaded with what is computed, then the currency constraint, then scope defaults, then sibling routing. No filler and no restatement of the schema.

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, so return values need not be described, and the description covers the metric/scope/filter mental model adequately for a 3-parameter tool with nested objects. It omits any mention of cost, pagination, or how per-currency results are keyed, which is a minor gap.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description still adds value by documenting the scope default ('all your completed statements' when omitted) and the WHO × WHEN intent of the scope object, plus the semantic distinction between 'credit' direction and account credit balance.

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 ('Compute a single metric ... over a filtered set of transactions across your converted statements') and enumerates the metric set. The word 'single' implicitly separates it from group_by/time_series/compare siblings, and the routing line to get_credits fences off a common conflation.

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

Usage Guidelines4/5

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

Explicitly states the default scope ('Scope defaults to all your completed statements') and the override ('pass "scope" to narrow to specific accounts/products and/or a date range'). It also names an alternative tool and the exact user intent that should route there (credits/quota/pages → get_credits), though it does not contrast with group_by, time_series, or top_n, which an agent must infer.

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

categorize_statementCategorize TransactionsAInspect

Run AI transaction categorization on a previously processed document, then return its category mappings. Returns cached categories with no charge if this document was already categorized. Consumes credits (pooled per page, same rate as the categorize toggle on the website) the first time — free on every re-fetch after. Every response includes a "summary" field: use it as the single source of truth for what happened.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesDocument ID (from convert_statement or list_statements)

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
errorNo
statusYes
messageNo
summaryNo
documentIdNo
categoryMappingsNo

TDQS

A4.4/5.0
Behavior5/5

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

The description discloses credit consumption, page-pooled pricing, caching behavior, and the always-present summary field. This goes well beyond the sparse annotations and aligns with readOnlyHint=false, since categorization incurs credits on first use.

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

Conciseness4/5

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

The description is front-loaded with the primary action and then adds cost/caching and response guidance. There is slight redundancy between 'Returns cached categories with no charge' and 'free on every re-fetch after,' but the paragraph is compact and focused.

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

Completeness5/5

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

For a single-parameter tool with an output schema and annotations, the description covers prerequisites, cost behavior, caching, and response interpretation ('summary' field). An agent has enough information to call it correctly without external 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?

There is only one parameter and the input schema already describes document_id with 100% coverage, including its source. The description's 'previously processed' reinforces the prerequisite without adding significant new semantic detail.

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

Purpose5/5

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

The description names a specific verb and resource ('Run AI transaction categorization on a previously processed document') and states the deliverable ('return its category mappings'). It clearly distinguishes this tool from listing, conversion, and comparison siblings by focusing on categorization of an already-processed document.

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 phrase 'previously processed document' and the parameter description 'from convert_statement or list_statements' give clear prerequisite context for when to call it. It does not explicitly name alternatives or exclude cases like raw/unprocessed documents, but the intended usage is evident.

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

compareCompare Transaction GroupsA
Read-only
Inspect

Side-by-side metric comparison for two filtered groups of transactions (e.g. one category vs another, one month vs another). Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoOptional structural scope (WHO × WHEN). Omit to search across all your completed statements. "accounts" is a list of account/product chips ({ kind: "account" | "product", id }, the id of an account descriptor or product returned by a tool); "dateRange" bounds by transaction date (YYYY-MM-DD).
metricYesMetric for both groups.
filterAYesSubset of transactions to operate on. All fields are optional and combined with AND logic.
filterBYesSubset of transactions to operate on. All fields are optional and combined with AND logic.

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeYes
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare this a safe read-only operation (readOnlyHint=true, destructiveHint=false), lowering the burden. The description adds the useful default-scope behavior ('all your completed statements'), but that fact is largely restated from the schema's scope description, and no output or performance characteristics are added.

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

Conciseness4/5

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

Two tight sentences with the core comparison purpose front-loaded, followed by the scope default and override. No filler, though the scope sentence duplicates schema content.

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 not be explained, and the annotations cover the safety profile. The description plus rich schema is sufficient for a 3-required-param comparison tool, though it could clarify how the two filter groups relate to metric selection.

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 filterA, filterB, metric, and scope are already fully documented in the schema, making 3 the baseline. The description re-frames 'scope' as WHO × WHEN narrowing but adds little syntactic or semantic detail beyond what the schema provides.

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

Purpose4/5

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

The description states a specific verb (side-by-side metric comparison) and resource (two filtered groups of transactions) with concrete examples (category vs category, month vs month). It clearly separates 'compare' from aggregation-style siblings, though it never names an alternative like aggregate or group_by explicitly.

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

Usage Guidelines3/5

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

It explains the default scope and how to narrow via 'scope', which implies when the scoping argument matters. However, it gives no guidance on when to use compare vs siblings such as aggregate, group_by, or time_series, leaving the choice to inference.

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

convert_statementConvert Bank StatementAInspect

Convert a bank statement PDF into structured data or a spreadsheet. When the user attaches a PDF in the conversation, it arrives automatically as pdf_file — never encode it yourself. Otherwise, pass pdf_url for a public HTTPS link. If your host has no way to reference the attached file at all (no pdf_file/pdf_url equivalent), call request_upload first and pass its upload_id here instead. The base64 pdf parameter is a last resort only, for a caller with no other way to reference the file. To convert several statements in one call, pass upload_ids (the array from a single request_upload call made with count set) instead of pdf/pdf_url/pdf_file/upload_id — mutually exclusive with those four. This batch form only ADMITS each file (queues it, or reports an already-completed duplicate) and returns immediately with a compact per-file status list plus a summary — it never waits for conversion, so call get_statement per document_id once ready rather than expecting inline results here. Returns accounts, transactions, and metadata. output_format "json" (default) returns the data inline, renderable in chat. The other formats (csv, xlsx, qbo, xero) return a time-limited download link instead: present it as a normal link. Every response includes a "summary" field: use it as the single source of truth for what happened. If the conversation is not in English, translate it faithfully into the conversation language; never add details it doesn't contain. Never echo raw status values (e.g. "completed") or field names. Consumes credits (1 per page). Page limit depends on your plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
pdfNoBase64-encoded PDF content — last resort only; prefer pdf_file for an attachment or pdf_url for a link
pdf_urlNoHTTPS URL to fetch the PDF from
passwordNoPassword for encrypted PDFs
pdf_fileNoAn attached PDF (populated automatically by ChatGPT — do not construct this yourself).
upload_idNoAn upload_id from request_upload, after PUTting the file to its upload_url. Use this only when your host has no other way to reference the attached file (no pdf_file/pdf_url equivalent).
upload_idsNoBatch of upload_ids from a single request_upload(count) call, each already PUT to its own upload_url — converts many statements in one call. Mutually exclusive with pdf, pdf_url, pdf_file, and upload_id. Admission only: the response reports per-file status immediately, never waiting for conversion — fetch results per document_id via get_statement.
output_formatNoOutput formatjson

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
errorNo
gatingNo
statusYes
columnsNo
messageNo
resultsNo
summaryNo
dataModeNo
documentNo
warningsNo
elapsedMsNo
exportUrlNo
documentIdNo
paginationNo
transactionsNo
confidenceScoreNo
estimateSecondsNo
processingStageNo
transactionCountNo
processingProgressNo

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses credit cost (1 per page), plan-dependent page limits, that batch mode is admission-only and returns immediately with per-file status, that non-JSON formats return time-limited download links, and that 'summary' is the source of truth for what happened. These are consequential behaviors an agent cannot infer from readOnlyHint=false / openWorldHint=true.

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

Conciseness4/5

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

Long but densely front-loaded and almost every sentence carries operational weight (input selection, batch semantics, format behavior, credits). The presentation instructions about translating the summary and not echoing raw status values are useful but somewhat verbose relative to the rest, keeping it just short of a 5.

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

Completeness5/5

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

For a 7-parameter tool with nested objects, batch mode, five output formats, and credit implications, the description covers every decision the caller must make. An output schema exists so return structure needn't be detailed, and the description correctly limits itself to behavioral guidance rather than field enumeration.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: a preference ordering among the four single-file inputs (pdf_file > pdf_url > upload_id > pdf), the mutual exclusivity of upload_ids with the others, and the fact that upload_ids come from a single request_upload(count) call. It doesn't add syntax details for output_format beyond the enum already in the schema.

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

Purpose5/5

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

States a specific verb (convert) and resource (bank statement PDF) plus the output forms (structured data or spreadsheet). It is clearly distinguishable from siblings like get_statement (retrieval), categorize_statement, and list_statements, so an agent can route without opening another 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?

Gives explicit conditional routing for every input path: pdf_file when attached, pdf_url for a public link, request_upload + upload_id only when the host has no file reference, and pdf as a last resort. It also names the alternative explicitly — 'call get_statement per document_id once ready rather than expecting inline results here' — leaving nothing to inference.

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

create_memoryCreate MemoryBInspect

Create a named memory: a scoped lens over your accounts and dates with a user-authored name, optional situation ("bookkeeping", "divorce" or "estate"), and ChatScope. Free to use — no credits consumed.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesUser-authored memory name, such as a client, case, or matter name.
scopeYesThe accounts/products and optional date range this memory covers.
situationYesOptional matter this memory is about: bookkeeping, divorce, estate, or null.

Output Schema

ParametersJSON Schema
NameRequiredDescription
memoryYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the write/non-destructive profile is covered. The description adds one genuinely useful behavioral fact beyond the schema — 'Free to use — no credits consumed' — but says nothing about name uniqueness, persistence, or what happens on failure.

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

Conciseness4/5

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

A single front-loaded sentence that defines the resource before listing its parts, with zero filler. It is dense — three parameter mentions packed into one em-dash clause — but nothing is wasted.

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

Completeness3/5

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

Return values need not be explained since an output schema exists, and annotations cover safety. For a create tool with required nested scope and a null-able situation, however, the description omits lifecycle context (uniqueness, persistence, post-creation behavior) that an agent would need to call it confidently.

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

Parameters3/5

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

Schema description coverage is 100% with fully documented nested scope/accounts/dateRange, so the schema carries the semantic load. The description restates the parameters (name, situation, scope) and adds a framing ('scoped lens') but no format or constraint detail beyond the schema.

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

Purpose4/5

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

Specific verb+resource ('Create a named memory') followed by a concise conceptual definition of what a memory is ('a scoped lens over your accounts and dates'). An agent instantly knows this is a creation tool for a scoping construct, though it never names siblings like list_memories or update_memory to sharpen differentiation.

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 when-to-use guidance is provided: nothing says when to create a memory versus using inline scope/date filters, how it interacts with update_memory, or whether memories persist across sessions. Only an implied usage context from the resource definition.

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

dismiss_statementDismiss StatementA
Destructive
Inspect

Hide a failed, rejected, or cancelled document from future list_statements results. Use this only when the user asks to clear a terminal failed/rejected/cancelled conversion from their history. This is not a delete: it marks the document dismissed and leaves stored data/artifacts untouched.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesDocument ID from list_statements, convert_statement, or get_statement

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
summaryYes
documentIdYes

TDQS

A4.4/5.0
Behavior4/5

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

The description adds context beyond the annotations: it clarifies that the operation marks the document as dismissed and leaves stored data/artifacts untouched, which is important given destructiveHint=true. It doesn't fully describe side effects like whether the dismissal is reversible, but the key behavioral trait 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?

Three sentences, each earning its place: the action, the usage condition, and the non-delete clarification. Front-loaded with the main purpose.

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

Completeness4/5

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

For a single-parameter tool with a clear purpose and annotations, the description is nearly complete. It could mention whether the dismissal can be undone, but the core context needed to invoke it correctly is present.

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

Parameters3/5

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

Schema coverage is 100% and the only parameter (document_id) is already described in the schema. The description doesn't add extra parameter-level detail, but with a single well-documented parameter, the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Hide a failed, rejected, or cancelled document from future list_statements results') with a specific verb and resource. It also distinguishes itself from a delete operation, which is important given the sibling tools and the destructiveHint annotation.

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

Usage Guidelines5/5

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

The description explicitly says when to use it ('only when the user asks to clear a terminal failed/rejected/cancelled conversion from their history') and what it is not ('This is not a delete'). This gives clear guidance for an agent to select this tool over alternatives.

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

evaluate_benchmarkEvaluate BenchmarkA
Read-only
Inspect

Score parsed bank statement transactions against the Bankstatemently benchmark ground truth. Accepts a statement_id (e.g. "bsb-001") or content_hash, plus your parsed transactions. Returns extraction accuracy, integrity score, and an overall score. Only statements marked published: true in the catalog can be evaluated — held-out statements return an error. transactions[].originalData is optional but strongly recommended: fetch it via get_statement with data_mode: "original" and pass it through verbatim — an absent originalData scores that transaction's raw-fidelity (parsed) dimension 0; never fabricate a value. Free to use — no credits consumed. Read the benchmark://catalog resource first to see available statements and their published status.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountsNoOptional account roster for multi-account statements. Each transaction references one via accountId.
content_hashNoSHA-256 hex digest of the PDF. Use statement_id instead if you know it.
statement_idNoBenchmark statement ID (e.g. "bsb-001"). Preferred over content_hash.
transactionsYesParsed transactions (1-2000)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
challengesYes
difficultyYes
contentHashNo
parsedScoreYes
datasetVersionNo
normalizedScoreYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond that: the published-only restriction, the held-out error behavior, the scoring rule that absent originalData zeroes the raw-fidelity dimension, the explicit 'never fabricate a value' instruction, and the 'free to use — no credits consumed' note. These are exactly the behavioral traits an agent needs to know and cannot infer from annotations or schema.

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

Conciseness4/5

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

The description is dense but every sentence earns its place: purpose, identifiers, return values, published-only constraint, originalData guidance, cost note, and catalog pointer. It is front-loaded with the core purpose and the most decision-relevant constraint (published-only) appears early. It loses one point for being slightly long and for burying the 'read the catalog first' instruction at the end, which is arguably the first thing an agent should do.

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 benchmark-evaluation tool with a rich output schema, the description covers everything an agent needs to call it correctly: what to pass, which identifier to prefer, the published-only gate, the originalData fidelity rule, the no-fabrication constraint, and the cost implication. The output schema exists, so the description needn't enumerate return fields. The only minor gap is that it doesn't explicitly say what happens if both statement_id and content_hash are omitted, but the schema's required field is transactions, so that's not a real gap.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already documents all four parameters well. The description adds value by clarifying the relationship between statement_id and content_hash ('Use statement_id instead if you know it'), by explaining the originalData scoring consequence, and by emphasizing that originalData should be passed verbatim. It doesn't add much about accounts or transactions, but the schema already covers those thoroughly, so the baseline-3-plus-incremental-value score of 4 is appropriate.

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

Purpose5/5

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

The description opens with a specific verb ('Score') and resource ('parsed bank statement transactions against the Bankstatemently benchmark ground truth'), and immediately distinguishes this from sibling tools like rate_statement or categorize_statement by naming the benchmark context. It also names the two accepted identifiers (statement_id, content_hash) and the returned metrics, so an agent can tell exactly what this tool does and what it produces.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: only statements marked published: true can be evaluated, held-out statements error, and the agent should read the benchmark://catalog resource first. It also gives a concrete workflow hint — fetch originalData via get_statement with data_mode: 'original' and pass it through verbatim — which routes the agent to the correct sibling tool and mode. This is unusually actionable.

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

get_creditsGet Credit BalanceA
Read-only
Inspect

Your remaining Bankstatemently credits — the processing quota, NOT credit/debit transactions. Use for: how many credits do I have, remaining pages, plan limits, quota, how many pages can I upload. 1 credit = 1 page of bank statement processing. Also reports your plan's operational limits (max pages per upload, max upload size, daily spend cap) so you can size a multi-file batch correctly before starting it.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
planYes
limitYes
planIdYes
balanceYes
grantedYes
summaryYes
creditsExpireAtYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish read-only/non-destructive. The description adds value beyond them: the quota unit ('1 credit = 1 page'), and the fact that plan operational limits (max pages per upload, max upload size, daily spend cap) are returned, which tells the agent this call is useful before batching.

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 core meaning and the disambiguation first, then the use cases, then the quota unit and returned limits. Every sentence earns its place; the trigger-query list is compact rather than padded.

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 an output schema present, the description need not detail return fields, and it correctly summarizes what comes back (quota plus plan limits). For a zero-parameter, read-only tool this is complete.

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

Parameters4/5

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

Zero parameters, so there is no argument semantics to explain; baseline 4 applies. The description correctly avoids inventing parameter details that do not exist.

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

Purpose5/5

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

Specific verb+resource ('remaining Bankstatemently credits') immediately disambiguated from the common false reading ('NOT credit/debit transactions'). An agent cannot confuse this with transaction-listing siblings like list_transactions.

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 enumerates trigger queries ('how many credits do I have, remaining pages, plan limits, quota, how many pages can I upload') and the pre-batch sizing use case. It clarifies conditions for use, but does not name a competing sibling tool or an explicit when-not-to-use.

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

get_statementGet Statement DataA
Read-only
Inspect

Fetch the full converted data for a previously processed document. Use this after convert_statement returns a "processing" status, or to re-fetch results. output_format "json" (default) returns the data inline, renderable in chat. The other formats (csv, xlsx, qbo, xero) return a time-limited download link instead: present it as a normal link. data_mode selects which projection of the data you get: omit it for each output_format's existing default behavior. "normalized" is the cleaned, interpreted view; "original" includes each transaction's raw column values exactly as printed on the source PDF (originalData); "enhanced" is a reformatted view of the original columns (csv/xlsx only for now). Fetch data_mode: "original" when you plan to submit results to evaluate_benchmark — pass its originalData through verbatim; an absent originalData scores that benchmark's raw-fidelity dimension 0 for this document. Every response includes a "summary" field: use it as the single source of truth for what happened. If the conversation is not in English, translate it faithfully into the conversation language; never add details it doesn't contain. Never echo raw status values (e.g. "completed") or field names.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNooutput_format "json" only. Max transactions to return (default 500, capped at 2000, or 500 with data_mode "original").
offsetNooutput_format "json" only. Number of transactions to skip. Omit to start from the beginning.
data_modeNoOmit for each output_format's existing default behavior (json: normalized; csv/xlsx: the export route's own default). "normalized": the cleaned, interpreted data. "original": includes each transaction's raw column values as printed on the source PDF (originalData) — fetch this before submitting to evaluate_benchmark. "enhanced": a reformatted view of the original columns; only available for output_format csv/xlsx today. qbo/xero always export normalized data — omit data_mode (or pass "normalized" explicitly) for those formats.
document_idYesDocument ID (from convert_statement or list_statements)
output_formatNoOutput formatjson

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
errorNo
gatingNo
statusYes
columnsNo
messageNo
resultsNo
summaryNo
dataModeNo
documentNo
warningsNo
elapsedMsNo
exportUrlNo
documentIdNo
paginationNo
transactionsNo
confidenceScoreNo
estimateSecondsNo
processingStageNo
transactionCountNo
processingProgressNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare a safe, read-only, closed-world operation, and the description adds substantial non-obvious behavior on top: json returns inline data whereas csv/xlsx/qbo/xero return a time-limited download link, qbo/xero always export normalized data, and an absent originalData zeroes a benchmark dimension. It also discloses the required handling of the 'summary' field. This is context the annotations cannot provide.

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

Conciseness4/5

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

Front-loaded with purpose and the convert_statement dependency, then descending into format and mode detail. It is dense rather than padded, though the data_mode explanation duplicates its schema description and the response-handling instructions at the end lengthen it beyond the tool's core contract.

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 an output schema present, return values need not be re-explained, yet the description still covers the one ambiguous return element (the 'summary' field as source of truth) plus translation and output-format presentation rules. Nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: the download-link versus inline distinction per output_format, the link-presentation instruction, and the evaluate_benchmark rationale for data_mode 'original'. The data_mode semantics are largely restated from the schema, which keeps this from a 5.

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 ('fetch the full converted data for a previously processed document') and explicitly positions itself relative to the sibling convert_statement ('use this after convert_statement returns a "processing" status'). An agent can distinguish it from convert_statement and list_statements without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use triggers (after a 'processing' status, or to re-fetch) and a concrete downstream condition for data_mode: 'original' ('when you plan to submit results to evaluate_benchmark'). It also names the alternative formats and their behavior, leaving nothing to inference.

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

group_byGroup TransactionsA
Read-only
Inspect

Group transactions by a dimension (month/category/counterparty/account/currency) and apply a metric to each group. Results are per-currency. The "counterparty" dimension keys on the printed counterparty, else a printed account mask (••1234), else the description's name tokens, so a rail word or reference number never splits one payee; a line with no key groups under "unknown". Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoOptional structural scope (WHO × WHEN). Omit to search across all your completed statements. "accounts" is a list of account/product chips ({ kind: "account" | "product", id }, the id of an account descriptor or product returned by a tool); "dateRange" bounds by transaction date (YYYY-MM-DD).
filterNoSubset of transactions to operate on. All fields are optional and combined with AND logic.
metricYesMetric per group.
dimensionYesGrouping dimension.

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeYes
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial behavior beyond the readOnly/destructive/openWorld annotations: results are computed per-currency, the counterparty keying fallback chain (printed counterparty, then account mask, then description name tokens) so rail words or reference numbers never split a payee, and unkeyed lines land in an "unknown" bucket. These are exactly the traits an agent needs to interpret output correctly.

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

Conciseness4/5

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

Front-loads the purpose, then layers in the per-currency caveat and scope default. Three sentences with no filler, though the counterparty sentence is clause-heavy and could be split for faster scanning.

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 so return shape needn't be explained; the description covers the non-obvious semantics (per-currency results, default scope, unknown bucket) that an agent would otherwise guess wrong. Minor gaps remain around pagination/limits and how metrics behave across multiple currencies in one result set.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning for the ambiguous enum value: it defines how "counterparty" is keyed and what happens when no key exists, plus the default behavior of the optional scope object. It adds nothing for metric or filter, keeping it short of a 5.

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 (group), resource (transactions), the exact grouping axes, and the metric applied per group, which lets an agent separate it from aggregate, time_series, and top_n without opening a schema. The enumerated dimensions map directly to the required parameter.

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 operating context: scope defaults to all completed statements, and passing "scope" narrows to accounts/products and/or a date range. It never names a sibling alternative or states when another tool would be the better choice, so the guidance is clear but not exclusionary.

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

list_memoriesList MemoriesA
Read-only
Inspect

List your memories, default memory first. The default memory covers the whole workspace. Named memories include name, situation and scope. Free to use — no credits consumed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
memoriesYes

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, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful non-annotation behavior: the default memory's workspace-wide coverage and the fact that the operation consumes no credits. It does not cover pagination or result-size behavior, but that is mitigated by the presence of an output schema.

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

Conciseness5/5

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

The description is four short sentences, front-loaded with the action ('List your memories, default memory first'). Each sentence contributes unique information: ordering, default-memory scope, named-memory fields, and cost. No sentence is wasted or redundant.

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

Completeness4/5

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

For a zero-parameter read tool with a rich output schema and clear annotations, the description covers what memories are, the default-vs-named distinction, ordering, and cost. It could optionally tie into the create/update workflow, but 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.

Parameters4/5

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

The tool takes zero parameters, so per the rubric the baseline is 4. Schema coverage is 100% (trivially, on an empty object), and there are no parameters needing semantic explanation. The description does not need to compensate for any parameter gap.

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

Purpose4/5

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

The description gives a specific verb+resource ('List your memories') and clarifies scope by contrasting the default memory (whole workspace) with named memories (name, situation, scope). It does not explicitly name or differentiate from sibling tools like create_memory or update_memory, 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?

Usage is implied by the core instruction 'List your memories', and the cost note ('Free to use — no credits consumed') helps an agent decide to call it. However, there is no explicit when-to-use guidance, no when-not-to-use conditions, and no mention of alternatives such as create_memory or update_memory.

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

list_outflowsList Money That Left Your AccountsA
Read-only
Inspect

Every debit that left your accounts — in no confirmed transfer between your own accounts, and not a fee — each in ONE destination whose kind is also its next step: "own-account" (a printed account mask that names one of your accounts and no matched credit was found: ask for that account's statement), "account" (a printed account mask for an account outside your statements: request that account's statements; an in-kind move such as securities, crypto or escrow starts as a wire to that account and becomes visible only once the receiving statement is uploaded), "cash" (cash out: where it went cannot be followed, so the cumulative amount is the finding), "name" (a named party: review whether it was household spending) and "unknown" (nowhere the line says; kept visible, one entry per line, never merged). A destination carries the cumulative amount sent, per currency, never a balance. "mayBeOwnAccount" lists debits in an open candidate pair ("may be a move between your own accounts") apart, in no total. "unresolved" lists debits whose documents conflict about where they went (a transfer term and a payment term, no category to settle it) apart, in no total: the documents do not say where they went, so say so and ask the person to confirm. THE way to answer "did money disappear from my accounts, and where do I look next" — never answer it by summing list_transactions rows. Pass "dateRange" ({ from, to }, inclusive, YYYY-MM-DD) to report only debits in that range, for example from a separation date: transfers are matched over the whole scope first, so a transfer whose credit lies outside the range is still a transfer, never an outflow. Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range (a scope date range also narrows what is matched — prefer "dateRange").

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoOptional structural scope (WHO × WHEN). Omit to search across all your completed statements. "accounts" is a list of account/product chips ({ kind: "account" | "product", id }, the id of an account descriptor or product returned by a tool); "dateRange" bounds by transaction date (YYYY-MM-DD).
dateRangeNoReport only debits dated in this inclusive range. Omit to report every date.

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeYes
dateRangeYes
unresolvedYes
destinationsYes
mayBeOwnAccountYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only cover safety (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the description carries real burden and delivers: it discloses what is excluded (internal transfers, fees), how destinations cluster into five kinds, that amounts are cumulative per currency 'never a balance', and special non-totaled buckets (mayBeOwnAccount, unresolved) that are kept visible and never merged. This is behaviorally rich 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.

Conciseness3/5

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

All content is relevant, but it is delivered as a single dense run-on paragraph with deeply nested parentheticals and quote marks, making the destination-kind enumeration hard to scan. It is not padded, but front-loading and structural separation are weak.

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?

An output schema exists so return values needn't be explained, and the description still adds the key output trait (cumulative per-currency amount, not a balance, with separate non-totaled buckets). Combined with the scoping and matching caveats, an agent has everything needed to call it correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description adds genuine semantics: dateRange is inclusive YYYY-MM-DD and usable 'from a separation date', and crucially that transfers are matched over the whole scope first so an out-of-range credit still counts as a transfer; it also advises preferring dateRange over a scope date range. That is meaning beyond the schema text.

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?

It states a precise verb+resource with explicit scope exclusions: 'Every debit that left your accounts — in no confirmed transfer between your own accounts, and not a fee'. It also differentiates from sibling list_transactions by explicitly forbidding summation of its rows. An agent can identify the resource and its boundaries without opening the schema.

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

Usage Guidelines4/5

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

It gives a strong when-to-use ("THE way to answer 'did money disappear from my accounts, and where do I look next'") and an explicit anti-pattern ("never answer it by summing list_transactions rows"). However, it does not lay out the alternative siblings for adjacent jobs (e.g. list_transfers, adjudicate_outflows/adjudicate_transfers), so the routing map is incomplete.

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

list_statementsList StatementsA
Read-only
Inspect

Browse your previously converted bank statements with pagination and optional status filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (1-100)
offsetNoPagination offset
statusNoFilter by status

Output Schema

ParametersJSON Schema
NameRequiredDescription
documentsYes
paginationYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds the scope 'previously converted' and mentions pagination, but does not disclose additional behaviors like ordering, default limits, or what happens when no status filter is applied. This is acceptable 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?

A single, front-loaded sentence states the primary purpose and key features without repetition or filler. Every word earns its place, and the structure is immediately scannable.

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

Completeness4/5

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

With an output schema present, all three optional parameters documented in the schema, and annotations declaring read-only behavior, the description is nearly complete for a low-complexity list tool. The only slight gap is the ambiguous phrase 'previously converted,' which could conflict with the status filter enum including 'processing' and 'failed,' leaving the exact set of returned records slightly unclear.

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 fully documents limit, offset, and status with defaults and constraints. The description's mention of 'pagination and optional status filter' reinforces the parameter groups but adds no new semantic detail beyond the schema, matching the baseline.

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

Purpose5/5

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

The description uses the specific verb 'browse' with the resource 'previously converted bank statements' and mentions pagination and status filtering. This clearly differentiates the tool from siblings like list_transactions, list_transfers, and get_statement by scope and resource type.

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 'previously converted bank statements' implies the tool is for browsing existing conversion records, providing a usage context. However, it does not explicitly state when to choose this over alternatives such as get_statement or list_transactions, nor does it mention exclusions.

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
Inspect

A transaction is a single line as printed on one account's statement — one side of any movement. Return a filtered list of transactions across your converted statements, capped at 50 rows. Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range. Every response names the scope it actually evaluated (document count + covered date range) and each returned row carries its source document's content_hash so you can cite it. For "how many credits do I have" / processing quota / remaining pages, use get_credits instead — that is not a transaction.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Default 20, max 50.
orderNoSort direction. Default "desc" (largest amount / most recent date first). Only meaningful with sort_by.
scopeNoOptional structural scope (WHO × WHEN). Omit to search across all your completed statements. "accounts" is a list of account/product chips ({ kind: "account" | "product", id }, the id of an account descriptor or product returned by a tool); "dateRange" bounds by transaction date (YYYY-MM-DD).
filterNoSubset of transactions to operate on. All fields are optional and combined with AND logic.
sort_byNoSort the filtered set before applying limit. "amount" ranks by absolute magnitude (signed amounts are still returned). Omit for today's default (encounter order).

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeYes
transactionsYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare the safe read-only profile (readOnlyHint true, destructiveHint false). The description adds useful behavioral context beyond them: the 50-row cap, the default scope, and that responses name the evaluated scope and include content_hash for citation. This is meaningful, though some of it overlaps with the output schema.

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

Conciseness4/5

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

The text is dense but front-loads the core action after a brief definition, then moves to cap, scope, response metadata, and alternative tool. Every sentence contributes, though the opening definition sentence slightly delays the imperative.

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 rich nested parameters, an output schema, and full annotation coverage, the description supplies the remaining context an agent needs: default scope, row cap, response metadata, and the alternative for credits. 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 schema already documents all five parameters in detail. The description reinforces the scope concept but adds little syntax or semantic detail beyond the nested schema's own descriptions, matching the expected baseline.

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

Purpose5/5

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

The description states a specific verb and resource ('Return a filtered list of transactions') and defines what a transaction is. It explicitly distinguishes itself from get_credits and names the default scope, so an agent can identify the tool's purpose without inspecting the schema.

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

Usage Guidelines5/5

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

It gives explicit when-to-use guidance ('Scope defaults to all your completed statements; pass "scope" to narrow...') and names an alternative tool for a different question type ('For "how many credits do I have"... use get_credits instead'). The routing condition is unambiguous.

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

list_transfersMatch Transfers Between AccountsA
Read-only
Inspect

Match transfers between your own accounts. A transfer is TWO transactions — a debit leaving one of your accounts and a credit arriving in another — matched as two sides of the same movement (amount and date aligned); account-level successions (an account closing into a successor) are matched too. A payment to an outside party is not a transfer here: only movements with both sides visible in your statements are matched. THE way to answer any "was money moved between my accounts" / "did I transfer X" question — never try to answer a money-moved-between-accounts question with list_transactions + arithmetic; always call this tool instead. Ties come back as "ambiguous" until decided; call adjudicate_transfers to decide them. Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range. Every response reports the match window (in days) it used, even when no transfers are found — a lack of matches is never silent about how hard it looked. To find large movements with NO matching counterpart in your other accounts — e.g. "trace transfers over $10,000; which ones leave without a known destination?" — pass "amountMin": reconciled pairs and successions are filtered to that floor, and the response gains an "unmatched" bucket of large movements (debits leaving, or unexplained credits arriving) with no matching pair, candidate, or succession. Omit amountMin for the ordinary reconciled-pairs answer.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoOptional structural scope (WHO × WHEN). Omit to search across all your completed statements. "accounts" is a list of account/product chips ({ kind: "account" | "product", id }, the id of an account descriptor or product returned by a tool); "dateRange" bounds by transaction date (YYYY-MM-DD).
amountMinNoInclusive minimum absolute amount. When present, transfers/accountSuccessions are floored to this amount and the response gains an "unmatched" bucket of large movements with no matching counterpart. Omit for the ordinary reconciled-pairs answer.

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeYes
ambiguousYes
transfersYes
unmatchedNo
ambiguousCountYes
matchWindowDaysYes
accountSuccessionsYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark this as a read-only, non-destructive, closed-world tool, but the description adds rich behavioral context: transfers are two-sided transactions, account successions are included, outside payments are excluded, ambiguous matches are returned until adjudicated, and every response reports its match window.

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, and despite its length every sentence carries decision-relevant content: exclusions, routing to adjudicate_transfers, scope defaults, and amountMin behavior. There is no filler.

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

Completeness5/5

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

Given the complex nested schema, output schema, and annotations, the description covers purpose, exclusions, follow-up routing, and the special amountMin mode. An agent has everything needed to invoke the correct tool and interpret the response shape.

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

Parameters4/5

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

Schema coverage is 100% and the nested scope/amountMin structure is already well documented. The description reinforces defaults (scope omits to all completed statements; amountMin creates an unmatched bucket) and gives a concrete use case, but much of this overlaps with schema descriptions.

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

Purpose5/5

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

States a specific verb and resource (match transfers between your own accounts) and immediately distinguishes the tool from siblings by ruling out list_transactions + arithmetic and payments to outside parties. The definition makes the tool's exact domain unambiguous.

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

Usage Guidelines5/5

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

Explicitly says this is THE way to answer 'was money moved between my accounts' questions, forbids using list_transactions + arithmetic instead, and names adjudicate_transfers as the follow-up for ambiguous ties. It also clarifies when to pass scope and amountMin.

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

rate_statementRate Statement ConversionA
Destructive
Inspect

Report how well a previously converted bank statement was parsed: submit a 1-5 rating, optionally with structured feedback at any rating. Your rating counts toward the average ratings shown on bankstatemently.com. Calling this again for the same document updates your existing rating without clearing feedback already submitted for it. Returns the stored rating state in the response — there is no separate tool to read your own rating back. Every response includes a "summary" field: use it as the single source of truth for what happened.

ParametersJSON Schema
NameRequiredDescriptionDefault
ratingYes1-5 star rating for this conversion
feedbackNoFree-text feedback.
document_idYesDocument ID (from convert_statement or list_statements)
feedback_categoriesNoStructured feedback categories.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
errorNo
ratingNo
statusYes
messageNo
summaryNo
documentIdNo
hasFeedbackNo

TDQS

A4.1/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint=false, destructiveHint=true, openWorldHint=true), the description discloses genuinely useful traits: repeat calls upsert and do not clear prior feedback, the response returns stored rating state, and there is no separate read-your-rating tool. It also flags the response's "summary" field as authoritative. It does not mention auth/rate limits or exactly what the destructive hint entails.

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?

Purpose is front-loaded and every sentence carries information (upsert semantics, return behavior, summary field). It is slightly dense and could tighten the return-value sentence, but there is no filler.

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

Completeness4/5

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

With an output schema present, return values need not be spelled out, and the description still points at the summary field. It covers the write/upsert semantics, guidance, and destination of the rating (site average), leaving only edge cases like permission or failure handling unspecified.

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 rating, feedback, document_id, and feedback_categories. The description adds only mild nuance (feedback is optional at any rating) that the schema's optionality already implies, so the baseline of 3 applies.

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

Purpose5/5

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

The description states a specific verb and resource: report a 1-5 rating on how well a previously converted bank statement was parsed, optionally with structured feedback. There is no sibling that overlaps this capability (the rest of the toolset covers conversion, listing, aggregation, and transfer adjudication), so the agent can identify it immediately.

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

Usage Guidelines4/5

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

It gives clear context for use (after a statement has been converted; feedback is optional at any rating) and explains the repeat-call behavior. It does not explicitly state when NOT to use it or name an alternative, so it stops short of the 5 tier.

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

request_uploadRequest Upload URLAInspect

Mint a single-use upload URL for pushing a conversation-attached PDF to Bankstatemently before converting it. Use this ONLY when you have no other way to reference the attached file (no pdf_file/pdf_url equivalent for this host) — e.g. a code-execution sandbox that can see the file on disk but has no URL for it. Playbook: (1) check your sandbox's uploads/attachments directory first — if the file isn't there yet, the mount can lag behind the conversation; ask the user to re-attach or wait a moment and check again before calling this tool. (2) Call request_upload to get upload_url and upload_id. (3) PUT the raw PDF bytes to upload_url with header Content-Type: application/pdf, e.g.: curl -X PUT "<upload_url>" -H "Content-Type: application/pdf" --data-binary @<path-to-file>. (4) Once the PUT succeeds, call convert_statement with upload_id set to the same value — never pdf/pdf_url/pdf_file for this flow. The URL and token are single-use and expire quickly; call request_upload again for a fresh one if the PUT fails partway through — never retry a failed PUT against the same URL. If the PUT fails with a network error or a "host not allowed"-style denial, the sandbox is likely blocking outbound requests to api.bankstatemently.com — tell the user to add api.bankstatemently.com to their host's code-execution allowed-domains setting (on claude.ai: Settings → Capabilities → Code execution) and retry. To convert several statements at once, pass count (1-100) instead of calling this tool once per file: the response returns "uploads", an array of that many { upload_id, upload_url } pairs — PUT each file to its own upload_url, then make ONE convert_statement call with upload_ids set to every upload_id. Free to use — no credits consumed (conversion itself still costs credits, same as any other convert_statement call).

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoBatch size — mint this many independent single-use upload URLs in one call instead of calling request_upload once per file. When set, the response returns "uploads": an array of that many { upload_id, upload_url } pairs. Omit for the default single-URL response.

Output Schema

ParametersJSON Schema
NameRequiredDescription
uploadsNo
max_bytesNo
upload_idNo
expires_atNo
upload_urlNo

TDQS

A5/5.0
Behavior5/5

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

The description discloses key behavioral traits beyond annotations: the URL and token are single-use and expire quickly, PUT failures may indicate outbound blocking, and the tool is free (no credits consumed). It also explains the batch response shape ('uploads' array). The annotations do not contradict this — readOnlyHint=false is consistent with minting a URL, and destructiveHint=false is consistent with a non-destructive operation.

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

Conciseness5/5

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

The description is dense and operationally precise, front-loading the core purpose and then moving through a numbered playbook, failure handling, and batching. Despite its length, every sentence carries actionable information — no filler or repetition of structured data.

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

Completeness5/5

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

The description covers prerequisites (check sandbox directory), the full call sequence, error handling (network denials, allowed-domains settings), batching, credit implications, and the relationship to convert_statement. It assumes the output schema exists and does not waste space explaining return values. Nothing an agent needs to invoke this tool correctly 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?

Even though schema coverage is 100% for the single count parameter, the description adds significant workflow meaning: count is not just a batch size but a way to get an array of upload pairs, and it changes the downstream convert_statement call (upload_ids instead of upload_id). The description explains the exact PUT step and curl example, going well beyond the schema's brief description.

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

Purpose5/5

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

The description uses a specific verb ('Mint') and resource ('single-use upload URL'), and immediately connects it to the larger workflow: pushing a conversation-attached PDF to Bankstatemently before conversion. It is distinguishable from sibling tools because it names convert_statement as the downstream consumer and explains its unique role in the upload flow.

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

Usage Guidelines5/5

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

It states explicitly when to use this tool ('ONLY when you have no other way to reference the attached file') and gives a concrete example (code-execution sandbox). It also provides a playbook with pre-checks, alternative actions (ask user to re-attach), batch usage ('pass count instead of calling this tool once per file'), and exclusions ('never retry a failed PUT against the same URL').

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

time_seriesTransaction Time SeriesA
Read-only
Inspect

Compute a time series by grouping transactions into week or month buckets and applying a metric — useful for trends. Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoOptional structural scope (WHO × WHEN). Omit to search across all your completed statements. "accounts" is a list of account/product chips ({ kind: "account" | "product", id }, the id of an account descriptor or product returned by a tool); "dateRange" bounds by transaction date (YYYY-MM-DD).
bucketYesBucket size.
filterNoSubset of transactions to operate on. All fields are optional and combined with AND logic.
metricYesMetric per bucket.

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeYes
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful non-annotation behavior: the tool defaults to scoping over all completed statements unless 'scope' is passed, and scope narrows by accounts/products and/or date range. It stops short of describing pagination or result-shape behavior, keeping it out of the top slot.

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

Conciseness4/5

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

Two sentences, front-loaded with the computation and then the scoping behavior; nothing is wasted. It is slightly under-informative for its claim of being a 'useful for trends' tool, but structurally the entry is clean and appropriately sized.

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, the description does not need to explain return values, and it covers the key default (all completed statements) plus the narrowing mechanism. For a tool with 4 parameters, two nested objects, and enums, this leaves the agent adequately equipped, though a note on bucket/metric interaction with scope would have closed the remaining gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the nested scope/filter/bucket/metric semantics are already fully documented in the schema — the baseline is 3. The description only restates the scope default and its narrowing purpose, adding marginal value beyond the schema text rather than new syntax or format detail.

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

Purpose4/5

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

The description states a specific verb and resource — 'Compute a time series by grouping transactions into week or month buckets and applying a metric' — which is concrete enough for an agent to know exactly what comes out. It does not name or contrast with any sibling tool (e.g. aggregate, group_by, compare), so it falls short of the top score even though the operation itself is unambiguous.

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

Usage Guidelines3/5

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

'Useful for trends' hints at the use case, and the scope default ('defaults to all your completed statements') tells the agent it can call it with only bucket and metric. However, there is no guidance on when to prefer this over siblings like aggregate, group_by, or compare, nor any stated exclusions, so usage is only implied.

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

top_nTop Transaction GroupsA
Read-only
Inspect

Return the top N groups ranked by metric (descending), per-currency for monetary metrics. Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
nYesNumber of top groups to return.
scopeNoOptional structural scope (WHO × WHEN). Omit to search across all your completed statements. "accounts" is a list of account/product chips ({ kind: "account" | "product", id }, the id of an account descriptor or product returned by a tool); "dateRange" bounds by transaction date (YYYY-MM-DD).
filterNoSubset of transactions to operate on. All fields are optional and combined with AND logic.
metricYesMetric to rank by.
dimensionYesGrouping dimension.

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeYes
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish this is a safe read (readOnlyHint=true, destructiveHint=false), so the description only needs to add what they don't cover — and it does: descending rank order, per-currency splitting for monetary metrics, and the default scope of all completed statements. Tie-breaking behavior and the fact that per-currency splitting does not apply to count are left unstated.

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

Conciseness5/5

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

Two tight sentences with zero filler, and the core behavior (ranking direction, per-currency handling) is front-loaded ahead of the scoping detail. Every clause carries information.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the 100%-covered input schema handles parameter detail. The description supplies the essential defaults and the per-currency quirk. It stops short of explaining how this differs from sibling aggregation tools, which is the main remaining gap for a tool with 17 siblings.

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

Parameters3/5

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

Schema description coverage is 100% and the nested scope/filter objects are thoroughly documented in the schema, so the baseline is 3. The description only adds the conceptual framing of scope as 'WHO × WHEN' and the default when omitted; it contributes little syntax or semantics beyond what the schema already provides.

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

Purpose4/5

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

The description states a specific verb and resource — 'Return the top N groups ranked by metric (descending)' — plus a distinctive behavior ('per-currency for monetary metrics'). That is more than a restatement of the name. It does not, however, contrast itself with near-neighbors like group_by or aggregate, so the agent must infer which ranking/grouping tool to pick.

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 verb ('top N') and the default-scope note ('Scope defaults to all your completed statements; pass "scope" to narrow'). But there is no explicit when-to-use vs when-not, and no sibling is named as the alternative for non-top-N grouping or raw listing. Adequate, not instructive.

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

update_memoryUpdate MemoryA
Destructive
Inspect

Rename or rescope an existing named memory, or update its situation. The default memory is immutable. Free to use — no credits consumed.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew user-authored memory name.
scopeNoUpdated accounts/products and optional date range this memory covers.
memoryIdYesThe id of the named memory to update. The default memory is immutable.
situationNoUpdated matter this memory is about: bookkeeping, divorce, estate, or null.

Output Schema

ParametersJSON Schema
NameRequiredDescription
memoryYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation profile is covered. The description adds two pieces of context not in the annotations: default-memory immutability and zero credit cost. It does not explain what 'destructive' means concretely (e.g. that rescoping replaces the prior scope), so it stays at a baseline-plus level.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the operations, then the immutability caveat and cost note. No filler; every clause carries information the agent needs.

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

Completeness4/5

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

With an output schema present the description needn't cover return values, and annotations cover the safety profile, so the remaining burden is small. It covers operations, the immutability constraint and cost; it omits only minor detail such as whether unspecified fields are left unchanged.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents name, scope, situation and memoryId fully. The description's verbs ('rename', 'rescope', 'update its situation') loosely mirror the three optional params but add no format or constraint detail beyond the schema — the baseline 3 when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb set and resource: 'Rename or rescope an existing named memory, or update its situation.' Each operation maps cleanly onto an editable field, and the phrase 'existing named memory' distinguishes it from create_memory and list_memories without the agent opening any schema.

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

Usage Guidelines4/5

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

Gives a clear precondition/exclusion — 'The default memory is immutable' tells the agent when this tool will fail — plus a cost signal ('no credits consumed'). There is no explicit routing sentence naming create_memory or list_memories as alternatives, which keeps it short of a 5.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updates
    • Addedadjudicate_outflows
    • Changedconvert_statement2 fields changed
      • removedOutput schema / properties / document / properties / statements / items / properties / products / items / properties / accounts / items / properties / transactions / items / properties / balance / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • addedOutput schema / properties / document / properties / statements / items / properties / products / items / properties / accounts / items / properties / transactions / items / properties / balance / type
        Added value: +"number"
    • Addedcreate_memory
    • Changedget_credits2 fields changed
      • addedOutput schema / properties / plan / properties / memoriesCap
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / plan / required
        Previous value: -[
        -  "maxPagesPerUpload",
        -  "maxUploadSizeMb",
        -  "dailySpendCap",
        -  "monthlyPages"
        -]New value: +[
        +  "maxPagesPerUpload",
        +  "maxUploadSizeMb",
        +  "dailySpendCap",
        +  "monthlyPages",
        +  "memoriesCap"
        +]
    • Changedget_statement2 fields changed
      • removedOutput schema / properties / document / properties / statements / items / properties / products / items / properties / accounts / items / properties / transactions / items / properties / balance / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • addedOutput schema / properties / document / properties / statements / items / properties / products / items / properties / accounts / items / properties / transactions / items / properties / balance / type
        Added value: +"number"
    • Addedlist_memories
    • Changedlist_outflows4 fields changed
      • addedOutput schema / properties / destinations / items / properties / identifiers
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / destinations / items / required
        Previous value: -[
        -  "kind",
        -  "label",
        -  "totals",
        -  "outflows"
        -]New value: +[
        +  "kind",
        +  "label",
        +  "identifiers",
        +  "totals",
        +  "outflows"
        +]
      • addedOutput schema / properties / unresolved
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "account": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "id": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "label": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "label"
        +        ],
        +        "type": "object"
        +      },
        +      "amount": {
        +        "type": "number"
        +      },
        +      "currency": {
        +        "type": "string"
        +      },
        +      "date": {
        +        "type": "string"
        +      },
        +      "judgeModelId": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "sourceDocument": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "contentHash": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          }
        +        },
        +        "required": [
        +          "contentHash"
        +        ],
        +        "type": "object"
        +      },
        +      "transactionId": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "date",
        +      "amount",
        +      "currency",
        +      "account",
        +      "sourceDocument",
        +      "transactionId",
        +      "judgeModelId"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "dateRange",
        -  "destinations",
        -  "mayBeOwnAccount",
        -  "scope"
        -]New value: +[
        +  "dateRange",
        +  "destinations",
        +  "mayBeOwnAccount",
        +  "unresolved",
        +  "scope"
        +]
    • Addedupdate_memory
  2. 3 tool updates
    • Changedgroup_by1 field changed
      • changedInput schema / properties / dimension / enum
        Previous value: -[
        -  "month",
        -  "category",
        -  "merchant",
        -  "account",
        -  "currency"
        -]New value: +[
        +  "month",
        +  "category",
        +  "counterparty",
        +  "account",
        +  "currency"
        +]
    • Addedlist_outflows
    • Changedtop_n1 field changed
      • changedInput schema / properties / dimension / enum
        Previous value: -[
        -  "month",
        -  "category",
        -  "merchant",
        -  "account",
        -  "currency"
        -]New value: +[
        +  "month",
        +  "category",
        +  "counterparty",
        +  "account",
        +  "currency"
        +]
  3. 1 tool update
    • Changedrate_statement2 fields changed
      • changedInput schema / properties / feedback / description
        Previous value: -"Free-text feedback. Only when the rating is 3 or below."New value: +"Free-text feedback."
      • changedInput schema / properties / feedback_categories / description
        Previous value: -"Structured feedback categories. Only when the rating is 3 or below."New value: +"Structured feedback categories."
  4. 1 tool update
    • Changedrate_statement2 fields changed
      • changedInput schema / properties / feedback / description
        Previous value: -"Free-text feedback. Only accepted when rating is 3 or below."New value: +"Free-text feedback. Only when the rating is 3 or below."
      • changedInput schema / properties / feedback_categories / description
        Previous value: -"Structured feedback categories. Only accepted when rating is 3 or below."New value: +"Structured feedback categories. Only when the rating is 3 or below."
  5. 1 tool update
    • Changedrate_statement5 fields changed
      • removedInput schema / properties / export_format
        Removed value: -{
        -  "description": "Which output format you exported this conversion to (csv, xlsx, qbo, or xero).",
        -  "enum": [
        -    "csv",
        -    "xlsx",
        -    "qbo",
        -    "xero"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / use_case
        Removed value: -{
        -  "description": "Tags describing what you use the converted data for.",
        -  "items": {
        -    "enum": [
        -      "bookkeeping",
        -      "tax_preparation",
        -      "financial_analysis",
        -      "audit_compliance",
        -      "reconciliation",
        -      "personal_finance",
        -      "data_migration",
        -      "other"
        -    ],
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / use_case_other
        Removed value: -{
        -  "description": "Free-text use case, for when \"other\" is among the use_case tags.",
        -  "maxLength": 500,
        -  "type": "string"
        -}
      • removedOutput schema / properties / useCase
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / useCaseOther
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
  6. 10 tool updates
    • Addedadjudicate_transfers
    • Changedaggregate5 fields changed
      • addedInput schema / properties / filter / additionalProperties
        Added value: +false
      • removedInput schema / properties / filter / properties / accounts
        Removed value: -{
        -  "description": "Account number slugs to include.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • changedInput schema / properties / scope / description
        Previous value: -"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."New value: +"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips ({ kind: \"account\" | \"product\", id }, the id of an account descriptor or product returned by a tool); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • changedInput schema / properties / scope / properties / accounts / description
        Previous value: -"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."New value: +"Account/product id chips (kind + id) to scope to. Empty = all accounts."
      • changedInput schema / properties / scope / properties / accounts / items / oneOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "description": "This chip addresses a single account.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "description": "Product slug.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "description": "This chip addresses a product and expands to its child accounts.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "description": "The account id: the `id` of an account descriptor returned by a tool, or of a statement tool `accounts[]` entry.",
        +        "format": "uuid",
        +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "description": "This chip addresses a single account.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "description": "The product id: the `id` of a product returned by a statement tool (`get_statement` / `convert_statement`, `products[].id`).",
        +        "format": "uuid",
        +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "description": "This chip addresses a product and expands to its child accounts.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "id"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedcompare7 fields changed
      • addedInput schema / properties / filterA / additionalProperties
        Added value: +false
      • removedInput schema / properties / filterA / properties / accounts
        Removed value: -{
        -  "description": "Account number slugs to include.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • addedInput schema / properties / filterB / additionalProperties
        Added value: +false
      • removedInput schema / properties / filterB / properties / accounts
        Removed value: -{
        -  "description": "Account number slugs to include.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • changedInput schema / properties / scope / description
        Previous value: -"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."New value: +"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips ({ kind: \"account\" | \"product\", id }, the id of an account descriptor or product returned by a tool); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • changedInput schema / properties / scope / properties / accounts / description
        Previous value: -"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."New value: +"Account/product id chips (kind + id) to scope to. Empty = all accounts."
      • changedInput schema / properties / scope / properties / accounts / items / oneOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "description": "This chip addresses a single account.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "description": "Product slug.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "description": "This chip addresses a product and expands to its child accounts.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "description": "The account id: the `id` of an account descriptor returned by a tool, or of a statement tool `accounts[]` entry.",
        +        "format": "uuid",
        +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "description": "This chip addresses a single account.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "description": "The product id: the `id` of a product returned by a statement tool (`get_statement` / `convert_statement`, `products[].id`).",
        +        "format": "uuid",
        +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "description": "This chip addresses a product and expands to its child accounts.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "id"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedconvert_statement2 fields changed
      • addedOutput schema / properties / document / properties / statements / items / properties / products / items / properties / accounts / items / properties / id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / statements / items / properties / products / items / properties / id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_statement2 fields changed
      • addedOutput schema / properties / document / properties / statements / items / properties / products / items / properties / accounts / items / properties / id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / statements / items / properties / products / items / properties / id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedgroup_by5 fields changed
      • addedInput schema / properties / filter / additionalProperties
        Added value: +false
      • removedInput schema / properties / filter / properties / accounts
        Removed value: -{
        -  "description": "Account number slugs to include.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • changedInput schema / properties / scope / description
        Previous value: -"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."New value: +"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips ({ kind: \"account\" | \"product\", id }, the id of an account descriptor or product returned by a tool); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • changedInput schema / properties / scope / properties / accounts / description
        Previous value: -"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."New value: +"Account/product id chips (kind + id) to scope to. Empty = all accounts."
      • changedInput schema / properties / scope / properties / accounts / items / oneOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "description": "This chip addresses a single account.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "description": "Product slug.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "description": "This chip addresses a product and expands to its child accounts.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "description": "The account id: the `id` of an account descriptor returned by a tool, or of a statement tool `accounts[]` entry.",
        +        "format": "uuid",
        +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "description": "This chip addresses a single account.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "description": "The product id: the `id` of a product returned by a statement tool (`get_statement` / `convert_statement`, `products[].id`).",
        +        "format": "uuid",
        +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "description": "This chip addresses a product and expands to its child accounts.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "id"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedlist_transactions10 fields changed
      • addedInput schema / properties / filter / additionalProperties
        Added value: +false
      • removedInput schema / properties / filter / properties / accounts
        Removed value: -{
        -  "description": "Account number slugs to include.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • changedInput schema / properties / scope / description
        Previous value: -"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."New value: +"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips ({ kind: \"account\" | \"product\", id }, the id of an account descriptor or product returned by a tool); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • changedInput schema / properties / scope / properties / accounts / description
        Previous value: -"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."New value: +"Account/product id chips (kind + id) to scope to. Empty = all accounts."
      • changedInput schema / properties / scope / properties / accounts / items / oneOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "description": "This chip addresses a single account.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "description": "Product slug.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "description": "This chip addresses a product and expands to its child accounts.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "description": "The account id: the `id` of an account descriptor returned by a tool, or of a statement tool `accounts[]` entry.",
        +        "format": "uuid",
        +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "description": "This chip addresses a single account.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "description": "The product id: the `id` of a product returned by a statement tool (`get_statement` / `convert_statement`, `products[].id`).",
        +        "format": "uuid",
        +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "description": "This chip addresses a product and expands to its child accounts.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "id"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedOutput schema / properties / transactions / items / properties / account / additionalProperties
        Added value: +false
      • removedOutput schema / properties / transactions / items / properties / account / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / transactions / items / properties / account / properties
        Added value: +{
        +  "id": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ]
        +  },
        +  "label": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / transactions / items / properties / account / required
        Added value: +[
        +  "id",
        +  "label"
        +]
      • addedOutput schema / properties / transactions / items / properties / account / type
        Added value: +"object"
    • Changedlist_transfers39 fields changed
      • changedInput schema / properties / scope / description
        Previous value: -"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."New value: +"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips ({ kind: \"account\" | \"product\", id }, the id of an account descriptor or product returned by a tool); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • changedInput schema / properties / scope / properties / accounts / description
        Previous value: -"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."New value: +"Account/product id chips (kind + id) to scope to. Empty = all accounts."
      • changedInput schema / properties / scope / properties / accounts / items / oneOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "description": "This chip addresses a single account.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "description": "Product slug.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "description": "This chip addresses a product and expands to its child accounts.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "description": "The account id: the `id` of an account descriptor returned by a tool, or of a statement tool `accounts[]` entry.",
        +        "format": "uuid",
        +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "description": "This chip addresses a single account.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "description": "The product id: the `id` of a product returned by a statement tool (`get_statement` / `convert_statement`, `products[].id`).",
        +        "format": "uuid",
        +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "description": "This chip addresses a product and expands to its child accounts.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "id"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedOutput schema / properties / accountSuccessions / items / properties / predecessorAccount / additionalProperties
        Added value: +false
      • addedOutput schema / properties / accountSuccessions / items / properties / predecessorAccount / properties
        Added value: +{
        +  "id": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ]
        +  },
        +  "label": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / accountSuccessions / items / properties / predecessorAccount / required
        Added value: +[
        +  "id",
        +  "label"
        +]
      • changedOutput schema / properties / accountSuccessions / items / properties / predecessorAccount / type
        Previous value: -"string"New value: +"object"
      • addedOutput schema / properties / accountSuccessions / items / properties / successorAccounts / items / additionalProperties
        Added value: +false
      • addedOutput schema / properties / accountSuccessions / items / properties / successorAccounts / items / properties
        Added value: +{
        +  "id": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ]
        +  },
        +  "label": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / accountSuccessions / items / properties / successorAccounts / items / required
        Added value: +[
        +  "id",
        +  "label"
        +]
      • changedOutput schema / properties / accountSuccessions / items / properties / successorAccounts / items / type
        Previous value: -"string"New value: +"object"
      • addedOutput schema / properties / ambiguous / items / properties / dateDeltaDays
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / ambiguous / items / properties / fromAccount / additionalProperties
        Added value: +false
      • addedOutput schema / properties / ambiguous / items / properties / fromAccount / properties
        Added value: +{
        +  "id": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ]
        +  },
        +  "label": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / ambiguous / items / properties / fromAccount / required
        Added value: +[
        +  "id",
        +  "label"
        +]
      • changedOutput schema / properties / ambiguous / items / properties / fromAccount / type
        Previous value: -"string"New value: +"object"
      • addedOutput schema / properties / ambiguous / items / properties / judgeModelId
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / ambiguous / items / properties / status
        Added value: +{
        +  "enum": [
        +    "unresolved",
        +    "abstained"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / ambiguous / items / properties / toAccount / additionalProperties
        Added value: +false
      • addedOutput schema / properties / ambiguous / items / properties / toAccount / properties
        Added value: +{
        +  "id": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ]
        +  },
        +  "label": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / ambiguous / items / properties / toAccount / required
        Added value: +[
        +  "id",
        +  "label"
        +]
      • changedOutput schema / properties / ambiguous / items / properties / toAccount / type
        Previous value: -"string"New value: +"object"
      • changedOutput schema / properties / ambiguous / items / required
        Previous value: -[
        -  "fromAccount",
        -  "toAccount",
        -  "fromTransactionId",
        -  "toTransactionId",
        -  "amount",
        -  "currency",
        -  "fromDate",
        -  "toDate"
        -]New value: +[
        +  "fromAccount",
        +  "toAccount",
        +  "fromTransactionId",
        +  "toTransactionId",
        +  "amount",
        +  "currency",
        +  "fromDate",
        +  "toDate",
        +  "dateDeltaDays",
        +  "status",
        +  "judgeModelId"
        +]
      • addedOutput schema / properties / transfers / items / properties / fromAccount / additionalProperties
        Added value: +false
      • addedOutput schema / properties / transfers / items / properties / fromAccount / properties
        Added value: +{
        +  "id": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ]
        +  },
        +  "label": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / transfers / items / properties / fromAccount / required
        Added value: +[
        +  "id",
        +  "label"
        +]
      • changedOutput schema / properties / transfers / items / properties / fromAccount / type
        Previous value: -"string"New value: +"object"
      • addedOutput schema / properties / transfers / items / properties / fromTransactionId
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / properties / transfers / items / properties / provenance / enum
        Previous value: -[
        -  "deterministic",
        -  "judge"
        -]New value: +[
        +  "deterministic",
        +  "judge",
        +  "user"
        +]
      • addedOutput schema / properties / transfers / items / properties / toAccount / additionalProperties
        Added value: +false
      • addedOutput schema / properties / transfers / items / properties / toAccount / properties
        Added value: +{
        +  "id": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ]
        +  },
        +  "label": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / transfers / items / properties / toAccount / required
        Added value: +[
        +  "id",
        +  "label"
        +]
      • changedOutput schema / properties / transfers / items / properties / toAccount / type
        Previous value: -"string"New value: +"object"
      • addedOutput schema / properties / transfers / items / properties / toTransactionId
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / properties / transfers / items / required
        Previous value: -[
        -  "fromAccount",
        -  "toAccount",
        -  "amount",
        -  "currency",
        -  "fromDate",
        -  "toDate",
        -  "dateDeltaDays",
        -  "provenance"
        -]New value: +[
        +  "fromAccount",
        +  "toAccount",
        +  "fromTransactionId",
        +  "toTransactionId",
        +  "amount",
        +  "currency",
        +  "fromDate",
        +  "toDate",
        +  "dateDeltaDays",
        +  "provenance"
        +]
      • addedOutput schema / properties / unmatched / properties / movements / items / properties / account / additionalProperties
        Added value: +false
      • addedOutput schema / properties / unmatched / properties / movements / items / properties / account / properties
        Added value: +{
        +  "id": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ]
        +  },
        +  "label": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / unmatched / properties / movements / items / properties / account / required
        Added value: +[
        +  "id",
        +  "label"
        +]
      • changedOutput schema / properties / unmatched / properties / movements / items / properties / account / type
        Previous value: -"string"New value: +"object"
    • Changedtime_series5 fields changed
      • addedInput schema / properties / filter / additionalProperties
        Added value: +false
      • removedInput schema / properties / filter / properties / accounts
        Removed value: -{
        -  "description": "Account number slugs to include.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • changedInput schema / properties / scope / description
        Previous value: -"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."New value: +"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips ({ kind: \"account\" | \"product\", id }, the id of an account descriptor or product returned by a tool); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • changedInput schema / properties / scope / properties / accounts / description
        Previous value: -"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."New value: +"Account/product id chips (kind + id) to scope to. Empty = all accounts."
      • changedInput schema / properties / scope / properties / accounts / items / oneOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "description": "This chip addresses a single account.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "description": "Product slug.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "description": "This chip addresses a product and expands to its child accounts.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "description": "The account id: the `id` of an account descriptor returned by a tool, or of a statement tool `accounts[]` entry.",
        +        "format": "uuid",
        +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "description": "This chip addresses a single account.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "description": "The product id: the `id` of a product returned by a statement tool (`get_statement` / `convert_statement`, `products[].id`).",
        +        "format": "uuid",
        +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "description": "This chip addresses a product and expands to its child accounts.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "id"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedtop_n5 fields changed
      • addedInput schema / properties / filter / additionalProperties
        Added value: +false
      • removedInput schema / properties / filter / properties / accounts
        Removed value: -{
        -  "description": "Account number slugs to include.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • changedInput schema / properties / scope / description
        Previous value: -"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."New value: +"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips ({ kind: \"account\" | \"product\", id }, the id of an account descriptor or product returned by a tool); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • changedInput schema / properties / scope / properties / accounts / description
        Previous value: -"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."New value: +"Account/product id chips (kind + id) to scope to. Empty = all accounts."
      • changedInput schema / properties / scope / properties / accounts / items / oneOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "description": "This chip addresses a single account.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "description": "Product slug.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "description": "This chip addresses a product and expands to its child accounts.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "description": "The account id: the `id` of an account descriptor returned by a tool, or of a statement tool `accounts[]` entry.",
        +        "format": "uuid",
        +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "description": "This chip addresses a single account.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "description": "The product id: the `id` of a product returned by a statement tool (`get_statement` / `convert_statement`, `products[].id`).",
        +        "format": "uuid",
        +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "description": "This chip addresses a product and expands to its child accounts.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "id"
        +    ],
        +    "type": "object"
        +  }
        +]
  7. 1 tool update
    • Changedget_credits1 field changed
      • changedOutput schema / properties / planId / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "anonymous",
        +      "free",
        +      "credit_pack",
        +      "beginner",
        +      "pro",
        +      "enterprise"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  8. 1 tool update
    • Changedget_credits4 fields changed
      • addedOutput schema / properties / granted
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / plan / properties / monthlyPages
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / plan / required
        Previous value: -[
        -  "maxPagesPerUpload",
        -  "maxUploadSizeMb",
        -  "dailySpendCap"
        -]New value: +[
        +  "maxPagesPerUpload",
        +  "maxUploadSizeMb",
        +  "dailySpendCap",
        +  "monthlyPages"
        +]
      • changedOutput schema / required
        Previous value: -[
        -  "balance",
        -  "limit",
        -  "planId",
        -  "creditsExpireAt",
        -  "plan",
        -  "summary"
        -]New value: +[
        +  "balance",
        +  "limit",
        +  "granted",
        +  "planId",
        +  "creditsExpireAt",
        +  "plan",
        +  "summary"
        +]
  9. 3 tool updates
    • Changedconvert_statement5 fields changed
      • removedOutput schema / properties / completedAt
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / createdAt
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / extraction
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "method": {
        -      "enum": [
        -        "rule",
        -        "vlm",
        -        "precomputed"
        -      ],
        -      "type": "string"
        -    },
        -    "pageCount": {
        -      "type": "number"
        -    }
        -  },
        -  "required": [
        -    "method",
        -    "pageCount"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / processedAt
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / processingTimeMs
        Removed value: -{
        -  "type": "number"
        -}
    • Changedget_statement5 fields changed
      • removedOutput schema / properties / completedAt
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / createdAt
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • removedOutput schema / properties / extraction
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "method": {
        -      "enum": [
        -        "rule",
        -        "vlm",
        -        "precomputed"
        -      ],
        -      "type": "string"
        -    },
        -    "pageCount": {
        -      "type": "number"
        -    }
        -  },
        -  "required": [
        -    "method",
        -    "pageCount"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / processedAt
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / processingTimeMs
        Removed value: -{
        -  "type": "number"
        -}
    • Changedlist_statements1 field changed
      • removedOutput schema / properties / documents / items / properties / completedAt
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
  10. 11 tool updates
    • Changedaggregate3 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "__schema0": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "number"
        +      },
        +      {
        +        "type": "boolean"
        +      },
        +      {
        +        "type": "null"
        +      },
        +      {
        +        "items": {
        +          "$ref": "#/$defs/__schema0"
        +        },
        +        "type": "array"
        +      },
        +      {
        +        "additionalProperties": {
        +          "$ref": "#/$defs/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  }
        +}
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": {},
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": {},
        -      "properties": {},
        -      "type": "object"
        -    },
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {
        +      "$ref": "#/$defs/__schema0"
        +    },
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "items": {
        +      "additionalProperties": {
        +        "$ref": "#/$defs/__schema0"
        +      },
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedOutput schema / properties / scope / additionalProperties
        Previous value: -{}New value: +false
    • Changedcompare3 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "__schema0": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "number"
        +      },
        +      {
        +        "type": "boolean"
        +      },
        +      {
        +        "type": "null"
        +      },
        +      {
        +        "items": {
        +          "$ref": "#/$defs/__schema0"
        +        },
        +        "type": "array"
        +      },
        +      {
        +        "additionalProperties": {
        +          "$ref": "#/$defs/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  }
        +}
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": {},
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": {},
        -      "properties": {},
        -      "type": "object"
        -    },
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {
        +      "$ref": "#/$defs/__schema0"
        +    },
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "items": {
        +      "additionalProperties": {
        +        "$ref": "#/$defs/__schema0"
        +      },
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedOutput schema / properties / scope / additionalProperties
        Previous value: -{}New value: +false
    • Changedconvert_statement23 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "__schema0": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "number"
        +      },
        +      {
        +        "type": "boolean"
        +      },
        +      {
        +        "type": "null"
        +      },
        +      {
        +        "items": {
        +          "$ref": "#/$defs/__schema0"
        +        },
        +        "type": "array"
        +      },
        +      {
        +        "additionalProperties": {
        +          "$ref": "#/$defs/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  }
        +}
      • changedOutput schema / properties / columns / items / additionalProperties
        Previous value: -{}New value: +false
      • addedOutput schema / properties / completedAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / createdAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / bank
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / bankId
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / country
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / currency
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / documentType
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / languages
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / pageCount
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / statementDate
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / statementPeriod
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "from": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "to": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "required": [
        +    "from",
        +    "to"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / document / properties / statements
        Added value: +{
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {
        +      "date": {
        +        "type": "string"
        +      },
        +      "period": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "from": {
        +            "type": "string"
        +          },
        +          "to": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "from",
        +          "to"
        +        ],
        +        "type": "object"
        +      },
        +      "products": {
        +        "items": {
        +          "additionalProperties": {},
        +          "properties": {
        +            "accounts": {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "accountHolderName": {
        +                    "anyOf": [
        +                      {
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "accountId": {
        +                    "anyOf": [
        +                      {
        +                        "type": "number"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "accountNumber": {
        +                    "anyOf": [
        +                      {
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "cardNumber": {
        +                    "anyOf": [
        +                      {
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "categories": {
        +                    "items": {
        +                      "additionalProperties": {
        +                        "$ref": "#/$defs/__schema0"
        +                      },
        +                      "propertyNames": {
        +                        "type": "string"
        +                      },
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "currency": {
        +                    "type": "string"
        +                  },
        +                  "declared": {
        +                    "items": {
        +                      "additionalProperties": {
        +                        "$ref": "#/$defs/__schema0"
        +                      },
        +                      "propertyNames": {
        +                        "type": "string"
        +                      },
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "totals": {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "closingBalance": {
        +                        "anyOf": [
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ]
        +                      },
        +                      "openingBalance": {
        +                        "anyOf": [
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ]
        +                      },
        +                      "totalCredits": {
        +                        "anyOf": [
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ]
        +                      },
        +                      "totalDebits": {
        +                        "anyOf": [
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ]
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  "transactions": {
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "accountId": {
        +                          "type": "number"
        +                        },
        +                        "amount": {
        +                          "anyOf": [
        +                            {
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "string"
        +                            }
        +                          ]
        +                        },
        +                        "balance": {
        +                          "anyOf": [
        +                            {
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "string"
        +                            }
        +                          ]
        +                        },
        +                        "category": {
        +                          "type": "string"
        +                        },
        +                        "checkNumber": {
        +                          "type": "string"
        +                        },
        +                        "currency": {
        +                          "type": "string"
        +                        },
        +                        "date": {
        +                          "type": "string"
        +                        },
        +                        "description": {
        +                          "type": "string"
        +                        },
        +                        "direction": {
        +                          "anyOf": [
        +                            {
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "originalData": {
        +                          "additionalProperties": {
        +                            "type": "string"
        +                          },
        +                          "propertyNames": {
        +                            "type": "string"
        +                          },
        +                          "type": "object"
        +                        },
        +                        "reference": {
        +                          "type": "string"
        +                        },
        +                        "sequence": {
        +                          "type": "number"
        +                        }
        +                      },
        +                      "required": [
        +                        "sequence",
        +                        "date",
        +                        "description",
        +                        "amount",
        +                        "direction",
        +                        "currency"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  }
        +                },
        +                "required": [
        +                  "accountId"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            "categories": {
        +              "items": {
        +                "additionalProperties": {
        +                  "$ref": "#/$defs/__schema0"
        +                },
        +                "propertyNames": {
        +                  "type": "string"
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            "currency": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "declared": {
        +              "items": {
        +                "additionalProperties": {
        +                  "$ref": "#/$defs/__schema0"
        +                },
        +                "propertyNames": {
        +                  "type": "string"
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            "productId": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "productName": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            }
        +          },
        +          "required": [
        +            "productId",
        +            "productName",
        +            "currency",
        +            "accounts"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "products"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / elapsedMs
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "pass": {
        +          "type": "number"
        +        },
        +        "total": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "pass",
        +        "total"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / estimateSeconds
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / extraction / additionalProperties
        Previous value: -{}New value: +false
      • changedOutput schema / properties / gating / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "accessMode": {
        -        "enum": [
        -          "paid",
        -          "free_processed"
        -        ],
        -        "type": "string"
        -      },
        -      "gatedRecipe": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "template-first",
        -              "vlm-learning"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "hiddenTransactionPages": {
        -        "type": "number"
        -      },
        -      "previewMode": {
        -        "type": "boolean"
        -      },
        -      "previewPageLimit": {
        -        "anyOf": [
        -          {
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "previewPages": {
        -        "items": {
        -          "type": "number"
        -        },
        -        "type": "array"
        -      },
        -      "previewTransactionCount": {
        -        "type": "number"
        -      },
        -      "processedPages": {
        -        "type": "number"
        -      },
        -      "requiresPlanUpgrade": {
        -        "type": "boolean"
        -      },
        -      "resultQuality": {
        -        "enum": [
        -          "verified",
        -          "partial",
        -          "unverified"
        -        ],
        -        "type": "string"
        -      },
        -      "totalPages": {
        -        "type": "number"
        -      },
        -      "totalTransactionCount": {
        -        "type": "number"
        -      },
        -      "unlocked": {
        -        "type": "boolean"
        -      }
        -    },
        -    "required": [
        -      "previewMode",
        -      "accessMode",
        -      "previewPageLimit",
        -      "previewPages",
        -      "hiddenTransactionPages",
        -      "processedPages",
        -      "totalPages",
        -      "totalTransactionCount",
        -      "previewTransactionCount",
        -      "unlocked",
        -      "requiresPlanUpgrade",
        -      "resultQuality",
        -      "gatedRecipe"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "accessMode": {
        +        "enum": [
        +          "paid",
        +          "free_processed"
        +        ],
        +        "type": "string"
        +      },
        +      "gatedRecipe": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "template-first",
        +              "vlm-learning"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "hiddenTransactionPages": {
        +        "type": "number"
        +      },
        +      "previewMode": {
        +        "type": "boolean"
        +      },
        +      "previewPageLimit": {
        +        "anyOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "previewPages": {
        +        "items": {
        +          "type": "number"
        +        },
        +        "type": "array"
        +      },
        +      "previewTransactionCount": {
        +        "type": "number"
        +      },
        +      "processedPages": {
        +        "type": "number"
        +      },
        +      "requiresPlanUpgrade": {
        +        "type": "boolean"
        +      },
        +      "resultQuality": {
        +        "enum": [
        +          "verified",
        +          "partial",
        +          "unverified"
        +        ],
        +        "type": "string"
        +      },
        +      "totalPages": {
        +        "type": "number"
        +      },
        +      "totalTransactionCount": {
        +        "type": "number"
        +      },
        +      "unlocked": {
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "previewMode",
        +      "accessMode",
        +      "previewPageLimit",
        +      "previewPages",
        +      "hiddenTransactionPages",
        +      "processedPages",
        +      "totalPages",
        +      "totalTransactionCount",
        +      "previewTransactionCount",
        +      "unlocked",
        +      "requiresPlanUpgrade",
        +      "resultQuality",
        +      "gatedRecipe"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / pagination / additionalProperties
        Previous value: -{}New value: +false
      • addedOutput schema / properties / processingProgress
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "pagesProcessed": {
        +          "type": "number"
        +        },
        +        "pass": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "number": {
        +              "type": "number"
        +            },
        +            "startedAt": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "number",
        +            "startedAt"
        +          ],
        +          "type": "object"
        +        },
        +        "totalPages": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "pagesProcessed",
        +        "totalPages"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / processingStage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / results / items / additionalProperties
        Previous value: -{}New value: +false
      • changedOutput schema / properties / warnings / items / additionalProperties
        Previous value: -{}New value: +false
    • Changedevaluate_benchmark9 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "__schema0": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "number"
        +      },
        +      {
        +        "type": "boolean"
        +      },
        +      {
        +        "type": "null"
        +      },
        +      {
        +        "items": {
        +          "$ref": "#/$defs/__schema0"
        +        },
        +        "type": "array"
        +      },
        +      {
        +        "additionalProperties": {
        +          "$ref": "#/$defs/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  }
        +}
      • addedOutput schema / properties / contentHash
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / datasetVersion
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / normalizedScore / additionalProperties / $ref
        Added value: +"#/$defs/__schema0"
      • removedOutput schema / properties / normalizedScore / properties
        Removed value: -{}
      • addedOutput schema / properties / normalizedScore / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / parsedScore / additionalProperties / $ref
        Added value: +"#/$defs/__schema0"
      • removedOutput schema / properties / parsedScore / properties
        Removed value: -{}
      • addedOutput schema / properties / parsedScore / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedget_statement23 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "__schema0": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "number"
        +      },
        +      {
        +        "type": "boolean"
        +      },
        +      {
        +        "type": "null"
        +      },
        +      {
        +        "items": {
        +          "$ref": "#/$defs/__schema0"
        +        },
        +        "type": "array"
        +      },
        +      {
        +        "additionalProperties": {
        +          "$ref": "#/$defs/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  }
        +}
      • changedOutput schema / properties / columns / items / additionalProperties
        Previous value: -{}New value: +false
      • addedOutput schema / properties / completedAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / createdAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / bank
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / bankId
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / country
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / currency
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / documentType
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / languages
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / pageCount
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / statementDate
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / document / properties / statementPeriod
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "from": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "to": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "required": [
        +    "from",
        +    "to"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / document / properties / statements
        Added value: +{
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {
        +      "date": {
        +        "type": "string"
        +      },
        +      "period": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "from": {
        +            "type": "string"
        +          },
        +          "to": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "from",
        +          "to"
        +        ],
        +        "type": "object"
        +      },
        +      "products": {
        +        "items": {
        +          "additionalProperties": {},
        +          "properties": {
        +            "accounts": {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "accountHolderName": {
        +                    "anyOf": [
        +                      {
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "accountId": {
        +                    "anyOf": [
        +                      {
        +                        "type": "number"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "accountNumber": {
        +                    "anyOf": [
        +                      {
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "cardNumber": {
        +                    "anyOf": [
        +                      {
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "categories": {
        +                    "items": {
        +                      "additionalProperties": {
        +                        "$ref": "#/$defs/__schema0"
        +                      },
        +                      "propertyNames": {
        +                        "type": "string"
        +                      },
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "currency": {
        +                    "type": "string"
        +                  },
        +                  "declared": {
        +                    "items": {
        +                      "additionalProperties": {
        +                        "$ref": "#/$defs/__schema0"
        +                      },
        +                      "propertyNames": {
        +                        "type": "string"
        +                      },
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "totals": {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "closingBalance": {
        +                        "anyOf": [
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ]
        +                      },
        +                      "openingBalance": {
        +                        "anyOf": [
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ]
        +                      },
        +                      "totalCredits": {
        +                        "anyOf": [
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ]
        +                      },
        +                      "totalDebits": {
        +                        "anyOf": [
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ]
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  "transactions": {
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "accountId": {
        +                          "type": "number"
        +                        },
        +                        "amount": {
        +                          "anyOf": [
        +                            {
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "string"
        +                            }
        +                          ]
        +                        },
        +                        "balance": {
        +                          "anyOf": [
        +                            {
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "string"
        +                            }
        +                          ]
        +                        },
        +                        "category": {
        +                          "type": "string"
        +                        },
        +                        "checkNumber": {
        +                          "type": "string"
        +                        },
        +                        "currency": {
        +                          "type": "string"
        +                        },
        +                        "date": {
        +                          "type": "string"
        +                        },
        +                        "description": {
        +                          "type": "string"
        +                        },
        +                        "direction": {
        +                          "anyOf": [
        +                            {
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "originalData": {
        +                          "additionalProperties": {
        +                            "type": "string"
        +                          },
        +                          "propertyNames": {
        +                            "type": "string"
        +                          },
        +                          "type": "object"
        +                        },
        +                        "reference": {
        +                          "type": "string"
        +                        },
        +                        "sequence": {
        +                          "type": "number"
        +                        }
        +                      },
        +                      "required": [
        +                        "sequence",
        +                        "date",
        +                        "description",
        +                        "amount",
        +                        "direction",
        +                        "currency"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  }
        +                },
        +                "required": [
        +                  "accountId"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            "categories": {
        +              "items": {
        +                "additionalProperties": {
        +                  "$ref": "#/$defs/__schema0"
        +                },
        +                "propertyNames": {
        +                  "type": "string"
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            "currency": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "declared": {
        +              "items": {
        +                "additionalProperties": {
        +                  "$ref": "#/$defs/__schema0"
        +                },
        +                "propertyNames": {
        +                  "type": "string"
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            "productId": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "productName": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            }
        +          },
        +          "required": [
        +            "productId",
        +            "productName",
        +            "currency",
        +            "accounts"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "products"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / elapsedMs
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "pass": {
        +          "type": "number"
        +        },
        +        "total": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "pass",
        +        "total"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / estimateSeconds
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / extraction / additionalProperties
        Previous value: -{}New value: +false
      • changedOutput schema / properties / gating / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "accessMode": {
        -        "enum": [
        -          "paid",
        -          "free_processed"
        -        ],
        -        "type": "string"
        -      },
        -      "gatedRecipe": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "template-first",
        -              "vlm-learning"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "hiddenTransactionPages": {
        -        "type": "number"
        -      },
        -      "previewMode": {
        -        "type": "boolean"
        -      },
        -      "previewPageLimit": {
        -        "anyOf": [
        -          {
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "previewPages": {
        -        "items": {
        -          "type": "number"
        -        },
        -        "type": "array"
        -      },
        -      "previewTransactionCount": {
        -        "type": "number"
        -      },
        -      "processedPages": {
        -        "type": "number"
        -      },
        -      "requiresPlanUpgrade": {
        -        "type": "boolean"
        -      },
        -      "resultQuality": {
        -        "enum": [
        -          "verified",
        -          "partial",
        -          "unverified"
        -        ],
        -        "type": "string"
        -      },
        -      "totalPages": {
        -        "type": "number"
        -      },
        -      "totalTransactionCount": {
        -        "type": "number"
        -      },
        -      "unlocked": {
        -        "type": "boolean"
        -      }
        -    },
        -    "required": [
        -      "previewMode",
        -      "accessMode",
        -      "previewPageLimit",
        -      "previewPages",
        -      "hiddenTransactionPages",
        -      "processedPages",
        -      "totalPages",
        -      "totalTransactionCount",
        -      "previewTransactionCount",
        -      "unlocked",
        -      "requiresPlanUpgrade",
        -      "resultQuality",
        -      "gatedRecipe"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "accessMode": {
        +        "enum": [
        +          "paid",
        +          "free_processed"
        +        ],
        +        "type": "string"
        +      },
        +      "gatedRecipe": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "template-first",
        +              "vlm-learning"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "hiddenTransactionPages": {
        +        "type": "number"
        +      },
        +      "previewMode": {
        +        "type": "boolean"
        +      },
        +      "previewPageLimit": {
        +        "anyOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "previewPages": {
        +        "items": {
        +          "type": "number"
        +        },
        +        "type": "array"
        +      },
        +      "previewTransactionCount": {
        +        "type": "number"
        +      },
        +      "processedPages": {
        +        "type": "number"
        +      },
        +      "requiresPlanUpgrade": {
        +        "type": "boolean"
        +      },
        +      "resultQuality": {
        +        "enum": [
        +          "verified",
        +          "partial",
        +          "unverified"
        +        ],
        +        "type": "string"
        +      },
        +      "totalPages": {
        +        "type": "number"
        +      },
        +      "totalTransactionCount": {
        +        "type": "number"
        +      },
        +      "unlocked": {
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "previewMode",
        +      "accessMode",
        +      "previewPageLimit",
        +      "previewPages",
        +      "hiddenTransactionPages",
        +      "processedPages",
        +      "totalPages",
        +      "totalTransactionCount",
        +      "previewTransactionCount",
        +      "unlocked",
        +      "requiresPlanUpgrade",
        +      "resultQuality",
        +      "gatedRecipe"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / pagination / additionalProperties
        Previous value: -{}New value: +false
      • addedOutput schema / properties / processingProgress
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "pagesProcessed": {
        +          "type": "number"
        +        },
        +        "pass": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "number": {
        +              "type": "number"
        +            },
        +            "startedAt": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "number",
        +            "startedAt"
        +          ],
        +          "type": "object"
        +        },
        +        "totalPages": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "pagesProcessed",
        +        "totalPages"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / processingStage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / results / items / additionalProperties
        Previous value: -{}New value: +false
      • changedOutput schema / properties / warnings / items / additionalProperties
        Previous value: -{}New value: +false
    • Changedgroup_by3 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "__schema0": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "number"
        +      },
        +      {
        +        "type": "boolean"
        +      },
        +      {
        +        "type": "null"
        +      },
        +      {
        +        "items": {
        +          "$ref": "#/$defs/__schema0"
        +        },
        +        "type": "array"
        +      },
        +      {
        +        "additionalProperties": {
        +          "$ref": "#/$defs/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  }
        +}
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": {},
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": {},
        -      "properties": {},
        -      "type": "object"
        -    },
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {
        +      "$ref": "#/$defs/__schema0"
        +    },
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "items": {
        +      "additionalProperties": {
        +        "$ref": "#/$defs/__schema0"
        +      },
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedOutput schema / properties / scope / additionalProperties
        Previous value: -{}New value: +false
    • Changedlist_statements12 fields changed
      • addedOutput schema / properties / documents / items / properties / bank
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / documents / items / properties / country
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / documents / items / properties / currency
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / documents / items / properties / elapsedMs
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "pass": {
        +          "type": "number"
        +        },
        +        "total": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "pass",
        +        "total"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / documents / items / properties / error
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / documents / items / properties / estimateSeconds
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / documents / items / properties / processingProgress
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "pagesProcessed": {
        +          "type": "number"
        +        },
        +        "pass": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "number": {
        +              "type": "number"
        +            },
        +            "startedAt": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "number",
        +            "startedAt"
        +          ],
        +          "type": "object"
        +        },
        +        "totalPages": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "pagesProcessed",
        +        "totalPages"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / documents / items / properties / processingStage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / documents / items / properties / summary
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / documents / items / properties / transactionCount
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / documents / items / required
        Previous value: -[
        -  "id",
        -  "status",
        -  "filename",
        -  "pageCount",
        -  "createdAt",
        -  "completedAt"
        -]New value: +[
        +  "id",
        +  "status"
        +]
      • changedOutput schema / properties / pagination / additionalProperties
        Previous value: -{}New value: +false
    • Changedlist_transactions1 field changed
      • changedOutput schema / properties / scope / additionalProperties
        Previous value: -{}New value: +false
    • Changedlist_transfers35 fields changed
      • changedOutput schema / properties / accountSuccessions / items / additionalProperties
        Previous value: -{}New value: +false
      • addedOutput schema / properties / accountSuccessions / items / properties / currency
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / accountSuccessions / items / properties / effectiveDate
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / accountSuccessions / items / properties / predecessorAccount
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / accountSuccessions / items / properties / predecessorDropAmount
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / accountSuccessions / items / properties / provenance
        Added value: +{
        +  "const": "deterministic",
        +  "type": "string"
        +}
      • addedOutput schema / properties / accountSuccessions / items / properties / successorAccounts
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / accountSuccessions / items / properties / successorOpeningAmount
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / accountSuccessions / items / required
        Added value: +[
        +  "predecessorAccount",
        +  "successorAccounts",
        +  "currency",
        +  "predecessorDropAmount",
        +  "successorOpeningAmount",
        +  "effectiveDate",
        +  "provenance"
        +]
      • changedOutput schema / properties / ambiguous / items / additionalProperties
        Previous value: -{}New value: +false
      • addedOutput schema / properties / ambiguous / items / properties / amount
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / ambiguous / items / properties / currency
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / ambiguous / items / properties / fromAccount
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / ambiguous / items / properties / fromDate
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / ambiguous / items / properties / fromTransactionId
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / ambiguous / items / properties / toAccount
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / ambiguous / items / properties / toDate
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / ambiguous / items / properties / toTransactionId
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / ambiguous / items / required
        Added value: +[
        +  "fromAccount",
        +  "toAccount",
        +  "fromTransactionId",
        +  "toTransactionId",
        +  "amount",
        +  "currency",
        +  "fromDate",
        +  "toDate"
        +]
      • changedOutput schema / properties / scope / additionalProperties
        Previous value: -{}New value: +false
      • changedOutput schema / properties / transfers / items / additionalProperties
        Previous value: -{}New value: +false
      • addedOutput schema / properties / transfers / items / properties / amount
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / transfers / items / properties / currency
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / transfers / items / properties / dateDeltaDays
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / transfers / items / properties / fromAccount
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / transfers / items / properties / fromDate
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / transfers / items / properties / provenance
        Added value: +{
        +  "enum": [
        +    "deterministic",
        +    "judge"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / transfers / items / properties / toAccount
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / transfers / items / properties / toDate
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / transfers / items / required
        Added value: +[
        +  "fromAccount",
        +  "toAccount",
        +  "amount",
        +  "currency",
        +  "fromDate",
        +  "toDate",
        +  "dateDeltaDays",
        +  "provenance"
        +]
      • changedOutput schema / properties / unmatched / additionalProperties
        Previous value: -{}New value: +false
      • addedOutput schema / properties / unmatched / properties / count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / unmatched / properties / floorAmount
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / unmatched / properties / movements
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "account": {
        +        "type": "string"
        +      },
        +      "amount": {
        +        "type": "number"
        +      },
        +      "currency": {
        +        "type": "string"
        +      },
        +      "date": {
        +        "type": "string"
        +      },
        +      "description": {
        +        "type": "string"
        +      },
        +      "direction": {
        +        "enum": [
        +          "credit",
        +          "debit"
        +        ],
        +        "type": "string"
        +      },
        +      "sourceDocument": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "contentHash": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          }
        +        },
        +        "required": [
        +          "contentHash"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "account",
        +      "date",
        +      "description",
        +      "amount",
        +      "currency",
        +      "direction",
        +      "sourceDocument"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / unmatched / required
        Added value: +[
        +  "floorAmount",
        +  "count",
        +  "movements"
        +]
    • Changedtime_series3 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "__schema0": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "number"
        +      },
        +      {
        +        "type": "boolean"
        +      },
        +      {
        +        "type": "null"
        +      },
        +      {
        +        "items": {
        +          "$ref": "#/$defs/__schema0"
        +        },
        +        "type": "array"
        +      },
        +      {
        +        "additionalProperties": {
        +          "$ref": "#/$defs/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  }
        +}
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": {},
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": {},
        -      "properties": {},
        -      "type": "object"
        -    },
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {
        +      "$ref": "#/$defs/__schema0"
        +    },
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "items": {
        +      "additionalProperties": {
        +        "$ref": "#/$defs/__schema0"
        +      },
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedOutput schema / properties / scope / additionalProperties
        Previous value: -{}New value: +false
    • Changedtop_n3 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "__schema0": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "number"
        +      },
        +      {
        +        "type": "boolean"
        +      },
        +      {
        +        "type": "null"
        +      },
        +      {
        +        "items": {
        +          "$ref": "#/$defs/__schema0"
        +        },
        +        "type": "array"
        +      },
        +      {
        +        "additionalProperties": {
        +          "$ref": "#/$defs/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  }
        +}
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": {},
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": {},
        -      "properties": {},
        -      "type": "object"
        -    },
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {
        +      "$ref": "#/$defs/__schema0"
        +    },
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "items": {
        +      "additionalProperties": {
        +        "$ref": "#/$defs/__schema0"
        +      },
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedOutput schema / properties / scope / additionalProperties
        Previous value: -{}New value: +false
  11. 16 tool updates
    • Changedaggregate21 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / filter / description
        Added value: +"Subset of transactions to operate on. All fields are optional and combined with AND logic."
      • addedInput schema / properties / filter / properties / accounts / description
        Added value: +"Account number slugs to include."
      • addedInput schema / properties / filter / properties / amountMax / description
        Added value: +"Inclusive maximum absolute amount."
      • addedInput schema / properties / filter / properties / amountMin / description
        Added value: +"Inclusive minimum absolute amount."
      • addedInput schema / properties / filter / properties / category / description
        Added value: +"Category slug, e.g. \"meals_entertainment\", \"groceries_personal\"."
      • addedInput schema / properties / filter / properties / currency / description
        Added value: +"ISO 4217 currency code. E.g. \"USD\", \"HKD\"."
      • addedInput schema / properties / filter / properties / dateEnd / description
        Added value: +"ISO date (YYYY-MM-DD). Inclusive upper bound."
      • addedInput schema / properties / filter / properties / dateStart / description
        Added value: +"ISO date (YYYY-MM-DD). Inclusive lower bound."
      • addedInput schema / properties / filter / properties / direction / description
        Added value: +"Semantic direction."
      • addedInput schema / properties / filter / properties / merchant / description
        Added value: +"Substring match against description or counterparty (case-insensitive)."
      • addedInput schema / properties / filter / properties / text / description
        Added value: +"Whole-row text search over raw transaction fields (case-insensitive)."
      • addedInput schema / properties / metric / description
        Added value: +"Aggregation metric."
      • addedInput schema / properties / scope / description
        Added value: +"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • addedInput schema / properties / scope / properties / accounts / description
        Added value: +"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."
      • removedInput schema / properties / scope / properties / accounts / items / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "type": "string"
        -      },
        -      "label": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "type": "string"
        -      },
        -      "label": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]
      • addedInput schema / properties / scope / properties / accounts / items / oneOf
        Added value: +[
        +  {
        +    "properties": {
        +      "anchorContentHash": {
        +        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        +        "type": "string"
        +      },
        +      "identityKey": {
        +        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "description": "This chip addresses a single account.",
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "Display label for this chip.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "identityKey": {
        +        "description": "Product slug.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "description": "This chip addresses a product and expands to its child accounts.",
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "Display label for this chip.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / scope / properties / dateRange / description
        Added value: +"Bounds results to transactions within this date range. Omit for no date filter."
      • addedInput schema / properties / scope / properties / dateRange / properties / from / description
        Added value: +"Start of the date range (inclusive), YYYY-MM-DD."
      • addedInput schema / properties / scope / properties / dateRange / properties / to / description
        Added value: +"End of the date range (inclusive), YYYY-MM-DD."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedcategorize_statement3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / document_id / description
        Added value: +"Document ID (from convert_statement or list_statements)"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedcompare32 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / filterA / description
        Added value: +"Subset of transactions to operate on. All fields are optional and combined with AND logic."
      • addedInput schema / properties / filterA / properties / accounts / description
        Added value: +"Account number slugs to include."
      • addedInput schema / properties / filterA / properties / amountMax / description
        Added value: +"Inclusive maximum absolute amount."
      • addedInput schema / properties / filterA / properties / amountMin / description
        Added value: +"Inclusive minimum absolute amount."
      • addedInput schema / properties / filterA / properties / category / description
        Added value: +"Category slug, e.g. \"meals_entertainment\", \"groceries_personal\"."
      • addedInput schema / properties / filterA / properties / currency / description
        Added value: +"ISO 4217 currency code. E.g. \"USD\", \"HKD\"."
      • addedInput schema / properties / filterA / properties / dateEnd / description
        Added value: +"ISO date (YYYY-MM-DD). Inclusive upper bound."
      • addedInput schema / properties / filterA / properties / dateStart / description
        Added value: +"ISO date (YYYY-MM-DD). Inclusive lower bound."
      • addedInput schema / properties / filterA / properties / direction / description
        Added value: +"Semantic direction."
      • addedInput schema / properties / filterA / properties / merchant / description
        Added value: +"Substring match against description or counterparty (case-insensitive)."
      • addedInput schema / properties / filterA / properties / text / description
        Added value: +"Whole-row text search over raw transaction fields (case-insensitive)."
      • addedInput schema / properties / filterB / description
        Added value: +"Subset of transactions to operate on. All fields are optional and combined with AND logic."
      • addedInput schema / properties / filterB / properties / accounts / description
        Added value: +"Account number slugs to include."
      • addedInput schema / properties / filterB / properties / amountMax / description
        Added value: +"Inclusive maximum absolute amount."
      • addedInput schema / properties / filterB / properties / amountMin / description
        Added value: +"Inclusive minimum absolute amount."
      • addedInput schema / properties / filterB / properties / category / description
        Added value: +"Category slug, e.g. \"meals_entertainment\", \"groceries_personal\"."
      • addedInput schema / properties / filterB / properties / currency / description
        Added value: +"ISO 4217 currency code. E.g. \"USD\", \"HKD\"."
      • addedInput schema / properties / filterB / properties / dateEnd / description
        Added value: +"ISO date (YYYY-MM-DD). Inclusive upper bound."
      • addedInput schema / properties / filterB / properties / dateStart / description
        Added value: +"ISO date (YYYY-MM-DD). Inclusive lower bound."
      • addedInput schema / properties / filterB / properties / direction / description
        Added value: +"Semantic direction."
      • addedInput schema / properties / filterB / properties / merchant / description
        Added value: +"Substring match against description or counterparty (case-insensitive)."
      • addedInput schema / properties / filterB / properties / text / description
        Added value: +"Whole-row text search over raw transaction fields (case-insensitive)."
      • addedInput schema / properties / metric / description
        Added value: +"Metric for both groups."
      • addedInput schema / properties / scope / description
        Added value: +"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • addedInput schema / properties / scope / properties / accounts / description
        Added value: +"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."
      • removedInput schema / properties / scope / properties / accounts / items / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "type": "string"
        -      },
        -      "label": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "type": "string"
        -      },
        -      "label": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]
      • addedInput schema / properties / scope / properties / accounts / items / oneOf
        Added value: +[
        +  {
        +    "properties": {
        +      "anchorContentHash": {
        +        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        +        "type": "string"
        +      },
        +      "identityKey": {
        +        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "description": "This chip addresses a single account.",
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "Display label for this chip.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "identityKey": {
        +        "description": "Product slug.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "description": "This chip addresses a product and expands to its child accounts.",
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "Display label for this chip.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / scope / properties / dateRange / description
        Added value: +"Bounds results to transactions within this date range. Omit for no date filter."
      • addedInput schema / properties / scope / properties / dateRange / properties / from / description
        Added value: +"Start of the date range (inclusive), YYYY-MM-DD."
      • addedInput schema / properties / scope / properties / dateRange / properties / to / description
        Added value: +"End of the date range (inclusive), YYYY-MM-DD."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedconvert_statement13 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / output_format / description
        Added value: +"Output format"
      • addedInput schema / properties / password / description
        Added value: +"Password for encrypted PDFs"
      • addedInput schema / properties / pdf / description
        Added value: +"Base64-encoded PDF content — last resort only; prefer pdf_file for an attachment or pdf_url for a link"
      • addedInput schema / properties / pdf_file / description
        Added value: +"An attached PDF (populated automatically by ChatGPT — do not construct this yourself)."
      • addedInput schema / properties / pdf_file / properties / download_url / description
        Added value: +"Signed URL ChatGPT provides to fetch the attached PDF's bytes."
      • addedInput schema / properties / pdf_file / properties / file_id / description
        Added value: +"ChatGPT's identifier for the attached file."
      • addedInput schema / properties / pdf_file / properties / file_name / description
        Added value: +"Original filename of the attached file, when ChatGPT provides one."
      • addedInput schema / properties / pdf_file / properties / mime_type / description
        Added value: +"MIME type of the attached file, when ChatGPT provides one."
      • addedInput schema / properties / pdf_url / description
        Added value: +"HTTPS URL to fetch the PDF from"
      • addedInput schema / properties / upload_id / description
        Added value: +"An upload_id from request_upload, after PUTting the file to its upload_url. Use this only when your host has no other way to reference the attached file (no pdf_file/pdf_url equivalent)."
      • addedInput schema / properties / upload_ids / description
        Added value: +"Batch of upload_ids from a single request_upload(count) call, each already PUT to its own upload_url — converts many statements in one call. Mutually exclusive with pdf, pdf_url, pdf_file, and upload_id. Admission only: the response reports per-file status immediately, never waiting for conversion — fetch results per document_id via get_statement."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changeddismiss_statement3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / document_id / description
        Added value: +"Document ID from list_statements, convert_statement, or get_statement"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevaluate_benchmark18 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / accounts / description
        Added value: +"Optional account roster for multi-account statements. Each transaction references one via accountId."
      • addedInput schema / properties / accounts / items / properties / accountNumber / description
        Added value: +"Verbatim printed account number — never normalized by the submitter."
      • addedInput schema / properties / accounts / items / properties / currency / description
        Added value: +"ISO 4217 currency code."
      • addedInput schema / properties / accounts / items / properties / id / description
        Added value: +"Submission-internal handle, referenced by transactions[].accountId."
      • addedInput schema / properties / accounts / items / properties / name / description
        Added value: +"Verbatim printed account label."
      • addedInput schema / properties / content_hash / description
        Added value: +"SHA-256 hex digest of the PDF. Use statement_id instead if you know it."
      • addedInput schema / properties / statement_id / description
        Added value: +"Benchmark statement ID (e.g. \"bsb-001\"). Preferred over content_hash."
      • addedInput schema / properties / transactions / description
        Added value: +"Parsed transactions (1-2000)"
      • addedInput schema / properties / transactions / items / properties / accountId / description
        Added value: +"References accounts[].id — the account this transaction belongs to. Omit for single-account statements."
      • addedInput schema / properties / transactions / items / properties / amount / description
        Added value: +"Transaction amount. Negative = debit, positive = credit (or use direction)."
      • addedInput schema / properties / transactions / items / properties / balance / description
        Added value: +"Running balance after this transaction, if known."
      • addedInput schema / properties / transactions / items / properties / currency / description
        Added value: +"ISO 4217 currency code for this transaction, if known."
      • addedInput schema / properties / transactions / items / properties / date / description
        Added value: +"ISO 8601 date (YYYY-MM-DD)"
      • addedInput schema / properties / transactions / items / properties / description / description
        Added value: +"Transaction description as printed on the statement."
      • addedInput schema / properties / transactions / items / properties / direction / description
        Added value: +"Explicit direction. If omitted, inferred from amount sign."
      • addedInput schema / properties / transactions / items / properties / originalData / description
        Added value: +"Raw column values as on the PDF. Omit if unavailable — never fabricate a value; an absence scores the parsed dimension's raw fields 0 rather than polluting the measurement."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_credits2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_statement7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / data_mode / description
        Added value: +"Omit for each output_format's existing default behavior (json: normalized; csv/xlsx: the export route's own default). \"normalized\": the cleaned, interpreted data. \"original\": includes each transaction's raw column values as printed on the source PDF (originalData) — fetch this before submitting to evaluate_benchmark. \"enhanced\": a reformatted view of the original columns; only available for output_format csv/xlsx today. qbo/xero always export normalized data — omit data_mode (or pass \"normalized\" explicitly) for those formats."
      • addedInput schema / properties / document_id / description
        Added value: +"Document ID (from convert_statement or list_statements)"
      • addedInput schema / properties / limit / description
        Added value: +"output_format \"json\" only. Max transactions to return (default 500, capped at 2000, or 500 with data_mode \"original\")."
      • addedInput schema / properties / offset / description
        Added value: +"output_format \"json\" only. Number of transactions to skip. Omit to start from the beginning."
      • addedInput schema / properties / output_format / description
        Added value: +"Output format"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedgroup_by22 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / dimension / description
        Added value: +"Grouping dimension."
      • addedInput schema / properties / filter / description
        Added value: +"Subset of transactions to operate on. All fields are optional and combined with AND logic."
      • addedInput schema / properties / filter / properties / accounts / description
        Added value: +"Account number slugs to include."
      • addedInput schema / properties / filter / properties / amountMax / description
        Added value: +"Inclusive maximum absolute amount."
      • addedInput schema / properties / filter / properties / amountMin / description
        Added value: +"Inclusive minimum absolute amount."
      • addedInput schema / properties / filter / properties / category / description
        Added value: +"Category slug, e.g. \"meals_entertainment\", \"groceries_personal\"."
      • addedInput schema / properties / filter / properties / currency / description
        Added value: +"ISO 4217 currency code. E.g. \"USD\", \"HKD\"."
      • addedInput schema / properties / filter / properties / dateEnd / description
        Added value: +"ISO date (YYYY-MM-DD). Inclusive upper bound."
      • addedInput schema / properties / filter / properties / dateStart / description
        Added value: +"ISO date (YYYY-MM-DD). Inclusive lower bound."
      • addedInput schema / properties / filter / properties / direction / description
        Added value: +"Semantic direction."
      • addedInput schema / properties / filter / properties / merchant / description
        Added value: +"Substring match against description or counterparty (case-insensitive)."
      • addedInput schema / properties / filter / properties / text / description
        Added value: +"Whole-row text search over raw transaction fields (case-insensitive)."
      • addedInput schema / properties / metric / description
        Added value: +"Metric per group."
      • addedInput schema / properties / scope / description
        Added value: +"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • addedInput schema / properties / scope / properties / accounts / description
        Added value: +"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."
      • removedInput schema / properties / scope / properties / accounts / items / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "type": "string"
        -      },
        -      "label": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "type": "string"
        -      },
        -      "label": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]
      • addedInput schema / properties / scope / properties / accounts / items / oneOf
        Added value: +[
        +  {
        +    "properties": {
        +      "anchorContentHash": {
        +        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        +        "type": "string"
        +      },
        +      "identityKey": {
        +        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "description": "This chip addresses a single account.",
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "Display label for this chip.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "identityKey": {
        +        "description": "Product slug.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "description": "This chip addresses a product and expands to its child accounts.",
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "Display label for this chip.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / scope / properties / dateRange / description
        Added value: +"Bounds results to transactions within this date range. Omit for no date filter."
      • addedInput schema / properties / scope / properties / dateRange / properties / from / description
        Added value: +"Start of the date range (inclusive), YYYY-MM-DD."
      • addedInput schema / properties / scope / properties / dateRange / properties / to / description
        Added value: +"End of the date range (inclusive), YYYY-MM-DD."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_statements5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / limit / description
        Added value: +"Max results (1-100)"
      • addedInput schema / properties / offset / description
        Added value: +"Pagination offset"
      • addedInput schema / properties / status / description
        Added value: +"Filter by status"
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_transactions23 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / filter / description
        Added value: +"Subset of transactions to operate on. All fields are optional and combined with AND logic."
      • addedInput schema / properties / filter / properties / accounts / description
        Added value: +"Account number slugs to include."
      • addedInput schema / properties / filter / properties / amountMax / description
        Added value: +"Inclusive maximum absolute amount."
      • addedInput schema / properties / filter / properties / amountMin / description
        Added value: +"Inclusive minimum absolute amount."
      • addedInput schema / properties / filter / properties / category / description
        Added value: +"Category slug, e.g. \"meals_entertainment\", \"groceries_personal\"."
      • addedInput schema / properties / filter / properties / currency / description
        Added value: +"ISO 4217 currency code. E.g. \"USD\", \"HKD\"."
      • addedInput schema / properties / filter / properties / dateEnd / description
        Added value: +"ISO date (YYYY-MM-DD). Inclusive upper bound."
      • addedInput schema / properties / filter / properties / dateStart / description
        Added value: +"ISO date (YYYY-MM-DD). Inclusive lower bound."
      • addedInput schema / properties / filter / properties / direction / description
        Added value: +"Semantic direction."
      • addedInput schema / properties / filter / properties / merchant / description
        Added value: +"Substring match against description or counterparty (case-insensitive)."
      • addedInput schema / properties / filter / properties / text / description
        Added value: +"Whole-row text search over raw transaction fields (case-insensitive)."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum rows to return. Default 20, max 50."
      • addedInput schema / properties / order / description
        Added value: +"Sort direction. Default \"desc\" (largest amount / most recent date first). Only meaningful with sort_by."
      • addedInput schema / properties / scope / description
        Added value: +"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • addedInput schema / properties / scope / properties / accounts / description
        Added value: +"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."
      • removedInput schema / properties / scope / properties / accounts / items / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "type": "string"
        -      },
        -      "label": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "type": "string"
        -      },
        -      "label": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]
      • addedInput schema / properties / scope / properties / accounts / items / oneOf
        Added value: +[
        +  {
        +    "properties": {
        +      "anchorContentHash": {
        +        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        +        "type": "string"
        +      },
        +      "identityKey": {
        +        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "description": "This chip addresses a single account.",
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "Display label for this chip.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "identityKey": {
        +        "description": "Product slug.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "description": "This chip addresses a product and expands to its child accounts.",
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "Display label for this chip.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / scope / properties / dateRange / description
        Added value: +"Bounds results to transactions within this date range. Omit for no date filter."
      • addedInput schema / properties / scope / properties / dateRange / properties / from / description
        Added value: +"Start of the date range (inclusive), YYYY-MM-DD."
      • addedInput schema / properties / scope / properties / dateRange / properties / to / description
        Added value: +"End of the date range (inclusive), YYYY-MM-DD."
      • addedInput schema / properties / sort_by / description
        Added value: +"Sort the filtered set before applying limit. \"amount\" ranks by absolute magnitude (signed amounts are still returned). Omit for today's default (encounter order)."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_transfers10 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / amountMin / description
        Added value: +"Inclusive minimum absolute amount. When present, transfers/accountSuccessions are floored to this amount and the response gains an \"unmatched\" bucket of large movements with no matching counterpart. Omit for the ordinary reconciled-pairs answer."
      • addedInput schema / properties / scope / description
        Added value: +"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • addedInput schema / properties / scope / properties / accounts / description
        Added value: +"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."
      • removedInput schema / properties / scope / properties / accounts / items / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "type": "string"
        -      },
        -      "label": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "type": "string"
        -      },
        -      "label": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]
      • addedInput schema / properties / scope / properties / accounts / items / oneOf
        Added value: +[
        +  {
        +    "properties": {
        +      "anchorContentHash": {
        +        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        +        "type": "string"
        +      },
        +      "identityKey": {
        +        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "description": "This chip addresses a single account.",
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "Display label for this chip.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "identityKey": {
        +        "description": "Product slug.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "description": "This chip addresses a product and expands to its child accounts.",
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "Display label for this chip.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / scope / properties / dateRange / description
        Added value: +"Bounds results to transactions within this date range. Omit for no date filter."
      • addedInput schema / properties / scope / properties / dateRange / properties / from / description
        Added value: +"Start of the date range (inclusive), YYYY-MM-DD."
      • addedInput schema / properties / scope / properties / dateRange / properties / to / description
        Added value: +"End of the date range (inclusive), YYYY-MM-DD."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedrate_statement9 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / document_id / description
        Added value: +"Document ID (from convert_statement or list_statements)"
      • addedInput schema / properties / export_format / description
        Added value: +"Which output format you exported this conversion to (csv, xlsx, qbo, or xero)."
      • addedInput schema / properties / feedback / description
        Added value: +"Free-text feedback. Only accepted when rating is 3 or below."
      • addedInput schema / properties / feedback_categories / description
        Added value: +"Structured feedback categories. Only accepted when rating is 3 or below."
      • addedInput schema / properties / rating / description
        Added value: +"1-5 star rating for this conversion"
      • addedInput schema / properties / use_case / description
        Added value: +"Tags describing what you use the converted data for."
      • addedInput schema / properties / use_case_other / description
        Added value: +"Free-text use case, for when \"other\" is among the use_case tags."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedrequest_upload3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / count / description
        Added value: +"Batch size — mint this many independent single-use upload URLs in one call instead of calling request_upload once per file. When set, the response returns \"uploads\": an array of that many { upload_id, upload_url } pairs. Omit for the default single-URL response."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedtime_series22 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / bucket / description
        Added value: +"Bucket size."
      • addedInput schema / properties / filter / description
        Added value: +"Subset of transactions to operate on. All fields are optional and combined with AND logic."
      • addedInput schema / properties / filter / properties / accounts / description
        Added value: +"Account number slugs to include."
      • addedInput schema / properties / filter / properties / amountMax / description
        Added value: +"Inclusive maximum absolute amount."
      • addedInput schema / properties / filter / properties / amountMin / description
        Added value: +"Inclusive minimum absolute amount."
      • addedInput schema / properties / filter / properties / category / description
        Added value: +"Category slug, e.g. \"meals_entertainment\", \"groceries_personal\"."
      • addedInput schema / properties / filter / properties / currency / description
        Added value: +"ISO 4217 currency code. E.g. \"USD\", \"HKD\"."
      • addedInput schema / properties / filter / properties / dateEnd / description
        Added value: +"ISO date (YYYY-MM-DD). Inclusive upper bound."
      • addedInput schema / properties / filter / properties / dateStart / description
        Added value: +"ISO date (YYYY-MM-DD). Inclusive lower bound."
      • addedInput schema / properties / filter / properties / direction / description
        Added value: +"Semantic direction."
      • addedInput schema / properties / filter / properties / merchant / description
        Added value: +"Substring match against description or counterparty (case-insensitive)."
      • addedInput schema / properties / filter / properties / text / description
        Added value: +"Whole-row text search over raw transaction fields (case-insensitive)."
      • addedInput schema / properties / metric / description
        Added value: +"Metric per bucket."
      • addedInput schema / properties / scope / description
        Added value: +"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • addedInput schema / properties / scope / properties / accounts / description
        Added value: +"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."
      • removedInput schema / properties / scope / properties / accounts / items / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "type": "string"
        -      },
        -      "label": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "type": "string"
        -      },
        -      "label": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]
      • addedInput schema / properties / scope / properties / accounts / items / oneOf
        Added value: +[
        +  {
        +    "properties": {
        +      "anchorContentHash": {
        +        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        +        "type": "string"
        +      },
        +      "identityKey": {
        +        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "description": "This chip addresses a single account.",
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "Display label for this chip.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "identityKey": {
        +        "description": "Product slug.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "description": "This chip addresses a product and expands to its child accounts.",
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "Display label for this chip.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / scope / properties / dateRange / description
        Added value: +"Bounds results to transactions within this date range. Omit for no date filter."
      • addedInput schema / properties / scope / properties / dateRange / properties / from / description
        Added value: +"Start of the date range (inclusive), YYYY-MM-DD."
      • addedInput schema / properties / scope / properties / dateRange / properties / to / description
        Added value: +"End of the date range (inclusive), YYYY-MM-DD."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedtop_n23 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / dimension / description
        Added value: +"Grouping dimension."
      • addedInput schema / properties / filter / description
        Added value: +"Subset of transactions to operate on. All fields are optional and combined with AND logic."
      • addedInput schema / properties / filter / properties / accounts / description
        Added value: +"Account number slugs to include."
      • addedInput schema / properties / filter / properties / amountMax / description
        Added value: +"Inclusive maximum absolute amount."
      • addedInput schema / properties / filter / properties / amountMin / description
        Added value: +"Inclusive minimum absolute amount."
      • addedInput schema / properties / filter / properties / category / description
        Added value: +"Category slug, e.g. \"meals_entertainment\", \"groceries_personal\"."
      • addedInput schema / properties / filter / properties / currency / description
        Added value: +"ISO 4217 currency code. E.g. \"USD\", \"HKD\"."
      • addedInput schema / properties / filter / properties / dateEnd / description
        Added value: +"ISO date (YYYY-MM-DD). Inclusive upper bound."
      • addedInput schema / properties / filter / properties / dateStart / description
        Added value: +"ISO date (YYYY-MM-DD). Inclusive lower bound."
      • addedInput schema / properties / filter / properties / direction / description
        Added value: +"Semantic direction."
      • addedInput schema / properties / filter / properties / merchant / description
        Added value: +"Substring match against description or counterparty (case-insensitive)."
      • addedInput schema / properties / filter / properties / text / description
        Added value: +"Whole-row text search over raw transaction fields (case-insensitive)."
      • addedInput schema / properties / metric / description
        Added value: +"Metric to rank by."
      • addedInput schema / properties / n / description
        Added value: +"Number of top groups to return."
      • addedInput schema / properties / scope / description
        Added value: +"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • addedInput schema / properties / scope / properties / accounts / description
        Added value: +"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."
      • removedInput schema / properties / scope / properties / accounts / items / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "type": "string"
        -      },
        -      "label": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "type": "string"
        -      },
        -      "label": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]
      • addedInput schema / properties / scope / properties / accounts / items / oneOf
        Added value: +[
        +  {
        +    "properties": {
        +      "anchorContentHash": {
        +        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        +        "type": "string"
        +      },
        +      "identityKey": {
        +        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "description": "This chip addresses a single account.",
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "Display label for this chip.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "identityKey": {
        +        "description": "Product slug.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "description": "This chip addresses a product and expands to its child accounts.",
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "Display label for this chip.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / scope / properties / dateRange / description
        Added value: +"Bounds results to transactions within this date range. Omit for no date filter."
      • addedInput schema / properties / scope / properties / dateRange / properties / from / description
        Added value: +"Start of the date range (inclusive), YYYY-MM-DD."
      • addedInput schema / properties / scope / properties / dateRange / properties / to / description
        Added value: +"End of the date range (inclusive), YYYY-MM-DD."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  12. 1 tool update
    • Changedlist_statements2 fields changed
      • addedOutput schema / properties / documents / items / properties / completedAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / documents / items / required
        Previous value: -[
        -  "id",
        -  "status",
        -  "filename",
        -  "pageCount",
        -  "createdAt"
        -]New value: +[
        +  "id",
        +  "status",
        +  "filename",
        +  "pageCount",
        +  "createdAt",
        +  "completedAt"
        +]
  13. 1 tool update
    • Addeddismiss_statement
  14. 1 tool update
    • Changedlist_transactions2 fields changed
      • addedInput schema / properties / order
        Added value: +{
        +  "enum": [
        +    "asc",
        +    "desc"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / sort_by
        Added value: +{
        +  "enum": [
        +    "amount",
        +    "date"
        +  ],
        +  "type": "string"
        +}
  15. 14 tool updates
    • Changedaggregate19 fields changed
      • removedInput schema / properties / filter / description
        Removed value: -"Subset of transactions to operate on. All fields are optional and combined with AND logic."
      • removedInput schema / properties / filter / properties / accounts / description
        Removed value: -"Account number slugs to include."
      • removedInput schema / properties / filter / properties / amountMax / description
        Removed value: -"Inclusive maximum absolute amount."
      • removedInput schema / properties / filter / properties / amountMin / description
        Removed value: -"Inclusive minimum absolute amount."
      • removedInput schema / properties / filter / properties / category / description
        Removed value: -"Category slug, e.g. \"meals_entertainment\", \"groceries_personal\"."
      • removedInput schema / properties / filter / properties / currency / description
        Removed value: -"ISO 4217 currency code. E.g. \"USD\", \"HKD\"."
      • removedInput schema / properties / filter / properties / dateEnd / description
        Removed value: -"ISO date (YYYY-MM-DD). Inclusive upper bound."
      • removedInput schema / properties / filter / properties / dateStart / description
        Removed value: -"ISO date (YYYY-MM-DD). Inclusive lower bound."
      • removedInput schema / properties / filter / properties / direction / description
        Removed value: -"Semantic direction."
      • removedInput schema / properties / filter / properties / merchant / description
        Removed value: -"Substring match against description or counterparty (case-insensitive)."
      • removedInput schema / properties / filter / properties / text / description
        Removed value: -"Whole-row text search over raw transaction fields (case-insensitive)."
      • removedInput schema / properties / metric / description
        Removed value: -"Aggregation metric."
      • removedInput schema / properties / scope / description
        Removed value: -"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • removedInput schema / properties / scope / properties / accounts / description
        Removed value: -"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."
      • addedInput schema / properties / scope / properties / accounts / items / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "anchorContentHash": {
        +        "type": "string"
        +      },
        +      "identityKey": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "identityKey": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / scope / properties / accounts / items / oneOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "description": "This chip addresses a single account.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "description": "Product slug.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "description": "This chip addresses a product and expands to its child accounts.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]
      • removedInput schema / properties / scope / properties / dateRange / description
        Removed value: -"Bounds results to transactions within this date range. Omit for no date filter."
      • removedInput schema / properties / scope / properties / dateRange / properties / from / description
        Removed value: -"Start of the date range (inclusive), YYYY-MM-DD."
      • removedInput schema / properties / scope / properties / dateRange / properties / to / description
        Removed value: -"End of the date range (inclusive), YYYY-MM-DD."
    • Changedcategorize_statement1 field changed
      • removedInput schema / properties / document_id / description
        Removed value: -"Document ID (from convert_statement or list_statements)"
    • Changedcompare30 fields changed
      • removedInput schema / properties / filterA / description
        Removed value: -"Subset of transactions to operate on. All fields are optional and combined with AND logic."
      • removedInput schema / properties / filterA / properties / accounts / description
        Removed value: -"Account number slugs to include."
      • removedInput schema / properties / filterA / properties / amountMax / description
        Removed value: -"Inclusive maximum absolute amount."
      • removedInput schema / properties / filterA / properties / amountMin / description
        Removed value: -"Inclusive minimum absolute amount."
      • removedInput schema / properties / filterA / properties / category / description
        Removed value: -"Category slug, e.g. \"meals_entertainment\", \"groceries_personal\"."
      • removedInput schema / properties / filterA / properties / currency / description
        Removed value: -"ISO 4217 currency code. E.g. \"USD\", \"HKD\"."
      • removedInput schema / properties / filterA / properties / dateEnd / description
        Removed value: -"ISO date (YYYY-MM-DD). Inclusive upper bound."
      • removedInput schema / properties / filterA / properties / dateStart / description
        Removed value: -"ISO date (YYYY-MM-DD). Inclusive lower bound."
      • removedInput schema / properties / filterA / properties / direction / description
        Removed value: -"Semantic direction."
      • removedInput schema / properties / filterA / properties / merchant / description
        Removed value: -"Substring match against description or counterparty (case-insensitive)."
      • removedInput schema / properties / filterA / properties / text / description
        Removed value: -"Whole-row text search over raw transaction fields (case-insensitive)."
      • removedInput schema / properties / filterB / description
        Removed value: -"Subset of transactions to operate on. All fields are optional and combined with AND logic."
      • removedInput schema / properties / filterB / properties / accounts / description
        Removed value: -"Account number slugs to include."
      • removedInput schema / properties / filterB / properties / amountMax / description
        Removed value: -"Inclusive maximum absolute amount."
      • removedInput schema / properties / filterB / properties / amountMin / description
        Removed value: -"Inclusive minimum absolute amount."
      • removedInput schema / properties / filterB / properties / category / description
        Removed value: -"Category slug, e.g. \"meals_entertainment\", \"groceries_personal\"."
      • removedInput schema / properties / filterB / properties / currency / description
        Removed value: -"ISO 4217 currency code. E.g. \"USD\", \"HKD\"."
      • removedInput schema / properties / filterB / properties / dateEnd / description
        Removed value: -"ISO date (YYYY-MM-DD). Inclusive upper bound."
      • removedInput schema / properties / filterB / properties / dateStart / description
        Removed value: -"ISO date (YYYY-MM-DD). Inclusive lower bound."
      • removedInput schema / properties / filterB / properties / direction / description
        Removed value: -"Semantic direction."
      • removedInput schema / properties / filterB / properties / merchant / description
        Removed value: -"Substring match against description or counterparty (case-insensitive)."
      • removedInput schema / properties / filterB / properties / text / description
        Removed value: -"Whole-row text search over raw transaction fields (case-insensitive)."
      • removedInput schema / properties / metric / description
        Removed value: -"Metric for both groups."
      • removedInput schema / properties / scope / description
        Removed value: -"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • removedInput schema / properties / scope / properties / accounts / description
        Removed value: -"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."
      • addedInput schema / properties / scope / properties / accounts / items / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "anchorContentHash": {
        +        "type": "string"
        +      },
        +      "identityKey": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "identityKey": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / scope / properties / accounts / items / oneOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "description": "This chip addresses a single account.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "description": "Product slug.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "description": "This chip addresses a product and expands to its child accounts.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]
      • removedInput schema / properties / scope / properties / dateRange / description
        Removed value: -"Bounds results to transactions within this date range. Omit for no date filter."
      • removedInput schema / properties / scope / properties / dateRange / properties / from / description
        Removed value: -"Start of the date range (inclusive), YYYY-MM-DD."
      • removedInput schema / properties / scope / properties / dateRange / properties / to / description
        Removed value: -"End of the date range (inclusive), YYYY-MM-DD."
    • Changedconvert_statement11 fields changed
      • removedInput schema / properties / output_format / description
        Removed value: -"Output format"
      • removedInput schema / properties / password / description
        Removed value: -"Password for encrypted PDFs"
      • removedInput schema / properties / pdf / description
        Removed value: -"Base64-encoded PDF content — last resort only; prefer pdf_file for an attachment or pdf_url for a link"
      • removedInput schema / properties / pdf_file / description
        Removed value: -"An attached PDF (populated automatically by ChatGPT — do not construct this yourself)."
      • removedInput schema / properties / pdf_file / properties / download_url / description
        Removed value: -"Signed URL ChatGPT provides to fetch the attached PDF's bytes."
      • removedInput schema / properties / pdf_file / properties / file_id / description
        Removed value: -"ChatGPT's identifier for the attached file."
      • removedInput schema / properties / pdf_file / properties / file_name / description
        Removed value: -"Original filename of the attached file, when ChatGPT provides one."
      • removedInput schema / properties / pdf_file / properties / mime_type / description
        Removed value: -"MIME type of the attached file, when ChatGPT provides one."
      • removedInput schema / properties / pdf_url / description
        Removed value: -"HTTPS URL to fetch the PDF from"
      • removedInput schema / properties / upload_id / description
        Removed value: -"An upload_id from request_upload, after PUTting the file to its upload_url. Use this only when your host has no other way to reference the attached file (no pdf_file/pdf_url equivalent)."
      • removedInput schema / properties / upload_ids / description
        Removed value: -"Batch of upload_ids from a single request_upload(count) call, each already PUT to its own upload_url — converts many statements in one call. Mutually exclusive with pdf, pdf_url, pdf_file, and upload_id. Admission only: the response reports per-file status immediately, never waiting for conversion — fetch results per document_id via get_statement."
    • Changedevaluate_benchmark16 fields changed
      • removedInput schema / properties / accounts / description
        Removed value: -"Optional account roster for multi-account statements. Each transaction references one via accountId."
      • removedInput schema / properties / accounts / items / properties / accountNumber / description
        Removed value: -"Verbatim printed account number — never normalized by the submitter."
      • removedInput schema / properties / accounts / items / properties / currency / description
        Removed value: -"ISO 4217 currency code."
      • removedInput schema / properties / accounts / items / properties / id / description
        Removed value: -"Submission-internal handle, referenced by transactions[].accountId."
      • removedInput schema / properties / accounts / items / properties / name / description
        Removed value: -"Verbatim printed account label."
      • removedInput schema / properties / content_hash / description
        Removed value: -"SHA-256 hex digest of the PDF. Use statement_id instead if you know it."
      • removedInput schema / properties / statement_id / description
        Removed value: -"Benchmark statement ID (e.g. \"bsb-001\"). Preferred over content_hash."
      • removedInput schema / properties / transactions / description
        Removed value: -"Parsed transactions (1-2000)"
      • removedInput schema / properties / transactions / items / properties / accountId / description
        Removed value: -"References accounts[].id — the account this transaction belongs to. Omit for single-account statements."
      • removedInput schema / properties / transactions / items / properties / amount / description
        Removed value: -"Transaction amount. Negative = debit, positive = credit (or use direction)."
      • removedInput schema / properties / transactions / items / properties / balance / description
        Removed value: -"Running balance after this transaction, if known."
      • removedInput schema / properties / transactions / items / properties / currency / description
        Removed value: -"ISO 4217 currency code for this transaction, if known."
      • removedInput schema / properties / transactions / items / properties / date / description
        Removed value: -"ISO 8601 date (YYYY-MM-DD)"
      • removedInput schema / properties / transactions / items / properties / description / description
        Removed value: -"Transaction description as printed on the statement."
      • removedInput schema / properties / transactions / items / properties / direction / description
        Removed value: -"Explicit direction. If omitted, inferred from amount sign."
      • removedInput schema / properties / transactions / items / properties / originalData / description
        Removed value: -"Raw column values as on the PDF. Omit if unavailable — never fabricate a value; an absence scores the parsed dimension's raw fields 0 rather than polluting the measurement."
    • Changedget_statement5 fields changed
      • removedInput schema / properties / data_mode / description
        Removed value: -"Omit for each output_format's existing default behavior (json: normalized; csv/xlsx: the export route's own default). \"normalized\": the cleaned, interpreted data. \"original\": includes each transaction's raw column values as printed on the source PDF (originalData) — fetch this before submitting to evaluate_benchmark. \"enhanced\": a reformatted view of the original columns; only available for output_format csv/xlsx today. qbo/xero always export normalized data — omit data_mode (or pass \"normalized\" explicitly) for those formats."
      • removedInput schema / properties / document_id / description
        Removed value: -"Document ID (from convert_statement or list_statements)"
      • removedInput schema / properties / limit / description
        Removed value: -"output_format \"json\" only. Max transactions to return (default 500, capped at 2000, or 500 with data_mode \"original\")."
      • removedInput schema / properties / offset / description
        Removed value: -"output_format \"json\" only. Number of transactions to skip. Omit to start from the beginning."
      • removedInput schema / properties / output_format / description
        Removed value: -"Output format"
    • Changedgroup_by20 fields changed
      • removedInput schema / properties / dimension / description
        Removed value: -"Grouping dimension."
      • removedInput schema / properties / filter / description
        Removed value: -"Subset of transactions to operate on. All fields are optional and combined with AND logic."
      • removedInput schema / properties / filter / properties / accounts / description
        Removed value: -"Account number slugs to include."
      • removedInput schema / properties / filter / properties / amountMax / description
        Removed value: -"Inclusive maximum absolute amount."
      • removedInput schema / properties / filter / properties / amountMin / description
        Removed value: -"Inclusive minimum absolute amount."
      • removedInput schema / properties / filter / properties / category / description
        Removed value: -"Category slug, e.g. \"meals_entertainment\", \"groceries_personal\"."
      • removedInput schema / properties / filter / properties / currency / description
        Removed value: -"ISO 4217 currency code. E.g. \"USD\", \"HKD\"."
      • removedInput schema / properties / filter / properties / dateEnd / description
        Removed value: -"ISO date (YYYY-MM-DD). Inclusive upper bound."
      • removedInput schema / properties / filter / properties / dateStart / description
        Removed value: -"ISO date (YYYY-MM-DD). Inclusive lower bound."
      • removedInput schema / properties / filter / properties / direction / description
        Removed value: -"Semantic direction."
      • removedInput schema / properties / filter / properties / merchant / description
        Removed value: -"Substring match against description or counterparty (case-insensitive)."
      • removedInput schema / properties / filter / properties / text / description
        Removed value: -"Whole-row text search over raw transaction fields (case-insensitive)."
      • removedInput schema / properties / metric / description
        Removed value: -"Metric per group."
      • removedInput schema / properties / scope / description
        Removed value: -"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • removedInput schema / properties / scope / properties / accounts / description
        Removed value: -"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."
      • addedInput schema / properties / scope / properties / accounts / items / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "anchorContentHash": {
        +        "type": "string"
        +      },
        +      "identityKey": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "identityKey": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / scope / properties / accounts / items / oneOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "description": "This chip addresses a single account.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "description": "Product slug.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "description": "This chip addresses a product and expands to its child accounts.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]
      • removedInput schema / properties / scope / properties / dateRange / description
        Removed value: -"Bounds results to transactions within this date range. Omit for no date filter."
      • removedInput schema / properties / scope / properties / dateRange / properties / from / description
        Removed value: -"Start of the date range (inclusive), YYYY-MM-DD."
      • removedInput schema / properties / scope / properties / dateRange / properties / to / description
        Removed value: -"End of the date range (inclusive), YYYY-MM-DD."
    • Changedlist_statements3 fields changed
      • removedInput schema / properties / limit / description
        Removed value: -"Max results (1-100)"
      • removedInput schema / properties / offset / description
        Removed value: -"Pagination offset"
      • removedInput schema / properties / status / description
        Removed value: -"Filter by status"
    • Changedlist_transactions19 fields changed
      • removedInput schema / properties / filter / description
        Removed value: -"Subset of transactions to operate on. All fields are optional and combined with AND logic."
      • removedInput schema / properties / filter / properties / accounts / description
        Removed value: -"Account number slugs to include."
      • removedInput schema / properties / filter / properties / amountMax / description
        Removed value: -"Inclusive maximum absolute amount."
      • removedInput schema / properties / filter / properties / amountMin / description
        Removed value: -"Inclusive minimum absolute amount."
      • removedInput schema / properties / filter / properties / category / description
        Removed value: -"Category slug, e.g. \"meals_entertainment\", \"groceries_personal\"."
      • removedInput schema / properties / filter / properties / currency / description
        Removed value: -"ISO 4217 currency code. E.g. \"USD\", \"HKD\"."
      • removedInput schema / properties / filter / properties / dateEnd / description
        Removed value: -"ISO date (YYYY-MM-DD). Inclusive upper bound."
      • removedInput schema / properties / filter / properties / dateStart / description
        Removed value: -"ISO date (YYYY-MM-DD). Inclusive lower bound."
      • removedInput schema / properties / filter / properties / direction / description
        Removed value: -"Semantic direction."
      • removedInput schema / properties / filter / properties / merchant / description
        Removed value: -"Substring match against description or counterparty (case-insensitive)."
      • removedInput schema / properties / filter / properties / text / description
        Removed value: -"Whole-row text search over raw transaction fields (case-insensitive)."
      • removedInput schema / properties / limit / description
        Removed value: -"Maximum rows to return. Default 20, max 50."
      • removedInput schema / properties / scope / description
        Removed value: -"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • removedInput schema / properties / scope / properties / accounts / description
        Removed value: -"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."
      • addedInput schema / properties / scope / properties / accounts / items / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "anchorContentHash": {
        +        "type": "string"
        +      },
        +      "identityKey": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "identityKey": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / scope / properties / accounts / items / oneOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "description": "This chip addresses a single account.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "description": "Product slug.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "description": "This chip addresses a product and expands to its child accounts.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]
      • removedInput schema / properties / scope / properties / dateRange / description
        Removed value: -"Bounds results to transactions within this date range. Omit for no date filter."
      • removedInput schema / properties / scope / properties / dateRange / properties / from / description
        Removed value: -"Start of the date range (inclusive), YYYY-MM-DD."
      • removedInput schema / properties / scope / properties / dateRange / properties / to / description
        Removed value: -"End of the date range (inclusive), YYYY-MM-DD."
    • Changedlist_transfers8 fields changed
      • removedInput schema / properties / amountMin / description
        Removed value: -"Inclusive minimum absolute amount. When present, transfers/accountSuccessions are floored to this amount and the response gains an \"unmatched\" bucket of large movements with no matching counterpart. Omit for the ordinary reconciled-pairs answer."
      • removedInput schema / properties / scope / description
        Removed value: -"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • removedInput schema / properties / scope / properties / accounts / description
        Removed value: -"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."
      • addedInput schema / properties / scope / properties / accounts / items / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "anchorContentHash": {
        +        "type": "string"
        +      },
        +      "identityKey": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "identityKey": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / scope / properties / accounts / items / oneOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "description": "This chip addresses a single account.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "description": "Product slug.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "description": "This chip addresses a product and expands to its child accounts.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]
      • removedInput schema / properties / scope / properties / dateRange / description
        Removed value: -"Bounds results to transactions within this date range. Omit for no date filter."
      • removedInput schema / properties / scope / properties / dateRange / properties / from / description
        Removed value: -"Start of the date range (inclusive), YYYY-MM-DD."
      • removedInput schema / properties / scope / properties / dateRange / properties / to / description
        Removed value: -"End of the date range (inclusive), YYYY-MM-DD."
    • Changedrate_statement7 fields changed
      • removedInput schema / properties / document_id / description
        Removed value: -"Document ID (from convert_statement or list_statements)"
      • removedInput schema / properties / export_format / description
        Removed value: -"Which output format you exported this conversion to (csv, xlsx, qbo, or xero)."
      • removedInput schema / properties / feedback / description
        Removed value: -"Free-text feedback. Only accepted when rating is 3 or below."
      • removedInput schema / properties / feedback_categories / description
        Removed value: -"Structured feedback categories. Only accepted when rating is 3 or below."
      • removedInput schema / properties / rating / description
        Removed value: -"1-5 star rating for this conversion"
      • removedInput schema / properties / use_case / description
        Removed value: -"Tags describing what you use the converted data for."
      • removedInput schema / properties / use_case_other / description
        Removed value: -"Free-text use case, for when \"other\" is among the use_case tags."
    • Changedrequest_upload1 field changed
      • removedInput schema / properties / count / description
        Removed value: -"Batch size — mint this many independent single-use upload URLs in one call instead of calling request_upload once per file. When set, the response returns \"uploads\": an array of that many { upload_id, upload_url } pairs. Omit for the default single-URL response."
    • Changedtime_series20 fields changed
      • removedInput schema / properties / bucket / description
        Removed value: -"Bucket size."
      • removedInput schema / properties / filter / description
        Removed value: -"Subset of transactions to operate on. All fields are optional and combined with AND logic."
      • removedInput schema / properties / filter / properties / accounts / description
        Removed value: -"Account number slugs to include."
      • removedInput schema / properties / filter / properties / amountMax / description
        Removed value: -"Inclusive maximum absolute amount."
      • removedInput schema / properties / filter / properties / amountMin / description
        Removed value: -"Inclusive minimum absolute amount."
      • removedInput schema / properties / filter / properties / category / description
        Removed value: -"Category slug, e.g. \"meals_entertainment\", \"groceries_personal\"."
      • removedInput schema / properties / filter / properties / currency / description
        Removed value: -"ISO 4217 currency code. E.g. \"USD\", \"HKD\"."
      • removedInput schema / properties / filter / properties / dateEnd / description
        Removed value: -"ISO date (YYYY-MM-DD). Inclusive upper bound."
      • removedInput schema / properties / filter / properties / dateStart / description
        Removed value: -"ISO date (YYYY-MM-DD). Inclusive lower bound."
      • removedInput schema / properties / filter / properties / direction / description
        Removed value: -"Semantic direction."
      • removedInput schema / properties / filter / properties / merchant / description
        Removed value: -"Substring match against description or counterparty (case-insensitive)."
      • removedInput schema / properties / filter / properties / text / description
        Removed value: -"Whole-row text search over raw transaction fields (case-insensitive)."
      • removedInput schema / properties / metric / description
        Removed value: -"Metric per bucket."
      • removedInput schema / properties / scope / description
        Removed value: -"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • removedInput schema / properties / scope / properties / accounts / description
        Removed value: -"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."
      • addedInput schema / properties / scope / properties / accounts / items / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "anchorContentHash": {
        +        "type": "string"
        +      },
        +      "identityKey": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "identityKey": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / scope / properties / accounts / items / oneOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "description": "This chip addresses a single account.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "description": "Product slug.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "description": "This chip addresses a product and expands to its child accounts.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]
      • removedInput schema / properties / scope / properties / dateRange / description
        Removed value: -"Bounds results to transactions within this date range. Omit for no date filter."
      • removedInput schema / properties / scope / properties / dateRange / properties / from / description
        Removed value: -"Start of the date range (inclusive), YYYY-MM-DD."
      • removedInput schema / properties / scope / properties / dateRange / properties / to / description
        Removed value: -"End of the date range (inclusive), YYYY-MM-DD."
    • Changedtop_n21 fields changed
      • removedInput schema / properties / dimension / description
        Removed value: -"Grouping dimension."
      • removedInput schema / properties / filter / description
        Removed value: -"Subset of transactions to operate on. All fields are optional and combined with AND logic."
      • removedInput schema / properties / filter / properties / accounts / description
        Removed value: -"Account number slugs to include."
      • removedInput schema / properties / filter / properties / amountMax / description
        Removed value: -"Inclusive maximum absolute amount."
      • removedInput schema / properties / filter / properties / amountMin / description
        Removed value: -"Inclusive minimum absolute amount."
      • removedInput schema / properties / filter / properties / category / description
        Removed value: -"Category slug, e.g. \"meals_entertainment\", \"groceries_personal\"."
      • removedInput schema / properties / filter / properties / currency / description
        Removed value: -"ISO 4217 currency code. E.g. \"USD\", \"HKD\"."
      • removedInput schema / properties / filter / properties / dateEnd / description
        Removed value: -"ISO date (YYYY-MM-DD). Inclusive upper bound."
      • removedInput schema / properties / filter / properties / dateStart / description
        Removed value: -"ISO date (YYYY-MM-DD). Inclusive lower bound."
      • removedInput schema / properties / filter / properties / direction / description
        Removed value: -"Semantic direction."
      • removedInput schema / properties / filter / properties / merchant / description
        Removed value: -"Substring match against description or counterparty (case-insensitive)."
      • removedInput schema / properties / filter / properties / text / description
        Removed value: -"Whole-row text search over raw transaction fields (case-insensitive)."
      • removedInput schema / properties / metric / description
        Removed value: -"Metric to rank by."
      • removedInput schema / properties / n / description
        Removed value: -"Number of top groups to return."
      • removedInput schema / properties / scope / description
        Removed value: -"Optional structural scope (WHO × WHEN). Omit to search across all your completed statements. \"accounts\" is a list of account/product chips (kind + identityKey); \"dateRange\" bounds by transaction date (YYYY-MM-DD)."
      • removedInput schema / properties / scope / properties / accounts / description
        Removed value: -"Account/product chips (kind + identityKey) to scope to. Empty = all accounts."
      • addedInput schema / properties / scope / properties / accounts / items / anyOf
        Added value: +[
        +  {
        +    "properties": {
        +      "anchorContentHash": {
        +        "type": "string"
        +      },
        +      "identityKey": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "account",
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "identityKey": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "product",
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "identityKey"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / scope / properties / accounts / items / oneOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "anchorContentHash": {
        -        "description": "Document-anchored lookup when present (results page); omit for a user-scoped lookup (workspace surfaces).",
        -        "type": "string"
        -      },
        -      "identityKey": {
        -        "description": "Canonical account identity key (accountIdentityKey), never a raw DB UUID.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "account",
        -        "description": "This chip addresses a single account.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "identityKey": {
        -        "description": "Product slug.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "product",
        -        "description": "This chip addresses a product and expands to its child accounts.",
        -        "type": "string"
        -      },
        -      "label": {
        -        "description": "Display label for this chip.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "identityKey"
        -    ],
        -    "type": "object"
        -  }
        -]
      • removedInput schema / properties / scope / properties / dateRange / description
        Removed value: -"Bounds results to transactions within this date range. Omit for no date filter."
      • removedInput schema / properties / scope / properties / dateRange / properties / from / description
        Removed value: -"Start of the date range (inclusive), YYYY-MM-DD."
      • removedInput schema / properties / scope / properties / dateRange / properties / to / description
        Removed value: -"End of the date range (inclusive), YYYY-MM-DD."
  16. 4 tool updates
    • Changedconvert_statement2 fields changed
      • addedInput schema / properties / upload_ids
        Added value: +{
        +  "description": "Batch of upload_ids from a single request_upload(count) call, each already PUT to its own upload_url — converts many statements in one call. Mutually exclusive with pdf, pdf_url, pdf_file, and upload_id. Admission only: the response reports per-file status immediately, never waiting for conversion — fetch results per document_id via get_statement.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 100,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / results
        Added value: +{
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {
        +      "content_hash": {
        +        "type": "string"
        +      },
        +      "duplicate": {
        +        "type": "boolean"
        +      },
        +      "error_code": {
        +        "type": "string"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "upload_id": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "upload_id"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedget_credits2 fields changed
      • addedOutput schema / properties / plan
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "dailySpendCap": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "maxPagesPerUpload": {
        +      "type": "number"
        +    },
        +    "maxUploadSizeMb": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "maxPagesPerUpload",
        +    "maxUploadSizeMb",
        +    "dailySpendCap"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "balance",
        -  "limit",
        -  "planId",
        -  "creditsExpireAt",
        -  "summary"
        -]New value: +[
        +  "balance",
        +  "limit",
        +  "planId",
        +  "creditsExpireAt",
        +  "plan",
        +  "summary"
        +]
    • Changedget_statement1 field changed
      • addedOutput schema / properties / results
        Added value: +{
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {
        +      "content_hash": {
        +        "type": "string"
        +      },
        +      "duplicate": {
        +        "type": "boolean"
        +      },
        +      "error_code": {
        +        "type": "string"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "upload_id": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "upload_id"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedrequest_upload3 fields changed
      • addedInput schema / properties / count
        Added value: +{
        +  "description": "Batch size — mint this many independent single-use upload URLs in one call instead of calling request_upload once per file. When set, the response returns \"uploads\": an array of that many { upload_id, upload_url } pairs. Omit for the default single-URL response.",
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / uploads
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "upload_id": {
        +        "type": "string"
        +      },
        +      "upload_url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "upload_id",
        +      "upload_url"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "upload_id",
        -  "upload_url",
        -  "expires_at",
        -  "max_bytes"
        -]
  17. 1 tool update
    • Changedlist_transfers2 fields changed
      • addedInput schema / properties / amountMin
        Added value: +{
        +  "description": "Inclusive minimum absolute amount. When present, transfers/accountSuccessions are floored to this amount and the response gains an \"unmatched\" bucket of large movements with no matching counterpart. Omit for the ordinary reconciled-pairs answer.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / unmatched
        Added value: +{
        +  "additionalProperties": {},
        +  "properties": {},
        +  "type": "object"
        +}

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Converts PDF bank statements into structured data (Markdown, JSON, CSV, JSONL) with verified transactions and balance checks, enabling agents to audit numbers.
    5
    9 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Converts customer-supplied PDF bank statements into checked Excel, CSV, or JSON with balance validation. Runs locally with your own MainBook API key or against MainBook's hosted endpoint, and it never connects to bank accounts.
    5
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables parsing German bank statement PDFs into structured, validated transaction data, exporting all transactions as German-style CSV, and verifying statement totals via proof calculations, all locally within MCP-compatible clients.
    3
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.