npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

bank-statement-sheet-mcp

v0.1.1

Published

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.

Downloads

441

Readme

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

| Input | Notes | |---|---| | file_path | Absolute path to a PDF on this machine. | | bank | Defaults to auto-detect, which also handles banks with no dedicated parser. | | order | chronological (default, oldest first — what ledger imports expect) or statement. | | include_unverified_rows | Only after a failed verdict, and only after telling the user. | | save_as | xlsx, csv free; fortnox, ofx, json need Pro. | | use_demo_statement | Converts 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

| Variable | Default | Purpose | |---|---|---| | BSS_API_KEY | — | Your key. Unset → anonymous tier. | | BSS_API_URL | the hosted API | Point at your own deployment. | | BSS_ALLOWED_DIRS | cwd + ~/Downloads | Colon-separated directories PDFs may be read from. | | BSS_ALLOW_ANY_PATH | 0 | Set 1 to disable the allowlist. | | BSS_MAX_FILE_MB | 50 | | | BSS_TIMEOUT_MS | 180000 | | | BSS_OUTPUT_DIR | alongside the input PDF | Where 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.