TradingView Chart Image Scraper

Obtiene imágenes de gráficos de TradingView para un ticker e intervalo dados.

Documentación

MCP Server - TradingView Chart Image Scraper

MseeP.ai Security Assessment

🚀 ¡Ahora con Optimización de Agrupación de Navegadores para un 70-80% Mejor Rendimiento Concurrente!

Este servidor MCP proporciona herramientas para obtener imágenes de gráficos de TradingView basadas en ticker e intervalo, con agrupación avanzada de navegadores para un máximo rendimiento concurrente.

Demo — AI analyzing a BTCUSDT daily chart via MCP

🔥 Optimizaciones de Rendimiento

Tecnología de Agrupación de Navegadores

  • Versión de Producción: Usa main_optimized.py con agrupación de navegadores para un máximo rendimiento concurrente
  • Mejora de Rendimiento: 70-80% más rápido para solicitudes concurrentes
  • Manejo Concurrente: Soporta hasta 4 solicitudes simultáneas con instancias de navegador pre-inicializadas
  • Rendimiento Esperado:
    • 1 solicitud: ~6-8s (línea base)
    • 2 concurrentes: ~3-4s cada una (60-70% más rápido)
    • 3 concurrentes: ~2.5-3.5s cada una (70-80% más rápido)

Comparación de Versiones

  • main_optimized.py (Producción): Agrupación de navegadores, optimización concurrente, seguimiento de rendimiento
  • main.py (Legado): Enfoque simple de navegador único, mantenido para depuración/respaldo

Características

  • 🚀 Herramienta de Imagen de Gráfico Optimizada: Obtiene imágenes de gráficos directamente con agrupación de navegadores para un máximo rendimiento concurrente
  • 📊 Estadísticas de Rendimiento: Monitoreo y estadísticas de rendimiento integrados
  • 🔄 Gestión de Agrupación de Navegadores: Instancias de navegador pre-inicializadas para solicitudes concurrentes sin sobrecarga
  • 🎯 Prompts de Lenguaje Natural: Solicitudes de gráficos fáciles con mapeo de intervalos
  • ⚙️ Configuración de Entorno: Totalmente configurable mediante variables de entorno
  • 🔐 Autenticación de TradingView: Autenticación segura basada en sesión
  • 💾 Captura de Portapapeles: Captura directa de imágenes base64 para un rendimiento más rápido

Herramientas

get_tradingview_chart_image

Descripción: Obtiene la URL directa de la imagen para una captura de gráfico de TradingView con rendimiento concurrente optimizado.

Rendimiento: Esta versión optimizada logra un 70-80% mejor rendimiento para solicitudes concurrentes mediante tecnología de agrupación de navegadores.

Argumentos:

  • ticker (str): El símbolo de ticker de TradingView (p. ej., "BYBIT:BTCUSDT.P", "NASDAQ:AAPL"). Requerido.
  • interval (str): El intervalo de tiempo del gráfico (p. ej., '1', '5', '15', '60', '240', 'D', 'W'). Requerido.

Retorna:

  • (str): La URL directa de la imagen de captura de TradingView (p. ej., data:image/png;base64,... o https://s3.tradingview.com/snapshots/...).

Errores:

  • Error (tipo MCP): Si el scraper encuentra un error. Códigos de error:
    • 400: Error de entrada (formato de ticker/intervalo inválido)
    • 503: Error del scraper (fallo durante el proceso de scraping)
    • 500: Error interno inesperado del servidor

get_performance_stats

Descripción: Obtiene estadísticas de rendimiento para el servidor MCP optimizado de TradingView.

Retorna:

  • Métricas detalladas sobre el rendimiento de solicitudes, mejora sobre la línea base y estado de la agrupación de navegadores

Ejemplo de Salida:

🚀 OPTIMIZED TRADINGVIEW MCP SERVER PERFORMANCE STATS
• Total Requests: 12
• Average Time: 3.30s
• Performance Improvement: 70.8%
• Browsers in Pool: 4
• Max Concurrent: 4

Prompts

  • Get the {interval} chart for {ticker}
    • Mapea nombres de marcos de tiempo comunes (p. ej., "1 minuto", "5 minutos", "1 hora", "diario") a códigos de TradingView
  • Show me the daily TradingView chart for {ticker}
    • Solicita específicamente el gráfico diario ('D')
  • Fetch TradingView chart image for {ticker} on the {interval} timeframe
    • Prompt integral con mapeo de marcos de tiempo

Configuración

  1. Crear Entorno Virtual:

    # Navigate to the project directory
    cd tradingview-chart-mcp
    # Create the venv (use python3 if python is not linked)
    python3 -m venv .venv
    
  2. Activar Entorno Virtual:

    • macOS/Linux:
      source .venv/bin/activate
      
    • Windows (Git Bash/WSL):
      source .venv/Scripts/activate
      
    • Windows (Símbolo del sistema):
      .venv\\Scripts\\activate.bat
      
    • Windows (PowerShell):
      .venv\\Scripts\\Activate.ps1
      
      (Nota: Es posible que debas ajustar la política de ejecución de PowerShell: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser)

    El prompt de tu terminal ahora debería indicar que estás en (.venv).

  3. Instalar Dependencias (dentro del venv):

    pip install -r requirements.txt
    
  4. Configurar Entorno (para Pruebas Locales):

    • Copia .env.example a .env.
    • Completa tu TRADINGVIEW_SESSION_ID y TRADINGVIEW_SESSION_ID_SIGN en el archivo .env. Puedes obtenerlos de las cookies de tu navegador después de iniciar sesión en TradingView.
    • Este archivo .env se usa al ejecutar el servidor directamente (p. ej., python main.py) para pruebas locales.
    • Ajusta la configuración opcional del scraper (MCP_SCRAPER_HEADLESS, etc.) en .env si es necesario para ejecuciones locales.
  5. Asegurar ChromeDriver: Asegúrate de que chromedriver esté instalado y sea accesible en el PATH de tu sistema, o configura tview-scraper.py en consecuencia si permite especificar una ruta.

Ejecutar el Servidor

Producción (Optimizado)

python main_optimized.py

Legado (Simple)

python main.py

Opciones de Línea de Comandos

# HTTP transport with custom port
python main_optimized.py --transport streamable-http --port 8003

# Enable authentication (default for TradingView)
python main_optimized.py --auth

# Adjust concurrency
python main_optimized.py --max-concurrent 6

# Disable browser pooling (fallback to traditional)
python main_optimized.py --disable-pooling

🧪 Pruebas de Rendimiento

Pruebas de Estilo Agente

Prueba el servidor usando el mismo enfoque que el agente de producción:

cd tests/

# Sequential performance test
python test_mcp_agent_style.py --runs 5 --ticker BYBIT:BTCUSDT.P --interval 240

# Concurrent performance test
python test_mcp_agent_style.py --concurrent 3 --ticker BYBIT:BTCUSDT.P --interval 240

# Test different symbols and timeframes
python test_mcp_agent_style.py --concurrent 4 --ticker NASDAQ:AAPL --interval 15
python test_mcp_agent_style.py --concurrent 2 --ticker BYBIT:ETHUSDT.P --interval D

Resultados Esperados

  • Secuencial: ~6-8s por solicitud (línea base)
  • Concurrente (3x): ~2.5-3.5s por solicitud (mejora del 70-80%)
  • Tasa de Éxito: 100% de fiabilidad bajo carga
  • Rendimiento: Hasta 4 solicitudes concurrentes manejadas eficientemente

🔧 Detalles Técnicos

Arquitectura de Agrupación de Navegadores

  • Navegadores Pre-inicializados: 4 instancias de navegador listas para uso inmediato
  • Agrupación Segura para Hilos: Acceso concurrente con bloqueo adecuado
  • Semáforo Asíncrono: Limitación óptima de solicitudes
  • Seguimiento de Rendimiento: Estadísticas y monitoreo en tiempo real
  • Limpieza Elegante: Gestión adecuada del ciclo de vida del navegador

Función de Atajo de Guardado

La función MCP_SCRAPER_USE_SAVE_SHORTCUT te permite capturar imágenes de gráficos directamente al portapapeles como URLs de datos base64:

Beneficios:

  • Rendimiento Más Rápido: No se necesitan solicitudes HTTP
  • Más Fiable: Sin dependencia del CDN de TradingView
  • Capacidad Sin Conexión: Funciona una vez que el gráfico está cargado
  • Integración Directa: URLs de datos base64 para uso inmediato

Configuración:

# Enable clipboard image capture (DEFAULT)
MCP_SCRAPER_USE_SAVE_SHORTCUT=True

# Disable and use traditional screenshot links
MCP_SCRAPER_USE_SAVE_SHORTCUT=False

Ejemplos de Uso

Herramientas Disponibles:

  • get_tradingview_chart_image(ticker: str, interval: str): Obtención de gráficos optimizada con agrupación de navegadores

Ejemplos de Prompts:

  • "Obtén el gráfico de 15 minutos para NASDAQ:AAPL"
  • "Muéstrame el gráfico diario para BYBIT:BTCUSDT.P"
  • "Obtén la imagen del gráfico de TradingView para COINBASE:ETHUSD en el marco de tiempo de 60"

Desactivar el Entorno Virtual

Cuando termines:

deactivate

🔄 Opciones de Respaldo

Si encuentras problemas con la versión optimizada:

  1. Deshabilitar la Agrupación de Navegadores:

    python main_optimized.py --disable-pooling
    
  2. Usar la Versión Legada:

    python main.py
    
  3. Modo de Depuración:

    python main_optimized.py --log-level DEBUG
    

📊 Monitoreo de Rendimiento

El servidor optimizado incluye monitoreo de rendimiento integrado:

  • Tasas de éxito de solicitudes
  • Tiempos de respuesta promedio
  • Métricas de mejora de rendimiento
  • Utilización de la agrupación de navegadores
  • Estadísticas de manejo de solicitudes concurrentes

Accede a estas métricas mediante la herramienta get_performance_stats o a través de los registros del servidor.

🔌 Uso con Clientes MCP (Claude Desktop / Cursor)

Este servidor soporta dos formas de proporcionar configuración:

  1. Mediante el archivo .env (para pruebas locales): Al ejecutar python main.py directamente, el servidor cargará credenciales y configuración desde un archivo .env en el directorio del proyecto.
  2. Mediante Variables de Entorno del Cliente (Recomendado para Integración): Cuando lo ejecuta un cliente MCP (como Claude/Cursor), debes configurar el cliente para inyectar las variables de entorno requeridas directamente. Estas anularán cualquier valor encontrado en un archivo .env.

Claude Desktop

  1. Abre tu archivo de configuración de Claude Desktop:

    • Windows: %APPDATA%\\Claude\\claude_desktop_config.json
    • macOS: ~/Library/Application\ Support/Claude/claude_desktop_config.json
  2. Agrega o fusiona lo siguiente dentro del objeto mcpServers. Proporciona tus credenciales en el bloque env:

    {
      "mcpServers": {
        "tradingview-chart-mcp": {
          "command": "/absolute/path/to/your/tradingview-chart-mcp/.venv/bin/python3",
          "args": ["/absolute/path/to/your/tradingview-chart-mcp/main.py"],
          "env": {
            "TRADINGVIEW_SESSION_ID": "YOUR_SESSION_ID_HERE",
            "TRADINGVIEW_SESSION_ID_SIGN": "YOUR_SESSION_ID_SIGN_HERE"
            // Optional: Add MCP_SCRAPER_* variables here too if needed
            // "MCP_SCRAPER_HEADLESS": "False"
          }
        }
        // ... other servers if any ...
      }
    }
    
  3. Reemplaza las rutas de marcador de posición (command, args) con tus rutas absolutas reales.

  4. Reemplaza YOUR_SESSION_ID_HERE y YOUR_SESSION_ID_SIGN_HERE con tus credenciales reales de TradingView.

  5. Reinicia Claude Desktop.

Cursor

  1. Ve a: Settings -> Cursor Settings -> MCP -> Edit User MCP Config (~/.cursor/mcp.json).

  2. Agrega o fusiona lo siguiente dentro del objeto mcpServers. Proporciona tus credenciales en el bloque env:

    {
      "mcpServers": {
        "tradingview-chart-mcp": {
          "command": "/absolute/path/to/your/tradingview-chart-mcp/.venv/bin/python3",
          "args": ["/absolute/path/to/your/tradingview-chart-mcp/main.py"],
          "env": {
            "TRADINGVIEW_SESSION_ID": "YOUR_SESSION_ID_HERE",
            "TRADINGVIEW_SESSION_ID_SIGN": "YOUR_SESSION_ID_SIGN_HERE"
            // Optional: Add MCP_SCRAPER_* variables here too if needed
            // "MCP_SCRAPER_HEADLESS": "False"
          }
        }
        // ... other servers if any ...
      }
    }
    
  3. Reemplaza las rutas de marcador de posición (command, args) con tus rutas absolutas reales.

  4. Reemplaza YOUR_SESSION_ID_HERE y YOUR_SESSION_ID_SIGN_HERE con tus credenciales reales de TradingView.

  5. Reinicia Cursor.

Instalación mediante Smithery

Para instalar TradingView Chart Image Scraper para Claude Desktop automáticamente mediante Smithery:

npx -y @smithery/cli install @ertugrul59/tradingview-chart-mcp --client claude

Configuración

Variables de Entorno

Se pueden configurar las siguientes variables de entorno para configurar el scraper:

  • TRADINGVIEW_SESSION_ID: Tu ID de sesión de TradingView (requerido)
  • TRADINGVIEW_SESSION_ID_SIGN: Tu firma de ID de sesión de TradingView (requerido)
  • MCP_SCRAPER_HEADLESS: Ejecutar el navegador en modo headless (predeterminado: True)
  • MCP_SCRAPER_WINDOW_WIDTH: Ancho de la ventana del navegador (predeterminado: 1400)
  • MCP_SCRAPER_WINDOW_HEIGHT: Alto de la ventana del navegador (predeterminado: 1400)
  • MCP_SCRAPER_USE_SAVE_SHORTCUT: Usar captura de imagen de portapapeles en lugar de enlaces de capturas de pantalla (predeterminado: True)
  • MCP_SCRAPER_CHART_PAGE_ID: ID de página de gráfico personalizada (opcional)

Función de Atajo de Guardado

La función MCP_SCRAPER_USE_SAVE_SHORTCUT te permite capturar imágenes de gráficos directamente al portapapeles como URLs de datos base64 en lugar de obtener enlaces de capturas de pantalla. Esto elimina la necesidad de descargar imágenes desde URLs.

Beneficios:

  • Captura de gráficos más rápida (no se necesitan solicitudes HTTP)
  • Más fiable (sin dependencia del CDN de TradingView)
  • Funciona sin conexión una vez que el gráfico está cargado
  • URLs de datos base64 directas para uso inmediato

Cómo funciona:

  • Cuando está habilitado (True): Usa Shift+Ctrl+S (o Shift+Cmd+S en Mac) para capturar la imagen del gráfico directamente al portapapeles
  • Cuando está deshabilitado (False): Usa el Alt+S tradicional para obtener enlaces de capturas de pantalla, luego los convierte a URLs de imágenes

Configuración:

# Enable clipboard image capture (DEFAULT)
MCP_SCRAPER_USE_SAVE_SHORTCUT=True

# Disable and use traditional screenshot links
MCP_SCRAPER_USE_SAVE_SHORTCUT=False