Skip to main content
Glama
hummingbot-mcp

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

Inputs: name, host, port, username, +1 more.

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

Inputs: action (required), connector, network, pool_address, +7 more.

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

Inputs: action (required), network, dex_id, pool_address, +8 more.

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

Inputs: data_type (required), connector_name (required), trading_pairs, trading_pair, +5 more.

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)

Inputs: account_names, connector_names, include_balances, include_perp_positions, +4 more.

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

Inputs: action (required), bot_name, controllers_config, account_name, +10 more.

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.

Inputs: action (required), target, controller_type, controller_name, +5 more.

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.

Inputs: action, executor_type, executor_config, executor_id, +14 more.

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)

Inputs: data_type (required), account_names, connector_names, trading_pairs, +8 more.

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)

Inputs: account_name (required), connector_name (required), trading_pair, position_mode, +1 more.

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.

Inputs: action, connector, credentials, account, +1 more.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4.4/5.0

    Scored across 11 tools

    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.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      F
      maintenance
      An MCP server that enables Claude and Gemini CLI to interact with Hummingbot for automated cryptocurrency trading across multiple exchanges.
      11
      27 PyPI
      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.
      19 PyPI
      1,134
      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
      1,280 npm
      MIT