
Acb Tax Mcp
io.github.haiiibinPublished by GitHub account haiiibinv0.5.0Updated Oct 24, 2026
Canadian ACB and capital gains: average-cost, per-disposition gains, superficial-loss detection.
Overview
Local MCP server that computes Canadian adjusted cost base and capital gains from trade history, with per-disposition gains and superficial-loss checks.
- What you can do
- Calculate ACB and capital gains from a transaction list or CSV/JSON file, returning holdings, dispositions and per-year summaries
- Report current holdings and book cost, and unrealized gains against market prices you supply
- Produce a Schedule 3-style capital gains report for one tax year, plus an aggregated per-security Schedule 3 summary
- Flag superficial losses under the 30-day rule with the denied amount per event
- Normalize a raw broker activity export into clean transactions, reporting skipped rows with reasons
- When to use it
- Useful when you hold securities in non-registered Canadian accounts and want an assistant to run CRA average-cost and superficial-loss rules over your trades instead of a spreadsheet, for example to answer questions about a year's capital gains or a Schedule 3 filing.
- Requirements
- Runs locally over stdio; Python 3.10+ and MCP Python SDK 2.x, installed with uv tool install or pip install (package acb-tax-mcp). No accounts, API keys or environment variables are declared. You supply transactions as a list or a CSV/JSON file path, including per-trade FX rates, since it does not fetch exchange rates.
Installation
In SourceWeft
- Open Acb Tax Mcp in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
acb-tax-mcp
[CI] [PyPI] [PyPI Downloads] [Python] [Glama] [MCP Registry] [Listed in awesome-mcp-servers] [License: MIT]
An MCP server that computes Canadian adjusted cost base (ACB) and capital gains from your trade history: average-cost tracking, per-disposition gains, and superficial-loss detection, returned as structured JSON.
Ask your assistant "what are my capital gains for 2024?" or "did I trigger any superficial losses?" and it runs the CRA rules over your transactions instead of you wrestling a spreadsheet.
⚠️ This is a calculation aid, not tax advice. Verify every number before you file, and consult a professional for anything non-trivial. See Limitations.
Works with Claude Desktop, Claude Code, Cursor, or any MCP-compatible client.
Features
Implements the CRA average-cost method (all shares of a security pool into one ACB; gains are against the average, not FIFO) and the superficial-loss rule (loss denied and deferred into the ACB of substitute shares bought within 30 days before or after the sale). Commissions and per-trade CAD FX conversion are handled.
Install
No install needed to try it: open the Glama server page and use Try in Browser to call the tools against a sandbox with a couple of sample transactions.
Requires Python 3.10+.
Requires MCP Python SDK 2.x (mcp>=2,<3). SDK 1.x is feature-frozen upstream and no longer supported here; 0.4.0 is the last release that ran on it.
Run from source without installing:
Configure your client
Claude Desktop
In claude_desktop_config.json:
Claude Code
Transactions
Give the tools a list of transactions (or a path to a .csv / .json file).
CSV uses the same column names as a header row. If your broker's export uses different headers ("Trade Date", "Activity Type", "Symbol", "Quantity"...), run it through normalize_broker_csv first.
Want something to try immediately? examples/sample_trades.csv is a ready-made broker-style export with aliased headers, $-formatted numbers, a DRIP row, a dividend row (skipped with a reason), a USD trade with FX, and a superficial-loss scenario. Ask your assistant to clean it with normalize_broker_csv and run calculate_acb on the result.
Usage
- "Calculate the ACB and capital gains for the trades in
~/trades.csv." - "What's my capital-gains report for 2024?"
- "Did any of these sales trigger a superficial loss?"
- "What's my current book cost for XEQT?"
- "Here's my RBC activity export -- clean it up and compute my ACB."
- "XEQT is at $35.20 and VTI at $305.40 USD (1.37 CAD): what are my unrealized gains?"
Example
Superficial loss example
Buy 100 @ $10, sell 100 @ $8 (a $200 loss), then rebuy 100 @ $8 nine days later:
The $200 loss is denied and added to the ACB of the repurchased shares (new ACB per share becomes $10), so it is recovered on a future sale.
Limitations
Read these before relying on the output.
- Average-cost, per identical property. Feed all trades of the same security across your accounts together, since the CRA rule pools identical property at the taxpayer level. The tool pools by the
securitykey you provide. - Superficial losses use the standard least-of-three test with a single forward pass. Deeply chained or overlapping superficial losses can need case-by-case professional judgment.
- Not yet handled: return of capital, reinvested/notional distributions (ETF phantom distributions), stock splits, options, and other corporate actions. These affect ACB and are on the roadmap.
- FX must be supplied per transaction (use the transaction-date rate). The tool does not fetch exchange rates.
- Registered accounts (TFSA/RRSP) do not have capital gains; this tool is for non-registered (taxable) accounts.
- Not tax advice.
Development
License
MIT. See LICENSE.
Source: README.md at commit 3408d12
Tools
0Version history
2- v0.5.0LatestOct 9, 2026
- v0.4.0Sep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts