Zovo Bank File Converter
Server Details
Convert a bank statement to a QBO file that QuickBooks imports, plus OFX.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Score is being calculated.
Available Tools
2 toolsconvert_statement_to_qboConvert bank statement to QBOARead-onlyInspect
Use this when the user attaches a bank or credit card statement (text PDF, CSV or Excel export) and wants to convert the bank statement to a QBO file, or an OFX, QIF or QuickBooks CSV: "convert pdf to qbo", "bank statement to ofx", "csv to qif". Returns a QuickBooks Web Connect .qbo, OFX 1.0.2 and OFX 2 files, a QIF, a 3-column QuickBooks CSV and an Excel review sheet, with stable unique FITIDs, the statement period and the ending balance, and checks opening + transactions = closing. Does not read scans or photos (use generate_qbo_file with the rows you can read) and does not connect to banks or QuickBooks.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The statement to convert: a text PDF, or the CSV or Excel (.xlsx) export from online banking, e.g. chase-sept-2026.pdf. | |
| bank_id | No | Optional BANKID for the OFX files: the bank's 9-digit ABA number printed on checks, e.g. 121000248. Default 000000000. | |
| currency | No | ISO currency code, e.g. USD (default), CAD, GBP. | |
| intu_bid | No | QuickBooks Web Connect bank id (INTU.BID) for the .qbo file. Default 3000. Use the id of your own bank if QuickBooks Desktop asks for a supported bank. | |
| date_order | No | Order of numeric dates: MDY (default, US) or DMY. Detected from the file when a day is above 12. | |
| flip_signs | No | Only for CSV/Excel card exports that list purchases as positive: true flips every amount. Default false. | |
| account_type | No | checking (default), savings, money_market, credit_card or line_of_credit. auto reads it from a PDF statement. Example: credit_card. | |
| account_last4 | No | Last 4 digits of the account (or any short label) used as the account id QuickBooks links to, e.g. 4821. Default 0000. Never send the full account number. | |
| statement_year | No | Year for dates printed without one, e.g. 2026. | |
| closing_balance | No | Ending balance for LEDGERBAL, e.g. "$5,034.47". If unknown, the files say so (see result). | |
| opening_balance | No | Opening balance if the file has none, e.g. 4123.55. With closing_balance it proves no row is missing. | |
| qif_date_format | No | Date order inside the QIF file: MDY (default, Quicken US) or DMY (Quicken UK, MoneyDance in Europe). |
Output Schema
| Name | Required | Description |
|---|---|---|
| period | Yes | |
| source | Yes | |
| totals | Yes | |
| account | Yes | |
| preview | Yes | |
| warnings | Yes | |
| downloads | Yes | |
| file_check | Yes | |
| import_steps | Yes | |
| transactions | Yes | |
| unread_lines | Yes | |
| not_converted | Yes | |
| preview_count | No | |
| ending_balance | Yes | |
| reconciliation | Yes | |
| not_converted_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, and the description usefully reinforces this ("does not connect to banks or QuickBooks") while adding real value: the exact artifact set returned, stable unique FITIDs, and the opening + transactions = closing validation. However, it never says what happens when that balance check fails — whether the tool errors, warns, or still emits files — which is the key behavioral fact an agent needs before calling it on a messy statement.
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 trigger clause is front-loaded and every element — example utterances, output list, validation claim, exclusion, sibling pointer — carries information. The middle is a long comma-chained sentence that could be split for scannability, but there is no filler or repetition.
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?
An output schema exists, so return values need no exhaustive explanation, and the description still summarizes them at the right altitude. With 12 optional parameters fully documented in the schema and a nested file object, the remaining unknowns (behavior on a failed balance check) are minor rather than structural.
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 every one of the 12 parameters already carries its own documentation and the baseline applies. The description adds only indirect meaning, tying opening_balance and closing_balance to the balance proof; it says nothing about intu_bid, bank_id, flip_signs, date_order or qif_date_format, so it does not supplement the schema on the parameters most likely to be misused.
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 a specific verb and resource (convert a bank/credit card statement into a QBO file) and immediately widens the output set to OFX, QIF and QuickBooks CSV. The final clause names the sibling generate_qbo_file and the condition that selects it, so an agent can distinguish the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Opens with an explicit trigger (user attaches a text PDF, CSV or Excel export and wants a converted file), supplies real user phrasings like "csv to qif", and closes with an explicit exclusion plus the recommended alternative for scans and photos. When-to-use, when-not-to-use and the alternative are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_qbo_fileMake a QBO file from transactionsARead-onlyInspect
Use this when the user wants to convert bank statement rows to a QBO, OFX or QIF file from rows they pasted, typed or showed in a statement photo or table: "convert csv to qbo", "bank statement to qbo converter". First convert what the user gave into transaction objects (date, description, signed amount or withdrawal/deposit, optional balance and check number); pass raw text in text only if you cannot. Returns QBO, OFX 1.0.2, OFX 2, QIF, QuickBooks CSV and an Excel review sheet with unique FITIDs and the ending balance. Do not use when a statement file is attached (use convert_statement_to_qbo); does not connect to banks or QuickBooks.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Fallback only: pasted statement text or CSV when you cannot build the objects. | |
| bank_id | No | Optional BANKID for the OFX files: the bank's 9-digit ABA number printed on checks, e.g. 121000248. Default 000000000. | |
| currency | No | ISO currency code, e.g. USD (default), CAD, GBP. | |
| intu_bid | No | QuickBooks Web Connect bank id (INTU.BID) for the .qbo file. Default 3000. Use the id of your own bank if QuickBooks Desktop asks for a supported bank. | |
| date_order | No | Order of numeric dates: MDY (default, US) or DMY. Detected from the file when a day is above 12. | |
| account_type | No | checking (default), savings, money_market, credit_card or line_of_credit. auto reads it from a PDF statement. Example: credit_card. | |
| transactions | No | Rows as objects in statement order, e.g. [{"date":"09/02/2026","description":"PAYROLL ACME INC","amount":2450},{"date":"09/03/2026","description":"GREENLEAF MARKET","amount":-82.17}]. Pasted CSV text is also accepted. | |
| account_last4 | No | Last 4 digits of the account (or any short label) used as the account id QuickBooks links to, e.g. 4821. Default 0000. Never send the full account number. | |
| statement_year | No | Year for dates printed without one, e.g. 2026. | |
| closing_balance | No | Ending balance for LEDGERBAL, e.g. "$5,034.47". If unknown, the files say so (see result). | |
| opening_balance | No | Opening balance if the file has none, e.g. 4123.55. With closing_balance it proves no row is missing. | |
| qif_date_format | No | Date order inside the QIF file: MDY (default, Quicken US) or DMY (Quicken UK, MoneyDance in Europe). |
Output Schema
| Name | Required | Description |
|---|---|---|
| period | Yes | |
| source | Yes | |
| totals | Yes | |
| account | Yes | |
| preview | Yes | |
| warnings | Yes | |
| downloads | Yes | |
| file_check | Yes | |
| import_steps | Yes | |
| transactions | Yes | |
| unread_lines | Yes | |
| not_converted | Yes | |
| preview_count | No | |
| ending_balance | Yes | |
| reconciliation | Yes | |
| not_converted_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, and the description adds genuinely new behavior: which output formats come back, that FITIDs are unique and the ending balance is included, and the precondition to build transaction objects first with raw `text` only as a fallback.
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 single paragraph is front-loaded with the when-to-use condition, then the required data shape, then outputs, then exclusions — every sentence carries information. Minor cost from the embedded example user queries, but they aid matching rather than padding.
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 12-parameter conversion tool with an output schema, the description covers the missing pieces an agent needs: the preferred input construction (structured transaction objects before raw text), the range of returned formats, and the boundary against file-attachment conversion and bank connectivity.
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, but the description adds real guidance beyond the schema: it prescribes the order of dates/amounts in the transaction objects and warns to use `text` only when objects cannot be constructed. It does not, however, touch the many formatting parameters (intu_bid, account_last4, date_order), leaving those to 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?
States a specific verb+resource (convert pasted/typed statement rows into a QBO/OFX/QIF file) and distinguishes itself from the sibling by naming convert_statement_to_qbo as the tool for attached statement files. An agent can pick between the two without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use (rows the user pasted, typed, or showed in a photo/table, plus example user phrasings like "convert csv to qbo") and explicit when-not-to-use (statement file attached → convert_statement_to_qbo). It also bounds scope by saying it does not connect to banks or QuickBooks.
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.
2 tool updates
- First observed
convert_statement_to_qbo - First observed
generate_qbo_file
Related MCP Connectors
Convert bank statement PDFs to Excel, CSV, OFX or QBO, every row checked against the balances.
Convert PDF bank statements to checked Excel, CSV or JSON with balance validation.
Normalize bank statements (CSV, camt, MT940, OFX, QIF) to JSON, analyze, export.
Normalize bank statements (CSV, camt, MT940, OFX, QIF) to JSON, analyze, export.
Related MCP Servers
- AlicenseAqualityCmaintenanceConverts 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.5MIT
- AlicenseAqualityBmaintenanceEnables AI assistants such as Claude, Cursor and VS Code to turn PDF bank statements into structured transactions or import-ready CSV, OFX, QFX, QBO and Xero CSV files. Handles password-protected, scanned and multi-page statements, returning the data or saving the converted file next to the original PDF.552 npm1MIT
- FlicenseNot gradedqualityCmaintenanceEnables converting PDFs and CSV/spreadsheet files into spreadsheets, extracting bank statement or receipt data into clean CSV, cleaning messy CSV, and generating client-ready reports through an open MCP endpoint.-
- AlicenseNot gradedqualityAmaintenanceParse 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.1 npmISC
Glama MCP Gateway
Add one secure layer between your agents and this server.