Skip to main content
Glama

Cancel an open order

cancel_open_order
DestructiveIdempotent

Cancel one resting order on an exchange. Use to withdraw an unfilled limit order or a take-profit. A held position's stop-loss cannot be cancelled (move it with a new stop or close the position): this keeps every position protected. Not for closing positions (use close_perp_position_reduce_only). Inputs: order_id (from get_my_open_orders), symbol, venue. Works while trading is halted. Next: get_my_open_orders.

Input Schema

NameRequiredDescriptionDefault
venueNoVenue: sandbox, hyperliquid, okx, bybit or binance. Omitted: the agent's only venue, else hyperliquid, else your only connected venue, else sandboxhyperliquid
symbolYesBase coin, e.g. BTC
order_idYesFrom get_my_open_orders

Output Schema

NameRequiredDescriptionDefault
okYesFalse when rejected or failed
feeNoOnce executed: the trading fee, estimated at once and replaced by the amount the exchange charged once its fill records show it
legsNoA ladder entry: per leg {price, size_base, order_id, sl_oid, status}; status resting, or after a refused leg withdrawn, filled or partly_filled
errorNoWhy it was rejected or failed
venueNoVenue name
checksNoChecks run at execution
sl_oidNoVenue order id of the protective stop
statusYespending_approval, armed (a trigger entry waiting for its price), executed, rejected, failed, expired, declined, cancelled, or executing (TradeHub has not confirmed the outcome yet: check get_order_request_status)
receiptNoSigned receipt (compact JWS, EdDSA) once executed: request, checks, preview price, fill, slippage, order ids, delegation. Verify with /.well-known/tradehub-receipts.jwks
order_idNoVenue order id of the fill
fill_priceNoAverage fill, USD per coin
request_idYesOrder request id; get_order_request_status(request_id) follows it
deprecationNoPresent only while this tool is deprecated: replacement, removal_date, changelog
filled_sizeNoFilled size, in the base coin (e.g. BTC), not USD
take_profitsNoset_take_profit_levels: the take-profits now on the exchange
trigger_priceNostatus armed: opens at market when the mark reaches this, USD per coin
trigger_expires_atNostatus armed: when it lapses unless reached, ISO 8601 UTC
approval_expires_atNoWhile pending: when the approval request lapses, ISO 8601 UTC

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / legs
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "A ladder entry: per leg {price, size_base, order_id, sl_oid, status}; status resting, or after a refused leg withdrawn, filled or partly_filled",
      +  "title": "Legs"
      +}
  2. Changed2 schema fields changed
    • addedOutput schema / $defs / FeeOut
      Added value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "actual": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "The charged amount in asset; negative = a rebate",
      +      "title": "Actual"
      +    },
      +    "actual_usd": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "What the exchange charged, USD; null until its fill records show it (or when charged in another asset, see actual and asset)",
      +      "title": "Actual Usd"
      +    },
      +    "asset": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "The asset it was charged in (USDT, USDC, BNB …)",
      +      "title": "Asset"
      +    },
      +    "deprecation": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": true,
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Present only while this tool is deprecated: replacement, removal_date, changelog",
      +      "title": "Deprecation"
      +    },
      +    "estimated_usd": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "The account's rate x the filled notional, USD",
      +      "title": "Estimated Usd"
      +    },
      +    "kind": {
      +      "description": "open or close",
      +      "title": "Kind",
      +      "type": "string"
      +    },
      +    "status": {
      +      "description": "pending (not read yet), done, or unknown (the exchange never showed it)",
      +      "title": "Status",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "kind",
      +    "estimated_usd",
      +    "actual_usd",
      +    "actual",
      +    "asset",
      +    "status"
      +  ],
      +  "title": "FeeOut",
      +  "type": "object"
      +}
    • addedOutput schema / properties / fee
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/FeeOut"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Once executed: the trading fee, estimated at once and replaced by the amount the exchange charged once its fill records show it"
      +}
  3. First observed

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive, idempotent, openWorld, and non-read-only, so the safety profile is covered; the description adds genuinely new traits: the stop-loss protection invariant that blocks cancellation and the fact that it works while trading is halted. It stops short of describing failure modes (e.g., what happens if the order has already filled), which is the only remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then constraints, then alternatives and next step — a sound structure with no filler prose. The 'Inputs: order_id..., symbol, venue' sentence is the one piece that duplicates structured data and could be dropped.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and annotations carry the safety profile. With purpose, exclusions, the stop-loss invariant, halt behavior, and a next-step pointer all present, an agent has everything needed to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are already documented, including the venue fallback chain and order_id provenance. The description's 'Inputs:' line merely restates the schema ('order_id (from get_my_open_orders)') without adding format, ordering, or constraint detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with explicit scope: 'Cancel one resting order on an exchange.' The scope word 'one' and 'resting' separate it from bulk or position-level actions, and the sibling set (amend_open_entry_order, close_perp_position_reduce_only) is implicitly excluded by the stated boundaries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use cases ('withdraw an unfilled limit order or a take-profit'), an explicit when-not ('a held position's stop-loss cannot be cancelled'), and names the correct alternative for the excluded case ('use close_perp_position_reduce_only'). No routing decision is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources