{"serverId":"mcp-registry/io.github.cachecarti/dmoera-creator","tools":[{"name":"add_bot_to_fund","fixed":{"name":"add_bot_to_fund","description":"Add a bot to a fund's roster.\n\n    Personal funds can only contain the authenticated user's OWN bots.\n    Use list_my_bots to see eligible strategies.\n\n    Args:\n        fund_id: The fund's ID.\n        bot_id: The bot to add (e.g. \"momentum_eth_v3\").\n        bot_domain: The bot's domain (e.g. \"eth_usdc\", \"btc_usdc\").\n        weight: Initial allocation weight in percent (default 20.0).\n        rationale: Why you're adding it — published in the fund's manager log.\n\n    Returns the updated roster e","inputSchema":{"type":"object","title":"add_bot_to_fundArguments","required":["fund_id","bot_id","bot_domain"],"properties":{"bot_id":{"type":"string","title":"Bot Id"},"weight":{"type":"number","title":"Weight","default":20},"fund_id":{"type":"integer","title":"Fund Id"},"rationale":{"type":"string","title":"Rationale","default":""},"bot_domain":{"type":"string","title":"Bot Domain"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":265,"tokensAfter":265},{"name":"close_fund","fixed":{"name":"close_fund","description":"Permanently close a hedge fund. Returns all capital to the wallet.\n\n    This is irreversible. The fund's performance record is preserved for\n    reporting and copy-trader settlement.\n\n    Args:\n        fund_id: The fund's ID.\n\n    Returns success or error.\n    ","inputSchema":{"type":"object","title":"close_fundArguments","required":["fund_id"],"properties":{"fund_id":{"type":"integer","title":"Fund Id"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":127,"tokensAfter":127},{"name":"create_formation","fixed":{"name":"create_formation","description":"Save a formation on the fund's bench.\n\n    Args:\n        fund_id: Your fund.\n        name: Formation name, e.g. \"Iran Oil Shock\".\n        roster: [{\"bot_id\": \"dir_long_btc\", \"weight_pct\": 60}, ...]. Weights\n            under 100 total leave the rest in cash. Empty list = all cash.\n            Shares may not add up to more than 100.\n        emoji: Optional emoji.\n        description: When you'd play it.\n        leverage: 1-20x for this formation (applied to new positions).\n        sizing: \"weight","inputSchema":{"type":"object","title":"create_formationArguments","required":["fund_id"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","default":null},"emoji":{"type":"string","title":"Emoji","default":""},"roster":{"anyOf":[{"type":"array","items":{"type":"object","additionalProperties":true}},{"type":"null"}],"title":"Roster","default":null},"sizing":{"type":"string","title":"Sizing","default":"weights"},"fund_id":{"type":"integer","title":"Fund Id"},"leverage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Leverage","default":null},"rationale":{"type":"string","title":"Rationale","default":""},"description":{"type":"string","title":"Description","default":""},"from_current":{"type":"boolean","title":"From Current","default":false},"template_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template Key","default":null}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":404,"tokensAfter":404},{"name":"create_fund","fixed":{"name":"create_fund","description":"Create a new personal hedge fund for the authenticated user.\n\n    The fund starts inactive — call activate_fund to start Manager Mode.\n    Initial capital is taken from the user's wallet_cash at creation time.\n    Personal funds can ONLY contain the user's own bots — use list_my_bots\n    to see eligible strategies.\n\n    Args:\n        fund_name: Display name for the fund.\n        router_preset: Risk profile — one of \"prudent\", \"standard\",\n                      \"opportunistic\", \"unrestricted\".\n   ","inputSchema":{"type":"object","title":"create_fundArguments","properties":{"fund_name":{"type":"string","title":"Fund Name","default":"My Hedge Fund"},"fund_type":{"type":"string","title":"Fund Type","default":"personal"},"philosophy":{"type":"string","title":"Philosophy","default":""},"router_preset":{"type":"string","title":"Router Preset","default":"standard"},"aggression_mode":{"type":"string","title":"Aggression Mode","default":"weights"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":281,"tokensAfter":281},{"name":"delete_formation","fixed":{"name":"delete_formation","description":"Delete a formation from the bench (not the one on the field).\n    rationale is REQUIRED — why you're deleting it. Published on the manager's log.","inputSchema":{"type":"object","title":"delete_formationArguments","required":["fund_id","formation_id","rationale"],"properties":{"fund_id":{"type":"integer","title":"Fund Id"},"rationale":{"type":"string","title":"Rationale"},"formation_id":{"type":"integer","title":"Formation Id"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":133,"tokensAfter":133},{"name":"estimate_swap_cost","fixed":{"name":"estimate_swap_cost","description":"Estimate the friction cost (in bps) of swapping a bot in a fund.\n\n    Use this before calling swap_bot_in_fund to understand the cost of\n    winding down the old bot's positions and opening new ones.\n\n    Args:\n        fund_id: The fund's ID.\n        old_bot_id: The bot being considered for removal.\n        new_bot_id: The replacement bot.\n        new_bot_domain: The replacement bot's domain.\n\n    Returns the estimated friction in bps of fund AUM.\n    ","inputSchema":{"type":"object","title":"estimate_swap_costArguments","required":["fund_id","old_bot_id","new_bot_id","new_bot_domain"],"properties":{"fund_id":{"type":"integer","title":"Fund Id"},"new_bot_id":{"type":"string","title":"New Bot Id"},"old_bot_id":{"type":"string","title":"Old Bot Id"},"new_bot_domain":{"type":"string","title":"New Bot Domain"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":244,"tokensAfter":244},{"name":"get_active_fund","fixed":{"name":"get_active_fund","description":"Get the authenticated user's currently active (Manager Mode) fund.\n\n    Returns the active fund object or null if Manager Mode is not active.\n    ","inputSchema":{"type":"object","title":"get_active_fundArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":77,"tokensAfter":77},{"name":"get_bot_profile","fixed":{"name":"get_bot_profile","description":"Get detailed profile and performance stats for a specific bot.\n\n    Args:\n        bot_id: The bot identifier (e.g. \"Eth_Full_Ensemble\").\n\n    Returns JSON with: bot_id, domain, strategy type, full performance\n    metrics (Sharpe, Sortino, Calmar, profit factor, regime breakdown),\n    current position if any, and recent trade history.\n    ","inputSchema":{"type":"object","title":"get_bot_profileArguments","required":["bot_id"],"properties":{"bot_id":{"type":"string","title":"Bot Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":151,"tokensAfter":151},{"name":"get_current_prices","fixed":{"name":"get_current_prices","description":"Get current live prices for all tracked symbols.\n\n    Returns JSON with symbol → {price, bid, ask, source, change_24h_pct,\n    volume_24h} for ETHUSDT, BTCUSDT, SOLUSDT from Binance/Coinbase/Kraken.\n    ","inputSchema":{"type":"object","title":"get_current_pricesArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":95,"tokensAfter":95},{"name":"get_feature_catalog","fixed":{"name":"get_feature_catalog","description":"List all data feeds available to strategies via ctx.features.\n\n    Features are external data that strategies can read during on_bar().\n    Each feature has a status: \"live\" (available now, requirable) or\n    \"planned\" (roadmap, not yet available). Only live features can be\n    used in required_features.\n\n    Returns JSON array of features with: key, label, description, unit,\n    example, cadence, source, status, and backtest_mode.\n    ","inputSchema":{"type":"object","title":"get_feature_catalogArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":164,"tokensAfter":164},{"name":"get_fund","fixed":{"name":"get_fund","description":"Get detailed info for a specific hedge fund, including its roster.\n\n    Args:\n        fund_id: The fund's ID.\n\n    Returns a JSON object with fund details and active roster entries\n    (bot_id, bot_name, weight, domain, current_pnl).\n    ","inputSchema":{"type":"object","title":"get_fundArguments","required":["fund_id"],"properties":{"fund_id":{"type":"integer","title":"Fund Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":119,"tokensAfter":119},{"name":"get_fund_analytics","fixed":{"name":"get_fund_analytics","description":"Get real-time analytics for a fund dashboard.\n\n    Args:\n        fund_id: The fund's ID.\n\n    Returns fund analytics: allocation breakdown, per-bot performance,\n    risk metrics, and benchmark comparison.\n    ","inputSchema":{"type":"object","title":"get_fund_analyticsArguments","required":["fund_id"],"properties":{"fund_id":{"type":"integer","title":"Fund Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":116,"tokensAfter":116},{"name":"get_fund_live_pnl","fixed":{"name":"get_fund_live_pnl","description":"Build a real-time PnL chart from closed positions for a fund's roster.\n\n    Args:\n        fund_id: The fund's ID.\n\n    Returns a JSON series of cumulative PnL points.\n    ","inputSchema":{"type":"object","title":"get_fund_live_pnlArguments","required":["fund_id"],"properties":{"fund_id":{"type":"integer","title":"Fund Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":105,"tokensAfter":105},{"name":"get_fund_log","fixed":{"name":"get_fund_log","description":"The fund's manager's log: every switch, roster change and note with its rationale.","inputSchema":{"type":"object","title":"get_fund_logArguments","required":["fund_id"],"properties":{"limit":{"type":"integer","title":"Limit","default":30},"fund_id":{"type":"integer","title":"Fund Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":91,"tokensAfter":91},{"name":"get_fund_performance","fixed":{"name":"get_fund_performance","description":"Get performance snapshots for a fund's P&L graph.\n\n    Args:\n        fund_id: The fund's ID.\n        limit: Max snapshots to return (default 100).\n\n    Returns a JSON time-series of AUM/PnL snapshots.\n    ","inputSchema":{"type":"object","title":"get_fund_performanceArguments","required":["fund_id"],"properties":{"limit":{"type":"integer","title":"Limit","default":100},"fund_id":{"type":"integer","title":"Fund Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":132,"tokensAfter":132},{"name":"get_fund_positions","fixed":{"name":"get_fund_positions","description":"Get open positions for a fund's roster bots.\n\n    Args:\n        fund_id: The fund's ID.\n\n    Returns a JSON array of open positions with entry/exit prices and PnL.\n    ","inputSchema":{"type":"object","title":"get_fund_positionsArguments","required":["fund_id"],"properties":{"fund_id":{"type":"integer","title":"Fund Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":105,"tokensAfter":105},{"name":"get_fund_report_card","fixed":{"name":"get_fund_report_card","description":"Get the latest report card for a fund.\n\n    Args:\n        fund_id: The fund's ID.\n\n    Returns the latest immutable report card, or null if none exists.\n    ","inputSchema":{"type":"object","title":"get_fund_report_cardArguments","required":["fund_id"],"properties":{"fund_id":{"type":"integer","title":"Fund Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":103,"tokensAfter":103},{"name":"get_fund_trades","fixed":{"name":"get_fund_trades","description":"Get closed trade history for a fund's roster bots.\n\n    Args:\n        fund_id: The fund's ID.\n        limit: Max trades to return (default 50).\n        offset: Pagination offset.\n\n    Returns a JSON array of closed trades.\n    ","inputSchema":{"type":"object","title":"get_fund_tradesArguments","required":["fund_id"],"properties":{"limit":{"type":"integer","title":"Limit","default":50},"offset":{"type":"integer","title":"Offset","default":0},"fund_id":{"type":"integer","title":"Fund Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":151,"tokensAfter":151},{"name":"get_manager_profile","fixed":{"name":"get_manager_profile","description":"Get a fund's manager persona: name, avatar, tagline, manager_kind\n    (human|ai), AI prompt, AI schedule, socials, leverage and the formation\n    currently on the field.","inputSchema":{"type":"object","title":"get_manager_profileArguments","required":["fund_id"],"properties":{"fund_id":{"type":"integer","title":"Fund Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":104,"tokensAfter":104},{"name":"get_market_regime","fixed":{"name":"get_market_regime","description":"Get current market regime classification.\n\n    Returns the aggregate regime (e.g. \"bull_calm\", \"bear_volatile\"),\n    per-symbol regimes, crisis score, and the derivatives data driving\n    the classification (funding rates, open interest, long/short ratios,\n    taker buy/sell ratios).\n\n    Regime determines which trade directions are allowed:\n    - bull_* → longs only\n    - bear_* → shorts only\n    - neutral_* → both longs and shorts\n    - crisis/meltdown → no new positions\n    ","inputSchema":{"type":"object","title":"get_market_regimeArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":175,"tokensAfter":175},{"name":"get_marketplace_bots","fixed":{"name":"get_marketplace_bots","description":"List bots published to the marketplace.\n\n    Args:\n        domain: Filter by domain (e.g. \"eth_usdc\"). Omit for all domains.\n        sort: Sort order — \"rating\", \"return\", \"subscribers\", or \"newest\".\n        limit: Max results (default 20, max 100).\n\n    Returns JSON array of marketplace listings with: listing_id, bot_id,\n    title, description, domain, creator, monthly_price_usd, cached stats\n    (win_rate, return_bps, sharpe), subscriber_count, and avg_rating.\n    ","inputSchema":{"type":"object","title":"get_marketplace_botsArguments","properties":{"sort":{"type":"string","title":"Sort","default":"rating"},"limit":{"type":"integer","title":"Limit","default":20},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":230,"tokensAfter":230},{"name":"get_public_fund_page","fixed":{"name":"get_public_fund_page","description":"Everything on a fund's public page: manager persona, philosophy, AI\n    prompt, formations, roster, open positions, track record and log.\n    Works for any public fund, not just yours.","inputSchema":{"type":"object","title":"get_public_fund_pageArguments","required":["fund_id"],"properties":{"fund_id":{"type":"integer","title":"Fund Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":109,"tokensAfter":109},{"name":"get_strategy_report","fixed":{"name":"get_strategy_report","description":"Get a detailed report card for a strategy.\n\n    Includes validation run results for all 7 stages, performance metrics,\n    and the integrity block (code hash, AST hash, parameter fingerprint).\n\n    Args:\n        strategy_id: The strategy's database ID.\n\n    Returns JSON with: strategy details, latest validation runs, metrics.\n    ","inputSchema":{"type":"object","title":"get_strategy_reportArguments","required":["strategy_id"],"properties":{"strategy_id":{"type":"integer","title":"Strategy Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":155,"tokensAfter":155},{"name":"get_tournament_status","fixed":{"name":"get_tournament_status","description":"Get current tournament round status and leaderboard.\n\n    Tournaments run every 3 days. Top 3 bots per domain win prizes\n    from the reward pool. Scoring is weighted: 50% risk-adjusted return,\n    30% total PnL, 20% consistency.\n\n    Returns JSON with: current round info (round_id, start/end time,\n    reward_pool_usd, total_participants), and leaderboard entries.\n    ","inputSchema":{"type":"object","title":"get_tournament_statusArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":144,"tokensAfter":144},{"name":"get_vault_history","fixed":{"name":"get_vault_history","description":"Get the Vault's regime switch history for the timeline.\n\n    Returns a JSON array of past regime transitions with timestamps.\n    ","inputSchema":{"type":"object","title":"get_vault_historyArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":74,"tokensAfter":74},{"name":"get_vault_status","fixed":{"name":"get_vault_status","description":"Get the authenticated user's Vault state.\n\n    The Vault is a regime-aware allocator: in strong markets most capital\n    holds BTC/ETH/SOL; when the market weakens it rotates into savings and\n    funding arbitrage. Returns current regime, allocation weights, and\n    sleeve holdings.\n    ","inputSchema":{"type":"object","title":"get_vault_statusArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":118,"tokensAfter":118},{"name":"list_bots","fixed":{"name":"list_bots","description":"List trading bots ranked by performance.\n\n    Args:\n        domain: Filter by domain key (e.g. \"eth_usdc\", \"btc_usdc\", \"sol_usdc\").\n               If omitted, returns top bots across all domains.\n        limit: Maximum number of bots to return (default 20, max 100).\n\n    Returns JSON array of bots with: bot_id, domain, strategy_name, sharpe,\n    win_rate, total_trades, return_bps, and validation_score.\n    ","inputSchema":{"type":"object","title":"list_botsArguments","properties":{"limit":{"type":"integer","title":"Limit","default":20},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":190,"tokensAfter":190},{"name":"list_directional_bots","fixed":{"name":"list_directional_bots","description":"Directional building-block bots: always long / always short BTC, ETH,\n    SOL. Pure exposure, no edge — use them to express a market view in a\n    formation (e.g. news is bullish for BTC -> a formation heavy in\n    dir_long_btc). Allowed in personal and standard funds.","inputSchema":{"type":"object","title":"list_directional_botsArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":114,"tokensAfter":114},{"name":"list_domains","fixed":{"name":"list_domains","description":"List all available trading domains on dMoERA.\n\n    Domains define what asset pair a strategy trades, what time horizon\n    it uses (scalp=5m, swing=1h, crisis=2m), and what data is available.\n    Strategies must declare which domain they belong to.\n\n    Returns a JSON array of domain objects with: key, name, type,\n    base_asset, quote_asset, grading_seconds, and feed_symbols.\n    ","inputSchema":{"type":"object","title":"list_domainsArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":143,"tokensAfter":143},{"name":"list_formation_templates","fixed":{"name":"list_formation_templates","description":"Ready-made theme formations (BTC Bull, Alt Season, Bear Raid, Pair\n    Hedge, Risk Off, All Cash). Add one with create_formation(template_key=...).","inputSchema":{"type":"object","title":"list_formation_templatesArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":82,"tokensAfter":82},{"name":"list_formations","fixed":{"name":"list_formations","description":"The fund's bench: every saved formation with roster, weights,\n    settings, and which one is on the field (is_active).","inputSchema":{"type":"object","title":"list_formationsArguments","required":["fund_id"],"properties":{"fund_id":{"type":"integer","title":"Fund Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":88,"tokensAfter":88},{"name":"list_funds","fixed":{"name":"list_funds","description":"List all hedge funds for the authenticated user (active + closed).\n\n    Returns a JSON array of fund objects with: id, fund_name, is_active,\n    inception_date, initial_capital, current_aum, router_preset,\n    aggression_mode, total_pnl_usd, total_pnl_bps, and roster summary.\n    ","inputSchema":{"type":"object","title":"list_fundsArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":112,"tokensAfter":112},{"name":"list_managers","fixed":{"name":"list_managers","description":"Directory of public fund managers (human and AI) with returns and\n    what's on the field.","inputSchema":{"type":"object","title":"list_managersArguments","properties":{"limit":{"type":"integer","title":"Limit","default":50}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":75,"tokensAfter":75},{"name":"list_my_bots","fixed":{"name":"list_my_bots","description":"List the authenticated user's OWN bots eligible for a personal fund roster.\n\n    Personal funds can NEVER contain another user's bots — this returns only\n    the caller's own personal + incubating + live bots with live engine stats\n    and gamified card ratings.\n\n    Args:\n        domain: Filter by domain (e.g. \"eth_usdc\").\n\n    Returns a JSON array of the user's bots.\n    ","inputSchema":{"type":"object","title":"list_my_botsArguments","properties":{"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":165,"tokensAfter":165},{"name":"list_open_source_bots","fixed":{"name":"list_open_source_bots","description":"Browse open-source bots with normalized stats and capacity info.\n\n    NOTE: personal funds can only contain the authenticated user's OWN\n    bots — use list_my_bots for roster-eligible strategies. This tool is\n    for researching the broader bot ecosystem.\n\n    Args:\n        domain: Filter by domain (e.g. \"eth_usdc\").\n\n    Returns a JSON array of bot entries with gamified card ratings.\n    ","inputSchema":{"type":"object","title":"list_open_source_botsArguments","properties":{"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":175,"tokensAfter":175},{"name":"list_strategies","fixed":{"name":"list_strategies","description":"List all strategies created by a user.\n\n    Args:\n        user_id: The creator's user ID.\n\n    Returns JSON array of strategies with: id, bot_id, name, domain,\n    status, declared_sl_bps, declared_tp_bps, and created_at.\n    ","inputSchema":{"type":"object","title":"list_strategiesArguments","required":["user_id"],"properties":{"user_id":{"type":"string","title":"User Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":119,"tokensAfter":119},{"name":"post_fund_note","fixed":{"name":"post_fund_note","description":"Post an update to the fund's public manager's log without changing anything.","inputSchema":{"type":"object","title":"post_fund_noteArguments","required":["fund_id","text"],"properties":{"text":{"type":"string","title":"Text"},"fund_id":{"type":"integer","title":"Fund Id"},"headline":{"type":"string","title":"Headline","default":""}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":105,"tokensAfter":105},{"name":"remove_bot_from_fund","fixed":{"name":"remove_bot_from_fund","description":"Remove a bot from a fund's roster (triggers wind-down of its positions).\n\n    Args:\n        fund_id: The fund's ID.\n        bot_id: The bot to remove.\n        reason: Optional reason for removal.\n\n    Returns success or error.\n    ","inputSchema":{"type":"object","title":"remove_bot_from_fundArguments","required":["fund_id","bot_id"],"properties":{"bot_id":{"type":"string","title":"Bot Id"},"reason":{"type":"string","title":"Reason","default":""},"fund_id":{"type":"integer","title":"Fund Id"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":154,"tokensAfter":154},{"name":"run_ai_manager","fixed":{"name":"run_ai_manager","description":"Run one decision cycle of the platform AI manager for your fund now\n    (fund must be set to manager_kind=\"ai\" with an ai_prompt).","inputSchema":{"type":"object","title":"run_ai_managerArguments","required":["fund_id"],"properties":{"fund_id":{"type":"integer","title":"Fund Id"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":91,"tokensAfter":91},{"name":"run_fund_historical_test","fixed":{"name":"run_fund_historical_test","description":"Simulate how a roster of bots would have performed historically.\n\n    Queries each bot's closed positions over the available historical\n    period and combines them (weighted) into a single PnL time-series\n    with diagnosis. Rate limited: 1 request per 30 seconds per user.\n\n    Args:\n        roster: List of {\"bot_id\": str, \"weight_pct\": float} entries.\n        initial_capital: Starting capital for the simulation (default 10000).\n\n    Returns the simulated PnL time-series and diagnosis.\n    ","inputSchema":{"type":"object","title":"run_fund_historical_testArguments","required":["roster"],"properties":{"roster":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Roster"},"initial_capital":{"type":"number","title":"Initial Capital","default":10000}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":237,"tokensAfter":237},{"name":"set_fund_lineup","fixed":{"name":"set_fund_lineup","description":"Replace your fund's live lineup in one call.\n\n    roster: [{\"bot_id\": \"dir_long_btc\", \"weight_pct\": 60}, {\"bot_id\": \"...\", \"weight_pct\": 25}]\n    Weights are % of the fund; anything under 100 stays in cash. Bots that\n    stay keep their positions, removed bots are closed at market, new bots open\n    on their next signal (Always Long/Short bots open right away). The change\n    and your rationale go into the fund's public history.\n    ","inputSchema":{"type":"object","title":"set_fund_lineupArguments","required":["fund_id","roster"],"properties":{"roster":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Roster"},"fund_id":{"type":"integer","title":"Fund Id"},"rationale":{"type":"string","title":"Rationale","default":""}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":228,"tokensAfter":228},{"name":"set_manager_profile","fixed":{"name":"set_manager_profile","description":"Set the manager persona shown on the fund's PUBLIC page.\n\n    Args:\n        fund_id: Your fund.\n        persona_name: Display name, e.g. \"Grandma Prudence\".\n        avatar: One emoji, e.g. \"👵\".\n        tagline: One line under the name.\n        manager_kind: \"human\" or \"ai\". With \"ai\", the platform's AI loop can\n            run the fund on a schedule using ai_prompt.\n        philosophy: The fund's investment philosophy (public).\n        ai_prompt: System prompt for the platform AI manager (publi","inputSchema":{"type":"object","title":"set_manager_profileArguments","required":["fund_id"],"properties":{"avatar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar","default":null},"fund_id":{"type":"integer","title":"Fund Id"},"socials":{"anyOf":[{"type":"object","additionalProperties":{"type":"string"}},{"type":"null"}],"title":"Socials","default":null},"tagline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tagline","default":null},"ai_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Prompt","default":null},"ai_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ai Enabled","default":null},"philosophy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Philosophy","default":null},"manager_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manager Kind","default":null},"persona_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Persona Name","default":null},"ai_use_search":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ai Use Search","default":null},"ai_cadence_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ai Cadence Hours","default":null}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":478,"tokensAfter":478},{"name":"submit_strategy","fixed":{"name":"submit_strategy","description":"Submit a strategy for full validation and live deployment.\n\n    Runs the complete 7-stage validation pipeline:\n    1. static_check — code safety (banned imports, syntax)\n    2. in_sample — sanity check on training data\n    3. out_of_sample — test on unseen data (70/30 split)\n    4. walk_forward — rolling window validation\n    5. randomized_start — different random start points\n    6. perturbation — market stress test\n    7. holdout — server-side reserved data (pass/fail only)\n\n    If all stages ","inputSchema":{"type":"object","title":"submit_strategyArguments","required":["name","domain","code","user_id"],"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"domain":{"type":"string","title":"Domain"},"symbol":{"type":"string","title":"Symbol","default":"ETHUSDT"},"user_id":{"type":"string","title":"User Id"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":255,"tokensAfter":255},{"name":"tag_team_info","fixed":{"name":"tag_team_info","description":"Get the authenticated user's Tag Team session info.\n\n    Tag Team is a daily paper-trading competition: you get $10k paper\n    capital split 70% human / 30% Co-Pilot bot. Make manual trades,\n    deploy the Co-Pilot after 3 closed manual trades, and your combined\n    PnL is scored on the daily leaderboard.\n\n    Returns session state, open positions, bot status, and rank.\n    ","inputSchema":{"type":"object","title":"tag_team_infoArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":141,"tokensAfter":141},{"name":"update_formation","fixed":{"name":"update_formation","description":"Edit a saved formation. Changes take effect next time it goes on the field.\n    rationale is REQUIRED — why you changed it. Published on the manager's log.","inputSchema":{"type":"object","title":"update_formationArguments","required":["fund_id","formation_id"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","default":null},"emoji":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Emoji","default":null},"roster":{"anyOf":[{"type":"array","items":{"type":"object","additionalProperties":true}},{"type":"null"}],"title":"Roster","default":null},"sizing":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sizing","default":null},"fund_id":{"type":"integer","title":"Fund Id"},"leverage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Leverage","default":null},"rationale":{"type":"string","title":"Rationale","default":""},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","default":null},"formation_id":{"type":"integer","title":"Formation Id"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":298,"tokensAfter":298},{"name":"update_fund_caps","fixed":{"name":"update_fund_caps","description":"Update a fund's risk caps and settings.\n\n    Args:\n        fund_id: The fund's ID.\n        max_per_bot_pct: Max allocation per single bot (e.g. 40.0 = 40%).\n        max_per_domain_pct: Max allocation per domain (e.g. 60.0 = 60%).\n        regime_veto_enabled: Whether the regime detector can veto trades.\n\n    Only provided fields are updated; others remain unchanged.\n\n    Returns success or error.\n    ","inputSchema":{"type":"object","title":"update_fund_capsArguments","required":["fund_id"],"properties":{"fund_id":{"type":"integer","title":"Fund Id"},"max_per_bot_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Per Bot Pct","default":null},"max_per_domain_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Per Domain Pct","default":null},"regime_veto_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Regime Veto Enabled","default":null}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":262,"tokensAfter":262},{"name":"update_fund_weights","fixed":{"name":"update_fund_weights","description":"Update allocation weights for bots in a fund's roster.\n\n    Args:\n        fund_id: The fund's ID.\n        weights: A dict mapping bot_id to new weight percentage (e.g.\n                {\"momentum_eth_v3\": 15.0, \"scalper_btc_v2\": 20.0}).\n\n    Returns success or error.\n    ","inputSchema":{"type":"object","title":"update_fund_weightsArguments","required":["fund_id","weights"],"properties":{"fund_id":{"type":"integer","title":"Fund Id"},"weights":{"type":"object","title":"Weights","additionalProperties":{"type":"number"}}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":162,"tokensAfter":162}],"toolsChanged":47,"tokensSaved":0,"todo":[{"tool":"activate_fund","params":["fund_id"]},{"tool":"add_bot_to_fund","params":["bot_id","weight","fund_id","rationale","bot_domain"]},{"tool":"close_fund","params":["fund_id"]},{"tool":"create_formation","params":["name","emoji","roster","sizing","fund_id","leverage","rationale","description","from_current","template_key"]},{"tool":"create_fund","params":["fund_name","fund_type","philosophy","router_preset","aggression_mode"]},{"tool":"deactivate_fund","params":["fund_id"]},{"tool":"delete_formation","params":["fund_id","rationale","formation_id"]},{"tool":"estimate_swap_cost","params":["fund_id","new_bot_id","old_bot_id","new_bot_domain"]},{"tool":"generate_fund_report_card","params":["fund_id"]},{"tool":"get_bot_profile","params":["bot_id"]},{"tool":"get_fund","params":["fund_id"]},{"tool":"get_fund_analytics","params":["fund_id"]},{"tool":"get_fund_live_pnl","params":["fund_id"]},{"tool":"get_fund_log","params":["limit","fund_id"]},{"tool":"get_fund_performance","params":["limit","fund_id"]},{"tool":"get_fund_positions","params":["fund_id"]},{"tool":"get_fund_report_card","params":["fund_id"]},{"tool":"get_fund_trades","params":["limit","offset","fund_id"]},{"tool":"get_manager_profile","params":["fund_id"]},{"tool":"get_marketplace_bots","params":["sort","limit","domain"]},{"tool":"get_public_fund_page","params":["fund_id"]},{"tool":"get_strategy_report","params":["strategy_id"]},{"tool":"list_bots","params":["limit","domain"]},{"tool":"list_formations","params":["fund_id"]},{"tool":"list_managers","params":["limit"]},{"tool":"list_my_bots","params":["domain"]},{"tool":"list_open_source_bots","params":["domain"]},{"tool":"list_strategies","params":["user_id"]},{"tool":"post_fund_note","params":["text","fund_id","headline"]},{"tool":"remove_bot_from_fund","params":["bot_id","reason","fund_id"]},{"tool":"run_ai_manager","params":["fund_id"]},{"tool":"run_fund_historical_test","params":["roster","initial_capital"]},{"tool":"sandbox_backtest","params":["code","domain","symbol","user_id"]},{"tool":"set_fund_lineup","params":["roster","fund_id","rationale"]},{"tool":"set_manager_profile","params":["avatar","fund_id","socials","tagline","ai_prompt","ai_enabled","philosophy","manager_kind","persona_name","ai_use_search","ai_cadence_hours"]},{"tool":"submit_strategy","params":["code","name","domain","symbol","user_id"]},{"tool":"swap_bot_in_fund","params":["reason","weight","fund_id","new_bot_id","old_bot_id","new_bot_domain"]},{"tool":"switch_formation","params":["mode","fund_id","rationale","formation_id"]},{"tool":"tag_team_leaderboard","params":["date"]},{"tool":"update_formation","params":["name","emoji","roster","sizing","fund_id","leverage","rationale","description","formation_id"]},{"tool":"update_fund_caps","params":["fund_id","max_per_bot_pct","max_per_domain_pct","regime_veto_enabled"]},{"tool":"update_fund_weights","params":["fund_id","weights"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}