list_exchangesLABSCO SUMMARY
The keys are not where the agent is.
Most trading integrations put an API key in the same config the model's process reads, and hope. Here signing happens in a separate process, the key is used inline and dropped, and spending limits are evaluated before it is decrypted at all — so a compromised or confused agent hits a policy check rather than a wallet. It costs you a setup step and a password prompt per session, which is a fair trade for that. Everything else is the usual caution about a model that can place orders: the write tools are real.
What it is
A trading server for AI agents, with an unusual amount of attention paid to where the keys live. A separate vault process holds your wallet key and exchange credentials encrypted on disk; the MCP process the client launches knows only a socket path, so no credential ever enters a config file, the agent's environment, or the client's memory.
What you get
- 15 tools across market data, account, trading, Cardano DEX and strategy
- Market data by exchange and symbol: real-time price with bid, ask, spread and volume, order-book depth, recent trades with a buy/sell summary, and candlestick data —
get_ticker,get_orderbook,get_trades,get_ohlcv,list_exchanges - Account reads: balances across all assets or one, and open orders across the account or by symbol —
get_balance,list_orders - Order placement and cancellation — limit or market orders, cancel one by id, or cancel everything on a pair —
create_order,cancel_order,cancel_all_orders - Cardano DEX data: an aggregated token price across DEXes, and liquidity-pool discovery with a minimum-liquidity filter —
get_cardano_price,discover_pools - Grid trading as a managed strategy rather than a loop you write: start it between a lower and upper price with a level count and total amount, check its status, stop it with or without cancelling its orders —
start_grid_strategy,get_strategy_status,stop_strategy - A policy engine checked before the private key is touched at all — per-transaction and per-day spend caps, and an allowed-chain list
- A hosted option priced per call, where reads and writes carry different prices and payment settles in USDC on Base without needing gas
- One running vault serving every client, so several MCP clients share the same unlocked process rather than each holding credentials
Requirements
Node.js 20 or later for the local path. Install @qbtlabs/openmm-mcp globally and run the setup command, which writes the client config for Claude Desktop, Claude Code, Cursor or Windsurf. Then initialize the vault — it creates an encrypted file in your home directory holding a generated or imported wallet key plus any exchange credentials — and start the vault process, unlocking it with your password once per session. From then on the only value in any config is the socket path. A quick-start path exists that skips the vault and puts exchange keys directly in the client's env block. For the hosted server there is no local install at all: connect to the streamable-HTTP endpoint and pay per call. The package is 1.0.13 in package.json.
Setup effort
Follow the published steps — npm install -g @qbtlabs/openmm-mcp
USE CASES
Reading a market before deciding anything
Pull the ticker, the book depth and recent trades for the pair, and look at the candles over the timeframe that matters.
Checking where you stand across an exchange
Read balances and open orders in the conversation, instead of opening the exchange UI to answer a one-line question.
Running a grid without writing the loop
Start the strategy between your bounds with a level count and size, watch its status, and stop it cleanly with its orders cancelled.
Keeping an agent inside a budget
Set per-transaction and daily caps in the policy engine, so a limit is enforced before the signing key is ever unlocked.
Pricing a Cardano token honestly
Take the aggregated price across DEXes rather than one pool's quote, and check which pools have the liquidity to support a trade.
15 tools
Listed in project docs. Your client may show a different list.
get_tickerget_orderbookget_tradesget_ohlcvget_balancelist_orderscreate_ordercancel_ordercancel_all_ordersget_cardano_pricediscover_poolsstart_grid_strategystop_strategyget_strategy_statusBEFORE YOU INSTALL
What to know first
Tools you get
15 tools named in the project's documentation.
Requires
Node.js 20 or later
Where it runs
All 4 documented clients run the server on your machine.
INSTALLATION
Connect your client
Server setup
npm
npm install -g @qbtlabs/openmm-mcp
openmm-mcp --setup
openmm-init
openmm serveHosted endpoint
https://mcp.openmm.io/mcpAdd this hosted endpoint to your MCP client.
MCP Clients
Claude Desktop, Claude Code, Cursor, Windsurf
{
"mcpServers": {
"openmm": {
"command": "node",
"args": [
"<YOUR_PATH_TO_OPENMM_MCP>/dist/index.js"
],
"env": {
"MCP_TRANSPORT": "stdio",
"OPENMM_SOCKET": "/tmp/openmm.sock",
"PAYMENT_SERVER": "https://mcp.openmm.io",
"X402_TESTNET": "true"
}
}
}
}Only needed if you skip openmm-mcp --setup, which writes this for you. <YOUR_PATH_TO_OPENMM_MCP> is the actual install path (for a global npm install, the @qbtlabs/openmm-mcp folder under npm root -g). For Claude Desktop, use the full path to node (from which node). openmm serve must be running so the socket at /tmp/openmm.sock exists.