Bankstatemently
Server Details
Convert PDF bank statements into structured transactions, accounts, and balances.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- bankstatemently/plugins
- GitHub Stars
- 1
- Server Listing
- bankstatemently
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.5/5 across 15 of 15 tools scored.
Most tools have clearly distinct purposes (conversion, retrieval, listing, rating, benchmarking), but the analytics family (aggregate, group_by, time_series, top_n, compare) overlaps significantly—all compute metrics over transactions with different grouping/ranking semantics. Descriptions are detailed enough to reduce confusion, but an agent could still misselect between aggregate and group_by.
The majority of tools follow a verb_noun pattern (convert_statement, list_transactions, get_statement, rate_statement), but several deviate: time_series and top_n are noun/adjective phrases, and group_by uses a verb+preposition. This mixed convention is readable but not fully consistent.
At 15 tools, the server sits at the upper boundary of the typical well-scoped range. While every tool has a purpose, the analytics tools (aggregate, group_by, time_series, top_n, compare) could potentially be consolidated, making the set feel slightly heavy. Still, it's reasonable for a comprehensive statement-processing API.
The tool surface covers the domain thoroughly: PDF conversion, data retrieval, listing, categorization, transfer detection, multiple analytics modes, benchmarking, rating, credit checking, and upload handling. There are no obvious dead ends or missing lifecycle operations for the stated purpose.
Available Tools
15 toolsaggregateAggregate TransactionsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | 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). | |
| filter | No | Subset of transactions to operate on. All fields are optional and combined with AND logic. | |
| metric | Yes | Aggregation metric. |
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | Yes | |
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive. The description adds valuable behavioral context: results are per-currency (never sum currencies), scope defaults to all completed statements, and the scope parameter narrows by accounts/products/date range. This exceeds the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, enumerates fields, and contains no filler. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input/output schemas and annotations, the description covers the essential aspects: metric types, filter/scope concept, default behavior, and per-currency warning. No critical gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds semantic meaning by explaining aggregation concept, per-currency behavior, and the default scope behavior, which helps interpret the 'scope' and 'metric' parameters beyond their schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes a single metric (sum/average/count/max/min) over a filtered set of transactions, which is specific and distinguishes it from sibling tools like list_transactions (raw list) or group_by (grouped output).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: defaults to all completed statements, can narrow via scope, and warns about per-currency results. However, it does not explicitly mention when to prefer this over siblings like top_n or time_series, nor exclude any alternatives.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | Document ID (from convert_statement or list_statements) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | |
| error | No | |
| status | Yes | |
| message | No | |
| summary | No | |
| documentId | No | |
| categoryMappings | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations (readOnlyHint, destructiveHint) by disclosing credit consumption, caching behavior (free re-fetches), and the presence of a 'summary' field as the source of truth. This is rich behavioral context that helps the agent set expectations and interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences) and front-loaded: the first sentence states the core purpose, and subsequent sentences add essential behavioral details about caching, credits, and the summary field. Every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required parameter, output schema present), the description covers all necessary facets: what it does, prerequisites (previously processed), cost implications, caching behavior, and the summary field. The output schema likely documents return values, so no additional explanation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with a description for document_id ('Document ID (from convert_statement or list_statements)'). The description adds no further parameter semantics, but the baseline of 3 is appropriate since the schema already documents the only parameter adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Run AI transaction categorization') on a defined resource ('previously processed document') and its output ('return its category mappings'). It distinguishes itself from siblings by mentioning caching and credit behavior, making it clear this is a categorization-specific tool rather than a listing or aggregation tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by requiring a 'previously processed document' and mentions that it consumes credits only the first time, with free re-fetches. It does not explicitly name alternative tools or state when not to use it, but the context is clear enough for an agent to infer the correct scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compareCompare Transaction GroupsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | 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). | |
| metric | Yes | Metric for both groups. | |
| filterA | Yes | Subset of transactions to operate on. All fields are optional and combined with AND logic. | |
| filterB | Yes | Subset of transactions to operate on. All fields are optional and combined with AND logic. |
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | Yes | |
| result | Yes |
Tool Definition Quality
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 useful context about default scope ('all your completed statements') and the ability to override it, but it doesn't detail output behavior beyond 'side-by-side metric comparison' or disclose any limitations, such as pagination or performance constraints. It adds some value but not rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and includes a helpful example and a clear scoping instruction. Every sentence contributes essential information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is moderately complex (4 parameters, nested objects, output schema exists). The description conveys the core functionality, how to scope, and gives illustrative examples, which is sufficient for selection. It could be more complete by explaining how filterA/filterB relate to the comparison or what metrics are available, but the detailed schema and documentation partially compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with detailed descriptions for all parameters (e.g., scope, metric, filterA, filterB). The description only mentions 'scope' and 'two filtered groups' without adding details beyond the schema, so it doesn't enhance parameter understanding beyond the baseline. The examples in the description lightly illustrate filter usage but don't add semantic depth.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Side-by-side metric comparison for two filtered groups of transactions' with concrete examples (e.g. one category vs another, one month vs another). It uses a specific verb ('compare') and resource ('transaction groups'), distinguishing it from sibling tools like aggregate or group_by which don't emphasize two-group side-by-side comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context with examples of when to use the tool and how to narrow scope ('pass "scope" to narrow to specific accounts/products and/or a date range'). It implies when this tool is appropriate (comparing two groups) but doesn't explicitly state when to avoid it or name alternative tools, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Base64-encoded PDF content — last resort only; prefer pdf_file for an attachment or pdf_url for a link | ||
| pdf_url | No | HTTPS URL to fetch the PDF from | |
| password | No | Password for encrypted PDFs | |
| pdf_file | No | An attached PDF (populated automatically by ChatGPT — do not construct this yourself). | |
| upload_id | No | 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). | |
| upload_ids | No | 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. | |
| output_format | No | Output format | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | |
| error | No | |
| gating | No | |
| status | Yes | |
| columns | No | |
| message | No | |
| results | No | |
| summary | No | |
| dataMode | No | |
| document | No | |
| warnings | No | |
| exportUrl | No | |
| documentId | No | |
| extraction | No | |
| pagination | No | |
| processedAt | No | |
| transactions | No | |
| confidenceScore | No | |
| processingTimeMs | No | |
| transactionCount | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint false, destructiveHint false), the description discloses key behaviors: batch mode only admits files and returns immediately, consumes credits per page, JSON returns inline data vs other formats returning download links, and the summary field is the single source of truth. It also gives model-specific instructions about translation and not echoing status values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured, starting with purpose and then systematically covering input methods, batch behavior, output formats, and response handling. Every sentence adds value, though some details repeat schema descriptions. It is appropriately detailed for a tool with multiple parameter modes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 7 parameters, nested objects, output schema, and multi-mode behavior, the description covers all essential aspects: input reference options, batch vs single, output formats, download link behavior, summary instructions, credit consumption, and page limits. The existence of an output schema means return values don't need to be detailed here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaningful context beyond schema: clarifies pdf_file is automatically populated, emphasizes pdf is a last resort, explains upload_ids mutual exclusivity, and details the admission-only batch behavior. This adds semantic clarity beyond the schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool converts a bank statement PDF into structured data or a spreadsheet, using a specific verb and resource. It clearly distinguishes from sibling tools like get_statement by explaining the batch admission workflow and directing users to call get_statement for results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance for each parameter mode (pdf_file, pdf_url, upload_id, upload_ids), including when to use request_upload. It also explains when to use get_statement after batch admission and notes output format differences, offering clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_benchmarkEvaluate BenchmarkARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| accounts | No | Optional account roster for multi-account statements. Each transaction references one via accountId. | |
| content_hash | No | SHA-256 hex digest of the PDF. Use statement_id instead if you know it. | |
| statement_id | No | Benchmark statement ID (e.g. "bsb-001"). Preferred over content_hash. | |
| transactions | Yes | Parsed transactions (1-2000) |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| challenges | Yes | |
| difficulty | Yes | |
| parsedScore | Yes | |
| normalizedScore | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only, non-destructive, and closed-world. The description goes beyond by specifying return values (extraction accuracy, integrity score, overall score), the held-out error behavior, the scoring consequence of missing originalData (raw-fidelity dimension 0), the 'never fabricate' rule, and the free-to-use cost note. This is rich behavioral context that annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is six sentences, each adding distinct value: main purpose, parameters, return values, published-status constraint, originalData guidance, and catalog prerequisite. It is front-loaded with the primary purpose and keeps every sentence purposeful without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 correctly avoids restating return structures. It covers prerequisites (catalog, published status), the alternative data source (get_statement), error behavior, cost, and the critical originalData guidance. For a scoring tool with 4 parameters and a non-trivial evaluation model, this is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaning by clarifying the preference for statement_id over content_hash, recommending originalData and how to obtain it (via get_statement with data_mode 'original'), and noting the scoring penalty for absence. This is useful beyond the schema's field-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Score parsed bank statement transactions against the Bankstatemently benchmark ground truth.' This clearly states the tool's function and distinguishes it from siblings like rate_statement or categorize_statement. It also names the key inputs (statement_id/content_hash and transactions) and the output type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context: only published statements can be evaluated, held-out statements return an error, and it instructs to read the benchmark://catalog first. It also names get_statement as an alternative for fetching originalData. However, it doesn't explicitly contrast with other scoring/rating tools in the sibling list, so it's clear but not a full when-not matrix.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_creditsGet Credit BalanceARead-onlyInspect
Check your current credit balance. 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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | Yes | |
| limit | Yes | |
| planId | Yes | |
| balance | Yes | |
| summary | Yes | |
| creditsExpireAt | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds valuable behavioral context: the credit-to-page mapping and the fact that operational limits are reported. It does not contradict annotations and provides insight into what the tool returns beyond a simple balance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundancy. The first sentence states the primary action, the second explains the credit unit and additional limits. Every phrase adds value and is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists (so return values are documented elsewhere), the description covers all necessary context: what a credit is, what operational limits are reported, and why this matters before batch processing. It is complete for this low-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there are no parameter semantics to document. Per the baseline for zero parameters, a score of 4 is appropriate; the description focuses on the tool's purpose and output rather than params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Check your current credit balance.' It also clarifies the credit unit (1 credit = 1 page) and additional outputs (plan limits), clearly distinguishing it from sibling tools that process or list statements/transactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: 'so you can size a multi-file batch correctly before starting it.' It implies the tool should be consulted before batch operations, but does not explicitly mention alternatives or exclusions. Since no sibling tool directly checks credits, the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statementGet Statement DataARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | output_format "json" only. Max transactions to return (default 500, capped at 2000, or 500 with data_mode "original"). | |
| offset | No | output_format "json" only. Number of transactions to skip. Omit to start from the beginning. | |
| data_mode | No | 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. | |
| document_id | Yes | Document ID (from convert_statement or list_statements) | |
| output_format | No | Output format | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | |
| error | No | |
| gating | No | |
| status | Yes | |
| columns | No | |
| message | No | |
| results | No | |
| summary | No | |
| dataMode | No | |
| document | No | |
| warnings | No | |
| exportUrl | No | |
| documentId | No | |
| extraction | No | |
| pagination | No | |
| processedAt | No | |
| transactions | No | |
| confidenceScore | No | |
| processingTimeMs | No | |
| transactionCount | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and non-destructive, and the description adds extensive behavioral context: non-json formats return time-limited download links, the summary field is the single source of truth, translation rules for non-English conversations, and a directive to never echo raw status values. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but every sentence serves a purpose for a tool with 5 parameters and significant caveats. Front-loaded with purpose and usage, then proceeds to nuanced instructions; slightly verbose yet justified by complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers when to use, format differences, data_mode semantics, benchmark integration, summary handling, and language behavior. For a tool with output schema and annotations, this leaves essentially no gaps for an agent to misuse it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with rich descriptions, but the description adds useful output_format behavior (inline vs. link) and reinforces data_mode semantics. It somewhat repeats schema text, but the added output_format context and summary-field guidance provide moderate extra meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States it fetches the full converted data for a previously processed document. The verb 'Fetch' and resource are specific, and it distinguishes itself from convert_statement (which produces the document) and list_statements (which lists metadata).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly specifies when to use: after convert_statement returns a 'processing' status, or for re-fetching results. It also ties to evaluate_benchmark by directing data_mode 'original' before submission, giving clear workflow context without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
group_byGroup TransactionsARead-onlyInspect
Group transactions by a dimension (month/category/merchant/account/currency) and apply a metric to each group. Results are per-currency. Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | 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). | |
| filter | No | Subset of transactions to operate on. All fields are optional and combined with AND logic. | |
| metric | Yes | Metric per group. | |
| dimension | Yes | Grouping dimension. |
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | Yes | |
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful behavioral details beyond annotations: 'Results are per-currency' and 'Scope defaults to all your completed statements', which clarify default behavior and output grouping. This is valuable but does not, for instance, note whether empty groups are included or sorting behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core operation and then providing key behavioral/default-scope context. Every sentence earns its place, with no filler or repetitive information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema, output schema, and annotations, the description adequately covers the tool's purpose and key default behaviors. However, it omits any mention of the filter parameter, which is a significant part of the tool's scoping mechanism. Still, the schema and output schema fill most gaps, making the description largely complete for an agent using the full tool definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description mentions dimension, metric, and scope, adding some meaning (e.g., scope narrows by accounts/products/dateRange), but it fails to mention the filter parameter, which is a distinct way to subset transactions. Since the schema fully documents filter, the description does not need to repeat it, but its omission from the prose slightly reduces the added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Group transactions by a dimension (month/category/merchant/account/currency) and apply a metric to each group.' This identifies the specific verb, resource, and enumerates the grouping dimensions and metrics, making it distinct from sibling tools like aggregate or time_series.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives usage context for scope ('Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range') but does not mention the filter parameter as an alternative way to narrow results, nor does it provide explicit when-to-use versus alternatives like aggregate or time_series. It implies usage but misses exclusions and sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_statementsList StatementsARead-onlyInspect
Browse your previously converted bank statements with pagination and optional status filter.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-100) | |
| offset | No | Pagination offset | |
| status | No | Filter by status |
Output Schema
| Name | Required | Description |
|---|---|---|
| documents | Yes | |
| pagination | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds the scope 'previously converted' but does not disclose additional behavioral details like ordering, pagination defaults, or response format. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the primary purpose and key features without any wasted words. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of a list tool, the presence of a full output schema (context signal) and annotations (readOnlyHint, destructiveHint), the description is complete. It accurately conveys what the tool does, and the schema covers the parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (limit, offset, status) are already documented. The description mentions pagination and status filter but only restates what the schema provides, adding no new semantic meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Browse' with a specific resource ('previously converted bank statements') and mentions key features (pagination, optional status filter). This distinguishes it from sibling tools like get_statement, which likely retrieves a single statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'previously converted' gives clear context that this tool is for browsing existing statements, not for uploading or converting new ones. However, it does not explicitly name alternative tools or state when not to use this tool, so it falls slightly 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.
list_transactionsList TransactionsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows to return. Default 20, max 50. | |
| scope | No | 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). | |
| filter | No | Subset of transactions to operate on. All fields are optional and combined with AND logic. |
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | Yes | |
| transactions | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, so the safety profile is covered. The description adds valuable behavioral details: results are capped at 50 rows, the effective scope is echoed in every response (document count + date range), and each row includes its source document's content_hash for citation. This goes well 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with a concise definition, then the action and cap, then default scope and response metadata. Every sentence adds value with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex (3 params, nested scope, many filter fields), but the schema covers all parameters and the output schema describes returns. The description adds essential behavioral context (cap, default scope, response provenance) and is complete enough for an agent to call correctly. It omits explicit mention of the filter parameter, though 'filtered list' implies it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description mentions the 'scope' parameter conceptually ('pass scope to narrow to specific accounts/products and/or a date range') but adds no syntax or semantics beyond the schema. The 'capped at 50 rows' note relates to limit but is already in the schema as max 50.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description defines a transaction precisely, states the action ('Return a filtered list of transactions'), and distinguishes it from sibling list tools by emphasizing transactions are single statement lines across converted statements. This clearly differentiates it from list_statements and list_transfers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that scope defaults to all completed statements and that passing 'scope' narrows by accounts/products and/or date range, giving clear context for when to use it. However, it does not explicitly contrast with sibling tools like aggregate or group_by, so it lacks explicit exclusions/alternatives.
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 AccountsARead-onlyInspect
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. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | 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). | |
| amountMin | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | Yes | |
| ambiguous | Yes | |
| transfers | Yes | |
| unmatched | No | |
| ambiguousCount | Yes | |
| matchWindowDays | Yes | |
| accountSuccessions | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint annotation by detailing behavioral nuances: transfers are only matched when both sides are visible, account-level successions are included, payments to outside parties are excluded, and every response reports the match window used even when no transfers are found. The amountMin parameter's effect on response structure (adding an 'unmatched' bucket) is also transparently disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than a typical tool description, but every sentence earns its place, covering definition, exclusions, usage guidance, default scope, and amountMin's special mode. It is well-structured but densely packed, and could benefit from slight restructuring (e.g., separating the amountMin behavior) for even easier skimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested scope object, output schema, two behaviors with/without amountMin), the description is remarkably complete. It explains the core concept, the match window reporting, the unmatched bucket, and how to narrow scope—leaving little ambiguity for an agent to decide when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already provides 100% coverage for the two parameters, the description adds valuable context: scope defaults to all completed statements, and amountMin not only floors transfers but also changes the response by adding an unmatched bucket. The concrete example ('trace transfers over $10,000') helps the agent understand when and why to use amountMin.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose: 'Match transfers between your own accounts' and precisely defines what constitutes a transfer (two transactions, debit+credit, amount and date aligned), including account successions. It explicitly differentiates itself from list_transactions by stating it is 'THE way' to answer money-moved-between-accounts questions and warns against using list_transactions + arithmetic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'never try to answer a money-moved-between-accounts question with list_transactions + arithmetic; always call this tool instead.' It also explains when to use amountMin for finding unmatched large movements, and describes the default scope (all completed statements) and how to narrow it via 'scope'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rate_statementRate Statement ConversionAInspect
Report how well a previously converted bank statement was parsed: submit a 1-5 rating, optionally with structured feedback (only accepted when the rating is 3 or below) and use-case tags. Calling this again for the same document updates your existing rating and clears any previous feedback tied to 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.
| Name | Required | Description | Default |
|---|---|---|---|
| rating | Yes | 1-5 star rating for this conversion | |
| feedback | No | Free-text feedback. Only accepted when rating is 3 or below. | |
| use_case | No | Tags describing what you use the converted data for. | |
| document_id | Yes | Document ID (from convert_statement or list_statements) | |
| export_format | No | Which output format you exported this conversion to (csv, xlsx, qbo, or xero). | |
| use_case_other | No | Free-text use case, for when "other" is among the use_case tags. | |
| feedback_categories | No | Structured feedback categories. Only accepted when rating is 3 or below. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | |
| error | No | |
| rating | No | |
| status | Yes | |
| message | No | |
| summary | No | |
| useCase | No | |
| documentId | No | |
| hasFeedback | No | |
| useCaseOther | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing that calling again updates the existing rating and clears previous feedback, that the stored rating state is returned in the response, and that there is no separate tool to read it back. It also warns that feedback is only accepted when the rating is 3 or below. These are important behavioral traits not captured in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with the core purpose front-loaded in the first sentence. Each sentence adds essential information: purpose, update/clearing behavior, and the summary field as a source of truth. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers update semantics, feedback clearing, the absence of a separate read tool, and the summary field. Combined with the presence of an output schema, an agent has all necessary context to invoke the tool and interpret responses without ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for all 7 parameters (100% coverage), so the baseline is 3. The description adds some context about conditional feedback acceptance and use-case tags, but these details are also present in the schema. It does not add significant meaning beyond the schema for individual parameters, though it does reinforce the overall flow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Report how well a previously converted bank statement was parsed' and explains the action of submitting a rating. This clearly distinguishes the tool from siblings like convert_statement and list_statements, and the mention of updating an existing rating adds further specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies usage after conversion by calling the statement 'previously converted' and explains re-calling behavior, which indicates it is the canonical tool for rating and updating. It also notes there is no separate read-back tool, guiding the agent to rely on this tool's response. However, it does not explicitly name alternative tools or provide exclusions, so it falls just 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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| uploads | No | |
| max_bytes | No | |
| upload_id | No | |
| expires_at | No | |
| upload_url | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses single-use/expiring URLs, the requirement to PUT the PDF before calling convert_statement, and the prohibition on retrying a failed PUT against the same URL. It also explains the free-to-use nature and likely host-blocking errors, which are not evident from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured with a playbook, troubleshooting, and batching details, all front-loaded around the core purpose. Each sentence serves a functional role for a complex multi-step tool, though some redundancy with the schema's parameter description could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all essential context: prerequisites, step-by-step workflow, response shapes, error handling, host configuration, cost implications, and the integration with convert_statement. Given the tool's complexity and the availability of an output schema, this is remarkably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents 'count' with 100% coverage. The description adds value by integrating 'count' into the full workflow (using upload_ids in a single convert_statement call) and by explaining the default single-URL response, which is not fully captured in the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb 'mint' and explicitly names the resource (single-use upload URL) and purpose (pushing a conversation-attached PDF before conversion). It clearly distinguishes this from sibling tools like convert_statement by positioning it as the upload prerequisite.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states 'Use this ONLY when you have no other way to reference the attached file' and contrasts with alternatives (pdf_file/pdf_url). It also provides a step-by-step playbook, including when to check the sandbox first and when to retry with a fresh URL, making the usage conditions unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_seriesTransaction Time SeriesARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | 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). | |
| bucket | Yes | Bucket size. | |
| filter | No | Subset of transactions to operate on. All fields are optional and combined with AND logic. | |
| metric | Yes | Metric per bucket. |
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | Yes | |
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that scope defaults to all completed statements and can be narrowed, but does not disclose bucket behavior, timezone handling, or output details. This adds modest context beyond the annotations, but not enough for a higher score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core function and purpose, with no filler or repetition. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 params, nested objects, and an output schema, the description provides a high-level summary and default scope behavior. The rich schema descriptions and output schema cover the remaining details, so the description is sufficiently complete for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage with detailed descriptions for all parameters, including the scope structure, bucket enum, metric enum, and filter. The description only reiterates the scope narrowing capability, adding minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes a time series by grouping transactions into week or month buckets and applying a metric, with the explicit purpose 'useful for trends'. This specific verb+resource+scope distinguishes it from generic sibling tools like group_by or aggregate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context that it is 'useful for trends' and explains the default scope (all completed statements) with the option to narrow via 'scope'. However, it does not explicitly mention when not to use it or name alternative tools, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_nTop N TransactionsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| n | Yes | Number of top groups to return. | |
| scope | No | 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). | |
| filter | No | Subset of transactions to operate on. All fields are optional and combined with AND logic. | |
| metric | Yes | Metric to rank by. | |
| dimension | Yes | Grouping dimension. |
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | Yes | |
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool's safety profile is known. The description adds behavioral nuance by revealing that scope defaults to all completed statements and that monetary metrics are ranked per-currency, which is not evident from the schema or annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences, front-loaded with the core function. Every word earns its place, with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, nested objects) and the presence of an output schema, the description adequately covers the primary purpose and default behavior. It does not mention the 'filter' parameter, but the schema fully documents it, and the description needn't repeat what structured data already provides.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for all parameters, so the baseline is 3. The description adds value by explaining the default scope behavior (all completed statements) and how scope narrows via accounts/products and date range, which enhances understanding beyond the schema's static descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the top N groups ranked by metric in descending order, specifying per-currency handling for monetary metrics. The verb 'Return' and resource 'top N groups' make the purpose specific and distinguish it from sibling tools like 'group_by' or 'aggregate'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by stating that scope defaults to all completed statements and can be narrowed, which implies when to use the scope parameter. However, it does not explicitly compare with alternatives or mention when not to use the tool, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- AlicenseAqualityCmaintenanceConverts PDF bank statements into structured data (Markdown, JSON, CSV, JSONL) with verified transactions and balance checks, enabling agents to audit numbers.516MIT
- Alicense-qualityCmaintenanceConverts 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.MIT
- AlicenseAqualityBmaintenanceConvert PDFs to structured JSON. Extract invoices, bank statements, contracts, and more. Pay per call via x402 USDC.58MIT
- Alicense-qualityCmaintenanceParse crypto exchange CSVs (Coinbase, Binance, Kraken, +11 more) and bank statement PDFs (Chase, BofA, +11 more) into Koinly, TurboTax, CoinLedger, or ZenLedger formats. Free tier: 25 files/month, no credit card required.1ISC
Your Connectors
Sign in to create a connector for this server.