{
  "name": "io.strategyarena/strategyarena",
  "title": "Strategy Arena public MCP: public proofs and paper preview",
  "description": "Public proofs and paper preview. No tool here opens a seal or gives a KEEP: public calculations answer sealed:false. Start: get_product_contract, get_public_proofs, get_world_arena_facts. For a verdict: get_lab_desktop_handoff, then the local Lab. Survival Audit is a human URL only. TradingView aff_id never from MCP. Educational paper-trading only.",
  "version": "1.6.0",
  "homepage": "https://strategyarena.io/en/mcp-agents-trading-workflow",
  "documentation": "https://strategyarena.io/arenascript-grammar",
  "endpoints": [
    {
      "transport": "streamable-http",
      "url": "https://strategyarena.io/mcp"
    }
  ],
  "authentication": {
    "type": "none"
  },
  "capabilities": {
    "tools": true,
    "resources": false,
    "prompts": false
  },
  "tools_generated_from": "tools/list (scripts/generate_mcp_server_card.py)",
  "sealed": false,
  "discovery_profiles": {
    "cite": "https://strategyarena.io/mcp?profile=cite",
    "paper": "https://strategyarena.io/mcp?profile=paper",
    "note": "Filter on tools/list, not a permission boundary. Every tool stays callable."
  },
  "tools": [
    {
      "name": "explore_arena",
      "description": "One-shot arena orientation, after get_product_contract and get_public_proofs: live status, multi-asset tops, regime, monsters, community pulse, templates count, and play recipes. Paper-trading data, not a verdict. Call this before inventing strategies.",
      "inputSchema": {
        "properties": {
          "asset": {
            "default": "BTC",
            "description": "Actif, ex. BTC, ETH, SOL, BNB.",
            "maxLength": 64,
            "title": "Asset",
            "type": "string"
          }
        },
        "title": "explore_arenaArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_arena_assets",
      "description": "Liste les actifs d'arène (BTC, ETH, SOL, …) avec prix, has_live_arena (arène initialisée qui tourne) et lequel est actif. Utile avant list_arena_strategies(asset=...).",
      "inputSchema": {
        "properties": {},
        "title": "list_arena_assetsArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_arena_strategies",
      "description": "Liste les stratégies d'une arène (BTC/ETH/SOL/BNB/…) classées par PnL, avec trades clôturés, position ouverte éventuelle et couverture. limit = nombre de lignes renvoyées (1 à 40).",
      "inputSchema": {
        "properties": {
          "asset": {
            "default": "BTC",
            "description": "Actif, ex. BTC, ETH, SOL, BNB.",
            "maxLength": 64,
            "title": "Asset",
            "type": "string"
          },
          "limit": {
            "default": 15,
            "maximum": 40,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          }
        },
        "title": "list_arena_strategiesArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "search_strategies",
      "description": "Recherche textuelle de stratégies dans les classements multi-arènes et le catalogue natif. query: nom, style, provider (ex: 'mean reversion', 'Gemini', 'Darvas').",
      "inputSchema": {
        "properties": {
          "query": {
            "maxLength": 200,
            "title": "Query",
            "type": "string"
          },
          "limit": {
            "default": 12,
            "maximum": 30,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          }
        },
        "required": [
          "query"
        ],
        "title": "search_strategiesArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "compare_arenas",
      "description": "Compare les tops des arènes BTC/ETH/SOL/BNB (et autres si fournis) pour chasser des patterns cross-asset. assets: liste séparée par virgules, défaut BTC,ETH,SOL,BNB.",
      "inputSchema": {
        "properties": {
          "assets": {
            "default": "BTC,ETH,SOL,BNB",
            "maxLength": 200,
            "title": "Assets",
            "type": "string"
          },
          "top_n": {
            "default": 5,
            "maximum": 10,
            "minimum": 1,
            "title": "Top N",
            "type": "integer"
          }
        },
        "title": "compare_arenasArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "arena_snapshot",
      "description": "Snapshot compact de l'arène (schema strategy-arena-snapshot) : capital, leaders, méta utile pour un briefing agent sans télécharger tout le leaderboard.",
      "inputSchema": {
        "properties": {
          "asset": {
            "default": "BTC",
            "description": "Actif, ex. BTC, ETH, SOL, BNB.",
            "maxLength": 64,
            "title": "Asset",
            "type": "string"
          }
        },
        "title": "arena_snapshotArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_strategy_templates",
      "description": "Catalogue de templates de stratégies backtestables (RSI, trend, breakout…). Parfait pour démarrer une mutation avant generate_arenascript_strategy.",
      "inputSchema": {
        "properties": {},
        "title": "list_strategy_templatesArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "community_arena_rankings",
      "description": "Classement community-arena (stratégies soumises par humains) pour découvrir des idées hors vault IA.",
      "inputSchema": {
        "properties": {
          "limit": {
            "default": 10,
            "maximum": 30,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          }
        },
        "title": "community_arena_rankingsArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "community_arena_stats",
      "description": "Stats agrégées de la community-arena (soumissions, live, auteurs).",
      "inputSchema": {
        "properties": {},
        "title": "community_arena_statsArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_cuda_families",
      "description": "Familles CUDA ArenaScript disponibles (nasdaq scalping, monsters…). Lecture seule — lancer une optimisation reste un chemin GPU borné.",
      "inputSchema": {
        "properties": {},
        "title": "list_cuda_familiesArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_monster_detail",
      "description": "Détail d'un monstre ArenaScript (invictus, chimera, leviathan, hydra, meta_intelligence) : script publié, engineCompatible (préflight du moteur du Lab sur ce script), et si le moteur le refuse une engine_view réduite à ce qu'il exécute (ce n'est pas le monstre).",
      "inputSchema": {
        "properties": {
          "monster_id": {
            "maxLength": 200,
            "title": "Monster Id",
            "type": "string"
          }
        },
        "required": [
          "monster_id"
        ],
        "title": "get_monster_detailArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_native_strategies",
      "description": "Stratégies natives World/ArenaScript pour un asset slug (btc, eth, …). Utile pour lire des IDs stables style bitcoin::fractal_sentinel.",
      "inputSchema": {
        "properties": {
          "asset_slug": {
            "default": "btc",
            "description": "Actif, ex. BTC, ETH, SOL, BNB.",
            "maxLength": 64,
            "title": "Asset Slug",
            "type": "string"
          },
          "limit": {
            "default": 15,
            "maximum": 40,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          }
        },
        "title": "list_native_strategiesArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "invent_and_backtest",
      "description": "PAPER PREVIEW (sealed:false, is_keep:false, paper:true). Not a verdict; for a verdict use get_lab_desktop_handoff. ONE-SHOT public exploration: generate ArenaScript, validate, then backtest with the Lab Rust engine on server OHLCV. Returns script + validation + metrics so an AI can discover quickly. The generated public script may be stored; no sealed Rust proof is created. style: balanced|trend|breakout|momentum|mean_reversion|scalping.",
      "inputSchema": {
        "properties": {
          "idea": {
            "description": "Idée de stratégie en texte libre (2 000 caractères max).",
            "maxLength": 2000,
            "title": "Idea",
            "type": "string"
          },
          "asset": {
            "default": "BTC",
            "description": "Actif, ex. BTC, ETH, SOL, BNB.",
            "maxLength": 64,
            "title": "Asset",
            "type": "string"
          },
          "style": {
            "default": "mean_reversion",
            "maxLength": 200,
            "title": "Style",
            "type": "string"
          },
          "timeframe": {
            "default": "10m",
            "description": "5m, 10m, 15m, 30m, 1h, 2h, 4h ou 1d.",
            "maxLength": 8,
            "title": "Timeframe",
            "type": "string"
          }
        },
        "required": [
          "idea"
        ],
        "title": "invent_and_backtestArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "play_public_round",
      "description": "PAPER PREVIEW (sealed:false, is_keep:false, paper:true). Not a verdict; for a verdict use get_lab_desktop_handoff. THE PUBLIC PLAY BUTTON. Generate public ArenaScript, validate, backtest, and run Monte Carlo when there are at least ten trades (engine minimum). May store the generated script. Reports failed/skipped steps. Computed by the Lab Rust engine on server OHLCV (in-sample), not a KEEP or a sealed holdout. Uses the shared public Monte Carlo pool (see quota). For sealed holdout science, use get_lab_desktop_handoff.",
      "inputSchema": {
        "properties": {
          "idea": {
            "description": "Idée de stratégie en texte libre (2 000 caractères max).",
            "maxLength": 2000,
            "title": "Idea",
            "type": "string"
          },
          "asset": {
            "default": "BTC",
            "description": "Actif, ex. BTC, ETH, SOL, BNB.",
            "maxLength": 64,
            "title": "Asset",
            "type": "string"
          },
          "style": {
            "default": "mean_reversion",
            "maxLength": 200,
            "title": "Style",
            "type": "string"
          },
          "timeframe": {
            "default": "10m",
            "description": "5m, 10m, 15m, 30m, 1h, 2h, 4h ou 1d.",
            "maxLength": 8,
            "title": "Timeframe",
            "type": "string"
          }
        },
        "required": [
          "idea"
        ],
        "title": "play_public_roundArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "compare_public_ideas",
      "description": "PAPER PREVIEW (sealed:false, is_keep:false, paper:true). Not a verdict; for a verdict use get_lab_desktop_handoff. Pit two public ideas against each other: generate + backtest each, return a compact comparison. Refuses two ideas that produce the same script (nothing to compare). Not a KEEP. Payment never changes a verdict.",
      "inputSchema": {
        "properties": {
          "idea_a": {
            "description": "Idée de stratégie en texte libre (2 000 caractères max).",
            "maxLength": 2000,
            "title": "Idea A",
            "type": "string"
          },
          "idea_b": {
            "description": "Idée de stratégie en texte libre (2 000 caractères max).",
            "maxLength": 2000,
            "title": "Idea B",
            "type": "string"
          },
          "asset": {
            "default": "BTC",
            "description": "Actif, ex. BTC, ETH, SOL, BNB.",
            "maxLength": 64,
            "title": "Asset",
            "type": "string"
          },
          "style_a": {
            "default": "mean_reversion",
            "maxLength": 200,
            "title": "Style A",
            "type": "string"
          },
          "style_b": {
            "default": "trend",
            "maxLength": 200,
            "title": "Style B",
            "type": "string"
          }
        },
        "required": [
          "idea_a",
          "idea_b"
        ],
        "title": "compare_public_ideasArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "suggest_experiments",
      "description": "Suggère des expériences ArenaScript concrètes à partir du régime de marché et des leaders. Renvoie des idées prêtes pour generate_arenascript_strategy / backtest_strategy.",
      "inputSchema": {
        "properties": {
          "asset": {
            "default": "BTC",
            "description": "Actif, ex. BTC, ETH, SOL, BNB.",
            "maxLength": 64,
            "title": "Asset",
            "type": "string"
          },
          "count": {
            "default": 5,
            "maximum": 8,
            "minimum": 1,
            "title": "Count",
            "type": "integer"
          }
        },
        "title": "suggest_experimentsArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "arenascript_reference",
      "description": "Référence courte du protocole ArenaScript pour les IA externes. À appeler avant de générer une stratégie : grammaire canonique, garde-fous, boucle generate → validate → backtest → Monte Carlo, en aperçu papier. Un verdict scellé se joue dans la Lab locale (get_lab_desktop_handoff).",
      "inputSchema": {
        "properties": {},
        "title": "arenascript_referenceArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "generate_arenascript_strategy",
      "description": "Génère un ArenaScript canonique et éditable à partir d'une idée. Déterministe : les signaux nommés dans l'idée (RSI suracheté/survendu, croisement EMA, cassure Donchian, Bollinger, MACD, VWAP, volume, ADX, tendance ; short/sell → section short_entry) deviennent les conditions d'entrée ; idea_used dit ce qui a été reconnu. Sorties, taille et params viennent du style. asset et timeframe sont limités à une liste blanche. Styles : balanced, trend, breakout, momentum, mean_reversion, scalping.",
      "inputSchema": {
        "properties": {
          "idea": {
            "description": "Idée de stratégie en texte libre (2 000 caractères max).",
            "maxLength": 2000,
            "title": "Idea",
            "type": "string"
          },
          "asset": {
            "default": "BTC",
            "description": "Actif, ex. BTC, ETH, SOL, BNB.",
            "maxLength": 64,
            "title": "Asset",
            "type": "string"
          },
          "style": {
            "default": "balanced",
            "maxLength": 200,
            "title": "Style",
            "type": "string"
          },
          "timeframe": {
            "default": "4h",
            "description": "5m, 10m, 15m, 30m, 1h, 2h, 4h ou 1d.",
            "maxLength": 8,
            "title": "Timeframe",
            "type": "string"
          }
        },
        "required": [
          "idea"
        ],
        "title": "generate_arenascript_strategyArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "repair_arenascript",
      "description": "Répare un pseudo-ArenaScript en gardant ses propres conditions : corrections mécaniques (en-tête, sections écrites en ligne, syntaxe ATR), retrait des sections que le moteur refuse, puis retrait ligne par ligne de ce que le préflight du moteur Rust du Lab refuse (chaque retrait est listé). valid vient du moteur seul. Si aucune condition d'entrée exécutable ne reste, l'outil le dit (ok=false) au lieu d'inventer une stratégie.",
      "inputSchema": {
        "properties": {
          "arenascript": {
            "description": "Script ArenaScript (20 000 caractères max).",
            "maxLength": 20000,
            "title": "Arenascript",
            "type": "string"
          }
        },
        "required": [
          "arenascript"
        ],
        "title": "repair_arenascriptArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "validate_arenascript",
      "description": "Valide un ArenaScript avec le préflight du moteur Rust du Lab (seule autorité : une syntaxe que le moteur refuse est invalide), plus le lint local et un premier diagnostic. Utilise cet outil dans une boucle d'auto-correction avant tout backtest sérieux.",
      "inputSchema": {
        "properties": {
          "arenascript": {
            "description": "Script ArenaScript (20 000 caractères max).",
            "maxLength": 20000,
            "title": "Arenascript",
            "type": "string"
          }
        },
        "required": [
          "arenascript"
        ],
        "title": "validate_arenascriptArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "backtest_arenascript",
      "description": "PAPER PREVIEW (sealed:false, is_keep:false, paper:true). Not a verdict; for a verdict use get_lab_desktop_handoff. Alias de backtest_strategy : moteur Rust du Lab sur les bougies OHLCV du serveur au timeframe déclaré, dans l'échantillon, sans holdout. Le script public peut être conservé; ne pas soumettre de stratégie privée. Renvoie les mêmes métriques, limites et quota.",
      "inputSchema": {
        "properties": {
          "arenascript": {
            "description": "Script ArenaScript (20 000 caractères max).",
            "maxLength": 20000,
            "title": "Arenascript",
            "type": "string"
          }
        },
        "required": [
          "arenascript"
        ],
        "title": "backtest_arenascriptArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "list_arenascript_monsters",
      "description": "Liste les monstres Strategy Arena publiés en ArenaScript (Invictus, Meta Intelligence, Leviathan, Chimera, Hydra) avec leur famille CUDA et engineCompatible (préflight du moteur du Lab sur le script publié).",
      "inputSchema": {
        "properties": {},
        "title": "list_arenascript_monstersArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_arenascript_optimization_status",
      "description": "PAPER PREVIEW (sealed:false, is_keep:false, paper:true). Not a verdict; for a verdict use get_lab_desktop_handoff. Statut d'un job ArenaScript CUDA (lecture réservée aux comptes Operator : sur le MCP public, réponse not_available_on_public_mcp). Un résultat CUDA n'est pas une vérification par le moteur du Lab.",
      "inputSchema": {
        "properties": {
          "job_id": {
            "maxLength": 64,
            "title": "Job Id",
            "type": "string"
          }
        },
        "required": [
          "job_id"
        ],
        "title": "get_arenascript_optimization_statusArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_monster_evolution_log",
      "description": "Lit le Monster Evolution Log : événements où CUDA a muté un ArenaScript de famille. best.cuda_family_check_passed = critère de la famille CUDA ; arena_verified n'est vrai que si le script du monstre est aussi exécutable par le moteur du Lab (engineCompatible).",
      "inputSchema": {
        "properties": {
          "limit": {
            "default": 10,
            "maximum": 50,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          },
          "family": {
            "default": "",
            "maxLength": 64,
            "title": "Family",
            "type": "string"
          }
        },
        "title": "get_monster_evolution_logArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "arena_leaderboard",
      "description": "Classement live de l'arène (défaut BTC) : meilleures stratégies IA avec PnL %, trades, win rate. limit max 30. Pour multi-assets préfère compare_arenas ou list_arena_strategies.",
      "inputSchema": {
        "properties": {
          "limit": {
            "default": 10,
            "maximum": 30,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          }
        },
        "title": "arena_leaderboardArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "live_match",
      "description": "Le match en direct : dernier trade exécuté dans l'arène, leader actuel et lanterne rouge. Montre que l'arène bouge en temps réel.",
      "inputSchema": {
        "properties": {},
        "title": "live_matchArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "market_regime",
      "description": "Régime de marché courant détecté par Strategy Arena pour un actif (BULL/BEAR/RANGE) avec confiance, direction, volatilité et fenêtre d'observation (window). asset: BTC, ETH, SOL, BNB. Réponse compacte ; verbose=true ajoute les points de provenance (≈60 Ko).",
      "inputSchema": {
        "properties": {
          "asset": {
            "default": "BTC",
            "description": "Actif, ex. BTC, ETH, SOL, BNB.",
            "maxLength": 64,
            "title": "Asset",
            "type": "string"
          },
          "verbose": {
            "default": false,
            "title": "Verbose",
            "type": "boolean"
          }
        },
        "title": "market_regimeArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "predictions",
      "description": "Prédictions de marché de Strategy Arena : des IA votent sur des marchés (style Polymarket), avec le P&L du shadow betting. Paris triés du plus récent au plus ancien, avec leur date.",
      "inputSchema": {
        "properties": {},
        "title": "predictionsArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "backtest_strategy",
      "description": "PAPER PREVIEW (sealed:false, is_keep:false, paper:true). Not a verdict; for a verdict use get_lab_desktop_handoff. Backtest d'une stratégie ArenaScript par le moteur Rust du Lab (même binaire et mêmes règles que le Lab : 10 bps par côté, exécution à la clôture, pas de modèle de slippage, syntaxe non supportée refusée) sur les bougies OHLCV du serveur rééchantillonnées au timeframe déclaré. Résultat dans l'échantillon, pas un holdout scellé ni un KEEP. Échec explicite si le moteur refuse ou est indisponible. Pool public : 60 backtests par jour et par client (champ quota). Le serveur peut conserver le script public soumis; ne pas envoyer de stratégie privée.",
      "inputSchema": {
        "properties": {
          "arenascript": {
            "description": "Script ArenaScript (20 000 caractères max).",
            "maxLength": 20000,
            "title": "Arenascript",
            "type": "string"
          }
        },
        "required": [
          "arenascript"
        ],
        "title": "backtest_strategyArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "monte_carlo",
      "description": "PAPER PREVIEW (sealed:false, is_keep:false, paper:true). Not a verdict; for a verdict use get_lab_desktop_handoff. Bootstrap par blocs : rééchantillonne les trades nets de frais du backtest complet d'une stratégie ArenaScript (moteur Rust du Lab, graine dérivée de l'empreinte des trades, minimum 10 trades). Renvoie les percentiles d'équité simulée, input_scope et le quota ; la fréquence de gain historique n'est ni une probabilité prédictive, ni une preuve indépendante, ni un KEEP. Pool public : 8 par jour et par client, partagé avec play_public_round. engine_robustness_check(holdout_percent=0) donne exactement le même Monte Carlo.",
      "inputSchema": {
        "properties": {
          "arenascript": {
            "description": "Script ArenaScript (20 000 caractères max).",
            "maxLength": 20000,
            "title": "Arenascript",
            "type": "string"
          }
        },
        "required": [
          "arenascript"
        ],
        "title": "monte_carloArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "engine_robustness_check",
      "description": "PAPER PREVIEW (sealed:false, is_keep:false, paper:true). Not a verdict; for a verdict use get_lab_desktop_handoff. Backtest + holdout chronologique + Monte Carlo calculés par le moteur Rust du Lab (même binaire, mêmes frais 10 bps par côté, Monte Carlo déterministe : graine dérivée de l'empreinte des trades d'entrée) sur les bougies OHLCV réelles du serveur, rééchantillonnées au timeframe déclaré. holdout_percent : 10 à 40, ou 0 pour aucun holdout (Monte Carlo alors identique à monte_carlo). Renvoie les empreintes du script, du plan et des données, et le quota (pool public séparé : 8 par jour et par client). Échec explicite si le moteur refuse ou est indisponible. Descriptif, pas un KEEP.",
      "inputSchema": {
        "properties": {
          "arenascript": {
            "description": "Script ArenaScript (20 000 caractères max).",
            "maxLength": 20000,
            "title": "Arenascript",
            "type": "string"
          },
          "holdout_percent": {
            "default": 30,
            "maximum": 40,
            "minimum": 0,
            "title": "Holdout Percent",
            "type": "integer"
          }
        },
        "required": [
          "arenascript"
        ],
        "title": "engine_robustness_checkArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "inspect_pine_export_capability",
      "description": "Inspecte si une stratégie ArenaScript peut être exportée fidèlement en Pine v5 sans renvoyer tout le code Pine. Renvoie conversion_status EXACT (FULL_PINE) ou PARTIAL (PARTIAL_PINE), le symbole TradingView conseillé, les alternatives et les lignes non converties.",
      "inputSchema": {
        "properties": {
          "arenascript": {
            "description": "Script ArenaScript (20 000 caractères max).",
            "maxLength": 20000,
            "title": "Arenascript",
            "type": "string"
          }
        },
        "required": [
          "arenascript"
        ],
        "title": "inspect_pine_export_capabilityArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "describe_tradingview_partner_path",
      "description": "Explique le parcours TradingView post-preuve : first-account partenaire (Lab desktop only), revue neutre compte existant, et pourquoi le MCP n'émet jamais d'aff_id. À appeler avant de conseiller une inscription TradingView.",
      "inputSchema": {
        "properties": {},
        "title": "describe_tradingview_partner_pathArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "export_to_tradingview",
      "description": "PAPER PREVIEW (sealed:false, is_keep:false, paper:true). Not a verdict; for a verdict use get_lab_desktop_handoff. Exporte une stratégie ArenaScript en Pine Script v5 prêt à coller dans TradingView (sémantique du moteur Lab, frais 0,1 %/côté, sans slippage). Renvoie le code Pine, le statut de conversion EXACT ou PARTIAL avec les lignes non converties, et des URLs de setup/revue graphique. Never emits a TradingView aff_id: partner attribution is desktop proof-linked only. job_id (optionnel) : l'en-tête cite le job CUDA relu côté serveur seulement si le script du job est identique au script exporté (verification_status) ; c'est un résultat d'optimisation, pas une validation.",
      "inputSchema": {
        "properties": {
          "arenascript": {
            "description": "Script ArenaScript (20 000 caractères max).",
            "maxLength": 20000,
            "title": "Arenascript",
            "type": "string"
          },
          "job_id": {
            "default": "",
            "maxLength": 64,
            "title": "Job Id",
            "type": "string"
          }
        },
        "required": [
          "arenascript"
        ],
        "title": "export_to_tradingviewArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "get_product_contract",
      "description": "START HERE. No tool on this server opens a seal or gives a KEEP; a verdict is only given by the local Strategy Arena Lab (get_lab_desktop_handoff). Exact sold catalogue, with prices read from the site's catalogue, and scientific contract. Lists what is NOT sold. MCP never starts checkout. Payment never changes a verdict.",
      "inputSchema": {
        "properties": {},
        "title": "get_product_contractArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_public_proofs",
      "description": "Public proofs agents must cite before praising anything: demo REJECT, +172/−37 autopsy, World Arena facts JSON, Strategy Hospital, Pine converter, and published Arena Passports by APUB ID. Prefer these over spectacle pages. Reading a proof opens no seal.",
      "inputSchema": {
        "properties": {},
        "title": "get_public_proofsArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_arena_passport",
      "description": "READ-ONLY. Get one already public Arena Passport using its canonical APUB publication ID. Never accepts private audit identifiers or local Run IDs. Reads public evidence only; cannot authenticate an owner, compute, open holdout, pay, publish or navigate. Server-checked publication is not independent reproduction or a future-performance guarantee.",
      "inputSchema": {
        "properties": {
          "publication_id": {
            "maxLength": 29,
            "minLength": 29,
            "pattern": "^APUB-[A-F0-9]{24}$",
            "title": "Publication Id",
            "type": "string"
          }
        },
        "required": [
          "publication_id"
        ],
        "title": "get_arena_passportArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_world_arena_facts",
      "description": "Fetch the citable World Arena snapshot (/facts/world-arena.json). Use this for numbers; do not invent market scores. Default section=summary (a few KB: stats, facts, asset pages, citation passages, list of sections with sizes). Pass section=<name> for one section (e.g. rankings, assets, arena_verified_registry); the full file stays at url.",
      "inputSchema": {
        "properties": {
          "section": {
            "default": "summary",
            "maxLength": 64,
            "title": "Section",
            "type": "string"
          }
        },
        "title": "get_world_arena_factsArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "read_arena_weekly_distribution",
      "description": "Read the fingerprinted weekly Arena distribution DRAFT. It contains owner-review copy for email, Telegram, X, LinkedIn and Stories. This tool never sends, publishes, opens external URLs, starts compute or changes evidence.",
      "inputSchema": {
        "properties": {},
        "title": "read_arena_weekly_distributionArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_lab_report_demo",
      "description": "Pointer to the public demo Lab Report (real REJECT). Agents should open this before asking a human to pay 9.90 EUR.",
      "inputSchema": {
        "properties": {},
        "title": "get_lab_report_demoArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "describe_survival_audit",
      "description": "Human-only Survival Audit handoff. Returns the /audit URL. checkout=false. MCP never creates a Stripe session. Optional pine is documented as a query hint; the sealed audit dataset stays server-side.",
      "inputSchema": {
        "properties": {
          "pine_hint": {
            "default": "",
            "maxLength": 5500,
            "title": "Pine Hint",
            "type": "string"
          }
        },
        "title": "describe_survival_auditArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_strategy_hospital",
      "description": "Citable Strategy Hospital snapshot (/facts/strategy-hospital.json). Failures and wounded strategies are first-class. Do not invent triage numbers.",
      "inputSchema": {
        "properties": {},
        "title": "get_strategy_hospitalArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_overfit_autopsy",
      "description": "Citable +172 / −37 overfitting autopsy. Use these numbers. A flattering in-sample backtest is the lie this page exists to kill.",
      "inputSchema": {
        "properties": {},
        "title": "get_overfit_autopsyArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_pine_converter_contract",
      "description": "Pine converter contract. Live inspect tool, not a verdict. Does not start Survival Audit checkout.",
      "inputSchema": {
        "properties": {},
        "title": "get_pine_converter_contractArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_lab_desktop_handoff",
      "description": "THE ONLY PATH TO A VERDICT. No tool on this server opens a seal: the sealed proof runs in Strategy Arena Lab, a free local app for Windows and Linux, on 127.0.0.1. Returns the version served by /download and the Lab's real MCP path, starting with start_here. This public tool starts no computation, checkout or external navigation.",
      "inputSchema": {
        "properties": {},
        "title": "get_lab_desktop_handoffArguments",
        "type": "object"
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    }
  ]
}
