Skip to main content
Glama
Sean-Bravo

taxformatter-mcp-server

by Sean-Bravo

๐Ÿ“Š TaxFormatter

Crypto CSVs and bank statement PDFs, parsed into tax-ready data.

REST API ยท MCP Server ยท Node SDK ยท Python SDK ยท Consumer Dashboard

API MCP Node SDK License


๐Ÿš€ 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 insights

Related 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 back

  • GET /v1/sources โ€” list every supported exchange, bank, and output format, each with a verified / beta status

  • GET /v1/usage โ€” monthly quota, RPM limit, current consumption

  • GET /v1/health โ€” liveness probe

  • Auth: X-API-Key header with tf_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-server

Tool

What it does

parse_crypto_csv

Auto-detects the exchange, returns normalized transactions

parse_bank_statement

Extracts transactions from bank statement PDFs

list_supported_sources

Queries every supported source + output format

๐Ÿ“ฆ Official SDKs

๐Ÿฆ 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:

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)

Email

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 reports

Full architectural reference: ARCHITECTURE.md


โšก Quick Start

Run the web app

npm install
npm run dev

Open 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/sdk
import { 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 taxformatter
from 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_requests stores key id, endpoint, status, bytes, timing, detected source, error code, and caller IP; never file contents

  • API keys SHA-256 hashed at rest, prefixed tf_live_ for easy identification

  • Uploads 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


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.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    B
    maintenance
    Deterministic 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