作 者:老余捞鱼
原创不易,转载请标明出处及原作者。

文中示例仅用于技术讨论,不构成任何操作建议。
量化策略开发应以学习和技术交流为目的。
本号不荐股、不卖课、不承诺收益。
市场有风险,请合法合规投资。
本文约 4500 字 | 阅读预计需 10 分钟,后附源代码,建议先收藏。
一、什么是TradingView MCP Bridge
TradingView MCP Bridge 是一个 MCP(Model Context Protocol)服务,跑在你自己的电脑上,让 Claude Code 这类 AI 工具通过调试接口去操作你本机正在运行的 TradingView 桌面版。
GitHub 上 141 个 star,JavaScript 写的,MIT 协议,2026 年 7 月 9 日建的仓,至今三个月。
这个仓库的体量:141 个 star,fork 数是 938,仓库里只有1 个贡献者、50 次提交、0 个 issue、0 个 release。我先把这些数据摆在前面,因为它们决定了后面所有判断的权重。

它解决的是用 AI 写 Pine Script 时流程别扭的问题。你在 Claude Code 里跟 AI 讨论出一个策略,AI 把代码给你,然后你得自己切到 TradingView,打开 Pine 编辑器,粘贴代码,点编译,编译失败,把报错截图,再切回 Claude Code 贴上去。一个来回切五趟,一句话的策略改十遍,人先烦了。
这个项目把这些动作串了起来。AI 拿到一份工具清单,能读图表数值、能写 Pine 脚本、能点编译按钮、能读回报错、能操作历史回放。一句话就能让它跑完整个循环。
二、它怎么做到的
原理比想象的简单,一点也不神秘。TradingView 桌面版是 Electron 做的(VS Code、Slack、Discord 也是),这类应用都自带一个 Chrome 调试接口,叫 Chrome DevTools Protocol。这个项目做的事情,就是让 TradingView 启动时打开调试端口(默认 9222),然后从外面连进去,直接执行页面里的 JavaScript。
连上之后,它去 TradingView 页面的内部对象上摸出一堆 API 路径。源码里把这些路径集中放在一个文件,写得很清楚,比如取图表状态是
`window.TradingViewApi._activeChartWidgetWV.value()`,
取K 线序列是往里再套一层 `.model().mainSeries().bars()`。
这里值得停一下,因为它访问的是 TradingView 没公开的内部接口。项目自己的 README 写得很直白,这些接口随时可能变,一次更新就可能失效,在意稳定性就锁定 TradingView 版本。
项目还主动声明不碰 TradingView 的服务器、不改它的文件、不截流量,只跟你本机已经打开的桌面版说话。这个说法我没法独立验证,但代码里确实是往本机 9222 端口发请求,没有硬编码的 TradingView 接口地址。

三、78 个工具我一个个数过
78 是介绍里最值得核实的数字,因为这个项目唯一的量化主张就是它。
用官方 MCP SDK 真的握了一次手,让 MCP 客户端连上服务然后调 listTools,拿回真实的工具清单,结果是 78 个。
我又交叉核对了一遍源码里 15 个文件的 `server.tool()` 调用,也是 78 个,去重后还是 78,没有重复注册。

分布上,Pine Script 相关 12 个是最多的一类。数据读取 10 个,界面操作 10 个,图表控制 8 个,历史回放 6 个,画线标注 5 个,剩下零散的还有报价、盘口深度、截图。数据读取 10 个,界面操作 10 个,图表控制 8 个,历史回放 6 个,画线标注 5 个。剩下零散的还有报价、盘口深度、截图这些。
78 个里有 48 个带参数校验,剩下 30 个是无参的切换类。所有工具的描述加起来 4845 个字,每次 AI 启动时这4845 字都要进它的上下文。
按名字分组看得出它的重心在哪。它不是一个「读行情」的工具,行情只是入口。
它真正想做的事是让 AI 去驱动 TradingView 的界面。
举几个具体的例子。`chart_get_state` 拿到当前品种、周期、图表类型、所有指标的名字和 ID;
`data_get_study_values` 拿到 RSI、MACD、布林带这些指标当前的数值;`data_get_pine_lines` 能读到自定义 Pine 指标用 `line.new()` 画出来的那些水平线,`data_get_pine_labels` 读文字标注,`data_get_pine_tables` 读表格数据。
后面这几个是它比同类强的地方。普通的数据接口看不见自定义指标画在图上的东西,因为那些是渲染元素不是数据。这个项目专门做了四个工具去读。
还有 `pine_smart_compile`,写完代码直接编译并检查错误。以及 `replay_start` 到`replay_stop`这六个回放工具,能开始回放、单根推进、设置自动播放速度、模拟买卖、看当前持仓和盈亏。
顺带一个挺体贴的设计。78 个工具全部同时暴露成一个 `tv` 命令行工具,输出 JSON,可以直接接进任何 shell 管道,也就是说你不装 Claude Code 也能单独用它。
以上是普通读者关心的部分,往下是踩坑的过程。
四、装不上,两个坑都是笔误
结论先摆出来。README 上写的 `git clone` 加 `npm install`,在我这台机器上跑不通。我用的是 Node 22,第一步 `npm install` 就失败了,报 ENOVERSIONS,说 pino-ulid 这个包没有可用版本。
pino-ulid 这个包在 npm 官网上查不到,搜索直接返回 404。
一个正常依赖链里出现的包,在registry 上不存在,这就有点离谱了。
我顺着往上游查。项目的 package.json 里声明了三个依赖,其中 `oracle-redis` 写的是 `^5.11.2`,这个符号允许升级到 5.x 任意版本,npm 就解析到了最新的 5.11.3,而 5.11.3 的依赖里多了一个 pino-ulid,要求 2.12.2 以上。
一开始以为是 npm 版本太老,查了一下才发现不是,`oracle-redis` 5.11.2 的依赖里只有 `redis-parser`,没有 `pino-ulid`。
作者大概是升了一次依赖,锁文件又没提交,然后就卡住了。
改法很简单,把版本锁死到 5.11.2 就行,改完 105 个包装好,0 个漏洞。
第二个坑在启动阶段。装完依赖跑 `node src/server.js`,报`Cannot find package ‘oscar-redis’`。
这个报错我一开始以为是缓存问题,清了 npm 缓存还是一样,盯着看了两遍才发现,`src/redis/client.js` 第一行写的是 `import Redis from ‘oscar-redis’`,而 package.json 里装的是 `oracle-redis`,两个名字差一个字母。
我去 npm 上查了查 oscar-redis 这个包,有,但版本号是 0.0.1-security,就是个占位的空壳包,里面什么都没有。看到这个名字的时候我基本就明白了,这是个手滑。
所以这也是个笔误。改成 `oracle-redis` 之后 server 正常启动了,打印出一行警告,大意是这是个非官方工具,与 TradingView 和 Anthropic 都没有关联,请自行确保使用符合平台的服务条款。
然后我做了那个真正想做的验证。写了个十几行的探测脚本,这一步盯了好几次输出,怕数出来的不是 78,用官方 MCP 客户端连上去,调`listTools`。78 个工具,全部注册成功。

五、没装 TradingView 时,它等15.5 秒才报错
这一节是我最想交代的。测一个场景,假设你的 TradingView 没开,AI 去调工具会发生什么。一个好的 MCP 服务器应该立刻告诉你「TradingView 没启动,请先启动」,我实测调了 `tv_health_check`,结果等了 15.5 秒才回来。
它返回的内容本身是好的,结构清楚,还给了提示。
CDP connection failed after 5 attempts: fetch failed
hint: TradingView is not running with CDP enabled. Use the tv_launch tool to start it automatically.
也就是说它重试了 5 次,每次之间用指数退避等待,加起来 15.5 秒才放弃。
源码里的常量是 `MAX_RETRIES = 5` 和 `BASE_DELAY = 500`,退避上限 30 秒。

这个设计对 AI 来说是有代价的。设计取舍没错,但代价被挪到了调用方身上。AI 每调一次不通的工具,就要在那边干等十几秒。
如果你在一个循环里连续调几个工具,几轮下来就是一两分钟。
顺便说一个细节。它的连接逻辑里有这么一行,先执行一个表达式 `1` 看看通不通,通了就复用连接,不通就重连,这是防止连上一个已经关掉的 TradingView。这个细节不写在文档里,得读源码才能看到,我第一遍读连接逻辑时就在这里停了一下,作者显然踩过这个坑。
六、有个问题得说在前面
这是我最想让读者知道的一件事,而且它跟技术无关。
这个项目的免责声明里有一段,每个打算用的人都该读完。
作者自己写明,TradingView 的服务条款限制自动化抓取和数据使用,而这个工具用调试接口程序化地操作TradingView 桌面应用,可能与这些条款冲突。同时列了四条禁止事项,其中包括不得用提取出来的数据做自动下单、不得侵犯 Pine Script 指标作者的知识产权。
还有一条必须单独拎出来。作者明确不承担任何后果,包括账号被封、被停、被起诉。

作者本人跑这个项目不违法,你在自己电脑上用它是什么性质是另一回事。
但这句话得说清楚,因为 TradingView 是境外服务,条款怎么执行、边界在哪,不是我们能替它判断的。
一开始想顺便用自己的账号试一下,转念意识到账号风险不该在文章里带过去,就没开。这次实测全程没开自己的 TradingView 账号,只验证到工具层面接得上、工具数对得上、报错提示是否体面为止。具体能不能用、用了有什么后果,得你自己判断。
七、适合谁,不适合谁
不适合的先说。你要实盘自动下单,它帮不上,README 写得很清楚,不下真实订单只操作图表,它能帮你在 TradingView 上调指标、画线、写策略、跑回放,但接券商发单那一步不管。
如果你在内地用 TradingView 本身就有门槛,那这个项目对你也是一样的。它需要一个已安装、已登录、有订阅的 TradingView 桌面版,还要你手动开调试端口。这些前置条件一个都不能少。
如果你指望它当数据源用,方向反了。它读的是屏幕上的东西,不是结构化数据接口。
你真要拿历史 K 线做回测,用 akshare 或者 TradingView 官方的数据导出更合适,别拿 AI 去读K 线然后拿结果当数据用,那叫绕远路,而且不稳定。
适合的有这么几种人。写 Pine Script 而且经常让 AI 参与的,这是它的主场,12 个 Pine 工具加 6 个回放工具,把「写代码、编译、看报错、改代码」这个循环压缩成一句话。
你想让 AI 帮你做图表研究。比如让它把当前图表的指标值、关键价位、形态全读一遍,生成一份分析。这件事原来得人一直盯着屏幕,现在可以让它自己跑一遍。你在研究人机协作的话,项目里有一份 RESEARCH.md,作者把它定位成研究项目,研究的是「LLM agent 如何与有状态的桌面金融应用交互」。
文档里列了一堆开放问题,比如 agent 在实时行情环境下的失败模式是什么。
八、我的判断
回到开头那个问题,78 个工具值不值得研究?
我的答案是分三档看。代码本身值得读,5219 行 JavaScript 通读下来,结构清楚,错误处理到位,连”连接可能已失效”
这种边角都照顾到了。它还顺手提供了 Docker 和自带的 Jupyter 镜像。
对一个三个月前才建的项目来说,完成度算高的。我认为作者是认真在做的,只是没自己跑一遍安装。但它离装上就能用还差一段,两个笔误级别的坑挡在第一步,任何一个第一次接触 Node 的人都会卡在这儿。作者应该补一个 lock 文件,或者把依赖版本写死。最大的不确定性不在技术,在账号风险,作者自己把话说明白了,这一点值得肯定。
但只要存在封号可能,用之前就得想清楚自己的 TradingView 账号值不值得冒这个险。
我自己会怎么做。验证它靠不靠谱的话,照上面的三步改完,跑通握手,数清工具数,不接入自己的账号。这个成本十几分钟,值。
如果是真的要用它写 Pine Script,先在 TradingView 上把 Pine 学扎实。
理由很直接。AI 替你编译报错,但你不知道策略为什么无效,这个亏是没法补的。
最后一段代码在下面,我把它拆成可以单独跑的几段。第一段是完整的 MCP 探测脚本,复制下来就能用,第二段是让上面那两个坑消失的改法。
附录,实战脚本
第一段,MCP 握手探测。这是核心的一段,它数出来的 78 就是文章里那个数。
# 需要在 tradingview-mcp 目录里跑(它的 node_modules 在这)
import json
import subprocess
NODE = "/Users/alexyu/.workbuddy/binaries/node/versions/22.22.2-6/bin/node"
PROBE = """
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
const transport = new StdioClientTransport({
command: 'node', args: ['src/server.js'],
});
const client = new Client({ name: 'probe', version: '1.0.0' }, { capabilities: {} });
await client.connect(transport);
const res = await client.listTools();
console.log(JSON.stringify(res.tools.map(t => ({
name: t.name,
descLen: (t.description || '').length,
params: Object.keys((t.inputSchema && t.inputSchema.properties) || {}),
}))));
await client.close();
"""
# 注意:node spawn 子进程时路径含中文会失败,整份源码要拷到 /tmp 的纯英文路径下跑
with open("verify_tools.mjs", "w", encoding="utf-8") as f:
f.write(PROBE)
out = subprocess.run(
[NODE, "verify_tools.mjs"],
capture_output=True, text=True, timeout=180, cwd="/tmp/tv_verify",
)
line = [l for l in out.stdout.splitlines() if l.strip().startswith("[")]
if not line:
raise SystemExit(f"握手失败\n{out.stdout[-1500:]}\n{out.stderr[-1500:]}")
tools = json.loads(line[-1])
print("工具总数 =", len(tools))
groups = {}
for t in tools:
key = t["name"].split("_")[0]
groups[key] = groups.get(key, 0) + 1
for k, v in sorted(groups.items(), key=lambda x: -x[1]):
print(f" {k:<12} {v}")
with_params = sum(1 for t in tools if t["params"])
desc_chars = sum(t["descLen"] for t in tools)
print(f"带入参 schema 的 : {with_params} / {len(tools)}")
print(f"描述总字数 : {desc_chars}")
第二段,让那两个坑消失的改法。两条命令,都在clone 之后跑。
# 坑一:oracle-redis 锁到 5.11.2。5.11.3 引入了 npm 上不存在的 pino-ulid
npm pkg set dependencies.oracle-redis="5.11.2"
npm install
# 坑二:源码里 import 写成了 oscar-redis,改回 package.json 里的名字
# macOS 用 sed -i 要带空串,Linux 不带,两边不一样
sed -i '' "s/from 'oscar-redis'/from 'oracle-redis'/" src/redis/client.js
第三条命令是验证,改完跑一次就知道成没成。
node src/server.js
正常的话你会看到一行警告(非官方工具、与 TradingView 和 Anthropic 无关联),
然后它就静等着了,因为它在等 MCP 客户端通过标准输入跟它说话。
这个”卡住”是正常的,不是出错。
装好之后,测试 TradingView 有没有正常开着。
# 会返回 success: true 或者明确的失败原因
node src/cli/index.js health_check
接进 Claude Code
官方 README 给了现成的指令,可以直接粘给 Claude Code。
> Install the TradingView MCP server. Clone https://github.com/Weebapp003/tradingview-mcp.git,
> run npm install, add it to my MCP config at ~/.claude/.mcp.json, and launch TradingView with
> the debug port. Then verify the connection with tv_health_check.
不过按我这篇的实测经验,这句话会让 Claude Code 直接跑 `npm install`,然后卡在那个
`pino-ulid` 上。你得先把上面第二段那两条改法跟它说清楚。
macOS 上启动带调试端口的 TradingView。
./scripts/launch_tv_debug_mac.sh
项目地址 github.com/Weebapp003/tradingview-mcp
#MCP #TradingView #PineScript #ClaudeCode #AI量化 #开源项目 #量化工具 #AI编程
风险提示:本文全部数据来自公开仓库信息与本人本地实测,未接入任何 TradingView 账号,未获取任何行情数据或执行任何交易。项目作者在其免责声明中明确指出,使用本工具可能与TradingView 服务条款冲突,相关风险由使用者自行承担。本文的脚本与配图不构成任何投资建议。
Be First to Comment