@seandonahoe/tvcontrol
npm
v2.0.0
Published by @seandonahoe — no publish provenance and no public repository, so the publisher could not be verified and the source cannot be independently located.
AI remote control for TradingView Desktop — 88 MCP tools driving symbols, indicators, Pine Script, snapshots, sweeps, and live chart vision over CDP.
The grade answers one question — how safe is this server for you to adopt — so it is computed in two auditable stages. Nothing below is an opinion or an LLM's guess; every line is a real term the deterministic engine applied, and the same input always yields the same number.
1. Threat score — 100 − 0 = 100. What the published surface and source actually contain:
The deterministic scan raised no scored threat in the surface it inspected — the threat score stayed at 100. Capability observations and advisory notes are recorded but never lower it.
2. Client adoption risk — 100 − 8 = 92. Three small, subtract-only factors that reflect your risk in adopting it — a clean scan proves less on a powerful, unverified or barely-inspectable package, so the grade says so plainly:
| Points | Adoption-risk factor |
|---|---|
| −6 | capability blast radius (high) — client exposure if the model is manipulated |
| −2 | publisher verification (unlinked) — no provenance/repo link, but the shipped source was fully read |
Capability observations and info notes are shown under Findings but never scored.
Open any row's finding below for the file, line and evidence behind a deduction.
In the server's implementation (`src/core/health.js:6`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: execSync, spawn } from 'child_process'; import { ClassifiedError, CATEGORIES } from '../errors.js'; export async functi
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/core/health.js
In the server's implementation (`src/connection.js:127`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: { const resp = await fetch(`http://${CDP_HOST}:${CDP_PORT}/json/list`); const targets = await resp.json(); // If
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/connection.js
In the server's implementation (`src/core/alerts.js:103`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: it _evaluateAsync(` fetch('https://pricealerts.tradingview.com/list_alerts', { credentials: 'include' }) .then
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/core/alerts.js
In the server's implementation (`src/core/chart.js:232`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: ; const resp = await fetch(`https://symbol-search.tradingview.com/symbol_search/v3/?${params}`, { headers: { 'Ori
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/core/chart.js
In the server's implementation (`src/core/pine.js:341`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: const response = await fetch( 'https://pine-facade.tradingview.com/pine-facade/translate_light?user_name=Guest&pine
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/core/pine.js
In the server's implementation (`src/core/sweep_parallel.js:36`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: ); const resp = await fetch(`http://${CDP_HOST}:${CDP_PORT}/json/new?${url}`, { method: 'PUT' }); if (!resp.ok) {
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/core/sweep_parallel.js
In the server's implementation (`src/core/tab.js:15`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: { const resp = await fetch(`http://${CDP_HOST}:${CDP_PORT}/json/list`); const targets = await resp.json(); const
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/core/tab.js
Each tool and what it can reach — statically extracted from the published source.
alert_createno sensitive capabilityalert_deleteno sensitive capabilityalert_delete_by_idno sensitive capabilityalert_listno sensitive capabilitybatch_runno sensitive capabilitycapture_screenshotno sensitive capabilitychart_get_stateno sensitive capabilitychart_get_visible_rangeno sensitive capabilitychart_manage_indicatorno sensitive capabilitychart_scroll_to_dateno sensitive capabilitychart_set_symbolno sensitive capabilitychart_set_timeframeno sensitive capabilitychart_set_typeno sensitive capabilitychart_set_visible_rangeno sensitive capabilitychart_vision_readno sensitive capabilitydata_get_equityno sensitive capabilitydata_get_indicatorno sensitive capabilitydata_get_ohlcvno sensitive capabilitydata_get_pine_boxesno sensitive capabilitydata_get_pine_labelsno sensitive capabilitydata_get_pine_linesno sensitive capabilitydata_get_pine_tablesno sensitive capabilitydata_get_strategy_resultsno sensitive capabilitydata_get_study_valuesno sensitive capabilitydata_get_tradesno sensitive capabilitydepth_getno sensitive capabilitydraw_clearno sensitive capabilitydraw_get_propertiesno sensitive capabilitydraw_listno sensitive capabilitydraw_remove_oneno sensitive capabilitydraw_shapeno sensitive capabilityindicator_set_inputsno sensitive capabilityindicator_toggle_visibilityno sensitive capabilitylayout_listno sensitive capabilitylayout_switchno sensitive capabilitypane_focusno sensitive capabilitypane_listno sensitive capabilitypane_set_layoutno sensitive capabilitypane_set_symbolno sensitive capabilitypine_analyzeno sensitive capabilitypine_checkno sensitive capabilitypine_compileno sensitive capabilitypine_get_consoleno sensitive capabilitypine_get_errorsno sensitive capabilitypine_get_sourceno sensitive capabilitypine_list_scriptsno sensitive capabilitypine_newno sensitive capabilitypine_openno sensitive capabilitypine_saveno sensitive capabilitypine_set_sourceno sensitive capabilitypine_smart_compileno sensitive capabilityquote_getno sensitive capabilityreplay_autoplayno sensitive capabilityreplay_startno sensitive capabilityreplay_statusno sensitive capabilityreplay_stepno sensitive capabilityreplay_stopno sensitive capabilityreplay_tradeno sensitive capabilitystate_deleteno sensitive capabilitystate_listno sensitive capabilitystate_restoreno sensitive capabilitystate_snapshotno sensitive capabilitystrategy_sweepno sensitive capabilitysymbol_infono sensitive capabilitysymbol_searchno sensitive capabilitytab_closeno sensitive capabilitytab_listno sensitive capabilitytab_newno sensitive capabilitytab_switchno sensitive capabilitytv_discoverno sensitive capabilitytv_health_checkno sensitive capabilitytv_launchno sensitive capabilitytv_ui_stateno sensitive capabilityui_clickno sensitive capabilityui_evaluateno sensitive capabilityui_find_elementno sensitive capabilityui_fullscreenno sensitive capabilityui_hoverno sensitive capabilityui_keyboardno sensitive capabilityui_mouse_clickno sensitive capabilityui_open_panelno sensitive capabilityui_scrollno sensitive capabilityui_type_textno sensitive capabilitywatchlist_addno sensitive capabilitywatchlist_exportno sensitive capabilitywatchlist_getno sensitive capabilitywatchlist_importno sensitive capabilitywatchlist_removeno sensitive capabilityScan history per published version. The engine is deterministic — the same version always yields the same score, so a changed score means the package itself changed.
| Version | Score | Findings | Engine | Scanned |
|---|---|---|---|---|
v2.0.0 latest |
A 92/100 | 7 | 1.13.0 | 2026-09-07 |
Show this server's live Trust Score in your README, docs or website. The badge is served straight from the registry and updates automatically after every rescan — no API key needed. It links back to this page, so anyone who sees the grade can also read the findings behind it instead of taking a number on faith.
The score above is reproducible: the same package version always yields the same result. Run it locally or over the free API — no account, no LLM, fully deterministic.
npx mcptrustchecker scan @seandonahoe/tvcontrol --online
Independent packages implementing the same tool, scanned with the same engine. Compare all 2 side by side →
Uncensored AI tools (chat, image, RE/malware analysis, JS deobfuscation, multi-step research) for Claude Desktop, Cursor, Cline, Zed, and any MCP client.
儿童故事 MCP 服务 - 提供故事列表和搜索功能
Grade any bet against thousands of play-by-play game simulations: win probability, odds, edge.
World Cup MCP server for the 2026 men's football tournament — live scores, fixtures, standings, read-only prediction-market signals, and paste-ready match cards. Works with Claude Code, Cursor, Codex, Windsurf, Zed. Not affiliated with FIFA or Anthropic.
MCP server exposing a live Dwarf Fortress fort to an AI agent as curated, semantic tools
MCP Server for Arknights: Endfield (TypeScript / stdio + Streamable HTTP)