TVControl by Ferrox Labs — TradingView MCP System. AI remote control for TradingView Desktop. 88 MCP tools driving symbols, indicators, Pine, snapshots, sweeps, replay, and live chart vision. All local, zero cloud calls.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
no tools enumerated yet for this server.
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 78dacc0 · analyzer v17 · 2d ago
skills & prompt files 22
- agent-rulesFerroxLabs-tvcontrol-78dacc0/AGENTS.md
- agent-rulesFerroxLabs-tvcontrol-78dacc0/CLAUDE.md
- prompt-fileFerroxLabs-tvcontrol-78dacc0/examples/prompts/00-quick-start.md
- prompt-fileFerroxLabs-tvcontrol-78dacc0/examples/prompts/01-chart-analysis.md
- prompt-fileFerroxLabs-tvcontrol-78dacc0/examples/prompts/02-pine-development.md
- prompt-fileFerroxLabs-tvcontrol-78dacc0/examples/prompts/03-state-management.md
- prompt-fileFerroxLabs-tvcontrol-78dacc0/examples/prompts/04-strategy-sweep.md
- prompt-fileFerroxLabs-tvcontrol-78dacc0/examples/prompts/05-replay-practice.md
- prompt-fileFerroxLabs-tvcontrol-78dacc0/examples/prompts/06-watchlist-and-alerts.md
- prompt-fileFerroxLabs-tvcontrol-78dacc0/examples/prompts/07-screening-and-optimization.md
- prompt-fileFerroxLabs-tvcontrol-78dacc0/examples/prompts/99-agent-tips.md
- skillFerroxLabs-tvcontrol-78dacc0/skills/chart-analysis/SKILL.md
- skillFerroxLabs-tvcontrol-78dacc0/skills/learn-from-losses/SKILL.md
- skillFerroxLabs-tvcontrol-78dacc0/skills/morning-prep/SKILL.md
- skillFerroxLabs-tvcontrol-78dacc0/skills/multi-pane-analysis/SKILL.md
- skillFerroxLabs-tvcontrol-78dacc0/skills/multi-symbol-scan/SKILL.md
- skillFerroxLabs-tvcontrol-78dacc0/skills/pine-develop/SKILL.md
- skillFerroxLabs-tvcontrol-78dacc0/skills/porting-pine-versions/SKILL.md
- skillFerroxLabs-tvcontrol-78dacc0/skills/rebuild-from-screenshot/SKILL.md
- skillFerroxLabs-tvcontrol-78dacc0/skills/replay-practice/SKILL.md
- skillFerroxLabs-tvcontrol-78dacc0/skills/strategy-ab-test/SKILL.md
- skillFerroxLabs-tvcontrol-78dacc0/skills/strategy-report/SKILL.md
evidence-backed
findings quoted directly from the published source artifact — not inferred
filesystem 13
- fs FerroxLabs-tvcontrol-78dacc0/scripts/count_tools.js :2
import { readdirSync, readFileSync } from 'node:fs'; - fs FerroxLabs-tvcontrol-78dacc0/scripts/pine_pull.js :4
import { writeFileSync } from 'fs'; - fs FerroxLabs-tvcontrol-78dacc0/scripts/pine_push.js :4
import { readFileSync } from 'fs'; - fs FerroxLabs-tvcontrol-78dacc0/src/cli/commands/pine.js :4
import { readFileSync } from 'fs'; - fs FerroxLabs-tvcontrol-78dacc0/src/connection.js :3
import { readFileSync, writeFileSync, mkdirSync, renameSync } from 'fs'; - fs FerroxLabs-tvcontrol-78dacc0/src/core/batch.js :13
import { writeFileSync, mkdirSync } from 'fs'; - fs FerroxLabs-tvcontrol-78dacc0/src/core/capture.js :5
import { writeFileSync, mkdirSync } from 'fs'; - fs FerroxLabs-tvcontrol-78dacc0/src/core/health.js :5
import { existsSync } from 'fs'; - fs FerroxLabs-tvcontrol-78dacc0/src/core/state.js :7
import { writeFileSync, readFileSync, mkdirSync, readdirSync, unlinkSync, renameSync, existsSync } from 'node:fs'; - fs FerroxLabs-tvcontrol-78dacc0/src/core/sweep.js :5
import { writeFileSync, mkdirSync, existsSync, readFileSync, renameSync, unlinkSync, readdirSync, statSync } from 'node:fs'; - fs FerroxLabs-tvcontrol-78dacc0/src/core/telemetry.js :8
import { appendFileSync, existsSync, renameSync, statSync, unlinkSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; - fs FerroxLabs-tvcontrol-78dacc0/src/core/vision.js :4
import { readFileSync, mkdirSync } from 'fs'; - fs FerroxLabs-tvcontrol-78dacc0/src/core/watchlist.js :6
import { writeFileSync, readFileSync, mkdirSync, renameSync, existsSync } from 'node:fs';
shell / exec 1
- shell FerroxLabs-tvcontrol-78dacc0/src/core/health.js :6
import { execFileSync, spawn } from 'child_process';
network 9
- net FerroxLabs-tvcontrol-78dacc0/scripts/pine_pull.js :6
const targets = await (await fetch('http://localhost:9222/json/list')).json(); - net FerroxLabs-tvcontrol-78dacc0/scripts/pine_push.js :9
const targets = await (await fetch('http://localhost:9222/json/list')).json(); - net FerroxLabs-tvcontrol-78dacc0/src/connection.js :232
const resp = await fetch(`http://${CDP_HOST}:${CDP_PORT}/json/list`); - net FerroxLabs-tvcontrol-78dacc0/src/core/alerts.js :117
fetch('https://pricealerts.tradingview.com/list_alerts', { credentials: 'include' }) - net FerroxLabs-tvcontrol-78dacc0/src/core/chart.js :255
const resp = await fetch(`https://symbol-search.tradingview.com/symbol_search/v3/?${params}`, { - net FerroxLabs-tvcontrol-78dacc0/src/core/pine.js :387
const response = await fetch( - net FerroxLabs-tvcontrol-78dacc0/src/core/sweep.js :609
// chart is a READ-ONLY metaInfo fetch (_evalConn below). So the start-state - net FerroxLabs-tvcontrol-78dacc0/src/core/sweep_parallel.js :63
const resp = await fetch(`http://${CDP_HOST}:${CDP_PORT}/json/new?${url}`, { method: 'PUT' }); - net FerroxLabs-tvcontrol-78dacc0/src/core/tab.js :15
const resp = await fetch(`http://${CDP_HOST}:${CDP_PORT}/json/list`);
tool registrations 87
- alert_create FerroxLabs-tvcontrol-78dacc0/src/tools/alerts.js :6
- alert_list FerroxLabs-tvcontrol-78dacc0/src/tools/alerts.js :15
- alert_delete FerroxLabs-tvcontrol-78dacc0/src/tools/alerts.js :20
- alert_delete_by_id FerroxLabs-tvcontrol-78dacc0/src/tools/alerts.js :27
- batch_run FerroxLabs-tvcontrol-78dacc0/src/tools/batch.js :6
- capture_screenshot FerroxLabs-tvcontrol-78dacc0/src/tools/capture.js :6
- chart_get_state FerroxLabs-tvcontrol-78dacc0/src/tools/chart.js :6
- chart_set_symbol FerroxLabs-tvcontrol-78dacc0/src/tools/chart.js :11
- chart_set_timeframe FerroxLabs-tvcontrol-78dacc0/src/tools/chart.js :18
- chart_set_type FerroxLabs-tvcontrol-78dacc0/src/tools/chart.js :25
- chart_manage_indicator FerroxLabs-tvcontrol-78dacc0/src/tools/chart.js :32
- chart_get_visible_range FerroxLabs-tvcontrol-78dacc0/src/tools/chart.js :42
- chart_set_visible_range FerroxLabs-tvcontrol-78dacc0/src/tools/chart.js :47
- chart_scroll_to_date FerroxLabs-tvcontrol-78dacc0/src/tools/chart.js :55
- symbol_info FerroxLabs-tvcontrol-78dacc0/src/tools/chart.js :62
- symbol_search FerroxLabs-tvcontrol-78dacc0/src/tools/chart.js :67
- data_get_ohlcv FerroxLabs-tvcontrol-78dacc0/src/tools/data.js :6
- data_get_indicator FerroxLabs-tvcontrol-78dacc0/src/tools/data.js :14
- data_get_strategy_results FerroxLabs-tvcontrol-78dacc0/src/tools/data.js :21
- data_get_trades FerroxLabs-tvcontrol-78dacc0/src/tools/data.js :26
- data_get_equity FerroxLabs-tvcontrol-78dacc0/src/tools/data.js :33
- quote_get FerroxLabs-tvcontrol-78dacc0/src/tools/data.js :38
- depth_get FerroxLabs-tvcontrol-78dacc0/src/tools/data.js :45
- data_get_pine_lines FerroxLabs-tvcontrol-78dacc0/src/tools/data.js :55
- data_get_pine_labels FerroxLabs-tvcontrol-78dacc0/src/tools/data.js :63
- data_get_pine_tables FerroxLabs-tvcontrol-78dacc0/src/tools/data.js :72
- data_get_pine_boxes FerroxLabs-tvcontrol-78dacc0/src/tools/data.js :79
- data_get_study_values FerroxLabs-tvcontrol-78dacc0/src/tools/data.js :87
- draw_shape FerroxLabs-tvcontrol-78dacc0/src/tools/drawing.js :6
- draw_list FerroxLabs-tvcontrol-78dacc0/src/tools/drawing.js :17
- draw_clear FerroxLabs-tvcontrol-78dacc0/src/tools/drawing.js :22
- draw_remove_one FerroxLabs-tvcontrol-78dacc0/src/tools/drawing.js :27
- draw_get_properties FerroxLabs-tvcontrol-78dacc0/src/tools/drawing.js :34
- tv_health_check FerroxLabs-tvcontrol-78dacc0/src/tools/health.js :6
- tv_discover FerroxLabs-tvcontrol-78dacc0/src/tools/health.js :11
- tv_ui_state FerroxLabs-tvcontrol-78dacc0/src/tools/health.js :16
- tv_launch FerroxLabs-tvcontrol-78dacc0/src/tools/health.js :21
- indicator_set_inputs FerroxLabs-tvcontrol-78dacc0/src/tools/indicators.js :6
- indicator_toggle_visibility FerroxLabs-tvcontrol-78dacc0/src/tools/indicators.js :14
- pane_list FerroxLabs-tvcontrol-78dacc0/src/tools/pane.js :6
- pane_set_layout FerroxLabs-tvcontrol-78dacc0/src/tools/pane.js :11
- pane_focus FerroxLabs-tvcontrol-78dacc0/src/tools/pane.js :18
- pane_set_symbol FerroxLabs-tvcontrol-78dacc0/src/tools/pane.js :25
- pine_get_source FerroxLabs-tvcontrol-78dacc0/src/tools/pine.js :6
- pine_set_source FerroxLabs-tvcontrol-78dacc0/src/tools/pine.js :11
- pine_compile FerroxLabs-tvcontrol-78dacc0/src/tools/pine.js :18
- pine_get_errors FerroxLabs-tvcontrol-78dacc0/src/tools/pine.js :23
- pine_save FerroxLabs-tvcontrol-78dacc0/src/tools/pine.js :28
- pine_get_console FerroxLabs-tvcontrol-78dacc0/src/tools/pine.js :33
- pine_smart_compile FerroxLabs-tvcontrol-78dacc0/src/tools/pine.js :38
- pine_new FerroxLabs-tvcontrol-78dacc0/src/tools/pine.js :43
- pine_open FerroxLabs-tvcontrol-78dacc0/src/tools/pine.js :50
- pine_list_scripts FerroxLabs-tvcontrol-78dacc0/src/tools/pine.js :57
- pine_analyze FerroxLabs-tvcontrol-78dacc0/src/tools/pine.js :62
- pine_check FerroxLabs-tvcontrol-78dacc0/src/tools/pine.js :69
- replay_start FerroxLabs-tvcontrol-78dacc0/src/tools/replay.js :6
- replay_step FerroxLabs-tvcontrol-78dacc0/src/tools/replay.js :13
- replay_autoplay FerroxLabs-tvcontrol-78dacc0/src/tools/replay.js :18
- replay_stop FerroxLabs-tvcontrol-78dacc0/src/tools/replay.js :25
- replay_trade FerroxLabs-tvcontrol-78dacc0/src/tools/replay.js :30
- replay_status FerroxLabs-tvcontrol-78dacc0/src/tools/replay.js :37
- state_snapshot FerroxLabs-tvcontrol-78dacc0/src/tools/state.js :6
- state_restore FerroxLabs-tvcontrol-78dacc0/src/tools/state.js :14
- state_list FerroxLabs-tvcontrol-78dacc0/src/tools/state.js :21
- state_delete FerroxLabs-tvcontrol-78dacc0/src/tools/state.js :26
- strategy_sweep FerroxLabs-tvcontrol-78dacc0/src/tools/sweep.js :10
- tab_list FerroxLabs-tvcontrol-78dacc0/src/tools/tab.js :6
- tab_new FerroxLabs-tvcontrol-78dacc0/src/tools/tab.js :11
- tab_close FerroxLabs-tvcontrol-78dacc0/src/tools/tab.js :16
- tab_switch FerroxLabs-tvcontrol-78dacc0/src/tools/tab.js :21
- ui_click FerroxLabs-tvcontrol-78dacc0/src/tools/ui.js :6
- ui_open_panel FerroxLabs-tvcontrol-78dacc0/src/tools/ui.js :14
- ui_fullscreen FerroxLabs-tvcontrol-78dacc0/src/tools/ui.js :22
- layout_list FerroxLabs-tvcontrol-78dacc0/src/tools/ui.js :27
- layout_switch FerroxLabs-tvcontrol-78dacc0/src/tools/ui.js :32
- ui_keyboard FerroxLabs-tvcontrol-78dacc0/src/tools/ui.js :39
- ui_type_text FerroxLabs-tvcontrol-78dacc0/src/tools/ui.js :47
- ui_hover FerroxLabs-tvcontrol-78dacc0/src/tools/ui.js :54
- ui_scroll FerroxLabs-tvcontrol-78dacc0/src/tools/ui.js :62
- ui_mouse_click FerroxLabs-tvcontrol-78dacc0/src/tools/ui.js :70
- ui_find_element FerroxLabs-tvcontrol-78dacc0/src/tools/ui.js :80
- ui_evaluate FerroxLabs-tvcontrol-78dacc0/src/tools/ui.js :97
- watchlist_get FerroxLabs-tvcontrol-78dacc0/src/tools/watchlist.js :6
- watchlist_add FerroxLabs-tvcontrol-78dacc0/src/tools/watchlist.js :11
- watchlist_remove FerroxLabs-tvcontrol-78dacc0/src/tools/watchlist.js :27
- watchlist_export FerroxLabs-tvcontrol-78dacc0/src/tools/watchlist.js :34
- watchlist_import FerroxLabs-tvcontrol-78dacc0/src/tools/watchlist.js :41
declared dependencies 2
- @modelcontextprotocol/sdk@1.12.1
- chrome-remote-interface@0.33.2