Sign In

bank-statement-sheet-mcp

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

bank-statement-sheet-mcp

MCP server for Bank Statement Sheet — convert PDF bank statements to transaction data that arrives with a pass/fail reconciliation verdict, so an agent knows whether the numbers are safe to post to a ledger.

latest
Source
npmnpm
Version
0.1.1
Version published
Maintainers
1
Created
Source

bank-statement-sheet-mcp

An MCP server that turns a PDF bank statement into transaction data that arrives with a pass/fail reconciliation verdict, so an agent knows whether the numbers are safe to write into a ledger.

Your PDF is uploaded over HTTPS to the Bank Statement Sheet API (bankstatementsheet.com), where it is parsed and checked. It is processed in memory; upload records are deleted within 24 hours and transactions are not permanently stored. If that is not acceptable for a given file, don't pass it — or point BSS_API_URL at your own deployment.

Why the verdict matters

Any tool can pull numbers out of a PDF. The problem is that a wrong number looks exactly like a right one: a bookkeeper imports it, the books don't balance, and nobody knows which row lied.

So every extracted row is checked against the statement's own printed running balance:

balance[i] + amount[i-1] === balance[i-1]

The result travels with the data. When it fails, verdict.ledger_safe is false and the transactions are withheld — an agent that pipes result.transactions into a voucher tool gets nothing to post. Retrieving them takes a second, explicit call, which is visible in the transcript for a human to see.

Install

{
  "mcpServers": {
    "bank-statement-sheet": {
      "command": "npx",
      "args": ["-y", "bank-statement-sheet-mcp"],
      "env": { "BSS_API_KEY": "bss_live_..." }
    }
  }
}

BSS_API_KEY is optional. Without it the server works on the free anonymous tier: 5 conversions per month, Excel and CSV export. Mint a key at bankstatementsheet.com/dashboard — a key uses the same plan and daily page limit as the account it belongs to.

Try it with no account and no file of your own:

Convert the demo bank statement and show me the reconciliation verdict.

Tools

convert_bank_statement

InputNotes
file_pathAbsolute path to a PDF on this machine.
bankDefaults to auto-detect, which also handles banks with no dedicated parser.
orderchronological (default, oldest first — what ledger imports expect) or statement.
include_unverified_rowsOnly after a failed verdict, and only after telling the user.
save_asxlsx, csv free; fortnox, ofx, json need Pro.
use_demo_statementConverts a hosted synthetic sample. No quota, no real data.

Returns verdict (status, ledger_safe, checks passed/total, method), transactions (each row flagged verified), totals, source (including the SHA-256 of the file, as an audit anchor), and any files written.

export_conversion

Writes a conversion to xlsx / csv / fortnox / ofx / json. Files whose data failed the check get an -UNVERIFIED filename suffix and an in-file warning — both come from the server and neither should be stripped.

Conversions are held server-side for 10 minutes. Past that, this tool re-converts the same file automatically (which costs one conversion from your quota) — but only after confirming the file still hashes to what was originally converted, and it reports loudly if the second verdict differs from the first.

check_account_status

Plan, quota remaining, and whether your API key was actually recognised. Worth calling if conversions are being refused: an unrecognised key silently falls back to the anonymous tier.

Configuration

VariableDefaultPurpose
BSS_API_KEYYour key. Unset → anonymous tier.
BSS_API_URLthe hosted APIPoint at your own deployment.
BSS_ALLOWED_DIRScwd + ~/DownloadsColon-separated directories PDFs may be read from.
BSS_ALLOW_ANY_PATH0Set 1 to disable the allowlist.
BSS_MAX_FILE_MB50
BSS_TIMEOUT_MS180000
BSS_OUTPUT_DIRalongside the input PDFWhere save_as writes.

The directory allowlist exists because this server reads local files and uploads them. The realistic threat is not a careless user, it's a prompt-injected agent asking for ~/Documents/tax-return.pdf. Paths are resolved through realpath first, so a symlink inside an allowed directory cannot point outside it, and a file is rejected unless its bytes actually begin with %PDF-.

There is no URL input, deliberately: it would turn this into a fetcher running with your network position, aimable at cloud metadata endpoints or intranet hosts, for a capability the agent already has.

What this server will not do

  • Return extracted rows without a verdict attached.
  • Hand over rows that failed the balance check without an explicit, separate request.
  • Rename a file to remove the server's -UNVERIFIED marker.
  • Silently re-upload a file whose bytes changed since it was converted.

Licence

MIT. The extraction engine and the accuracy gate run server-side and are not part of this package.

Keywords

mcp

FAQs

Package last updated on 08 Aug 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts