Skip to content

MCP Protocol and Client Examples

Send JSON-RPC requests to https://mcp.trade8.xyz/mcp. This guide documents revision 2026-07-28. Discovery and the three public catalog tools work without an access token. See Connect Your AI Agent for client setup and private permissions.

Call server/discover to check protocol support and capabilities. Each request carries version and client metadata. This revision uses self-contained requests in place of the older initialization handshake and session ID.

Server Discovery Request
{
  "jsonrpc": "2.0",
  "id": "discover-1",
  "method": "server/discover",
  "params": {
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientInfo": {
        "name": "trade8-research-agent",
        "version": "1.0.0"
      },
      "io.modelcontextprotocol/clientCapabilities": {}
    }
  }
}
Server Discovery Result
{
  "jsonrpc": "2.0",
  "id": "discover-1",
  "result": {
    "resultType": "complete",
    "supportedVersions": [
      "2026-07-28"
    ],
    "capabilities": {
      "tools": {}
    },
    "_meta": {
      "io.modelcontextprotocol/serverInfo": {
        "name": "trade8",
        "version": "1.0.0"
      }
    },
    "instructions": "Read perpetual markets, native exchange contracts, and the exchange directory. Account data and trading actions require authorization.",
    "ttlMs": 0,
    "cacheScope": "private"
  }
}

The documented profile exposes tools. Use the REST reference for account operations and the WebSocket reference for continuous market streams. Consult MCP discovery for version selection.

Each call is an HTTP POST with matching protocol metadata and routing headers. The client must handle both JSON and Server-Sent Events responses. These requirements follow Streamable HTTP.

Header Value
Authorization Private calls only: Bearer followed by an MCP access token
Content-Type application/json
Accept application/json, text/event-stream
MCP-Protocol-Version 2026-07-28, matching the body metadata
Mcp-Method The JSON-RPC method, such as tools/call
Mcp-Name The tool name for a tools/call request

Read BTC contract specifications without credentials:

Terminal window
curl --fail-with-body --no-buffer --max-time 15 \
https://mcp.trade8.xyz/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2026-07-28' \
-H 'Mcp-Method: tools/call' \
-H 'Mcp-Name: trade8_get_market' \
--data '{
"jsonrpc": "2.0",
"id": "market-1",
"method": "tools/call",
"params": {
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientInfo": {
"name": "trade8-research-agent",
"version": "1.0.0"
},
"io.modelcontextprotocol/clientCapabilities": {}
},
"name": "trade8_get_market",
"arguments": {
"instrument": "BTC-PERP"
}
}
}'

Native clients may omit Origin. Browser requests must use https://trade8.xyz, https://www.trade8.xyz, or https://mcp.trade8.xyz. Requests are limited to 16 KiB with a five-second body-read timeout. Keep tokens in headers and redirects disabled for private calls.

List Tools Request
{
  "jsonrpc": "2.0",
  "id": "tools-1",
  "method": "tools/list",
  "params": {
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientInfo": {
        "name": "trade8-research-agent",
        "version": "1.0.0"
      },
      "io.modelcontextprotocol/clientCapabilities": {}
    }
  }
}

Anonymous tools/list returns three definitions:

Tool REST Equivalent
trade8_list_markets GET /v1/markets
trade8_get_market GET /v1/markets/{instrument}
trade8_list_exchanges GET /v1/venues

The result includes tools, resultType, ttlMs, and cacheScope. Each definition includes inputSchema, outputSchema, and read-only annotations. Public discovery fits in one response.

The downloadable catalog contains all documented tools in tools/list result format. Treat annotations such as readOnlyHint as descriptions; enforce permissions through the account grant and approval policy. See the MCP tools specification.

Tool calls return both structuredContent and text content. Validate the structured value against the advertised outputSchema. Successful reads and order acknowledgements use the same models as the REST API.

BTC Contract Specifications Result
{
  "jsonrpc": "2.0",
  "id": "call-trade8_get_market",
  "result": {
    "resultType": "complete",
    "content": [
      {
        "type": "text",
        "text": "{\"instrument\":\"BTC-PERP\",\"contract_type\":\"perpetual\",\"base_asset\":\"BTC\",\"contracts\":[{\"venue\":\"apex\",\"venue_instrument\":\"BTC-USDT\",\"settlement_asset\":\"USDT\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USDT\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"0.001\",\"minimum_quantity\":\"0.0010\",\"maximum_quantity\":\"50\",\"max_leverage\":\"100\"},{\"venue\":\"aster\",\"venue_instrument\":\"BTCU\",\"settlement_asset\":\"U\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"U\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.10\"},\"quantity_step\":\"0.001\",\"minimum_quantity\":\"0.001\",\"maximum_quantity\":\"1000\",\"minimum_notional\":\"5\"},{\"venue\":\"aster\",\"venue_instrument\":\"BTCUSD1\",\"settlement_asset\":\"USD1\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USD1\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.10\"},\"quantity_step\":\"0.001\",\"minimum_quantity\":\"0.001\",\"maximum_quantity\":\"1000\",\"minimum_notional\":\"5\"},{\"venue\":\"aster\",\"venue_instrument\":\"BTCUSDT\",\"settlement_asset\":\"USDT\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USDT\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"0.001\",\"minimum_quantity\":\"0.001\",\"maximum_quantity\":\"1000\",\"minimum_notional\":\"5\"},{\"venue\":\"binance\",\"venue_instrument\":\"BTCU\",\"settlement_asset\":\"U\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"U\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.10\"},\"quantity_step\":\"0.0001\",\"minimum_quantity\":\"0.0001\",\"maximum_quantity\":\"800\",\"minimum_notional\":\"5\"},{\"venue\":\"binance\",\"venue_instrument\":\"BTCUSD_PERP\",\"settlement_asset\":\"BTC\",\"payoff_type\":\"inverse\",\"quantity_unit\":\"contract\",\"price_unit\":\"USD\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"1\",\"minimum_quantity\":\"1\",\"maximum_quantity\":\"1000000\",\"contract_size\":\"100\",\"contract_size_unit\":\"USD\"},{\"venue\":\"binance\",\"venue_instrument\":\"BTCUSD1\",\"settlement_asset\":\"USD1\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USD1\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.10\"},\"quantity_step\":\"0.0001\",\"minimum_quantity\":\"0.0001\",\"maximum_quantity\":\"800\",\"minimum_notional\":\"50\"},{\"venue\":\"binance\",\"venue_instrument\":\"BTCUSDC\",\"settlement_asset\":\"USDC\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USDC\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"0.001\",\"minimum_quantity\":\"0.001\",\"maximum_quantity\":\"800\",\"minimum_notional\":\"50\"},{\"venue\":\"binance\",\"venue_instrument\":\"BTCUSDT\",\"settlement_asset\":\"USDT\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USDT\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.10\"},\"quantity_step\":\"0.001\",\"minimum_quantity\":\"0.001\",\"maximum_quantity\":\"1000\",\"minimum_notional\":\"50\"},{\"venue\":\"bitget\",\"venue_instrument\":\"BTCPERP\",\"settlement_asset\":\"USDC\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USDC\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"0.0001\",\"minimum_quantity\":\"0.0001\",\"maximum_quantity\":\"100\",\"minimum_notional\":\"5\",\"max_leverage\":\"125\"},{\"venue\":\"bitget\",\"venue_instrument\":\"BTCUSDT\",\"settlement_asset\":\"USDT\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USDT\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"0.0001\",\"minimum_quantity\":\"0.0001\",\"maximum_quantity\":\"1200\",\"minimum_notional\":\"5\",\"max_leverage\":\"150\"},{\"venue\":\"bybit\",\"venue_instrument\":\"BTCPERP\",\"settlement_asset\":\"USDC\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USDC\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.10\"},\"quantity_step\":\"0.001\",\"minimum_quantity\":\"0.001\",\"maximum_quantity\":\"1000.000\",\"minimum_notional\":\"5\",\"max_leverage\":\"125.00\"},{\"venue\":\"bybit\",\"venue_instrument\":\"BTCUSD\",\"settlement_asset\":\"BTC\",\"payoff_type\":\"inverse\",\"quantity_unit\":\"USD\",\"price_unit\":\"USD\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.10\"},\"quantity_step\":\"1\",\"minimum_quantity\":\"1\",\"maximum_quantity\":\"25000000\",\"minimum_notional\":\"5\",\"max_leverage\":\"100.00\"},{\"venue\":\"bybit\",\"venue_instrument\":\"BTCUSDT\",\"settlement_asset\":\"USDT\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USDT\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.10\"},\"quantity_step\":\"0.001\",\"minimum_quantity\":\"0.001\",\"maximum_quantity\":\"1500.000\",\"minimum_notional\":\"5\",\"max_leverage\":\"150.00\"},{\"venue\":\"deribit\",\"venue_instrument\":\"BTC_USDC-PERPETUAL\",\"settlement_asset\":\"USDC\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USDC\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"0.0001\",\"minimum_quantity\":\"0.0001\",\"max_leverage\":\"50\"},{\"venue\":\"deribit\",\"venue_instrument\":\"BTC-PERPETUAL\",\"settlement_asset\":\"BTC\",\"payoff_type\":\"inverse\",\"quantity_unit\":\"USD\",\"price_unit\":\"USD\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.5\"},\"quantity_step\":\"10\",\"minimum_quantity\":\"10\",\"max_leverage\":\"50\"},{\"venue\":\"dydx\",\"venue_instrument\":\"BTC-USD\",\"settlement_asset\":\"USDC\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USD\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"1\"},\"quantity_step\":\"0.0001\"},{\"venue\":\"edgex\",\"venue_instrument\":\"BTCUSD\",\"settlement_asset\":\"USDT\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USD\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"0.001\",\"minimum_quantity\":\"0.003\",\"maximum_quantity\":\"22\",\"max_leverage\":\"100\"},{\"venue\":\"extended\",\"venue_instrument\":\"BTC-USD\",\"settlement_asset\":\"USDC\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USD\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"1\"},\"quantity_step\":\"0.00001\",\"minimum_quantity\":\"0.0001\",\"max_leverage\":\"50.00\"},{\"venue\":\"gate\",\"venue_instrument\":\"BTC_USD\",\"settlement_asset\":\"BTC\",\"payoff_type\":\"inverse\",\"quantity_unit\":\"contract\",\"price_unit\":\"USD\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"1\",\"minimum_quantity\":\"1\",\"maximum_quantity\":\"530000\",\"max_leverage\":\"100\"},{\"venue\":\"gate\",\"venue_instrument\":\"BTC_USDT\",\"settlement_asset\":\"USDT\",\"payoff_type\":\"linear\",\"quantity_unit\":\"contract\",\"price_unit\":\"USDT\",\"contract_size\":\"0.0001\",\"contract_size_unit\":\"BTC\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"1\",\"minimum_quantity\":\"1\",\"maximum_quantity\":\"12000000\",\"max_leverage\":\"200\"},{\"venue\":\"gmx\",\"venue_instrument\":\"0x3ce7BCDB37Bf587d1C17B930Fa0A7000A0648D12\",\"network\":\"avalanche\",\"settlement_assets\":[\"BTC\"],\"quantity_unit\":\"USD\",\"price_unit\":\"USD\"},{\"venue\":\"gmx\",\"venue_instrument\":\"0x47c031236e19d024b42f8AE6780E44A573170703\",\"network\":\"arbitrum\",\"settlement_assets\":[\"WBTC.b\",\"USDC\"],\"quantity_unit\":\"USD\",\"price_unit\":\"USD\"},{\"venue\":\"gmx\",\"venue_instrument\":\"0x7C11F78Ce78768518D743E81Fdfa2F860C6b9A77\",\"network\":\"arbitrum\",\"settlement_assets\":[\"WBTC.b\"],\"quantity_unit\":\"USD\",\"price_unit\":\"USD\"},{\"venue\":\"gmx\",\"venue_instrument\":\"0xd62068697bCc92AF253225676D618B0C9f17C663\",\"network\":\"arbitrum\",\"settlement_assets\":[\"tBTC\"],\"quantity_unit\":\"USD\",\"price_unit\":\"USD\"},{\"venue\":\"gmx\",\"venue_instrument\":\"0xFb02132333A79C8B5Bd0b64E3AbccA5f7fAf2937\",\"network\":\"avalanche\",\"settlement_assets\":[\"BTC\",\"USDC\"],\"quantity_unit\":\"USD\",\"price_unit\":\"USD\"},{\"venue\":\"grvt\",\"venue_instrument\":\"BTC_USDT_Perp\",\"settlement_asset\":\"USDT\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USDT\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"minimum_quantity\":\"0.001\",\"minimum_notional\":\"100.0\"},{\"venue\":\"hyperliquid\",\"venue_instrument\":\"BTC\",\"settlement_asset\":\"USDC\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USD\",\"price_rule\":{\"type\":\"significant_figures\",\"max_significant_figures\":5,\"max_decimal_places\":1,\"integer_prices_allowed\":true},\"quantity_step\":\"0.00001\",\"max_leverage\":\"40\"},{\"venue\":\"kraken\",\"venue_instrument\":\"PF_XBTUSD\",\"settlement_asset\":\"USD\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USD\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"1\"},\"quantity_step\":\"0.0001\"},{\"venue\":\"kucoin\",\"venue_instrument\":\"XBTUSDCM\",\"settlement_asset\":\"USDC\",\"payoff_type\":\"linear\",\"quantity_unit\":\"contract\",\"price_unit\":\"USDC\",\"contract_size\":\"0.0001\",\"contract_size_unit\":\"BTC\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"1\",\"maximum_quantity\":\"1000000\"},{\"venue\":\"kucoin\",\"venue_instrument\":\"XBTUSDM\",\"settlement_asset\":\"BTC\",\"payoff_type\":\"inverse\",\"quantity_unit\":\"contract\",\"price_unit\":\"USD\",\"contract_size\":\"1\",\"contract_size_unit\":\"USD\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"1\",\"maximum_quantity\":\"1000000\"},{\"venue\":\"kucoin\",\"venue_instrument\":\"XBTUSDTM\",\"settlement_asset\":\"USDT\",\"payoff_type\":\"linear\",\"quantity_unit\":\"contract\",\"price_unit\":\"USDT\",\"contract_size\":\"0.001\",\"contract_size_unit\":\"BTC\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"1\",\"maximum_quantity\":\"1000000\"},{\"venue\":\"lighter\",\"venue_instrument\":\"BTC\",\"settlement_asset\":\"USDC\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USD\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"0.00001\",\"minimum_quantity\":\"0.00010\",\"minimum_notional\":\"10.000000\"},{\"venue\":\"mexc\",\"venue_instrument\":\"BTC_USD\",\"settlement_asset\":\"BTC\",\"quantity_unit\":\"contract\",\"price_unit\":\"USD\",\"contract_size\":\"100\",\"contract_size_unit\":\"BTC\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"1\",\"minimum_quantity\":\"1\",\"maximum_quantity\":\"2800\",\"max_leverage\":\"125\"},{\"venue\":\"mexc\",\"venue_instrument\":\"BTC_USD1\",\"settlement_asset\":\"USD1\",\"quantity_unit\":\"contract\",\"price_unit\":\"USD1\",\"contract_size\":\"0.0001\",\"contract_size_unit\":\"BTC\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"1\",\"minimum_quantity\":\"1\",\"maximum_quantity\":\"350000\",\"max_leverage\":\"100\"},{\"venue\":\"mexc\",\"venue_instrument\":\"BTC_USDC\",\"settlement_asset\":\"USDC\",\"quantity_unit\":\"contract\",\"price_unit\":\"USDC\",\"contract_size\":\"0.0001\",\"contract_size_unit\":\"BTC\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"1\",\"minimum_quantity\":\"1\",\"maximum_quantity\":\"1500000\",\"max_leverage\":\"200\"},{\"venue\":\"mexc\",\"venue_instrument\":\"BTC_USDT\",\"settlement_asset\":\"USDT\",\"quantity_unit\":\"contract\",\"price_unit\":\"USDT\",\"contract_size\":\"0.0001\",\"contract_size_unit\":\"BTC\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"1\",\"minimum_quantity\":\"1\",\"maximum_quantity\":\"2500000\",\"max_leverage\":\"500\"},{\"venue\":\"okx\",\"venue_instrument\":\"BTC-USD-SWAP\",\"settlement_asset\":\"BTC\",\"payoff_type\":\"inverse\",\"quantity_unit\":\"contract\",\"price_unit\":\"USD\",\"contract_size\":\"100\",\"contract_size_unit\":\"USD\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"0.1\",\"minimum_quantity\":\"0.1\",\"maximum_quantity\":\"100000000\",\"max_leverage\":\"100\"},{\"venue\":\"okx\",\"venue_instrument\":\"BTC-USDT-SWAP\",\"settlement_asset\":\"USDT\",\"payoff_type\":\"linear\",\"quantity_unit\":\"contract\",\"price_unit\":\"USDT\",\"contract_size\":\"0.01\",\"contract_size_unit\":\"BTC\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"0.01\",\"minimum_quantity\":\"0.01\",\"maximum_quantity\":\"100000000\",\"max_leverage\":\"100\"},{\"venue\":\"paradex\",\"venue_instrument\":\"BTC-USD-PERP\",\"settlement_asset\":\"USDC\",\"payoff_type\":\"linear\",\"quantity_unit\":\"BTC\",\"price_unit\":\"USD\",\"price_rule\":{\"type\":\"fixed_tick\",\"tick_size\":\"0.1\"},\"quantity_step\":\"0.00001\",\"maximum_quantity\":\"100\",\"minimum_notional\":\"10\"}]}"
      }
    ],
    "structuredContent": {
      "instrument": "BTC-PERP",
      "contract_type": "perpetual",
      "base_asset": "BTC",
      "contracts": [
        {
          "venue": "apex",
          "venue_instrument": "BTC-USDT",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDT",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.0010",
          "maximum_quantity": "50",
          "max_leverage": "100"
        },
        {
          "venue": "aster",
          "venue_instrument": "BTCU",
          "settlement_asset": "U",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "U",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.10"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.001",
          "maximum_quantity": "1000",
          "minimum_notional": "5"
        },
        {
          "venue": "aster",
          "venue_instrument": "BTCUSD1",
          "settlement_asset": "USD1",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD1",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.10"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.001",
          "maximum_quantity": "1000",
          "minimum_notional": "5"
        },
        {
          "venue": "aster",
          "venue_instrument": "BTCUSDT",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDT",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.001",
          "maximum_quantity": "1000",
          "minimum_notional": "5"
        },
        {
          "venue": "binance",
          "venue_instrument": "BTCU",
          "settlement_asset": "U",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "U",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.10"
          },
          "quantity_step": "0.0001",
          "minimum_quantity": "0.0001",
          "maximum_quantity": "800",
          "minimum_notional": "5"
        },
        {
          "venue": "binance",
          "venue_instrument": "BTCUSD_PERP",
          "settlement_asset": "BTC",
          "payoff_type": "inverse",
          "quantity_unit": "contract",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "minimum_quantity": "1",
          "maximum_quantity": "1000000",
          "contract_size": "100",
          "contract_size_unit": "USD"
        },
        {
          "venue": "binance",
          "venue_instrument": "BTCUSD1",
          "settlement_asset": "USD1",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD1",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.10"
          },
          "quantity_step": "0.0001",
          "minimum_quantity": "0.0001",
          "maximum_quantity": "800",
          "minimum_notional": "50"
        },
        {
          "venue": "binance",
          "venue_instrument": "BTCUSDC",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.001",
          "maximum_quantity": "800",
          "minimum_notional": "50"
        },
        {
          "venue": "binance",
          "venue_instrument": "BTCUSDT",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDT",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.10"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.001",
          "maximum_quantity": "1000",
          "minimum_notional": "50"
        },
        {
          "venue": "bitget",
          "venue_instrument": "BTCPERP",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.0001",
          "minimum_quantity": "0.0001",
          "maximum_quantity": "100",
          "minimum_notional": "5",
          "max_leverage": "125"
        },
        {
          "venue": "bitget",
          "venue_instrument": "BTCUSDT",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDT",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.0001",
          "minimum_quantity": "0.0001",
          "maximum_quantity": "1200",
          "minimum_notional": "5",
          "max_leverage": "150"
        },
        {
          "venue": "bybit",
          "venue_instrument": "BTCPERP",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.10"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.001",
          "maximum_quantity": "1000.000",
          "minimum_notional": "5",
          "max_leverage": "125.00"
        },
        {
          "venue": "bybit",
          "venue_instrument": "BTCUSD",
          "settlement_asset": "BTC",
          "payoff_type": "inverse",
          "quantity_unit": "USD",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.10"
          },
          "quantity_step": "1",
          "minimum_quantity": "1",
          "maximum_quantity": "25000000",
          "minimum_notional": "5",
          "max_leverage": "100.00"
        },
        {
          "venue": "bybit",
          "venue_instrument": "BTCUSDT",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDT",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.10"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.001",
          "maximum_quantity": "1500.000",
          "minimum_notional": "5",
          "max_leverage": "150.00"
        },
        {
          "venue": "deribit",
          "venue_instrument": "BTC_USDC-PERPETUAL",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.0001",
          "minimum_quantity": "0.0001",
          "max_leverage": "50"
        },
        {
          "venue": "deribit",
          "venue_instrument": "BTC-PERPETUAL",
          "settlement_asset": "BTC",
          "payoff_type": "inverse",
          "quantity_unit": "USD",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.5"
          },
          "quantity_step": "10",
          "minimum_quantity": "10",
          "max_leverage": "50"
        },
        {
          "venue": "dydx",
          "venue_instrument": "BTC-USD",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "1"
          },
          "quantity_step": "0.0001"
        },
        {
          "venue": "edgex",
          "venue_instrument": "BTCUSD",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.003",
          "maximum_quantity": "22",
          "max_leverage": "100"
        },
        {
          "venue": "extended",
          "venue_instrument": "BTC-USD",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "1"
          },
          "quantity_step": "0.00001",
          "minimum_quantity": "0.0001",
          "max_leverage": "50.00"
        },
        {
          "venue": "gate",
          "venue_instrument": "BTC_USD",
          "settlement_asset": "BTC",
          "payoff_type": "inverse",
          "quantity_unit": "contract",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "minimum_quantity": "1",
          "maximum_quantity": "530000",
          "max_leverage": "100"
        },
        {
          "venue": "gate",
          "venue_instrument": "BTC_USDT",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "contract",
          "price_unit": "USDT",
          "contract_size": "0.0001",
          "contract_size_unit": "BTC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "minimum_quantity": "1",
          "maximum_quantity": "12000000",
          "max_leverage": "200"
        },
        {
          "venue": "gmx",
          "venue_instrument": "0x3ce7BCDB37Bf587d1C17B930Fa0A7000A0648D12",
          "network": "avalanche",
          "settlement_assets": [
            "BTC"
          ],
          "quantity_unit": "USD",
          "price_unit": "USD"
        },
        {
          "venue": "gmx",
          "venue_instrument": "0x47c031236e19d024b42f8AE6780E44A573170703",
          "network": "arbitrum",
          "settlement_assets": [
            "WBTC.b",
            "USDC"
          ],
          "quantity_unit": "USD",
          "price_unit": "USD"
        },
        {
          "venue": "gmx",
          "venue_instrument": "0x7C11F78Ce78768518D743E81Fdfa2F860C6b9A77",
          "network": "arbitrum",
          "settlement_assets": [
            "WBTC.b"
          ],
          "quantity_unit": "USD",
          "price_unit": "USD"
        },
        {
          "venue": "gmx",
          "venue_instrument": "0xd62068697bCc92AF253225676D618B0C9f17C663",
          "network": "arbitrum",
          "settlement_assets": [
            "tBTC"
          ],
          "quantity_unit": "USD",
          "price_unit": "USD"
        },
        {
          "venue": "gmx",
          "venue_instrument": "0xFb02132333A79C8B5Bd0b64E3AbccA5f7fAf2937",
          "network": "avalanche",
          "settlement_assets": [
            "BTC",
            "USDC"
          ],
          "quantity_unit": "USD",
          "price_unit": "USD"
        },
        {
          "venue": "grvt",
          "venue_instrument": "BTC_USDT_Perp",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDT",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "minimum_quantity": "0.001",
          "minimum_notional": "100.0"
        },
        {
          "venue": "hyperliquid",
          "venue_instrument": "BTC",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD",
          "price_rule": {
            "type": "significant_figures",
            "max_significant_figures": 5,
            "max_decimal_places": 1,
            "integer_prices_allowed": true
          },
          "quantity_step": "0.00001",
          "max_leverage": "40"
        },
        {
          "venue": "kraken",
          "venue_instrument": "PF_XBTUSD",
          "settlement_asset": "USD",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "1"
          },
          "quantity_step": "0.0001"
        },
        {
          "venue": "kucoin",
          "venue_instrument": "XBTUSDCM",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "contract",
          "price_unit": "USDC",
          "contract_size": "0.0001",
          "contract_size_unit": "BTC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "maximum_quantity": "1000000"
        },
        {
          "venue": "kucoin",
          "venue_instrument": "XBTUSDM",
          "settlement_asset": "BTC",
          "payoff_type": "inverse",
          "quantity_unit": "contract",
          "price_unit": "USD",
          "contract_size": "1",
          "contract_size_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "maximum_quantity": "1000000"
        },
        {
          "venue": "kucoin",
          "venue_instrument": "XBTUSDTM",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "contract",
          "price_unit": "USDT",
          "contract_size": "0.001",
          "contract_size_unit": "BTC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "maximum_quantity": "1000000"
        },
        {
          "venue": "lighter",
          "venue_instrument": "BTC",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.00001",
          "minimum_quantity": "0.00010",
          "minimum_notional": "10.000000"
        },
        {
          "venue": "mexc",
          "venue_instrument": "BTC_USD",
          "settlement_asset": "BTC",
          "quantity_unit": "contract",
          "price_unit": "USD",
          "contract_size": "100",
          "contract_size_unit": "BTC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "minimum_quantity": "1",
          "maximum_quantity": "2800",
          "max_leverage": "125"
        },
        {
          "venue": "mexc",
          "venue_instrument": "BTC_USD1",
          "settlement_asset": "USD1",
          "quantity_unit": "contract",
          "price_unit": "USD1",
          "contract_size": "0.0001",
          "contract_size_unit": "BTC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "minimum_quantity": "1",
          "maximum_quantity": "350000",
          "max_leverage": "100"
        },
        {
          "venue": "mexc",
          "venue_instrument": "BTC_USDC",
          "settlement_asset": "USDC",
          "quantity_unit": "contract",
          "price_unit": "USDC",
          "contract_size": "0.0001",
          "contract_size_unit": "BTC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "minimum_quantity": "1",
          "maximum_quantity": "1500000",
          "max_leverage": "200"
        },
        {
          "venue": "mexc",
          "venue_instrument": "BTC_USDT",
          "settlement_asset": "USDT",
          "quantity_unit": "contract",
          "price_unit": "USDT",
          "contract_size": "0.0001",
          "contract_size_unit": "BTC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "minimum_quantity": "1",
          "maximum_quantity": "2500000",
          "max_leverage": "500"
        },
        {
          "venue": "okx",
          "venue_instrument": "BTC-USD-SWAP",
          "settlement_asset": "BTC",
          "payoff_type": "inverse",
          "quantity_unit": "contract",
          "price_unit": "USD",
          "contract_size": "100",
          "contract_size_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.1",
          "minimum_quantity": "0.1",
          "maximum_quantity": "100000000",
          "max_leverage": "100"
        },
        {
          "venue": "okx",
          "venue_instrument": "BTC-USDT-SWAP",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "contract",
          "price_unit": "USDT",
          "contract_size": "0.01",
          "contract_size_unit": "BTC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.01",
          "minimum_quantity": "0.01",
          "maximum_quantity": "100000000",
          "max_leverage": "100"
        },
        {
          "venue": "paradex",
          "venue_instrument": "BTC-USD-PERP",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.00001",
          "maximum_quantity": "100",
          "minimum_notional": "10"
        }
      ]
    },
    "isError": false
  }
}

A resultType of complete means the tool call finished. Check the returned order’s status and quantities to determine execution progress. If the client receives input_required, present the requested interaction through a compatible client before continuing. The read-only helper below stops on that result.

Download mcp-client.mjs into your project. It uses Node.js 22 or later, with no package installation. It reads JSON or SSE, matches response IDs, applies a 15-second timeout, caps responses at 2 MiB, and rejects redirects and write tools.

Run the public catalog example:

Terminal window
node mcp-client.mjs

The script reads BTC contract specifications. Import it to list exchanges:

import { request } from './mcp-client.mjs';
const result = await request('tools/call', {
name: 'trade8_list_exchanges',
arguments: { type: 'decentralized', limit: 50 }
});
for (const exchange of result.structuredContent.venues) {
console.log(exchange.id, exchange.name, exchange.type);
}

The helper omits credentials on public calls. Private reads require TRADE8_MCP_ACCESS_TOKEN; provide it through your secret manager. The host application handles authorization and approval policy.

Catalog tools use params.arguments.cursor and structuredContent.pagination.next_cursor. Keep filters unchanged; restart after a catalog revision change. trade8_list_markets defaults to 10 instruments per page; other lists default to 50 records. The maximum limit is 200.

import { request } from './mcp-client.mjs';
let cursor;
const seen = new Set();
do {
const result = await request('tools/call', {
name: 'trade8_list_markets',
arguments: {
venue: 'hyperliquid',
limit: 10,
...(cursor ? { cursor } : {})
}
});
for (const market of result.structuredContent.markets) {
console.log(market.instrument, market.contracts);
}
cursor = result.structuredContent.pagination.next_cursor;
if (cursor && seen.has(cursor)) throw new Error('Repeated pagination cursor');
if (cursor) seen.add(cursor);
} while (cursor);

Opening /mcp in a browser sends GET and returns 405 METHOD_NOT_ALLOWED, with links to the protocol guide and public REST catalog. MCP calls use POST.

Private tool calls return HTTP 401 with WWW-Authenticate: Bearer realm="Trade8 MCP" when access is denied:

{
"error": "unauthorized",
"error_description": "A Trade8 MCP access token is required.",
"request_id": "req_example_01"
}

The same request ID appears in X-Request-ID. Send the connection’s token in the Authorization: Bearer header. Keep tokens out of URLs and chat messages.

Result Action
HTTP 401 Review the bearer challenge and connection authorization. Contact support if access remains denied.
HTTP 403 Check the browser Origin against the allowed origins above.
HTTP 405 Send the JSON-RPC request with POST.
HTTP 413 Reduce the request body to 16 KiB or less.
HTTP 415 / 406 Check Content-Type and Accept headers.
HTTP 429 Respect Retry-After; reduce concurrency and repeated data reads.
JSON-RPC -32601 Check the method and discovered protocol support.
JSON-RPC -32602 Validate arguments against the tool’s input schema.
JSON-RPC -32020 Align the HTTP method/name/version headers with the JSON body.
JSON-RPC -32022 Select a supported version from the error’s supported list.
isError: true Read the structured error code and field details.
Interrupted read Retry with a new JSON-RPC request ID.
Interrupted trading action Reconcile the order first; preserve the action’s idempotency key.

A tool-level permission error can look like this:

Tool Error Result
{
  "jsonrpc": "2.0",
  "id": "order-1",
  "result": {
    "resultType": "complete",
    "isError": true,
    "content": [
      {
        "type": "text",
        "text": "The connection needs orders:write for this action."
      }
    ],
    "structuredContent": {
      "request_id": "req_mcp_example_01",
      "error": {
        "code": "INSUFFICIENT_SCOPE",
        "message": "The connection needs orders:write for this action.",
        "retryable": false,
        "details": [
          {
            "field": "scope",
            "reason": "orders:write required"
          }
        ]
      }
    }
  }
}

JSON-RPC request IDs correlate responses. Trade8 idempotency keys identify trading actions. Reissuing a network request uses a fresh request ID while preserving the same action key and arguments.

Closing a response stream requests cancellation of the in-flight MCP work. Check the saved order identifiers for anything already submitted. Send trade8_cancel_order when you want to cancel an accepted order.

Keep write approvals enabled. Treat exchange names, descriptions, and returned text as data; tool output cannot authorize additional access. Record tool names, account IDs, approval decisions, and order IDs in your audit log while excluding tokens and secrets.

For support, Contact Us with the tool name, timestamp, and request_id. Redact credentials and unrelated account records.

Account access

Jurisdiction Restriction

Trade8 is not available in your jurisdiction.

You can still explore the product and read the documentation.

Explore the Docs