Crypto Tax MCP
Import transaction history via CSV exports or CCXT API for cost basis and capital gains calculations.
Import transaction history via CSV exports for cost basis and capital gains calculations.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Crypto Tax MCPcalculate my realized gains for 2024"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Crypto Tax MCP
Reconcile, calculate, and file your crypto taxes inside Claude — FIFO/LIFO/HIFO lot matching, IRS Form 1099-DA discrepancy detection, and tax-optimal method selection.
MCP server (Model Context Protocol) that gives Claude IRS-grade crypto tax reasoning. Import a Koinly/CoinTracker/exchange CSV, point Claude at it, and ask: "What's my 2025 realized gain?" — Claude does the lot matching, splits short vs. long-term, and tells you which method saves the most.
Pairs with the companion Crypto Portfolio MCP.
Why this exists
In January 2026 the IRS rolled out Form 1099-DA: brokers (Coinbase, Kraken, Robinhood, etc.) now report your crypto proceeds to the IRS — but they usually report $0 cost basis for any asset you transferred in from another exchange or wallet. The taxman sees "$50,000 in proceeds, $0 cost," panics, and assumes you owe tax on the entire $50K.
You don't. You owe tax on the actual gain — which only your full transaction history can prove.
This MCP gives Claude the reasoning to:
Import your transactions from Koinly, CoinTracker, Coinbase, Kraken, Binance, or any generic CSV
Calculate cost basis with FIFO / LIFO / HIFO — including auto-detected error states (negative balances, missing basis)
Compare your real numbers against the 1099-DA your broker mailed you, in plain language
Optimize — which method minimizes your tax liability this year?
Generate a Form 8949–compatible report your CPA can drop straight into TurboTax
All without leaving Claude. No spreadsheets. No 11-tab Notion docs.
Related MCP server: MCP Crypto Portfolio
Who it's for
Persona | What they get |
Active traders | Per-tax-year realized gain summary in 3 prompts. Optimize basis method to legally cut tax. |
DeFi / on-chain users | Reconcile cross-chain transfers your broker can't see |
Anyone holding through 2025 | The 1099-DA is coming whether you're ready or not — this MCP makes the reconciliation conversational |
CPAs / accountants | Drop client CSVs in, ask Claude for a Form 8949 export, ship to client |
Hodlers | Confirm long-term status, see capital gain horizon, decide when to sell |
Tools (10)
Tool | Purpose |
| Parse Koinly / CoinTracker / Coinbase / Kraken / Binance / generic CSV |
| Add a single tx; auto-fetches historical FMV from CoinGecko |
| Browse stored txs — filter by year, type, coin, exchange |
| FIFO / LIFO / HIFO lot matching → short-term + long-term gain split |
| Year-scoped gain summary with per-coin breakdown |
| Compare FIFO vs LIFO vs HIFO tax liability side-by-side |
| Negative balance, missing basis, bridge mismatches — root cause + fix |
| Match calculated basis vs 1099-DA, flag mismatches over tolerance |
| Plain-language broker reconciliation — the Tax-tier feature |
| Form 8949–compatible JSON / CSV with audit trail |
Example conversations
1. Import your Koinly export
You: (uploads
koinly-2025.csvto Claude) "Import this — it's my Koinly export for 2025."
Claude calls: import_transactions_csv({source: "koinly", csv_data: "<base64>"})
Claude: "Imported 412 transactions from Koinly. Found 4 duplicates against your existing records (skipped). 3 warnings — Polygon transactions on lines 87, 142, and 301 have no fee specified; assuming $0. Ready to calculate cost basis."
{
"parser": "koinly",
"rows_parsed": 416,
"transactions_imported": 412,
"skipped_duplicates": 4,
"warnings": [
"Line 87: missing fee — assumed $0",
"Line 142: missing fee — assumed $0",
"Line 301: missing fee — assumed $0"
],
"errors": []
}2. Add a single transaction by hand
You: "I earned 0.05 ETH from staking on June 1, 2025. Add it as income."
Claude calls: add_manual_transaction({type: "earn", coin_id: "ethereum", quantity: 0.05, date: "2025-06-01"}) — price_usd omitted → auto-fetched from CoinGecko historical.
Claude: "Added: 0.05 ETH earned June 1, 2025. CoinGecko historical price for that day: $3,820, so FMV = $191. That becomes ordinary income on your 2025 return, and your cost basis going forward is $3,820/ETH."
3. Calculate gains with FIFO
You: "Run FIFO on all my 2025 sells."
Claude calls: calculate_cost_basis({transactions: [...all stored txs], method: "fifo", tax_year: 2025}) then surfaces the summary.
Claude: "2025 FIFO results:
Total realized gain: +$48,200
Short-term: +$12,400 (taxed as ordinary income — ouch)
Long-term: +$35,800 (capital gains rates)
87 sell transactions matched. Confidence: 96%.
2 missing-basis warnings — you sold 0.3 BTC from an exchange we don't have purchase records for. Want me to flag those for resolution?"
4. Should I use LIFO or HIFO instead?
You: "What method saves the most tax?"
Claude calls: optimize_cost_basis_method({transactions: [...], include_methods: ["fifo", "lifo", "hifo"]})
Claude: "HIFO saves you the most. Comparison at 37% short-term / 20% long-term rates:
Method
Realized gain
Tax owed
FIFO
$48,200
$11,750
LIFO
$39,100
$9,400
HIFO
$31,800
$8,090
Switching to HIFO saves you $3,660 on this year's return. Note: the IRS allows method choice but you must apply it consistently — talk to your CPA before switching mid-stream."
5. Find tax-impact errors
You: "Are there any issues before I file?"
Claude calls: detect_errors_and_explain({transactions: [...all]})
Claude: "Found 1 error:
🚨 NEGATIVE_BALANCE: SOL on April 11, 2025 — you sold 18.4 SOL but the records only show 12.1 SOL in. You likely have a missing transfer-in from another exchange or wallet.
Fix: Import the missing 6.3 SOL purchase/transfer. Common sources: a CEX you forgot, a Phantom wallet, an airdrop, or a swap you didn't catalog. Once added, re-run
calculate_cost_basis.Confidence: 80% — bring this to 100% before filing."
6. Reconcile against your 1099-DA ⭐ (Tax tier)
You: "Coinbase sent me a 1099-DA showing $52,000 proceeds and $0 basis for 2025. I think it's wrong. Can you check?"
Claude calls: compare_1099da({exchange: "Coinbase", year: 2025, reported_proceeds_usd: 52000, reported_basis_usd: 0})
Claude: "Coinbase's 1099-DA reports $52,000 in proceeds with $0 basis — but 38 of your Coinbase sells were assets you originally bought on Kraken ($28,400 cost basis) and moved into Coinbase before selling.
Your real gain on Coinbase 2025 activity:
Proceeds: $52,000 ✅ (matches 1099-DA)
Real cost basis: $36,200 (Coinbase can't see the Kraken purchases)
Real gain: $15,800 (not $52,000)
Discrepancy: Coinbase will report $52K to the IRS as taxable gain. You owe tax on $15.8K.
Audit risk: Medium. The IRS will see the mismatch. File Form 8949 with Box C checked (basis not reported to IRS) and attach a brief reconciliation note. We can generate that report next."
7. Browse what's stored
You: "Show me all my BTC sells in 2025."
Claude calls: get_transactions({year: 2025, type: "sell", coin_id: "bitcoin"})
Claude: "12 BTC sells in 2025 (total of stored: 412 transactions). Most recent first:
2025-12-18: −0.1 BTC @ $98,200 on Coinbase ($9,820 proceeds, fee $4.50)
2025-11-04: −0.05 BTC @ $76,800 on Kraken ($3,840 proceeds, fee $2.00)
2025-09-22: −0.2 BTC @ $58,400 on Coinbase ($11,680 proceeds, fee $5.80)
… (showing 50 of 12; want to filter further?)"
8. Year-end summary
You: "Quick 2025 realized gains summary."
Claude calls: get_realized_gains({year: 2025, method: "fifo"})
Claude: "2025 realized gains (FIFO):
Total realized gain: $48,200
Short-term: $12,400 (87 lots) — taxed at ordinary income rates
Long-term: $35,800 (43 lots) — taxed at LTCG rates
By coin:
BTC: +$31,200 (12 lots)
ETH: +$8,400 (28 lots)
SOL: +$5,100 (44 lots)
LINK: +$2,800 (18 lots)
DOGE: +$700 (28 lots)"
9. Export Form 8949
You: "Give me a CSV my CPA can plug into TurboTax."
Claude calls: generate_tax_report({format: "csv", tax_year: 2025, include_audit_trail: true})
Claude: "Generated. The report has 130 line items (matching 130 sell lots). Top of file:
Coin, Buy Date, Sell Date, Quantity, Proceeds, Cost Basis, Gain/Loss, Holding Period bitcoin, 2023-09-12, 2025-03-04, 0.08, 5760.00, 2080.00, 3680.00, long-term bitcoin, 2023-09-12, 2025-04-15, 0.10, 7340.00, 2600.00, 4740.00, long-term ...Audit trail attached — each line shows which buy lot was matched to which sell, using FIFO. Drop into TurboTax or send to your CPA."
10. Bring-your-own 1099-DA CSV
You: "I have the 1099-DA Kraken sent me as a CSV. Reconcile against my numbers."
Claude calls: reconcile_with_1099da({calculated_basis: <prev_result>, form_1099da_csv: "<base64>", tolerance_percent: 5})
Claude: "Compared 23 reported lines against your calculated basis (5% tolerance):
✅ 19 matched within tolerance
⚠️ 3 mismatches — Kraken reports $0 basis where you have $1,400 / $3,200 / $890 (these were transferred in from Binance)
🚨 1 missing — Kraken reports a SOL sell you don't have. Did you delete a transaction by mistake?
Not ready to file until the missing tx is resolved. Want me to walk you through finding it?"
Pricing tiers
Tier | Transactions | Methods | 1099-DA reconciliation | Price |
Free | 50 | FIFO only | ❌ | $0 |
Pro | Unlimited | FIFO + LIFO + HIFO + Optimize | ❌ | $19/mo |
Tax | Unlimited | All methods | ✅ | $49/mo |
The Tax tier exists for one reason: the plain-language broker reconciliation that explains the gap between your 1099-DA and reality. Worth $49/mo for one filing season, easily.
Stack
Runtime: Node.js 20, TypeScript
MCP SDK:
@modelcontextprotocol/sdk(Streamable HTTP, stateless per-request)Framework: Express + Zod schemas
Prices: CoinGecko Demo API (historical FMV for any past date)
Storage: SQLite via
better-sqlite3(transactions, cost lots, realized gains)Parsers: Koinly, CoinTracker, Coinbase, Kraken, Binance + generic CSV with auto-detect
Billing: Polar.sh webhook → tier upgrade (optional; works without)
Auth: Bearer API key + MCPize upstream proxy passthrough
CSV format support
Auto-detected from the header row when source: "manual" is passed, or specify explicitly:
Source | Status |
| ✅ Full support — type/coin/quantity/price/fee mapped |
| ✅ Full support |
| ✅ Native Coinbase Tax Center export |
| ✅ Native Kraken ledger export |
| ✅ Spot + earn rows |
| ✅ Any CSV with |
CSV must be base64-encoded when passed as csv_data — Claude does this automatically.
Development
git clone https://github.com/biggling/crypto-tax-mcp.git
cd crypto-tax-mcp
npm install
cp .env.example .env
# Edit .env — set COINGECKO_API_KEY
npm run dev # watch mode
# or
npm run build && npm start # productionEnvironment variables
Var | Purpose | Default |
| HTTP listen port |
|
| Demo-tier key (historical FMV needed) | required |
| SQLite file |
|
|
|
|
| MCPize gateway upstream token | optional |
| Polar.sh webhook signature secret | optional |
| Polar product ID for Pro tier | optional |
| Polar product ID for Tax tier | optional |
| Polar.sh API token | optional |
Architecture
Claude AI (or MCPize gateway)
│ HTTPS Bearer <key>
▼
nginx reverse proxy
│ :3001
▼
crypto-tax-mcp (Node.js / Express)
├─► SQLite ── transactions, lots, realized_gains, polar_subscriptions
├─► CoinGecko ── historical FMV (cached)
└─► Polar.sh webhook /webhooks/polar (HMAC-verified)Stateless MCP
Each POST /mcp creates a fresh McpServer instance scoped to the authenticated user — no session state to manage, horizontally scalable, safe behind any load balancer.
Cost basis engine
Pure-function FIFO/LIFO/HIFO matcher in src/cost_basis.ts. Same input → same output, always. Lot matching is deterministic so reports are reproducible audit-defensibly: you can hand a CPA the input CSV and get the same gain numbers.
Disclaimer
This MCP returns tax calculations — it is not tax advice. For high-value or complex returns, work with a qualified CPA. The 1099-DA reconciliation tool flags discrepancies and suggests Form 8949 box choices; the actual filing decision is yours.
License
MIT.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/biggling/crypto-tax-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server