taxformatter-mcp-server
Enables parsing of Bank of America PDF statements into structured, tax-ready transactions.
Enables parsing of Binance CSV exports into normalized, tax-ready transactions.
Enables parsing of Cash App CSV exports into normalized, tax-ready transactions.
Enables parsing of Chase PDF statements into structured, tax-ready transactions.
Enables parsing of Coinbase CSV exports into normalized, tax-ready transactions.
Enables parsing of KuCoin CSV exports into normalized, tax-ready transactions.
Enables parsing of OKX CSV exports into normalized, tax-ready transactions.
Enables parsing of PayPal CSV exports into normalized, tax-ready transactions.
Enables parsing of Robinhood CSV exports into normalized, tax-ready transactions.
Enables parsing of Venmo CSV exports into normalized, tax-ready transactions.
Enables parsing of Wells Fargo PDF statements into structured, tax-ready transactions.
๐ TaxFormatter
Crypto CSVs and bank statement PDFs, parsed into tax-ready data.
REST API ยท MCP Server ยท Node SDK ยท Python SDK ยท Consumer Dashboard
๐ What It Does
TaxFormatter turns messy financial exports into structured, tax-ready data โ for humans and for AI agents.
Drop a CSV from Coinbase, a ZIP from Kraken, a .tar.gz from Binance, or a PDF statement from Chase, and get back a clean, normalized transaction set you can pipe into Koinly, TurboTax, CoinLedger, ZenLedger โ or straight into your own software.
Exchange CSV Clean, normalized
Bank PDF โ transactions (JSON / CSV)
XLSX / ZIP / TAR.GZ + AI-generated insightsRelated MCP server: document-to-json-mcp
โจ Features
๐ Developer REST API
Ship a crypto-tax or bank-ingestion feature into your product in an afternoon.
POST /v1/parseโ upload a CSV or PDF, get structured JSON backGET /v1/sourcesโ list every supported exchange, bank, and output format, each with averified/betastatusGET /v1/usageโ monthly quota, RPM limit, current consumptionGET /v1/healthโ liveness probeAuth:
X-API-Keyheader withtf_live_*keys (SHA-256 hashed at rest)Host:
https://api.taxformatter.com
๐ค MCP Server for AI Agents
Give Claude, Cursor, Windsurf, or any MCP-compatible agent the ability to parse crypto and bank data directly.
npx @taxformatter/mcp-serverTool | What it does |
| Auto-detects the exchange, returns normalized transactions |
| Extracts transactions from bank statement PDFs |
| Queries every supported source + output format |
๐ฆ Official SDKs
Node.js โ
@taxformatter/sdkโ promise-based, fully typedPython โ
taxformatterโ idiomatic, type-hinted
๐ฆ 14 Exchanges ยท 6 Banks ยท 4 Export Formats
Every public supported-source claim is generated from two registries, and drift tests fail CI if any surface disagrees with them:
Exchanges โ
backend/configs/exchanges.yaml, mirrored bylib/exchange-registry.tsBanks โ
backend/configs/banks/*.yaml, mirrored bylib/bank-registry.ts
GET /v1/sources serves the same lists. Every entry carries a status: verified means a fixture-backed parse test runs on every change; beta means the parser exists but has no fixture yet. A new status is earned by a test, never by editing a registry.
Exchanges (verified): Binance ยท Coinbase ยท Kraken ยท KuCoin ยท Bybit ยท Cash App ยท Robinhood ยท PayPal ยท Crypto.com ยท Gemini ยท FTX ยท Bitfinex ยท OKX
Exchanges (beta): Venmo
Banks (verified): Chase ยท Mercury ยท Navy Federal
Banks (beta): Bank of America ยท Wells Fargo ยท Citi
Export formats: Koinly ยท TurboTax (Form 8949) ยท CoinLedger ยท ZenLedger
Per-exchange detail: content/docs/getting-started/supported-exchanges.md.
๐ง Tiered AI Insights
Every parsed file comes back with analysis scaled to your plan. Plans expose an insights level; the level โ model mapping lives in lib/insights-engine.ts and is published only in the API docs and blog Updates posts.
Level | Plans | Output |
Standard | Free / Starter | Quick stats + basic flagging |
Advanced | Growth | Balanced analysis, breakdowns |
Premium | Business | Deep analysis + tax suggestions |
The insights contract is strict. Model output is validated against a fixed schema, and a refusal, truncation, or unparseable response falls back to the deterministic quick stats with an insights unavailable warning rather than partial flags. Every result is stamped with the model, prompt version, and effort that produced it, and every model call logs tokens, cache-hit rate, latency, and cost.
๐ฅ๏ธ Consumer Dashboard
Not a developer? The web app at taxformatter.com is a full drag-and-drop experience with real-time job status, exchange auto-detection, transformation previews, and one-click downloads.
๐๏ธ Tech Stack
Layer | Technology |
Frontend | Next.js 16 ยท React 19 ยท TypeScript ยท Tailwind v4 |
Auth | NextAuth (Google OAuth + email/password + 2FA) |
Database | Neon (serverless PostgreSQL) |
Storage | AWS S3 (presigned URLs) |
Queue | AWS SQS + DLQ |
Compute | AWS Lambda ร 4 (scanner, processor, webhook, api) |
Edge | AWS API Gateway + WAF + CloudFront |
Payments | Stripe (consumer + developer tiers) |
AWS SES / Nodemailer | |
Monitoring | Sentry + CloudWatch |
Cron | Vercel Cron (daily 30-day retention prune) |
IaC | Terraform |
๐ Repo Layout
trw/
โโโ app/ # Next.js App Router (marketing, dashboard, docs, blog)
โ โโโ api/ # Internal API routes (NextAuth, uploads, jobs, dev keys, cron/prune)
โ โโโ dashboard/ # Authenticated user area + /dashboard/developer
โ โโโ docs/ ยท blog/ # MDX-powered docs site and blog (content in content/)
โ โโโ playground/ # API playground
โ โโโ samples/ # Sample outputs
โ โโโ upload/ # Anonymous bank statement โ CSV landing page
โ
โโโ backend/ # Python processing layer (AWS Lambda)
โ โโโ handlers/ # scanner ยท processor ยท webhook ยท api
โ โโโ services/
โ โ โโโ engine.py # CSV parsing (14 exchange parsers)
โ โ โโโ format_converter.py # Koinly โ TurboTax/CoinLedger/ZenLedger
โ โ โโโ fingerprinting.py # Exchange auto-detection
โ โ โโโ ai_insights.py # Tiered AI analysis (schema-validated, refusal-safe)
โ โ โโโ api_auth.py # API key validation + rate limiting
โ โ โโโ bank_statement/ # PDF extraction pipeline
โ โโโ configs/
โ โ โโโ exchanges.yaml # Exchange source registry (serves /v1/sources)
โ โ โโโ banks/*.yaml # Bank source registry + parser configs
โ โโโ tests/ # pytest suite + parse fixtures
โ โโโ terraform/ # Infra as code
โ
โโโ packages/
โ โโโ mcp-server/ # @taxformatter/mcp-server (npm)
โ โโโ sdk-node/ # @taxformatter/sdk (npm)
โ โโโ sdk-python/ # taxformatter (PyPI)
โ
โโโ components/ # React components (marketing, dashboard, ui)
โโโ content/ # Docs (.md) and blog (.mdx) sources
โโโ lib/ # Business logic (auth, api-keys, stripe, email)
โ โโโ exchange-registry.ts # Mirrors backend/configs/exchanges.yaml
โ โโโ bank-registry.ts # Mirrors backend/configs/banks/*.yaml
โ โโโ tier-registry.ts # The one price list (plan, price, quota, RPM, insights level)
โ โโโ insights-engine.ts # The one model list (insights level โ model)
โ โโโ retention.ts # RETENTION_DAYS = 30
โโโ db/ # PostgreSQL schema + migrations
โโโ __tests__/ # Jest suite, incl. copy and registry drift guards
โโโ docs/ # Setup guides, plans, build reportsFull architectural reference: ARCHITECTURE.md
โก Quick Start
Run the web app
npm install
npm run devOpen http://localhost:3000.
Try the API
curl -X POST https://api.taxformatter.com/v1/parse \
-H "X-API-Key: tf_live_..." \
-F "file=@coinbase.csv"Use the MCP server with Claude Code
{
"mcpServers": {
"taxformatter": {
"command": "npx",
"args": ["@taxformatter/mcp-server"],
"env": { "TAXFORMATTER_API_KEY": "tf_live_..." }
}
}
}Install the Node SDK
npm install @taxformatter/sdkimport { TaxFormatter } from "@taxformatter/sdk";
const tf = new TaxFormatter(process.env.TF_API_KEY!);
// Parse a file by path, or pass a Buffer with a filename
const result = await tf.parse("./coinbase.csv");
const turbotax = await tf.parse(buffer, "coinbase.csv", { outputFormat: "turbotax" });Install the Python SDK
pip install taxformatterfrom taxformatter import TaxFormatter
tf = TaxFormatter("tf_live_...")
result = tf.parse("./coinbase.csv")๐งช Testing
npm test # Jest (700+ tests: API routes, MCP, keys, registries, UI)
npm run test:e2e # Playwright end-to-end tests
npm run typecheck # TypeScript strict mode
npm run lint # ESLint
cd backend && pytest # Python engine, parsers, insights, API Lambda (370+ tests)Public copy is tested too. Drift guards under __tests__/ fail if any surface hard-codes a price, quota, or model name outside the registries, names an exchange or bank the registries don't list, or carries a superseded retention or marketing claim.
๐ณ Pricing
One plan, two ways to use it โ drop a file in the dashboard or call our API. Same quota, same AI insights.
Tier | Price | Quota | RPM | AI Insights | Highlights |
Free | $0 | 25 files | 10 | Standard | All exchanges ยท No credit card |
Starter | $29/mo | 100 files | 30 | Standard | All exchanges |
Growth | $99/mo | 500 files | 60 | Advanced | + Bank PDF parsing |
Business | $249/mo | 2,000 files | 120 | Premium | + Custom integrations |
Source of truth: lib/tier-registry.ts (prices, quotas, limits) and lib/insights-engine.ts (which model serves each insights level). Model names are published in the API docs and blog Updates posts only.
๐ Security Highlights
API payloads never stored โ request bodies are parsed in memory and never written to S3 or the database
Metadata-only request log โ
api_requestsstores key id, endpoint, status, bytes, timing, detected source, error code, and caller IP; never file contentsAPI keys SHA-256 hashed at rest, prefixed
tf_live_for easy identificationUploads only โ TaxFormatter never asks for exchange API keys or bank logins
TLS 1.3 enforced everywhere
AES-256 encryption on all stored uploads
AWS WAF in front of the API
30-day retention โ uploads, outputs, and parsed rows are deleted within 30 days (sooner from the dashboard); enforced by an S3 lifecycle rule and a daily prune cron
Full disclosure at taxformatter.com/security.
๐ Documentation
ARCHITECTURE.md โ Full system design
content/docs/api/index.md โ API reference
content/docs/getting-started/supported-exchanges.md โ per-exchange status, generated from the registry
packages/mcp-server/README.md โ MCP setup guide
RELIABILITY.md โ SLOs, incident playbooks
docs/PARKED_UNTIL_REVIEW.md โ post-launch initiatives frozen until the Oct 28 review
docs/ โ Stripe, Sentry, deployment guides, and build reports
License
Source-available, not open source. Copyright (c) 2026 Quantum Transfer Group, all rights reserved โ you may read and audit this code, but not run, copy, or build on it. Full terms in LICENSE; the published npm and PyPI client packages are licensed separately.
Security
Found a vulnerability? Report it privately โ see SECURITY.md. Please don't open a public issue.
Contributing
Bug reports are welcome, especially parsing failures against real exchange or bank exports. We don't accept outside pull requests โ see CONTRIBUTING.md.
This server cannot be deployed
Maintenance
Related MCP Connectors
Turn bank statement PDFs, CSVs, XLSX and OFX into categorised transactions plus a summary.
Turn bank statement PDFs into categorized, balance-checked transactions and reports.
Convert bank statement PDFs to Excel, CSV, OFX or QBO, every row checked against the balances.
Convert PDF bank statements into structured transactions, accounts, and balances.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to extract structured JSON from invoices and receipts in PDF and image formats using Claude Vision. Supports full document parsing, line item extraction, validation, and batch CSV export with API key or cryptocurrency payment options.MIT
- AlicenseAqualityDmaintenanceConvert PDFs to structured JSON. Extract invoices, bank statements, contracts, and more. Pay per call via x402 USDC.58MIT
- FlicenseNot gradedqualityDmaintenanceClassifies Solana on-chain transactions into tax categories (e.g., swap, stake, NFT) and exports CSV reports compatible with TurboTax and CoinTracker.-
- AlicenseNot gradedqualityBmaintenanceDeterministic bank-statement parsing for AI agents: messy CSV/OFX exports to clean, categorized ledger rows. In-memory only, no storage, no external calls, no LLM in the loop.MIT