把 TradingView 桌面版交给 AI 之前:debug port 开了什么、什么时候该关掉
你把 TradingView MCP 装好、跑 tv_health_check,AI 就开始帮你看图、写 Pine、扫早盘——很顺。教程跳过的那一步,其实才是这个工具的门槛:安装时要你把 TradingView 桌面版关掉,改用 --remote-debugging-port=9222 重开。这是官方教程里没展开的关键动作。
没有人先跟你讲的是:这个端口是给 Chrome DevTools Protocol 用的调试接口——不是给 MCP 专用的通道。它在你这台机器上打开之后,能连进去的东西,并不只有你刚装的那个 MCP server。
这篇不评论 TradingView MCP 这个项目好不好——它自己的 README 把该讲的都讲了,我们没有理由改写别人的自我披露。这篇只做两件事:把作者刻意写在 Warning/Caution 区块里的那几句话翻成你会拿来做决定的语言,然后把「debug port 什么时候该关掉」写成一份你可以照做的清单。
--remote-debugging-port=9222 到底开了什么
TradingView Desktop 是一个 Electron 应用——它其实是 Chromium 浏览器包了一层外壳。所有 Chromium 内建的调试机制它都继承了下来,包括 「Chrome DevTools Protocol」(下称 CDP)。CDP 是 Google 为 Chrome DevTools 设计的通讯协议,让外部程序可以用 JSON 消息控制浏览器:读取 DOM、注入 JavaScript、截图、监听 network 事件。
默认情况下,CDP 是关的。你要用它,就要在启动时加上一个 flag 告诉 Chromium:「请在这个端口上听 CDP 连线」。tradesdontlie 的 README 说得很直接:
「Nothing happens without that deliberate step」——这句话在讲的是你要主动做这个动作才会启动。它同时也在讲:一旦你做了这个动作,那个端口就是开的,直到你把 TradingView 关掉再用正常方式打开为止。
所以,这个端口不是 MCP 专用的通道。它是 Chromium 标准调试接口。VS Code、Slack、Discord 这些 Electron 应用其实都内建同一套机制——它们只是没有默认开,而且你平常也没有理由开。
端口开着的时候,本机上还有谁能连进去
CDP 默认绑在 127.0.0.1:9222,也就是本机 loopback。这代表两件事:
好消息:网络上的攻击者连不到这个端口——除非你另外把它 forward 出去,或者你有其他服务把 localhost 暴露到 LAN/WAN 上。这也是 tradesdontlie 反复强调「All data stays on your machine」的技术根据。
但问题是:「本机」不是一个信息安全边界。任何以你的用户身份跑起来的进程,都可以连到 127.0.0.1:9222——它不需要密码、不需要 token、也没有 CORS 保护。CDP 从一开始就假设「能连到这个端口的人=有权调试」,因为它原本的用途是开发人员手动打开来 debug 自己的应用。
| 能连到 localhost:9222 的类型 | 为什么可以 | 现实中什么时候会发生 |
|---|---|---|
| 你自己的 Terminal 指令 | 以你的用户身份执行 | 你跑 tv 这个 CLI、或任何 curl localhost:9222/json/list |
| 你安装的 npm / pip / homebrew 包 | 跟你 Terminal 同一个身份 | 依赖链里任一个 postinstall script、build tool、开发服务器 |
| 你的编辑器扩展(VS Code、Cursor) | 以你的用户身份跑 | 任何装在你 IDE 里的第三方 extension |
| 你在浏览器打开的网页 | 可以 fetch("http://localhost:9222/json/list"),若对方服务器回应 CORS 允许 | 少数配置下成立;CDP 对 GET 端点通常回 Access-Control-Allow-Origin: * 之类的头,实测前不要假设安全 |
| 其他你或别人装的 MCP server | 只要它跑在同一台机器上 | 你之后装的另一个 AI 工具,甚至只是另一个 tv CLI 实例 |
常见会落在同一台机器上的进程来源。这张表是给你想清楚攻击面用的,不是要吓你——多数人的 threat model 里这些进程都是可信任的。查证日期 2026 年 7 月。
如果你的 threat model 就是「这台电脑上跑的所有东西我都相信」,那 debug port 开着没问题。多数个人开发者的日常状态确实是这样。但这件事你要自己确认过,不能靠工具替你保证。
连进去之后能做的事,比「帮 AI 看图」多得多
tradesdontlie 的 MCP server 用了 78 个工具封装 CDP 的调用。这些封装很有用,但外部观察者不会受它们限制——因为 CDP 本身提供的东西比这 78 个工具还多。任何连上 localhost:9222 的程序都可以:
- 执行任意 JavaScript:透过
Runtime.evaluate——这是 CDP 的官方方法,设计就是为了在页面 global 对象上跑任意表达式。这意味着它可以读取你 TradingView 页面里的任何数据:watchlist、layouts、alerts、当前 symbol、你刚编到一半还没存的 Pine Script。 - 截图、录影:你的图表状态、开的 layout、看的 symbol,全部可以被静静地拿走。
- 操纵 UI 状态:切 symbol、切 timeframe、点按钮、关 tab——CDP 有
Input.dispatchMouseEvent/dispatchKeyEvent,能模拟用户输入。 - 改 Pine Script 源码:MCP 的
pine_set_source底下就是往编辑器贴字符串。任何拿到 CDP 连线的程序都能做同样的事。 - 建立、修改、删除 alerts:MCP 提供
alert_create/alert_delete——同样是 CDP 之上的封装。
上面第五点值得单独拿出来看。alerts 是你的信号进入下游自动化的入口——你在 TradingView 建 alert,alert 触发,webhook 打到你的执行端,执行端下单。如果一个能连上 CDP 的程序可以帮你建 alert,它就有机会把信号注入你既有的执行流程里。它注入的 alert 未必需要跟你的策略逻辑有关;只要它符合你 webhook 那头在解析的 payload 格式,就会被下游当成一笔合法信号处理。
「它不会下真实交易单」——这句话该怎么理解
tradesdontlie 的 README 在「What This Tool Does Not Do」章节写了:「Execute real trades (chart interaction only)」。这句话是对这个 MCP 工具本身的正确描述——它的封装里确实没有真实交易 API 的 wrapper,只有 replay_trade(回放模式下的模拟下单)。
但这句话只讲到 MCP 工具封装的边界。它没有在讲:
| 「不会下真实交易单」没有涵盖的层次 | 为什么还是要在意 |
|---|---|
| 透过 alert → webhook 触发的下游下单 | 任何拿到 CDP 连线的程序都能建 alert;alert 触发的执行端不知道这条 alert 是你建的还是别人建的 |
| 你的 TradingView 账号本身的数据存取 | watchlist、saved layouts、Pine Script 源码、bar replay 历史——都可以透过 CDP 读出来 |
| 改动你的策略代码 | pine_set_source 能改任何文件里的内容;如果那个文件接下来被你手动 compile 或推到自家的另一个系统,改过的代码就会往下游走 |
| 你可能同一时间登入的其他 Electron 应用 | 只要你养成了「常态开着 --remote-debugging-port」的习惯,同样的端口开在 Slack、Discord、VS Code 上的攻击面比 TradingView 更大——这不是这个工具的错,是这个习惯的错 |
MCP server 的自我限制边界,不等于整台机器上这个 debug port 的边界。查证日期 2026 年 7 月。
「未公开的 TradingView API」意味着什么
README 的 Caution 区块写:「This tool accesses undocumented internal TradingView APIs via the Electron debug interface. These can change or break without notice in any TradingView update.」
翻成你会拿来做决定的语言:TradingView 没有承诺这些接口会维持不变。今天可以跑 pine_smart_compile、明天可以读 data_get_pine_lines,不代表下周那个桌面版更新之后还可以。这件事对这个站的读者不陌生——这跟我们之前写过的「Pine Script 的 alert 没有记忆」是同一种脆弱性:你在依赖一个平台端未书面承诺的行为,它没有义务告诉你什么时候要改。
这个站的核心立场一直是:你的交易流程能不能依赖一个接口,取决于接口提供方有没有给你可以拿去申诉的书面契约。官方 API、公开文件的 webhook 规格、写在服务条款里的行为——这些东西坏掉时,你可以指着那份文件讲。但 tradesdontlie 这种 CDP 之上的封装,你指不到——因为 TradingView 从来没有写下来过它会维持这些内部接口。
所以:研究、写策略、练 Pine、跑早盘扫描——这些场景 MCP 都很棒,因为坏掉的成本只是「今天做不了这件事」。但接上会动钱的流程之前,你要问一次:这个环节坏掉的时候,是谁的钱在受影响?如果答案是「我的」,那你就不该把它放在关键路径上。
什么时候该把这个端口关掉:一份可执行的清单
下面这份清单不是「用 MCP 就要如何」的通则。它是把「debug port 现在应不应该开着」这个问题,拆成几个你可以现在就检查一次的具体条件。
- 用完就关。结束一段用 AI 分析图的工作之后,把 TradingView 退掉,用正常方式(不加
--remote-debugging-port)重开。「常态开着」的成本比你想象的高,而且你没有得到任何额外的能力——AI 又不会半夜自己跑来看图。 - 不要把 debug 版本的 TradingView 加进登入启动项。如果你把那个带着
--remote-debugging-port=9222的启动脚本设成开机执行,等于你这台机器每次开机都会自动开一个没有认证的 CDP 端口。 - 只在你信任的机器上开。不要在共用电脑、公司配发的设备、或安装过来路不明软件的机器上开。「本机」在这些场景下不是安全边界。
- 开端口期间不要在同一个浏览器 profile 里浏览陌生网站。不同浏览器对 localhost 的 CORS 行为不完全一致,实测前不要假设浏览器会挡掉指向
localhost:9222的 fetch。 - 下游有 webhook 执行端的话,把 alert 的 payload 绑死。webhook 那头至少要验证 alert message 里的一个秘密字段(strategy ID、签名、共享密钥)——不要只信「信号送过来就下单」。这样就算有人透过 CDP 建了 alert,执行端也会挡。
- 下游的下单许可要独立配置。AI 拿到 CDP 连线是一件事,执行端拿到交易所 API key 是另一件事——这两者的权限边界要各自管。详见非托管交易机器人的 API 密钥权限检查清单,那篇管的是交易所端的权限,跟这篇的 AI 端刚好互补。
- 做 threat model 之前不要说「反正是本机」。「本机」是网络边界,不是进程边界。你昨天 npm install 进来的那个包,跟你的 CDP 连线在同一个「本机」里。
诚实的一段:AI 留在生成与分析端,执行权放在别的地方
我们自己也没有办法保证「debug port 开着+一个 MCP server 跑着」永远不会出事——我们没做过红队演练,这篇文章也不会替你做。这篇能做的只是把作者已经自我披露的东西摊开,让你在做决定前看得完整一点。
但站在这个站一贯的立场,我们可以讲一件事:「AI 生策略」和「策略下单」是两个不同的问题,不要用同一条连线同时解决。MCP 这种桥接让 AI 跟你的图表对话很方便;但当你准备要让策略真的出去下单时,这条连线不该是通路。中间应该有一层界线清楚的东西:非托管的执行服务、你自己的 API key、dry-run 先跑、风控写死在你那一侧。这样的话,就算未来 MCP/CDP 这一整套出了任何问题,能被影响的都只到 alert 为止——alert 之后那条路,是你自己盖的、你自己管的。
常见问题
我只用 MCP 让 Claude 帮我看图、改 Pine,会有事吗?
把 debug port 从 9222 换成别的号码,会不会安全一点?
/json/list 判定是哪个应用——换号码只是把攻击者多花 200ms 找对地方。真正的边界不在 port number,在谁的进程能连到 loopback。为什么 tradesdontlie 说「it's safe to run」?他们在唬烂吗?
把 alert → webhook 那段接上 TVSBot,会不会被上面讲的 CDP 问题波及?
有没有办法用 TradingView Web 版取代 Desktop 版,就不用开 debug port 了?
--remote-debugging-port——那是 Chromium/Electron 桌面应用的 flag。但 tradesdontlie 的 MCP 目前只支持 Desktop app;如果你不需要 MCP 的能力(例如你只想用 AI 生 Pine、贴进 Web 版执行),那你根本就不用碰这个端口。Get started
把 AI 生好的 Pine Script 带过来,webhook 到交易所这段交给 TVSBot——用你自己的 API key,先 dry-run,风控自己设,跟 AI 端的 CDP 连线完全隔离。
免费开始使用