Tallyproof Bank Statements
Bank statement to spreadsheet
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"statement-converter": {
"url": "https://statement-converter.zovo.one/mcp"
}
}
}Remote endpoints
https://statement-converter.zovo.one/mcpstreamable-httpWhat it can do
Tool inventory
Tools (2)
🟢convert_bank_statement(file, account_type, statement_year, opening_balance, closing_balance, ...)
Use this when the user attaches a bank or credit card statement (text PDF, or the bank's CSV/Excel export) and wants it converted to Excel or CSV: "convert bank statement to excel", "bank statement pdf to csv", "import my statement into QuickBooks", "does my statement balance". Extracts each transaction (date, description, signed amount, running balance), reconciles opening + transactions = closing to the cent, points to missing or duplicated rows, suggests categories, and returns Excel, CSV and QuickBooks CSV downloads. Does not read scanned images (needs OCR first), does not connect to bank accounts, and is not for non-financial PDFs or general PDF editing.
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "object",
"properties": {
"download_url": {
"type": "string",
"description": "Temporary download link for the file, supplied by ChatGPT."
},
"file_id": {
"type": "string",
"description": "ChatGPT file id, e.g. file_abc123."
},
"mime_type": {
"description": "Media type if known, e.g. application/pdf.",
"type": "string"
},
"file_name": {
"description": "Original file name if known, e.g. statement.pdf.",
"type": "string"
}
},
"required": [
"download_url",
"file_id"
],
"description": "The statement to convert: a text PDF downloaded from the bank or card website, or the bank's CSV or Excel (.xlsx) transaction export, e.g. september-statement.pdf."
},
"account_type": {
"description": "auto (default): a PDF is classified from its text; pasted rows and CSV/Excel exports count as bank unless the balances or the sign pattern show a credit card (the result says so). bank: checking or savings. credit_card: charges are money out and the statement shows a previous and new balance owed. Example: credit_card.",
"type": "string",
"enum": [
"auto",
"bank",
"credit_card"
]
},
"statement_year": {
"description": "Closing year of the statement, used for dates printed without a year when the period is not on the file, e.g. 2026 (a December-January statement uses the January year).",
"type": "integer",
"minimum": 1990,
"maximum": 2100
},
"opening_balance": {
"description": "Opening (beginning or previous) balance in dollars, e.g. 4123.55. Only needed when the file has none, such as a CSV export without a balance column, or to override.",
"type": "number",
"minimum": -10000000000,
"maximum": 10000000000
},
"closing_balance": {
"description": "Closing (ending or new) balance in dollars, e.g. 5034.47. Used with opening_balance to prove the total to the cent.",
"type": "number",
"minimum": -10000000000,
"maximum": 10000000000
},
"flip_signs": {
"description": "Only for CSV/Excel exports that list purchases as positive and payments as negative (common in credit card exports): true flips each amount so money out is negative. Default false.",
"type": "boolean"
},
"date_order": {
"description": "Order of numeric dates in a CSV/Excel export: MDY (US, 09/02/2026, default) or DMY (02/09/2026). Detected automatically when a day is above 12.",
"type": "string",
"enum": [
"MDY",
"DMY"
]
}
},
"required": [
"file"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"source": {
"type": "object",
"properties": {
"file": {
"type": "string"
},
"type": {
"type": "string"
},
"pages": {
"type": "number"
},
"layout": {
"type": "string"
}
},
"required": [
"file",
"type",
"pages",
"layout"
],
"additionalProperties": false
},
"account": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"number": {
"type": [
"string",
"null"
]
}
},
"required": [
"type",
"number"
],
"additionalProperties": false
},
"period": {
"type": "object",
"properties": {
"start": {
"type": [
"string",
"null"
]
},
"end": {
"type": [
"string",
"null"
]
}
},
"required": [
"start",
"end"
],
"additionalProperties": false
},
"transactions": {
"type": "number"
},
"reconciliation": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"PASS",
"DIFFERENCE",
"UNVERIFIED"
]
},
"opening_balance": {
"type": [
"number",
"null"
]
},
"closing_balance": {
"type": [
"number",
"null"
]
},
"computed_closing": {
"type": [
"number",
"null"
]
},
"difference": {
"type": [
"number",
"null"
]
},
"money_in": {
"type": "number"
},
"money_out": {
"type": "number"
},
"net": {
"type": "number"
},
"formula": {
"type": "string"
},
"balances_from": {
"type": "string"
},
"running_balance_breaks": {
"type": "number"
},
"suspects": {
"type": "array",
"items": {
"type": "object",
"properties": {
"row": {
"type": "number"
},
"date": {
"type": "string"
},
"description": {
"type": "string"
},
"amount": {
"type": "number"
},
"reason": {
"type": "string"
}
},
"required": [
"row",
"date",
"description",
"amount",
"reason"
],
"additionalProperties": false
}
},
"checks": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"status",
"opening_balance",
"closing_balance",
"computed_closing",
"difference",
"money_in",
"money_out",
"net",
"formula",
"balances_from",
"running_balance_breaks",
"suspects",
"checks"
],
"additionalProperties": false
},
"categories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"category": {
"type": "string"
},
"money_in": {
"type": "number"
},
"money_out": {
"type": "number"
},
"count": {
"type": "number"
}
},
"required": [
"category",
"money_in",
"money_out",
"count"
],
"additionalProperties": false
},
"description": "Suggested categories from keyword rules; review before filing."
},
"months": {
"type": "array",
"items": {
"type": "object",
"properties": {
"month": {
"type": "string"
},
"money_in": {
"type": "number"
},
"money_out": {
"type": "number"
},
"net": {
"type": "number"
},
"count": {
"type": "number"
}
},
"required": [
"month",
"money_in",
"money_out",
"net",
"count"
],
"additionalProperties": false
}
},
"preview": {
"type": "array",
"items": {
"type": "object",
"properties": {
"row": {
"type": "number"
},
"date": {
"type": "string"
},
"description": {
"type": "string"
},
"amount": {
"type": "number"
},
"balance": {
"type": [
"number",
"null"
]
},
"category": {
"type": "string"
}
},
"required": [
"row",
"date",
"description",
"amount",
"balance",
"category"
],
"additionalProperties": false
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"downloads": {
"type": "object",
"properties": {
"xlsx": {
"type": "string"
},
"csv": {
"type": "string"
},
"quickbooks_csv": {
"type": "string"
}
},
"required": [
"xlsx",
"csv",
"quickbooks_csv"
],
"additionalProperties": false
},
"note": {
"type": "string"
}
},
"required": [
"source",
"account",
"period",
"transactions",
"reconciliation",
"categories",
"months",
"preview",
"warnings",
"downloads",
"note"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢summarize_transactions(transactions, account_type, statement_year, opening_balance, closing_balance)
Use this when the user pastes or lists bank or credit card transactions (date, description, amount) and wants them reconciled, totaled by month or category, or exported: "does my statement balance", "money in and out by month", "categorize these transactions", "make a QuickBooks CSV from these". Checks opening + transactions = closing to the cent and the running balance row by row, points to the rows that break it, suggests categories, and returns Excel, CSV and QuickBooks CSV downloads. Do not use when a statement file is attached (use convert_bank_statement); does not give tax or accounting advice.
Input Schema
{
"type": "object",
"properties": {
"transactions": {
"minItems": 1,
"maxItems": 5000,
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string",
"maxLength": 40,
"description": "Transaction date, e.g. 2026-09-02, 09/02/2026, or 09/02 with statement_year."
},
"description": {
"type": "string",
"maxLength": 300,
"description": "Payee or description as printed, e.g. PAYROLL DEPOSIT ACME INC."
},
"amount": {
"type": "number",
"minimum": -1000000000,
"maximum": 1000000000,
"description": "Signed amount in dollars: money in positive, money out negative, e.g. -45.10. For credit cards, charges negative and payments positive."
},
"balance": {
"description": "Running balance after this row if the statement shows one, e.g. 4078.45.",
"type": "number",
"minimum": -10000000000,
"maximum": 10000000000
}
},
"required": [
"date",
"description",
"amount"
]
},
"description": "The transactions in statement order, e.g. [{\"date\":\"2026-09-02\",\"description\":\"PAYROLL ACME INC\",\"amount\":2450}, {\"date\":\"2026-09-03\",\"description\":\"GREENLEAF MARKET\",\"amount\":-82.17}]."
},
"account_type": {
"description": "auto (default): a PDF is classified from its text; pasted rows and CSV/Excel exports count as bank unless the balances or the sign pattern show a credit card (the result says so). bank: checking or savings. credit_card: charges are money out and the statement shows a previous and new balance owed. Example: credit_card.",
"type": "string",
"enum": [
"auto",
"bank",
"credit_card"
]
},
"statement_year": {
"description": "Closing year of the statement, used for dates printed without a year when the period is not on the file, e.g. 2026 (a December-January statement uses the January year).",
"type": "integer",
"minimum": 1990,
"maximum": 2100
},
"opening_balance": {
"description": "Opening (beginning or previous) balance in dollars, e.g. 4123.55. Only needed when the file has none, such as a CSV export without a balance column, or to override.",
"type": "number",
"minimum": -10000000000,
"maximum": 10000000000
},
"closing_balance": {
"description": "Closing (ending or new) balance in dollars, e.g. 5034.47. Used with opening_balance to prove the total to the cent.",
"type": "number",
"minimum": -10000000000,
"maximum": 10000000000
}
},
"required": [
"transactions"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"source": {
"type": "object",
"properties": {
"file": {
"type": "string"
},
"type": {
"type": "string"
},
"pages": {
"type": "number"
},
"layout": {
"type": "string"
}
},
"required": [
"file",
"type",
"pages",
"layout"
],
"additionalProperties": false
},
"account": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"number": {
"type": [
"string",
"null"
]
}
},
"required": [
"type",
"number"
],
"additionalProperties": false
},
"period": {
"type": "object",
"properties": {
"start": {
"type": [
"string",
"null"
]
},
"end": {
"type": [
"string",
"null"
]
}
},
"required": [
"start",
"end"
],
"additionalProperties": false
},
"transactions": {
"type": "number"
},
"reconciliation": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"PASS",
"DIFFERENCE",
"UNVERIFIED"
]
},
"opening_balance": {
"type": [
"number",
"null"
]
},
"closing_balance": {
"type": [
"number",
"null"
]
},
"computed_closing": {
"type": [
"number",
"null"
]
},
"difference": {
"type": [
"number",
"null"
]
},
"money_in": {
"type": "number"
},
"money_out": {
"type": "number"
},
"net": {
"type": "number"
},
"formula": {
"type": "string"
},
"balances_from": {
"type": "string"
},
"running_balance_breaks": {
"type": "number"
},
"suspects": {
"type": "array",
"items": {
"type": "object",
"properties": {
"row": {
"type": "number"
},
"date": {
"type": "string"
},
"description": {
"type": "string"
},
"amount": {
"type": "number"
},
"reason": {
"type": "string"
}
},
"required": [
"row",
"date",
"description",
"amount",
"reason"
],
"additionalProperties": false
}
},
"checks": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"status",
"opening_balance",
"closing_balance",
"computed_closing",
"difference",
"money_in",
"money_out",
"net",
"formula",
"balances_from",
"running_balance_breaks",
"suspects",
"checks"
],
"additionalProperties": false
},
"categories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"category": {
"type": "string"
},
"money_in": {
"type": "number"
},
"money_out": {
"type": "number"
},
"count": {
"type": "number"
}
},
"required": [
"category",
"money_in",
"money_out",
"count"
],
"additionalProperties": false
},
"description": "Suggested categories from keyword rules; review before filing."
},
"months": {
"type": "array",
"items": {
"type": "object",
"properties": {
"month": {
"type": "string"
},
"money_in": {
"type": "number"
},
"money_out": {
"type": "number"
},
"net": {
"type": "number"
},
"count": {
"type": "number"
}
},
"required": [
"month",
"money_in",
"money_out",
"net",
"count"
],
"additionalProperties": false
}
},
"preview": {
"type": "array",
"items": {
"type": "object",
"properties": {
"row": {
"type": "number"
},
"date": {
"type": "string"
},
"description": {
"type": "string"
},
"amount": {
"type": "number"
},
"balance": {
"type": [
"number",
"null"
]
},
"category": {
"type": "string"
}
},
"required": [
"row",
"date",
"description",
"amount",
"balance",
"category"
],
"additionalProperties": false
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"downloads": {
"type": "object",
"properties": {
"xlsx": {
"type": "string"
},
"csv": {
"type": "string"
},
"quickbooks_csv": {
"type": "string"
}
},
"required": [
"xlsx",
"csv",
"quickbooks_csv"
],
"additionalProperties": false
},
"note": {
"type": "string"
}
},
"required": [
"source",
"account",
"period",
"transactions",
"reconciliation",
"categories",
"months",
"preview",
"warnings",
"downloads",
"note"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}Community
Evidence