Skip to main content
Glama
hummingbot

hummingbot-mcp

Official
by hummingbot

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: hummingbot-mcp

Server Configuration

On first run, the server creates a default configuration from environment variables (or uses http://localhost:8000 with default credentials). Configuration is stored in ~/.hummingbot_mcp/server.yml.

Using the configure_server Tool

# Show the current server configuration
configure_server()

# Update the host and port
configure_server(host="192.168.1.100", port=8001)

# Update credentials
configure_server(username="admin", password="secure_password")

# Update everything at once
configure_server(
    name="production",
    host="prod-server",
    port=8000,
    username="admin",
    password="secure_password"
)

Only the provided parameters are changed; omitted ones keep their current values. The client automatically reconnects after any update.

Environment Variables

The following environment variables can be set in your .env file for the MCP server:

Variable

Default

Description

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
hostNo
nameNo
portNo
passwordNo
usernameNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully bears the burden of behavioral disclosure. It explains that no parameters triggers a show operation, any parameters triggers an update+reconnect, and omitted parameters keep current values. This is comprehensive for a configuration tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with numbered steps and a bullet list, front-loading the main purpose. It is concise with no superfluous content, though the 'Args' section could be integrated more tightly, but it adds value with examples.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 optional parameters and no output schema, the description adequately covers the tool's behavior (show vs update, partial updates). It does not describe return values or error handling, but for a config tool, this is acceptable. A slightly higher score would require mention of response format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% (the description does not reference schema properties), but the 'Args' section in the description adds valuable meaning for each parameter with examples (e.g., host examples 'localhost', 'host.docker.internal', '72.212.424.42'). This compensates well for the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool configures the active Hummingbot API server connection. It distinguishes between showing current config (no params) and updating (with params), which is a specific verb+resource combination. Among sibling tools like 'explore_dex_pools' or 'manage_bots', this tool's purpose is unique and well-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear guidance on when to use the tool: no parameters to view current config, any parameters to update. It does not explicitly mention when not to use it or alternatives, but the sibling list doesn't contain obvious alternatives for config management, so the guidance is adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_dex_poolsA

Explore DeFi CLMM pools — discover pools, compare yields, and get pool details.

Supports CLMM DEX connectors (Meteora, Raydium, Uniswap V3) for concentrated liquidity.

- list_pools: Browse available CLMM pools with filtering and sorting
- get_pool_info: Get detailed information about a specific pool (requires network + pool_address)

To manage LP positions, use `manage_executors` with `lp_executor` type.
To check on-chain positions, use `get_portfolio_overview` with `include_lp_positions=True`.

Args:
    action: Action to perform on CLMM pools.
    connector: CLMM connector name (e.g., 'meteora', 'raydium', 'uniswap'). Required.
    network: Network ID in 'chain-network' format (e.g., 'solana-mainnet-beta'). Required for get_pool_info.
    pool_address: Pool contract address (required for get_pool_info).
    page: Page number for list_pools (default: 0).
    limit: Results per page for list_pools (default: 50, max: 100).
    search_term: Search term to filter pools by token symbols (e.g., 'SOL', 'USDC').
    sort_key: Sort by field for list_pools (volume, tvl, feetvlratio, etc.).
    order_by: Sort order for list_pools ('asc' or 'desc').
    include_unknown: Include pools with unverified tokens (default: True).
    detailed: Return detailed table with more columns for list_pools (default: False).
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
actionYes
networkNo
detailedNo
order_byNodesc
sort_keyNovolume
connectorNo
search_termNo
pool_addressNo
include_unknownNo

TDQS

A4.7/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 discloses that the tool is read-only (explore), lists supported actions, and mentions default values for parameters. However, it does not explicitly state side effects, rate limits, or authentication requirements. The lack of explicit read-only declaration is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with bullet points and separate sections for actions, arguments, and cross-references. It front-loads the main purpose. However, some redundancy exists (e.g., repeating parameter details in the bullet list that are also in the schema), and the length could be trimmed slightly without losing essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (11 parameters, 2 actions, no output schema), the description is thorough. It covers usage instructions, parameter semantics, and references to sibling tools. All necessary information for correct invocation is present, with no gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description fully compensates by providing detailed explanations for all 11 parameters, including defaults and constraints (e.g., limit max 100). Each parameter's purpose and when it's required (e.g., network for get_pool_info) are clearly described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 DeFi CLMM pools, lists pools, and gets pool details. It distinguishes from siblings by referencing 'manage_executors' for LP positions and 'get_portfolio_overview' for on-chain positions, making the tool's specific role unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains when to use each action (list_pools vs get_pool_info) and provides cross-references to sibling tools for related tasks (LP management, portfolio overview). It also lists supported DEX connectors, giving clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_geckoterminalA

Explore DEX market data from GeckoTerminal (free, no API key needed).

Progressive discovery flow:
1. action="networks" → List all supported networks (solana, eth, bsc, ...)
2. action="dexes" + network → List DEXes on a network
3. action="trending_pools" (+ network) → Trending pools globally or per network
4. action="top_pools" + network (+ dex_id) → Top pools by volume on a network/dex
5. action="new_pools" (+ network) → Recently created pools
6. action="pool_detail" + network + pool_address → Detailed info for one pool
7. action="multi_pools" + network + pool_addresses → Compare multiple pools
8. action="token_pools" + network + token_address → Top pools for a token
9. action="token_info" + network + token_address → Token details (price, mcap, fdv)
10. action="ohlcv" + network + pool_address → OHLCV candle data
11. action="trades" + network + pool_address → Recent trades

Args:
    action: The data to retrieve.
    network: Network ID (e.g., 'solana', 'eth', 'bsc'). Required for most actions.
    dex_id: DEX ID filter for top_pools (e.g., 'raydium', 'uniswap_v3').
    pool_address: Pool contract address (for pool_detail, ohlcv, trades).
    pool_addresses: List of pool addresses (for multi_pools).
    token_address: Token contract address (for token_pools, token_info).
    timeframe: OHLCV interval (default: '1h'). Options: 1m, 5m, 15m, 1h, 4h, 12h, 1d.
    before_timestamp: Fetch OHLCV candles before this unix timestamp (pagination).
    currency: OHLCV price currency, 'usd' or 'token' (default: 'usd').
    token: Which token's price for OHLCV, 'base' or 'quote' (default: 'base').
    limit: Max OHLCV candles to return (default: 1000).
    trade_volume_filter: Min trade volume in USD to filter trades (optional).
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
tokenNobase
actionYes
dex_idNo
networkNo
currencyNousd
timeframeNo1h
pool_addressNo
token_addressNo
pool_addressesNo
before_timestampNo
trade_volume_filterNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It states the tool is 'free, no API key needed' and outlines the action flow. However, it does not explicitly confirm read-only behavior, error handling, rate limits, or the impact of invalid parameters. The behavioral disclosure is adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: an opening sentence, a numbered action list, then parameter definitions. It is front-loaded with the core purpose. While lengthy due to the number of actions, each sentence is necessary and earns its place. Minor redundancy could be trimmed, but overall it is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (12 parameters, 11 actions, no output schema), the description covers the tool's functionality comprehensively. It details all actions, required parameters, and optional arguments like timeframe and pagination (before_timestamp). It does not explain the return format, but that is acceptable without an output schema. Overall, it provides sufficient context for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It explains all 12 parameters with examples and default values (e.g., 'network: Network ID (e.g., solana, eth). Required for most actions.'). This adds significant meaning beyond the raw schema, though some parameters like 'token' could benefit from more context about allowed values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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: 'Explore DEX market data from GeckoTerminal'. It enumerates 11 distinct actions, each with a brief description, making the capabilities concrete and easy to understand. The name and description together unambiguously identify the tool's scope and resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a progressive discovery flow and details when to use each action. However, it does not explicitly guide the agent on when to choose this tool over sibling tools like explore_dex_pools. Usage context is implied through the action list but lacks direct comparison or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_dataA

Get market data: prices, candles, funding rates, or order book data.

Data Types:
- prices: Get latest prices for multiple trading pairs
- candles: Get OHLCV candle data for a trading pair
- funding_rate: Get perpetual funding rate (connector must have _perpetual)
- order_book: Get order book snapshot or queries

Args:
    data_type: Type of market data to retrieve ('prices', 'candles', 'funding_rate', 'order_book')
    connector_name: Exchange connector name (e.g., 'binance', 'binance_perpetual')
    trading_pairs: List of trading pairs (required for 'prices', e.g., ['BTC-USDT', 'ETH-USD'])
    trading_pair: Single trading pair (required for 'candles', 'funding_rate', 'order_book')
    interval: Candle interval for 'candles' (default: '1h'). Options: '1m', '5m', '15m', '30m', '1h', '4h', '1d'.
    days: Number of days of historical data for 'candles' (default: 30).
    query_type: Order book query type for 'order_book' (default: 'snapshot'). Options: 'snapshot',
        'volume_for_price', 'price_for_volume', 'quote_volume_for_price', 'price_for_quote_volume'.
    query_value: Value for order book queries (required if query_type is not 'snapshot').
    is_buy: Side for order book queries (default: True for buy side).
ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
is_buyNo
intervalNo1h
data_typeYes
query_typeNo
query_valueNo
trading_pairNo
trading_pairsNo
connector_nameYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full burden. It discloses that the tool reads market data and specifies which parameters are required for each data type. It does not mention side effects or rate limits, but it is clear that the tool is read-only. The structure provides good insight into behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear headings and bullet points, front-loading the purpose. It is detailed but not overly verbose; every sentence adds value. Minor redundancy (e.g., repeating enum options) but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (9 params, no output schema), the description covers all data types and their necessary parameters. It does not describe return format or pagination, but for a read tool, this is adequate. It provides enough context for an agent to select and use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning beyond the schema: it explains which parameters are required for each data type, provides examples, and defines enumeration options (e.g., interval choices, query types). Since schema coverage is 0%, this fully compensates and is essential for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 market data (prices, candles, funding rates, order book) and enumerates each data type with a specific verb (e.g., 'Get latest prices'). This is explicit and distinguishes the tool from siblings focused on other domains like DEX pools or portfolio overview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what each data type does but does not provide when-to-use advice or comparison to alternatives (e.g., when to use this vs explore_dex_pools). It implies usage through the listed data types but lacks explicit guidelines on prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_portfolio_overviewA

Get a unified portfolio overview with balances, perpetual positions, LP positions, and active orders.

This tool provides a comprehensive view of your entire portfolio by fetching data from multiple sources
in parallel. By default, it returns all four types of data, but you can filter to only include
specific sections.

Data Sources (fetched in parallel using asyncio.gather):
1. Token Balances - Holdings across all connected CEX/DEX exchanges
2. Perpetual Positions - Open perpetual futures positions from CEX
3. LP Positions (CLMM) - Real-time concentrated liquidity positions from blockchain DEXs
   - Queries database to find all pools user has interacted with
   - Calls get_positions() for each pool to fetch real-time blockchain data
   - Includes real-time fees and token amounts
4. Active Orders - Currently open orders across all exchanges

NOTE: This only shows ACTIVE/OPEN positions. For historical data, use search_history() instead.

Args:
    account_names: List of account names to filter by (optional). If empty, returns all accounts.
    connector_names: List of connector names to filter by (optional). If empty, returns all connectors.
    include_balances: Include token balances in the overview (default: True)
    include_perp_positions: Include perpetual positions in the overview (default: True)
    include_lp_positions: Include LP (CLMM) positions in the overview (default: True)
    include_active_orders: Include active (open) orders in the overview (default: True)
    as_distribution: Show token balances as distribution percentages (default: False)
    refresh: If True, refresh balances from exchanges before returning. If False, return cached state (default: True)
ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNo
account_namesNo
as_distributionNo
connector_namesNo
include_balancesNo
include_lp_positionsNo
include_active_ordersNo
include_perp_positionsNo

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 discloses key behavioral traits: fetching data in parallel with asyncio.gather, querying multiple sources, database queries for LP positions, real-time data retrieval, and refresh vs cached behavior. This provides meaningful context beyond what annotations would convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately long but well-structured with a clear overview, data source list, and parameter section. Every sentence serves a purpose, though it could be slightly more concise by merging the data source list with the parameter descriptions. It remains informative without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (8 parameters, no output schema, no annotations), the description is highly complete. It explains the data sources, filtering options, refresh behavior, and historical data separation. The only minor gap is the lack of output format description, but this is acceptable without an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

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 must compensate. It does so excellently by explaining each parameter (account_names, connector_names, include_balances, etc.), their defaults, and their effects. For example, it clarifies that 'include_lp_positions' triggers database queries and real-time blockchain calls. This adds significant value beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides a 'unified portfolio overview' with specific data types (balances, perpetual positions, LP positions, active orders). It distinguishes itself from sibling tool search_history by noting this shows only active/open positions, while search_history handles historical data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool (for a comprehensive portfolio overview) and explicitly directs users to search_history for historical data. It also details filtering options like account_names and connector_names. However, it does not cover all sibling tools or provide a comprehensive decision tree.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_botsA

Manage controller-based bots: deploy, monitor, get logs, control execution, and modify runtime configs.

⚠️ NOTE: For most trading strategies (grid, DCA, position trading), use manage_executors() instead.
Only use bots when the user EXPLICITLY asks for "bot" deployment or needs advanced features like
multi-strategy bots with centralized risk management.

Actions:
- deploy: Deploy a new bot with controller configurations (requires bot_name + controllers_config)
- status: Get status of all active bots (no additional params needed)
- logs: Get detailed logs for a specific bot (requires bot_name)
- stop_bot: Stop and archive a bot forever (requires bot_name)
- stop_controllers: Stop specific controllers in a bot (requires bot_name + controller_names)
- start_controllers: Start/resume specific controllers (requires bot_name + controller_names)
- get_config: View current configs of a running bot (requires bot_name)
- update_config: Modify config of a controller INSIDE a running bot in real-time (requires bot_name + config_name + config_data)

Args:
    action: Action to perform on bots.
    bot_name: Name of the bot (required for deploy, logs, stop_bot, stop/start_controllers, get_config, update_config).
    controllers_config: List of controller config names (required for deploy).
    account_name: Account name for deployment (default: master_account).
    max_global_drawdown_quote: Maximum global drawdown in quote currency (deploy only).
    max_controller_drawdown_quote: Maximum per-controller drawdown in quote currency (deploy only).
    image: Docker image for deployment (default: "hummingbot/hummingbot:latest").
    log_type: Type of logs to retrieve for 'logs' action ('error', 'general', 'all').
    limit: Maximum log entries for 'logs' action (default: 50, max: 1000).
    search_term: Search term to filter logs by message content (logs only).
    controller_names: List of controller names (required for stop/start_controllers).
    config_name: Name of the config to update (required for update_config).
    config_data: New configuration data (required for update_config). Must include 'controller_type' and 'controller_name'.
    confirm_override: Required True if overwriting existing config in a running bot (update_config only).
ParametersJSON Schema
NameRequiredDescriptionDefault
imageNohummingbot/hummingbot:latest
limitNo
actionYes
bot_nameNo
log_typeNoall
config_dataNo
config_nameNo
search_termNo
account_nameNomaster_account
confirm_overrideNo
controller_namesNo
controllers_configNo
max_global_drawdown_quoteNo
max_controller_drawdown_quoteNo

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 details each action's behavior, including destructive actions like stop_bot (stops and archives forever) and update_config requiring confirm_override. However, it could more explicitly state reversibility for actions like stop_controllers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with sections for general purpose, usage guidance, actions with bullet points, and parameter descriptions. It is front-loaded with key information and concise without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 14 parameters, no annotations, and no output schema, the description covers all actions and their parameter dependencies, including defaults. It provides complete guidance for the agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains each action's required parameters beyond the input schema, which has 0% coverage. It adds details like config_data must include 'controller_type' and 'controller_name', log_type enum options, and defaults for account_name and image.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 as managing controller-based bots with specific actions like deploy, monitor, logs, control execution, and config modification. It distinguishes from sibling tools like manage_executors by explicitly noting when to use bots vs. executors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use and when-not-to-use guidance, recommending manage_executors for most trading strategies and only using bots when the user explicitly asks for 'bot' deployment or needs advanced features. It names the alternative sibling tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_controllersA
Manage controller templates and saved configurations (design-time).

Works with reusable strategy definitions and parameter sets for future deployments.
Does NOT affect running bots. To modify a live bot's config, use manage_bots with action='update_config'.

⚠️ NOTE: For most trading strategies (grid, DCA, position trading), use manage_executors() instead.
Only use controllers when the user EXPLICITLY asks for "controllers", "bots", or needs advanced
multi-strategy bot deployments with centralized risk management.

Exploration flow:
1. action="list" → List all controllers and their configs
2. action="list" + controller_type → List controllers of that type with config counts
3. action="describe" + controller_name → Show config parameters template + list existing configs
4. action="describe" + config_name → Show specific config values + its controller's parameters
5. action="describe" + include_code=True → Also include the full controller source code

Modification flow:
6. action="upsert" + target="controller" → Create/update a controller template
7. action="upsert" + target="config" → Create/update a saved controller config
8. action="delete" + target="controller" → Delete a controller template
9. action="delete" + target="config" → Delete a controller config

Common Enum Values for Controller Configs:

Position Mode (position_mode):
- "HEDGE" - Allows holding both long and short positions simultaneously
- "ONEWAY" - Allows only one direction position at a time

Trade Side (side):
- 1 or "BUY" - For long/buy positions
- 2 or "SELL" - For short/sell positions
- Note: Numeric values are required for controller configs

Order Type (order_type, open_order_type, take_profit_order_type, etc.):
- 1 or "MARKET" - Market order
- 2 or "LIMIT" - Limit order
- 3 or "LIMIT_MAKER" - Limit maker order (post-only)
- Note: Numeric values are required for controller configs

Args:
    action: "list", "describe", "upsert" (create/update), or "delete"
    target: "controller" (template) or "config" (instance). Required for upsert/delete.
    controller_type: Type of controller (e.g., 'directional_trading', 'market_making', 'generic').
    controller_name: Name of the controller to describe or modify.
    controller_code: Code for controller (required for controller upsert).
    config_name: Name of the config to describe or modify.
    config_data: Configuration data (required for config upsert). Must include 'controller_type' and 'controller_name'.
    confirm_override: Required True if overwriting existing items.
    include_code: If True, include full controller source code in describe output. Default False.
ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
targetNo
config_dataNo
config_nameNo
include_codeNo
controller_codeNo
controller_nameNo
controller_typeNo
confirm_overrideNo

TDQS

A4.7/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 discloses that the tool works with design-time items and does not affect running bots. However, it omits potential destructions (e.g., deleting controllers) and authorization needs, though this is partially mitigated by the note about confirm_override.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured: it front-loads key information, uses numbered flows, and separates concerns. A bit verbose, but the organization justifies the length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 9 parameters, no annotations, and no output schema, the description is remarkably complete. It covers purpose, usage, parameter details, enum values, and alternatives, providing an agent with all necessary context to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description compensates extensively. It explains each action-target combination, provides example flows, and documents common enum values (position_mode, side, order_type) with numeric requirements, far exceeding schema information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 at design-time. It explicitly distinguishes itself from sibling tools like manage_bots (for live bot configs) and manage_executors (for most trading strategies), ensuring correct tool selection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

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 (for controllers, bots, advanced multi-strategy deployments) and when not to (for most strategies, use manage_executors). It also details the exploration and modification flows, offering clear instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_executorsA

Manage trading executors: create, search, stop, and configure preferences.

This is the DEFAULT tool for ALL trading operations. Use progressive disclosure to get
the full guide and config schema for any executor type before creating.

Executor Types (pass executor_type with no action to see full guide + schema):
- order_executor: Buy/sell orders (MARKET, LIMIT, LIMIT_MAKER, LIMIT_CHASER)
- position_executor: Directional positions with SL/TP management
- grid_executor: Grid trading for range-bound markets
- dca_executor: Dollar-cost averaging with scheduled levels
- lp_executor: CLMM LP positions on Meteora/Raydium (use explore_dex_pools first)

Actions:
- (none) + executor_type → Show full guide, config schema, and saved defaults
- create + executor_config → Create executor (merged with saved defaults)
- search → List/filter executors (add executor_id for detail)
- stop + executor_id → Stop executor (with keep_position option)
- get_logs + executor_id → Get logs (active executors only)
- get_preferences / save_preferences / reset_preferences → Manage saved defaults
- positions_summary → View all positions (add connector_name + trading_pair to filter)
- clear_position + connector_name + trading_pair → Clear externally-closed position

Args:
    action: Action to perform. Leave empty to see executor types or config schema.
    executor_type: Type of executor. Provide alone to see its full guide and config schema.
    executor_config: Configuration for creating an executor. Required for 'create' action.
    executor_id: Executor ID for 'search' (detail), 'stop', or 'get_logs' actions.
    log_level: Filter logs by level - 'ERROR', 'WARNING', 'INFO', 'DEBUG' (for get_logs).
    account_names: Filter by account names (for search).
    connector_names: Filter by connector names (for search).
    trading_pairs: Filter by trading pairs (for search).
    executor_types: Filter by executor types (for search).
    status: Filter by status - 'RUNNING', 'TERMINATED' (for search).
    cursor: Pagination cursor for search results.
    limit: Maximum results to return (default: 50, max: 1000).
    keep_position: When stopping, keep the position open instead of closing it (default: False).
    save_as_default: Save executor_config as default for this executor_type (default: False).
    preferences_content: Complete markdown content for the preferences file. Required for 'save_preferences'.
    account_name: Account name for creating executors (default: 'master_account').
    connector_name: Connector name for position filtering or clearing.
    trading_pair: Trading pair for position filtering or clearing.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
actionNo
cursorNo
statusNo
log_levelNo
executor_idNo
account_nameNo
trading_pairNo
account_namesNo
executor_typeNo
keep_positionNo
trading_pairsNo
connector_nameNo
executor_typesNo
connector_namesNo
executor_configNo
save_as_defaultNo
preferences_contentNo

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 describes many behaviors: progressive disclosure for executor types, default merging with saved defaults, pagination with cursor and limit, stop with keep_position option, and log retrieval only for active executors. It does not mention rate limits or authentication requirements, but covers core behavioral traits well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is verbose but well-structured with headings, bullet points, and clear sections. It front-loads the main purpose and then details actions and parameters. Every sentence provides useful information. However, it could be more concise; the list of executor types and actions could be summarized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (18 parameters, multiple actions, no output schema, no annotations), the description is remarkably complete. It covers all actions, parameters, defaults, executor types, and even references sibling tools (explore_dex_pools). It explains progressive disclosure and preferences management comprehensively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

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 explains every parameter in the Args list, including defaults (e.g., limit default 50, keep_position default false). It clarifies action-specific requirements (e.g., 'executor_config required for create'). Some parameters like 'cursor' and 'log_level' are explained sufficiently. The description adds significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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: 'Manage trading executors: create, search, stop, and configure preferences.' It explicitly labels itself as the 'DEFAULT tool for ALL trading operations,' which distinguishes it from sibling tools like manage_bots or manage_controllers. The listing of executor types and actions provides specific context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit instructions: 'Use progressive disclosure to get the full guide and config schema for any executor type before creating.' It explains when to use different actions (e.g., 'executor_type with no action → Show full guide'). However, it does not explicitly state when NOT to use this tool or provide clear comparisons with siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_historyA

Search historical data from the backend database.

This tool is for historical analysis, reporting, and tax purposes.
For real-time current state, use get_portfolio_overview() instead.

Data Types:
- orders: Historical order data (filled, cancelled, failed)
- perp_positions: Perpetual positions (both open and closed)
- clmm_positions: CLMM LP positions (both open and closed)

Common Filters (apply to all data types):
    account_names: Filter by account names (optional)
    connector_names: Filter by connector names (optional)
    trading_pairs: Filter by trading pairs (optional)
    status: Filter by status (optional, e.g., 'OPEN', 'CLOSED', 'FILLED', 'CANCELED')
    start_time: Start timestamp in seconds (optional)
    end_time: End timestamp in seconds (optional)
    limit: Maximum number of results (default: 50, max: 1000)
    offset: Pagination offset (default: 0)

CLMM-Specific Filters:
    network: Network filter for CLMM positions (optional)
    wallet_address: Wallet address filter for CLMM positions (optional)
    position_addresses: Specific position addresses for CLMM (optional)

Examples:
- Search filled orders: search_history("orders", status="FILLED", limit=100)
- Search closed perp positions: search_history("perp_positions", status="CLOSED")
- Search all CLMM positions: search_history("clmm_positions", limit=100)
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
statusNo
networkNo
end_timeNo
data_typeYes
start_timeNo
account_namesNo
trading_pairsNo
wallet_addressNo
connector_namesNo
position_addressesNo

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must disclose behavior. It implies read-only nature but does not explicitly state lack of side effects, rate limits, or permissions. Some context is given but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is structured into sections with clear headings and examples. It is reasonably concise given the number of parameters, though slightly verbose in places.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description provides sufficient context for an agent to select and invoke the tool. It covers data types, filters, and usage examples, though return format and errors are omitted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

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 listing and explaining each parameter with context, including examples and default values. However, some parameters (e.g., account_names) are less detailed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches historical data and lists three specific data types. It also distinguishes from sibling tool get_portfolio_overview by noting it is for real-time data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises using get_portfolio_overview for real-time queries instead. Provides detailed information on data types and filters, guiding appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_account_position_mode_and_leverageA

Set position mode and leverage for an account on a specific exchange. If position mode is not specified, will only set the leverage. If leverage is not specified, will only set the position mode.

Args:
    account_name: Account name (default: master_account)
    connector_name: Exchange connector name (e.g., 'binance_perpetual')
    trading_pair: Trading pair (e.g., ETH-USD) only required for setting leverage
    position_mode: Position mode ('HEDGE' or 'ONE-WAY')
    leverage: Leverage to set (optional, required for HEDGE mode)
ParametersJSON Schema
NameRequiredDescriptionDefault
leverageNo
account_nameYes
trading_pairNo
position_modeNo
connector_nameYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully explains the tool's behavior: it can set one or both settings depending on provided parameters. It also notes the dependency of trading_pair for leverage and position_mode for HEDGE mode. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with a clear purpose sentence followed by conditional logic and parameter descriptions. It uses a docstring style. While it could be more concise, each sentence adds value and it remains readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters, no enums, and no output schema, the description covers all relevant aspects: parameter roles, conditional requirements, and default values. It is fairly complete for an agent to understand when and how to call the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

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 add meaning. It explains defaults (account_name default 'master_account'), valid values for position_mode ('HEDGE' or 'ONE-WAY'), and context for trading_pair and leverage. This goes beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it sets position mode and leverage for an account on a specific exchange. It also explains conditional behavior (if one param missing, only sets the other), which distinguishes it from any sibling tools that might perform related but different configuration tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when each parameter is used (e.g., trading_pair only for leverage, position_mode optional) and the conditional logic. However, it does not explicitly compare to alternative tools or provide guidance on when to choose this tool over others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

setup_connectorA

Setup or delete an exchange connector for an account with credentials using progressive disclosure.

This tool guides you through the entire process of connecting an exchange with a four-step flow:
1. No parameters → List available exchanges
2. Connector only → Show required credential fields
3. Connector + credentials, no account → Select account from available accounts
4. All parameters → Connect the exchange (with override confirmation if needed)

Delete flow (action="delete"):
1. action="delete" only → List all accounts and their configured connectors
2. action="delete" + connector → Show which accounts have this connector configured
3. action="delete" + connector + account → Delete the credential

Args:
    action: Action to perform. 'setup' (default) to add/update credentials, 'delete' to remove credentials.
    connector: Exchange connector name (e.g., 'binance', 'binance_perpetual'). Leave empty to list available connectors.
    credentials: Credentials object with required fields for the connector. Leave empty to see required fields first.
    account: Account name to add credentials to. If not provided, prompts for account selection.
    confirm_override: Explicit confirmation to override existing connector. Required when connector already exists.
ParametersJSON Schema
NameRequiredDescriptionDefault
actionNo
accountNo
connectorNo
credentialsNo
confirm_overrideNo

TDQS

A4.6/5.0
Behavior5/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 thoroughly explains the multi-step flow, including override confirmation and the two actions. The behavioral traits (progressive disclosure, error handling via account selection) are well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with numbered steps and bullet points, front-loading the purpose. However, it is somewhat lengthy and repeats information (e.g., the args section echoes the step list). Could be slightly more concise, but still clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the tool (5 parameters, interactive flow) and no output schema, the description covers the process adequately. It lacks information about return values or error handling after each step, but for a setup tool the flow is detailed enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

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 compensates by explaining each parameter's role in the flow. For example, 'action' is described with its possible values, and 'credentials' is related to required fields. All 5 parameters are covered with context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 setting up or deleting exchange connectors with a progressive disclosure approach. It distinguishes between the two flows and provides a specific verb+resource. Compared to sibling tools like configure_server or manage_bots, it uniquely handles exchange connector management.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit step-by-step guidance for both setup and delete flows, indicating when to use each parameter. It implicitly tells when to use the tool (for connecting an exchange) but does not explicitly state when not to use it or mention alternatives. However, the progressive disclosure is a strong guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  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

Scored across 11 tools

Disambiguation4/5

Most tools have distinct purposes, but explore_dex_pools and explore_geckoterminal overlap in DEX market data. However, descriptions clarify their different scopes (CLMM pools vs. general market data via GeckoTerminal), so only minor ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (e.g., configure_server, explore_dex_pools, manage_executors). The verbs are appropriate for the action, and there is no mixing of conventions.

Tool Count5/5

11 tools is a well-scoped number for a trading bot MCP. It covers server configuration, connector setup, market data, portfolio, history, bot/controller/executor management without being overwhelming or sparse.

Completeness5/5

The tool surface provides comprehensive coverage for the domain: configuration, market data, portfolio overview, order/position execution, history search, and bot management. There are no obvious gaps that would cause agent failures.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables Claude and Gemini CLI to interact with Hummingbot for automated cryptocurrency trading across multiple exchanges.
    11
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server that provides AI assistants like Claude with direct access to MetaAPI trading platform. Trade forex, stocks, and commodities through natural language conversations.
    1
    -