用途 acb-tax-mcp 是一个 MCP(Model Context Protocol)服务器,用于从交易历史计算加拿大调整成本基础(ACB)和资本利得。它面向 LLM 智能体,让用户通过自然语言向助手提问,例如“我 2024 年的资本利得是多少?”或“我是否触发了任何表面亏损?”,由服务器按 CRA 规则处理交易,而不是依赖电子表格。
主要能力 实现 CRA 平均成本法:同一证券的所有股份合并为一个 ACB,收益基于平均成本计算,而非 FIFO。 实现表面亏损规则:亏损被拒绝并递延计入替代股份的 ACB——替代股份指在卖出前或后 30 天内买入的股份。 处理佣金和每笔交易的加元汇率换算。 以结构化 JSON 返回结果完成计算。 支持 Claude Desktop、Claude Code、Cursor 或任何兼容 MCP 的客户端。
使用方式 使用前需 Python 3.10+,并要求 MCP Python SDK 2.x(mcp>=2,<3)。SDK 1.x 在上游已功能冻结,不再受支持;0.4.0 是最后一个可在其上运行的版本。 无需安装即可试用:打开 Glama 服务器页面,使用 Try in Browser 在包含若干示例交易的沙箱中调用工具。 从源码运行(不安装)的命令在官方资料中未提供具体内容。 配置客户端:在 claude_desktop_config.json 中配置。 向工具提供交易列表,或提供 .csv / .json 文件路径。 CSV 使用与表头行相同的列名。如果经纪商导出的表头不同(如 "Trade Date"、"Activity Type"、"Symbol"、"Quantity" 等),先通过 normalize_broker_csv 运行。 示例:examples/sample_trades.csv 是一个现成的经纪商风格导出文件,包含别名表头、带 $ 格式的数字、一行 DRIP、一行股息(因原因被跳过)、一笔带 FX 的美元交易,以及一个表面亏损场景。可以让助手用 normalize_broker_csv 清理它,并对结果运行 calculate_acb。
适用场景 可向助手发出以下指令: “计算 ~/trades.csv 中交易的 ACB 和资本利得。” “我 2024 年的资本利得报告是什么?” “这些卖出是否触发了表面亏损?” “XEQT 当前的账面成本是多少?” “这是我的 RBC 活动导出——清理并计算我的 ACB。” “XEQT 价格为 $35.20,VTI 为 $305.40 美元(1.37 加元):我的未实现收益是多少?”
表面亏损示例 买入 100 股 @ $10,卖出 100 股 @ $8(亏损 $200),9 天后又以 $8 重新买入 100 股: $200 的亏损被拒绝,并加到重新买入股份的 ACB 中(新的每股 ACB 变为 $10),因此会在未来卖出时收回。
限制 平均成本法按相同财产计算。由于 CRA 规则在纳税人层面合并相同财产,应将同一证券在所有账户中的全部交易一起提供。工具按用户提供的证券键进行合并。 表面亏损使用标准的“三者取最小”测试,单次前向遍历。深层链式或重叠的表面亏损可能需要逐案专业判断。 尚未处理:资本返还、再投资/名义分配(ETF 幻影分配)、股票拆分、期权及其他公司行动。这些会影响 ACB,已在路线图中。 汇率必须按每笔交易提供(使用交易日期汇率)。工具不获取汇率。 注册账户(TFSA/RRSP)没有资本利得;此工具适用于非注册(应税)账户。 不是税务建议。
许可证 MIT。见 LICENSE。