Koskamo

Tallyproof Statement Converter MCP

Converts bank and credit card statement PDFs or exports into clean, reconciled Excel or CSV transactions with running balance verification and suggested categories.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Tallyproof Statement Converter MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Zovo
MCP endpoint (Streamable HTTP)
https://statement-converter.zovo.one/mcp
Vendor documentation

What you can do with it

  • Convert bank statement PDF to Excel
  • Reconcile statement balance to the cent
  • Turn credit card statement into QuickBooks CSV

Source and maintenance

Community listingRegistry 1.0.1

Protocol and capabilities

Server
statement-converter 1.0.2
MCP protocol
2025-06-18
Tools
2 advertised
Resources
1 advertised
Resource templates
1 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Converts bank and credit card statements to spreadsheets and proves opening + transactions = closing. Use convert_bank_statement when the user attaches a statement file; use summarize_transactions when they paste or list transactions. Report the reconciliation status first.

Tools

2 advertised

convert_bank_statement — Convert bank statement
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

convert_bank_statement input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "file"
  ],
  "properties": {
    "file": {
      "type": "object",
      "required": [
        "download_url",
        "file_id"
      ],
      "properties": {
        "file_id": {
          "type": "string",
          "description": "ChatGPT file id, e.g. file_abc123."
        },
        "file_name": {
          "type": "string",
          "description": "Original file name if known, e.g. statement.pdf."
        },
        "mime_type": {
          "type": "string",
          "description": "Media type if known, e.g. application/pdf."
        },
        "download_url": {
          "type": "string",
          "description": "Temporary download link for the file, supplied by ChatGPT."
        }
      },
      "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."
    },
    "date_order": {
      "enum": [
        "MDY",
        "DMY"
      ],
      "type": "string",
      "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."
    },
    "flip_signs": {
      "type": "boolean",
      "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."
    },
    "account_type": {
      "enum": [
        "auto",
        "bank",
        "credit_card"
      ],
      "type": "string",
      "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."
    },
    "statement_year": {
      "type": "integer",
      "maximum": 2100,
      "minimum": 1990,
      "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)."
    },
    "closing_balance": {
      "type": "number",
      "maximum": 10000000000,
      "minimum": -10000000000,
      "description": "Closing (ending or new) balance in dollars, e.g. 5034.47. Used with opening_balance to prove the total to the cent."
    },
    "opening_balance": {
      "type": "number",
      "maximum": 10000000000,
      "minimum": -10000000000,
      "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."
    }
  }
}
convert_bank_statement output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "source",
    "account",
    "period",
    "transactions",
    "reconciliation",
    "categories",
    "months",
    "preview",
    "warnings",
    "downloads",
    "note"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "months": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "month",
          "money_in",
          "money_out",
          "net",
          "count"
        ],
        "properties": {
          "net": {
            "type": "number"
          },
          "count": {
            "type": "number"
          },
          "month": {
            "type": "string"
          },
          "money_in": {
            "type": "number"
          },
          "money_out": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "period": {
      "type": "object",
      "required": [
        "start",
        "end"
      ],
      "properties": {
        "end": {
          "type": [
            "string",
            "null"
          ]
        },
        "start": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "additionalProperties": false
    },
    "source": {
      "type": "object",
      "required": [
        "file",
        "type",
        "pages",
        "layout"
      ],
      "properties": {
        "file": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "pages": {
          "type": "number"
        },
        "layout": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "account": {
      "type": "object",
      "required": [
        "type",
        "number"
      ],
      "properties": {
        "type": {
          "type": "string"
        },
        "number": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "additionalProperties": false
    },
    "preview": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "row",
          "date",
          "description",
          "amount",
          "balance",
          "category"
        ],
        "properties": {
          "row": {
            "type": "number"
          },
          "date": {
            "type": "string"
          },
          "amount": {
            "type": "number"
          },
          "balance": {
            "type": [
              "number",
              "null"
            ]
          },
          "category": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "downloads": {
      "type": "object",
      "required": [
        "xlsx",
        "csv",
        "quickbooks_csv"
      ],
      "properties": {
        "csv": {
          "type": "string"
        },
        "xlsx": {
          "type": "string"
        },
        "quickbooks_csv": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "categories": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "category",
          "money_in",
          "money_out",
          "count"
        ],
        "properties": {
          "count": {
            "type": "number"
          },
          "category": {
            "type": "string"
          },
          "money_in": {
            "type": "number"
          },
          "money_out": {
            "type": "number"
          }
        },
        "additionalProperties": false
      },
      "description": "Suggested categories from keyword rules; review before filing."
    },
    "transactions": {
      "type": "number"
    },
    "reconciliation": {
      "type": "object",
      "required": [
        "status",
        "opening_balance",
        "closing_balance",
        "computed_closing",
        "difference",
        "money_in",
        "money_out",
        "net",
        "formula",
        "balances_from",
        "running_balance_breaks",
        "suspects",
        "checks"
      ],
      "properties": {
        "net": {
          "type": "number"
        },
        "checks": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "status": {
          "enum": [
            "PASS",
            "DIFFERENCE",
            "UNVERIFIED"
          ],
          "type": "string"
        },
        "formula": {
          "type": "string"
        },
        "money_in": {
          "type": "number"
        },
        "suspects": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "row",
              "date",
              "description",
              "amount",
              "reason"
            ],
            "properties": {
              "row": {
                "type": "number"
              },
              "date": {
                "type": "string"
              },
              "amount": {
                "type": "number"
              },
              "reason": {
                "type": "string"
              },
              "description": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "money_out": {
          "type": "number"
        },
        "difference": {
          "type": [
            "number",
            "null"
          ]
        },
        "balances_from": {
          "type": "string"
        },
        "closing_balance": {
          "type": [
            "number",
            "null"
          ]
        },
        "opening_balance": {
          "type": [
            "number",
            "null"
          ]
        },
        "computed_closing": {
          "type": [
            "number",
            "null"
          ]
        },
        "running_balance_breaks": {
          "type": "number"
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
convert_bank_statement annotations
{
  "title": "Convert bank statement",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
summarize_transactions — Summarize transactions
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

summarize_transactions input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "transactions"
  ],
  "properties": {
    "account_type": {
      "enum": [
        "auto",
        "bank",
        "credit_card"
      ],
      "type": "string",
      "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."
    },
    "transactions": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "date",
          "description",
          "amount"
        ],
        "properties": {
          "date": {
            "type": "string",
            "maxLength": 40,
            "description": "Transaction date, e.g. 2026-09-02, 09/02/2026, or 09/02 with statement_year."
          },
          "amount": {
            "type": "number",
            "maximum": 1000000000,
            "minimum": -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": {
            "type": "number",
            "maximum": 10000000000,
            "minimum": -10000000000,
            "description": "Running balance after this row if the statement shows one, e.g. 4078.45."
          },
          "description": {
            "type": "string",
            "maxLength": 300,
            "description": "Payee or description as printed, e.g. PAYROLL DEPOSIT ACME INC."
          }
        }
      },
      "maxItems": 5000,
      "minItems": 1,
      "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}]."
    },
    "statement_year": {
      "type": "integer",
      "maximum": 2100,
      "minimum": 1990,
      "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)."
    },
    "closing_balance": {
      "type": "number",
      "maximum": 10000000000,
      "minimum": -10000000000,
      "description": "Closing (ending or new) balance in dollars, e.g. 5034.47. Used with opening_balance to prove the total to the cent."
    },
    "opening_balance": {
      "type": "number",
      "maximum": 10000000000,
      "minimum": -10000000000,
      "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."
    }
  }
}
summarize_transactions output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "source",
    "account",
    "period",
    "transactions",
    "reconciliation",
    "categories",
    "months",
    "preview",
    "warnings",
    "downloads",
    "note"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "months": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "month",
          "money_in",
          "money_out",
          "net",
          "count"
        ],
        "properties": {
          "net": {
            "type": "number"
          },
          "count": {
            "type": "number"
          },
          "month": {
            "type": "string"
          },
          "money_in": {
            "type": "number"
          },
          "money_out": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "period": {
      "type": "object",
      "required": [
        "start",
        "end"
      ],
      "properties": {
        "end": {
          "type": [
            "string",
            "null"
          ]
        },
        "start": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "additionalProperties": false
    },
    "source": {
      "type": "object",
      "required": [
        "file",
        "type",
        "pages",
        "layout"
      ],
      "properties": {
        "file": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "pages": {
          "type": "number"
        },
        "layout": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "account": {
      "type": "object",
      "required": [
        "type",
        "number"
      ],
      "properties": {
        "type": {
          "type": "string"
        },
        "number": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "additionalProperties": false
    },
    "preview": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "row",
          "date",
          "description",
          "amount",
          "balance",
          "category"
        ],
        "properties": {
          "row": {
            "type": "number"
          },
          "date": {
            "type": "string"
          },
          "amount": {
            "type": "number"
          },
          "balance": {
            "type": [
              "number",
              "null"
            ]
          },
          "category": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "downloads": {
      "type": "object",
      "required": [
        "xlsx",
        "csv",
        "quickbooks_csv"
      ],
      "properties": {
        "csv": {
          "type": "string"
        },
        "xlsx": {
          "type": "string"
        },
        "quickbooks_csv": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "categories": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "category",
          "money_in",
          "money_out",
          "count"
        ],
        "properties": {
          "count": {
            "type": "number"
          },
          "category": {
            "type": "string"
          },
          "money_in": {
            "type": "number"
          },
          "money_out": {
            "type": "number"
          }
        },
        "additionalProperties": false
      },
      "description": "Suggested categories from keyword rules; review before filing."
    },
    "transactions": {
      "type": "number"
    },
    "reconciliation": {
      "type": "object",
      "required": [
        "status",
        "opening_balance",
        "closing_balance",
        "computed_closing",
        "difference",
        "money_in",
        "money_out",
        "net",
        "formula",
        "balances_from",
        "running_balance_breaks",
        "suspects",
        "checks"
      ],
      "properties": {
        "net": {
          "type": "number"
        },
        "checks": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "status": {
          "enum": [
            "PASS",
            "DIFFERENCE",
            "UNVERIFIED"
          ],
          "type": "string"
        },
        "formula": {
          "type": "string"
        },
        "money_in": {
          "type": "number"
        },
        "suspects": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "row",
              "date",
              "description",
              "amount",
              "reason"
            ],
            "properties": {
              "row": {
                "type": "number"
              },
              "date": {
                "type": "string"
              },
              "amount": {
                "type": "number"
              },
              "reason": {
                "type": "string"
              },
              "description": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "money_out": {
          "type": "number"
        },
        "difference": {
          "type": [
            "number",
            "null"
          ]
        },
        "balances_from": {
          "type": "string"
        },
        "closing_balance": {
          "type": [
            "number",
            "null"
          ]
        },
        "opening_balance": {
          "type": [
            "number",
            "null"
          ]
        },
        "computed_closing": {
          "type": [
            "number",
            "null"
          ]
        },
        "running_balance_breaks": {
          "type": "number"
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
summarize_transactions annotations
{
  "title": "Summarize transactions",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

statement-converter-widget — Tallyproof Statement Converter view

Advertised by the server during the last successful anonymous check.

Interactive view for Tallyproof Statement Converter.

statement-converter-widget URI
ui://widget/statement-converter-v1-1.0.2-d41085b12ef98ea98972b97685cf935fbac5f9f2375053f183c5bc07020ef29c.html

MIME type: text/html;profile=mcp-app

statement-converter-widget-legacy — Tallyproof Statement Converter view (previous versions)

Advertised by the server during the last successful anonymous check.

statement-converter-widget-legacy URI template
ui://widget/statement-converter-{version}.html

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
694 ms
95th percentile latency
694 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 694 ms · metadata changed · 2 tool(s), 1 resource(s), 1 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http tallyproof-statement-converter-mcp https://statement-converter.zovo.one/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add tallyproof-statement-converter-mcp --url https://statement-converter.zovo.one/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable tallyproof-statement-converter-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "tallyproof-statement-converter-mcp": {
      "url": "https://statement-converter.zovo.one/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "tallyproof-statement-converter-mcp": {
      "type": "streamableHttp",
      "url": "https://statement-converter.zovo.one/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start tallyproof-statement-converter-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "tallyproof-statement-converter-mcp": {
      "type": "http",
      "url": "https://statement-converter.zovo.one/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http tallyproof-statement-converter-mcp https://statement-converter.zovo.one/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "tallyproof-statement-converter-mcp": {
      "url": "https://statement-converter.zovo.one/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "tallyproof-statement-converter-mcp": {
      "serverUrl": "https://statement-converter.zovo.one/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Tallyproof Statement Converter MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.