https://mcp.moltlinestudio.com/taxlots ↗
Crypto cost-basis lots (FIFO/LIFO/HIFO/specific-ID), Form 8949 rows, 1099-DA diff. 5 of 8 free.
Moltline TaxLots is a remote MCP server published at mcp.moltlinestudio.com. It has been probed 7 times since 9/12/2026. It answered in 7 of them (100.0%), a near-uninterrupted record. Median response time is 368 ms, placing it among the faster endpoints. It offers a narrow, focused set of 8 tools. On the protocol side it still runs 2025-11-25 and has not moved to the newer spec.
Can an LLM agent pick the right tool here — names, descriptions and parameter clarity are assessed.
parse_transactions — Description could clarify when to use specific source hintsbuild_lots — Parameter 'on_missing_lots' lacks clear value examplesform_8949_rows — Tax year parameter could specify valid range constraintstools/list structure, inputSchema validity, and a functional smoke test — the components of the 0-100 score.
Tools the server advertised in the latest measurement — measured, not catalog-claimed.
parse_transactionsNormalise an exchange CSV export into the canonical ledger rows. FREE. Supports the Coinbase transaction-history export (Transaction Type / Asset / Quantity Transacted columns), the Kraken ledgers export (txid / refid / type / asset / amount / fee) and a generic CSV with the canonical columns ts, type, asset, qty, fiat_value, fee_qty, fee_asset, fee_fiat, counter_asset, counter_qty, account, id. Typical input {"csv_text": "...", "source_hint": "coinbase"} returns {"rows": [...], "detected": "coinbase", "unrecognised": [...], "warnings": [...]}. Rows it cannot read are returned under unrecognised with the reason, never dropped silently. In every row qty is the whole amount that entered or left the account; when a fee was paid in the same asset, fee_qty is the part of qty that was the fee.
csv_textstringrequiredsource_hintstringaccountstringledger_lintFind the problems that break a lot build: missing values, duplicates, negative balances. FREE. Typical input {"ledger": <rows from parse_transactions>} returns {"issues": [{"severity": "error", "row": "cb12", "issue": "sell of 0.5 BTC exceeds balance 0.2 in account coinbase"}], "balances": {"coinbase": {"BTC": "0.2"}}, "counts": {...}}. Balances are running quantities per account and asset in time order, ignoring transfers' fiat values. Use after parse_transactions and before build_lots. Not a tax check: it checks the ledger's arithmetic consistency only. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"}. Every call is read-only and idempotent, so after correcting the input it is always safe
ledgerarrayrequiredmatch_transfersPair withdrawals with the deposits that received them between your own accounts. FREE. Typical input {"ledger": <rows>, "window_minutes": 1440} returns {"pairs": [{"out": "kr91", "in": "cb14", "asset": "BTC", "from": "kraken", "to": "coinbase", "network_fee": "0.0001", "minutes": 42.0}], "unmatched": {"transfer_out": [...], "transfer_in": [...]}}. A pair needs the same asset, a different account, the deposit inside the window after the withdrawal, and a quantity within tolerance_pct of the amount sent net of the fee. Use before build_lots so basis and holding period move with the coins instead of being treated as a sale. Not for transfers to third parties: those stay unmatched and should be typed gift_out or sell. Errors: on invalid, missing, or malformed input this tool never raises a pr
ledgerarrayrequiredwindow_minutesintegertolerance_pctnumberbuild_lotsBuild the lot inventory per account and every disposal with basis, gain and holding period. PREMIUM (license). Methods: fifo (the default rule when no specific identification is made, Treas. Reg. 1.1012-1(j)), lifo, hifo, or specific_id via a row's specific_lots {lot_id: qty}. Typical input {"ledger": <rows>, "method": "hifo", "transfers": <pairs from match_transfers>} returns {"disposals": [{"row": "cb9", "asset": "BTC", "qty": "0.5", "proceeds": "31000.00", "basis": "20000.00", "gain": "11000.00", "term": "long", ...}], "open_lots": [...], "summary": {"short_term": {...}, "long_term": {...}}}. Fees: a cash purchase's fee joins basis; a sale's or exchange's fee reduces the amount realized (1.1001-7); a network fee paid in the transferred asset is a disposal of those units (transfer_fee_p
ledgerarrayrequiredmethodstringtransfersarrayon_missing_lotsstringtransfer_fee_policystringtax_yearintegerform_8949_rowsLay the disposals out as Form 8949 rows with box categories and totals. PREMIUM (license). Typical input {"disposals": <from build_lots>, "tax_year": 2026, "default_reporting": "proceeds_only"} returns {"part_i": {"B": [rows]}, "part_ii": {"E": [rows]}, "totals": {...}}. Columns follow the form: description (a), date acquired (b), date sold (c), proceeds (d), cost or other basis (e), code (f), adjustment (g), gain or loss (h). Box: A/D when the broker reported proceeds and basis, B/E when proceeds only, C/F when no broker form - set per row in reporting {row_id: value} or for all rows with default_reporting. Use to draft the schedule from computed disposals. Not a filing: check the current form instructions. Errors: on invalid, missing, or malformed input this tool never raises a protocol
disposalsarrayrequiredtax_yearintegerrequiredreportingobjectdefault_reportingstringwhole_dollarsbooleanreconcile_1099daDiff the broker's 1099-DA lines against the computed disposals. PREMIUM (license). Typical input {"disposals": <from build_lots>, "form_rows": [{"asset": "BTC", "date_sold": "2026-03-04", "qty": "0.5", "proceeds": "31000", "basis": "", "account": "coinbase"}]} returns {"matched": [...], "broker_missing_basis": [...], "basis_mismatch": [...], "proceeds_mismatch": [...], "unmatched_form_rows": [...], "unmatched_disposals": [...]}. A line matches a disposal on the same account (when given), asset and sale date with quantity and proceeds inside the tolerances; several lots sold in one order are summed first. Use when the form arrives and the basis column is blank for coins that came from your own wallet. Not a substitute for the broker's statement. Errors: on invalid, missing, or malformed in
disposalsarrayrequiredform_rowsarrayrequiredqty_tolerance_pctnumbermoney_tolerancenumberwash_window_checkFlag loss disposals with a repurchase of the same asset inside the window. FREE. Typical input {"disposals": <from build_lots>, "acquisitions": [{"asset": "ETH", "ts": "2026-02-10T10:00:00Z", "qty": "2"}]} returns {"flags": [{"row": "cb7", "asset": "ETH", "loss": "-410.00", "repurchases": [...]}], "rule_status": "..."}. The 30-day window before and after the sale is the one IRC 1091 uses for stock or securities; as checked on the verification date that statute had not been extended to digital assets that are not securities, so the output is a heads-up for planning, not an adjustment. Use when reviewing loss harvesting. Not a determination that any rule applies. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong an
disposalsarrayrequiredacquisitionsarrayrequiredwindow_daysintegerlp_position_mathImpermanent loss, hold-vs-pool value and basis split for a two-asset constant-product pool. FREE. Typical input {"deposit": {"asset_a": "ETH", "qty_a": "1", "price_a": "2000", "asset_b": "USDC", "qty_b": "2000", "price_b": "1"}, "current_prices": {"ETH": "3000", "USDC": "1"}} returns {"il_pct": "-2.02", "hold_value": "5000.00", "pool_value": "4898.98", "deposit_value": "4000.00", "basis_split": {...}}. The pool value assumes x*y=k with no fees; add fees_earned_fiat to see the net. The basis split is the deposit's fiat value at deposit, allocated by each side's share, which is the arithmetic a lot engine needs if the LP position is treated as one asset. Use for DeFi position reviews. Not a determination of whether the deposit is a taxable exchange. Errors: on invalid, missing, or malformed
depositobjectrequiredcurrent_pricesobjectrequiredfees_earned_fiatnumberDerived by comparing consecutive probes — changes in era, protocol version, build and reachability.
Add this badge to your README — it updates automatically as measurements change.
[](https://mcpmetrics.io/servers/com-moltlinestudio-taxlots)<a href="https://mcpmetrics.io/servers/com-moltlinestudio-taxlots"><img src="https://mcpmetrics.io/badge/com.moltlinestudio/taxlots/era.svg" alt="mcpmetrics"></a>You are seeing the last 7 days. Sign up for the full history. Which check failed and why is in the dashboard.
Sign up free to seeThe catalog entries whose name and description are closest to this one, found with the same index the search box uses.
Dimensional weight, parcel fit, landed cost and freight class. 4 of 6 tools free.
One-call market verdict, plus funding, open interest, execution cost, volatility and macro
Risk-scan a diff, flag AI-generated-code tells, find secrets. 5 of 7 tools need no account.
Real-time crypto data for AI assistants. Get live price spreads between Binance and OKX, perpetual funding rates, Cash & Carry arbitrage yields, and exchange status. No API key required.
Exact Claude API cost calc with real cache economics, plus a tiktoken-misuse scanner.
SEC EDGAR crypto filing radar MCP with x402-paid Base USDC data URLs.
| Run | Era | Modern | ms | Legacy | ms | Versions |
|---|---|---|---|---|---|---|
| 2026-09-13 04:35:29 | Legacy | 400 | 431 | 200 | 244 | 2025-11-25 |
| 2026-09-13 01:33:33 | Legacy | 400 | 419 | 200 | 368 | 2025-11-25 |
| 2026-09-12 23:31:36 | Legacy | 400 | 178 | 200 | 429 | 2025-11-25 |
| 2026-09-12 21:29:15 | Legacy | 400 | 159 | 200 | 223 | 2025-11-25 |
| 2026-09-12 19:27:29 | Legacy | 400 | 221 | 200 | 438 | 2025-11-25 |
| 2026-09-12 17:24:09 | Legacy | 400 | 940 | 200 | 870 | 2025-11-25 |
| 2026-09-12 15:21:42 | Legacy | 400 | 175 | 200 | 173 | 2025-11-25 |
Each block is one measurement round. Green: working response. Amber: responded but the server was returning errors (5xx). Red: no response at all.
Each cell is one probe run. Faded cells are incomplete probes — one leg did not answer, so the era is inconclusive.
The two probe legs separately: modern server/discover and legacy initialize.
Comments
Sign in to write a comment
No comments yet. Be the first.