tradesdontlie/tradingview-mcp
GitHub: tradesdontlie/tradingview-mcp
一个通过Chrome DevTools Protocol将Claude Code连接到本地TradingView桌面应用的MCP桥接工具,实现AI辅助的金融图表分析和Pine Script自动化开发。
Stars: 4602 | Forks: 2158
# TradingView MCP Bridge
您的 TradingView Desktop 图表的私人 AI 助手。通过 Chrome DevTools Protocol 将 Claude Code 连接到您本地运行的 TradingView 应用,实现 AI 辅助的图表分析、Pine Script 开发和工作流自动化。
## 工作原理(以及为何可以安全运行)
此工具不会连接到 TradingView 的服务器、修改任何 TradingView 文件或拦截任何网络流量。它仅通过 Chrome DevTools Protocol (CDP) 与您本地运行的 TradingView Desktop 实例进行通信——这是由 Google 内置于所有 Chromium/Electron 应用程序(包括 VS Code、Slack 和 Discord)的标准调试接口。
调试端口默认是禁用的,必须由您使用标准的 Chromium 标志(`--remote-debugging-port=9222`)明确启用。没有这一深思熟虑的步骤,什么都不会发生。
## 此工具不会做的事
- 连接到 TradingView 的服务器或 API
- 存储、传输或重新分发任何市场数据
- 在没有有效的 TradingView 订阅和已安装的 Desktop 应用程序的情况下工作
- 绕过任何 TradingView 付费墙或访问限制
- 执行真实交易(仅限图表交互)
- 在 TradingView 更改其内部 Electron 结构的情况下工作
## 研究背景
本项目探讨了一个开放的研究问题:**基于 LLM 的 Agent 如何与专业交易界面交互,以支持人类的决策过程?**
具体研究内容包括:
- 结构化工具 API (MCP) 如何桥接 LLM 和有状态的桌面金融应用程序
- 当 Agent 对实时图表数据进行操作时,会出现哪些延迟、上下文和可靠性限制
- Agent 如何处理模棱两可的金融 UI 状态(例如,解析 Pine Script 输出,读取指标表)
- 自然语言是否是图表导航和 Pine Script 开发的有效接口
- LLM Agent 在实时数据环境中运行的失败模式
这不是一个交易机器人。它是一个让 LLM Agent 能够理解交易应用程序的接口层,允许研究人员和开发人员研究金融工作流中的人机协作。
有关开放性问题、发现和相关工作,请参阅 [RESEARCH.md](RESEARCH.md)。
## 前置条件
- **TradingView Desktop 应用程序**(实时数据需付费订阅)
- **Node.js 18+**
- **支持 MCP 的 Claude Code**(用于 MCP 工具)或任何终端(用于 CLI)
- **macOS、Windows 或 Linux**
## 功能
赋予您的 AI 助手在您自己的图表上的观察和操作能力:
- **Pine Script 开发** — 在 AI 辅助下编写、注入、编译、调试和迭代脚本
- **图表导航** — 更改代码、时间周期、缩放至特定日期、添加/删除指标
- **视觉分析** — 读取图表的指标值、价格水平和注释
- **在图表上绘制** — 趋势线、水平线、矩形、文本注释
- **管理警报** — 创建、列出和删除价格警报
- **回放练习** — 逐步浏览历史 K 线,练习入场/出场
- **截图** — 捕捉图表状态以供 AI 视觉分析
- **多面板布局** — 设置 2x2、3x1 等网格,每个面板显示不同的代码
- **监控您的图表** — 从您本地运行的图表流式传输 JSONL 数据,供本地监控脚本使用
- **CLI 访问** — 每个 MCP 工具也是一个 `tv` CLI 命令,对管道友好并输出 JSON
- **启动 TradingView** — 从任何平台自动检测并以调试模式启动
## 使用 Claude Code 安装
将以下内容粘贴到 Claude Code 中,它会处理其余的工作:
或者按照以下手动步骤操作。
## 快速开始
### 1. 安装
```
git clone https://github.com/tradesdontlie/tradingview-mcp.git
cd tradingview-mcp
npm install
```
### 2. 使用 CDP 启动 TradingView
TradingView Desktop 必须在端口 9222 上启用 Chrome DevTools Protocol 的情况下运行。
**Mac:**
```
./scripts/launch_tv_debug_mac.sh
```
**Windows:**
```
scripts\launch_tv_debug.bat
```
**Linux:**
```
./scripts/launch_tv_debug_linux.sh
```
**或在任何平台上手动启动:**
```
/path/to/TradingView --remote-debugging-port=9222
```
**或使用 MCP 工具**(自动检测您的安装):
### 3. 添加到 Claude Code
添加到您的 Claude Code MCP 配置(`~/.claude/.mcp.json` 或项目 `.mcp.json`)中:
```
{
"mcpServers": {
"tradingview": {
"command": "node",
"args": ["/path/to/tradingview-mcp/src/server.js"]
}
}
}
```
将 `/path/to/tradingview-mcp` 替换为您的实际路径。
### 4. 验证
询问 Claude:*“使用 tv_health_check 验证 TradingView 是否已连接”*
## CLI
每个 MCP 工具也可以作为 `tv` CLI 命令访问。所有输出均为 JSON,方便使用 `jq` 进行管道处理。
```
# 全局安装(可选)
npm link
# 或直接运行
node src/cli/index.js
```
### 快速示例
```
tv status # check connection
tv quote # current price
tv symbol AAPL # change symbol
tv ohlcv --summary # price summary
tv screenshot -r chart # capture chart
tv pine compile # compile Pine Script
tv pane layout 2x2 # 4-chart grid
tv pane symbol 1 ES1! # set pane symbol
tv stream quote | jq '.close' # monitor price changes
```
### 所有命令
```
tv status / launch / state / symbol / timeframe / type / info / search
tv quote / ohlcv / values
tv data lines/labels/tables/boxes/strategy/trades/equity/depth/indicator
tv pine get/set/compile/analyze/check/save/new/open/list/errors/console
tv draw shape/list/get/remove/clear
tv alert list/create/delete
tv watchlist get/add
tv indicator add/remove/toggle/set/get
tv layout list/switch
tv pane list/layout/focus/symbol
tv tab list/new/close/switch
tv replay start/step/stop/status/autoplay/trade
tv stream quote/bars/values/lines/labels/tables/all
tv ui click/keyboard/hover/scroll/find/eval/type/panel/fullscreen/mouse
tv screenshot / discover / ui-state / range / scroll
```
## 流式传输
`tv stream` 命令通过 localhost 上的 Chrome DevTools Protocol 定期轮询您本地运行的 TradingView Desktop 实例。
不会连接到 TradingView 的服务器。所有数据都保留在您的机器上。
```
tv stream quote # price tick monitoring
tv stream bars # bar-by-bar updates
tv stream values # indicator value monitoring
tv stream lines --filter "NY Levels" # price level monitoring
tv stream tables --filter Profiler # table data monitoring
tv stream all # all panes at once (multi-symbol)
```
## Claude 如何知道使用哪个工具
在此项目中工作时,Claude 会自动读取 [`CLAUDE.md`](CLAUDE.md)。它包含一个完整的决策树:
| 您说... | Claude 使用... |
|------------|---------------|
| “我的图表上有什么?” | `chart_get_state` → `data_get_study_values` → `quote_get` |
| “显示了哪些水平位?” | `data_get_pine_lines` → `data_get_pine_labels` |
| “读取交易时段表格” | 带有 `study_filter` 的 `data_get_pine_tables` |
| “给我一个完整的分析” | `quote_get` → `data_get_study_values` → `data_get_pine_lines` → `data_get_pine_labels` → `data_get_pine_tables` → `data_get_ohlcv`(摘要)→ `capture_screenshot` |
| “切换到 AAPL 日线” | `chart_set_symbol` → `chart_set_timeframe` |
| “写一个 Pine Script 用于...” | `pine_set_source` → `pine_smart_compile` → `pine_get_errors` |
| “在 3 月 1 日开始回放” | `replay_start` → `replay_step` → `replay_trade` |
| “设置一个 4 图表网格” | `pane_set_layout` → 为每个面板执行 `pane_set_symbol` |
| “在 24500 画一条水平线” | `draw_shape`(horizontal_line) |
| “截个图” | `capture_screenshot` |
## 工具参考(78 个 MCP 工具)
### 图表读取
| 工具 | 何时使用 | 输出大小 |
|------|------------|-------------|
| `chart_get_state` | 首次调用 — 获取代码、时间周期、所有指标名称 + ID | ~500B |
| `data_get_study_values` | 读取所有指标的当前 RSI、MACD、BB、EMA 值 | ~500B |
| `quote_get` | 获取最新价格、OHLC、成交量 | ~200B |
| `data_get_ohlcv` | 获取价格 K 线。**使用 `summary: true`** 获取紧凑统计信息 | 500B(摘要)/ 8KB(100 根 K 线) |
### 自定义指标数据(Pine 绘图)
读取来自任何可见 Pine 指标的 `line.new()`、`label.new()`、`table.new()`、`box.new()` 输出。
| 工具 | 何时使用 | 输出大小 |
|------|------------|-------------|
| `data_get_pine_lines` | 读取水平价格位(支撑/阻力、交易时段水平) | ~1-3KB |
| `data_get_pine_labels` | 读取文本注释 + 价格("PDH 24550"、"Bias Long") | ~2-5KB |
| `data_get_pine_tables` | 读取数据表(交易时段统计、分析仪表板) | ~1-4KB |
| `data_get_pine_boxes` | 将价格区间/范围读取为 {high, low} 对 | ~1-2KB |
**始终使用 `study_filter`** 来定位特定指标:`study_filter: "Profiler"`。
### 图表控制
| 工具 | 功能描述 |
|------|-------------|
| `chart_set_symbol` | 更改股票代码(BTCUSD、AAPL、ES1!、NYMEX:CL1!) |
| `chart_set_timeframe` | 更改分辨率(1、5、15、60、D、W、M) |
| `chart_set_type` | 更改样式(Candles、HeikinAshi、Line、Area、Renko) |
| `chart_manage_indicator` | 添加/删除指标。**使用全名**:"Relative Strength Index" 而非 "RSI" |
| `chart_scroll_to_date` | 跳转至日期(ISO:"2025-01-15") |
| `chart_set_visible_range` | 缩放至确切范围(Unix 时间戳) |
| `symbol_info` / `symbol_search` | 代码元数据和搜索 |
| `indicator_set_inputs` / `indicator_toggle_visibility` | 更改指标设置、显示/隐藏 |
### 多面板布局
| 工具 | 功能描述 |
|------|-------------|
| `pane_list` | 列出所有面板的代码和活动状态 |
| `pane_set_layout` | 更改网格:`s`、`2h`、`2v`、`2x2`、`4`、`6`、`8` |
| `pane_focus` | 按索引聚焦特定面板 |
| `pane_set_symbol` | 在任何面板上设置代码 |
### 标签页管理
| 工具 | 功能描述 |
|------|-------------|
| `tab_list` | 列出已打开的图表标签页 |
| `tab_new` / `tab_close` | 打开/关闭标签页 |
| `tab_switch` | 按索引切换至某个标签页 |
### Pine Script 开发
| 工具 | 步骤 |
|------|------|
| `pine_set_source` | 1. 将代码注入编辑器 |
| `pine_smart_compile` | 2. 编译并自动检测 + 检查错误 |
| `pine_get_errors` | 3. 读取编译错误(如果有) |
| `pine_get_console` | 4. 读取 log.info() 输出 |
| `pine_save` | 5. 保存至 TradingView 云端 |
| `pine_get_source` | 读取当前脚本(**警告:复杂脚本可能达到 200KB+**) |
| `pine_new` | 创建空白指标/策略/库 |
| `pine_open` / `pine_list_scripts` | 打开或列出已保存的脚本 |
| `pine_analyze` | 离线静态分析(无需图表) |
| `pine_check` | 服务端编译检查(无需图表) |
### 回放模式
| 工具 | 步骤 |
|------|------|
| `replay_start` | 在特定日期进入回放 |
| `replay_step` | 前进一根 K 线 |
| `replay_autoplay` | 自动前进(以毫秒为单位设置速度) |
| `replay_trade` | 买入/卖出/平仓 |
| `replay_status` | 检查仓位、盈亏、日期 |
| `replay_stop` | 返回至实时模式 |
### 绘图、警报和 UI 自动化
| 工具 | 功能描述 |
|------|-------------|
| `draw_shape` | 绘制 horizontal_line、trend_line、rectangle、text |
| `draw_list` / `draw_remove_one` / `draw_clear` | 管理绘图 |
| `alert_create` / `alert_list` / `alert_delete` | 管理价格警报 |
| `capture_screenshot` | 截图(区域:full、chart、strategy_tester) |
| `batch_run` | 跨多个代码/时间周期执行操作 |
| `watchlist_get` / `watchlist_add` | 读取/修改观察列表 |
| `layout_list` / `layout_switch` | 管理已保存的布局 |
| `ui_open_panel` / `ui_click` / `ui_evaluate` | UI 自动化 |
| `tv_launch` / `tv_health_check` / `tv_discover` | 连接管理 |
## 上下文管理
默认情况下,工具返回紧凑的输出以最大程度减少上下文使用。对于典型的“分析我的图表”工作流,总上下文约为 ~5-10KB,而不是 ~80KB。
| 特性 | 它如何节省上下文 |
|---------|---------------------|
| Pine 线条 | 仅返回去重后的价格水平,而非每个线条对象 |
| Pine 标签 | 每个指标最多 50 个,仅包含文本+价格 |
| Pine 表格 | 预格式化的行字符串,无单元格元数据 |
| Pine 矩形 | 仅去重后的 {high, low} 区间 |
| OHLCV 摘要模式 | 返回统计信息 + 最后 5 根 K ,而非所有 K 线 |
| 指标输入 | 自动过滤加密/编码的数据块 |
| `verbose: true` | 在任何 pine 工具上传递以获取带有 ID/颜色的原始数据(如有需要) |
| `study_filter` | 定位单个指标,而非扫描全部 |
## 在您的系统上查找 TradingView
启动脚本和 `tv_launch` 会自动检测 TradingView。如果自动检测失败:
| 平台 | 常见位置 |
|----------|-----------------|
| **Mac** | `/Applications/TradingView.app/Contents/MacOS/TradingView` |
| **Windows** | `%LOCALAPPDATA%\TradingView\TradingView.exe`、`%PROGRAMFILES%\WindowsApps\TradingView*\TradingView.exe` |
| **Linux** | `/opt/TradingView/tradingview`、`~/.local/share/TradingView/TradingView`、`/snap/tradingview/current/tradingview` |
关键标志:`--remote-debugging-port=9222`
## 测试
```
# 需要 TradingView 在运行时带上 --remote-debugging-port=9222
npm test
```
涵盖以下内容的 29 项测试:Pine Script 静态分析、服务端编译和 CLI 路由。
## 架构
```
Claude Code ←→ MCP Server (stdio) ←→ CDP (port 9222) ←→ TradingView Desktop (Electron)
```
- **传输**:基于 stdio 的 MCP(78 个工具)+ CLI(`tv` 命令,30 个命令及 66 个子命令)
- **连接**:localhost:9222 上的 Chrome DevTools Protocol
- **流式传输**:带有去重功能的轮询和差异对比循环,JSONL 输出到 stdout
- 除了 `@modelcontextprotocol/sdk` 和 `chrome-remote-interface` 外**无其他依赖**
## 归属
本项目不附属于、不受认可或关联于:
- **TradingView Inc.** — TradingView 是 TradingView Inc. 的商标。
- **Anthropic** — Claude 和 Claude Code 是 Anthropic, PBC 的商标。
此工具是一个独立的 MCP 服务器,通过标准 MCP 协议连接到 Claude Code。它不包含或修改任何 Anthropic 软件。
## 免责声明
本项目**仅供个人、教育和研究目的使用**。
**此工具的工作原理:** 此工具使用 Chrome DevTools Protocol (CDP),这是内置于基于 Chromium 的应用程序中的标准调试接口。它不会对任何专有的 TradingView 协议进行逆向工程,不会连接到 TradingView 的服务器,也不会绕过任何访问控制。调试端口必须由用户通过标准的 Chromium 命令行标志(`--remote-debugging-port=9222`)明确启用。
使用本软件即表示您承认并同意:
1. **您需自行负责** 确保您对此工具的使用符合 [TradingView 的使用条款](https://www.tradingview.com/policies/) 以及所有适用的法律。
2. TradingView 的使用条款 **限制对其平台和数据的自动化数据收集、抓取和非显示用途的使用**。此工具使用 Chrome DevTools Protocol 以程序化方式与 TradingView Desktop 应用程序交互,这可能与这些条款相冲突。
3. **您需自行承担与此工具使用相关的所有风险**。对于因使用本工具而导致的任何账户封禁、暂停、法律诉讼或其他后果,作者概不负责。
4. 绝不得将此工具用于(包括但不限于):
- 重新分发、转售或商业利用 TradingView 的市场数据
- 规避 TradingView 的访问控制或订阅限制
- 使用提取的数据进行自动化交易或算法决策
- 侵犯 Pine Script 指标作者的知识产权
- 连接到 TradingView 的服务器或基础设施(所有访问均通过本地运行的 Desktop 应用程序进行)
5. 流式传输功能仅监控您本地运行的 TradingView Desktop 实例。它不会连接到 TradingView 的服务器,也不会从 TradingView 的基础设施中提取数据。
6. 通过此工具访问的市场数据仍受交易所和数据提供商许可条款的约束。**请勿重新分发、存储或商业利用通过此工具获得的任何数据。**
7. 此工具访问的是 TradingView 应用程序内部的、未公开记录的接口,这些接口可能随时更改或损坏,恕不另行通知。
**使用风险由您自行承担。** 如果您不确定您的预期用途是否符合 TradingView 的条款,请勿使用此工具。
## 许可证
MIT — 有关详细信息,请参阅 [LICENSE](LICENSE)。
MIT 许可证仅适用于本项目的源代码。它不授予任何有关 TradingView 软件、数据、商标或知识产权的权利。
标签:AI辅助分析, Chrome DevTools Protocol, MCP, MITM代理, Pine Script, TradingView, 文档结构分析, 自定义脚本, 金融交易