Skip to content
plugmcp
DirectorySkillsCategoriesBlog
EN/δΈ­ζ–‡
Sign inSign up
Home/Servers/Taxformatter

Taxformatter

I
by io.github.Sean-Bravo

Parse crypto CSVs and bank PDFs into clean transaction data for Koinly, TurboTax, CoinLedger.

Power your agent

Add this server

The publisher's own command. Not a PlugMCP endpoint.

Local command
npx -y @taxformatter/[email protected]
Credentials from the publisher
  • TAXFORMATTER_API_KEY β€” Your TaxFormatter API key (starts with tf_live_). Get one free at taxformatter.com/dashboard/developer
Provider
Claude Code
TAXFORMATTER_API_KEY=<secret> claude mcp add io.github.sean-bravo-taxformatter -- npx -y @taxformatter/[email protected]

Run in a terminal.

Claude Desktop
{
  "mcpServers": {
    "io.github.sean-bravo-taxformatter": {
      "command": "npx",
      "args": [
        "-y",
        "@taxformatter/[email protected]"
      ],
      "env": {
        "TAXFORMATTER_API_KEY": "<secret>"
      }
    }
  }
}

claude_desktop_config.json

Step-by-step: add this in Claude

Remote URL or a command on your machine? How the two installs differ

Run on PlugMCP

Host a copy with our keys and logs.

A new server you create. It is not this listing's official endpoint. Use the publisher install when you want their URL and their credentials.

Launch

Related MCP

View more
  • FirecrawlπŸ”₯ Official Firecrawl MCP Server - Adds powerful web scraping and search to Cursor, Claude and any other LLM clients.
  • N
    NotionToken-auth Notion MCP: pages, databases, blocks, comments, files. Runs headless in CI and agents.
  • Context7Context7 Platform -- Up-to-date code documentation for LLMs and AI code editors

Related skills

View all
  • reaReverse engineer anything with agents, from app behavior down to native binaries.
  • rea-changelog-updatePrepare or rewrite REA release changelogs and GitHub release notes from pinned Git history, with verified contributor thanks and Release Please synchronization.
  • rea-tool-designDesign or change REA investigation tools, CLI/MCP contracts, provider capabilities, and Evidence semantics.

Parse crypto CSVs and bank PDFs into clean transaction data for Koinly, TurboTax, CoinLedger.

πŸ“Š 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 insights

✨ 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
ToolWhat it does
parse_crypto_csvAuto-detects the exchange, returns normalized transactions
parse_bank_statementExtracts transactions from bank statement PDFs
list_supported_sourcesQueries every supported source + output format

πŸ“¦ Official SDKs

  • Node.js β†’ @taxformatter/sdk β€” promise-based, fully typed
  • Python β†’ 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 by lib/exchange-registry.ts
  • Banks β€” backend/configs/banks/*.yaml, mirrored by lib/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 Β· 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.

LevelPlansOutput
StandardFree / StarterQuick stats + basic flagging
AdvancedGrowthBalanced analysis, breakdowns
PremiumBusinessDeep 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

LayerTechnology
FrontendNext.js 16 Β· React 19 Β· TypeScript Β· Tailwind v4
AuthNextAuth (Google OAuth + email/password + 2FA)
DatabaseNeon (serverless PostgreSQL)
StorageAWS S3 (presigned URLs)
QueueAWS SQS + DLQ
ComputeAWS Lambda Γ— 4 (scanner, processor, webhook, api)
EdgeAWS API Gateway + WAF + CloudFront
PaymentsStripe (consumer + developer tiers)
EmailAWS SES / Nodemailer
MonitoringSentry + CloudWatch
CronVercel Cron (daily 30-day retention prune)
IaCTerraform

πŸ“ 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 "[email protected]"

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.

TierPriceQuotaRPMAI InsightsHighlights
Free$025 files10StandardAll exchanges Β· No credit card
Starter$29/mo100 files30StandardAll exchanges
Growth$99/mo500 files60Advanced+ Bank PDF parsing
Business$249/mo2,000 files120Premium+ 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

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

How do I install Taxformatter?
Copy the stdio config for Cursor, Claude Desktop, Claude Code, or VS Code on this page. It uses the publisher's install, not a PlugMCP proxy.
Does Taxformatter need an API key?
The publisher lists these environment variables: TAXFORMATTER_API_KEY.
What transport does Taxformatter use?
Taxformatter runs locally over stdio.
When was Taxformatter last checked?
Last checked 2026-10-16. Parse crypto CSVs and bank PDFs into clean transaction data for Koinly, TurboTax, CoinLedger.

No tool list yet. Remote servers get one after the first health check.

plugmcp

Plug any tool into any agent. MCP servers for people who do not write servers. Gateway for volume, n8n for apps.

  • github.com/TODO
  • x.com/TODO
  • linkedin.com/company/TODO

PlugMCP, 2026

Product
  • Browse
  • Install
  • Host your own
  • Voice mode
  • Browser
Directory
  • All MCP servers
  • Agent skills
  • Categories
  • New
  • Voice
  • Submit a server
Developers
  • Docs
  • Blog
  • What is MCP
  • What is WebMCP
  • Status
Company
  • About
  • Contact
  • Terms
  • Privacy
  • DPA