Workspace — AI teams that work for you 24/7
Explore

skillbase/hummingbot-mcp

Skill

Complete reference for operating Hummingbot via MCP — all 11 tools with exact parameters, progressive disclosure flows, and operational workflows. Use whenever interacting with Hummingbot: deploying bots, querying market data, managing connectors, configuring strategies, executing trades, exploring DEX pools, or any Hummingbot operation through MCP.

SKILL.md
47
Hummingbot runs as a sidecar with an MCP SSE endpoint exposing exactly 11 tools.
48
All tools follow a progressive disclosure pattern: call with no/minimal params to discover options,
49
then add params to drill down and execute. Source: https://github.com/hummingbot/mcp
54
## The 11 MCP Tools
55

56
### 1. `configure_server`
57
Configure the Hummingbot API server connection.
58

59
```
60
configure_server(
61
  name: str?,         # server name
62
  host: str?,         # API host
63
  port: int?,         # API port
64
  username: str?,     # HTTP Basic Auth user
65
  password: str?      # HTTP Basic Auth password
66
)
67
```
68
- No params → show current config
69
- Any params → update and reconnect (only provided params change)
70

71
### 2. `setup_connector`
72
Setup or delete exchange connectors with credentials.
73

74
```
75
setup_connector(
76
  action: "setup" | "delete"?,
77
  connector: str?,            # exchange name (e.g. "binance", "okx")
78
  credentials: dict?,         # API key/secret/passphrase
79
  account: str?,              # account name
80
  confirm_override: bool?     # confirm replacing existing credentials
81
)
82
```
83

84
**Setup flow (progressive disclosure):**
85
1. No params → list all available exchanges
86
2. `connector="binance"` → show required credential fields for that exchange
87
3. `connector + credentials` → list available accounts to attach to
88
4. `connector + credentials + account` → connect
89

90
**Delete flow:**
91
1. `action="delete"` → list accounts and their connectors
92
2. `+ connector` → show which accounts have it
93
3. `+ connector + account` → delete
94

95
### 3. `get_portfolio_overview`
96
Unified view of balances, positions, and orders.
97

98
```
99
get_portfolio_overview(
100
  account_names: list[str]?,        # filter by accounts
101
  connector_names: list[str]?,      # filter by exchanges
102
  include_balances: bool = True,
103
  include_perp_positions: bool = True,
104
  include_lp_positions: bool = True,
105
  include_active_orders: bool = True,
106
  as_distribution: bool = False,    # show as % distribution
107
  refresh: bool = True              # fetch fresh data vs cache
108
)
109
```
110

111
Fetches 4 data sources in parallel: token balances, perpetual positions, CLMM LP positions (with real-time blockchain data), active orders. Only shows ACTIVE/OPEN items. For historical data use `search_history`.
112

113
### 4. `set_account_position_mode_and_leverage`
114
Configure perpetual trading settings.
115

116
```
117
set_account_position_mode_and_leverage(
118
  account_name: str,          # required
119
  connector_name: str,        # required
120
  trading_pair: str?,         # required for leverage
121
  position_mode: str?,        # "HEDGE" or "ONE-WAY"
122
  leverage: int?              # leverage multiplier
123
)
124
```
125

126
### 5. `get_market_data`
127
Real-time and historical market data from connected exchanges.
128

129
```
130
get_market_data(
131
  data_type: "prices" | "candles" | "funding_rate" | "order_book",
132
  connector_name: str,                    # exchange name
133
  trading_pairs: list[str]?,              # for prices (multiple)
134
  trading_pair: str?,                     # for candles/book (single)
135
  interval: str = "1h",                  # 1m, 5m, 15m, 30m, 1h, 4h, 1d
136
  days: int = 30,                        # candle history depth
137
  query_type: str?,                      # order book query mode
138
  query_value: float?,                   # value for order book query
139
  is_buy: bool = True                    # direction for order book query
140
)
141
```
142

143
**Order book query types:**
144
- `snapshot` — full order book
145
- `price_for_volume` — what price to fill X base tokens
146
- `volume_for_price` — how much volume at price X
147
- `quote_volume_for_price` — quote volume at price X
148
- `price_for_quote_volume` — price to fill X quote tokens
149

150
Use `price_for_volume` before large orders to estimate slippage.
151

152
### 6. `manage_controllers`
153
Design-time management of strategy templates and configs. Does NOT affect running bots.
154

155
```
156
manage_controllers(
157
  action: "list" | "describe" | "upsert" | "delete",
158
  target: "controller" | "config"?,
159
  controller_type: "directional_trading" | "market_making" | "generic"?,
160
  controller_name: str?,
161
  controller_code: str?,          # Python code for custom controllers
162
  config_name: str?,
163
  config_data: dict?,             # YAML config as dict
164
  confirm_override: bool = False,
165
  include_code: bool = False      # include source code in describe
166
)
167
```
168

169
**Exploration flow:**
170
1. `action="list"` → list all controller types
171
2. `+ controller_type="market_making"` → list controllers of that type
172
3. `+ controller_name="pmm_simple"` → describe controller schema + params
173
4. `+ config_name="my_config"` → describe saved config
174
5. `+ include_code=True` → include Python source
175

176
**Available controllers:**
177
- **market_making**: `dman_maker_v2`, `pmm_dynamic`, `pmm_simple`
178
- **directional_trading**: `ai_livestream`, `bollinger_v1`, `bollinger_v2`, `dman_v3`, etc.
179
- **generic**: `arbitrage_controller`, `grid_strike`, `hedge_asset`, etc.
180

181
**Common enum values in configs:**
182
- position_mode: `HEDGE`, `ONEWAY`
183
- side: `1` = BUY, `2` = SELL
184
- order_type: `1` = MARKET, `2` = LIMIT, `3` = LIMIT_MAKER
185

186
### 7. `manage_bots`
187
Runtime bot management: deploy, monitor, control.
188

189
```
190
manage_bots(
191
  action: "deploy" | "status" | "logs" | "stop_bot" | "stop_controllers" | "start_controllers" | "get_config" | "update_config",
192
  bot_name: str?,
193
  controllers_config: list[str]?,            # config names to deploy
194
  account_name: str? = "master_account",
195
  max_global_drawdown_quote: float?,         # portfolio-level stop loss ($)
196
  max_controller_drawdown_quote: float?,     # per-controller stop loss ($)
197
  image: str = "hummingbot/hummingbot:latest",
198
  log_type: "error" | "general" | "all" = "all",
199
  limit: int = 50,
200
  search_term: str?,                         # filter logs
201
  controller_names: list[str]?,              # for stop/start specific controllers
202
  config_name: str?,                         # for update_config
203
  config_data: dict?,                        # new config values
204
  confirm_override: bool = False
205
)
206
```
207

208
**Key actions:**
209
- `deploy`: bot_name + controllers_config + account_name. Set drawdown limits here.
210
- `status`: no params → all bots. bot_name → specific bot.
211
- `logs`: bot_name required. Use search_term to filter.
212
- `stop_bot`: graceful stop of entire bot
213
- `stop_controllers` / `start_controllers`: selective control of controllers within a bot
214
- `get_config` / `update_config`: runtime config modification
215

216
**Built-in risk controls:**
217
- `max_global_drawdown_quote` — stops ALL controllers when total loss exceeds this (in quote currency $)
218
- `max_controller_drawdown_quote` — stops individual controller when its loss exceeds this
219

220
### 8. `manage_executors`
221
**The primary trading tool.** Direct order execution and position management.
222

223
```
224
manage_executors(
225
  action: "create" | "search" | "stop" | "get_logs" | "get_preferences" | "save_preferences" | "reset_preferences" | "positions_summary" | "clear_position"?,
226
  executor_type: str?,              # see types below
227
  executor_config: dict?,           # execution params
228
  executor_id: str?,                # for stop/logs
229
  account_names: list[str]?,
230
  connector_names: list[str]?,
231
  trading_pairs: list[str]?,
232
  executor_types: list[str]?,       # filter by type
233
  status: str?,                     # filter by status
234
  cursor: str?,                     # pagination
235
  limit: int = 50,
236
  keep_position: bool = False,      # on stop: keep or close position
237
  save_as_default: bool = False,
238
  preferences_content: str?,
239
  account_name: str?,
240
  connector_name: str?,
241
  trading_pair: str?
242
)
243
```
244

245
**Executor types:**
246
- `order_executor` — single order: MARKET, LIMIT, LIMIT_MAKER, LIMIT_CHASER
247
- `position_executor` — directional trade with stop-loss and take-profit
248
- `grid_executor` — grid of orders in a price range
249
- `dca_executor` — dollar-cost averaging
250
- `lp_executor` — CLMM liquidity provision on Meteora/Raydium
251

252
**Progressive disclosure:** call with just `executor_type` to get full guide + schema + current defaults.
253

254
**Preferences:** save default execution settings per executor type to avoid re-specifying common params.
255

256
### 9. `search_history`
257
Query historical data from the database.
258

259
```
260
search_history(
261
  data_type: "orders" | "perp_positions" | "clmm_positions",
262
  account_names: list[str]?,
263
  connector_names: list[str]?,
264
  trading_pairs: list[str]?,
265
  status: str?,
266
  start_time: int?,          # unix timestamp
267
  end_time: int?,            # unix timestamp
268
  limit: int = 50,
269
  offset: int = 0,
270
  network: str?,             # CLMM filter
271
  wallet_address: str?,      # CLMM filter
272
  position_addresses: list[str]?  # CLMM filter
273
)
274
```
275

276
### 10. `explore_dex_pools`
277
Discover CLMM pools on supported DEXs.
278

279
```
280
explore_dex_pools(
281
  action: "list_pools" | "get_pool_info",
282
  connector: str?,           # "meteora", "raydium", "uniswap_v3"
283
  network: str?,
284
  pool_address: str?,        # for get_pool_info
285
  page: int = 0,
286
  limit: int = 50,
287
  search_term: str?,         # filter by token name
288
  sort_key: str? = "volume", # sort field
289
  order_by: str? = "desc",
290
  include_unknown: bool = True,
291
  detailed: bool = False
292
)
293
```
294

295
### 11. `explore_geckoterminal`
296
Free DEX market data from GeckoTerminal (no API key needed).
297

298
```
299
explore_geckoterminal(
300
  action: "networks" | "dexes" | "trending_pools" | "top_pools" | "new_pools" | "pool_detail" | "multi_pools" | "token_pools" | "token_info" | "ohlcv" | "trades",
301
  network: str?,
302
  dex_id: str?,
303
  pool_address: str?,
304
  pool_addresses: list[str]?,
305
  token_address: str?,
306
  timeframe: str = "1h",          # 1m, 5m, 15m, 1h, 4h, 12h, 1d
307
  before_timestamp: int?,
308
  currency: str = "usd",
309
  token: str = "base",
310
  limit: int = 1000,
311
  trade_volume_filter: float?
312
)
313
```
314

315
**Discovery flow:** networks → dexes → trending_pools/top_pools/new_pools → pool_detail → ohlcv → trades
316

317
Useful for researching DEX markets without connecting an exchange.
318

319
## Operational Workflows
320

321
### First-time setup
322
1. `configure_server()` → verify connection
323
2. `setup_connector()` → list exchanges
324
3. `setup_connector(connector="binance")` → see required fields
325
4. `setup_connector(connector="binance", credentials={...}, account="main")` → connect
326
5. `get_portfolio_overview()` → verify balances appear
327

328
### Deploy a market making bot
329
1. `manage_controllers(action="list", controller_type="market_making")` → see available controllers
330
2. `manage_controllers(action="describe", controller_name="pmm_simple")` → get config schema
331
3. `manage_controllers(action="upsert", target="config", config_name="my_pmm", config_data={...})` → save config
332
4. `manage_bots(action="deploy", bot_name="mm-bot-1", controllers_config=["my_pmm"], max_global_drawdown_quote=500)` → deploy
333
5. `manage_bots(action="status", bot_name="mm-bot-1")` → verify running
334
6. `get_portfolio_overview(include_active_orders=True)` → verify orders placed
335

336
### Quick manual trade
337
1. `manage_executors(executor_type="order_executor")` → get schema and defaults
338
2. `manage_executors(action="create", executor_type="order_executor", executor_config={...})` → place order
339
3. `manage_executors(action="search", status="active")` → monitor
340

341
### Monitor operations
342
1. `manage_bots(action="status")` → all bot statuses
343
2. `get_portfolio_overview()` → balances + positions + orders
344
3. `manage_executors(action="search", status="active")` → active executors
345
4. `manage_bots(action="logs", bot_name="mm-bot-1", log_type="error")` → check for errors
346

347
### Research DEX opportunities
348
1. `explore_geckoterminal(action="trending_pools", network="solana")` → find hot pools
349
2. `explore_geckoterminal(action="pool_detail", network="solana", pool_address="...")` → pool details
350
3. `explore_dex_pools(action="list_pools", connector="raydium")` → pools available for LP
351
4. `explore_dex_pools(action="get_pool_info", network="solana", pool_address="...")` → detailed info
352

353
### Emergency stop
354
1. `manage_bots(action="stop_bot", bot_name="mm-bot-1")` → stop specific bot
355
2. `get_portfolio_overview(include_active_orders=True)` → verify no orphan orders
356
3. `get_portfolio_overview()` → snapshot state for incident analysis
362
- Always use progressive disclosure: call tools with minimal params first to discover options, then add params. This prevents errors from wrong parameter values.
363
- `manage_executors` is the primary trading tool — use it for all order execution, not manage_bots
364
- `manage_controllers` is design-time only — changes here do NOT affect running bots. Use `manage_bots(action="update_config")` for runtime changes.
365
- Always set `max_global_drawdown_quote` when deploying bots — this is the built-in circuit breaker
366
- Use `get_portfolio_overview` as the first diagnostic step for any issue — it shows the full picture
367
- Gateway tools (swap, container lifecycle, config) are NOT exposed via MCP — DEX operations go through `manage_executors(executor_type="lp_executor")` and `explore_dex_pools`
368
- `explore_geckoterminal` requires no exchange connection — use it for free market research
369
- Pagination: `search_history` uses offset/limit, `manage_executors` search uses cursor/limit