MCP for AI agents
Give Claude Desktop, Claude Code, Cursor or any MCP client a PropDAO account. Twelve tools, one API key.
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
| Tool | Arguments | Description |
|---|---|---|
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_account | accountId | Live state: balance, equity, open positions, resting orders |
get_risk | accountId | Call before every trade. Equity, floor, roomUsd, breached |
get_positions | accountId | Open positions at live marks |
get_orders | accountId | Resting orders and live TWAPs |
get_trades | accountId, limit=50 | Closed trades, newest first |
Trade
| Tool | Arguments | Description |
|---|---|---|
place_order | accountId, symbol, side, qty, orderType=market, leverage, limitPrice, triggerPrice, sl, tp, tif, reduceOnly, twapMs, scaleStart, scaleEnd, scaleCount | Place any order. qty in units of the asset. sl/tp on market and limit only |
twap | accountId, symbol, side, qty, minutes (5–10080), leverage, minPrice, maxPrice | Work a quantity in over N minutes; crossing a price bound terminates it |
set_risk | accountId, positionId, sl, tp | Set or clear SL/TP by price (null clears) |
close_position | accountId, positionId, percent=1 | Close all or part of a position |
cancel_order | accountId, orderId | Cancel a resting order |
cancel_twap | accountId, twapId | Stop a running TWAP |
Prompts that work EXAMPLES
| You say | What 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.