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
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.
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.
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.
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.
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.
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.
{
"humanApproved": true,
"approvalText": "APPROVE QUOTE.TRADE LIVE ORDER"
}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.
The approved order is either confirmed by Quote.Trade or held as unresolved until its actual state is known.
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.
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.