Herramientas

Backtest de una estrategia Pine desde Claude Code en 90 segundos

Tutorial del servidor @pineforge/codegen-mcp: instálalo con un solo npx, pide a Claude que transpile tu Pine, ejecuta el backtest en Docker y lee la lista de operaciones. Tu OHLCV no sale de la máquina.

7 min de lectura#mcp#ai#claude#cursor#tooling

El codegen de PineForge llevaba meses detrás de un curl; esta semana también hay servidor Model Context Protocol: puedes lanzar un backtest desde cualquier cliente MCP — Claude Desktop, Claude Code, Cursor, Continue.dev, etc.

Recorrido extremo a extremo: de repo vacío a informe JSON en ~90 segundos de reloj (más la primera docker pull).

Qué hace el servidor

@pineforge/codegen-mcp en npm es un puente stdio local fino. Cuatro herramientas:

ToolRuns onCost
transpile_pineHosted codegen APIcounts against your quota (refunded on compile error)
get_quotaHosted codegen APIfree
backtest_pineYour local Docker daemoncounts 1 (the transpile inside)
pull_engine_imageYour local Docker daemonfree

Privacidad: el Pine viaja al codegen alojado en codegen.pineforge.dev. El CSV OHLCV nobacktest_pine monta tu archivo solo lectura en Docker local; el contenedor runtime sin red saliente. Los datos no salen del portátil.

Instalación (un comando)

npx -y @pineforge/codegen-mcp

Node ≥ 20, Docker arriba, clave pf_… del waitlist.

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "pineforge-codegen": {
      "command": "npx",
      "args": ["-y", "@pineforge/codegen-mcp"],
      "env": {
        "PINEFORGE_API_KEY": "pf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Reinicia Claude. Primera llamada: codegen + docker pull (~250 MB una vez).

Claude Code (CLI)

claude mcp add pineforge-codegen \
  --transport stdio \
  --env PINEFORGE_API_KEY=pf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
  -- npx -y @pineforge/codegen-mcp

Cursor

Ajustes → MCP → mismo bloque JSON.

Interacción en lenguaje natural

Ejemplo comprimido: pides backtest de ./strategy.pine contra ./eth_15m.csv; el modelo llama backtest_pine y te resume Sharpe / drawdown.

Forma del JSON

{
  "engine": "pineforge",
  "summary": {
    "total_trades": 49,
    "net_pnl": -190.85,
    "max_drawdown": 312.0,
    "sharpe": 0.21,
    "profit_factor": 0.78,
    "win_rate": 0.43
  },
  "trades": [
    /* 49 entries with timestamps, prices, PnL */
  ],
  "elapsed_seconds": 0.0042,
  "_meta": {
    "strategy_cpp_bytes": 5079,
    "image": "ghcr.io/pineforge-4pass/pineforge-engine:latest"
  }
}

Cuotas

Tier gratis: 100 transpiles/mes. Patrón útil: en CLAUDE.md pedir get_quota antes de barridos grandes.

Fuera de alcance a propósito

  • Sin órdenes live ni broker.
  • Sin descarga de datos: traes el OHLCV.
  • Sin estado entre llamadas: cada backtest_pine es contenedor fresco.

Patrones útiles

Apretar stop y re-lanzar; cambiar CSV de ventana; barridos de parámetro; comparar dos estrategias con dos llamadas.

Enlaces