Skip to the content.

atilaahmettaner/tradingview-mcp - security scan

Repository: atilaahmettaner/tradingview-mcp Commit scanned: 36ca7ff648149682a4eb65798821718e5bdfbfea Scan date: 2026-07-07 Disclosure status: public — post-only (strict-norm: commercial hosted tier; no upstream issue filed)

Summary

Severity Count
Critical 0
High 11
Medium 17
Low 0 (filtered at --min-severity medium)
Info 0

Total findings: 28 (0 real after curation)

tradingview-mcp is an MCP server exposing ~30 market-data / technical-analysis tools (stocks, crypto, forex) to MCP clients like Claude and Cursor, with a paid hosted tier at cryptosieve.com. For an MCP server the sharpest question is the one static rules don’t ask directly: can a tool argument steer a server-side request somewhere it shouldn’t go? Here the answer is no — the outbound fetches are fixed-host, and the design deliberately holds no credentials. This is the 13th clean scan; the only residual is a dependency refresh.

Top findings

1. The tool-input → outbound-request path is not SSRF (fixed host)

2. No credential surface — by design

3. The real residual: a transport-gated dependency refresh

Patterns observed

The MCP SSRF check is worth running every time, even when it comes back negative. The completeness-sweep discipline (walk each tool input to its sink) is what distinguishes zotero-mcp — where a tool input genuinely reached an attacker-chosen host — from this one, where the host is a hardcoded finance API and the input only fills a symbol slot. Same dynamic-urllib rule hit, opposite verdict, and the difference is entirely “is the authority attacker-controlled?”

Removing the credential is the strongest credential control. The most notable security decision here is architectural: by fetching only public data and holding no TradingView session or key, the server deletes the whole credential-handling surface that the linkedin-mcp and google-workspace-mcp scans spent their time on. The README even leads with it (“does it need — or risk — your TradingView account? No”).

Post-only, because strict-norm and nothing cleared the bar. There’s a commercial hosted tier, so grouped issues are off the table by policy — but it’s moot: there’s no real, reachable, undefended item. The dependency tail is public CVEs with mechanical fixes, and the hosted operator is best placed to schedule them.

Notes on the tool

Disclosure timeline

This is a post-only clean-scan write-up. The tool-input fetches are fixed-host (not SSRF), the design holds no credentials, secrets are clean, and the dependency tail is public CVEs with mechanical fixes — mostly transport-gated to the hosted HTTP mode. On a strict-norm project with a commercial tier, the proportionate action is to document.

Reproduce

git clone https://github.com/atilaahmettaner/tradingview-mcp /tmp/scan-target
python scanner/run_scan.py --repo /tmp/scan-target \
  --reports-dir ./reports/atilaahmettaner-tradingview-mcp \
  --min-severity medium --ignore-samples