Delta Exchange MCP
Tool Reference

Trading

Trading tools to place, edit, and cancel orders, manage brackets, leverage, margin, and positions. Off by default; requires a Trading key and DELTA_MCP_MODE=trade.

These tools place and change real orders and positions. They register only when you opt in with DELTA_MCP_MODE=trade and supply a key with Trading permission (see Authentication). Without that the server stays read-only and none of the tools below exist.

These tools move real money

Mutations execute against your live account. Always dry-run first (every tool takes dry_run: true, which validates and echoes the exact payload without sending it), read it back, then confirm. Every call — dry-run or real — is written to an audit log. Mutations are never auto-retried.

The dry-run-first pattern

Every tool here takes a dry_run flag (default false). Ask for the dry run, read the echoed payload, then say "send it". This is the recommended way to use every tool on this page.

Place a reduce-only limit sell of 10 BTCUSD contracts at 72000 — dry run first.

The assistant calls the tool with dry_run: true, you see the exact order it would send ({ "dry_run": true, "method": "POST", "path": "/orders", "payload": {...} }), and nothing is placed until you confirm.

Prices are tick-rounded. Price params are rounded to the product's tick size before sending; the response carries an adjustments / price_adjustments block showing any value that changed.

place_order

Place a single limit, market, or stop order. Supports attached brackets.

Auth: Trading key + trade mode

ParamTypeRequiredNotes
sizeintyesorder size in contracts (positive)
sidestringyesbuy or sell
order_typestringyeslimit_order or market_order
product_idintnopass exactly one of product_id / product_symbol
product_symbolstringnoe.g. BTCUSD
limit_pricestringnorequired for limit_order; rejected on market_order
stop_order_typestringnostop_loss_order or take_profit_order
stop_pricestringnotrigger price for stop orders
trail_amountstringnotrailing-stop amount
stop_trigger_methodstringnomark_price, last_traded_price, spot_price
time_in_forcestringnogtc or ioc
post_onlyboolnoreject if it would take liquidity
reduce_onlyboolnoonly reduce an existing position
client_order_idstringnoyour id, max 32 chars
bracket_stop_loss_pricestringnoattached-bracket SL trigger
bracket_stop_loss_limit_pricestringnoattached-bracket SL limit
bracket_take_profit_pricestringnoattached-bracket TP trigger
bracket_take_profit_limit_pricestringnoattached-bracket TP limit
bracket_trail_amountstringnoattached-bracket trailing amount
bracket_stop_trigger_methodstringnotrigger method for the bracket
dry_runboolnovalidate + echo the payload without sending

Passing the bracket_* params here creates an entry-order bracket whose id (the returned order id) is what edit_bracket_order later expects. (That differs from place_bracket_order, which attaches a bracket to an open position.)

Dry-run a GTC limit buy of 5 ETHUSD at 3400 with a take-profit at 3600 and a
stop-loss at 3250. Show me the payload before sending.

edit_order

Edit an open order's size or price.

Auth: Trading key + trade mode

ParamTypeRequiredNotes
idintyesorder id to edit
sizeintyestotal size after the edit
product_idintnopass exactly one of product_id / product_symbol
product_symbolstringnoe.g. BTCUSD
limit_pricestringnonew limit price
stop_pricestringnonew stop trigger price
trail_amountstringnonew trailing-stop amount
post_onlyboolnoreject if it would take liquidity
dry_runboolnovalidate + echo the payload without sending
Move my open BTCUSD order 123456789 to a limit price of 71500 — dry run first.

cancel_order

Cancel a single order by id or client order id.

Auth: Trading key + trade mode

ParamTypeRequiredNotes
product_idintyesproduct the order belongs to
idintnoorder id to cancel
client_order_idstringnoyour client order id
dry_runboolnovalidate + echo the payload without sending

Pass exactly one of id or client_order_id.

Cancel my open BTCUSD order 123456789.

cancel_all_orders

Cancel open orders, optionally scoped by product or contract type.

Auth: Trading key + trade mode

ParamTypeRequiredNotes
product_idintnolimit to one product
contract_typesstring[]nolimit to contract types (ignored if product_id set)
cancel_limit_ordersboolnoinclude limit orders
cancel_stop_ordersboolnoinclude stop orders
cancel_reduce_only_ordersboolnoinclude reduce-only orders
dry_runboolnovalidate + echo the payload without sending

With no filters this cancels everything

If you set none of the cancel_* flags, all three default to true so "cancel all" cancels every open order. Set a flag explicitly, or pass product_id / contract_types, to narrow the scope. Dry-run it first.

Cancel all my open orders on BTCUSD — dry run first so I can see what's affected.

place_batch_orders

Place up to 50 orders on one contract in a single request.

Auth: Trading key + trade mode

ParamTypeRequiredNotes
ordersobject[]yesup to 50; each {size, side, order_type, limit_price?, time_in_force?, post_only?, client_order_id?}. Same contract. No IOC/stop.
product_idintnopass exactly one of product_id / product_symbol
product_symbolstringnoe.g. BTCUSD
dry_runboolnovalidate + echo the payload without sending

client_order_id must be unique within the batch. If the exchange processes fewer orders than sent, the response carries a partial_failure block listing the dropped ids without hiding the ones that went live.

Dry-run a ladder of 5 BTCUSD limit buys: 2 contracts each at 70000, 69500, 69000,
68500, 68000.

edit_batch_orders

Edit up to 50 orders on one contract in a single request.

Auth: Trading key + trade mode

ParamTypeRequiredNotes
ordersobject[]yesup to 50; each {id, size, order_type, limit_price?, post_only?}
product_idintnopass exactly one of product_id / product_symbol
product_symbolstringnoe.g. BTCUSD
dry_runboolnovalidate + echo the payload without sending
Reprice all my open ETHUSD ladder orders down by 50 — dry run first.

cancel_batch_orders

Cancel up to 50 orders on one contract in a single request.

Auth: Trading key + trade mode

ParamTypeRequiredNotes
ordersobject[]yesup to 50; each {id} or {client_order_id}
product_idintnopass exactly one of product_id / product_symbol
product_symbolstringnoe.g. BTCUSD
dry_runboolnovalidate + echo the payload without sending
Cancel orders 111, 222, and 333 on BTCUSD in one request.

place_bracket_order

Attach a take-profit / stop-loss bracket to an open position. Provide at least one leg.

Auth: Trading key + trade mode

ParamTypeRequiredNotes
product_idintnopass exactly one of product_id / product_symbol
product_symbolstringnoe.g. BTCUSD
stop_loss_orderobjectno{order_type, stop_price, limit_price?, trail_amount?}
take_profit_orderobjectno{order_type, stop_price, limit_price?}
bracket_stop_trigger_methodstringnomark_price, last_traded_price, spot_price
dry_runboolnovalidate + echo the payload without sending

These position-bracket legs are not editable via edit_bracket_order — cancel and re-place to change them. (edit_bracket_order only edits entry-order brackets created through place_order.)

On my open BTCUSD position, attach a stop-loss at 68000 and a take-profit at
75000 — dry run first.

edit_bracket_order

Edit the bracket (TP/SL) params on an existing entry order.

Auth: Trading key + trade mode

ParamTypeRequiredNotes
idintyesentry-order id whose bracket to update
product_idintnopass exactly one of product_id / product_symbol
product_symbolstringnoe.g. BTCUSD
bracket_stop_loss_pricestringnostop-loss trigger price
bracket_stop_loss_limit_pricestringnostop-loss limit price
bracket_take_profit_pricestringnotake-profit trigger price
bracket_take_profit_limit_pricestringnotake-profit limit price
bracket_trail_amountstringnotrailing-stop amount
bracket_stop_trigger_methodstringnomark_price, last_traded_price, spot_price
dry_runboolnovalidate + echo the payload without sending

id is the entry-order id (an order created with bracket_* params via place_order). It does not accept the leg ids of a position bracket from place_bracket_order.

On entry order 123456789, raise the take-profit to 76000 — dry run first.

set_product_leverage

Set order leverage for a product.

Auth: Trading key + trade mode

ParamTypeRequiredNotes
product_idintyesproduct to set leverage for
leveragestringyesleverage multiplier, e.g. '10'
dry_runboolnovalidate + echo the payload without sending
Set my BTCUSD order leverage to 10x — dry run first.

adjust_position_margin

Add or remove isolated margin on a position.

Auth: Trading key + trade mode

ParamTypeRequiredNotes
product_idintyesproduct id of the position
delta_marginstringyesmargin to add (positive) or remove (negative), e.g. '5.0'
dry_runboolnovalidate + echo the payload without sending
Add 5 USDT of isolated margin to my BTCUSD position — dry run first.

close_all_positions

Close open positions in the scopes you explicitly enable.

Auth: Trading key + trade mode

ParamTypeRequiredNotes
close_all_portfolioboolnoclose cross / portfolio-margined positions (default false)
close_all_isolatedboolnoclose isolated-margin positions (default false)
dry_runboolnovalidate + echo the payload without sending

Flatten everything in scope

Both flags default to false, so you must opt into a scope — this never broadens beyond your request. Your user_id is resolved automatically from your profile. Dry-run it and confirm before sending.

Close all my isolated-margin positions — dry run first, then I'll confirm.

configure_auto_topup

Override auto top-up for a single position.

Auth: Trading key + trade mode

ParamTypeRequiredNotes
product_idintyesproduct id of the position
auto_topupboolyesenable or disable auto top-up for this position
dry_runboolnovalidate + echo the payload without sending
Turn on auto top-up for my BTCUSD position.

get_trading_status

Report whether trading mutations are enabled and where the audit log lives. This tool exists only in trade mode.

Auth: Trading key + trade mode

No parameters.

Returns {mode, audit_log_path} (audit_log_path is null if auditing is disabled). Use it to confirm trade mode is on and to find your audit trail.

Is trading enabled, and where is the Delta MCP audit log?

On this page