addrbookFor publishers
← The evidence ledger

Evidence row 1226030

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint e28cf317-2d47-47d9-8ea5-bf21aaa2a5b4
Recorded
Previous row
#1034533
Body SHA-256
47fe0f08d05cc8e8e4e736af8a53ff801d2b05766a3705b4d8149dadaa7f8998
Leaf
0xb0e6a8a3ed6162b8d7d6117bbc104e3eccaaa1512da085544ed9c61c1a0c57f9

What was observed

{
  "count": 30,
  "tools": [
    {
      "description": "Change the price, size or stop-loss of an entry that has not filled: a resting limit order or a trigger entry. The new terms pass every check of a new order first; a limit order is then replaced (it loses its place in the queue), a trigger entry is rewritten. Use when the user moves an entry instead of cancelling it. Not for a held position's stop (use tighten_stop_loss) or take-profits (set_take_profit_levels). Inputs: order_id, symbol, venue, and price, size_base or stop_loss. Next: get_my_open_orders.",
      "inputSchema": {
        "properties": {
          "order_id": {
            "description": "An unfilled entry from get_my_open_orders: a limit entry's order id, or req_… for a trigger entry",
            "maxLength": 64,
            "minLength": 1,
            "title": "Order Id",
            "type": "string"
          },
          "price": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "New limit price, or new trigger price for a trigger entry, USD per coin",
            "title": "Price"
          },
          "size_base": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "New size in the base coin",
            "title": "Size Base"
          },
          "stop_loss": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "New stop-loss, USD per coin",
            "title": "Stop Loss"
          },
          "symbol": {
            "description": "Base coin, e.g. BTC",
            "maxLength": 20,
            "minLength": 1,
            "title": "Symbol",
            "type": "string"
          },
          "venue": {
            "default": "hyperliquid",
            "description": "Venue: sandbox, hyperliquid, okx, bybit or binance. Omitted: the agent's only venue, else hyperliquid, else your only connected venue, else sandbox",
            "title": "Venue",
            "type": "string"
          }
        },
        "required": [
          "order_id",
          "symbol"
        ],
        "title": "amend_open_entry_orderArguments",
        "type": "object"
      },
      "name": "amend_open_entry_order"
    },
    {
      "description": "Cancel one resting order on an exchange. Use to withdraw an unfilled limit order or a take-profit. A held position's stop-loss cannot be cancelled (move it with a new stop or close the position): this keeps every position protected. Not for closing positions (use close_perp_position_reduce_only). Inputs: order_id (from get_my_open_orders), symbol, venue. Works while trading is halted. Next: get_my_open_orders.",
      "inputSchema": {
        "properties": {
          "order_id": {
            "description": "From get_my_open_orders",
            "maxLength": 64,
            "minLength": 1,
            "title": "Order Id",
            "type": "string"
          },
          "symbol": {
            "description": "Base coin, e.g. BTC",
            "maxLength": 20,
            "minLength": 1,
            "title": "Symbol",
            "type": "string"
          },
          "venue": {
            "default": "hyperliquid",
            "description": "Venue: sandbox, hyperliquid, okx, bybit or binance. Omitted: the agent's only venue, else hyperliquid, else your only connected venue, else sandbox",
            "title": "Venue",
            "type": "string"
          }
        },
        "required": [
          "order_id",
          "symbol"
        ],
        "title": "cancel_open_orderArguments",
        "type": "object"
      },
      "name": "cancel_open_order"
    },
    {
      "description": "Remove a waiting price alert so it never fires. Use when the user no longer wants it or to make room (at most 20 wait). Not for orders (use cancel_open_order). Input: alert_id from get_my_price_alerts. An app can delete only the alerts it created. Next: get_my_price_alerts.",
      "inputSchema": {
        "properties": {
          "alert_id": {
            "description": "From set_price_alert or get_my_price_alerts",
            "maxLength": 64,
            "minLength": 1,
            "title": "Alert Id",
            "type": "string"
          }
        },
        "required": [
          "alert_id"
        ],
        "title": "cancel_price_alertArguments",
        "type": "object"
      },
      "name": "cancel_price_alert"
    },
    {
      "description": "Close all or part of a perpetual futures position with a reduce-only market order, so it can never open or flip a position. Use to take profit, cut a loss or reduce exposure; it is also the only way to undo a filled order. Third-party apps can close only positions they opened. Not for cancelling resting orders (use cancel_open_order). Inputs: symbol, venue, close_pct (1-100, default 100). Works while trading is halted. Next: get_my_open_positions.",
      "inputSchema": {
        "properties": {
          "close_pct": {
            "default": 100,
            "description": "Percent of the position to close, 1-100",
            "exclusiveMinimum": 0,
            "maximum": 100,
            "title": "Close Pct",
            "type": "number"
          },
          "symbol": {
            "description": "Base coin, e.g. BTC",
            "maxLength": 20,
            "minLength": 1,
            "title": "Symbol",
            "type": "string"
          },
          "venue": {
            "default": "hyperliquid",
            "description": "Venue: sandbox, hyperliquid, okx, bybit or binance. Omitted: the agent's only venue, else hyperliquid, else your only connected venue, else sandbox",
            "title": "Venue",
            "type": "string"
          }
        },
        "required": [
          "symbol"
        ],
        "title": "close_perp_position_reduce_onlyArguments",
        "type": "object"
      },
      "name": "close_perp_position_reduce_only"
    },
    {
      "description": "Current perpetual futures funding rate for one coin on every exchange TradeHub supports, per interval and annualised, with the age of each reading. Use when choosing where to hold a long or a short, or to check a funding spread. Not a forecast: rates change every interval. Input: symbol (base coin). Rates are fractions; positive means longs pay shorts. Sorted by annualised rate, highest first; TradeHub takes no rebates from any exchange. Next: get_perp_contract_rules(venue, symbol) or size_position_by_risk.",
      "inputSchema": {
        "properties": {
          "symbol": {
            "description": "Base coin, e.g. BTC",
            "maxLength": 20,
            "minLength": 1,
            "title": "Symbol",
            "type": "string"
          }
        },
        "required": [
          "symbol"
        ],
        "title": "compare_funding_rates_across_venuesArguments",
        "type": "object"
      },
      "name": "compare_funding_rates_across_venues"
    },
    {
      "description": "Use to choose where to trade one perpetual futures coin: bid, ask, spread, trading fee (your account's rate or the published one) and 7-day execution, per exchange. With side (and size_base or notional_usd): ranked by price plus taker fee plus a cost for poor execution; hold_hours adds funding, exit fee. cheapest_venue: cheapest overall; best_venue: cheapest you can trade on now (connected, allowed, enough margin); if they differ, say both. Not for one venue's depth (use get_order_book). No rebates. Next: preview_perp_order with best_venue, or venue \"best\".",
      "inputSchema": {
        "properties": {
          "hold_hours": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "maximum": 2160,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional, with side: how long you expect to hold, in hours; adds funding at today's rate and the exit fee, and ranks by that total cost",
            "title": "Hold Hours"
          },
          "leverage": {
            "default": 5,
            "description": "For the margin needed, e.g. 5",
            "maximum": 125,
            "minimum": 1,
            "title": "Leverage",
            "type": "integer"
          },
          "notional_usd": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Or the size in USD",
            "title": "Notional Usd"
          },
          "side": {
            "anyOf": [
              {
                "enum": [
                  "buy",
                  "sell"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional: rank by the all-in price for this side (the price you would take plus the venue's taker fee)",
            "title": "Side"
          },
          "size_base": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional, with side: size in the base coin, to see each venue's cost in USD and whether your free margin there covers it",
            "title": "Size Base"
          },
          "symbol": {
            "description": "Base coin, e.g. BTC",
            "maxLength": 20,
            "minLength": 1,
            "title": "Symbol",
            "type": "string"
          }
        },
        "required": [
          "symbol"
        ],
        "title": "compare_perp_quotes_across_venuesArguments",
        "type": "object"
      },
      "name": "compare_perp_quotes_across_venues"
    },
    {
      "description": "Execute a preview from preview_perp_order: re-checked at a fresh price, then sent to the exchange with its stop-loss placed there. Use only after a successful preview. Not for new or changed orders (preview again). If a person must approve (propose level, or no trade:execute scope) it waits; wait_seconds (0-30) holds the call open for the decision. Inputs: preview_id, client_order_id (idempotency key: repeating it returns the first result). A fill cannot be undone; the remedy is close_perp_position_reduce_only. Next: get_order_request_status(request_id) while pending.",
      "inputSchema": {
        "properties": {
          "client_order_id": {
            "description": "Your idempotency key, unique per agent; repeating it returns the first result instead of a second order",
            "maxLength": 64,
            "minLength": 1,
            "title": "Client Order Id",
            "type": "string"
          },
          "preview_id": {
            "description": "From preview_perp_order, within 30 seconds",
            "maxLength": 64,
            "minLength": 1,
            "title": "Preview Id",
            "type": "string"
          },
          "wait_seconds": {
            "default": 0,
            "description": "If the order needs a person's approval, wait up to this long for the decision before returning",
            "maximum": 30,
            "minimum": 0,
            "title": "Wait Seconds",
            "type": "integer"
          }
        },
        "required": [
          "preview_id",
          "client_order_id"
        ],
        "title": "execute_previewed_orderArguments",
        "type": "object"
      },
      "name": "execute_previewed_order"
    },
    {
      "description": "Equity, free margin, used margin and open profit or loss on every exchange account the user connected (Hyperliquid, Bybit, Binance, OKX, sandbox), and the total. Use to report balances or to compare free margin across exchanges. Not needed before opening: size_position_by_risk reads equity itself. Not for positions (use get_my_open_positions). No inputs. Amounts in USD (USDC / USDT count as USD). Next: get_my_open_positions.",
      "inputSchema": {
        "properties": {},
        "title": "get_my_account_balancesArguments",
        "type": "object"
      },
      "name": "get_my_account_balances"
    },
    {
      "description": "How this agent has done: trades, wins, realised profit or loss in USD, its most common refusals with what to do differently (last N days), and real_money: whether its sandbox record is ready for real money. Use at the start of a session, after rejections, or when asked about trading real money. Not for the trades themselves (use get_my_trade_history). Input: days (1-90). Only a person promotes an agent, on TradeHub Web. Next: get_my_trading_permissions.",
      "inputSchema": {
        "properties": {
          "days": {
            "default": 30,
            "description": "Look-back window in days",
            "maximum": 90,
            "minimum": 1,
            "title": "Days",
            "type": "integer"
          }
        },
        "title": "get_my_agent_performanceArguments",
        "type": "object"
      },
      "name": "get_my_agent_performance"
    },
    {
      "description": "What happened on the account while you were away: fills, rejections, approvals, positions closed (stop, take-profit, plan, liquidation), plan rules fired, price alerts, warnings near liquidation or the daily loss limit. TradeHub remembers where you stopped, so a new session gets only what is new. Use at the start of a session, or with wait_seconds (up to 30) to wait for the next event. Not for current state (use get_my_open_positions). Inputs: types, limit, after (keep your own place). Next: act on what changed, e.g. get_my_open_positions.",
      "inputSchema": {
        "properties": {
          "after": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "An event id (last_event_id of an earlier answer) to read after it and keep your own place; leave out to continue from where you last checked",
            "title": "After"
          },
          "limit": {
            "default": 20,
            "description": "At most this many events, 1-100",
            "maximum": 100,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          },
          "types": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "maxItems": 20,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Only these event types, e.g. [\"plan.triggered\", \"position.closed\"]",
            "title": "Types"
          },
          "wait_seconds": {
            "default": 0,
            "description": "When nothing is new, wait up to this long (0-30) for the next event",
            "maximum": 30,
            "minimum": 0,
            "title": "Wait Seconds",
            "type": "integer"
          }
        },
        "title": "get_my_events_since_last_check_or_waitArguments",
        "type": "object"
      },
      "name": "get_my_events_since_last_check_or_wait"
    },
    {
      "description": "Resting orders on the user's exchange accounts, including protective stop-loss and take-profit orders (is_trigger = true), and trigger entries TradeHub holds (type TRIGGER_ENTRY, order_id req_…). Use to find an order_id to cancel or to confirm a stop is in place. Not for filled trades (use get_my_trade_history). Inputs: optional venue and symbol filters. Sizes in the base coin, prices in USD. Next: cancel_open_order(order_id).",
      "inputSchema": {
        "properties": {
          "symbol": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Only this base coin",
            "title": "Symbol"
          },
          "venue": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Only this venue",
            "title": "Venue"
          }
        },
        "title": "get_my_open_ordersArguments",
        "type": "object"
      },
      "name": "get_my_open_orders"
    },
    {
      "description": "Every open perpetual futures position on every connected exchange account: side, size, entry, mark, open profit or loss, leverage, the liquidation price with how far away it is, and the trade plan left on it (set_position_plan_close_or_notify_later). Use first in a new session, and before closing, adjusting a stop or reporting exposure. Not for resting orders or stops (use get_my_open_orders). No inputs. Sizes in the base coin, prices in USD. Next: close_perp_position_reduce_only or get_my_open_orders.",
      "inputSchema": {
        "properties": {},
        "title": "get_my_open_positionsArguments",
        "type": "object"
      },
      "name": "get_my_open_positions"
    },
    {
      "description": "The price alerts waiting, and those that fired in the last day with the price that fired them. An app sees only the alerts it created. Use before adding one or to find an alert_id to delete. Not for orders waiting for a price (use get_my_open_orders). No inputs. Next: cancel_price_alert.",
      "inputSchema": {
        "properties": {},
        "title": "get_my_price_alertsArguments",
        "type": "object"
      },
      "name": "get_my_price_alerts"
    },
    {
      "description": "The person's global risk limits (per-trade risk, daily / weekly / monthly loss, drawdown, leverage, open positions) and how much of each is used, across all exchanges, plus limit increases waiting to take effect. Use when a trade was rejected by a user-level limit or before planning several trades. Not for this agent's own permissions (use get_my_trading_permissions). No inputs. Fractions of equity and USD; real money and the sandbox are counted separately. Next: size_position_by_risk.",
      "inputSchema": {
        "properties": {},
        "title": "get_my_risk_limits_usageArguments",
        "type": "object"
      },
      "name": "get_my_risk_limits_usage"
    },
    {
      "description": "Recent trades opened through TradeHub with entry, stop, take-profit, leverage and realised profit or loss. Third-party apps see only the trades they opened; the user's own keys and Telegram see all. Use for reviews and reports. Not for live positions (use get_my_open_positions). Input: limit (1-200), closed_since, before (pages: pass next_before back until it is null). Sizes in the base coin, money in USD. Next: get_my_open_positions.",
      "inputSchema": {
        "properties": {
          "before": {
            "anyOf": [
              {
                "minimum": 1,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Next page: the next_before of the previous answer",
            "title": "Before"
          },
          "closed_since": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Only trades closed at or after this time (ISO 8601); open trades are left out",
            "title": "Closed Since"
          },
          "limit": {
            "default": 50,
            "description": "Most recent N trades",
            "maximum": 200,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          }
        },
        "title": "get_my_trade_historyArguments",
        "type": "object"
      },
      "name": "get_my_trade_history"
    },
    {
      "description": "What this agent may do right now on TradeHub: autonomy level (read, propose = every order needs a person's approval, preauth = executes within limits), allowed venues, symbols and actions, per-trade and daily limits, today's usage, connected venues and whether trading is halted. Use first in every session and after any rejection that mentions your mandate. Not for account balances (use get_my_account_balances). No inputs. Limits are fractions of equity or USD. Only a person can widen them, on the Web, and widening waits 24 hours. Next: size_position_by_risk or get_my_open_positions.",
      "inputSchema": {
        "properties": {},
        "title": "get_my_trading_permissionsArguments",
        "type": "object"
      },
      "name": "get_my_trading_permissions"
    },
    {
      "description": "Order book levels for one perpetual futures contract on one exchange, best first, as [price, size]. Use to judge liquidity before a large market order. Not for the best price across exchanges (use compare_perp_quotes_across_venues). Inputs: symbol, venue (without an account: hyperliquid only), depth (1-50 levels). Prices in USD per coin, sizes in the base coin. Next: preview_perp_order.",
      "inputSchema": {
        "properties": {
          "depth": {
            "default": 20,
            "description": "Levels per side",
            "maximum": 50,
            "minimum": 1,
            "title": "Depth",
            "type": "integer"
          },
          "symbol": {
            "description": "Base coin, e.g. BTC",
            "maxLength": 20,
            "minLength": 1,
            "title": "Symbol",
            "type": "string"
          },
          "venue": {
            "default": "hyperliquid",
            "description": "Venue: sandbox, hyperliquid, okx, bybit or binance. Omitted: the agent's only venue, else hyperliquid, else your only connected venue, else sandbox",
            "title": "Venue",
            "type": "string"
          }
        },
        "required": [
          "symbol"
        ],
        "title": "get_order_bookArguments",
        "type": "object"
      },
      "name": "get_order_book"
    },
    {
      "description": "The current state of an order request made with execute_previewed_order: pending_approval, executed, rejected, failed, expired or declined, with fill price and stop order id once executed. Use to follow an order that was waiting for a person's approval. Not for listing orders (use get_my_open_orders). Input: request_id. Next: get_my_open_positions once executed.",
      "inputSchema": {
        "properties": {
          "request_id": {
            "description": "From execute_previewed_order",
            "maxLength": 64,
            "minLength": 1,
            "title": "Request Id",
            "type": "string"
          }
        },
        "required": [
          "request_id"
        ],
        "title": "get_order_request_statusArguments",
        "type": "object"
      },
      "name": "get_order_request_status"
    },
    {
      "description": "Rules and current funding for one perpetual futures contract on one exchange: mark price, size step, minimum size, price tick, maximum leverage, funding rate per interval and annualised. Use when a limit price or leverage must fit the venue; not needed for market orders (sizing and preview round for you). Not for comparing exchanges (use compare_perp_quotes_across_venues or compare_funding_rates_across_venues). Inputs: symbol (base coin, e.g. BTC), venue (without an account: hyperliquid only). Prices in USD per coin, sizes in the base coin, rates as fractions. Next: size_position_by_risk.",
      "inputSchema": {
        "properties": {
          "symbol": {
            "description": "Base coin, e.g. BTC",
            "maxLength": 20,
            "minLength": 1,
            "title": "Symbol",
            "type": "string"
          },
          "venue": {
            "default": "hyperliquid",
            "description": "Venue: sandbox, hyperliquid, okx, bybit or binance. Omitted: the agent's only venue, else hyperliquid, else your only connected venue, else sandbox",
            "title": "Venue",
            "type": "string"
          }
        },
        "required": [
          "symbol"
        ],
        "title": "get_perp_contract_rulesArguments",
        "type": "object"
      },
      "name": "get_perp_contract_rules"
    },
    {
      "description": "Price history for one coin as candles: open, high, low, close and volume per interval (1m, 5m, 15m, 1h, 4h, 1d), up to 500, oldest first, from Hyperliquid's public market, the same prices the sandbox trades at. Use to look back at price action, find recent highs and lows for a stop, or judge the trend. Not for the live best price (use compare_perp_quotes_across_venues) or ready-made indicators (use get_technical_indicators_15m). Inputs: symbol (base coin), interval (default 1h), limit (default 100). Prices in USD per coin, volume in the base coin, times UTC. Next: size_position_by_risk.",
      "inputSchema": {
        "properties": {
          "interval": {
            "default": "1h",
            "description": "Candle length",
            "enum": [
              "1m",
              "5m",
              "15m",
              "1h",
              "4h",
              "1d"
            ],
            "title": "Interval",
            "type": "string"
          },
          "limit": {
            "default": 100,
            "description": "How many candles, newest last (1-500)",
            "maximum": 500,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          },
          "symbol": {
            "description": "Base coin, e.g. BTC",
            "maxLength": 20,
            "minLength": 1,
            "title": "Symbol",
            "type": "string"
          }
        },
        "required": [
          "symbol"
        ],
        "title": "get_price_candlesArguments",
        "type": "object"
      },
      "name": "get_price_candles"
    },
    {
      "description": "RSI, MACD, Bollinger %B, ATR, EMA trend and volume rank on Hyperliquid's 15-minute candles for one coin, plus the current funding rate. Use as inputs to your own decision; it is not a trading recommendation. ATR is useful for placing a stop. Not for live quotes (use compare_perp_quotes_across_venues). Input: symbol (base coin). Prices in USD per coin. Next: size_position_by_risk.",
      "inputSchema": {
        "properties": {
          "symbol": {
            "description": "Base coin, e.g. BTC",
            "maxLength": 20,
            "minLength": 1,
            "title": "Symbol",
            "type": "string"
          }
        },
        "required": [
          "symbol"
        ],
        "title": "get_technical_indicators_15mArguments",
        "type": "object"
      },
      "name": "get_technical_indicators_15m"
    },
    {
      "description": "Whether each exchange is reachable right now: TradeHub's public price feed per exchange, and, with an account, each connected exchange account's latency, last error and rate-limit headroom. Use after a VENUE_UNAVAILABLE error or before trading on an exchange that misbehaved. Not for prices (use compare_perp_quotes_across_venues). No inputs. Next: retry the failed call, or use another venue.",
      "inputSchema": {
        "properties": {},
        "title": "get_venue_healthArguments",
        "type": "object"
      },
      "name": "get_venue_health"
    },
    {
      "description": "Check a perpetual futures order with its stop-loss (optional take-profit) against this agent's permissions, the person's limits and the price band, sending nothing. Use before every new position, also one that waits for a price (trigger_price) or is split over 2-5 limit prices (ladder_prices). Not for closing (use close_perp_position_reduce_only). size_base (base coin): from size_position_by_risk; stop: stop_loss (USD) or stop_pct. Returns preview_id (30 s), notional, risk, margin and every check; a rejection names the failing check. Next: execute_previewed_order(preview_id).",
      "inputSchema": {
        "anyOf": [
          {
            "required": [
              "stop_loss"
            ]
          },
          {
            "required": [
              "stop_pct"
            ]
          }
        ],
        "properties": {
          "hold_hours": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "maximum": 2160,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional: how long you expect to hold, in hours, to see funding and the round trip's cost (and, with venue \"best\", to choose by them)",
            "title": "Hold Hours"
          },
          "ladder_prices": {
            "anyOf": [
              {
                "items": {
                  "exclusiveMinimum": 0,
                  "type": "number"
                },
                "maxItems": 5,
                "minItems": 2,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional ladder entry: 2-5 limit prices, size_base split evenly across them, one stop-loss beyond all of them (stop_pct counts from the farthest price); order_type limit, no price",
            "title": "Ladder Prices"
          },
          "leverage": {
            "default": 5,
            "description": "Leverage, e.g. 5",
            "maximum": 125,
            "minimum": 1,
            "title": "Leverage",
            "type": "integer"
          },
          "order_type": {
            "default": "market",
            "enum": [
              "market",
              "limit"
            ],
            "title": "Order Type",
            "type": "string"
          },
          "price": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Limit price, USD per coin (limit orders only)",
            "title": "Price"
          },
          "reason": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional: why, in your words (up to 500 characters). The person sees it on the approval card and in history; other agents never do",
            "title": "Reason"
          },
          "side": {
            "description": "buy = open or add to a long, sell = open or add to a short",
            "enum": [
              "buy",
              "sell"
            ],
            "title": "Side",
            "type": "string"
          },
          "size_base": {
            "description": "Size in the base coin (BTC, not USD); rounded down to the venue step. Get it from size_position_by_risk",
            "exclusiveMinimum": 0,
            "title": "Size Base",
            "type": "number"
          },
          "stop_loss": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Required stop-loss, USD per coin: below entry for buys, above for sells. Or give stop_pct",
            "title": "Stop Loss"
          },
          "stop_pct": {
            "anyOf": [
              {
                "exclusiveMaximum": 1,
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Or the stop as a distance from the entry (trigger price, limit price or mark), 0.02 = 2%",
            "title": "Stop Pct"
          },
          "symbol": {
            "description": "Base coin, e.g. BTC",
            "maxLength": 20,
            "minLength": 1,
            "title": "Symbol",
            "type": "string"
          },
          "take_profit": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional take-profit, USD per coin",
            "title": "Take Profit"
          },
          "trigger_price": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional: hold the order and open it at market only when the mark reaches this price (a breakout or a pullback), re-checked then; market orders only. Risk is computed from this price",
            "title": "Trigger Price"
          },
          "trigger_valid_hours": {
            "anyOf": [
              {
                "maximum": 168,
                "minimum": 1,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "With trigger_price: hours it waits before lapsing, 1-168 (default 24)",
            "title": "Trigger Valid Hours"
          },
          "venue": {
            "default": "hyperliquid",
            "description": "Venue: sandbox, hyperliquid, okx, bybit or binance. Omitted: the agent's only venue, else hyperliquid, else your only connected venue, else sandbox; or \"best\": the cheapest all-in venue (price plus fee) you may use and have the margin for",
            "title": "Venue",
            "type": "string"
          }
        },
        "required": [
          "symbol",
          "side",
          "size_base"
        ],
        "title": "preview_perp_orderArguments",
        "type": "object"
      },
      "name": "preview_perp_order"
    },
    {
      "description": "Have TradeHub act on a held position later, with no agent connected: \"close it if still open in 3 days\", \"tell me if its funding passes 50% a year\", \"close half below 94000\". Up to 5 rules, each fired once: when price_above / price_below (mark), held_hours (since set) or funding_above (yearly rate it pays, 0.5 = 50%), then notify the person or close close_pct reduce-only. thesis: why it is open, what proves it wrong, for later sessions. Use right after entry, not your own timers. Not a stop-loss. A new plan replaces the old; rules=[] removes it. Next: get_my_open_positions.",
      "inputSchema": {
        "properties": {
          "rules": {
            "description": "Up to 5 rules, each fires once; [] removes the plan",
            "items": {
              "properties": {
                "action": {
                  "default": "notify",
                  "description": "notify: tell the person (Telegram, events, webhooks); close: close close_pct of the position, reduce-only",
                  "enum": [
                    "notify",
                    "close"
                  ],
                  "title": "Action",
                  "type": "string"
                },
                "close_pct": {
                  "default": 100,
                  "description": "close only: percent of the position, 1-100",
                  "exclusiveMinimum": 0,
                  "maximum": 100,
                  "title": "Close Pct",
                  "type": "number"
                },
                "value": {
                  "description": "USD per coin for prices; hours (0.1-720); funding as a yearly fraction (0.5 = 50%)",
                  "exclusiveMinimum": 0,
                  "title": "Value",
                  "type": "number"
                },
                "when": {
                  "description": "price_above / price_below: the mark crosses value; held_hours: value hours after the plan is set; funding_above: the yearly funding rate this position pays reaches value",
                  "enum": [
                    "price_above",
                    "price_below",
                    "held_hours",
                    "funding_above"
                  ],
                  "title": "When",
                  "type": "string"
                }
              },
              "required": [
                "when",
                "value"
              ],
              "title": "PlanRule",
              "type": "object"
            },
            "maxItems": 5,
            "title": "Rules",
            "type": "array"
          },
          "symbol": {
            "description": "Base coin, e.g. BTC",
            "maxLength": 20,
            "minLength": 1,
            "title": "Symbol",
            "type": "string"
          },
          "thesis": {
            "default": "",
            "description": "Why the position is open and what would prove it wrong, for the next session to read back; seen only by you and the person",
            "maxLength": 500,
            "title": "Thesis",
            "type": "string"
          },
          "venue": {
            "default": "hyperliquid",
            "description": "Venue: sandbox, hyperliquid, okx, bybit or binance. Omitted: the agent's only venue, else hyperliquid, else your only connected venue, else sandbox",
            "title": "Venue",
            "type": "string"
          }
        },
        "required": [
          "symbol",
          "rules"
        ],
        "title": "set_position_plan_close_or_notify_laterArguments",
        "type": "object"
      },
      "name": "set_position_plan_close_or_notify_later"
    },
    {
      "description": "Tell the person when a coin's price reaches a level: one message (Telegram, the event stream and webhooks get a price.alert event), then the alert is done. Use when the user asks to be told or woken at a price, instead of polling prices. Not an order: nothing is traded (for an order that waits for a price use preview_perp_order with trigger_price). Inputs: symbol, price, optional direction (default: from the current price) and venue. At most 20 wait at once. Next: get_my_price_alerts.",
      "inputSchema": {
        "properties": {
          "direction": {
            "anyOf": [
              {
                "enum": [
                  "above",
                  "below"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Fire when the price is at or above / at or below the level. Omitted: from the current price (a level above it fires on the way up)",
            "title": "Direction"
          },
          "price": {
            "description": "The price level, USD per coin",
            "exclusiveMinimum": 0,
            "title": "Price",
            "type": "number"
          },
          "symbol": {
            "description": "Base coin, e.g. BTC",
            "maxLength": 20,
            "minLength": 1,
            "title": "Symbol",
            "type": "string"
          },
          "venue": {
            "anyOf": [
              {
                "maxLength": 20,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional: watch one exchange's mark. Omitted: the reference price (median of the exchanges' marks)",
            "title": "Venue"
          }
        },
        "required": [
          "symbol",
          "price"
        ],
        "title": "set_price_alertArguments",
        "type": "object"
      },
      "name": "set_price_alert"
    },
    {
      "description": "Make a held position's stop-loss move by itself, only ever toward the price: trailing (it follows the best price at trail_pct behind it) or breakeven (it moves to the entry once the price reaches activate_at). TradeHub checks about every 5 seconds; each move follows tighten_stop_loss's rules and is audited. Use to lock in profit on a winning position. One rule per position: a new one replaces it, kind=none removes it, it ends when the position closes. Not for a one-off move (use tighten_stop_loss). Next: get_my_open_positions shows the rule.",
      "inputSchema": {
        "properties": {
          "activate_at": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Price, USD per coin, from which the rule acts; required for breakeven (beyond the entry on the profit side), optional for trailing",
            "title": "Activate At"
          },
          "kind": {
            "description": "trailing: the stop follows the best price at trail_pct behind it; breakeven: the stop moves to the entry once the price reaches activate_at; none: remove the rule",
            "enum": [
              "trailing",
              "breakeven",
              "none"
            ],
            "title": "Kind",
            "type": "string"
          },
          "symbol": {
            "description": "Base coin, e.g. BTC",
            "maxLength": 20,
            "minLength": 1,
            "title": "Symbol",
            "type": "string"
          },
          "trail_pct": {
            "anyOf": [
              {
                "maximum": 0.2,
                "minimum": 0.001,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "trailing only: distance behind the best price as a fraction, 0.001-0.2 (0.02 = 2%)",
            "title": "Trail Pct"
          },
          "venue": {
            "default": "hyperliquid",
            "description": "Venue: sandbox, hyperliquid, okx, bybit or binance. Omitted: the agent's only venue, else hyperliquid, else your only connected venue, else sandbox",
            "title": "Venue",
            "type": "string"
          }
        },
        "required": [
          "symbol",
          "kind"
        ],
        "title": "set_stop_loss_ruleArguments",
        "type": "object"
      },
      "name": "set_stop_loss_rule"
    },
    {
      "description": "Replace a held position's take-profits: one level or several (e.g. 50% at 98000, the rest at 101000), each a reduce-only trigger on the exchange, so it can only shrink the position. Use after entry, or to move or remove them ([] removes all). Not for the stop-loss (use tighten_stop_loss) or for closing now (use close_perp_position_reduce_only). Inputs: symbol, levels [{price, close_pct}], venue. New orders are placed before the old ones go. Works while trading is halted. Next: get_my_open_orders.",
      "inputSchema": {
        "properties": {
          "levels": {
            "description": "Up to 4 levels, percentages adding up to at most 100; [] removes every take-profit",
            "items": {
              "properties": {
                "close_pct": {
                  "description": "Percent of the position this level closes, e.g. 50",
                  "exclusiveMinimum": 0,
                  "maximum": 100,
                  "title": "Close Pct",
                  "type": "number"
                },
                "price": {
                  "description": "Trigger price, USD per coin: above the mark for a long, below for a short",
                  "exclusiveMinimum": 0,
                  "title": "Price",
                  "type": "number"
                }
              },
              "required": [
                "price",
                "close_pct"
              ],
              "title": "TakeProfitLevel",
              "type": "object"
            },
            "maxItems": 4,
            "title": "Levels",
            "type": "array"
          },
          "symbol": {
            "description": "Base coin, e.g. BTC",
            "maxLength": 20,
            "minLength": 1,
            "title": "Symbol",
            "type": "string"
          },
          "venue": {
            "default": "hyperliquid",
            "description": "Venue: sandbox, hyperliquid, okx, bybit or binance. Omitted: the agent's only venue, else hyperliquid, else your only connected venue, else sandbox",
            "title": "Venue",
            "type": "string"
          }
        },
        "required": [
          "symbol",
          "levels"
        ],
        "title": "set_take_profit_levelsArguments",
        "type": "object"
      },
      "name": "set_take_profit_levels"
    },
    {
      "description": "Turns \"risk 1% of equity, stop 2% below\" into a size in the base coin, rounded down to the venue step and capped by every limit (this agent's, the person's and TradeHub's). Reads equity, mark and contract rules itself: no need for get_my_account_balances or get_perp_contract_rules first. Use before every preview_perp_order. Not an order: nothing is sent. Inputs: symbol, stop_loss (USD) or stop_pct with side, risk_pct or risk_usd (default: the most allowed), venue, entry_price (default: mark), leverage. Next: preview_perp_order with the returned size_base, stop_loss and leverage.",
      "inputSchema": {
        "properties": {
          "entry_price": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Planned entry, USD per coin; omitted: the mark",
            "title": "Entry Price"
          },
          "leverage": {
            "default": 5,
            "description": "Leverage for the margin estimate, e.g. 5",
            "maximum": 125,
            "minimum": 1,
            "title": "Leverage",
            "type": "integer"
          },
          "notional_usd": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Or the position's value in USD (\"buy $200 worth\"), instead of risk_pct / risk_usd; still capped by the risk limits",
            "title": "Notional Usd"
          },
          "risk_pct": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "maximum": 1,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Loss at stop as a fraction of equity (0.01 = 1%); omitted with risk_usd also omitted: the largest your limits allow",
            "title": "Risk Pct"
          },
          "risk_usd": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Loss at stop in USD (instead of risk_pct)",
            "title": "Risk Usd"
          },
          "side": {
            "anyOf": [
              {
                "enum": [
                  "buy",
                  "sell"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "buy = long, sell = short; needed with stop_pct",
            "title": "Side"
          },
          "stop_loss": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Stop-loss price, USD per coin; below entry for a long, above for a short. Or give stop_pct and side instead",
            "title": "Stop Loss"
          },
          "stop_pct": {
            "anyOf": [
              {
                "exclusiveMaximum": 1,
                "exclusiveMinimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Stop distance from entry as a fraction (0.02 = 2%), instead of stop_loss; needs side",
            "title": "Stop Pct"
          },
          "symbol": {
            "description": "Base coin, e.g. BTC",
            "maxLength": 20,
            "minLength": 1,
            "title": "Symbol",
            "type": "string"
          },
          "venue": {
            "default": "hyperliquid",
            "description": "Venue: sandbox, hyperliquid, okx, bybit or binance. Omitted: the agent's only venue, else hyperliquid, else your only connected venue, else sandbox",
            "title": "Venue",
            "type": "string"
          }
        },
        "required": [
          "symbol"
        ],
        "title": "size_position_by_riskArguments",
        "type": "object"
      },
      "name": "size_position_by_risk"
    },
    {
      "description": "Emergency stop for the whole account: cancel every resting order, close every position on every exchange with reduce-only orders, and block new positions. Use only when the person asks to stop everything or something is clearly wrong. Only a person can resume, on the Web with a verification code; third-party apps never get this permission. Not for closing one position (use close_perp_position_reduce_only). Input: reason. Next: get_my_open_positions to confirm nothing is left.",
      "inputSchema": {
        "properties": {
          "reason": {
            "default": "kill switch",
            "description": "Why, for the user and the audit log",
            "maxLength": 200,
            "title": "Reason",
            "type": "string"
          }
        },
        "title": "stop_all_trading_nowArguments",
        "type": "object"
      },
      "name": "stop_all_trading_now"
    },
    {
      "description": "Move a held position's stop-loss closer to the current price, e.g. to breakeven or to lock in profit: the new stop is placed first, then the old one is cancelled, so the position is never unprotected. Use when the user asks to raise a long's stop or lower a short's. Not for widening a stop (never allowed while the position is open) or for closing (use close_perp_position_reduce_only). Inputs: symbol, stop_loss (USD per coin), venue. Works while trading is halted. Next: get_my_open_orders to see the new stop.",
      "inputSchema": {
        "properties": {
          "stop_loss": {
            "description": "New stop price, USD per coin: closer to the price than the current stop (higher for a long, lower for a short), still on the loss side of the mark",
            "exclusiveMinimum": 0,
            "title": "Stop Loss",
            "type": "number"
          },
          "symbol": {
            "description": "Base coin, e.g. BTC",
            "maxLength": 20,
            "minLength": 1,
            "title": "Symbol",
            "type": "string"
          },
          "venue": {
            "default": "hyperliquid",
            "description": "Venue: sandbox, hyperliquid, okx, bybit or binance. Omitted: the agent's only venue, else hyperliquid, else your only connected venue, else sandbox",
            "title": "Venue",
            "type": "string"
          }
        },
        "required": [
          "symbol",
          "stop_loss"
        ],
        "title": "tighten_stop_lossArguments",
        "type": "object"
      },
      "name": "tighten_stop_loss"
    }
  ]
}

What the leaf hashes

{"body":"47fe0f08d05cc8e8e4e736af8a53ff801d2b05766a3705b4d8149dadaa7f8998","id":1226030,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793331275916018,"prev":1034533,"subject":"e28cf317-2d47-47d9-8ea5-bf21aaa2a5b4","subject_kind":"endpoint"}

Proof

Its day has not closed yet. A day closes ten minutes after midnight UTC; the proof appears here then.

How to check it · This row as JSON