MCP for AI agents

Give Claude Desktop, Claude Code, Cursor or any MCP client a PropDAO account. Twelve tools, one API key.

Live environment — every account trades on live Hyperliquid prices with simulated capital. No sandbox needed: an evaluation account is the sandbox.
API in testing — the v1 API and SDKs are in open beta. Endpoints, fields and error shapes can change without notice, and downtime is possible. Don't rely on it for anything you can't re-run.

Setup REQUIRED

The MCP server exposes the whole API as 12 tools so Claude Desktop, Claude Code, Cursor or any MCP client can trade an account. It is a thin wrapper over the JavaScript SDK.

Build

# until it is on npm: clone the SDK repo and build the server
cd propdao-sdk/mcp && npm install && npm run build      # -> dist/index.js

Claude Desktop

claude_desktop_config.json:

{
  "mcpServers": {
    "propdao": {
      "command": "node",
      "args": ["/absolute/path/to/propdao-sdk/mcp/dist/index.js"],
      "env": { "PROPDAO_API_KEY": "pd_live_..." }
    }
  }
}

Claude Code

claude mcp add propdao -e PROPDAO_API_KEY=pd_live_... -- node /absolute/path/to/propdao-sdk/mcp/dist/index.js

Cursor

Settings → MCP → Add server, same command / args / env as above.

Once published: "command": "npx", "args": ["-y", "@propdao/mcp"].

Tools 12 TOOLS

Every tool that acts on an account takes accountId — get it from list_accounts first.

Read

ToolArgumentsDescription
get_markets—Every tradable symbol with max leverage, lot step, and the fee schedule
list_accounts—Accounts this key can trade, with status and balance
get_accountaccountIdLive state: balance, equity, open positions, resting orders
get_riskaccountIdCall before every trade. Equity, floor, roomUsd, breached
get_positionsaccountIdOpen positions at live marks
get_ordersaccountIdResting orders and live TWAPs
get_tradesaccountId, limit=50Closed trades, newest first

Trade

ToolArgumentsDescription
place_orderaccountId, symbol, side, qty, orderType=market, leverage, limitPrice, triggerPrice, sl, tp, tif, reduceOnly, twapMs, scaleStart, scaleEnd, scaleCountPlace any order. qty in units of the asset. sl/tp on market and limit only
twapaccountId, symbol, side, qty, minutes (5–10080), leverage, minPrice, maxPriceWork a quantity in over N minutes; crossing a price bound terminates it
set_riskaccountId, positionId, sl, tpSet or clear SL/TP by price (null clears)
close_positionaccountId, positionId, percent=1Close all or part of a position
cancel_orderaccountId, orderIdCancel a resting order
cancel_twapaccountId, twapIdStop a running TWAP

Prompts that work EXAMPLES

You sayWhat the agent does
“Check my PropDAO risk and buy 0.01 BTC at 2x if there’s more than $500 of room.”list_accounts → get_risk → place_order
“Show my open positions with unrealised PnL and tighten every stop to 1% below mark.”get_positions → set_risk ×N
“Work 0.5 ETH into a long over the next 45 minutes, don’t pay above 2,700.”twap with minutes=45; the model should read get_markets for the cap first
“Flatten everything and cancel all working orders.”get_positions → close_position ×N → get_orders → cancel_order ×N
“How did I do this week?”get_trades then summarise

Rules for the agent PROMPT

Put this in the system prompt / CLAUDE.md / .cursorrules of whatever drives the MCP server. The tool descriptions carry the risk rule too, because models read them at the moment of choosing.

You trade a PropDAO prop-firm account through MCP tools.

1. Call get_risk before every trade. roomUsd is the whole budget; size each
   position so its stop-loss loss is a fraction of it (a quarter is sane).
2. qty is in units of the asset (0.01 BTC), never dollars. Read lotStep and
   maxLeverage from get_markets and round qty to lotStep.
3. Symbols are <COIN>USDC: BTCUSDC, ETHUSDC, NVDAUSDC.
4. To close, call close_position. Never send the opposite side.
5. Market orders fill in the response; read `status`. Everything else rests -
   check get_orders.
6. TWAPs need at least $100 notional.
7. Hold a position at least 1 s before closing and leave 0.5 s between market
   executions; a 400 "Hold positions 1s" means wait and resend.
8. A 403 "Max drawdown breached" means the account is over. Stop.
9. Never print or log the API key.

Security READ

The key has the same power as your login on every account you own. Treat the MCP config file as a secret. If you share a machine, use a dedicated OS user or a key you can revoke in Settings → Developers. There is no read-only key yet — say so in Discord if you need one.