AI Agents & MCP

How to Require Human Approval for an AI-Generated Crypto Order

The MCP preview does not return a request hash. Enforce actual human approval in your own application, compare every approved field with the live order, and treat the MCP approval phrase as friction only.

30 minutesAdvancedAgent builders, risk teams, and trading operations

What you will accomplish

  • Show the complete order returned by the preview workflow
  • Enforce real approval in an authenticated application session
  • Compare the approved order with the live request field by field
  • Use the MCP approval phrase without treating it as proof of approval

Before you begin

  • A connected Quote.Trade MCP client
  • An authenticated user interface or application session
  • Server-side API credentials that the model cannot read
  • Allowed-symbol, maximum-notional, and leverage limits
The approval phrase is friction, not authorization

humanApproved=true and approvalText="APPROVE QUOTE.TRADE LIVE ORDER" are required by the live tool as an additional friction check. They do not prove who approved the order and do not bind the live request to the preview.

Preview hashThe live preview does not return one
Real approvalEnforce it in your own authenticated application
MCP phrase and flagFriction only
Changed orderPreview and approve again
Step-by-step

Create and display the preview

Call quote_trade_order_preview and show the account, symbol, side, type, price, quantity, payment currency, leverage setting, estimated USD value, and risk checks. The preview should show willSend=false. It does not return a request hash.

Expected result

The user sees the exact order that would be submitted, and no order has been sent.

Get approval in your application

Require the user to approve or reject the displayed order through an authenticated UI or application session. The model must not be able to create its own approval. A model-generated phrase or boolean is not evidence that a human reviewed the order.

Expected result

Your application has a user action tied to the displayed order.

Store the approved order snapshot

Keep the exact approved fields in server-side application state outside the model. Record the user, approval time, and the full approved order. If your application creates an internal approval ID, make clear that it is local to your application; Quote.Trade’s preview does not return one.

Expected result

The approved order can be compared with the live request without relying on chat history.

Compare every live-order field

Immediately before submission, compare the live request with the approved account, symbol, side, type, price, quantity, payment currency, and leverage setting. If any material field changed, stop, create a new preview, and ask for approval again.

Expected result

Only the exact order the user saw can proceed to the live tool.

Send the MCP friction fields

Use tools/list as the current schema. When the live tool requires the following values, send them exactly as specified. They satisfy the MCP friction check only; your application’s approval workflow remains the actual authorization.

json
{
  "humanApproved": true,
  "approvalText": "APPROVE QUOTE.TRADE LIVE ORDER"
}
Expected result

The request passes the phrase-and-flag check while still depending on your separate human-approval control and Quote.Trade’s server-side limits.

Submit once and confirm the result

Generate the timestamp at submission, call quote_trade_place_order once, and confirm the result from the order response, account, position, and private events. After a timeout or 5xx, check the current state before sending anything again.

Expected result

The approved order is either confirmed by Quote.Trade or held as unresolved until its actual state is known.

Troubleshooting

Common problems and fixes

The preview has no request hash

That is expected. Store the exact approved order in your own server-side application state and compare its fields with the live request.

The phrase is present but no human approved the order

Reject the request. The phrase and humanApproved flag are friction only and do not authenticate a human approver.

An order field changed after approval

Stop. Create a new preview and obtain a new approval for the changed order.

The live call returned a timeout or 5xx

Do not blindly resubmit. Check the current order, account, position, and private-event state first.

Frequently asked questions

Answers before you continue

Does quote_trade_order_preview return an approval hash?

No. The live preview does not return a request or approval hash.

Does the approval phrase prove that a human approved?

No. The phrase and boolean are an added friction check. Actual human approval must be enforced by the calling application.

Where should the real approval be enforced?

In the authenticated client or server-side application that displays the order, records the user’s action, and compares the approved fields with the live request.

Primary sources

Ready to review the live schema?

Open the Quote.Trade agent guide

Open the agent guide