ZBS Index What actually exists in applied AI, with the source next to it

mcp server

Bankstatemently

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

Description as published by the maintainer. Source

  • version 0.4.0
  • active
  • document understanding

active — Most recent push to the repository was 2026-08-06. Dashed tags are derived by ZBS Index from the published description, not stated by the maintainer.

What this server can do

15 functions, named and described by the server itself. Parameter names are shown because they say more about what a function does than its name usually does.

aggregate(scope, filter, metric)
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. Required: metric.
categorize_statement(document_id)
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. Required: document_id.
compare(scope, metric, filterA, filterB)
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. Required: filterA, filterB, metric.
convert_statement(pdf, pdf_url, password, pdf_file, upload_id, output_format)
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. 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.
evaluate_benchmark(accounts, content_hash, statement_id, transactions)
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. Required: transactions.
get_credits
Check your current credit balance. 1 credit = 1 page of bank statement processing.
get_statement(limit, offset, data_mode, document_id, output_format)
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. Required: document_id.
group_by(scope, filter, metric, dimension)
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. Required: dimension, metric.
list_statements(limit, offset, status)
Browse your previously converted bank statements with pagination and optional status filter.
list_transactions(limit, scope, filter)
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.
list_transfers(scope, amountMin)
THE way to answer any "was money moved between my accounts" / "did I transfer X" question — matches cross-account debit/credit pairs and account-level successions within the current scope. 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.
rate_statement(rating, feedback, use_case, document_id, export_format, use_case_other, feedback_categories)
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 and clears any previous feedback tied to 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. Required: document_id, rating.
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. Free to use — no credits consumed (conversion itself still costs credits, same as any other convert_statement call).
time_series(scope, bucket, filter, metric)
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. Required: bucket, metric.
top_n(n, scope, filter, metric, dimension)
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. Required: dimension, metric, n.

Last successful function declaration observed on . Source: https://api.bankstatemently.com/mcp. We list what the server declared; we do not call any of these functions.

Endpoint status observed on . Source: https://api.bankstatemently.com/mcp.

Signals

These are separate measurements of different things. They are deliberately not combined into one score, because a popularity number that mixes website traffic with saves and stars cannot be checked or acted on.

Signal Value What it measures Window Observed Source
GitHub stars 1 Number of GitHub accounts that bookmarked this repository since it was created. It is a bookmark count, not installs, not active users and not quality. cumulative, all time GitHub
Last commit 2026-08-06 Date of the most recent push to any branch. This is the strongest cheap indicator of whether the project is still maintained. point in time GitHub
Open issues 0 Open issues plus open pull requests, as GitHub counts them together. A high number can mean an active project or an abandoned one. as of fetch GitHub
Latest published version 0.4.0 Latest version string the maintainer published to the registry. as of fetch Model Context Protocol
Registry record last updated 2026-07-31 When the registry record was last updated by its maintainer. point in time Model Context Protocol
License MIT Licence GitHub detected in the repository. Detection can be wrong; the LICENSE file is authoritative. as of fetch GitHub
First listed in the MCP Registry 2026-07-31 Date this server was first published to the official MCP Registry. Not a usage or quality measure. point in time Model Context Protocol
repository status active The repository exists on GitHub and is not archived. This says nothing about how recently it was worked on. as of fetch GitHub
mcp tools declared 15 tools Number of functions the server itself declared when asked to list them. This is what the server offers an agent, not a measure of how well any of them work. as of probe api.bankstatemently.com
mcp endpoint status ok The server listed 15 functions when asked. as of probe api.bankstatemently.com

Where to get it

Related, by what their authors tagged them

  • Macfax — last commit 2026-07-20, shares marketplace
    Used-Mac market: quality-gated listings with deep links, asking-price stats, trust checks, alerts.
  • io.github.archimedes-market/mcp-archimedes — last commit 2026-07-12, shares marketplace
    Discover verified deep-tech engineering bounties from any AI agent.
  • io.github.Avivcha/pody-mcp — last commit 2026-06-20, shares marketplace
    Israeli podcast & content marketplace MCP — 7 tools: studios, podcasts, glossary, industry report.
  • Intelligence Aeternum — last commit 2026-02-25, shares marketplace
    AI training dataset marketplace: 2M+ museum artworks with Golden Codex enrichment
  • io.github.elchin92/avito-mcp — last commit 2026-08-03, shares marketplace
    An AI agent that runs your Avito account — 148 tools for chats, listings, promotion, orders.
  • elisym — last commit 2026-07-30, shares marketplace
    AI agent discovery, marketplace, messaging, and payments on Nostr - no platform, no middleman
  • Fabric Marketplace — last commit 2026-04-28, shares marketplace
    Agent-native marketplace. Bootstrap, list inventory, search, negotiate, and trade via MCP.
  • WeJob — last commit 2026-07-16, shares plugin
    Read-only MCP server for public WeJob jobs, formations, and companies.
  • fcakyon-claude-codex-settings-adhd-output-style — last commit 2026-08-06, shares plugin
    This skill should be used when the user asks for "ADHD output", "fewer output tokens", "short numbered steps", "limited…
  • fcakyon-claude-codex-settings-agent-browser — last commit 2026-08-06, shares plugin
    Agent-browser usage guide. Read this before running any agent-browser commands. Covers the snapshot-and-ref workflow, n…

These share tags the maintainers applied themselves, such as marketplace, plugin. Common tags like "mcp" or "ai" are ignored for this: agreeing with six hundred other projects is not a similarity.

This is not a recommendation and not a test result. It is a map of what the authors said their work is about.

How the author describes it

Topics the maintainer set on GitHub: claude-code, marketplace, mcp, plugin.

This record as data

Every field on this page, with its source and observation date, is in the catalog JSON. Fetch the whole kind at once instead of parsing this HTML.

GET /api/v1/entries/mcp_server.json

Sources

  1. Tools declared by the MCP server at https://api.bankstatemently.com/mcp — api.bankstatemently.com, observed , trust tier 4.
  2. bankstatemently/plugins on GitHub — GitHub, observed , trust tier 3.
  3. Official MCP Registry — Model Context Protocol, observed , trust tier 1.