Bybit Server
This server provides a comprehensive Model Context Protocol (MCP) interface for programmatic trading and interaction with the Bybit cryptocurrency exchange API.
Market Data Retrieval: Fetch real-time order book data, K-line/candlestick charts with various time intervals (1m to monthly), current ticker prices (including volume and metrics), and detailed instrument information for trading pairs.
Trading Operations: Execute market or limit orders for spot and futures trading with support for buy/sell orders, take profit/stop loss settings, leverage configuration, and position indexing for long/short positions. Cancel existing orders by order ID or link ID.
Account Management: Check wallet balances across different account types (UNIFIED, CONTRACT, SPOT), view current open positions for spot and futures trading, and retrieve API key permissions and details.
Order Management: Monitor open orders, access historical order execution records with filtering options, and view comprehensive order details.
Risk Management: Set take profit, stop loss, and trailing stop levels for positions. Configure margin modes (isolated/cross) with custom leverage settings for futures trading.
Supported Trading Categories: Spot trading, linear futures (USDT-margined perpetual contracts), and inverse futures (coin-margined contracts).
Security: Securely access API credentials through environment variables with proper authentication.
Provides a donation option to support the developer of the MCP server through the Buy Me A Coffee platform.
Offers deployment through Docker containers, allowing users to run the Bybit API interface in an isolated environment with proper environment variable configuration.
Provides specific installation and configuration instructions for Linux environments, ensuring the Bybit API interface can run on Linux operating systems.
Includes specific setup instructions for macOS, enabling users to run the Bybit API interface on Apple's operating system.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Bybit Servershow me the current BTC/USDT order book"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Bybit API Interface
Bybit MCP (Model Context Protocol) Server. Provides a convenient interface to interact with the Bybit V5 API using MCP tools. Allows fetching market data, managing account information, and placing/canceling orders via API calls wrapped as tools.
⚠️ Security & Safety
This server can place real trades with real money. Read this before configuring it:
Trading is disabled by default. Mutating tools (
place_order,cancel_order,amend_order,cancel_all_orders,set_trading_stop,set_margin_mode,set_leverage) return an error unless you explicitly setTRADING_ENABLED=true.Use the testnet first. Set
TESTNET=truewhile you experiment. Combine withTRADING_ENABLED=falsefor a fully read-only setup, or setREADONLY_MODE=trueto hard-block every mutating tool regardless of other settings.Order size is capped.
MAX_ORDER_SIZE_USDT(default100) limits the estimated notional value of an order to guard against accidental large trades.API keys are never logged or exposed. No tool returns your keys; logs only report whether a key is present.
Never commit your API keys. Provide them through environment variables only.
Related MCP server: Bybit MCP Server
Installation
Requires Python 3.12+. This project uses uv.
git clone https://github.com/dlwjdtn535/mcp-bybit-server.git
cd mcp-bybit-server
uv sync
uv run mcp-bybit-server # runs the MCP server over stdioAfter install, the mcp-bybit-server command is the entry point used by the MCP client configs below.
Installing via Smithery
To install this Bybit API Interface server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @dlwjdtn535/mcp-bybit-server --client claudeConfiguration (Claude Desktop, Cline, Roo Code, etc.)
Add one of the following to your MCP settings file (e.g. claude_desktop_config.json / mcp_settings.json).
Using uv (run from a cloned repo):
{
"mcpServers": {
"bybit": {
"command": "uv",
"args": [
"run",
"--directory",
"/absolute/path/to/mcp-bybit-server",
"mcp-bybit-server"
],
"env": {
"ACCESS_KEY": "YOUR_BYBIT_API_KEY",
"SECRET_KEY": "YOUR_BYBIT_SECRET_KEY",
"TESTNET": "true",
"TRADING_ENABLED": "false"
}
}
}
}On Windows, use an absolute path with double backslashes (e.g. C:\\Users\\YOUR_USERNAME\\mcp-bybit-server).
Using Docker:
First pull the image: docker pull dlwjdtn535/mcp-bybit-server:latest
{
"mcpServers": {
"bybit-server-docker": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--init",
"-e", "ACCESS_KEY=YOUR_BYBIT_API_KEY",
"-e", "SECRET_KEY=YOUR_BYBIT_SECRET_KEY",
"-e", "TESTNET=true",
"-e", "TRADING_ENABLED=false",
"-e", "MAX_ORDER_SIZE_USDT=100",
"dlwjdtn535/mcp-bybit-server:latest"
]
}
}
}Note: Always use
@latestor a specific version tag for both NPX and Docker to ensure you are using the intended version.
Environment Variables
Variable | Required | Default | Description |
| Yes | – | Bybit API key. |
| Yes | – | Bybit API secret. |
| No | – | Bybit member ID (optional). |
| No |
| Use the Bybit testnet when |
| No |
| Must be |
| No |
| When |
| No |
| Caps the estimated notional value (USDT) of a single order. |
| No |
|
|
Tools 🛠️
Market data
get_orderbook— order book (category,symbol,limit?).get_kline— candlesticks (category,symbol,interval,start?,end?,limit?).get_tickers— ticker info (category,symbol).get_public_trade_history— recent public trades (category,symbol,limit?).get_instruments_info— instrument metadata / limits (category,symbol,status?,baseCoin?).get_funding_rate_history— funding rate history for perps (category,symbol,startTime?,endTime?,limit?).get_open_interest— open interest over time (category,symbol,intervalTime?, ...).get_fee_rate— maker/taker fee rates (category,symbol?,baseCoin?).get_server_time— Bybit server time.market_snapshot— composite market view (orderbook + ticker + kline + instrument + recent trades, plus funding rate & open interest for futures) in a single call.
Account
get_wallet_balance— balances (accountType,coin?).get_positions— open positions (category,symbol?).get_order_history— historical orders.get_open_orders— current open orders.get_api_key_information— API key details.
Trading (mutating — requires TRADING_ENABLED=true)
validate_order— pre-flight validation; never places an order. Not blocked by trading flags.place_order— place an order; supportsdry_run=trueto validate without placing.amend_order— modify an existing order in place.cancel_order— cancel a single order.cancel_all_orders— cancel all open orders (optionally scoped).set_trading_stop— set take profit / stop loss / trailing stop.set_margin_mode— set isolated/cross margin.set_leverage— set leverage for a futures symbol.
(Refer to the function docstrings in the code for detailed parameter descriptions and examples.)
API Key Setup
To use this Bybit API interface, create an API key from Bybit:
Log into your Bybit account.
Navigate to API Management.
Create a new API key.
Important security settings:
Enable IP restriction if possible, and add ONLY the IP address(es) the server runs from.
Never share your API keys or expose them in public repositories.
Recommended permissions:
Read (required)
Trade (required only if you enable order execution)
Wallet (required for balance checking)
Development
uv sync --group dev # install dev dependencies (pytest, ruff)
uv run ruff check . # lint
uv run pytest -q # run the unit test suite (no live API calls)CI (GitHub Actions) runs lint + tests on every push/PR; Docker images are built and published automatically on pushes to main.
Sponsorship & Donations
If you find this project helpful and would like to support its development:
Buy Me a Coffee

Referral Program
You can also support this project by signing up for Bybit using our referral link:
Referral Code: J1O4JK
Your support helps maintain and improve this project. Thank you! 🙏
Contact & Support
For additional inquiries or support, please contact:
Email: dlwjdtn5624@naver.com
We welcome your questions and feedback!
License
Available Tools
15 toolscancel_orderC
Cancel order
Args:
category (str): Category (spot, linear, inverse, etc.)
symbol (str): Symbol (e.g., BTCUSDT)
orderId (Optional[str]): Order ID
orderLinkId (Optional[str]): Order link ID
orderFilter (Optional[str]): Order filter
Returns:
Dict: Cancel result
Example:
cancel_order("spot", "BTCUSDT", "123456789")
Reference:
https://bybit-exchange.github.io/docs/v5/order/cancel-order
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Category (spot, linear, inverse, etc.) | |
| orderFilter | No | Order filter | |
| orderId | No | Order ID | |
| orderLinkId | No | Order link ID | |
| symbol | Yes | Symbol (e.g., BTCUSDT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Cancel order' implies a destructive write operation, the description doesn't mention authentication requirements, rate limits, side effects, error conditions, or what 'Cancel result' contains. The example shows basic usage but doesn't explain behavioral implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably structured with sections for Args, Returns, Example, and Reference. However, the core description 'Cancel order' is overly terse and could benefit from more context. The example and reference sections add value but the main description feels underdeveloped.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive financial operation with 5 parameters and no annotations or output schema, the description is inadequate. It doesn't explain what cancellation means in this trading context, what happens to partially filled orders, authentication requirements, error conditions, or what the return value contains. The reference link helps but doesn't compensate for missing behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description repeats parameter information in the Args section but adds minimal value beyond what's in the schema. The example shows usage but doesn't explain parameter interactions or which identifiers (orderId vs orderLinkId) should be used when.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool's purpose as 'Cancel order', which is a clear verb+resource combination. However, it doesn't differentiate from potential alternatives or provide any context about what types of orders can be canceled or what cancellation entails. It's a basic statement of function without elaboration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. While sibling tools include 'place_order' and 'get_open_orders', the description doesn't mention relationships between these tools or prerequisites for cancellation. There's no mention of when cancellation is possible or what happens to partially filled orders.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_access_keyB
Get access key from environment variables
:return: Access key
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves an access key but doesn't describe how it behaves: e.g., what happens if the key is missing (error handling), whether it's cached or fetched live, or if it requires specific permissions. This leaves significant gaps for a tool that handles sensitive credentials.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise—two short sentences with no wasted words. It's front-loaded with the core purpose. However, the ':return:' annotation is slightly informal and could be integrated more smoothly, preventing a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of handling access keys (sensitive data) and the lack of annotations and output schema, the description is incomplete. It doesn't explain the return value format (e.g., string type, encoding), error scenarios, or security implications. This is inadequate for a credential-fetching tool in a trading context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema description coverage is 100% (since there are no parameters to document). The description doesn't need to add parameter details beyond what the schema provides. A baseline of 4 is appropriate as the description accurately reflects the lack of inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get access key from environment variables.' It specifies the verb ('Get') and resource ('access key'), and indicates the source ('environment variables'). However, it doesn't explicitly differentiate from sibling tools like 'get_secret_key' or 'get_api_key_information,' which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., environment variables must be set), exclusions, or comparisons to siblings like 'get_secret_key' or 'get_api_key_information.' The agent must infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_api_key_informationC
Get API key information
Returns:
Dict: API key information
Example:
get_api_key_information()
Reference:
https://bybit-exchange.github.io/docs/v5/user/apikey-info
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states it returns API key information without disclosing behavioral traits such as authentication requirements, rate limits, or what specific data is included. It lacks details on permissions, response format, or any constraints, making it insufficient for a tool that likely involves sensitive data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with sections (Returns, Example, Reference) but includes redundant elements like 'Returns: Dict: API key information' which adds little value. It's somewhat front-loaded but could be more efficient by eliminating tautological statements and focusing on unique aspects.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is incomplete for a tool handling API key information. It fails to explain what the returned dict contains, authentication needs, or how it differs from siblings. For a potentially sensitive operation, more context on behavior and output is necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema description coverage is 100%, so no parameter information is needed. The description correctly indicates no parameters with the example 'get_api_key_information()', aligning with the schema. A baseline of 4 is appropriate as it doesn't need to compensate for any parameter gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description restates the tool name ('Get API key information') without adding specificity about what information is retrieved or distinguishing it from sibling tools like 'get_access_key' or 'get_secret_key'. It's a tautology that doesn't clarify the scope or content of the returned information beyond the obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'get_access_key' or 'get_secret_key'. The example shows usage but doesn't explain context, prerequisites, or differentiation from sibling tools, leaving the agent without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_instruments_infoC
Get exchange information
Args:
category (str): Category (spot, linear, inverse, etc.)
symbol (str): Symbol (e.g., BTCUSDT)
status (Optional[str]): Status
baseCoin (Optional[str]): Base coin
Returns:
Dict: Exchange information
Example:
get_instruments_info("spot", "BTCUSDT", "Trading", "BTC")
Reference:
https://bybit-exchange.github.io/docs/v5/market/instrument
| Name | Required | Description | Default |
|---|---|---|---|
| baseCoin | No | Base coin | |
| category | Yes | Category (spot, linear, inverse, etc.) | |
| status | No | Status | |
| symbol | Yes | Symbol (e.g., BTCUSDT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a 'Get' operation (implying read-only) but doesn't mention rate limits, authentication requirements, response format details, or whether this is a real-time or cached data source. The example helps but doesn't fully compensate for missing behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Example, Reference) and efficiently conveys necessary information. However, the 'Args' section repeats schema descriptions without adding value, and the purpose statement could be more specific about what 'exchange information' means.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter read operation with no output schema, the description is adequate but has gaps. It provides parameters and an example but doesn't explain what 'exchange information' actually returns (beyond 'Dict'), doesn't mention error conditions, and doesn't differentiate from sibling tools. The external reference helps but assumes the agent can access it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds minimal value beyond what's in the schema - it repeats parameter descriptions verbatim and provides an example showing usage. This meets the baseline for high schema coverage but doesn't add meaningful semantic context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with 'Get exchange information' which is a specific verb+resource combination. However, it doesn't differentiate from sibling tools like get_tickers or get_orderbook, which also retrieve market data but for different types of information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like get_tickers or get_orderbook. There's no mention of what specific 'exchange information' this provides compared to other market data tools, leaving the agent to guess based on parameter names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_klineB
Get K-line (candlestick) data
Args:
category (str): Category (spot, linear, inverse, etc.)
symbol (str): Symbol (e.g., BTCUSDT)
interval (str): Time interval (1, 3, 5, 15, 30, 60, 120, 240, 360, 720, D, W, M)
start (Optional[int]): Start time in milliseconds
end (Optional[int]): End time in milliseconds
limit (int): Number of records to retrieve
Returns:
Dict: K-line data
Example:
get_kline("spot", "BTCUSDT", "1h", 1625097600000, 1625184000000, 100)
Reference:
https://bybit-exchange.github.io/docs/v5/market/kline
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Category (spot, linear, inverse, etc.) | |
| end | No | End time in milliseconds | |
| interval | Yes | Time interval (1, 3, 5, 15, 30, 60, 120, 240, 360, 720, D, W, M) | |
| limit | No | Number of records to retrieve | |
| start | No | Start time in milliseconds | |
| symbol | Yes | Symbol (e.g., BTCUSDT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It implies this is a read-only operation ('Get'), but doesn't explicitly state whether it requires authentication, has rate limits, or what happens with invalid inputs. The example and reference link add some context, but key behavioral traits like error handling or performance characteristics are missing, making this adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Example, Reference) and front-loads the core purpose. However, the parameter descriptions are redundant with the schema, and the example could be more concise. Overall, it's efficient but has minor verbosity in repeating schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (6 parameters, no output schema, no annotations), the description is partially complete. It covers the basic purpose and parameters but lacks details on return format (beyond 'Dict'), error conditions, authentication needs, and differentiation from siblings. The reference link helps, but the description alone doesn't provide full context for reliable agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, meaning all parameters are documented in the input schema. The description repeats parameter information verbatim from the schema without adding meaningful context like valid symbol formats, interval interpretations (e.g., 'D' for day), or how start/end times interact with the limit. This meets the baseline for high schema coverage but doesn't enhance understanding beyond what's already structured.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Get K-line (candlestick) data' with a specific verb ('Get') and resource ('K-line data'), making the function immediately understandable. However, it doesn't explicitly differentiate this tool from potential sibling tools that might also retrieve market data, such as 'get_tickers' or 'get_orderbook', which could provide overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_tickers' or 'get_orderbook', nor does it mention prerequisites or context for usage. The example and reference link are helpful but don't constitute explicit usage guidelines, leaving the agent to infer when this specific data retrieval method is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_open_ordersC
Get open orders
Args:
category (str): Category (spot, linear, inverse, etc.)
symbol (Optional[str]): Symbol (e.g., BTCUSDT)
orderId (Optional[str]): Order ID
orderLinkId (Optional[str]): Order link ID
orderFilter (Optional[str]): Order filter
limit (int): Number of orders to retrieve
Returns:
Dict: Open orders
Example:
get_open_orders("spot", "BTCUSDT", "123456789", "link123", "Order", 10)
Reference:
https://bybit-exchange.github.io/docs/v5/order/open-order
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Category (spot, linear, inverse, etc.) | |
| limit | No | Number of orders to retrieve | |
| orderFilter | No | Order filter | |
| orderId | No | Order ID | |
| orderLinkId | No | Order link ID | |
| symbol | No | Symbol (e.g., BTCUSDT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure but provides minimal information. It states what the tool does but doesn't describe authentication requirements, rate limits, error conditions, pagination behavior (despite having a limit parameter), or what happens when multiple filtering parameters are combined. For a financial API tool with 6 parameters, this is inadequate behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably structured with sections for Args, Returns, Example, and Reference, but includes redundant information. The 'Args' section duplicates schema descriptions without adding value, and the example shows all parameters including optional ones without explaining their optional nature. The structure is clear but not optimally efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a financial API tool with 6 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain the return format beyond 'Dict: Open orders', doesn't describe error handling, authentication requirements, or rate limiting. The reference link is helpful but doesn't compensate for missing behavioral context that should be in the description itself.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an 'Args' section that lists all parameters, but the schema already has 100% description coverage with identical parameter descriptions. The description adds no additional semantic context beyond what's in the schema - no examples of valid category values, explanation of how orderFilter works, or guidance on parameter combinations. With complete schema coverage, the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with 'Get open orders' - a specific verb+resource combination. It distinguishes itself from siblings like 'get_order_history' by focusing specifically on open/active orders rather than historical ones. However, it doesn't explicitly contrast with other order-related tools beyond the name difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites, when this tool is appropriate versus 'get_order_history' or 'cancel_order', or any context about what constitutes an 'open order' in this system. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_orderbookC
Get orderbook data
:parameter
symbol: Symbol (e.g., BTCUSDT)
limit: Number of orderbook entries to retrieve
category: Category (spot, linear, inverse, etc.)
Args:
category: Category (spot, linear, inverse, etc.)
symbol (str): Symbol (e.g., BTCUSDT)
limit (int): Number of orderbook entries to retrieve
Returns:
Dict: Orderbook data
Example:
get_orderbook("spot", "BTCUSDT", 10)
Reference:
https://bybit-exchange.github.io/docs/v5/market/orderbook
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Category (spot, linear, inverse, etc.) | |
| limit | No | Number of orderbook entries to retrieve | |
| symbol | Yes | Symbol (e.g., BTCUSDT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'Get orderbook data' and includes an example and reference link, but lacks details on behavioral traits such as rate limits, authentication needs, error handling, or whether it's a real-time or cached snapshot. The example and reference add some context but don't fully disclose operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is poorly structured with redundant sections (':parameter' and 'Args:' list the same info), an example, and a reference link. It's not front-loaded effectively, and sentences like 'Get orderbook data' are too brief, while repetition wastes space. It could be streamlined to improve clarity and efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is incomplete for a tool with 3 parameters. It lacks details on return values (beyond 'Dict: Orderbook data'), error cases, or behavioral context like pagination or data freshness. The example and reference help but don't compensate for missing operational guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters (category, symbol, limit) with descriptions. The description repeats parameter info in the ':parameter' section and 'Args:', adding no new meaning beyond the schema. Baseline is 3 since the schema does the heavy lifting, but no extra value is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get orderbook data' which clearly indicates a retrieval operation, but it's vague about what specific data is returned (e.g., bids/asks, depth levels). It distinguishes from siblings like 'get_tickers' or 'get_kline' by focusing on orderbook data, but lacks specificity about the verb+resource combination beyond the basic action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like 'get_tickers' for price data or 'get_instruments_info' for instrument details. The description implies usage for orderbook retrieval but doesn't specify contexts, prerequisites, or exclusions, leaving the agent to infer based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_historyC
Get order history
Args:
category (str): Category (spot, linear, inverse, etc.)
symbol (Optional[str]): Symbol (e.g., BTCUSDT)
orderId (Optional[str]): Order ID
orderLinkId (Optional[str]): Order link ID
orderFilter (Optional[str]): Order filter
orderStatus (Optional[str]): Order status
startTime (Optional[int]): Start time in milliseconds
endTime (Optional[int]): End time in milliseconds
limit (int): Number of orders to retrieve
Returns:
Dict: Order history
Example:
get_order_history("spot", "BTCUSDT", "123456789", "link123", "Order", "Created", 1625097600000, 1625184000000, 10)
Reference:
https://bybit-exchange.github.io/docs/v5/order/order-list
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Category (spot, linear, inverse, etc.) | |
| endTime | No | End time in milliseconds | |
| limit | No | Number of orders to retrieve | |
| orderFilter | No | Order filter | |
| orderId | No | Order ID | |
| orderLinkId | No | Order link ID | |
| orderStatus | No | Order status | |
| startTime | No | Start time in milliseconds | |
| symbol | No | Symbol (e.g., BTCUSDT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions what parameters are available but doesn't describe important behaviors: whether this is a read-only operation, if it requires authentication, how results are paginated (beyond the limit parameter), or what happens when multiple filters are combined. The example shows a call but doesn't explain the return format beyond 'Dict: Order history'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (Args, Returns, Example, Reference). The description is appropriately sized for a tool with 9 parameters. The 'Get order history' statement is front-loaded, though it could be more informative. The example is helpful but could be better integrated with the parameter explanations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain the return format beyond 'Dict: Order history', doesn't mention authentication requirements, doesn't describe error conditions, and doesn't provide guidance on parameter combinations. The reference link helps but doesn't compensate for missing contextual information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description repeats parameter information in the Args section but doesn't add meaningful context beyond what's in the schema - no explanation of how parameters interact, what 'orderFilter' values are valid, or what 'orderStatus' options exist. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get order history' which is a clear verb+resource combination, but it's quite basic and doesn't differentiate from sibling tools like 'get_open_orders' or 'get_positions'. It doesn't specify what kind of history (all orders vs filtered) or scope beyond the parameters listed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'get_open_orders' or 'get_positions'. The description provides parameter information but doesn't explain the tool's role in the broader API context or when it's the appropriate choice for different querying needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_positionsC
Get position information
Args:
category (str): Category (spot, linear, inverse, etc.)
symbol (Optional[str]): Symbol (e.g., BTCUSDT)
Returns:
Dict: Position information
Example:
get_positions("spot", "BTCUSDT")
Reference:
https://bybit-exchange.github.io/docs/v5/position
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Category (spot, linear, inverse, etc.) | |
| symbol | No | Symbol (e.g., BTCUSDT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While it mentions what the tool does (get position information) and provides an example, it doesn't disclose important behavioral traits like whether this requires authentication, rate limits, what happens with invalid parameters, or the structure of the returned position information beyond 'Dict'. The reference link is helpful but external.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Example, Reference) and appropriately sized. The information is front-loaded with the core purpose first. The example is helpful and the reference provides additional context without cluttering the main description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with 100% schema coverage but no output schema and no annotations, the description is adequate but has gaps. It explains what the tool does and provides an example, but doesn't describe the return value structure (beyond 'Dict') or important behavioral considerations. The reference link partially compensates but requires external access.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters completely. The description adds minimal value beyond what's in the schema - it repeats the same parameter descriptions verbatim and provides an example showing usage. This meets the baseline expectation when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get position information' which is a clear verb+resource combination, but it's quite generic. It doesn't specifically differentiate from sibling tools like 'get_wallet_balance' or 'get_open_orders' which also retrieve trading-related information. The purpose is understandable but lacks specificity about what makes this tool unique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. The description doesn't mention when this tool is appropriate versus other sibling tools like 'get_wallet_balance' or 'get_open_orders'. There's no context about prerequisites, limitations, or typical use cases for position information retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_secret_keyB
Get secret key from environment variables
:return: Secret key
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Get') but doesn't clarify if this is a read-only operation, whether it requires specific permissions, or what happens on failure (e.g., missing key). The return value is mentioned but without details on format or errors. For a tool accessing sensitive data with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two short sentences that directly state the action and return value, with zero wasted words. It's front-loaded, immediately conveying the purpose. Every sentence earns its place by providing essential information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of accessing sensitive environment variables, no annotations, and no output schema, the description is incomplete. It doesn't explain the return format (e.g., string type), error handling, or security implications. For a tool that retrieves secret keys, more context is needed to ensure safe and correct usage by an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and the schema description coverage is 100%, so no parameter documentation is needed. The description doesn't add param info beyond the schema, but that's appropriate here. Baseline for 0 params is 4, as the description focuses on the tool's purpose rather than compensating for missing param details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('secret key from environment variables'), making the purpose immediately understandable. It distinguishes itself from siblings like 'get_access_key' and 'get_api_key_information' by specifying 'secret key' and 'environment variables', though it doesn't explicitly contrast with them. The description avoids tautology by not just restating the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as 'get_access_key' or 'get_api_key_information', which are related sibling tools. It lacks context about prerequisites (e.g., environment setup) or exclusions, leaving the agent to infer usage based on the tool name alone. No explicit when/when-not statements are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tickersC
Get ticker information
Args:
category (str): Category (spot, linear, inverse, etc.)
symbol (str): Symbol (e.g., BTCUSDT)
Returns:
Dict: Ticker information
Example:
get_tickers("spot", "BTCUSDT")
Reference:
https://bybit-exchange.github.io/docs/v5/market/tickers
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Category (spot, linear, inverse, etc.) | |
| symbol | Yes | Symbol (e.g., BTCUSDT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a 'Get' operation which implies read-only behavior, but provides no information about authentication requirements, rate limits, error conditions, or response format details beyond 'Dict: Ticker information'. This leaves significant gaps for an agent to understand how to properly invoke and interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably structured with sections for Args, Returns, Example, and Reference. However, the core description ('Get ticker information') is overly brief, and the parameter documentation duplicates what's already in the schema rather than adding semantic context. The reference URL is useful but could be integrated more efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is insufficient. While it covers the basic purpose and parameters, it lacks critical information about what 'ticker information' actually contains, authentication requirements, rate limits, error handling, and how this differs from similar market data tools. The absence of output schema means the description should compensate by explaining return values, which it doesn't do adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with both parameters clearly documented in the schema. The description adds minimal value beyond what's already in the schema - it repeats the same parameter descriptions verbatim and provides an example. This meets the baseline expectation when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Get ticker information' which is a specific verb+resource combination. However, it doesn't distinguish this tool from potential siblings like 'get_instruments_info' or 'get_orderbook' that might also provide market data, leaving some ambiguity about its unique scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_instruments_info', 'get_orderbook', and 'get_kline' that also retrieve market data, there's no indication of what makes 'get_tickers' distinct or when it's the appropriate choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wallet_balanceC
Get wallet balance
Args:
accountType (str): Account type (UNIFIED, CONTRACT, SPOT)
coin (Optional[str]): Coin symbol
Returns:
Dict: Wallet balance information
Example:
get_wallet_balance("UNIFIED", "BTC")
Reference:
https://bybit-exchange.github.io/docs/v5/account/wallet-balance
| Name | Required | Description | Default |
|---|---|---|---|
| accountType | Yes | Account type (UNIFIED, CONTRACT, SPOT) | |
| coin | No | Coin symbol |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a read operation ('Get'), but doesn't mention authentication requirements, rate limits, error conditions, or what specific information is returned in the 'Dict'. This leaves significant behavioral gaps for a financial data tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably structured with sections for Args, Returns, Example, and Reference, but includes redundant information (repeating schema details) and could be more front-loaded. The core purpose is clear in the first line, but subsequent sections don't efficiently add value beyond what structured fields could provide.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a financial data tool with no annotations and no output schema, the description is insufficient. It doesn't explain what balance information is returned, how to interpret the results, or address common use cases. The example helps but doesn't compensate for the lack of behavioral and output context needed for proper tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters. The description repeats the parameter information but doesn't add meaningful context beyond what's in the schema, such as explaining the relationship between account types or when coin filtering is useful. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('wallet balance'), making it immediately understandable. However, it doesn't differentiate this tool from potential siblings like 'get_positions' or 'get_order_history' that might also return financial information, preventing a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. While it mentions account types and coin parameters, it doesn't explain when to query balance versus positions, orders, or other financial data from sibling tools, leaving the agent without contextual usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_orderA
Execute order
Args:
category (str): Category
- spot: Spot trading
* Minimum order quantity: 0.000011 BTC (up to 6 decimal places)
* Minimum order amount: 5 USDT
* If buying at market price, qty should be input in USDT units (e.g., "10" = 10 USDT)
* If selling at market price, qty should be input in BTC units (e.g., "0.000100" = 0.0001 BTC)
* If placing a limit order, qty should be input in BTC units
* positionIdx is not used
- linear: Futures trading (USDT margin)
* positionIdx is required (1: Long, 2: Short)
- inverse: Futures trading (coin margin)
* positionIdx is required (1: Long, 2: Short)
symbol (str): Symbol (e.g., BTCUSDT)
side (str): Order direction (Buy, Sell)
orderType (str): Order type (Market, Limit)
qty (str): Order quantity
- Market Buy: qty should be input in USDT units (e.g., "10" = 10 USDT)
- Market Sell: qty should be input in BTC units (e.g., "0.000100" = 0.0001 BTC, up to 6 decimal places)
- Limit: qty should be input in BTC units (e.g., "0.000100" = 0.0001 BTC, up to 6 decimal places)
price (Optional[str]): Order price (for limit orders)
positionIdx (Optional[str]): Position index
- Required for futures (linear/inverse) trading
- "1": Long position
- "2": Short position
- Not used for spot trading
timeInForce (Optional[str]): Order validity period
- GTC: Good Till Cancel (default, for limit orders)
- IOC: Immediate or Cancel (market order)
- FOK: Fill or Kill
- PostOnly: Post Only
orderLinkId (Optional[str]): Order link ID (unique value)
isLeverage (Optional[int]): Use leverage (0: No, 1: Yes)
orderFilter (Optional[str]): Order filter
- Order: Regular order (default)
- tpslOrder: TP/SL order
- StopOrder: Stop order
triggerPrice (Optional[str]): Trigger price
triggerBy (Optional[str]): Trigger basis
orderIv (Optional[str]): Order volatility
takeProfit (Optional[str]): Take profit price
stopLoss (Optional[str]): Stop loss price
tpTriggerBy (Optional[str]): Take profit trigger basis
slTriggerBy (Optional[str]): Stop loss trigger basis
tpLimitPrice (Optional[str]): Take profit limit price
slLimitPrice (Optional[str]): Stop loss limit price
tpOrderType (Optional[str]): Take profit order type (Market, Limit)
slOrderType (Optional[str]): Stop loss order type (Market, Limit)
Returns:
Dict: Order result
Example:
# Spot trading (SPOT account balance required)
place_order("spot", "BTCUSDT", "Buy", "Market", "10") # Buy market price for 10 USDT
place_order("spot", "BTCUSDT", "Sell", "Market", "0.000100") # Sell market price for 0.0001 BTC
place_order("spot", "BTCUSDT", "Buy", "Limit", "0.000100", price="50000") # Buy limit order for 0.0001 BTC
# Spot trading - limit order + TP/SL
place_order("spot", "BTCUSDT", "Buy", "Limit", "0.000100", price="50000",
takeProfit="55000", stopLoss="45000", # TP/SL setting
tpOrderType="Market", slOrderType="Market") # Execute TP/SL as market order
# Futures trading
place_order("linear", "BTCUSDT", "Buy", "Market", "0.001", positionIdx="1") # Buy market price for long position
place_order("linear", "BTCUSDT", "Sell", "Market", "0.001", positionIdx="2") # Sell market price for short position
Notes:
1. Spot trading order quantity restrictions:
- Minimum order quantity: 0.000011 BTC
- Minimum order amount: 5 USDT
- BTC quantity is only allowed up to 6 decimal places (e.g., 0.000100 O, 0.0001234 X)
2. Pay attention to unit when buying/selling at market price:
- Buying: qty should be input in USDT units (e.g., "10" = 10 USDT)
- Selling: qty should be input in BTC units (e.g., "0.000100" = 0.0001 BTC)
3. Futures trading requires positionIdx:
- Long position: positionIdx="1"
- Short position: positionIdx="2"
4. positionIdx is not used for spot trading
Reference:
https://bybit-exchange.github.io/docs/v5/order/create-order
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Category (spot, linear, inverse, etc.) | |
| isLeverage | No | Use leverage (0: No, 1: Yes) | |
| orderFilter | No | Order filter (Order, tpslOrder, StopOrder) | |
| orderIv | No | Order volatility | |
| orderLinkId | No | Order link ID | |
| orderType | Yes | Order type (Market, Limit) | |
| positionIdx | No | Position index (1: Long, 2: Short) | |
| price | No | Order price (for limit orders) | |
| qty | Yes | Order quantity | |
| side | Yes | Order direction (Buy, Sell) | |
| slLimitPrice | No | Stop loss limit price | |
| slOrderType | No | Stop loss order type (Market, Limit) | |
| slTriggerBy | No | Stop loss trigger basis | |
| stopLoss | No | Stop loss price | |
| symbol | Yes | Symbol (e.g., BTCUSDT) | |
| takeProfit | No | Take profit price | |
| timeInForce | No | Time in force (GTC, IOC, FOK, PostOnly) | |
| tpLimitPrice | No | Take profit limit price | |
| tpOrderType | No | Take profit order type (Market, Limit) | |
| tpTriggerBy | No | Take profit trigger basis | |
| triggerBy | No | Trigger basis | |
| triggerPrice | No | Trigger price |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses important behavioral traits: minimum order quantities/amounts, decimal precision limits, unit conventions for market orders, and positionIdx requirements. However, it doesn't mention critical aspects like authentication needs, rate limits, whether this is a destructive/write operation (implied but not stated), error conditions, or what happens with insufficient funds.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprehensive but overly long and poorly structured. While it starts with a brief purpose statement, it immediately dives into detailed parameter documentation that could be better organized. The 'Notes' section repeats information already covered. However, all content is relevant and the examples are valuable, so it's not wasteful despite its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex trading tool with 22 parameters, no annotations, and no output schema, the description does an excellent job covering parameter semantics, usage patterns, and constraints. The examples are particularly helpful. It falls short on some behavioral aspects (authentication, error handling) and doesn't describe the return value beyond 'Dict: Order result', but given the complexity, it's quite complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema description coverage, the description adds substantial value beyond the schema. It provides crucial semantic context: category-specific behaviors (spot vs futures), unit conventions for qty based on side/orderType, positionIdx usage rules, timeInForce defaults, and detailed examples showing parameter interactions. This goes far beyond what the basic schema descriptions provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Execute order' which clearly states the verb and resource. It distinguishes between spot, linear, and inverse trading categories, providing specific context about what the tool does. However, it doesn't explicitly differentiate from sibling tools like cancel_order or set_trading_stop beyond the basic action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use specific parameter values (e.g., positionIdx required for futures, not for spot; unit differences for market buys/sells). It includes examples for different trading scenarios. However, it doesn't explicitly state when NOT to use this tool versus alternatives like cancel_order or set_trading_stop, nor does it mention prerequisites like account balances or authentication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_margin_modeC
Set margin mode
Args:
category (str): Category (spot, linear, inverse, etc.)
symbol (str): Symbol (e.g., BTCUSDT)
tradeMode (int): Trading mode (0: Isolated, 1: Cross)
buyLeverage (str): Buying leverage
sellLeverage (str): Selling leverage
Returns:
Dict: Setting result
Example:
set_margin_mode("spot", "BTCUSDT", 0, "10", "10")
Reference:
https://bybit-exchange.github.io/docs/v5/account/set-margin-mode
| Name | Required | Description | Default |
|---|---|---|---|
| buyLeverage | Yes | Buying leverage | |
| category | Yes | Category (spot, linear, inverse, etc.) | |
| sellLeverage | Yes | Selling leverage | |
| symbol | Yes | Symbol (e.g., BTCUSDT) | |
| tradeMode | Yes | Trading mode (0: Isolated, 1: Cross) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Set' implies a write/mutation operation, the description doesn't disclose important behavioral traits: whether this requires specific permissions, if it's reversible, potential rate limits, authentication requirements, or what happens to existing positions when changing margin mode. The example shows parameter values but doesn't explain the implications of those choices.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Example, Reference) and efficiently presents information. However, the core description 'Set margin mode' is overly terse and could benefit from slightly more context about what margin mode represents in this trading system.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a financial trading tool with 5 required parameters and no annotations or output schema, the description is inadequate. It doesn't explain what 'margin mode' means, the implications of changing it, error conditions, or what the 'Setting result' dictionary contains. The reference link is helpful but doesn't compensate for the lack of essential context in the description itself.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 5 parameters. The description repeats the same parameter information without adding meaningful context beyond what's in the schema. It doesn't explain the relationship between parameters (e.g., how category affects other parameters) or provide guidance on valid combinations. The baseline of 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Set margin mode' which is a specific verb+resource, but it's quite minimal and doesn't distinguish this from sibling tools. While it's clear this configures margin settings, it doesn't explain what 'margin mode' means in this trading context or how it differs from related tools like 'set_trading_stop'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. The description doesn't mention prerequisites, timing considerations, or relationship to sibling tools like 'place_order' or 'set_trading_stop'. The example shows usage but doesn't explain the context in which this operation is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_trading_stopC
Set trading stop
Args:
category (str): Category (spot, linear, inverse, etc.)
symbol (str): Symbol (e.g., BTCUSDT)
takeProfit (Optional[str]): Take profit price
stopLoss (Optional[str]): Stop loss price
trailingStop (Optional[str]): Trailing stop
positionIdx (Optional[int]): Position index
Returns:
Dict: Setting result
Example:
set_trading_stop("spot", "BTCUSDT", "55000", "45000", "1000", 0)
Reference:
https://bybit-exchange.github.io/docs/v5/position/trading-stop
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Category (spot, linear, inverse, etc.) | |
| positionIdx | No | Position index | |
| stopLoss | No | Stop loss price | |
| symbol | Yes | Symbol (e.g., BTCUSDT) | |
| takeProfit | No | Take profit price | |
| trailingStop | No | Trailing stop |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'Setting result' but doesn't disclose critical behaviors: whether this is a mutation (likely yes), authentication needs, rate limits, error conditions, or what happens to existing stops. The example implies it sets prices, but behavioral context is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (Args, Returns, Example, Reference). The core description is just two words, but the structured format adds value. Some redundancy exists between Args and schema, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trading tool with 6 parameters, no annotations, and no output schema, the description is inadequate. It lacks context on permissions, side effects, error handling, and relationship to other trading operations. The reference link helps but doesn't compensate for missing behavioral details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are documented in the schema. The description repeats parameter info in the Args section but adds no additional meaning beyond what's in the schema. The example shows usage but doesn't clarify semantics like price format or position index meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Set trading stop' which is a verb+resource, but it's vague about what exactly is being set (stop-loss, take-profit, trailing stop) and doesn't distinguish from sibling trading tools like 'place_order' or 'cancel_order'. The title is null, leaving the name as the only identifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like modifying orders or positions directly. The example shows usage but doesn't explain context or prerequisites. Sibling tools include position management tools, but no comparison is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
15 tool updates
v1.0.0- First observed
cancel_order - First observed
get_access_key - First observed
get_api_key_information - First observed
get_instruments_info - First observed
get_kline - First observed
get_open_orders - First observed
get_order_history - First observed
get_orderbook - First observed
get_positions - First observed
get_secret_key - First observed
get_tickers - First observed
get_wallet_balance - First observed
place_order - First observed
set_margin_mode - First observed
set_trading_stop
TDQS
Most tools have distinct purposes targeting specific resources like orders, market data, positions, and account management, with clear boundaries. However, get_access_key and get_secret_key are very similar in purpose (retrieving credentials from environment variables) and could cause confusion, though they target different keys.
All tools follow a consistent verb_noun naming pattern (e.g., cancel_order, get_instruments_info, place_order, set_margin_mode). The pattern is uniform across all 15 tools, with no mixing of conventions like camelCase or other styles.
With 15 tools, the count is well-scoped for a cryptocurrency exchange server, covering essential operations like trading, market data, account management, and positions. Each tool appears to serve a specific, necessary function without obvious bloat or redundancy.
The tool set provides comprehensive coverage for trading, market data, and account operations, including CRUD-like actions for orders (place, cancel, get history) and positions. Minor gaps exist, such as no tool for modifying orders (e.g., update_order) or handling more advanced account settings, but core workflows are well-supported.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Real-time crypto market data: candles, tickers, orderbooks across 13+ exchanges via MCP.
Trade 16 crypto exchanges + MetaTrader 5 from your AI assistant via one MCP connection.
Live prices, perps, prediction markets and a paper trading desk over one MCP.
Crypto trading intelligence MCP — 34+ endpoints, x402 pay-per-use, AI agent strategy & execution
Related MCP Servers
- FlicenseCqualityDmaintenanceEnables cryptocurrency trading on Bybit exchange through comprehensive market data access, account management, and automated trading operations. Features smart position validation, trailing stop losses, and risk management tools with demo mode support for safe testing.21-
- FlicenseBqualityDmaintenanceA comprehensive MCP server providing full access to Bybit's v5 API for real-time market data, trading operations, and account management. It enables AI assistants to execute trades, manage positions, and monitor wallet balances with built-in safety controls for both testnet and production environments.226-
- AlicenseCqualityDmaintenanceMCP server for Bybit exchange enabling 246 tools for trading, market data, account management, and more via natural language.1002MIT

Bybit MCP Serverofficial
AlicenseBqualityCmaintenanceA production-ready MCP server for Bybit — 206 tools covering market data, trading, positions, account management, assets, and real-time WebSocket streams. Enables AI assistants to interact directly with the Bybit cryptocurrency exchange through natural language.38244731MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dlwjdtn535/mcp-bybit-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server