BankConv MCP server
Provides export of converted bank statements as OFX files for import into MYOB.
Provides export of converted bank statements as QBO files for QuickBooks Desktop Web Connect and OFX files for QuickBooks Online, including the bank's QuickBooks ID.
Provides export of converted bank statements as OFX files for import into Sage.
Provides export of converted bank statements as OFX and Xero CSV files compatible with Xero's import columns.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@BankConv MCP serverConvert ~/Downloads/chase-september.pdf to QBO for QuickBooks."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
BankConv MCP server
Convert PDF bank statements into transactions, CSV, OFX, QFX, QBO or Xero CSV from Claude, Cursor, VS Code and other AI assistants.
Point your assistant at a statement on your computer and ask for what you need: the transactions to analyse, a CSV, or a file your accounting software imports. The server uploads the PDF to BankConv, waits for the conversion and either returns the transactions or saves the file next to the PDF.
You: Convert ~/Downloads/chase-september.pdf to QBO for QuickBooks Desktop.
Assistant: Saved QBO to ~/Downloads/chase-september.qbo (42 transactions, Sep 1–30, USD).What you get
Transactions with real dates, one signed amount (money in positive, money out negative) and the running balance. Opening balance and total lines are left out.
Files: CSV, OFX (Xero, Sage, MYOB, QuickBooks Online), QFX (Quicken), QBO (QuickBooks Desktop Web Connect, with your bank's QuickBooks ID) and Xero CSV (Xero's own columns).
Password-protected PDFs, scanned statements and multi-page statements.
Related MCP server: CapyParse MCP Server
Setup
Create an API key in BankConv under Team → API keys (https://app.bankconv.com/teams/api-keys). Conversions use pages from your BankConv plan.
Add the server to your assistant with the key in
BANKCONV_API_KEY.
Claude Code
claude mcp add bankconv -e BANKCONV_API_KEY=sk_live_your_key -- npx -y bankconv-mcpClaude Desktop
Add this to claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"bankconv": {
"command": "npx",
"args": ["-y", "bankconv-mcp"],
"env": { "BANKCONV_API_KEY": "sk_live_your_key" }
}
}
}Cursor, Windsurf and other clients
Use the same command, args and env in the client's MCP settings (for Cursor, ~/.cursor/mcp.json).
VS Code
{
"servers": {
"bankconv": {
"command": "npx",
"args": ["-y", "bankconv-mcp"],
"env": { "BANKCONV_API_KEY": "sk_live_your_key" }
}
}
}Requires Node.js 20 or later.
Tools
Tool | What it does |
| Convert a PDF on this computer. Returns the transactions, or saves CSV, OFX, QFX, QBO or Xero CSV (next to the PDF unless you give |
| Get the transactions of an earlier conversion. |
| Save an earlier conversion as CSV, OFX, QFX, QBO or Xero CSV. |
| List recent conversions with their status. |
| Check how many pages are left this billing period. |
Example prompts
"Convert
statement.pdfand tell me my five biggest expenses.""Turn every PDF in
~/Statements/2026into OFX files for Xero.""Convert
amex-march.pdfto QBO for QuickBooks Desktop. The PDF password is 4821.""Total my September spending by category from
chase-sep.pdf."
Privacy
The PDF is uploaded to BankConv over HTTPS and processed there. The PDF and its converted files are deleted automatically after 24 hours, or 48 or 72 hours if your team chose a longer window; see security and data handling. The server only reads the files you name and only writes the files you ask for.
Configuration
Variable | Default | |
| (required) | Your BankConv API key |
|
| API base URL |
Links
License
MIT
Available Tools
5 toolsconvert_statementConvert a bank statement PDFA
Convert a PDF bank or credit card statement on this computer with BankConv. Returns the transactions (date, description, signed amount, balance) or saves a file next to the PDF. csv: the statement as a spreadsheet; ofx: Xero, Sage, MYOB, QuickBooks Online; qfx: Quicken; qbo: QuickBooks Desktop (Web Connect); xero: Xero CSV with Xero's own columns. Uses pages from the BankConv account.
| Name | Required | Description | Default |
|---|---|---|---|
| output | No | "transactions" returns the rows to you; any other value saves that file. csv: the statement as a spreadsheet; ofx: Xero, Sage, MYOB, QuickBooks Online; qfx: Quicken; qbo: QuickBooks Desktop (Web Connect); xero: Xero CSV with Xero's own columns. | transactions |
| save_to | No | For file outputs: a file path or folder. Defaults to the PDF's folder. | |
| password | No | The PDF password, if the statement is password-protected. | |
| file_path | Yes | Path to the PDF statement on this computer. | |
| timeout_seconds | No | How long to wait for the conversion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations by disclosing that conversion 'Uses pages from the BankConv account' (a billing/quota constraint) and that file outputs are 'saved next to the PDF' by default. Annotations already cover the read/write and open-world profile, and the description does not contradict them, though it says nothing about overwrite behavior, failure modes, or conversion limits.
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?
Front-loads the core action and the return/save distinction, then enumerates formats compactly. The format list is dense and duplicates the schema, but nothing is genuinely wasted.
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 no output schema, the description usefully specifies the returned transaction columns (date, description, signed amount, balance) and the file-save alternative. Remaining gaps are minor: no error/failure behavior, no note on how page consumption scales, and no relationship to get_transactions.
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 the schema already documents all five parameters, including the output enum values that the description largely repeats verbatim. The description adds no format syntax, path semantics, or timeout nuance beyond the schema, hitting the expected baseline.
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: converts a PDF bank/credit card statement on this computer via BankConv, and names the concrete outputs (transaction rows or a saved file). It does not, however, distinguish itself from siblings like get_transactions or download_statement, which an agent might reasonably confuse with the 'transactions' output mode.
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?
Usage is implied ('a PDF bank or credit card statement on this computer') and enumerates format choices, but there is no explicit when-to-use / when-not-to-use guidance and no reference to alternatives such as get_transactions or download_statement. The agent must infer routing from the sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_statementSave a conversion as a fileB
Save an earlier BankConv conversion as a file. csv: the statement as a spreadsheet; ofx: Xero, Sage, MYOB, QuickBooks Online; qfx: Quicken; qbo: QuickBooks Desktop (Web Connect); xero: Xero CSV with Xero's own columns.
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | csv: the statement as a spreadsheet; ofx: Xero, Sage, MYOB, QuickBooks Online; qfx: Quicken; qbo: QuickBooks Desktop (Web Connect); xero: Xero CSV with Xero's own columns. | |
| tables | No | Advanced: which tables to read, as page:table indexes from 0 ("0:1,1:0"). Leave out and BankConv picks the transaction tables. | |
| save_to | No | A file path or folder. Defaults to the current folder. | |
| conversion_id | Yes | The conversion id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the write-to-disk nature is partly covered. The description adds nothing beyond that — it does not say whether an existing file is overwritten, where the file lands by default beyond what save_to already documents, or what the call returns. The only content beyond the first sentence is the format list, which is already in the schema.
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 first sentence is well front-loaded and does real work. The second sentence is a long enumeration of format meanings copied wholesale from the schema's enum description, so half the description does not earn 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 4-parameter file-export tool with no output schema, the description covers the required format parameter but says nothing about what a successful save returns (a path? a URL?) or the effect of the optional tables/save_to parameters. The schema carries those details, but the description is thin on the outcome of the call.
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 four parameters (format, tables, save_to, conversion_id) are documented in the schema. The description's format sentence is a verbatim duplicate of the schema's enum description, adding no meaning beyond what the schema provides. Baseline 3 applies.
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 (save) and resource (an earlier BankConv conversion as a file), which separates it from convert_statement, which creates a conversion. It does not explicitly name the sibling it differs from, but the word 'earlier' makes the dependency clear.
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?
'An earlier BankConv conversion' implies a prior conversion must exist and that a conversion_id is needed, which is useful context. However, there is no explicit when-to-use versus convert_statement (exporting vs creating) and no guidance on when a given format is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_creditsCheck the page balanceARead-only
Check how many BankConv pages the account has left this billing period.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a read-only, open-world operation, so the safety profile is covered. The description adds useful scoping detail (pages, current billing period) but says nothing about return format, refresh timing, or whether the counter resets.
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?
A single front-loaded sentence with no filler. 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 parameterless read-only tool with no output schema, the description covers what is counted and over what window. A brief note on the returned value's shape would make it fully self-contained, but nothing essential is missing.
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 zero parameters, so there are no parameter semantics to convey. Baseline 4 applies; nothing is missing on this dimension.
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: checking remaining BankConv pages for the billing period. It is clearly distinguishable from siblings like get_transactions and list_conversions, though it does not name them explicitly.
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?
Usage is implied (check remaining quota, presumably before converting), but there is no explicit when-to-use statement, prerequisite, or routing to an alternative. With no overlapping siblings, the omission is less costly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactionsGet the transactions of a conversionARead-only
Get the transactions of an earlier BankConv conversion: date, description, signed amount and balance, with the account and period.
| Name | Required | Description | Default |
|---|---|---|---|
| tables | No | Advanced: which tables to read, as page:table indexes from 0 ("0:1,1:0"). Leave out and BankConv picks the transaction tables. | |
| conversion_id | Yes | The conversion id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe-read profile is covered and the description only needs to add context. It adds the shape of the data returned (date, description, signed amount, balance, account, period), but says nothing about pagination, result limits, or what happens if the conversion id is unknown. Adequate given the annotation coverage, 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?
A single front-loaded sentence: verb, resource, scope, and payload, with no filler. The field enumeration earns its place because there is no output schema, though the trailing 'with the account and period' is slightly tacked on.
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 no output schema, the description compensates by naming the returned fields, and annotations cover the read-only safety profile, so an agent can call it correctly. It is thin on error behavior and pagination for a potentially large transaction list, but nothing essential is missing for the core call.
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 the baseline is 3; the description covers the required conversion_id implicitly and mentions the account/period framing. The advanced 'tables' page:table parameter is documented only in the schema, and the description adds no syntax or defaulting detail beyond it. 0 params semantics fine.
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 ('Get the transactions of an earlier BankConv conversion') and even enumerates the returned fields, so the agent knows this is the per-conversion ledger read rather than the credits or statement list. It never names a sibling (list_conversions, download_statement, get_credits) to disambiguate, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'an earlier BankConv conversion' implies the prerequisite that a conversion already exists, which is useful but only implied. There is no explicit when-to-use/when-not guidance and no routing to alternatives such as download_statement or list_conversions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_conversionsList recent conversionsBRead-only
List the BankConv account's recent conversions with their status, file name and page count.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful context about returned fields (status, file name, page count) but says nothing about pagination, ordering, or how filtering behaves, which a listing tool should disclose.
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?
A single front-loaded sentence with no filler; the core purpose and returned fields come first. Nothing extraneous, though there is also very little content to structure.
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?
There is no output schema, so the description rightly sketches the return values, and annotations cover safety. However, for a two-parameter listing tool it omits all parameter semantics and any pagination/filtering behavior, leaving real gaps an agent must guess at.
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 0% and neither parameter (limit, status) is explained in the description. The word 'recent' loosely implies a recency-ordered default, but the limit bound, its default of 15, and the status enum values are left entirely undcoumented, so the description fails to compensate for the coverage gap.
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 clear verb+resource ('List ... recent conversions') and names the fields returned (status, file name, page count). The resource is distinguishable from siblings like get_transactions and convert_statement, though the description never explicitly contrasts itself with them.
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 no when-to-use guidance, no exclusions, and no mention of alternatives such as get_transactions or download_statement. Usage is only weakly implied by the word 'recent', leaving the agent to infer when this tool is the right choice.
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.
5 tool updates
v0.1.0- First observed
convert_statement - First observed
download_statement - First observed
get_credits - First observed
get_transactions - First observed
list_conversions
TDQS
Scored across 5 tools
The tools mostly have distinct purposes: convert_statement handles new conversions, get_transactions retrieves transactions from earlier conversions, and download_statement saves earlier conversions as files. However, convert_statement also says it can return transactions or save a file, which creates some overlap with get_transactions and download_statement.
All tool names follow a consistent snake_case verb_noun pattern: get_transactions, convert_statement, download_statement, list_conversions, and get_credits. There are no mixed conventions or vague names.
Five tools is well-scoped for a bank statement conversion and retrieval server. Each tool covers a distinct operation: conversion, transaction retrieval, file download, listing, and credit checking.
The surface covers the core lifecycle: converting statements, listing conversions, retrieving transactions, downloading files, and checking credits. Minor gaps like deleting or updating conversions may exist, but they are not critical for the primary workflow.
Maintenance
Related MCP Connectors
Convert PDF bank statements into structured transactions, accounts, and balances.
Turn bank statement PDFs, CSVs, XLSX and OFX into categorised transactions plus a summary.
Bank statement PDFs become CSV or JSON transactions with dates, amounts and balances.
Convert PDF bank statements to checked Excel, CSV or JSON with balance validation.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides PDF analysis, data extraction, form filling, and comparison capabilities for Claude and Cursor, supporting both text and scanned documents with OCR.3 npm1MIT
- AlicenseAqualityDmaintenanceConverts PDF bank statements into structured data (Markdown, JSON, CSV, JSONL) with verified transactions and balance checks, enabling agents to audit numbers.55 npmMIT

bankstatementlyofficial
AlicenseAqualityAmaintenanceParse and query bank statements — turn PDF statements into structured transactions, accounts, and balances, with balance-reconciliation checks. A deterministic financial memory for AI agents, served as a hosted streamable-HTTP endpoint (API key or OAuth).181MIT- 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