Skip to main content
Glama
drasticstatic

hummingbot-mcp

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

Docker Build Publish MCP

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

  1. Install uv (if not already installed):

    curl -LsSf https://astral.sh/uv/install.sh | sh
  2. Clone and install dependencies:

    git clone https://github.com/hummingbot/mcp
    cd mcp
    uv sync
  3. Create a .env file:

    cp .env.example .env
  4. Edit the .env file with your Hummingbot API credentials:

    HUMMINGBOT_API_URL=http://localhost:8000
    HUMMINGBOT_USERNAME=admin
    HUMMINGBOT_PASSWORD=admin
  5. Configure 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/mcp with the actual path to your MCP directory.

  1. Create a .env file:

    touch .env
  2. Edit the .env file with your Hummingbot API credentials:

    HUMMINGBOT_API_URL=http://localhost:8000
    HUMMINGBOT_USERNAME=admin
    HUMMINGBOT_PASSWORD=admin

    Important: 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 access localhost:8000

    • Mac/Windows: Change HUMMINGBOT_API_URL to http://host.docker.internal:8000

  3. Pull the Docker image:

    docker pull hummingbot/hummingbot-mcp:latest
  4. Configure 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:8000 in your .env file)

    Note: Make sure to replace /path/to/mcp with 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:

  1. Create a .env file:

    touch .env
  2. Edit the .env file with your Hummingbot API credentials:

    HUMMINGBOT_API_URL=http://localhost:8000
    HUMMINGBOT_USERNAME=admin
    HUMMINGBOT_PASSWORD=admin
  3. Create 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: { }
  4. Deploy:

    docker compose up -d
  5. Configure 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-mcp with 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

HUMMINGBOT_API_URL

http://localhost:8000

Initial default API server URL (used only on first run)

HUMMINGBOT_USERNAME

admin

Initial username (used only on first run)

HUMMINGBOT_PASSWORD

admin

Initial password (used only on first run)

HUMMINGBOT_TIMEOUT

30.0

Connection timeout in seconds

HUMMINGBOT_MAX_RETRIES

3

Maximum number of retry attempts

HUMMINGBOT_RETRY_DELAY

2.0

Delay between retries in seconds

HUMMINGBOT_LOG_LEVEL

INFO

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.py

To run tests:

uv run pytest

Troubleshooting

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

  1. API Not Running:

    • Ensure your Hummingbot API server is running

    • Verify the API is accessible at the configured URL

  2. Wrong Credentials:

    • Use configure_server tool to update server credentials

    • Or check your .env file configuration

  3. Wrong URL:

    • Use configure_server tool to update the server URL

    • For Docker on Mac/Windows, use host.docker.internal instead of localhost

  4. Docker Network Issues:

    • On Linux, use --network host in your Docker configuration

    • On Mac/Windows, use host.docker.internal:8000 as 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 tools
configure_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
ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
hostNo
portNo
usernameNo
passwordNo

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).
ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
connectorNo
networkNo
pool_addressNo
pageNo
limitNo
search_termNo
sort_keyNovolume
order_byNodesc
include_unknownNo
detailedNo

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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).
ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
networkNo
dex_idNo
pool_addressNo
pool_addressesNo
token_addressNo
timeframeNo1h
before_timestampNo
currencyNousd
tokenNobase
limitNo
trade_volume_filterNo

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).
ParametersJSON Schema
NameRequiredDescriptionDefault
data_typeYes
connector_nameYes
trading_pairsNo
trading_pairNo
intervalNo1h
daysNo
query_typeNo
query_valueNo
is_buyNo

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)
ParametersJSON Schema
NameRequiredDescriptionDefault
account_namesNo
connector_namesNo
include_balancesNo
include_perp_positionsNo
include_lp_positionsNo
include_active_ordersNo
as_distributionNo
refreshNo

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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).
ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
bot_nameNo
controllers_configNo
account_nameNomaster_account
max_global_drawdown_quoteNo
max_controller_drawdown_quoteNo
imageNohummingbot/hummingbot:latest
log_typeNoall
limitNo
search_termNo
controller_namesNo
config_nameNo
config_dataNo
confirm_overrideNo

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
targetNo
controller_typeNo
controller_nameNo
controller_codeNo
config_nameNo
config_dataNo
confirm_overrideNo
include_codeNo

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
actionNo
executor_typeNo
executor_configNo
executor_idNo
log_levelNo
account_namesNo
connector_namesNo
trading_pairsNo
executor_typesNo
statusNo
cursorNo
limitNo
keep_positionNo
save_as_defaultNo
preferences_contentNo
account_nameNo
connector_nameNo
trading_pairNo

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)
ParametersJSON Schema
NameRequiredDescriptionDefault
data_typeYes
account_namesNo
connector_namesNo
trading_pairsNo
statusNo
start_timeNo
end_timeNo
limitNo
offsetNo
networkNo
wallet_addressNo
position_addressesNo

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)
ParametersJSON Schema
NameRequiredDescriptionDefault
account_nameYes
connector_nameYes
trading_pairNo
position_modeNo
leverageNo

TDQS

A4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
actionNo
connectorNo
credentialsNo
accountNo
confirm_overrideNo

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 11 tool updatesv1.0.4
    • First observedconfigure_server
    • First observedexplore_dex_pools
    • First observedexplore_geckoterminal
    • First observedget_market_data
    • First observedget_portfolio_overview
    • First observedmanage_bots
    • First observedmanage_controllers
    • First observedmanage_executors
    • First observedsearch_history
    • First observedset_account_position_mode_and_leverage
    • First observedsetup_connector

TDQS

A4.4/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    An MCP server that enables Claude and Gemini CLI to interact with Hummingbot for automated cryptocurrency trading across multiple exchanges.
    11
    59
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants like Claude to run backtests, fetch market data, list strategies, and analyze trading algorithms via natural language.
    1,062
    GPL 3.0
  • A
    license
    B
    quality
    B
    maintenance
    Provides 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.
    34
    68
    MIT

Latest Blog Posts

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