关于 Canli Paper Trading
Canli Paper Trading 是供 Agent 操作 Alpaca 模拟账户的 MCP 服务。订单须通过可配置的交易前检查并取得短时有效的确认令牌才能提交;它不支持实盘交易。
主要功能
- 01查看模拟账户与订单状态
- 02交易前限额检查与熔断开关
- 03预览订单并生成限时令牌
- 04按目标权重生成整股订单
- 05签名证明与防篡改日志
- 06可选的私密余额承诺
适用场景
- 01提交前检查拟议的模拟订单
- 02将模拟投资组合调整至目标权重
- 03审查或验证交易证明
- 04避免模型看到账户数值
MCP 相关
通过本地 stdio 向 MCP 客户端提供账户、预览、再平衡、发送和验证工具。只有经令牌批准的订单才能发送,且服务仅支持 Alpaca 模拟交易。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y canli-paper-trading-mcpALPACA_PAPER_KEY_ID密钥Your Alpaca paper API key id (starts with PK).ALPACA_PAPER_SECRET_KEY密钥Your Alpaca paper API secret key.CANLI_HOMEDirectory with limits.json, KILL and the order log; default ~/.canli.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
5收录的工具列表 · 更新于 4 天前
此工具无需参数。
详细介绍
canli-paper-trading-mcp
让 AI Agent 在无法绕过检查的情况下交易你的 Alpaca 模拟账户。每笔 订单都会根据你自己的限额、市场时钟和熔断开关进行预检;只有通过检查的订单才会获得 一个有效期为五分钟的确认令牌,且只有持有令牌才能发送订单。仅支持模拟交易:此软件包 不包含实盘交易主机,并且会拒绝实盘密钥。
本地 stdio。你的密钥保存在环境中;除 Alpaca 模拟 API 外,不会发送到其他任何地方。
工具
| 工具 | 功能 |
|---|---|
paper_account | 股权、现金、购买力、持仓、未结订单、市场时钟、熔断开关,以及订单日志经过验证的链头。 |
preview_paper_orders | 使用实时模拟数据对订单运行交易前检查;只有所有订单都通过时才会返回令牌。 |
rebalance_to_weights | 将目标权重(例如来自回测的权重)转换为整股订单,先卖出,再进行检查并返回令牌。 |
send_paper_orders | 使用令牌发送预检通过的订单,或按 ID 取消未结订单。唯一会更改任何内容的工具。 |
检查项
交易前检查使用 canlicapital 共享的核心模块(js/pretrade-core.js,在仓库中逐字节镜像并经过测试)。每笔订单都会检查:熔断开关、允许的交易标的和订单类型、市场开盘或收盘状态、价格限制、订单和每日名义金额上限、持仓、针对整个投资组合的总敞口和净敞口上限、仅减仓完整性,以及估算成本(半价差;若你提供费用和成交量,还会计入佣金和市场冲击)。拒绝时会列出所有原因;不会调整订单规模。
你的限额保存在 CANLI_HOME/limits.json(默认为 ~/.canli),例如:
{ "max_order_notional": 10000, "max_position_frac": 0.2, "max_gross": 1.0, "allowed_types": ["limit"] }
调用可以为单次预检收紧限额,但不能放宽限额。只要该目录中存在名为 KILL 的文件,所有预检都会失败,所有发送操作都会被拒绝。
令牌
- 绑定到预检的确切订单:更改数量后,令牌将无法通过验证。
- 只能使用一次,有效期为五分钟,因此发送操作不会依据过期检查结果执行。
- 使用仅存在于运行中的服务内的密钥签名;服务重启后会拒绝旧令牌。
- 每笔已发送订单都会携带一个根据其令牌生成的
client_order_id。Alpaca 会拒绝重复 ID,因此重试发送不会导致重复成交。
订单日志
每次发送和取消都会追加到 CANLI_HOME/paper-orders.jsonl,每行都包含上一行的哈希值。paper_account 会报告链是否仍能通过验证;编辑任意一行都会使验证失败。
签名证明与私密余额
每次预览、再平衡和发送都会返回一份 attestation:已检查的订单(其哈希)、所依据的限额(其哈希)、判定结果、熔断开关、时间,以及账户权益和持仓的承诺;这些内容由首次在你的机器上生成的 Ed25519 密钥签名(CANLI_HOME/attest-ed25519.pem,权限为 0600;密钥不会离开这台机器)。将 attest-ed25519.pub.pem 提供给审计员或交易对手;verify_attestation 会检查声明是否由该密钥签名且未被篡改。在 Node 24.7 或更高版本上,每份声明还会使用 ML-DSA-65 密钥(FIPS 204,一种后量子签名;attest-ml-dsa-65.pem)进行签名,并在同一份声明中列出两把密钥:请提供两把公钥,且两份签名都必须有效,这样即使其中一种方案被破解,声明仍无法伪造。
设置 CANLI_PAPER_PRIVATE=1 后,模型就看不到账户的数值:paper_account 会返回承诺(随机盐值与数值的 SHA-256),而不是权益、现金、购买力和持仓;rebalance_to_weights 会计算订单规模,但不会显示订单;检查消息中的数字会被隐藏。盐值只会写入 CANLI_HOME/commitments.jsonl,因此你之后可以向他人公开某项承诺(展示其数值和盐值),而 verify_attestation 会对此进行验证。
这是对承诺的签名,并非零知识证明:你向谁公开数值,对方就会知道该数值;检查逻辑由此服务的代码执行。经纪商接受 API 密钥,而非证明;无论哪种模式,密钥都保存在环境变量中,不会展示给模型。
快速开始
- 创建 Alpaca 账户并打开模拟交易面板;生成模拟交易 API 密钥(密钥 ID 以
PK开头)。 - 在环境变量中添加服务器及你的密钥:
claude mcp add canli-paper -e ALPACA_PAPER_KEY_ID=PK... -e ALPACA_PAPER_SECRET_KEY=... -- npx -y canli-paper-trading-mcp
然后询问:“将我的模拟账户再平衡至 60% SPY 和 40% TLT,向我展示检查结果,并在全部通过时发送订单。”
可与 canli-quant-mcp 配合使用:先在那里回测策略,再在这里将模拟账户调整至目标权重。
本工具不提供什么
本工具不会交易真实资金,也没有任何设置可以让它交易真实资金。本工具不会决定交易什么。模拟成交由 Alpaca 模拟,其条件比真实市场更宽松(没有排队顺序影响,也没有市场冲击);策略在模拟环境中有效,并不代表它已证明能在实盘中奏效。
MIT 许可协议。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。