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.
Discover the Server
Section titled “Discover the Server”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.
{
"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": {}
}
}
}{
"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.
Send an HTTP Request
Section titled “Send an HTTP Request”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:
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.
Discover Tools
Section titled “Discover Tools”{
"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.
Read a Tool Result
Section titled “Read a Tool Result”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.
{
"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.
Node.js Example
Section titled “Node.js Example”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:
node mcp-client.mjsThe 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.
Page Through Records
Section titled “Page Through Records”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);Recover From Errors
Section titled “Recover From Errors”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:
{
"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.
Review Agent Behavior
Section titled “Review Agent Behavior”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.