MCP Server: Use Your Bank Statements in Claude or ChatGPT

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_..."
      }
    }
  }
}

Example agent workflow

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."

AI Agentconvert_statementBankstatemently MCPStructured JSONAgent analysis

What is MCP?

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.


Quick start

ChatGPT (developer mode)

Add Bankstatemently as a custom MCP app in ChatGPT developer mode:

  1. In ChatGPT workspace settings, enable developer mode for custom MCP apps.
  2. Add a custom MCP app with this server URL: https://api.bankstatemently.com/mcp
  3. Sign in with your browser and approve the connection.

ChatGPT custom MCP apps are available where OpenAI developer mode is enabled for your plan and workspace.

Codex

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.

Claude Code

Install the plugin from our marketplace:

/plugin marketplace add bankstatemently/plugins
/plugin install bankstatemently-mcp@bankstatemently

Source: github.com/bankstatemently/plugins

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "bankstatemently": {
      "url": "https://api.bankstatemently.com/mcp",
      "headers": {
        "X-API-Key": "bsk_live_..."
      }
    }
  }
}

Cursor

Add to .cursor/mcp.json in your project root:

{
  "mcpServers": {
    "bankstatemently": {
      "url": "https://api.bankstatemently.com/mcp",
      "headers": {
        "X-API-Key": "bsk_live_..."
      }
    }
  }
}

VS Code (GitHub Copilot)

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_..."
      }
    }
  }
}

Custom agents

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).


Connect from ChatGPT / hosted agents (OAuth)

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.

ChatGPT custom MCP app

  1. Open ChatGPT workspace settings and enable developer mode for custom MCP apps.
  2. Add a custom MCP app with this server URL: https://api.bankstatemently.com/mcp
  3. ChatGPT opens a browser sign-in flow. Approve the connection to start using the MCP tools.

claude.ai custom connector

  1. In claude.ai's settings, add a custom connector with this server URL: https://api.bankstatemently.com/mcp
  2. Claude opens a browser window for sign-in and consent — approve the connection.
  3. You're connected. No key, secret, or config file to manage.
  4. Try it free — ask Claude to convert https://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.

Claude Code (remote OAuth)

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

Authentication

The MCP server supports two authentication modes — use whichever fits your client:

  • OAuth (interactive, hosted agents) — sign in with your browser from ChatGPT custom MCP apps, claude.ai, Codex, or Claude Code's remote MCP flow. No key to generate or store. See Connect from ChatGPT / hosted agents above.
  • API key (genuinely headless — CI, scripts, custom clients) — generate one from your Developer Dashboard and pass it via the 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.


Available tools

ToolPurposeType
convert_statementConvert bank statement PDFwrite
request_uploadPush a conversation attachment before convertingwrite
get_statementRetrieve converted resultsread
categorize_statementAI transaction categorizationwrite
list_statementsBrowse parsed statementsread
get_creditsCheck credit balanceread
rate_statementReport conversion qualitywrite
list_transactionsQuery your converted transactionsread
aggregateCompute a metric over your transactionsread
group_byGroup your transactions by a dimensionread
top_nRank groups of your transactionsread
compareCompare two filtered groups side by sideread
time_seriesCompute a trend over timeread
list_transfersDetect money moved between your accountsread
evaluate_benchmarkScore parser accuracyread

Resources

MCP resources provide read-only data that agents can discover and fetch. These are available alongside the tools above.

URIDescription
benchmark://catalogBrowse 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 handling

ErrorCauseResolution
Authentication requiredMissing or invalid API keyAdd X-API-Key header with a valid key
Key revoked / expiredAPI key has been revoked or expiredGenerate a new key in the developer dashboard
Page limit exceededPDF exceeds your plan's page limitSplit into smaller PDFs or upgrade plan
Insufficient creditsNot enough credits for page countPurchase credits or upgrade plan
Invalid PDFFile is not a valid PDFEnsure file starts with %PDF- header
Wrong passwordPDF is encrypted and password is missing or incorrectPass the correct password parameter
Document not foundNo document with that ID existsCheck the document ID from convert_statement or list_statements
Rate limit exceededToo many requests (30 req/min for MCP)Wait and retry after the reset window
Processing timeoutProcessing exceeded 90 secondsUse get_statement to poll for results

Frequently asked questions

What is the Model Context Protocol (MCP)?

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.

How does pricing work with MCP?

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.

Which AI tools support MCP?

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.

Can I use both the REST API and MCP server?

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.

What output formats are supported?

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.

Is the MCP server stateless?

Yes. Each request is independent — no session management needed. Your API key provides identity and authorization on every call.

What is the benchmark evaluation tool?

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.

Should I use OAuth or an API key?

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.