place_order
Execute buy or sell orders for perpetual contracts on Hyperliquid. Place market orders for immediate execution or limit orders at specified prices to trade assets like BTC and ETH.
Instructions
Place a limit or market order on Hyperliquid perps
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Market symbol (e.g. BTC, ETH) | |
| side | Yes | Order side | |
| size | Yes | Order size in base asset units | |
| price | No | Limit price (required for limit orders) | |
| order_type | No | Order type (default: limit) | limit |
| reduce_only | No | Reduce-only order (default: false) |
Implementation Reference
- src/hyperliquid_mcp/client.py:134-158 (handler)Main handler function that executes place_order logic. Handles both market and limit orders, validates inputs, and interacts with the Hyperliquid exchange API.
def place_order( self, symbol: str, side: str, size: float, price: Optional[float] = None, order_type: str = "limit", reduce_only: bool = False, ) -> dict[str, Any]: """Place a limit or market order.""" exchange = self._require_exchange() is_buy = side.lower() == "buy" if order_type.lower() == "market": # For market orders, use a very aggressive price info = self.get_market_info(symbol) mid = float(info["mid_price"]) price = round(mid * (1.01 if is_buy else 0.99), 6) order_result = exchange.market_open(symbol.upper(), is_buy, size, price, slippage=0.01) else: if price is None: raise ValueError("Price is required for limit orders.") order_result = exchange.order(symbol.upper(), is_buy, size, price, {"limit": {"tif": "Gtc"}}, reduce_only=reduce_only) return {"status": "submitted", "result": order_result} - src/hyperliquid_mcp/server.py:65-80 (registration)Tool registration with name, description, and inputSchema for place_order. Defines the JSON schema for input validation including symbol, side, size, price, order_type, and reduce_only parameters.
Tool( name="place_order", description="Place a limit or market order on Hyperliquid perps", inputSchema={ "type": "object", "properties": { "symbol": {"type": "string", "description": "Market symbol (e.g. BTC, ETH)"}, "side": {"type": "string", "enum": ["buy", "sell"], "description": "Order side"}, "size": {"type": "number", "description": "Order size in base asset units"}, "price": {"type": "number", "description": "Limit price (required for limit orders)"}, "order_type": {"type": "string", "enum": ["limit", "market"], "description": "Order type (default: limit)", "default": "limit"}, "reduce_only": {"type": "boolean", "description": "Reduce-only order (default: false)", "default": False}, }, "required": ["symbol", "side", "size"], }, ), - src/hyperliquid_mcp/server.py:145-153 (handler)Handler dispatcher that routes the place_order tool call to the client implementation. Extracts arguments from the tool call and passes them to client.place_order().
case "place_order": return client.place_order( symbol=args["symbol"], side=args["side"], size=args["size"], price=args.get("price"), order_type=args.get("order_type", "limit"), reduce_only=args.get("reduce_only", False), )