mcpbeat Sign in

Bankstatemently MCP Server

by bankstatemently Your server? Claim it
answering

Bankstatemently is answering right now. Last checked 15 min ago. It exposes 16 tools. Last commit 17 Sep 2026.

Convert PDF bank statements into structured transactions, accounts, and balances.

Uptime history 48 days of history · worst day 99%
48 days agonow
100.0%
Uptime 24h
91 of 91 checks
16
Tools
read from the server
559 ms
Response time
average over 24h
1
Stars
last commit 17 Sep 2026

What changed 58

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 12 August 2026. No other catalogue keeps this.

17 Sep a tool changed version
15 Sep a tool changed version
10 Sep a tool description was rewritten rate_statement
4 Sep 16 tools changed the parameters they ask for aggregate, categorize_statement, compare and 13 more
27 Aug 3 tool descriptions were rewritten aggregate, get_credits, list_transactions
27 Aug a tool appeared dismiss_statement
27 Aug a tool changed version
24 Aug a tool changed the parameters it asks for list_transactions
21 Aug 14 tools changed the parameters they ask for aggregate, categorize_statement, compare and 11 more
17 Aug 5 tool descriptions were rewritten convert_statement, get_credits, list_transactions and 2 more
and 14 more, back to 12 August 2026

Nothing serious here today

Today is the operative word: we check Bankstatemently every 15 minutes and re-read its code on every release. Watch it and you find out the day that stops being true.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 15 min ago.

run in your terminal
claude mcp add bankstatemently-mcp --transport http https://api.bankstatemently.com/mcp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "bankstatemently-mcp": {
      "url": "https://api.bankstatemently.com/mcp"
    }
  }
}
~/.codex/config.toml
[mcp_servers.bankstatemently-mcp]
url = "https://api.bankstatemently.com/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "bankstatemently-mcp": {
      "url": "https://api.bankstatemently.com/mcp"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "bankstatemently-mcp": {
      "url": "https://api.bankstatemently.com/mcp"
    }
  }
}

Available tools 16

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

aggregate
aggregate
Compute a single metric (sum/average/count/max/min) over a filtered set of transactions across your converted statements. Results are per-currency — never sum across currencies yourself. Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range. For "how many credits do I have" / processing quota / remaining pages, use get_credits instead — that is not a transaction.
categorize
categorize_statement
Run AI transaction categorization on a previously processed document, then return its category mappings. Returns cached categories with no charge if this document was already categorized. Consumes credits (pooled per page, same rate as the categorize toggle on the website) the first time — free on every re-fetch after. Every response includes a "summary" field: use it as the single source of truth for what happened.
compare
compare
Side-by-side metric comparison for two filtered groups of transactions (e.g. one category vs another, one month vs another). Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range.
convert
convert_statement
Convert a bank statement PDF into structured data or a spreadsheet. When the user attaches a PDF in the conversation, it arrives automatically as pdf_file — never encode it yourself. Otherwise, pass pdf_url for a public HTTPS link. If your host has no way to reference the attached file at all (no pdf_file/pdf_url equivalent), call request_upload first and pass its upload_id here instead. The base64 pdf parameter is a last resort only, for a caller with no other way to reference the file. To convert several statements in one call, pass upload_ids (the array from a single request_upload call made with count set) instead of pdf/pdf_url/pdf_file/upload_id — mutually exclusive with those four. This batch form only ADMITS each file (queues it, or reports an already-completed duplicate) and returns immediately with a compact per-file status list plus a summary — it never waits for conversion, so call get_statement per document_id once ready rather than expecting inline results here. Returns accounts, transactions, and metadata. output_format "json" (default) returns the data inline, renderable in chat. The other formats (csv, xlsx, qbo, xero) return a time-limited download link instead: present it as a normal link. Every response includes a "summary" field: use it as the single source of truth for what happened. If the conversation is not in English, translate it faithfully into the conversation language; never add details it doesn't contain. Never echo raw status values (e.g. "completed") or field names. Consumes credits (1 per page). Page limit depends on your plan.
credits
get_credits
Your remaining Bankstatemently credits — the processing quota, NOT credit/debit transactions. Use for: how many credits do I have, remaining pages, plan limits, quota, how many pages can I upload. 1 credit = 1 page of bank statement processing. Also reports your plan's operational limits (max pages per upload, max upload size, daily spend cap) so you can size a multi-file batch correctly before starting it.
dismiss
dismiss_statement
Hide a failed, rejected, or cancelled document from future list_statements results. Use this only when the user asks to clear a terminal failed/rejected/cancelled conversion from their history. This is not a delete: it marks the document dismissed and leaves stored data/artifacts untouched.
evaluate
evaluate_benchmark
Score parsed bank statement transactions against the Bankstatemently benchmark ground truth. Accepts a statement_id (e.g. "bsb-001") or content_hash, plus your parsed transactions. Returns extraction accuracy, integrity score, and an overall score. Only statements marked published: true in the catalog can be evaluated — held-out statements return an error. transactions[].originalData is optional but strongly recommended: fetch it via get_statement with data_mode: "original" and pass it through verbatim — an absent originalData scores that transaction's raw-fidelity (parsed) dimension 0; never fabricate a value. Free to use — no credits consumed. Read the benchmark://catalog resource first to see available statements and their published status.
group
group_by
Group transactions by a dimension (month/category/merchant/account/currency) and apply a metric to each group. Results are per-currency. Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range.
rate
rate_statement
Report how well a previously converted bank statement was parsed: submit a 1-5 rating, optionally with structured feedback (only accepted when the rating is 3 or below) and use-case tags. Calling this again for the same document updates your existing rating without clearing feedback already submitted for it. Returns the stored rating state in the response — there is no separate tool to read your own rating back. Every response includes a "summary" field: use it as the single source of truth for what happened.
request
request_upload
Mint a single-use upload URL for pushing a conversation-attached PDF to Bankstatemently before converting it. Use this ONLY when you have no other way to reference the attached file (no pdf_file/pdf_url equivalent for this host) — e.g. a code-execution sandbox that can see the file on disk but has no URL for it. Playbook: (1) check your sandbox's uploads/attachments directory first — if the file isn't there yet, the mount can lag behind the conversation; ask the user to re-attach or wait a moment and check again before calling this tool. (2) Call request_upload to get upload_url and upload_id. (3) PUT the raw PDF bytes to upload_url with header Content-Type: application/pdf, e.g.: `curl -X PUT "<upload_url>" -H "Content-Type: application/pdf" --data-binary @<path-to-file>`. (4) Once the PUT succeeds, call convert_statement with upload_id set to the same value — never pdf/pdf_url/pdf_file for this flow. The URL and token are single-use and expire quickly; call request_upload again for a fresh one if the PUT fails partway through — never retry a failed PUT against the same URL. If the PUT fails with a network error or a "host not allowed"-style denial, the sandbox is likely blocking outbound requests to api.bankstatemently.com — tell the user to add api.bankstatemently.com to their host's code-execution allowed-domains setting (on claude.ai: Settings → Capabilities → Code execution) and retry. To convert several statements at once, pass count (1-100) instead of calling this tool once per file: the response returns "uploads", an array of that many { upload_id, upload_url } pairs — PUT each file to its own upload_url, then make ONE convert_statement call with upload_ids set to every upload_id. Free to use — no credits consumed (conversion itself still costs credits, same as any other convert_statement call).
statement
get_statement
Fetch the full converted data for a previously processed document. Use this after convert_statement returns a "processing" status, or to re-fetch results. output_format "json" (default) returns the data inline, renderable in chat. The other formats (csv, xlsx, qbo, xero) return a time-limited download link instead: present it as a normal link. data_mode selects which projection of the data you get: omit it for each output_format's existing default behavior. "normalized" is the cleaned, interpreted view; "original" includes each transaction's raw column values exactly as printed on the source PDF (originalData); "enhanced" is a reformatted view of the original columns (csv/xlsx only for now). Fetch data_mode: "original" when you plan to submit results to evaluate_benchmark — pass its originalData through verbatim; an absent originalData scores that benchmark's raw-fidelity dimension 0 for this document. Every response includes a "summary" field: use it as the single source of truth for what happened. If the conversation is not in English, translate it faithfully into the conversation language; never add details it doesn't contain. Never echo raw status values (e.g. "completed") or field names.
statements
list_statements
Browse your previously converted bank statements with pagination and optional status filter.
time
time_series
Compute a time series by grouping transactions into week or month buckets and applying a metric — useful for trends. Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range.
top
top_n
Return the top N groups ranked by metric (descending), per-currency for monetary metrics. Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range.
transactions
list_transactions
A transaction is a single line as printed on one account's statement — one side of any movement. Return a filtered list of transactions across your converted statements, capped at 50 rows. Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range. Every response names the scope it actually evaluated (document count + covered date range) and each returned row carries its source document's content_hash so you can cite it. For "how many credits do I have" / processing quota / remaining pages, use get_credits instead — that is not a transaction.
transfers
list_transfers
Match transfers between your own accounts. A transfer is TWO transactions — a debit leaving one of your accounts and a credit arriving in another — matched as two sides of the same movement (amount and date aligned); account-level successions (an account closing into a successor) are matched too. A payment to an outside party is not a transfer here: only movements with both sides visible in your statements are matched. THE way to answer any "was money moved between my accounts" / "did I transfer X" question — never try to answer a money-moved-between-accounts question with list_transactions + arithmetic; always call this tool instead. Scope defaults to all your completed statements; pass "scope" to narrow to specific accounts/products and/or a date range. Every response reports the match window (in days) it used, even when no transfers are found — a lack of matches is never silent about how hard it looked. To find large movements with NO matching counterpart in your other accounts — e.g. "trace transfers over $10,000; which ones leave without a known destination?" — pass "amountMin": reconciled pairs and successions are filtered to that floor, and the response gains an "unmatched" bucket of large movements (debits leaving, or unexplained credits arriving) with no matching pair, candidate, or succession. Omit amountMin for the ordinary reconciled-pairs answer.

Endpoints

URLTransportStateLatencyChecked
https://api.bankstatemently.com/mcp streamable-http answering 635 ms 15 min ago

Alternatives to Bankstatemently

same job, measured the same way
C
Bank Statement Sheet
by bankstatementsheet

Convert PDF bank statements into transactions that arrive with a pass/fail reconciliation verdict.

46 installs/wk local only
Document to JSON – PDF Invoice/Statement/Contract Parser
by fashionmascherine-svg

Turn any PDF into structured JSON via AI + OCR: invoices, bank statements, contracts.

answering
MainBook Bank Statement Converter
by mainbook

Convert PDF bank statements to checked Excel, CSV or JSON with balance validation.

253 installs/wk 4 tools answering
Docling MCP
by docling-project

Convert PDFs and other documents to structured formats via Docling, for AI applications.

5 578 installs/wk local only
Brainiall Documents
by brainiall

High-fidelity PDF to structured Markdown conversion and document field extraction.

3 tools answering
Extend
by extend

Turn documents into structured data: parse, extract, classify, split, and fill PDF forms.

answering
Fibalo
by b77

Query and add to your Fibalo bookkeeping: documents, bank transactions, suppliers, access.

answering
Content
by latentnoise

Turn URLs, files and text into media, transcripts, summaries, translations and PDF.

1 076 installs/wk local only

Bankstatemently — questions

Answers built from our own checks of this server.

What can Bankstatemently do?
It exposes 16 tools, read directly from the server on our last check. Among them: aggregate, categorize_statement, compare, convert_statement, dismiss_statement, evaluate_benchmark and 10 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
Is Bankstatemently working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 559 ms. The bar chart above shows every period we have measured.
How do I connect Bankstatemently?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does Bankstatemently need an API key?
No. Bankstatemently completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 16 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is Bankstatemently?
It answers our handshake in 559 ms on average, which is faster than 24% of all working MCP servers we measure. That is on the slow side — worth knowing if the tool sits inside an interactive loop. The comparison comes from our own checks across the whole registry, every 15 minutes.
Is Bankstatemently open source?
Yes — it is published under the MIT licence and 1 stars on GitHub. The source link is on this page, so you can read exactly what it does with your data before you connect it.