Quote.Trade MCP: login, deposit address, market data, orders, and withdraws.
Call this server's tools from your browser. Nothing to install.
API key from Quote.Trade (wallet login optional). Trade-only: no withdraw. Full-access: trade+withdraw.
API secret for the key above. MCP host HMAC-signs with it (full signing authority for that key). Prefer trade-only keys for agents.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Withdraw step 1 / anytime account check. GET /api/account with per-request X-MBX-APIKEY. Inspect available balances before withdraw. No live trading action.
This tool takes no arguments.
Withdraw step 1 / anytime account check. GET /api/account with per-request X-MBX-APIKEY. Inspect available balances before withdraw. No live trading action.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Read once to learn efficient direct REST/WebSocket use: routes, signing, streaming, cumulative depth, and client execution controls. Public guidance only; no upstream calls.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Explains that MCP is only a tool/schema adapter around the existing Quote.Trade APIs, and returns local servlet guardrail configuration.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| side | string | Optional BUY or SELL, matching the original order. Passed through if given. |
| symbol* | string | Instrument symbol the order was placed on, such as BTC. |
| account | integer | Quote.Trade account/user id. Optional (defaults to account init-param, QUOTE_TRADE_ACCOUNT, or 0). |
| orderId* | integer | The order id returned by quote_trade_place_order. |
| approvalText* | string | Agent-supplied confirmation friction (not a security control). Must exactly equal: APPROVE QUOTE.TRADE CANCEL ORDER |
| humanApproved* | boolean | Agent-supplied confirmation friction (not a security control). Must be true; enableTrading remains authoritative. |
Trade step 3. GET /api/depth?symbol=SYMBOL&limit=N. Use depth quantity to choose a suitable limit price before placing an order.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Optional maximum levels per side. Positive values are enforced by MCP; omitted/nonpositive uses upstream depth. |
| symbol* | string | Instrument symbol from quote_trade_instruments, such as BTC or ETH. |
{
"type": "object",
"required": [
"symbol"
],
"properties": {
"limit": {
"type": "integer",
"description": "Optional maximum levels per side. Positive values are enforced by MCP; omitted/nonpositive uses upstream depth."
},
"symbol": {
"type": "string",
"description": "Instrument symbol from quote_trade_instruments, such as BTC or ETH."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| skip | integer | Number of matching symbols to skip before returning. Default 0. |
| limit | integer | Max symbols to return. Default 50, max 200. |
| symbols | string | Optional comma-separated symbol filter, e.g. BTC,ETH,SOL. When set, pagination applies to the filtered list. |
{
"type": "object",
"required": [],
"properties": {
"skip": {
"type": "integer",
"description": "Number of matching symbols to skip before returning. Default 0."
},
"limit": {
"type": "integer",
"description": "Max symbols to return. Default 50, max 200."
},
"symbols": {
"type": "string",
"description": "Optional comma-separated symbol filter, e.g. BTC,ETH,SOL. When set, pagination applies to the filtered list."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| login* | string | Wallet address used as login, e.g. 0x15b65a49faf9a4047e912d7de4a77fe24c7cf483. |
{
"type": "object",
"required": [
"login"
],
"properties": {
"login": {
"type": "string",
"description": "Wallet address used as login, e.g. 0x15b65a49faf9a4047e912d7de4a77fe24c7cf483."
}
},
"additionalProperties": false
}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).
| Argument | Type | Description |
|---|---|---|
| symbol* | string | Deposit asset symbol: USDC or USDT (mainnet), or XUSDC (USDC on XDC network). |
{
"type": "object",
"required": [
"symbol"
],
"properties": {
"symbol": {
"type": "string",
"description": "Deposit asset symbol: USDC or USDT (mainnet), or XUSDC (USDC on XDC network)."
}
},
"additionalProperties": false
}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.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| assetType | string | Optional index/basket asset type filter. Omit for all. |
{
"type": "object",
"required": [],
"properties": {
"assetType": {
"type": "string",
"description": "Optional index/basket asset type filter. Omit for all."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| orderId | integer | Optional order id to narrow to one order's history. Omit for the full order history. |
{
"type": "object",
"required": [],
"properties": {
"orderId": {
"type": "integer",
"description": "Optional order id to narrow to one order's history. Omit for the full order history."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| orderId* | integer | The order id returned by quote_trade_place_order. |
{
"type": "object",
"required": [
"orderId"
],
"properties": {
"orderId": {
"type": "integer",
"description": "The order id returned by quote_trade_place_order."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Optional maximum number of orders to return. |
| symbol | string | Optional instrument symbol filter, such as BTC. Omit for all symbols. |
| endTime | integer | Optional inclusive end of a time range, epoch milliseconds. |
| startTime | integer | Optional inclusive start of a time range, epoch milliseconds. |
{
"type": "object",
"required": [],
"properties": {
"limit": {
"type": "integer",
"description": "Optional maximum number of orders to return."
},
"symbol": {
"type": "string",
"description": "Optional instrument symbol filter, such as BTC. Omit for all symbols."
},
"endTime": {
"type": "integer",
"description": "Optional inclusive end of a time range, epoch milliseconds."
},
"startTime": {
"type": "integer",
"description": "Optional inclusive start of a time range, epoch milliseconds."
}
},
"additionalProperties": false
}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.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}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.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}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.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}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.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| skip | integer | Number of instruments to skip before returning. Default 0. |
| limit | integer | Max instruments to return. Default 50, max 200. |
{
"type": "object",
"required": [],
"properties": {
"skip": {
"type": "integer",
"description": "Number of instruments to skip before returning. Default 0."
},
"limit": {
"type": "integer",
"description": "Max instruments to return. Default 50, max 200."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| challenge* | string | Challenge text returned by quote_trade_get_challenge (Sign auth token: ...). |
| isNewUser | boolean | From quote_trade_get_challenge. true -> registerUser; false -> logon. If omitted, logon is tried first then registerUser on failure. |
| signature* | string | Wallet signature of the challenge text (0x-prefixed hex). |
{
"type": "object",
"required": [
"challenge",
"signature"
],
"properties": {
"challenge": {
"type": "string",
"description": "Challenge text returned by quote_trade_get_challenge (Sign auth token: ...)."
},
"isNewUser": {
"type": "boolean",
"description": "From quote_trade_get_challenge. true -> registerUser; false -> logon. If omitted, logon is tried first then registerUser on failure."
},
"signature": {
"type": "string",
"description": "Wallet signature of the challenge text (0x-prefixed hex)."
}
},
"additionalProperties": false
}Optional before live trade. Normalize/validate a BUY/SELL order locally without sending it.
| Argument | Type | Description |
|---|---|---|
| side* | string | BUY or SELL. |
| type | string | LIMIT only in this adapter. |
| price* | number | Limit price chosen after quote_trade_depth. |
| symbol* | string | Instrument symbol from quote_trade_instruments, such as BTC. |
| account | integer | Quote.Trade account/user id. Optional for preview (defaults to account init-param, QUOTE_TRADE_ACCOUNT, or 0). Required for live place_order. |
| quantity* | number | Order quantity. |
| timestamp | integer | Optional client timestamp in milliseconds. |
| disableLeverage | integer | 1 disables leverage; 0 enables leverage/shorting only if server allowLeverage is true. |
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.
| Argument | Type | Description |
|---|---|---|
| side* | string | BUY or SELL. |
| type | string | LIMIT only in this adapter. |
| price* | number | Limit price chosen after quote_trade_depth. |
| symbol* | string | Instrument symbol from quote_trade_instruments, such as BTC. |
| account* | integer | Quote.Trade account/user id. Optional for preview (defaults to account init-param, QUOTE_TRADE_ACCOUNT, or 0). Required for live place_order. |
| quantity* | number | Order quantity. |
| timestamp | integer | Optional client timestamp in milliseconds. |
Call GET /api/status and return system status, server time, contracts URL, and feature flags.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Trade step 2. GET /api/ticker?symbol=SYMBOL for a symbol from quote_trade_instruments. Returns last price, bid, ask, lastUpdateId.
| Argument | Type | Description |
|---|---|---|
| symbol* | string | Instrument symbol from quote_trade_instruments, such as BTC or ETH. |
{
"type": "object",
"required": [
"symbol"
],
"properties": {
"symbol": {
"type": "string",
"description": "Instrument symbol from quote_trade_instruments, such as BTC or ETH."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| symbol* | string | Stablecoin to withdraw: USDC, USDT, or XUSDC only (not BTC/ETH/other). |
| account* | integer | Quote.Trade account/user id. Optional for preview (defaults to account init-param, QUOTE_TRADE_ACCOUNT, or 0). Required for live withdraw. |
| quantity* | string | Scaled integer quantity as string (API format). Example: "20000000" with quantity_scale=6 means 20 USDC. |
| approvalText* | string | Agent-supplied confirmation friction (not a security control). Must exactly equal: APPROVE QUOTE.TRADE LIVE WITHDRAW |
| humanApproved* | boolean | Agent-supplied confirmation friction (not a security control). Must be true; enableTrading remains authoritative. |
| quantity_scale |
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.
| Argument | Type | Description |
|---|---|---|
| symbol* | string | Stablecoin to withdraw: USDC, USDT, or XUSDC only (not BTC/ETH/other). |
| account | integer | Quote.Trade account/user id. Optional for preview (defaults to account init-param, QUOTE_TRADE_ACCOUNT, or 0). Required for live withdraw. |
| quantity* | string | Scaled integer quantity as string (API format). Example: "20000000" with quantity_scale=6 means 20 USDC. |
| quantity_scale* | integer | Decimal scale for quantity. Example: 6 for USDC. |
{
"type": "object",
"required": [
"symbol",
"quantity",
"quantity_scale"
],
"properties": {
"symbol": {
"type": "string",
"description": "Stablecoin to withdraw: USDC, USDT, or XUSDC only (not BTC/ETH/other)."
},
"account": {
"type": "integer",
"description": "Quote.Trade account/user id. Optional for preview (defaults to account init-param, QUOTE_TRADE_ACCOUNT, or 0). Required for live withdraw."
},
"quantity": {
"type": "string",
"description": "Scaled integer quantity as string (API format). Example: \"20000000\" with quantity_scale=6 means 20 USDC."
},
"quantity_scale": {
"type": "integer",
"description": "Decimal scale for quantity. Example: 6 for USDC."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"symbol",
"orderId",
"humanApproved",
"approvalText"
],
"properties": {
"side": {
"type": "string",
"description": "Optional BUY or SELL, matching the original order. Passed through if given."
},
"symbol": {
"type": "string",
"description": "Instrument symbol the order was placed on, such as BTC."
},
"account": {
"type": "integer",
"description": "Quote.Trade account/user id. Optional (defaults to account init-param, QUOTE_TRADE_ACCOUNT, or 0)."
},
"orderId": {
"type": "integer",
"description": "The order id returned by quote_trade_place_order."
},
"approvalText": {
"type": "string",
"description": "Agent-supplied confirmation friction (not a security control). Must exactly equal: APPROVE QUOTE.TRADE CANCEL ORDER"
},
"humanApproved": {
"type": "boolean",
"description": "Agent-supplied confirmation friction (not a security control). Must be true; enableTrading remains authoritative."
}
},
"additionalProperties": false
}| paymentCurrency |
| string |
| Payment currency such as USDT. |
{
"type": "object",
"required": [
"symbol",
"side",
"price",
"quantity"
],
"properties": {
"side": {
"type": "string",
"description": "BUY or SELL."
},
"type": {
"type": "string",
"description": "LIMIT only in this adapter."
},
"price": {
"type": "number",
"description": "Limit price chosen after quote_trade_depth."
},
"symbol": {
"type": "string",
"description": "Instrument symbol from quote_trade_instruments, such as BTC."
},
"account": {
"type": "integer",
"description": "Quote.Trade account/user id. Optional for preview (defaults to account init-param, QUOTE_TRADE_ACCOUNT, or 0). Required for live place_order."
},
"quantity": {
"type": "number",
"description": "Order quantity."
},
"timestamp": {
"type": "integer",
"description": "Optional client timestamp in milliseconds."
},
"disableLeverage": {
"type": "integer",
"description": "1 disables leverage; 0 enables leverage/shorting only if server allowLeverage is true."
},
"paymentCurrency": {
"type": "string",
"description": "Payment currency such as USDT."
}
},
"additionalProperties": false
}| approvalText* |
| string |
| Agent-supplied confirmation friction (not a security control). Must exactly equal: APPROVE QUOTE.TRADE LIVE ORDER |
| humanApproved* | boolean | Agent-supplied confirmation friction (not a security control). Must be true; enableTrading remains authoritative. |
| disableLeverage | integer | 1 disables leverage; 0 enables leverage/shorting only if server allowLeverage is true. |
| paymentCurrency | string | Payment currency such as USDT. |
{
"type": "object",
"required": [
"account",
"symbol",
"side",
"price",
"quantity",
"humanApproved",
"approvalText"
],
"properties": {
"side": {
"type": "string",
"description": "BUY or SELL."
},
"type": {
"type": "string",
"description": "LIMIT only in this adapter."
},
"price": {
"type": "number",
"description": "Limit price chosen after quote_trade_depth."
},
"symbol": {
"type": "string",
"description": "Instrument symbol from quote_trade_instruments, such as BTC."
},
"account": {
"type": "integer",
"description": "Quote.Trade account/user id. Optional for preview (defaults to account init-param, QUOTE_TRADE_ACCOUNT, or 0). Required for live place_order."
},
"quantity": {
"type": "number",
"description": "Order quantity."
},
"timestamp": {
"type": "integer",
"description": "Optional client timestamp in milliseconds."
},
"approvalText": {
"type": "string",
"description": "Agent-supplied confirmation friction (not a security control). Must exactly equal: APPROVE QUOTE.TRADE LIVE ORDER"
},
"humanApproved": {
"type": "boolean",
"description": "Agent-supplied confirmation friction (not a security control). Must be true; enableTrading remains authoritative."
},
"disableLeverage": {
"type": "integer",
"description": "1 disables leverage; 0 enables leverage/shorting only if server allowLeverage is true."
},
"paymentCurrency": {
"type": "string",
"description": "Payment currency such as USDT."
}
},
"additionalProperties": false
}| integer |
| Decimal scale for quantity. Example: 6 for USDC. |
{
"type": "object",
"required": [
"account",
"symbol",
"quantity",
"quantity_scale",
"humanApproved",
"approvalText"
],
"properties": {
"symbol": {
"type": "string",
"description": "Stablecoin to withdraw: USDC, USDT, or XUSDC only (not BTC/ETH/other)."
},
"account": {
"type": "integer",
"description": "Quote.Trade account/user id. Optional for preview (defaults to account init-param, QUOTE_TRADE_ACCOUNT, or 0). Required for live withdraw."
},
"quantity": {
"type": "string",
"description": "Scaled integer quantity as string (API format). Example: \"20000000\" with quantity_scale=6 means 20 USDC."
},
"approvalText": {
"type": "string",
"description": "Agent-supplied confirmation friction (not a security control). Must exactly equal: APPROVE QUOTE.TRADE LIVE WITHDRAW"
},
"humanApproved": {
"type": "boolean",
"description": "Agent-supplied confirmation friction (not a security control). Must be true; enableTrading remains authoritative."
},
"quantity_scale": {
"type": "integer",
"description": "Decimal scale for quantity. Example: 6 for USDC."
}
},
"additionalProperties": false
}