addrbookFor publishers
← The evidence ledger

Evidence row 309497

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint a6c259b4-6791-4162-8e25-135631397e86
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
c246c7bb0610a874f91f5bb83791b3d6696c83b7ad6da0085a62050c7afb9dc7
Leaf
0x5107fb52226d00fd7c8a713a075f7ac45a69a3b88f04da36e626d2ec779e4d0e

What was observed

{
  "count": 25,
  "tools": [
    {
      "description": "Withdraw step 1 / anytime account check. GET /api/account with per-request X-MBX-APIKEY. Inspect available balances before withdraw. No live trading action.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "quote_trade_account"
    },
    {
      "description": "Read once to learn efficient direct REST/WebSocket use: routes, signing, streaming, cumulative depth, and client execution controls. Public guidance only; no upstream calls.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "quote_trade_api_discovery"
    },
    {
      "description": "Explains that MCP is only a tool/schema adapter around the existing Quote.Trade APIs, and returns local servlet guardrail configuration.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "quote_trade_api_manifest"
    },
    {
      "description": "Cancel one order by orderId. POST /api/cancelOrder. Identifies exactly one order via the matching engine's single-order cancel path - NOT a mass-cancel. There is no quote_trade_cancel_all: the upstream mass-cancel action's scope for edge-case parameters could not be verified from this codebase alone and is intentionally not exposed through MCP. Requires tradingEnabled, allowedSymbols (same allowlist as quote_trade_place_order), and a trade-scoped API key. No notional check applies: a cancellation has none. humanApproved/approvalText are agent friction only.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "account": {
            "description": "Quote.Trade account/user id. Optional (defaults to account init-param, QUOTE_TRADE_ACCOUNT, or 0).",
            "type": "integer"
          },
          "approvalText": {
            "description": "Agent-supplied confirmation friction (not a security control). Must exactly equal: APPROVE QUOTE.TRADE CANCEL ORDER",
            "type": "string"
          },
          "humanApproved": {
            "description": "Agent-supplied confirmation friction (not a security control). Must be true; enableTrading remains authoritative.",
            "type": "boolean"
          },
          "orderId": {
            "description": "The order id returned by quote_trade_place_order.",
            "type": "integer"
          },
          "side": {
            "description": "Optional BUY or SELL, matching the original order. Passed through if given.",
            "type": "string"
          },
          "symbol": {
            "description": "Instrument symbol the order was placed on, such as BTC.",
            "type": "string"
          }
        },
        "required": [
          "symbol",
          "orderId",
          "humanApproved",
          "approvalText"
        ],
        "type": "object"
      },
      "name": "quote_trade_cancel_order"
    },
    {
      "description": "Trade step 3. GET /api/depth?symbol=SYMBOL&limit=N. Use depth quantity to choose a suitable limit price before placing an order.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "description": "Optional maximum levels per side. Positive values are enforced by MCP; omitted/nonpositive uses upstream depth.",
            "type": "integer"
          },
          "symbol": {
            "description": "Instrument symbol from quote_trade_instruments, such as BTC or ETH.",
            "type": "string"
          }
        },
        "required": [
          "symbol"
        ],
        "type": "object"
      },
      "name": "quote_trade_depth"
    },
    {
      "description": "Call GET /api/exchangeInfo and return a paginated slice of trading symbols plus rate limits/server time. Upstream has no pagination, so this adapter filters/slices locally. Default limit=50, max=200. Prefer quote_trade_instruments for compact tradable-pair discovery.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "description": "Max symbols to return. Default 50, max 200.",
            "type": "integer"
          },
          "skip": {
            "description": "Number of matching symbols to skip before returning. Default 0.",
            "type": "integer"
          },
          "symbols": {
            "description": "Optional comma-separated symbol filter, e.g. BTC,ETH,SOL. When set, pagination applies to the filtered list.",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "quote_trade_exchange_info"
    },
    {
      "description": "Optional wallet login/register step 1 (not required for trading with an existing API key). POST /api/getChallenge with a wallet address (login). Returns challenge text and isNewUser. Step 2: sign the challenge with the wallet outside MCP. Step 3: quote_trade_logon. No API key required.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "login": {
            "description": "Wallet address used as login, e.g. 0x15b65a49faf9a4047e912d7de4a77fe24c7cf483.",
            "type": "string"
          }
        },
        "required": [
          "login"
        ],
        "type": "object"
      },
      "name": "quote_trade_get_challenge"
    },
    {
      "description": "Deposit step 1. GET /api/getDepositAddress?symbol=ASSET and return chain + contract/address. Supported assets: USDC and USDT (mainnet), XUSDC (USDC on XDC). Step 2 is transferring funds to that address outside MCP (no backend call).",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "symbol": {
            "description": "Deposit asset symbol: USDC or USDT (mainnet), or XUSDC (USDC on XDC network).",
            "type": "string"
          }
        },
        "required": [
          "symbol"
        ],
        "type": "object"
      },
      "name": "quote_trade_get_deposit_address"
    },
    {
      "description": "Anytime deposit check. POST /api/getDepositHistory with per-request X-MBX-APIKEY. Requires a trade-scoped API key (same scope as quote_trade_place_order). Read-only: no live trading action.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "quote_trade_get_deposit_history"
    },
    {
      "description": "Anytime position check. POST /api/getIndexPositions with per-request X-MBX-APIKEY. Distinct from quote_trade_get_positions: index/basket instrument positions rather than regular instrument positions. Optional assetType filter. Read-only: no live trading action.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "assetType": {
            "description": "Optional index/basket asset type filter. Omit for all.",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "quote_trade_get_index_positions"
    },
    {
      "description": "Anytime order check. POST /api/getOrderHistory with per-request X-MBX-APIKEY. Full order history, or one order's history with optional orderId. Requires a trade-scoped API key (same scope as quote_trade_place_order). Read-only: no live trading action.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "orderId": {
            "description": "Optional order id to narrow to one order's history. Omit for the full order history.",
            "type": "integer"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "quote_trade_get_order_history"
    },
    {
      "description": "Anytime order check. POST /api/orderStatus with per-request X-MBX-APIKEY. Query the status of an order previously placed with quote_trade_place_order. Read-only: no live trading action.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "orderId": {
            "description": "The order id returned by quote_trade_place_order.",
            "type": "integer"
          }
        },
        "required": [
          "orderId"
        ],
        "type": "object"
      },
      "name": "quote_trade_get_order_status"
    },
    {
      "description": "Anytime order check. POST /api/getOrders with per-request X-MBX-APIKEY. Read-only: no live trading action. Requires read entitlement on API keys that carry one.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "endTime": {
            "description": "Optional inclusive end of a time range, epoch milliseconds.",
            "type": "integer"
          },
          "limit": {
            "description": "Optional maximum number of orders to return.",
            "type": "integer"
          },
          "startTime": {
            "description": "Optional inclusive start of a time range, epoch milliseconds.",
            "type": "integer"
          },
          "symbol": {
            "description": "Optional instrument symbol filter, such as BTC. Omit for all symbols.",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "quote_trade_get_orders"
    },
    {
      "description": "Anytime position check. GET /api/positions with per-request X-MBX-APIKEY. Reconcile current positions when starting or reconnecting, per the direct-discovery guide (quote_trade_api_discovery / rest.privateReads). No live trading action.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "quote_trade_get_positions"
    },
    {
      "description": "Anytime risk check. POST /api/getRisk with per-request X-MBX-APIKEY. Margin/equity/unrealized-PnL summary for the authenticated account. Read-only: no live trading action.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "quote_trade_get_risk"
    },
    {
      "description": "Anytime wallet check. POST /api/getUserWallets with per-request X-MBX-APIKEY. On-chain addresses previously seen depositing to the authenticated account. Read-only: no live trading action.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "quote_trade_get_user_wallets"
    },
    {
      "description": "Anytime withdrawal check. POST /api/getWithdrawRequests with per-request X-MBX-APIKEY. Inspect the status of withdrawals already submitted (including via quote_trade_withdraw). Requires a trade-scoped API key. Read-only: no live trading action, and this tool cannot cancel a withdrawal.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "quote_trade_get_withdraw_requests"
    },
    {
      "description": "Trade step 1. GET /api/getInstrumentPairs — paginated tradable symbols/instruments. Default limit=50, max=200. Use skip to page. Pick a symbol from this response for ticker/depth/order calls.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "description": "Max instruments to return. Default 50, max 200.",
            "type": "integer"
          },
          "skip": {
            "description": "Number of instruments to skip before returning. Default 0.",
            "type": "integer"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "quote_trade_instruments"
    },
    {
      "description": "Optional wallet login/register step 3 (not required if the agent already has an API key). Pass challenge + wallet signature from steps 1–2. isNewUser=true -> POST /api/registerUser; else POST /api/logon. On success, map body.requestToken/requestSecret to X-MBX-APIKEY / X-MBX-APISECRET; use body.id as account. Wallet signing stays outside MCP.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "challenge": {
            "description": "Challenge text returned by quote_trade_get_challenge (Sign auth token: ...).",
            "type": "string"
          },
          "isNewUser": {
            "description": "From quote_trade_get_challenge. true -> registerUser; false -> logon. If omitted, logon is tried first then registerUser on failure.",
            "type": "boolean"
          },
          "signature": {
            "description": "Wallet signature of the challenge text (0x-prefixed hex).",
            "type": "string"
          }
        },
        "required": [
          "challenge",
          "signature"
        ],
        "type": "object"
      },
      "name": "quote_trade_logon"
    },
    {
      "description": "Optional before live trade. Normalize/validate a BUY/SELL order locally without sending it.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "account": {
            "description": "Quote.Trade account/user id. Optional for preview (defaults to account init-param, QUOTE_TRADE_ACCOUNT, or 0). Required for live place_order.",
            "type": "integer"
          },
          "disableLeverage": {
            "description": "1 disables leverage; 0 enables leverage/shorting only if server allowLeverage is true.",
            "type": "integer"
          },
          "paymentCurrency": {
            "description": "Payment currency such as USDT.",
            "type": "string"
          },
          "price": {
            "description": "Limit price chosen after quote_trade_depth.",
            "type": "number"
          },
          "quantity": {
            "description": "Order quantity.",
            "type": "number"
          },
          "side": {
            "description": "BUY or SELL.",
            "type": "string"
          },
          "symbol": {
            "description": "Instrument symbol from quote_trade_instruments, such as BTC.",
            "type": "string"
          },
          "timestamp": {
            "description": "Optional client timestamp in milliseconds.",
            "type": "integer"
          },
          "type": {
            "description": "LIMIT only in this adapter.",
            "type": "string"
          }
        },
        "required": [
          "symbol",
          "side",
          "price",
          "quantity"
        ],
        "type": "object"
      },
      "name": "quote_trade_order_preview"
    },
    {
      "description": "Trade step 4. POST /api/order with a suitable price after instruments/ticker/depth. Requires tradingEnabled, allowedSymbols (* or explicit list; empty denies), and API credentials. No MCP USD notional cap applies. Sending X-MBX-APISECRET to this MCP host grants it full signing authority. humanApproved/approvalText are agent friction only.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "account": {
            "description": "Quote.Trade account/user id. Optional for preview (defaults to account init-param, QUOTE_TRADE_ACCOUNT, or 0). Required for live place_order.",
            "type": "integer"
          },
          "approvalText": {
            "description": "Agent-supplied confirmation friction (not a security control). Must exactly equal: APPROVE QUOTE.TRADE LIVE ORDER",
            "type": "string"
          },
          "disableLeverage": {
            "description": "1 disables leverage; 0 enables leverage/shorting only if server allowLeverage is true.",
            "type": "integer"
          },
          "humanApproved": {
            "description": "Agent-supplied confirmation friction (not a security control). Must be true; enableTrading remains authoritative.",
            "type": "boolean"
          },
          "paymentCurrency": {
            "description": "Payment currency such as USDT.",
            "type": "string"
          },
          "price": {
            "description": "Limit price chosen after quote_trade_depth.",
            "type": "number"
          },
          "quantity": {
            "description": "Order quantity.",
            "type": "number"
          },
          "side": {
            "description": "BUY or SELL.",
            "type": "string"
          },
          "symbol": {
            "description": "Instrument symbol from quote_trade_instruments, such as BTC.",
            "type": "string"
          },
          "timestamp": {
            "description": "Optional client timestamp in milliseconds.",
            "type": "integer"
          },
          "type": {
            "description": "LIMIT only in this adapter.",
            "type": "string"
          }
        },
        "required": [
          "account",
          "symbol",
          "side",
          "price",
          "quantity",
          "humanApproved",
          "approvalText"
        ],
        "type": "object"
      },
      "name": "quote_trade_place_order"
    },
    {
      "description": "Call GET /api/status and return system status, server time, contracts URL, and feature flags.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "quote_trade_status"
    },
    {
      "description": "Trade step 2. GET /api/ticker?symbol=SYMBOL for a symbol from quote_trade_instruments. Returns last price, bid, ask, lastUpdateId.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "symbol": {
            "description": "Instrument symbol from quote_trade_instruments, such as BTC or ETH.",
            "type": "string"
          }
        },
        "required": [
          "symbol"
        ],
        "type": "object"
      },
      "name": "quote_trade_ticker"
    },
    {
      "description": "Withdraw step 3. POST /api/sendWithdrawWithVTokenRequest for stablecoins only (USDC|USDT|XUSDC) to the user's own login wallet (no toAddress). Not available for BTC/ETH/other assets. Requires a full-access API key with withdraw entitlement (trade-only keys are rejected by Quote.Trade), tradingEnabled, and allowedWithdrawAssets (independent of the trading allowedSymbols allowlist). No MCP USD notional cap applies. humanApproved/approvalText are agent friction only.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "account": {
            "description": "Quote.Trade account/user id. Optional for preview (defaults to account init-param, QUOTE_TRADE_ACCOUNT, or 0). Required for live withdraw.",
            "type": "integer"
          },
          "approvalText": {
            "description": "Agent-supplied confirmation friction (not a security control). Must exactly equal: APPROVE QUOTE.TRADE LIVE WITHDRAW",
            "type": "string"
          },
          "humanApproved": {
            "description": "Agent-supplied confirmation friction (not a security control). Must be true; enableTrading remains authoritative.",
            "type": "boolean"
          },
          "quantity": {
            "description": "Scaled integer quantity as string (API format). Example: \"20000000\" with quantity_scale=6 means 20 USDC.",
            "type": "string"
          },
          "quantity_scale": {
            "description": "Decimal scale for quantity. Example: 6 for USDC.",
            "type": "integer"
          },
          "symbol": {
            "description": "Stablecoin to withdraw: USDC, USDT, or XUSDC only (not BTC/ETH/other).",
            "type": "string"
          }
        },
        "required": [
          "account",
          "symbol",
          "quantity",
          "quantity_scale",
          "humanApproved",
          "approvalText"
        ],
        "type": "object"
      },
      "name": "quote_trade_withdraw"
    },
    {
      "description": "Optional before live withdraw. Stablecoins only: USDC, USDT, or XUSDC (not BTC/ETH/other). Own login wallet only (no toAddress). estimatedNotional is USD at $1 peg. Trade-only API keys cannot withdraw — use a full-access key with withdraw entitlement.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "account": {
            "description": "Quote.Trade account/user id. Optional for preview (defaults to account init-param, QUOTE_TRADE_ACCOUNT, or 0). Required for live withdraw.",
            "type": "integer"
          },
          "quantity": {
            "description": "Scaled integer quantity as string (API format). Example: \"20000000\" with quantity_scale=6 means 20 USDC.",
            "type": "string"
          },
          "quantity_scale": {
            "description": "Decimal scale for quantity. Example: 6 for USDC.",
            "type": "integer"
          },
          "symbol": {
            "description": "Stablecoin to withdraw: USDC, USDT, or XUSDC only (not BTC/ETH/other).",
            "type": "string"
          }
        },
        "required": [
          "symbol",
          "quantity",
          "quantity_scale"
        ],
        "type": "object"
      },
      "name": "quote_trade_withdraw_preview"
    }
  ]
}

What the leaf hashes

{"body":"c246c7bb0610a874f91f5bb83791b3d6696c83b7ad6da0085a62050c7afb9dc7","id":309497,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793058937979355,"prev":null,"subject":"a6c259b4-6791-4162-8e25-135631397e86","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).

  1. 0x5107a9e3f819fcbea77e5fc6b338e6249adf89e126827f4e305f2acbb0f6c5da
  2. 0x94e3e8192d554a09226206ffd42a4652031d828b20f0c7a17d72d7db78277911
  3. 0xf351cbd2dee42765f0e728a0c5a71e71dc2cb9499b44b4865b7f4344fa9f7ca4
  4. 0x649d1814b34e3832fe8d99e51d8098328224e19eac092fb2d05c99adde64bc74
  5. 0xffb1022d0b690332debc195281f0b19668d1bf9484d3b619ad89e18d6376b976
  6. 0x658811acd7a52bcdaa20e5d1af11566c673f4893560578d8dbb82123dfd8e7e8
  7. 0x2bbab5f1a8f705f8f9ea187de8e67d15f3adcf89a717b460232698f467676f37
  8. 0x8b2393b9a0cca266e124c0d9cdd820c770d089235bd6a2a38090e1f9577c48f9
  9. 0x417ae96c21259e0ba92e9c16e22f6cdcea1d55df56b3cb0c4812519bf06e866e
  10. 0x1cf289732577ec7d4b7786636bf1c834b739571451a5cc67e3aac33256c9be46
  11. 0xfa039eb62e5d0ae9f7aaaafb0fcbceacfa661b07228233046b9a9af94e547a55
  12. 0xecaf47ba75097c34f2d3c4d62539dace0db8b484bf08941a9259e2d1e8ccea77
  13. 0xf7d2cf278e5d2768b8bdb70730c378877cf7165d8efcbec8bcd3282fdc50d177
  14. 0x0733993143f0230e79482cef2c38e95d98f9eafbe64a43cdc74a4545938a4167
  15. 0x2be1e80e065dd6b2cc75a7142be22225acd144ac975d70bf24b4f01fd76dc497
  16. 0x2e6a32eb32761c210560e852405e2f865f958ddbe01027894f8b9c1b3433b9f0
  17. 0x9a83be955a206deb65b995adfd92c58fa31c95fbbf926bd199d300e70b08b26d
  18. 0x20704208aa6923d6b2450ef74ede87a6e0265d46447926038fe9506e9e154b2d
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON