skillbase/hummingbot-mcp
SkillComplete 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")` → connect326
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 config332
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 order339
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