把 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 是關的。你要用它,就要在啟動時加上一個旗標告訴 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 桌面應用的旗標。但 tradesdontlie 的 MCP 目前只支援 Desktop app;如果你不需要 MCP 的能力(例如你只想用 AI 生 Pine、貼進 Web 版執行),那你根本就不用碰這個埠。Get started
把 AI 生好的 Pine Script 帶過來,webhook 到交易所這段交給 TVSBot——用你自己的 API key,先 dry-run,風控自己設,跟 AI 端的 CDP 連線完全隔離。
免費開始使用