Bankstatemently's MCP server lets AI agents — including accounting and bookkeeping agents — convert bank statements into structured transactions, account metadata, and balances, no custom integration required.
Connect ChatGPT, Codex, Claude Desktop, Cursor, VS Code, or any custom agent through the Model Context Protocol. Upload a PDF, get structured JSON back. This is the same structured data layer described on our financial memory for AI agents page.
claude_desktop_config.json
{
"mcpServers": {
"bankstatemently": {
"url": "https://api.bankstatemently.com/mcp",
"headers": {
"X-API-Key": "bsk_live_..."
}
}
}
}You
"Analyze my expenses from this bank statement"
Agent
Calls convert_statement with the PDF
→ 47 transactions extracted → DBS Bank, SGD, Jan 2025 → Confidence: 97%
Agent
"Your top spending categories in January: Transport ($234), Food ($412), Subscriptions ($89). Total outflow: $2,847 across 47 transactions."
The Model Context Protocol (MCP) is an open standard that lets AI assistants connect to external tools and data sources. Instead of copy-pasting bank statement data or writing custom integrations, your agent calls Bankstatemently's tools directly — parse a PDF, get transactions back, all in one step.
Bankstatemently supports 78+ bank statement formats across 42+ countries, with dual-engine extraction (rule-based + vision LLM) for maximum accuracy.
Add Bankstatemently as a custom MCP app in ChatGPT developer mode:
https://api.bankstatemently.com/mcpChatGPT custom MCP apps are available where OpenAI developer mode is enabled for your plan and workspace.
Codex has native OAuth support. This one command detects our server's discovery metadata and opens your browser to sign in — no key is ever stored:
codex mcp add bankstatemently --url https://api.bankstatemently.com/mcp
For headless or CI setups where a browser sign-in isn't possible, use an API key via the mcp-remote bridge instead:
# in the shell that launches Codex, before it starts:
export BANKSTATEMENTLY_API_KEY=bsk_live_...
codex mcp add bankstatemently -- npx -y mcp-remote@latest https://api.bankstatemently.com/mcp --header "X-API-Key: ${BANKSTATEMENTLY_API_KEY}"Codex doesn't yet surface plugin-declared MCP servers into sessions, so the Bankstatemently Claude Code plugin's bundled skill isn't available in Codex today — use the commands above instead.
Credential managers & sandboxed clients: never fetch a secret from Keychain, 1Password, or another credential manager inside the MCP server command itself — Codex runs that command sandboxed at tool discovery, so a credential-manager lookup dies silently and the server's tools never appear. Export the key in the shell that launches Codex instead. Also note that mcp-remote logs its resolved header values to stderr, so a wrapper-resolved key can end up in your client logs.
Install the plugin from our marketplace:
/plugin marketplace add bankstatemently/plugins /plugin install bankstatemently-mcp@bankstatemently
Add to your claude_desktop_config.json:
{
"mcpServers": {
"bankstatemently": {
"url": "https://api.bankstatemently.com/mcp",
"headers": {
"X-API-Key": "bsk_live_..."
}
}
}
}Add to .cursor/mcp.json in your project root:
{
"mcpServers": {
"bankstatemently": {
"url": "https://api.bankstatemently.com/mcp",
"headers": {
"X-API-Key": "bsk_live_..."
}
}
}
}Add to .vscode/mcp.json in your project root:
{
"servers": {
"bankstatemently": {
"type": "http",
"url": "https://api.bankstatemently.com/mcp",
"headers": {
"X-API-Key": "bsk_live_..."
}
}
}
}Send JSON-RPC messages via POST https://api.bankstatemently.com/mcp with your API key in the X-API-Key header. The server implements the MCP Streamable HTTP transport (stateless mode).
For ChatGPT, claude.ai, and other hosted agents, skip API keys entirely — sign in with your browser once and you're connected. No client secret or key is ever needed for this flow.
https://api.bankstatemently.com/mcphttps://api.bankstatemently.com/mcphttps://bankstatemently.com/benchmark/statements/bsb-004-statement.pdf, our published benchmark statement. Benchmark conversions never consume credits.Converting your own file: if the file lives in a code-execution sandbox and the request_upload PUT fails with a network error or a "host not allowed"-style denial, the sandbox is likely blocking outbound requests — add api.bankstatemently.com to the host's code-execution allowed-domains setting (Settings → Capabilities → Code execution) and retry.
Add the server as a remote HTTP connection, then authenticate interactively:
claude mcp add --transport http bankstatemently https://api.bankstatemently.com/mcp # then inside Claude Code: /mcp # select bankstatemently → Authenticate
The MCP server supports two authentication modes — use whichever fits your client:
X-API-Key header in your MCP client configuration. This is a permanent lane, not a deprecated fallback.Pricing: 1 credit = 1 page of bank statement processed. Credits are shared across MCP and REST API usage, and across both auth modes. Check your balance anytime with the get_credits tool.
| Tool | Purpose | Type |
|---|---|---|
| convert_statement | Convert bank statement PDF | write |
| request_upload | Push a conversation attachment before converting | write |
| get_statement | Retrieve converted results | read |
| categorize_statement | AI transaction categorization | write |
| list_statements | Browse parsed statements | read |
| get_credits | Check credit balance | read |
| rate_statement | Report conversion quality | write |
| list_transactions | Query your converted transactions | read |
| aggregate | Compute a metric over your transactions | read |
| group_by | Group your transactions by a dimension | read |
| top_n | Rank groups of your transactions | read |
| compare | Compare two filtered groups side by side | read |
| time_series | Compute a trend over time | read |
| list_transfers | Detect money moved between your accounts | read |
| evaluate_benchmark | Score parser accuracy | read |
MCP resources provide read-only data that agents can discover and fetch. These are available alongside the tools above.
| URI | Description |
|---|---|
| benchmark://catalog | Browse all 15 benchmark statements with difficulty, country, currency, and parsing challenges |
| benchmark://statements/{id} | Metadata for a specific statement — content hash, column layout, date/number formats, and description |
| Error | Cause | Resolution |
|---|---|---|
| Authentication required | Missing or invalid API key | Add X-API-Key header with a valid key |
| Key revoked / expired | API key has been revoked or expired | Generate a new key in the developer dashboard |
| Page limit exceeded | PDF exceeds your plan's page limit | Split into smaller PDFs or upgrade plan |
| Insufficient credits | Not enough credits for page count | Purchase credits or upgrade plan |
| Invalid PDF | File is not a valid PDF | Ensure file starts with %PDF- header |
| Wrong password | PDF is encrypted and password is missing or incorrect | Pass the correct password parameter |
| Document not found | No document with that ID exists | Check the document ID from convert_statement or list_statements |
| Rate limit exceeded | Too many requests (30 req/min for MCP) | Wait and retry after the reset window |
| Processing timeout | Processing exceeded 90 seconds | Use get_statement to poll for results |
MCP is an open standard by Anthropic that lets AI assistants connect to external tools and data sources. Think of it as a universal plug for AI — one protocol, many tools. Any MCP-compatible client can discover and use Bankstatemently's bank statement parsing tools automatically.
Same as the REST API — 1 credit per page of bank statement processed. Check your balance anytime with the get_credits tool. Credits are shared across MCP and REST API usage.
ChatGPT custom MCP apps, Codex, Claude Code (via the bankstatemently/plugins plugin), Claude Desktop, Cursor, VS Code (GitHub Copilot), Windsurf, and any custom agent built with the MCP SDK. The ecosystem is growing rapidly as more tools adopt the standard.
Yes. They share the same API key and credit balance. Use whichever fits your workflow — the REST API for programmatic integrations, MCP for AI agent workflows.
JSON (default), CSV, XLSX, QuickBooks (QBO), and Xero. CSV and XLSX open directly in Google Sheets. Specify the format via the output_format parameter on convert_statement or get_statement.
Yes. Each request is independent — no session management needed. Your API key provides identity and authorization on every call.
evaluate_benchmark lets you score your parser against the Bankstatemently open benchmark for bank statement parsing — 15 synthetic statements with known ground truth. It's free (no credits consumed) and returns extraction accuracy, integrity scores, and per-field breakdowns. Read the benchmark://catalog resource to see available statements.
Use OAuth for interactive, hosted agents like ChatGPT custom MCP apps, claude.ai custom connectors, Codex, and Claude Code's remote MCP flow, where a human can complete a one-time browser sign-in and no secret ever touches your config. Use an API key (X-API-Key header) for genuinely headless setups: CI pipelines, scripts, or any client that can't open a browser to authenticate. Both modes share the same credit balance and rate limits.