hummingbot-mcp
The hummingbot-mcp server enables AI assistants (Claude, Gemini CLI) to interact with Hummingbot for automated cryptocurrency trading, portfolio management, and market analysis across centralized and decentralized exchanges.
Server & Account Management
Configure the Hummingbot API connection (host, port, credentials)
Add, update, or delete exchange connectors for any account
Set position mode (HEDGE/ONE-WAY) and leverage per account and exchange
Portfolio & Position Tracking
Unified portfolio overview: token balances, perpetual positions, CLMM LP positions, and active orders across all exchanges
Search historical orders, closed perpetual positions, and CLMM LP positions with filters (account, connector, pair, status, time range)
Market Data
Prices, OHLCV candles, funding rates, and order book snapshots/queries (volume for price, price for volume, etc.)
Trading Executors
Order executor — MARKET, LIMIT, LIMIT_MAKER, or LIMIT_CHASER orders
Position executor — directional positions with stop-loss and take-profit
Grid executor — grid trading for range-bound markets
DCA executor — dollar-cost averaging with scheduled levels
LP executor — manage CLMM positions on Meteora/Raydium
Search, stop, retrieve logs, and manage saved defaults for executors
Bot & Controller Management
Create, update, and delete reusable strategy controller templates and saved configs
Deploy multi-strategy bots, monitor status, retrieve logs, start/stop controllers, and update live configs in real time
DeFi Pool Exploration
Browse and filter Meteora, Raydium, and Uniswap V3 CLMM pools by volume, TVL, or fee/TVL ratio
Explore GeckoTerminal data (trending/top/new pools, token info, OHLCV, recent trades) across any supported network without an API key
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., "@hummingbot-mcpshow my current open orders on Binance"
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.
drasticstatic working copy — Used by the Fortuna trading system. This is an independent repo created from a local clone of hummingbot/mcp. Upstream is tracked as a remote for voluntary comparison — changes are reviewed before applying.
# Check for upstream updates (review before applying) git fetch upstream && git log upstream/main --oneline
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: ai-trader
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 |
|---|---|---|---|
| name | No | ||
| host | No | ||
| port | No | ||
| username | No | ||
| password | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
In the absence of annotations, the description discloses key behaviors: no parameters = show, any parameters = update and reconnect, and only provided parameters are changed. It does not mention authentication needs, rate limits, or side effects of reconnection, but it covers the primary behavioral traits.
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 a numbered list and bullet points. Every sentence adds value, and it is front-loaded with the purpose. No redundant or missing content.
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 5 parameters, no output schema, and no annotations, the description covers purpose, modes, partial update behavior, and parameter examples. Missing details on return value and potential reconnection impacts, but overall it is sufficiently complete for an AI 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?
Schema description coverage is 0%, but the description adds detailed semantics for all 5 parameters, including example values (e.g., 'macmini', 'localhost', 8000). This compensates fully for the schema gap.
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: 'Configure the active Hummingbot API server connection.' It distinguishes two modes: no parameters shows current config, any parameters updates and reconnects. This verb+resource combo is specific and distinguishes from sibling tools.
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 outlines when to use the tool (for configuration) and explains the two usage modes explicitly. It does not list alternatives or explicitly state when not to use, but within the sibling context, no alternative exists.
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 |
|---|---|---|---|
| action | Yes | ||
| connector | No | ||
| network | No | ||
| pool_address | No | ||
| page | No | ||
| limit | No | ||
| search_term | No | ||
| sort_key | No | volume | |
| order_by | No | desc | |
| include_unknown | No | ||
| detailed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It describes the actions and parameters but does not explicitly state that the tool is read-only, nor does it disclose potential behavioral traits like error handling or rate limits. It implies safety but lacks explicit behavioral guarantees.
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 code blocks, but it is somewhat lengthy. The first sentence is concise and informative. Every sentence adds value, though minor trimming could improve conciseness.
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?
With 11 parameters and no output schema, the description covers the essential functionality and parameter details. However, it lacks explanation of return values or possible errors. Given the complexity, it is mostly complete but has gaps in output behavior.
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, meaning it provides no parameter explanations. The description compensates fully by listing all 11 parameters with clear explanations, default values, and usage contexts (e.g., 'Required for get_pool_info'). This 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 it is for exploring DeFi CLMM pools, listing pools, and getting pool details. It distinguishes from sibling tools by mentioning manage_executors and get_portfolio_overview for other purposes. The verb 'explore' and specific resource 'CLMM pools' are precise.
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 provides when to use this tool vs alternatives: 'To manage LP positions, use manage_executors...' and 'To check on-chain positions, use get_portfolio_overview...'. It also clarifies required parameters for each action (e.g., network + pool_address for get_pool_info).
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 |
|---|---|---|---|
| action | Yes | ||
| network | No | ||
| dex_id | No | ||
| pool_address | No | ||
| pool_addresses | No | ||
| token_address | No | ||
| timeframe | No | 1h | |
| before_timestamp | No | ||
| currency | No | usd | |
| token | No | base | |
| limit | No | ||
| trade_volume_filter | 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 explains all actions are read-only data retrieval, and mentions it's free with no API key needed. It does not disclose rate limits or error handling, but for a data exploration tool, the behavioral coverage is adequate.
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 a numbered list of actions, brief explanations, and a separate Args section. It is front-loaded with the overall purpose and each sentence adds value 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 12 parameters, no output schema, and no annotations, the description is fairly complete. It covers all actions and their parameter dependencies. A minor gap is that it doesn't explicitly list which actions require 'network', but it states 'Required for most actions' which is sufficient for an AI 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?
Input schema has 0% description coverage, so the description compensates by listing all parameters and explaining their relationship to actions in the progressive flow. It adds context beyond the schema, such as when each parameter is required and the meaning of action enum 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 explores DEX market data from GeckoTerminal and enumerates 11 specific actions. It distinguishes itself from sibling tools like explore_dex_pools by being specific to GeckoTerminal and providing a progressive discovery flow.
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 indicating the order of actions and their required parameters. It does not explicitly state when not to use the tool or compare to alternatives, but the structured steps imply appropriate usage contexts.
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 |
|---|---|---|---|
| data_type | Yes | ||
| connector_name | Yes | ||
| trading_pairs | No | ||
| trading_pair | No | ||
| interval | No | 1h | |
| days | No | ||
| query_type | No | ||
| query_value | No | ||
| is_buy | 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 discloses that funding_rate requires a '_perpetual' connector suffix and details order book query behavior. No destructive actions are mentioned, which is consistent with a read-only tool. 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 well-structured with sections and bullet points, front-loading the purpose. However, it is somewhat verbose, especially listing all order book query types. Could be slightly more concise, but still effective.
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 9 parameters and no output schema, the description covers parameter dependencies and usage context comprehensively. It does not explain return values, but that is acceptable without an output schema. Overall, it provides sufficient context for correct 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 0%, so the description fully compensates. It explains each parameter, including conditional requirements (e.g., trading_pairs for 'prices', trading_pair for others), default values, and options (interval, query_type). This 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 'Get market data: prices, candles, funding rates, or order book data,' specifying the verb and resource. It distinguishes itself from sibling tools like explore_dex_pools and get_portfolio_overview by focusing on centralized exchange market 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 outlines which data type to use and the required parameters for each, but does not explicitly contrast with sibling tools or state when not to use it. The information is sufficient for an agent to select the correct data type.
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 |
|---|---|---|---|
| account_names | No | ||
| connector_names | No | ||
| include_balances | No | ||
| include_perp_positions | No | ||
| include_lp_positions | No | ||
| include_active_orders | No | ||
| as_distribution | No | ||
| refresh | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even without annotations, the description details internal behavior: parallel data fetching via asyncio.gather, per-pool queries for LP positions, real-time fees, and the impact of the refresh parameter. This fully compensates for missing annotations.
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 sections, but slightly lengthy. It effectively front-loads the main purpose and each sentence adds value.
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 8 parameters, no output schema, and no annotations, the description thoroughly covers data sources, filtering optiools, behavior of refresh, and notes on active-only scope. It is fully contextual for an AI 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?
All 8 parameters are described in the Args section with purpose and defaults, despite 0% schema description coverage. This adds essential meaning beyond the schema titles.
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 a unified portfolio overview with specific sections (balances, positions, orders). It explicitly distinguishes from sibling tool search_history by noting it only shows active positions.
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 (getting a comprehensive portfolio overview) and directs to search_history for historical data, effectively differentiating use cases.
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 |
|---|---|---|---|
| action | Yes | ||
| bot_name | No | ||
| controllers_config | No | ||
| account_name | No | master_account | |
| max_global_drawdown_quote | No | ||
| max_controller_drawdown_quote | No | ||
| image | No | hummingbot/hummingbot:latest | |
| log_type | No | all | |
| limit | No | ||
| search_term | No | ||
| controller_names | No | ||
| config_name | No | ||
| config_data | No | ||
| confirm_override | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description bears full burden. It reveals irreversibility of stop_bot ('forever'), real-time updates for update_config, and required confirmation for overrides. Lacks auth/rate limits but covers key behavioral aspects.
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 bullet-point actions and args, but slightly lengthy. Warning note is front-loaded. Minimal redundancy, earns its length with detailed guidance.
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?
Covers all actions and their required params, defaults, and constraints. Lacks return value description (no output schema), but given 14 params and complexity, the description is fairly 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?
Schema coverage is 0%, but description compensates by detailing each parameter's context, requirements (e.g., bot_name required for many actions), defaults, and dependencies. Some parameters like config_data are described with structure requirements.
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-based bots with specific actions (deploy, status, logs, etc.), and distinguishes from manage_executors for typical trading strategies, providing a precise verb+resource purpose.
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 manage_executors for most strategies and only using this tool when user explicitly asks for 'bot' deployment or needs advanced features like multi-strategy bots, offering clear when-to-use and alternative guidance.
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 | ||
| controller_type | No | ||
| controller_name | No | ||
| controller_code | No | ||
| config_name | No | ||
| config_data | No | ||
| confirm_override | No | ||
| include_code | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It clearly states the tool does not affect running bots, which is critical. It also warns about using alternative tools and provides common enum values. However, it lacks details on authentication, rate limits, or side effects like concurrency, though these are less critical for a design-time 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 clear sections: summary, warning, exploration flow, modification flow, common enum values, and args. It is front-loaded with key information and every sentence adds value without unnecessary verbosity.
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 output schema, and 0% schema coverage, the description is comprehensive. It covers all parameter semantics, usage flows, behavioral constraints, and enum values. The inclusion of exploration and modification flows provides complete guidance for an agent 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%, so the description must compensate entirely. It does so with detailed parameter explanations in the 'Args' section, including usage context, required conditions, and common enum values for nested fields (e.g., position_mode, side, order_type). This adds significant meaning 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 manages controller templates and saved configurations (design-time), works with reusable strategy definitions, and does not affect running bots. It distinguishes itself from 'manage_bots' and 'manage_executors' by specifying its scope as design-time vs runtime.
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 advises using 'manage_executors' for most trading strategies and to only use controllers when the user explicitly asks for 'controllers' or 'bots', or needs advanced multi-strategy deployments. It also provides a structured exploration and modification flow, guiding the agent on when to use each action/target combination.
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 |
|---|---|---|---|
| action | No | ||
| executor_type | No | ||
| executor_config | No | ||
| executor_id | No | ||
| log_level | No | ||
| account_names | No | ||
| connector_names | No | ||
| trading_pairs | No | ||
| executor_types | No | ||
| status | No | ||
| cursor | No | ||
| limit | No | ||
| keep_position | No | ||
| save_as_default | No | ||
| preferences_content | No | ||
| account_name | No | ||
| connector_name | No | ||
| trading_pair | 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 explains behaviors like merged defaults on create, keep_position on stop, and logs only for active executors. It could be more explicit about idempotency or error states, but overall provides substantial 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 well-structured with a clear first sentence, followed by bullet lists for executor types and actions. It is lengthy but efficient given the many parameters and actions. Each line adds value, though some redundancy exists (e.g., repeating 'executor_type' usage).
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 (18 params, no output schema, no annotations), the description covers actions, behaviors, filters, pagination, and default values. It lacks explicit return value descriptions for each action, but the implications are present (e.g., 'List/filter executors' for search). Overall, 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?
Schema coverage is 0%, so the description must compensate. It adds meaning by listing possible values for 'action', describing 'executor_type' usage, and explaining filters like 'account_names'. Some parameters like 'cursor' and 'limit' are explained but not in depth; nonetheless, it significantly aids understanding.
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 that this tool manages trading executors with actions like create, search, stop, and configure preferences. It also names specific executor types and positions itself as the default tool for all trading operations, distinguishing it from sibling tools like manage_bots or explore_dex_pools.
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 each action, such as 'Use progressive disclosure to get the full guide and config schema for any executor type before creating' and 'use explore_dex_pools first' for lp_executor. It also explains when not to use certain actions, like using 'stop' with 'keep_position' option.
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 |
|---|---|---|---|
| data_type | Yes | ||
| account_names | No | ||
| connector_names | No | ||
| trading_pairs | No | ||
| status | No | ||
| start_time | No | ||
| end_time | No | ||
| limit | No | ||
| offset | No | ||
| network | No | ||
| wallet_address | No | ||
| position_addresses | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description implies read-only (historical search) but does not explicitly state side effects, permissions, or rate limits. Information about pagination (limit, offset) is present but behavioral traits are not fully 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?
Well-structured with sections for data types, filters, and examples. Some redundancy but overall clear and easy to navigate.
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?
Covers all 12 parameters with explanations and examples. No output schema, but examples give an idea of return format. Lacks details on response structure but sufficient for a search 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 description coverage is 0%, so description must compensate. It provides detailed parameter explanations, common and CLMM-specific filters, default values, and examples, adding 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?
Clearly states 'Search historical data from the backend database.' Identifies data types and distinguishes from get_portfolio_overview 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 says to use get_portfolio_overview for real-time current state. Provides examples for different data types and statuses.
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 |
|---|---|---|---|
| account_name | Yes | ||
| connector_name | Yes | ||
| trading_pair | No | ||
| position_mode | No | ||
| leverage | 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 explains conditional behavior but does not disclose side effects, error handling, authentication needs, or rate limits. Partial transparency is achieved.
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 a clear Args section and conditional logic. It is reasonably concise, though the conditional explanation could be slightly more streamlined.
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?
No output schema or annotations are provided. The description covers purpose and parameters but lacks return value, error scenarios, or prerequisites. Adequate but not 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?
Schema description coverage is 0%, so the description adds value by explaining each parameter's purpose, defaults, and constraints. It clarifies conditional requirements but does not provide exhaustive details like value formats.
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 sets position mode and leverage for an account on a specific exchange, with detailed conditional logic. It distinguishes itself from sibling tools which are unrelated operations.
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 includes conditional usage guidance (mode only, leverage only, or both) and notes trading_pair required only for leverage. However, it lacks explicit 'when not to use' guidance or comparisons with alternatives.
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 | ||
| connector | No | ||
| credentials | No | ||
| account | No | ||
| confirm_override | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description transparently explains the four-step setup flow and three-step delete flow, including override confirmation. It covers the behavior of each parameter and the progressive nature of the tool, though it could mention required permissions or error handling.
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 for flows and args. Every sentence adds value, no fluff. It is concise yet comprehensive enough to guide an agent through complex progressive disclosure.
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 two flows and five parameters, the description thoroughly covers the progressive steps and parameter dependencies. Lack of output schema is acceptable, but additional context on error handling or credential validation would improve completeness.
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?
With 0% schema description coverage, the description fully compensates by explaining each parameter's role in the progressive disclosure flow, including action options, connector examples, credentials as an object, account selection, and confirm_override usage.
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: 'Setup or delete an exchange connector for an account with credentials using progressive disclosure.' It distinguishes itself from sibling tools (e.g., configure_server, explore_dex_pools) by focusing specifically on 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 detailed usage guidelines for both setup and delete flows with step-by-step progressive disclosure. While it doesn't explicitly compare to sibling tools, the specialized scope makes the usage context clear.
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.
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
Each tool targets a distinct area (e.g., server config, pool exploration, market data, portfolio view, bot/controller/executor management, history search, connector setup). Overlaps are explicitly disambiguated in descriptions, such as the distinction between explore_dex_pools (CLMM pools) and explore_geckoterminal (GeckoTerminal data), and manage_executors vs manage_bots/manage_controllers.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., configure_server, explore_dex_pools, manage_executors). The verbs are descriptive (configure, explore, get, manage, search, set, setup) and clearly indicate the action.
With 11 tools, the set is well-scoped for a trading bot platform. Each tool covers a core responsibility—from setup and market data to portfolio and execution management—without unnecessary bloat or trivial tools.
The tool set covers the main lifecycle (setup, data access, portfolio view, strategy deployment, history search). A minor gap is the lack of an explicit account management tool beyond connector setup, but the overall surface is robust for typical operations.
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
Trade Robinhood through natural language in Claude Code.
- Era ContextOAuthapp.era
Personal finance, bank account, and shared memory connector for Claude, ChatGPT, Gemini Spark & more
Trade 16 crypto exchanges + MetaTrader 5 from your AI assistant via one MCP connection.
Connect your portfolio to Claude, ChatGPT, or Codex to analyze it and make smarter investments.
Related MCP Servers
AlicenseAqualityCmaintenanceAn MCP server that enables Claude and Gemini CLI to interact with Hummingbot for automated cryptocurrency trading across multiple exchanges.1159Apache 2.0- AlicenseNot gradedqualityDmaintenanceEnables AI assistants like Claude to run backtests, fetch market data, list strategies, and analyze trading algorithms via natural language.1,062GPL 3.0
- AlicenseNot gradedqualityDmaintenanceEnables Claude Desktop to interact directly with the Hyperliquid decentralized exchange, allowing natural language trading, market analysis, and strategy automation.1MIT

TradeStaq MCPofficial
AlicenseBqualityBmaintenanceProvides 31 AI-powered crypto trading tools for Claude, Cursor, and any MCP client, enabling strategy creation, backtesting, bot deployment, copy trading, and portfolio management across multiple exchanges.3468MIT
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/drasticstatic/hummingbot-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server