Skip to main content
Glama
CPUtester5465

CountBean

propose_transactions

Parse a bank statement CSV/OFX/QFX into proposed transactions without writing to the ledger. Returns JSON proposals with mapping and ambiguities, ready for review and categorization before booking.

Instructions

Parse a bank statement (CSV or OFX/QFX) into PROPOSED transactions.

THIS TOOL NEVER WRITES. It returns proposals as JSON; add_transactions is still the only way anything reaches the book, so the bean-check gate and the git commit stay where they are.

content is the statement itself — base64-encoded bytes, or the text pasted straight in. NOT a path: the hosted chat agent has no filesystem in common with your machine, and a tool that only works from one of them is the defect this replaces.

account is the book account the statement belongs to, e.g. 'Assets:Checking' or 'Liabilities:Visa'. Required — every row in an export is one side of that account and the file never says which.

WHAT YOU MUST DO WITH THE RESULT

  • Read mapping. It says which column was read as what, which date format, which decimal separator, and whether a positive amount was taken to mean money in or money out — with the evidence for each. If any of it is wrong, call again with the matching override rather than editing the numbers.

  • CATEGORISE. Every proposal's counter-account is a placeholder (Income:Unclassified / Expenses:Unclassified). Replacing those with real accounts is your job; parsing was this tool's. Keep the import-id: metadata line exactly as given — it is what stops the same statement being booked twice.

  • Keep the ! flags. A flagged row has an ambiguity the file cannot settle, listed in ambiguities. Do not silently promote one to *.

  • Open anything in accounts_to_open first (open_directives is ready to paste into open_accounts).

  • Show the user counts and anything flagged before you write.

Overrides, all optional: amount_shape ('signed' | 'debit_credit' | 'balance'), columns (a JSON object like {"date": "Posted Date", "amount": "Amount"} — header names or 0-based indices), date_format (strptime), delimiter, decimal_separator ('.' or ','), sign ('normal' | 'inverted'), opening_balance (for a running-balance file whose first row has no predecessor), counter_account, currency, file_format, content_encoding.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
signNoauto
accountYes
columnsNo
contentYes
currencyNo
delimiterNo
date_formatNo
file_formatNoauto
amount_shapeNoauto
counter_accountNo
opening_balanceNo
content_encodingNoauto
decimal_separatorNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observedv0.1.0

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden — and it exceeds it. It discloses that the tool never writes, returns JSON proposals, flags ambiguous rows with '!' that must not be silently promoted, preserves import-id metadata for deduplication, and instructs the agent to open accounts_to_open and show counts first. This is comprehensive side-effect and workflow disclosure far beyond a typical description.

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 long but every section earns its place given 13 parameters and zero schema coverage. It is well-structured: scope first, non-writing behavior second, then the two required parameters, then a bolded post-processing checklist, then a compact overrides list. Key warnings ('THIS TOOL NEVER WRITES', 'NOT a path', 'Keep the ! flags') are front-loaded and emphasized.

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 tool with 13 parameters, no annotations, and 0% schema coverage, the description is complete. It covers the tool's purpose, its safety profile (read-only), the two required parameters, the meaning of every override, and the critical post-processing obligations. Though an output schema exists, the description still explains the essential result fields (mapping, ambiguities, accounts_to_open, counts) because they dictate agent action steps.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate — and it does thoroughly. 'content' is explained as base64-encoded bytes or pasted text (not a path), 'account' gets a real-world example ('Assets:Checking'), and every override is listed with its value set: amount_shape ('signed' | 'debit_credit' | 'balance'), columns with a JSON example, date_format as strptime, decimal_separator ('.' or ','), sign ('normal' | 'inverted'), and opening_balance with its purpose. This fully compensates for the schema gap.

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 opening sentence states a specific verb and resource: 'Parse a bank statement (CSV or OFX/QFX) into PROPOSED transactions.' It differentiates itself from the sibling add_transactions by explicitly declaring 'THIS TOOL NEVER WRITES' and that it 'returns proposals as JSON.' An agent can immediately distinguish it from all 19 sibling tools.

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

Usage Guidelines5/5

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

The description explicitly names the alternative and the condition that selects it: 'add_transactions is still the only way anything reaches the book.' It also explains that content is 'NOT a path' because the hosted agent has no shared filesystem, clarifying an important usage constraint. The 'WHAT YOU MUST DO WITH THE RESULT' section further instructs the agent on the proper follow-up workflow.

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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/CPUtester5465/countbean-plugin'

If you have feedback or need assistance with the MCP directory API, please join our Discord server