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.
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.
- 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
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.
One command — npm install -g @qbtlabs/openmm-mcp
