Bybit exchange CLI tools exposed as MCP server. Trade, query, and manage your Bybit account from the terminal via Model Context Protocol.
20 tools with consistent naming (verb_noun pattern: market.*, trade.*, position.*, account.*, earn.*) and descriptions present. However, critical gaps undermine quality: (1) Parameter descriptions are minimal (1-2 sentences, often just restating the name); (2) No output schemas documented anywhere, LLMs cannot plan downstream calls or extract structured data; (3) Dangerous operations (trade.buy, trade.sell, trade.cancel-all, earn.stake, earn.redeem) lack confirmation/dry-run patterns despite high risk; (4) Enum constraints missing for category/orderType/timeInForce parameters, LLMs will hallucinate invalid values; (5) No pagination guidance for list tools (trade.open-orders, earn.history, earn.yield); (6) Error handling not visible in tool definitions, no recovery guidance. Tool descriptions average ~60 chars (below 194-char baseline), leaving LLMs uncertain when to select each tool. Naming is strong (verb_noun, clear distinctions), but parameter and output documentation is severely underdeveloped.
Fetch account balance and wallet information
Fetch Earn order history
Fetch hourly yield data for an Earn product
Fetch current Earn positions
Fetch available Earn products
Redeem coins from an Earn product
Stake coins in an Earn product
Fetch Earn yield history
No output schemas documented. LLMs cannot infer what fields each tool returns, blocking downstream tool chaining and data extraction. E.g., does market.tickers return price, volume, timestamp? Does trade.buy return order_id for use in trade.cancel-all?
Dangerous operations (trade.buy, trade.sell, trade.cancel-all, earn.stake, earn.redeem) lack dry-run or explicit confirmation patterns. Code shows inject_dangerous_confirmation() adds an 'acknowledged' field, but this is not documented in tool descriptions. LLMs may not understand the confirmation requirement.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
Fetch funding rate history for a symbol
Fetch kline (candlestick) data for a symbol
Fetch order book data for a symbol
Fetch ticker information for a symbol
Fetch open positions
Place multiple orders in a single batch request
Place a market or limit buy order
Set or clear the cancel-after timer for dead man's switch functionality
Cancel all open orders in a category
Fetch recent trade fills
Fetch open orders for a symbol or category
Place a market or limit sell order
Enum constraints missing for category, orderType, timeInForce, and account-type parameters. Descriptions say 'Product category (linear, inverse, spot, option)' but do not declare these as enums in the schema. LLMs will hallucinate invalid values like 'perpetual' or 'spot-margin'.
Parameter descriptions are minimal (1-2 sentences, often just restating the name). E.g., 'symbol': 'Trading symbol' provides no guidance on format (BTCUSDT? BTC-USD?). Descriptions average ~60 chars vs. 72-char baseline. LLMs cannot disambiguate similar parameters or understand constraints.
No pagination guidance for list tools (trade.open-orders, trade.fills, earn.history, earn.yield). No mention of limit defaults, max values, or cursor/offset behavior. Large result sets will blow context windows without documented pagination.