hummingbot-mcp
OfficialClick on "Deploy 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., "@hummingbot-mcpshow my current portfolio"
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 Hummingbot Server
An MCP (Model Context Protocol) server that enables Claude and Gemini CLI to interact with Hummingbot for automated cryptocurrency trading across multiple exchanges.
Installation & Configuration
Option 1: Using uv (Recommended for Development)
Install uv (if not already installed):
curl -LsSf https://astral.sh/uv/install.sh | shClone and install dependencies:
git clone https://github.com/hummingbot/mcp cd mcp uv syncCreate a .env file:
cp .env.example .envEdit the .env file with your Hummingbot API credentials:
HUMMINGBOT_API_URL=http://localhost:8000 HUMMINGBOT_USERNAME=admin HUMMINGBOT_PASSWORD=adminConfigure in Claude Code or Gemini CLI:
{ "mcpServers": { "hummingbot-mcp": { "type": "stdio", "command": "uv", "args": [ "--directory", "/path/to/mcp", "run", "main.py" ] } } }Note: Make sure to replace
/path/to/mcpwith the actual path to your MCP directory.
Option 2: Using Docker (Recommended for Production)
Create a .env file:
touch .envEdit the .env file with your Hummingbot API credentials:
HUMMINGBOT_API_URL=http://localhost:8000 HUMMINGBOT_USERNAME=admin HUMMINGBOT_PASSWORD=adminImportant: When running the MCP server in Docker and connecting to a Hummingbot API on your host:
Linux: Use
--network host(see below) to allow the container to accesslocalhost:8000Mac/Windows: Change
HUMMINGBOT_API_URLtohttp://host.docker.internal:8000
Pull the Docker image:
docker pull hummingbot/hummingbot-mcp:latestConfigure in Claude Code or Gemini CLI:
For Linux (using --network host):
{ "mcpServers": { "hummingbot-mcp": { "type": "stdio", "command": "docker", "args": [ "run", "--rm", "-i", "--network", "host", "--env-file", "/path/to/mcp/.env", "-v", "$HOME/.hummingbot_mcp:/root/.hummingbot_mcp", "hummingbot/hummingbot-mcp:latest" ] } } }For Mac/Windows:
{ "mcpServers": { "hummingbot-mcp": { "type": "stdio", "command": "docker", "args": [ "run", "--rm", "-i", "--env-file", "/path/to/mcp/.env", "-v", "$HOME/.hummingbot_mcp:/root/.hummingbot_mcp", "hummingbot/hummingbot-mcp:latest" ] } } }(Remember to set
HUMMINGBOT_API_URL=http://host.docker.internal:8000in your.envfile)Note: Make sure to replace
/path/to/mcpwith the actual path to your MCP directory.
Cloud Deployment with Docker Compose
For cloud deployment where both Hummingbot API and MCP server run on the same server:
Create a .env file:
touch .envEdit the .env file with your Hummingbot API credentials:
HUMMINGBOT_API_URL=http://localhost:8000 HUMMINGBOT_USERNAME=admin HUMMINGBOT_PASSWORD=adminCreate a docker-compose.yml:
services: hummingbot-api: container_name: hummingbot-api image: hummingbot/hummingbot-api:latest ports: - "8000:8000" volumes: - ./bots:/hummingbot-api/bots - /var/run/docker.sock:/var/run/docker.sock environment: - USERNAME=admin - PASSWORD=admin - BROKER_HOST=emqx - DATABASE_URL=postgresql+asyncpg://hbot:hummingbot-api@postgres:5432/hummingbot_api networks: - emqx-bridge depends_on: - postgres mcp-server: container_name: hummingbot-mcp image: hummingbot/hummingbot-mcp:latest stdin_open: true tty: true env_file: - .env environment: - HUMMINGBOT_API_URL=http://hummingbot-api:8000 depends_on: - hummingbot-api networks: - emqx-bridge # Include other services from hummingbot-api docker-compose.yml as needed emqx: container_name: hummingbot-broker image: emqx:5 restart: unless-stopped environment: - EMQX_NAME=emqx - EMQX_HOST=node1.emqx.local - EMQX_CLUSTER__DISCOVERY_STRATEGY=static - EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.local] - EMQX_LOADED_PLUGINS="emqx_recon,emqx_retainer,emqx_management,emqx_dashboard" volumes: - emqx-data:/opt/emqx/data - emqx-log:/opt/emqx/log - emqx-etc:/opt/emqx/etc ports: - "1883:1883" - "8883:8883" - "8083:8083" - "8084:8084" - "8081:8081" - "18083:18083" - "61613:61613" networks: emqx-bridge: aliases: - node1.emqx.local healthcheck: test: [ "CMD", "/opt/emqx/bin/emqx_ctl", "status" ] interval: 5s timeout: 25s retries: 5 postgres: container_name: hummingbot-postgres image: postgres:15 restart: unless-stopped environment: - POSTGRES_DB=hummingbot_api - POSTGRES_USER=hbot - POSTGRES_PASSWORD=hummingbot-api volumes: - postgres-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - emqx-bridge healthcheck: test: ["CMD-SHELL", "pg_isready -U hbot -d hummingbot_api"] interval: 10s timeout: 5s retries: 5 networks: emqx-bridge: driver: bridge volumes: emqx-data: { } emqx-log: { } emqx-etc: { } postgres-data: { }Deploy:
docker compose up -dConfigure in Claude Code or Gemini CLI to connect to existing container:
{ "mcpServers": { "hummingbot-mcp": { "type": "stdio", "command": "docker", "args": [ "exec", "-i", "hummingbot-mcp", "uv", "run", "main.py" ] } } }Note: Replace
hummingbot-mcpwith your actual container name. You can find the container name by running:docker ps
Related MCP server: hummingbot-mcp
Server Configuration
On first run, the server creates a default configuration from environment variables (or uses http://localhost:8000 with default credentials). Configuration is stored in ~/.hummingbot_mcp/server.yml.
Using the configure_server Tool
# Show the current server configuration
configure_server()
# Update the host and port
configure_server(host="192.168.1.100", port=8001)
# Update credentials
configure_server(username="admin", password="secure_password")
# Update everything at once
configure_server(
name="production",
host="prod-server",
port=8000,
username="admin",
password="secure_password"
)Only the provided parameters are changed; omitted ones keep their current values. The client automatically reconnects after any update.
Environment Variables
The following environment variables can be set in your .env file for the MCP server:
Variable | Default | Description |
|
| Initial default API server URL (used only on first run) |
|
| Initial username (used only on first run) |
|
| Initial password (used only on first run) |
|
| Connection timeout in seconds |
|
| Maximum number of retry attempts |
|
| Delay between retries in seconds |
|
| Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL) |
Note: After initial setup, use the configure_server tool to update the server connection. Environment variables are only used to create the initial default configuration.
Requirements
Python 3.11+
Running Hummingbot API server
Valid Hummingbot API credentials
Available Tools
The MCP server provides tools for:
Server Management
configure_server: View or update the active Hummingbot API server connection
No parameters: show current server config
Any parameters: update and reconnect
Configuration persists in
~/.hummingbot_mcp/server.yml
Trading & Account Management
Account management and connector setup
Portfolio balances and distribution
Order placement and management
Position management
Market data (prices, order books, candles)
Funding rates
Bot deployment and management
Controller configuration
Development
To run the server in development mode:
uv run main.pyTo run tests:
uv run pytestTroubleshooting
The MCP server now provides comprehensive error messages to help diagnose connection and authentication issues:
Connection Errors
If you see error messages like:
❌ Cannot reach Hummingbot API at <url>- The API server is not running or not accessible❌ Authentication failed when connecting to Hummingbot API- Incorrect username or password❌ Failed to connect to Hummingbot API- Generic connection failure
The error messages will include:
The exact URL being used
Your configured username (password is masked)
Specific suggestions on how to fix the issue
References to tools like
configure_server
Common Solutions
API Not Running:
Ensure your Hummingbot API server is running
Verify the API is accessible at the configured URL
Wrong Credentials:
Use
configure_servertool to update server credentialsOr check your
.envfile configuration
Wrong URL:
Use
configure_servertool to update the server URLFor Docker on Mac/Windows, use
host.docker.internalinstead oflocalhost
Docker Network Issues:
On Linux, use
--network hostin your Docker configurationOn Mac/Windows, use
host.docker.internal:8000as the API URL
Error Prevention
The MCP server will:
Not retry on authentication failures (401 errors) - it will immediately tell you the credentials are wrong
Retry on connection failures with helpful messages about what might be wrong
Provide context about whether you're running in Docker and suggest appropriate fixes
Guide you to the right tools (
configure_server) to fix issues
Available Tools
11 toolsconfigure_serverA
Configure the active Hummingbot API server connection.
This tool manages a single API server connection:
1. No parameters → Show the current server configuration
2. Any parameters → Update the server config and reconnect
Only the provided parameters are changed; omitted ones keep their current values.
Args:
name: Server label (e.g., 'macmini', 'production')
host: API host (e.g., 'localhost', 'host.docker.internal', '72.212.424.42')
port: API port (e.g., 8000)
username: API username
password: API password
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | ||
| name | No | ||
| port | No | ||
| password | No | ||
| username | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully bears the burden of behavioral disclosure. It explains that no parameters triggers a show operation, any parameters triggers an update+reconnect, and omitted parameters keep current values. This is comprehensive for a configuration 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 well-structured with numbered steps and a bullet list, front-loading the main purpose. It is concise with no superfluous content, though the 'Args' section could be integrated more tightly, but it adds value with examples.
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 5 optional parameters and no output schema, the description adequately covers the tool's behavior (show vs update, partial updates). It does not describe return values or error handling, but for a config tool, this is acceptable. A slightly higher score would require mention of response format.
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 coverage is 0% (the description does not reference schema properties), but the 'Args' section in the description adds valuable meaning for each parameter with examples (e.g., host examples 'localhost', 'host.docker.internal', '72.212.424.42'). This compensates well for the low 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 configures the active Hummingbot API server connection. It distinguishes between showing current config (no params) and updating (with params), which is a specific verb+resource combination. Among sibling tools like 'explore_dex_pools' or 'manage_bots', this tool's purpose is unique and well-defined.
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 guidance on when to use the tool: no parameters to view current config, any parameters to update. It does not explicitly mention when not to use it or alternatives, but the sibling list doesn't contain obvious alternatives for config management, so the guidance is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explore_dex_poolsA
Explore DeFi CLMM pools — discover pools, compare yields, and get pool details.
Supports CLMM DEX connectors (Meteora, Raydium, Uniswap V3) for concentrated liquidity.
- list_pools: Browse available CLMM pools with filtering and sorting
- get_pool_info: Get detailed information about a specific pool (requires network + pool_address)
To manage LP positions, use `manage_executors` with `lp_executor` type.
To check on-chain positions, use `get_portfolio_overview` with `include_lp_positions=True`.
Args:
action: Action to perform on CLMM pools.
connector: CLMM connector name (e.g., 'meteora', 'raydium', 'uniswap'). Required.
network: Network ID in 'chain-network' format (e.g., 'solana-mainnet-beta'). Required for get_pool_info.
pool_address: Pool contract address (required for get_pool_info).
page: Page number for list_pools (default: 0).
limit: Results per page for list_pools (default: 50, max: 100).
search_term: Search term to filter pools by token symbols (e.g., 'SOL', 'USDC').
sort_key: Sort by field for list_pools (volume, tvl, feetvlratio, etc.).
order_by: Sort order for list_pools ('asc' or 'desc').
include_unknown: Include pools with unverified tokens (default: True).
detailed: Return detailed table with more columns for list_pools (default: False).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| action | Yes | ||
| network | No | ||
| detailed | No | ||
| order_by | No | desc | |
| sort_key | No | volume | |
| connector | No | ||
| search_term | No | ||
| pool_address | No | ||
| include_unknown | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool is read-only (explore), lists supported actions, and mentions default values for parameters. However, it does not explicitly state side effects, rate limits, or authentication requirements. The lack of explicit read-only declaration is a minor gap.
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 bullet points and separate sections for actions, arguments, and cross-references. It front-loads the main purpose. However, some redundancy exists (e.g., repeating parameter details in the bullet list that are also in the schema), and the length could be trimmed slightly without losing essential information.
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 (11 parameters, 2 actions, no output schema), the description is thorough. It covers usage instructions, parameter semantics, and references to sibling tools. All necessary information for correct invocation is present, with no gaps.
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 input schema has 0% description coverage, so the description fully compensates by providing detailed explanations for all 11 parameters, including defaults and constraints (e.g., limit max 100). Each parameter's purpose and when it's required (e.g., network for get_pool_info) are clearly described.
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 explores DeFi CLMM pools, lists pools, and gets pool details. It distinguishes from siblings by referencing 'manage_executors' for LP positions and 'get_portfolio_overview' for on-chain positions, making the tool's specific role unambiguous.
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 explicitly explains when to use each action (list_pools vs get_pool_info) and provides cross-references to sibling tools for related tasks (LP management, portfolio overview). It also lists supported DEX connectors, giving clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explore_geckoterminalA
Explore DEX market data from GeckoTerminal (free, no API key needed).
Progressive discovery flow:
1. action="networks" → List all supported networks (solana, eth, bsc, ...)
2. action="dexes" + network → List DEXes on a network
3. action="trending_pools" (+ network) → Trending pools globally or per network
4. action="top_pools" + network (+ dex_id) → Top pools by volume on a network/dex
5. action="new_pools" (+ network) → Recently created pools
6. action="pool_detail" + network + pool_address → Detailed info for one pool
7. action="multi_pools" + network + pool_addresses → Compare multiple pools
8. action="token_pools" + network + token_address → Top pools for a token
9. action="token_info" + network + token_address → Token details (price, mcap, fdv)
10. action="ohlcv" + network + pool_address → OHLCV candle data
11. action="trades" + network + pool_address → Recent trades
Args:
action: The data to retrieve.
network: Network ID (e.g., 'solana', 'eth', 'bsc'). Required for most actions.
dex_id: DEX ID filter for top_pools (e.g., 'raydium', 'uniswap_v3').
pool_address: Pool contract address (for pool_detail, ohlcv, trades).
pool_addresses: List of pool addresses (for multi_pools).
token_address: Token contract address (for token_pools, token_info).
timeframe: OHLCV interval (default: '1h'). Options: 1m, 5m, 15m, 1h, 4h, 12h, 1d.
before_timestamp: Fetch OHLCV candles before this unix timestamp (pagination).
currency: OHLCV price currency, 'usd' or 'token' (default: 'usd').
token: Which token's price for OHLCV, 'base' or 'quote' (default: 'base').
limit: Max OHLCV candles to return (default: 1000).
trade_volume_filter: Min trade volume in USD to filter trades (optional).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| token | No | base | |
| action | Yes | ||
| dex_id | No | ||
| network | No | ||
| currency | No | usd | |
| timeframe | No | 1h | |
| pool_address | No | ||
| token_address | No | ||
| pool_addresses | No | ||
| before_timestamp | No | ||
| trade_volume_filter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states the tool is 'free, no API key needed' and outlines the action flow. However, it does not explicitly confirm read-only behavior, error handling, rate limits, or the impact of invalid parameters. The behavioral disclosure is adequate but not exhaustive.
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: an opening sentence, a numbered action list, then parameter definitions. It is front-loaded with the core purpose. While lengthy due to the number of actions, each sentence is necessary and earns its place. Minor redundancy could be trimmed, but overall it is 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?
Given the complexity (12 parameters, 11 actions, no output schema), the description covers the tool's functionality comprehensively. It details all actions, required parameters, and optional arguments like timeframe and pagination (before_timestamp). It does not explain the return format, but that is acceptable without an output schema. Overall, it provides sufficient context for an agent to use the tool correctly.
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 has 0% description coverage, so the description must compensate. It explains all 12 parameters with examples and default values (e.g., 'network: Network ID (e.g., solana, eth). Required for most actions.'). This adds significant meaning beyond the raw schema, though some parameters like 'token' could benefit from more context about allowed values.
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: 'Explore DEX market data from GeckoTerminal'. It enumerates 11 distinct actions, each with a brief description, making the capabilities concrete and easy to understand. The name and description together unambiguously identify the tool's scope and resource.
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 a progressive discovery flow and details when to use each action. However, it does not explicitly guide the agent on when to choose this tool over sibling tools like explore_dex_pools. Usage context is implied through the action list but lacks direct comparison or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_dataA
Get market data: prices, candles, funding rates, or order book data.
Data Types:
- prices: Get latest prices for multiple trading pairs
- candles: Get OHLCV candle data for a trading pair
- funding_rate: Get perpetual funding rate (connector must have _perpetual)
- order_book: Get order book snapshot or queries
Args:
data_type: Type of market data to retrieve ('prices', 'candles', 'funding_rate', 'order_book')
connector_name: Exchange connector name (e.g., 'binance', 'binance_perpetual')
trading_pairs: List of trading pairs (required for 'prices', e.g., ['BTC-USDT', 'ETH-USD'])
trading_pair: Single trading pair (required for 'candles', 'funding_rate', 'order_book')
interval: Candle interval for 'candles' (default: '1h'). Options: '1m', '5m', '15m', '30m', '1h', '4h', '1d'.
days: Number of days of historical data for 'candles' (default: 30).
query_type: Order book query type for 'order_book' (default: 'snapshot'). Options: 'snapshot',
'volume_for_price', 'price_for_volume', 'quote_volume_for_price', 'price_for_quote_volume'.
query_value: Value for order book queries (required if query_type is not 'snapshot').
is_buy: Side for order book queries (default: True for buy side).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| is_buy | No | ||
| interval | No | 1h | |
| data_type | Yes | ||
| query_type | No | ||
| query_value | No | ||
| trading_pair | No | ||
| trading_pairs | No | ||
| connector_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden. It discloses that the tool reads market data and specifies which parameters are required for each data type. It does not mention side effects or rate limits, but it is clear that the tool is read-only. The structure provides good insight into 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 well-structured with clear headings and bullet points, front-loading the purpose. It is detailed but not overly verbose; every sentence adds value. Minor redundancy (e.g., repeating enum options) 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?
Given the complexity (9 params, no output schema), the description covers all data types and their necessary parameters. It does not describe return format or pagination, but for a read tool, this is adequate. It provides enough context for an agent to select and use the tool correctly.
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 adds significant meaning beyond the schema: it explains which parameters are required for each data type, provides examples, and defines enumeration options (e.g., interval choices, query types). Since schema coverage is 0%, this fully compensates and is essential for correct invocation.
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 retrieves market data (prices, candles, funding rates, order book) and enumerates each data type with a specific verb (e.g., 'Get latest prices'). This is explicit and distinguishes the tool from siblings focused on other domains like DEX pools or portfolio overview.
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 explains what each data type does but does not provide when-to-use advice or comparison to alternatives (e.g., when to use this vs explore_dex_pools). It implies usage through the listed data types but lacks explicit guidelines on prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolio_overviewA
Get a unified portfolio overview with balances, perpetual positions, LP positions, and active orders.
This tool provides a comprehensive view of your entire portfolio by fetching data from multiple sources
in parallel. By default, it returns all four types of data, but you can filter to only include
specific sections.
Data Sources (fetched in parallel using asyncio.gather):
1. Token Balances - Holdings across all connected CEX/DEX exchanges
2. Perpetual Positions - Open perpetual futures positions from CEX
3. LP Positions (CLMM) - Real-time concentrated liquidity positions from blockchain DEXs
- Queries database to find all pools user has interacted with
- Calls get_positions() for each pool to fetch real-time blockchain data
- Includes real-time fees and token amounts
4. Active Orders - Currently open orders across all exchanges
NOTE: This only shows ACTIVE/OPEN positions. For historical data, use search_history() instead.
Args:
account_names: List of account names to filter by (optional). If empty, returns all accounts.
connector_names: List of connector names to filter by (optional). If empty, returns all connectors.
include_balances: Include token balances in the overview (default: True)
include_perp_positions: Include perpetual positions in the overview (default: True)
include_lp_positions: Include LP (CLMM) positions in the overview (default: True)
include_active_orders: Include active (open) orders in the overview (default: True)
as_distribution: Show token balances as distribution percentages (default: False)
refresh: If True, refresh balances from exchanges before returning. If False, return cached state (default: True)
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | ||
| account_names | No | ||
| as_distribution | No | ||
| connector_names | No | ||
| include_balances | No | ||
| include_lp_positions | No | ||
| include_active_orders | No | ||
| include_perp_positions | No |
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 discloses key behavioral traits: fetching data in parallel with asyncio.gather, querying multiple sources, database queries for LP positions, real-time data retrieval, and refresh vs cached behavior. This provides meaningful context beyond what annotations would convey.
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 moderately long but well-structured with a clear overview, data source list, and parameter section. Every sentence serves a purpose, though it could be slightly more concise by merging the data source list with the parameter descriptions. It remains informative without being verbose.
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 (8 parameters, no output schema, no annotations), the description is highly complete. It explains the data sources, filtering options, refresh behavior, and historical data separation. The only minor gap is the lack of output format description, but this is acceptable without an output schema.
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 0%, so the description must compensate. It does so excellently by explaining each parameter (account_names, connector_names, include_balances, etc.), their defaults, and their effects. For example, it clarifies that 'include_lp_positions' triggers database queries and real-time blockchain calls. This adds significant value beyond the raw schema.
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 provides a 'unified portfolio overview' with specific data types (balances, perpetual positions, LP positions, active orders). It distinguishes itself from sibling tool search_history by noting this shows only active/open positions, while search_history handles historical data.
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 explains when to use the tool (for a comprehensive portfolio overview) and explicitly directs users to search_history for historical data. It also details filtering options like account_names and connector_names. However, it does not cover all sibling tools or provide a comprehensive decision tree.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_botsA
Manage controller-based bots: deploy, monitor, get logs, control execution, and modify runtime configs.
⚠️ NOTE: For most trading strategies (grid, DCA, position trading), use manage_executors() instead.
Only use bots when the user EXPLICITLY asks for "bot" deployment or needs advanced features like
multi-strategy bots with centralized risk management.
Actions:
- deploy: Deploy a new bot with controller configurations (requires bot_name + controllers_config)
- status: Get status of all active bots (no additional params needed)
- logs: Get detailed logs for a specific bot (requires bot_name)
- stop_bot: Stop and archive a bot forever (requires bot_name)
- stop_controllers: Stop specific controllers in a bot (requires bot_name + controller_names)
- start_controllers: Start/resume specific controllers (requires bot_name + controller_names)
- get_config: View current configs of a running bot (requires bot_name)
- update_config: Modify config of a controller INSIDE a running bot in real-time (requires bot_name + config_name + config_data)
Args:
action: Action to perform on bots.
bot_name: Name of the bot (required for deploy, logs, stop_bot, stop/start_controllers, get_config, update_config).
controllers_config: List of controller config names (required for deploy).
account_name: Account name for deployment (default: master_account).
max_global_drawdown_quote: Maximum global drawdown in quote currency (deploy only).
max_controller_drawdown_quote: Maximum per-controller drawdown in quote currency (deploy only).
image: Docker image for deployment (default: "hummingbot/hummingbot:latest").
log_type: Type of logs to retrieve for 'logs' action ('error', 'general', 'all').
limit: Maximum log entries for 'logs' action (default: 50, max: 1000).
search_term: Search term to filter logs by message content (logs only).
controller_names: List of controller names (required for stop/start_controllers).
config_name: Name of the config to update (required for update_config).
config_data: New configuration data (required for update_config). Must include 'controller_type' and 'controller_name'.
confirm_override: Required True if overwriting existing config in a running bot (update_config only).
| Name | Required | Description | Default |
|---|---|---|---|
| image | No | hummingbot/hummingbot:latest | |
| limit | No | ||
| action | Yes | ||
| bot_name | No | ||
| log_type | No | all | |
| config_data | No | ||
| config_name | No | ||
| search_term | No | ||
| account_name | No | master_account | |
| confirm_override | No | ||
| controller_names | No | ||
| controllers_config | No | ||
| max_global_drawdown_quote | No | ||
| max_controller_drawdown_quote | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It details each action's behavior, including destructive actions like stop_bot (stops and archives forever) and update_config requiring confirm_override. However, it could more explicitly state reversibility for actions like stop_controllers.
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-organized with sections for general purpose, usage guidance, actions with bullet points, and parameter descriptions. It is front-loaded with key information and concise 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 14 parameters, no annotations, and no output schema, the description covers all actions and their parameter dependencies, including defaults. It provides complete guidance for the agent to use the tool correctly.
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 explains each action's required parameters beyond the input schema, which has 0% coverage. It adds details like config_data must include 'controller_type' and 'controller_name', log_type enum options, and defaults for account_name and image.
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 managing controller-based bots with specific actions like deploy, monitor, logs, control execution, and config modification. It distinguishes from sibling tools like manage_executors by explicitly noting when to use bots vs. executors.
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 explicit when-to-use and when-not-to-use guidance, recommending manage_executors for most trading strategies and only using bots when the user explicitly asks for 'bot' deployment or needs advanced features. It names the alternative sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_controllersA
Manage controller templates and saved configurations (design-time).
Works with reusable strategy definitions and parameter sets for future deployments.
Does NOT affect running bots. To modify a live bot's config, use manage_bots with action='update_config'.
⚠️ NOTE: For most trading strategies (grid, DCA, position trading), use manage_executors() instead.
Only use controllers when the user EXPLICITLY asks for "controllers", "bots", or needs advanced
multi-strategy bot deployments with centralized risk management.
Exploration flow:
1. action="list" → List all controllers and their configs
2. action="list" + controller_type → List controllers of that type with config counts
3. action="describe" + controller_name → Show config parameters template + list existing configs
4. action="describe" + config_name → Show specific config values + its controller's parameters
5. action="describe" + include_code=True → Also include the full controller source code
Modification flow:
6. action="upsert" + target="controller" → Create/update a controller template
7. action="upsert" + target="config" → Create/update a saved controller config
8. action="delete" + target="controller" → Delete a controller template
9. action="delete" + target="config" → Delete a controller config
Common Enum Values for Controller Configs:
Position Mode (position_mode):
- "HEDGE" - Allows holding both long and short positions simultaneously
- "ONEWAY" - Allows only one direction position at a time
Trade Side (side):
- 1 or "BUY" - For long/buy positions
- 2 or "SELL" - For short/sell positions
- Note: Numeric values are required for controller configs
Order Type (order_type, open_order_type, take_profit_order_type, etc.):
- 1 or "MARKET" - Market order
- 2 or "LIMIT" - Limit order
- 3 or "LIMIT_MAKER" - Limit maker order (post-only)
- Note: Numeric values are required for controller configs
Args:
action: "list", "describe", "upsert" (create/update), or "delete"
target: "controller" (template) or "config" (instance). Required for upsert/delete.
controller_type: Type of controller (e.g., 'directional_trading', 'market_making', 'generic').
controller_name: Name of the controller to describe or modify.
controller_code: Code for controller (required for controller upsert).
config_name: Name of the config to describe or modify.
config_data: Configuration data (required for config upsert). Must include 'controller_type' and 'controller_name'.
confirm_override: Required True if overwriting existing items.
include_code: If True, include full controller source code in describe output. Default False.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| target | No | ||
| config_data | No | ||
| config_name | No | ||
| include_code | No | ||
| controller_code | No | ||
| controller_name | No | ||
| controller_type | No | ||
| confirm_override | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool works with design-time items and does not affect running bots. However, it omits potential destructions (e.g., deleting controllers) and authorization needs, though this is partially mitigated by the note about confirm_override.
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 long but well-structured: it front-loads key information, uses numbered flows, and separates concerns. A bit verbose, but the organization justifies the 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?
Given 9 parameters, no annotations, and no output schema, the description is remarkably complete. It covers purpose, usage, parameter details, enum values, and alternatives, providing an agent with all necessary context to invoke the tool correctly.
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 coverage is 0%, but the description compensates extensively. It explains each action-target combination, provides example flows, and documents common enum values (position_mode, side, order_type) with numeric requirements, far exceeding schema information.
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 it manages controller templates and saved configurations at design-time. It explicitly distinguishes itself from sibling tools like manage_bots (for live bot configs) and manage_executors (for most trading strategies), ensuring correct tool selection.
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 explicit guidance on when to use this tool (for controllers, bots, advanced multi-strategy deployments) and when not to (for most strategies, use manage_executors). It also details the exploration and modification flows, offering clear instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_executorsA
Manage trading executors: create, search, stop, and configure preferences.
This is the DEFAULT tool for ALL trading operations. Use progressive disclosure to get
the full guide and config schema for any executor type before creating.
Executor Types (pass executor_type with no action to see full guide + schema):
- order_executor: Buy/sell orders (MARKET, LIMIT, LIMIT_MAKER, LIMIT_CHASER)
- position_executor: Directional positions with SL/TP management
- grid_executor: Grid trading for range-bound markets
- dca_executor: Dollar-cost averaging with scheduled levels
- lp_executor: CLMM LP positions on Meteora/Raydium (use explore_dex_pools first)
Actions:
- (none) + executor_type → Show full guide, config schema, and saved defaults
- create + executor_config → Create executor (merged with saved defaults)
- search → List/filter executors (add executor_id for detail)
- stop + executor_id → Stop executor (with keep_position option)
- get_logs + executor_id → Get logs (active executors only)
- get_preferences / save_preferences / reset_preferences → Manage saved defaults
- positions_summary → View all positions (add connector_name + trading_pair to filter)
- clear_position + connector_name + trading_pair → Clear externally-closed position
Args:
action: Action to perform. Leave empty to see executor types or config schema.
executor_type: Type of executor. Provide alone to see its full guide and config schema.
executor_config: Configuration for creating an executor. Required for 'create' action.
executor_id: Executor ID for 'search' (detail), 'stop', or 'get_logs' actions.
log_level: Filter logs by level - 'ERROR', 'WARNING', 'INFO', 'DEBUG' (for get_logs).
account_names: Filter by account names (for search).
connector_names: Filter by connector names (for search).
trading_pairs: Filter by trading pairs (for search).
executor_types: Filter by executor types (for search).
status: Filter by status - 'RUNNING', 'TERMINATED' (for search).
cursor: Pagination cursor for search results.
limit: Maximum results to return (default: 50, max: 1000).
keep_position: When stopping, keep the position open instead of closing it (default: False).
save_as_default: Save executor_config as default for this executor_type (default: False).
preferences_content: Complete markdown content for the preferences file. Required for 'save_preferences'.
account_name: Account name for creating executors (default: 'master_account').
connector_name: Connector name for position filtering or clearing.
trading_pair: Trading pair for position filtering or clearing.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| action | No | ||
| cursor | No | ||
| status | No | ||
| log_level | No | ||
| executor_id | No | ||
| account_name | No | ||
| trading_pair | No | ||
| account_names | No | ||
| executor_type | No | ||
| keep_position | No | ||
| trading_pairs | No | ||
| connector_name | No | ||
| executor_types | No | ||
| connector_names | No | ||
| executor_config | No | ||
| save_as_default | No | ||
| preferences_content | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It describes many behaviors: progressive disclosure for executor types, default merging with saved defaults, pagination with cursor and limit, stop with keep_position option, and log retrieval only for active executors. It does not mention rate limits or authentication requirements, but covers core behavioral traits well.
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 verbose but well-structured with headings, bullet points, and clear sections. It front-loads the main purpose and then details actions and parameters. Every sentence provides useful information. However, it could be more concise; the list of executor types and actions could be summarized.
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 complexity (18 parameters, multiple actions, no output schema, no annotations), the description is remarkably complete. It covers all actions, parameters, defaults, executor types, and even references sibling tools (explore_dex_pools). It explains progressive disclosure and preferences management comprehensively.
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 coverage is 0%, so the description must compensate. It explains every parameter in the Args list, including defaults (e.g., limit default 50, keep_position default false). It clarifies action-specific requirements (e.g., 'executor_config required for create'). Some parameters like 'cursor' and 'log_level' are explained sufficiently. The description adds significant meaning beyond the schema.
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: 'Manage trading executors: create, search, stop, and configure preferences.' It explicitly labels itself as the 'DEFAULT tool for ALL trading operations,' which distinguishes it from sibling tools like manage_bots or manage_controllers. The listing of executor types and actions provides specific context.
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 gives explicit instructions: 'Use progressive disclosure to get the full guide and config schema for any executor type before creating.' It explains when to use different actions (e.g., 'executor_type with no action → Show full guide'). However, it does not explicitly state when NOT to use this tool or provide clear comparisons with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_historyA
Search historical data from the backend database.
This tool is for historical analysis, reporting, and tax purposes.
For real-time current state, use get_portfolio_overview() instead.
Data Types:
- orders: Historical order data (filled, cancelled, failed)
- perp_positions: Perpetual positions (both open and closed)
- clmm_positions: CLMM LP positions (both open and closed)
Common Filters (apply to all data types):
account_names: Filter by account names (optional)
connector_names: Filter by connector names (optional)
trading_pairs: Filter by trading pairs (optional)
status: Filter by status (optional, e.g., 'OPEN', 'CLOSED', 'FILLED', 'CANCELED')
start_time: Start timestamp in seconds (optional)
end_time: End timestamp in seconds (optional)
limit: Maximum number of results (default: 50, max: 1000)
offset: Pagination offset (default: 0)
CLMM-Specific Filters:
network: Network filter for CLMM positions (optional)
wallet_address: Wallet address filter for CLMM positions (optional)
position_addresses: Specific position addresses for CLMM (optional)
Examples:
- Search filled orders: search_history("orders", status="FILLED", limit=100)
- Search closed perp positions: search_history("perp_positions", status="CLOSED")
- Search all CLMM positions: search_history("clmm_positions", limit=100)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| status | No | ||
| network | No | ||
| end_time | No | ||
| data_type | Yes | ||
| start_time | No | ||
| account_names | No | ||
| trading_pairs | No | ||
| wallet_address | No | ||
| connector_names | No | ||
| position_addresses | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It implies read-only nature but does not explicitly state lack of side effects, rate limits, or permissions. Some context is given but not comprehensive.
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?
Description is structured into sections with clear headings and examples. It is reasonably concise given the number of parameters, though slightly verbose in places.
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 output schema and no annotations, the description provides sufficient context for an agent to select and invoke the tool. It covers data types, filters, and usage examples, though return format and errors are omitted.
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 coverage is 0%, but description compensates by listing and explaining each parameter with context, including examples and default values. However, some parameters (e.g., account_names) are less detailed.
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 searches historical data and lists three specific data types. It also distinguishes from sibling tool get_portfolio_overview by noting it is for real-time data.
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?
Explicitly advises using get_portfolio_overview for real-time queries instead. Provides detailed information on data types and filters, guiding appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_account_position_mode_and_leverageA
Set position mode and leverage for an account on a specific exchange. If position mode is not specified, will only set the leverage. If leverage is not specified, will only set the position mode.
Args:
account_name: Account name (default: master_account)
connector_name: Exchange connector name (e.g., 'binance_perpetual')
trading_pair: Trading pair (e.g., ETH-USD) only required for setting leverage
position_mode: Position mode ('HEDGE' or 'ONE-WAY')
leverage: Leverage to set (optional, required for HEDGE mode)
| Name | Required | Description | Default |
|---|---|---|---|
| leverage | No | ||
| account_name | Yes | ||
| trading_pair | No | ||
| position_mode | No | ||
| connector_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully explains the tool's behavior: it can set one or both settings depending on provided parameters. It also notes the dependency of trading_pair for leverage and position_mode for HEDGE mode. No contradictions.
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 a clear purpose sentence followed by conditional logic and parameter descriptions. It uses a docstring style. While it could be more concise, each sentence adds value and it remains readable.
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 5 parameters, no enums, and no output schema, the description covers all relevant aspects: parameter roles, conditional requirements, and default values. It is fairly complete for an agent to understand when and how to call the tool.
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 coverage is 0%, so the description must add meaning. It explains defaults (account_name default 'master_account'), valid values for position_mode ('HEDGE' or 'ONE-WAY'), and context for trading_pair and leverage. This goes beyond the raw schema.
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 it sets position mode and leverage for an account on a specific exchange. It also explains conditional behavior (if one param missing, only sets the other), which distinguishes it from any sibling tools that might perform related but different configuration tasks.
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 explains when each parameter is used (e.g., trading_pair only for leverage, position_mode optional) and the conditional logic. However, it does not explicitly compare to alternative tools or provide guidance on when to choose this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_connectorA
Setup or delete an exchange connector for an account with credentials using progressive disclosure.
This tool guides you through the entire process of connecting an exchange with a four-step flow:
1. No parameters → List available exchanges
2. Connector only → Show required credential fields
3. Connector + credentials, no account → Select account from available accounts
4. All parameters → Connect the exchange (with override confirmation if needed)
Delete flow (action="delete"):
1. action="delete" only → List all accounts and their configured connectors
2. action="delete" + connector → Show which accounts have this connector configured
3. action="delete" + connector + account → Delete the credential
Args:
action: Action to perform. 'setup' (default) to add/update credentials, 'delete' to remove credentials.
connector: Exchange connector name (e.g., 'binance', 'binance_perpetual'). Leave empty to list available connectors.
credentials: Credentials object with required fields for the connector. Leave empty to see required fields first.
account: Account name to add credentials to. If not provided, prompts for account selection.
confirm_override: Explicit confirmation to override existing connector. Required when connector already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | ||
| account | No | ||
| connector | No | ||
| credentials | No | ||
| confirm_override | No |
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 thoroughly explains the multi-step flow, including override confirmation and the two actions. The behavioral traits (progressive disclosure, error handling via account selection) are well disclosed.
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 numbered steps and bullet points, front-loading the purpose. However, it is somewhat lengthy and repeats information (e.g., the args section echoes the step list). Could be slightly more concise, but still clear.
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 the tool (5 parameters, interactive flow) and no output schema, the description covers the process adequately. It lacks information about return values or error handling after each step, but for a setup tool the flow is detailed enough.
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 0%, but the description compensates by explaining each parameter's role in the flow. For example, 'action' is described with its possible values, and 'credentials' is related to required fields. All 5 parameters are covered with 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 it is for setting up or deleting exchange connectors with a progressive disclosure approach. It distinguishes between the two flows and provides a specific verb+resource. Compared to sibling tools like configure_server or manage_bots, it uniquely handles exchange connector management.
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 explicit step-by-step guidance for both setup and delete flows, indicating when to use each parameter. It implicitly tells when to use the tool (for connecting an exchange) but does not explicitly state when not to use it or mention alternatives. However, the progressive disclosure is a strong guideline.
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.
11 tool updates
v1.0.4- First observed
configure_server - First observed
explore_dex_pools - First observed
explore_geckoterminal - First observed
get_market_data - First observed
get_portfolio_overview - First observed
manage_bots - First observed
manage_controllers - First observed
manage_executors - First observed
search_history - First observed
set_account_position_mode_and_leverage - First observed
setup_connector
TDQS
Scored across 11 tools
Most tools have distinct purposes, but explore_dex_pools and explore_geckoterminal overlap in DEX market data. However, descriptions clarify their different scopes (CLMM pools vs. general market data via GeckoTerminal), so only minor ambiguity.
All tool names follow a consistent verb_noun snake_case pattern (e.g., configure_server, explore_dex_pools, manage_executors). The verbs are appropriate for the action, and there is no mixing of conventions.
11 tools is a well-scoped number for a trading bot MCP. It covers server configuration, connector setup, market data, portfolio, history, bot/controller/executor management without being overwhelming or sparse.
The tool surface provides comprehensive coverage for the domain: configuration, market data, portfolio overview, order/position execution, history search, and bot management. There are no obvious gaps that would cause agent failures.
Maintenance
Related MCP Connectors
MCP server for Gainium — manage trading bots, deals, and balances via AI assistants
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
MCP server for OpenMM — exposes market data, account, trading, and strategy tools to AI agents
Trade 16 crypto exchanges + MetaTrader 5 from your AI assistant via one MCP connection.
Related MCP Servers
- FlicenseBqualityFmaintenanceAn MCP server that enables AI models like Claude to interact with the Trading Simulator API for checking balances, viewing prices, and executing trades with automatic chain detection.15-
- AlicenseAqualityBmaintenanceEnables Claude and Gemini CLI to interact with Hummingbot for automated cryptocurrency trading across multiple exchanges.11Apache 2.0
- AlicenseNot gradedqualityDmaintenanceAn MCP server that lets Claude Code (and other MCP clients) trade crypto, read market data, and manage wallets across EVM chains and Solana.7 npmMIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that provides AI assistants like Claude with direct access to MetaAPI trading platform. Trade forex, stocks, and commodities through natural language conversations.1-