关于 Canli Capital
Canli Capital 将 345 个金融工具和 56 个提示词整合为一个 MCP 服务,面向金融研究、量化分析、文件与市场数据。它以五个入口工具搜索并调用各功能包,支持本地及托管连接。
主要功能
- 01覆盖研究与量化的 345 个工具
- 02SEC 文件与时点基本面数据
- 03回测验证与策略分析
- 04市场、宏观、利率、赔率及 DeFi 数据
- 05交互式图表与分析视图
- 06批量调用和精简结果
适用场景
- 01根据 SEC 文件核对公司数据
- 02分析投资组合、期权和市场风险
- 03检查策略的过拟合与数据泄漏
- 04探索利率、预测市场和 DeFi
MCP 相关
向 MCP 客户端提供金融工具和提示词,可通过本地进程或托管 URL 连接。客户端使用五个前置工具搜索工具、查看参数说明并执行调用。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://canlicapital.com/mcp/canliclaude mcp add --transport http arhancanli-canli https://canlicapital.com/mcp/canli{"mcpServers":{"arhancanli-canli":{"type":"http","url":"https://canlicapital.com/mcp/canli"}}}在 Cursor 中打开{"servers":{"arhancanli-canli":{"type":"http","url":"https://canlicapital.com/mcp/canli"}}}在 VS Code 中打开{"mcpServers":{"arhancanli-canli":{"type":"http","url":"https://canlicapital.com/mcp/canli"}}}{"mcpServers":{"arhancanli-canli":{"serverUrl":"https://canlicapital.com/mcp/canli"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
3| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| limit | integer | 否 | 默认值为 6。 |
| query | string | 是 | 用通俗语言描述你的需求。 |
详细介绍
canli-mcp
集 Canli Capital 的所有 MCP 服务于一体:为 Claude、Cursor 或任何 MCP 客户端提供 345 个金融工具。
claude mcp add canli -- npx -y canli-mcp
无需密钥,也无需账户。添加到 VS Code
· 在浏览器中试用视图
· 它能回答的问题
· 托管服务,无需安装:https://canlicapital.com/mcp/canli

- 聊天中的交互式视图:可缩放和平移的蜡烛图,带移动平均线、布林带、RSI 和 MACD;只需点击即可查看任意到期日的期权链;滑块可重新运行回测、记录尝试过的每项设置的回测仪表板;树图;带有「批准」按钮的模拟订单票据。0.11.0 新增:点击图块即可打开对应图表的市场地图;与早前日期对比并播放五年变化的国债收益率曲线;按利润率和增长绘制图表的财务报表;波动率曲面;多个价格的对比图,附带相关性热力图,以及它们合计代表的独立押注数量;所有表格均可排序。使用
view: true时,用户可看到完整绘制的结果,而模型收到的是摘要:在我们的测试中,字符数减少了 19 至 47 倍。 - 量化金融:235 种工具,涵盖业绩与风险、期权和奇异期权、固定收益、投资组合、计量经济学、指标,以及包含 399 个策略分项的策略库,并带有多重检验校正。
- 回测验证:折减夏普比率、过拟合概率、数据窥探测试、数据泄漏检查和安慰剂测试,均在你的机器上运行。
- 基于特定时点的 SEC 基本面数据。
- 分析师可用的申报文件,以及答案核查:严格按照申报内容呈现的财务报表(合并多年的数据,并在首次报告的数据旁显示重述和拆股情况);任何申报文件中包含某项数据的表格(追溯查看此前的申报文件);以区间形式列出业绩指引的业绩发布,以及将上季度的指引与实际结果对照;还有
verify_claims,可核对草稿中的数据与申报文件:标记为已确认、相矛盾(附申报数据及错误数据对应的来源)或未报告。 - 来自源头的市场数据,无需密钥:所有美国上市公司的筛选结果、公司报告、事件研究、SEC 申报文件及其章节、内部人交易、13F 和持股比例达 5% 的持有人、基金和 ETF 投资组合、指数成分股、卖空权益、场外交易量、未交割证券、期货持仓、管理层薪酬、分部收入、期权链和波动率曲面、VIX 期货曲线、美联储决议和预测、经济日历、美国国债收益率和拍卖、联邦债务、FRED、世界银行和 OECD 数据,以及股票、货币、期货、指数和加密货币的价格。0.7.0 新增:两份申报文件之间的变动、实时申报动态、同行对比、债务概况、会计风险评分(Beneish、Piotroski、Altman)、13F 持股广度、投资组合透视、股票变动原因、新闻和加密货币资金费率。0.8.0 新增:美国联邦合同(USAspending)、包含试验结果和 FDA 批准信息的药物研发管线、SEC 评论函、股价所隐含的增长率(基于申报文件的逆向 DCF)、银行电话报告(FDIC)、10-K 文件措辞随年份的变化、计划中的内部人出售(Form 144)、IPO 储备项目,以及各云平台的 GPU 算力价格及其每日指数。
- 美国以外的官方发布数据:欧洲公司的年度报告原始申报文件(ESEF);央行利率(SOFR、欧元短期利率、SONIA、欧洲央行和英格兰银行利率,以及 BIS 收集的约四十种政策利率);Polymarket 和 Kalshi 交易者为某项结果支付的价格;以及来自 DefiLlama 的 DeFi 锁定总价值、手续费和稳定币供应量。
- Canli Capital 的开源研究记录。
- 无前视偏差的因子回测、广度实验室(将 24 种信号整合到多分项投资组合中,并统计真正独立的押注数量)、基金持仓的价格面板,以及数据标注(盲标数据包、标注者间的一致性、附带数据表的黄金标准集)。参数扫描可用每个核心运行(也可拆分后由其他机器运行并合并,并进行核验),并将最佳结果与从多个结果中挑选最佳值的运气因素进行对比。
- 通过交易前检查执行 Alpaca 模拟交易,每项检查均带有签名(Ed25519 和后量子算法 ML-DSA-65),以便审计人员验证;另有隐私模式,模型无法看到账户数据。
- 面向企业:策略文件(允许运行哪些工具、是否禁用订单、每分钟调用次数),以及记录每次调用且具备防篡改能力的审计日志,使用 Ed25519 和后量子算法 ML-DSA-65 签名;另有 SEC 申报文件到达时的实时动态。 每个包都是独立发布并经过单独测试的服务。此软件包会将它们加载到同一个进程中,并在前端提供五个工具。
npx -y canli-mcp
Claude Code:
claude mcp add canli -- npx -y canli-mcp
Claude Desktop、Cursor 或任何 MCP 客户端:
{ "mcpServers": { "canli": { "command": "npx", "args": ["-y", "canli-mcp"] } } }
托管服务,无需安装:在 claude.ai、ChatGPT 或任何接受 URL 的客户端中,将 https://canlicapital.com/mcp/canli 添加为连接器(claude mcp add --transport http canli https://canlicapital.com/mcp/canli)。
它运行的版本包含 quant、validation、fundamentals、research、backtest 和 markets 包。文件参数($file)、价格和模拟交易需要本地服务:那里的文件会是服务所在磁盘上的文件;无需密钥的价格来源仅供个人使用;模拟交易则需要你自己的经纪商密钥。托管服务不会在请求之间保留任何内容,因此请在一次 run_tool 批处理中串联调用;每个调用方每分钟可发出 60 个请求。
上下文和启动
使用 Node 24,在 2026-10-24 通过 bench/context.py 测量(客户端收到的工具对象共 o200k 个 token,加上服务说明;启用全部七个包,设置 CANLI_PACKS=all;启动时间是从启动到工具列表出现的中位时间,测试机器同时运行其他任务;bench/context-2026-10-24-0.11.0.json):
| 分别运行七个服务 | canli-mcp | |
|---|---|---|
| 初始工具列表和说明 | 53,974 个 token(115 个工具) | 2,408 个 token(5 个工具) |
| 进程数 | 7 | 1 |
| 启动时间 | 每个 87-139 ms | 149 ms |
各包新增的工具不会给组合服务带来任何前期成本:从 0.6.0 起,七个服务自己的工具列表从 39,962 个 token 增长到 53,974 个。0.10.0 的交互式视图增加了 76 个 token,0.11.0 的视图又增加了 13 个。
- 上下文中只有五个工具。 模型使用
find_tool搜索,使用describe_tool读取一个工具的架构,并使用run_tool调用任意工具;使用最多的history和financial_statements也会直接列出(CANLI_FRONT可修改这些工具;设为空时只列出三个工具)。针对搜索最后一次更改之后编写、且从未用于调优的 48 条日常请求,正确工具有 46 次排在首位,47 次进入前三(0.2.1 版本分别为 25 次和 29 次)。针对 0.5.0 和 0.6.0 新增的八个工具,在测量前编写的 41 条请求中,正确工具有 36 次排在首位,38 次进入前三;随后将请求中使用的两个词加入索引(分别为 38 次和 40 次)。针对 0.7.0 到 0.9.0 的工具,测量前编写的 43 条请求中,有 41 次排在首位,42 次进入前三。test/search.test.mjs收录了这些请求以及另外 176 条。 - 用到之前不会加载任何内容。 启动时会读取包含全部 345 个工具的预构建索引;只有在某个包中的工具首次运行时,才会加载该包的代码。
- 通过文件传递数据,而非粘贴。 任何参数都可以使用
{"$file": "prices.csv", "column": "close"}(或"columns": ["SPY", "TLT"]或"all")。对于 1,000 个价格值,这只需 23 个 token,而不是 4,893 个;模型复制时也不会漏掉数字。 - 一次往返执行多个调用。
run_tool接受calls(最多 25 个)。某个调用可以使用前一个调用的输出,例如{"$result": 0, "path": "rows", "pick": [0, 1]},因此中间数据不会经过模型;return: "last"则只返回最终答案。用这种方式标注 1,000 个价格并为标签加权,工具输入只需 72 个 token;若先读取标签再将其输入下一次调用,则需要 31,917 个 token。 - 在精度足够时缩短数字。
digits: 5会对每个结果进行四舍五入。
将工作流作为提示词
支持显示 MCP 提示词的客户端(Claude Desktop 和 Claude Code 会将它们列为斜杠命令)提供三十一种工作流。每种工作流都会运行一次批处理 run_tool 调用,并说明如何根据结果撰写内容:
| 提示词 | 需要提供 | 运行内容 |
|---|---|---|
research_report | 一个股票代码 | 一份完整的研究报告:业务和各业务分部、按申报文件披露的财务报表、业绩与指引的对比、同行、股价所隐含的增长、债务、股息和回购、Beneish、Piotroski 和 Altman 筛查、风险因素的变化、持股广度、内部人士、新闻 |
market_today | 无 | 美国指数和 VIX、按月度表现排名的行业板块、收益率、美元、石油、黄金、比特币及海外市场在一天至一年内的表现、本周重要数据发布、美联储最新决策,以及预测市场对其下次决策的定价 |
stock_chart | 一个股票代码 | 两年价格的交互式图表(蜡烛图、均线、布林带、RSI、MACD)和期权链,并显示股价与 50 日及 200 日均线的对比、RSI 和期权隐含波动幅度 |
strategy_lab | 一个股票代码 | 自 2010 年以来的 50/200 日均线交叉策略仪表板,带滑块、与买入并持有的对比数据,以及对尝试过的每种设置进行的运气检验 |
compare_stocks | 2 至 8 个股票代码 | 五年并排对比:1 美元的增长、每只股票的回报率、波动率、夏普比率、最大回撤和贝塔系数、相关性热图,以及独立押注数量 |
yield_curve | 无 | 美国国债收益率曲线与一个月前、一年前和五年前的对比,并以动态方式展示五年来的变化,同时显示 10Y-2Y 和 10Y-3M 利差及其倒挂频率 |
volatility_surface | 一个股票代码 | 按行权价和到期日划分的隐含波动率:各到期日的微笑曲线、平值和 25 delta 的期限结构、偏斜,以及以热图呈现的波动率曲面 |
statement_charts | 一个股票代码 | 将按申报文件披露的财务报表制成图表:任意项目的多年变化、利润率、资产负债表项目占资产的比例、增长 |
dividend_check | 一个股票代码 | 多年来的股息和回购与收益及自由现金流的对比、经拆股调整的股息记录、收益率、到期债务、Altman 和 Piotroski 筛查 |
company_brief | 一个股票代码 | 公司报告、附有新闻稿标题的 8-K 新闻、最新业绩与指引的对比、下次财报日期、内部人士交易、卖空持仓、期权隐含波动幅度 |
earnings_preview | 一个股票代码 | 财报日期和时间、公司对本季度的指引及其是否达到上次指引、期权定价所隐含的波动幅度、过往财报发布后的反应(事件研究)、近期业绩新闻标题、分部收入 |
financial_history | 一个股票代码 | 四年的按申报文件披露的财务报表,并标出重述和拆股 |
fact_check | 一个股票代码和一份草稿 | 核对草稿中的每个报告数字与申报文件是否一致,并返回修正后的草稿 |
macro_snapshot | 无 | 美联储最新决策和预测、预测市场对其下次决策的定价、SOFR 与美联储利率区间的对比、未来两周的重要数据发布、CPI、核心 PCE、失业率、美国国债收益率曲线、VIX 期货曲线 |
global_rates | 无 | 美联储、欧洲央行、英格兰银行和日本银行的政策利率,以及与之并列的 SOFR、欧元短期利率和 SONIA、美国国债收益率曲线 |
european_company | 公司名称或 LEI | 公司最新的 ESEF 年报:收入、利润、EPS、资产、权益、现金流和股息与往年数据的对比,并附报告链接 |
defi_snapshot | 一个协议(可选) | 稳定币供应量及其变化、以太坊和 Solana 上的锁定价值、协议的锁定价值、费用和收入 |
ownership | 一个股票代码 | 持股超过 5% 的股东和维权投资者、内部人士买卖、卖空持仓 |
filing_changes | 一个股票代码 | 最新 10-K 的风险因素和 MD&A 与上一份文件的对比:新增、删除和改写的段落,以及出现频率上升的词语 |
why_it_moved | 一个股票代码和日期 | 当日超出市场表现的涨跌幅、其异常程度,以及相关申报文件和新闻 |
portfolio_xray | 股票代码和权重 | 穿透查看基金持仓、基金之间的重叠部分、最大敞口 |
peers_and_red_flags | 一个股票代码 | 行业同行、债务和借款、机构持股广度、Beneish、Piotroski 和 Altman 筛查 |
human_check | 一家公司和一份草稿 | 对草稿中的数字进行盲法标注的数据包,附带指南和答案 |
valuation_check | 一个股票代码 | 股价所隐含的自由现金流增长(分别根据最新年度和三年平均值计算)、其敏感性,以及公司的同行 |
language_drift | 一个股票代码和主题(可选) | 风险因素和 MD&A 的逐年相似度、最大的改写及其出现频率上升的词语、主题出现频率 |
biotech_catalysts | 一个股票代码 | 预计明年完成主要终点的试验、按阶段划分的研发管线、FDA 批准、近期 8-K 新闻 |
government_exposure | 一个股票代码 | 按机构划分的联邦合同义务和最大合同金额,与收入对比;SEC 评论函主题 |
bank_health | 一家银行 | 八个季度的 FDIC 银行监管报告数据:存款及未保险存款占比、资本、贷款质量、未实现亏损、资产回报率 |
insider_watch | 一个股票代码 | 计划出售(Form 144)与已报告交易(Form 4)的对比 |
ipo_watch | 天数(可选) | SPAC、基金和后续发行之外的 S-1 和 F-1 申报者,以及已完成定价的发行 |
backtest_check | 一个收益率文件 | 对尝试过的各个变体计算经通胀调整的夏普比率和所需业绩记录,然后制定数据泄漏和安慰剂检验方案 |
只有在某个提示词中提及的所有工具都位于已启用的包(CANLI_PACKS、CANLI_OFFLINE)中时,才会提供该提示词;test/prompts.test.mjs 会根据每个工具自身的架构检查每次调用。 | ||
提示词与 tools/list 分开请求。其上下文开销取决于客户端如何纳入提示词和资源元数据。 |
这些包还自带 25 个提示词,因此完整服务共提供 56 个。其名称会标明所属的包,例如 fundamentals.known_on_date、quant.audit_backtest、
validation.stress_my_strategy 和 research.literature_review。这些提示词通过 run_tool 路由工具调用,保留源包对提示词参数的检查,并转发其补全辅助功能。
15 个静态资源和 9 个资源模板包含 399 个投资组合规格、参考方法、精确的输入/输出架构、概念映射、限制和客户端示例。
各包的资源方案会让名称保持区分:canli-quant://、canli-validation://、
canli-fundamentals:// 和 canli-research://。例如,可读取
canli-fundamentals://schemas/cross_section。原始客户端示例会保留各包的本地或托管连接。
已禁用的包不提供指南;列出指南时会读取预构建的元数据,不会加载任何包代码。只有在使用提示词、资源或补全功能时,才会加载指南处理程序。
在聊天中展示结果
支持 MCP Apps(2026-01-26 扩展)的客户端会将每个 run_tool 结果显示为答案旁边的页面,并将部分结果显示为交互式视图:
- 价格(
price_history):可切换蜡烛图或折线图,支持缩放(按住 Ctrl 或 ⌘ 并滚动、使用 + 和 −,或选择从一个月到全部的时间范围)、拖动平移、20、50 和 200 日移动平均线、布林带、成交量,以及 RSI 和 MACD 面板;光标悬停时显示每根柱线的数据,并提供表格视图。指标使用量化工具包自有的实现(采用 TA-Lib 的定义),测试已逐项核对数值。 - 期权链(
options_chain):看涨期权和看跌期权围绕行权价镜像排列,以底色标示价内状态,用柱线显示未平仓合约数,并在行权价之间显示价格线;可查看报价、希腊值或交易活动,通过菜单选择任意到期日,并查看所选合约到期时的收益和盈亏平衡点。 - 回测(任意
backtest_*配方):显示相对于买入并持有的表现、交易标记、回撤、按需显示的标普 500(SPY)以及可排序和筛选的交易记录。滑块会使用新参数重新运行回测;仪表板会统计每种尝试过的设置数量,并可通过strategy_sweep全部运行,以计算去膨胀夏普比率,避免人工调参把运气说成实力。对两个参数运行strategy_sweep时会生成热图,点击单元格即可打开相应仪表板。 - 持仓和权重(
paper_account、基金投资组合、优化器):按价值确定大小、按收益着色的树状图。 - 模拟订单(
preview_paper_orders、rebalance_to_weights):订单单据会显示每笔订单的价格、名义金额、成本和检查结果,以及令牌倒计时和 Approve 按钮;点击后会通过send_paper_orders发送与预览完全相同的订单,并显示回执。 - 市场(
market_overview):将每个指数、行业、收益率、货币、商品和加密货币显示为方块,并按一天、一周、一个月、三个月、年初至今或一年的涨跌幅着色;可按排名或顺序排列,并显示表现最佳者、最差者以及上涨的行业数量。点击方块可打开相应市场的蜡烛图,点击 Refresh 可重新加载地图。 - 美国国债收益率曲线(
treasury_yields):显示某一天的曲线,并与一个月、一年和五年前的曲线对比(一次性加载五年历史数据);提供滑块和 Play 按钮,可随时间播放曲线;显示多年来的 10Y-2Y 和 10Y-3M 利差及倒挂天数占比;光标悬停时显示各期限的利率。 - 财务报表(
financial_statements):显示按申报内容呈现的损益表、资产负债表和现金流量表,并显示每一项的趋势;可按申报内容、占收入的比例(利润率)、占总资产的比例,或相较上一年的增长率查看;点击行可绘制其多年的趋势图。 - 隐含波动率(
volatility_surface):显示各到期日按价内外程度划分的微笑曲线、平值和 25 Delta 处的期限结构、偏斜曲线,以及热力图形式的完整曲面。 - 一批中包含多个价格:显示从三个月到全部时间范围的单位投资增长曲线;提供可排序表格,列出每项的收益率、CAGR、波动率、夏普比率、最大回撤,以及与第一项的相关性和贝塔;还会以热图显示其每日收益率的共同变动情况(按给定顺序或聚类),并列出平均配对值、最接近和最对立的配对、最佳分散投资标的以及独立投资机会数量(特征值之和的平方除以特征值平方和)。
correlation_matrix结果也会使用相同的热图。测试已核对这些数据与量化工具包自有工具的结果一致。 - 其他所有表格均可按任意列标题排序,较长的表格还提供筛选框。支持全屏的宿主会显示相应按钮。
缩放、平移、排序和切换都不会调用任何内容。到期、松开滑块、S&P 500 或“批准”会通过宿主调用
run_tool(宿主可能会先征求用户同意),答案会返回视图,而不是对话;用户执行的操作会作为上下文传递给模型。启用view: true时,run_tool会向模型发送摘要(包含每个字段,长列表只提供长度,以及端点和范围),并将完整结果发送到视图:两年的价格历史记录从 30,529 个字符缩减到模型端的 1,598 个;包含曲线的回测从 50,320 缩减到 1,369 个;对五只股票进行五年对比则从 357,016 缩减到 7,656 个。如果结果比摘要还短,就会完整发送。没有 MCP Apps 时,view除了添加回测曲线外不会改变任何内容。
每个结果页面还包含数值对齐的表格、按申报时所用量级呈现的报表、显示在对应句子下方且为每个数值给出判定的核验声明、以范围形式呈现并标出实际结果的上一季度业绩指引,以及价格或任何日期序列的折线图。结果中成组的数值(股票市场数据、下一个财报日期、某项协议的费用)会以带标签的数值形式绘出;国债收益率曲线按期限展示,期货曲线按到期日展示,政策利率以各次决议之间的阶梯形式展示,市场概率则以百分比展示。此页面是资源 ui://canli/view,是一个独立文件,无网络访问权限,也不含外部脚本,并在客户端沙箱中绘制;结果中的所有字符串都会经过转义。模型读取的内容不会改变,不支持 MCP Apps 的客户端会忽略该页面。
FEATURES.md 列出了受支持的金融工作流、证据核验方式和仍待完善之处。对于 Claude Desktop,GitHub 发布包还包含一个带有依赖项和 GitHub 构建证明的 .mcpb 扩展。其清单允许你选择启用的工具包和离线模式。
一个 Agent 的完整流程
同一个模型(gpt-5.4-mini)针对七项任务各回答了两次:
- 计算粘贴的价格文件中的夏普比率、回撤和风险价值;
- 根据摘要数据计算经修正的夏普比率;
- 计算 Black-Scholes 价格;
- 对三项资产进行 399 个投资组合的锦标赛;
- 查询 Apple 首次披露的 2019 年每股收益。
答案根据工具自身的数值进行评分(bench/agent-eval.mjs;结果见
bench/agent-eval-2026-10-08.json):
| 正确数 | 每项任务的令牌数 | 轮数 | 秒数 | |
|---|---|---|---|---|
| 六个服务,分别安装 | 14 项中 11 项 | 63,984 | 4.1 | 22.6 |
| canli-mcp,第一版 | 14 项中 10 项 | 43,043 | 5.8 | 9.5 |
| canli-mcp,根据运行结果修复后 | 14 项中 14 项 | 27,267 | 4.2 | 7.2 |
修复来自对运行结果的分析:
- 模型将
find_tool限定在一个工具包中,漏掉了接收其输入的工具,因此移除了工具包筛选条件。 - 模型向一个需要收益率的工具传入了虚构的两点序列,因此量化版经修正的夏普比率工具和概率夏普比率工具现在接受摘要数据,并会拒绝数据过少的情况。
- 模型将
select和return放在工具参数中,因此run_tool现在会将它们移出参数。 - 模型通过
select请求了不存在的字段,因此现在回复会列出可用字段。
这只是一个小模型,每项任务运行两次,所以请将这些差异理解为较大或较小,而不是精确的比率。
隐私
所有操作都在你的设备上运行。canli://privacy 会按工具包说明哪些内容会离开本地:
| 工具包 | 网络 | 磁盘 |
|---|---|---|
| quant | 无 | 无 |
| validation | 无(私有本地模式) | 仅当你传入路径时才读取收益文件 |
| fundamentals | 从 canlicapital.com 获取公开 SEC 数据(你查询的公司和指标) | 在 ~/.cache/canli-fundamentals 缓存这些公开数据(CANLI_CACHE_DIR="" 表示不保留任何内容) |
| research | 从 canlicapital.com 获取公开研究页面(你的搜索词) | 无 |
| backtest | 获取公开 SEC 数据,与 fundamentals 相同;你的价格和信号保留在本地 | 在 ~/.canli/ledgers 保存你的试运行账本 |
| markets | 直接从 SEC EDGAR 和 SEC 的顾问数据库、美国财政部、FRED、FINRA、CFTC、美联储和纽约联储、BLS、BEA、美国人口普查局、OECD、世界银行、Cboe、filings.xbrl.org(欧洲申报文件)、欧洲央行、英格兰银行、BIS、Polymarket、Kalshi、DefiLlama、OKX、GDELT(新闻)、USAspending、ClinicalTrials.gov、openFDA、FDIC 和 Cirrun 的 GPU 价格指数获取数据(你查询的公司、表格、日期、搜索词、利率或序列);价格数据来自 Yahoo Finance 的公开图表数据,或对于美国股票,使用 Alpaca 或 Tiingo 和你的密钥 | 无 |
| paper | 仅使用 Alpaca 的模拟 API,并使用你的模拟密钥 | 在 ~/.canli 保存哈希链式订单日志 |
CANLI_OFFLINE=1 只启用无网络的工具包,且不会加载其他工具包的任何代码。
test/privacy.test.mjs 会以这种方式运行服务端,并使 fetch 和所有网络模块都抛出异常;quant 和 validation 工具仍能正常响应。服务端本身不包含网络或日志记录代码,且只写入策略文件要求的审计日志(两项均已测试)。选择启用的回执(receipt: true)仅包含哈希,不包含数据。
配置
| 变量 | 作用 |
|---|---|
CANLI_PACKS | 要启用的工具包:quant,validation,fundamentals,research,backtest,markets,paper 或 all。默认:除 paper 外全部启用。 |
CANLI_OFFLINE | 1 时只保留 quant 和 validation。 |
ALPACA_PAPER_KEY_ID, ALPACA_PAPER_SECRET_KEY | 模拟密钥(以 PK 开头);设置后会启用 paper 工具包。拒绝使用实盘密钥。 |
CANLI_HOME | paper 工具包保存限额文件、熔断开关和订单日志的位置;审计日志及其密钥也保存在此处;默认值为 ~/.canli。 |
CANLI_POLICY | 策略文件的路径,或以 JSON 格式提供的策略本身(见下文)。未设置时:无策略,也无审计日志。 |
CANLI_PLUGINS | 要加载的插件工具包(见下文):以逗号分隔的包名或 .mjs 路径。 |
发送订单的工具绝不会在批处理中运行:先预览,再单独发送。
面向企业:策略与审计日志
合规团队在一个文件中设定服务可以执行的操作,并将 CANLI_POLICY 指向该文件(或者直接将 JSON 放入 CANLI_POLICY,这在桌面应用的配置中很方便):
{
"tools": { "allow": ["markets:*", "fundamentals:*", "history"], "deny": ["news"] },
"orders": "off",
"calls_per_minute": 120,
"audit": { "arguments": "hash" }
}
工具可以单独命名,也可以按工具包命名(markets:*)。设置允许列表后,只有列表中的工具会运行;拒绝规则优先;"orders": "off" 会拒绝所有发送订单的工具调用。被拒绝的调用会返回原因,并像其他调用一样记录日志。
启用 audit 后,每次调用都会写入 CANLI_HOME/audit/(每个服务进程对应一个 JSONL 文件):包括工具、时间、结果,以及参数和结果的 SHA-256 哈希值(只有设置 "arguments": "full" 时才会记录参数本身)。每条记录都会包含前一条记录的哈希值,因此编辑、删除或插入记录都会破坏链条。每 20 条记录以及服务退出时,都会使用 Ed25519 密钥签署一个检查点;在 Node 24.7 或更高版本上,还会使用 ML-DSA-65 密钥(FIPS 204 后量子签名)签署;两种签名都必须通过验证。密钥首次生成时会保存在你的机器上,并且永远不会离开;将公钥(CANLI_HOME/audit-keys/*.pub.pem)交给审计员,他们可以使用以下命令检查日志:
npx canli-mcp audit verify path/to/audit --ed25519 audit-ed25519.pub.pem --ml-dsa audit-ml-dsa-65.pub.pem
如果任何内容被更改,该命令会以状态码 1 退出,并指出相应记录。未提供这些标志时,命令会先使用日志旁边的公钥(复制的 CANLI_HOME 中的 audit-keys),然后使用这台机器上的公钥。在会话中,audit_log(通过 run_tool)可以显示日志状态、立即签署检查点(action: "checkpoint"),或检查日志(action: "verify")。最后一个检查点之后的记录已加入链条,但尚未签名;验证时会报告这类记录的数量。如果日志在检查点之后被截短,这些尾部记录会悄无声息地丢失。
插件
任何人都可以添加工具包。CANLI_PLUGINS 用逗号分隔,指定安装在 canli-mcp 旁边的软件包或 .mjs 文件的路径。插件导出 registerTools(server),并像 Canli 工具包一样注册工具;它还可以导出 pack(短名称)、title,以及 network 和 disk(分别说明它会发送和保留什么,显示在 canli://privacy 中):
import { z } from "zod";
export const pack = "weather", network = "api.weather.gov", disk = "none";
export function registerTools(server) {
server.registerTool("degree_days", { title: "Heating degree days", description: "...",
inputSchema: z.object({ station: z.string() }) }, async ({ station }) => ({ structuredContent: { /* ... */ }, content: [] }));
}
插件中的工具可以通过 find_tool 查找,在 run_tool 批处理中使用 $file 和 $result 运行,并像其他工具一样受策略文件("weather:*")和审计日志管控。如果与现有工具名称冲突,服务将停止启动并说明原因。插件是你选择安装的代码,会以服务的权限运行;除非明确指定,否则不会加载任何插件;设置 CANLI_OFFLINE=1 时也不会加载。
实时申报文件流
canli-mcp watch 每 60 秒读取一次 EDGAR 的最新申报文件流(--every,最短间隔为 15 秒),并将每份新申报文件仅打印一次,每行一条 JSON,按时间从早到晚排列:
npx canli-mcp watch --forms 8-K,SC\ 13D --event earnings
npx canli-mcp watch --company "bancorp" | while read -r l; do curl -s -d "$l" "$WEBHOOK"; done
EDGAR 接收申报文件后约一分钟才会发布,因此大多数申报文件会在两分钟内到达。首次读取只会标记当前已有的内容。类型为 error 的行会报告读取失败;文件流会继续运行。
各套件及其验证依据
| 套件 | 包 | 工具 | 验证依据 |
|---|---|---|---|
| quant | canli-quant-mcp | 235 | QuantLib、statsmodels、arch、TA-Lib、scipy、pandas:465 个参考用例 |
| validation | canli-validation-mcp | 17 | 包含 160,000 次模拟搜索的 Null Zoo 基准测试 |
| fundamentals | canli-fundamentals-mcp | 7 | SEC XBRL 文件 |
| research | canli-research-mcp | 6 | 已发表的研究记录及其哈希链 |
| backtest | canli-backtest-mcp | 11 | 时点 SEC 数据和 breadth lab 自身的检查 |
| markets | canli-markets-mcp | 64 | 来自 SEC、Treasury、FRED、FINRA、CFTC、美联储、OECD、世界银行、Cboe、ECB、英格兰银行、BIS、filings.xbrl.org、Polymarket、Kalshi、DefiLlama、USAspending、ClinicalTrials.gov、openFDA、FDIC 和 Cirrun GPU 价格指数的重放响应:13F 的总额与其封面页一致;ESEF 数据与同一公司的 SEC Form 20-F 一致;央行利率与 BIS 一致 |
| paper | canli-paper-trading-mcp | 5 | 模拟的 Alpaca 模拟交易 API |
其中有两个工具与其独立服务不同。这里的 Validation stress_test 名为 strategy_stress_test,
因为 quant 套件中有一个投资组合 stress_test;markets 的 reverse_dcf(读取文件)
名为 company_reverse_dcf,因为 quant 套件的 reverse_dcf 使用你提供的数据。Validation 的 get_key 和
service_status 未纳入,因为这里的 validation 在本地运行。canli://packs 会列出两者。
开发
npm ci && npm test
npm run build-index # after updating a pack; a test fails if the index and the packs differ
node bench/robustness.mjs # every tool, offline, with hostile arguments: crashes and leaks reported
MIT 许可。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。