MCP server for pex.bot simulated spot and futures trading, competitions, portfolios, and AI analytics.
pexbot-mcp presents a moderately well-structured trading API wrapper with 39 tools. Most tools have descriptions (95% coverage) and input schemas with typed parameters (90% coverage). However, several critical gaps prevent a higher score: (1) Output schemas are undocumented across all tools, responses are serialized JSON without specification of return structure, field names, or pagination details. (2) Many parameter descriptions are minimal or lack actionable constraints (e.g., symbol parameters lack format guidance, limit ranges often missing). (3) Error handling is generic (try/catch → error.message) without recovery guidance or error classification. (4) Some parameters are underspecified for practical LLM use (e.g., trading_account is described but no guidance on how to discover valid account IDs). (5) Tool composition could be improved, related discovery tools (list) exist but lack consistent return structures. Strengths: tool names follow verb_noun convention consistently (get_, place_, cancel_, etc.); most parameters have basic descriptions; credential injection is handled server-side via environment variables (PEXBOT_API_KEY, PEXBOT_AGENT_REGISTER_SECRET); core trading workflows are well-separated. The server appears production-ready for a domain-specific API but lacks the polish expected of consumer-facing agent tooling.
Register this device for a legacy account. This no longer grants seed capital.
Analyze portfolio composition, concentration, and risk metrics.
Cancel an open futures order by ID.
Cancel an open spot order by ID.
Create a new scoped trading API key. The secret is returned only once.
Get spot balances for the selected trading account.
Get spot OHLCV candles for chart or analysis.
Output schemas completely undocumented. All 39 tools lack explicit documentation of return structure, field types, and pagination patterns. LLMs cannot infer what fields to expect or how to chain tool results.
Parameter constraints missing or vague. 'symbol' appears in 15+ tools with no format guidance. 'limit' and 'depth' parameters lack range documentation in descriptions (e.g., get_orderbook depth accepts 1-100 but description doesn't state this, requiring LLMs to deduce from schema). Email validation is enforced via zod but users see no guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Get details of a single competition by ID.
Get the leaderboard for a competition.
List all active trading competitions.
Get persisted daily spot OHLCV bars.
Get spot trade fills with cursor pagination.
Get futures account balance, including all positions and collateral.
Get futures OHLCV candles.
Get futures trade fills with cursor pagination.
List every active futures market.
Get a single futures order by ID.
List open or closed futures orders.
Get one futures ticker.
List every active spot market in one request.
Get user notifications and alerts.
Get a single spot order by ID.
Get a spot order-book snapshot.
List open or closed spot orders for the trading account.
Get historical portfolio performance metrics and value curve.
Get a timestamped snapshot of a portfolio's balance and positions.
Get the current signed-in user profile.
Get close-price series for inline visualization.
Get one spot ticker.
Get all spot tickers in one bulk request. Prefer this over calling get_ticker once per symbol.
Get persisted spot trade history with cursor pagination.
Get recent in-memory spot trades.
List API-key metadata. Requires an interactive session; raw keys are never returned.
Create a user session for profile, competition, social, notification, and credential-management tools.
Mark a notification as read.
Place a new futures isolated or cross-margin order.
Place a new spot limit or market order.
Register a new AI account, solve the server Proof-of-Work challenge, and create an API key. Production registration may require PEXBOT_AGENT_REGISTER_SECRET.
Revoke one API key by ID. This cannot be undone.
Error handling is generic and non-actionable. All tools wrap errors in try/catch blocks returning only error.message. No error classification (retryable vs user-fixable vs fatal), no recovery guidance, no structured error responses. Example: place_order failure returns raw error text instead of 'Invalid symbol. Valid symbols: BTC-USD, ETH-USD, ...' or 'Insufficient balance. Required: 0.5 BTC, Available: 0.2 BTC.'
Irreversible operations (revoke_api_key, place_order, cancel_order, delete) lack confirmation/dry-run pattern. An agent can revoke all API keys or place large trades without a confirmation step. Risk of catastrophic mistakes.
Parameter 'trading_account' (optional sub-account selector) lacks guidance on discovery. Description says 'Override PEXBOT_TRADING_ACCOUNT' but LLMs have no tool to list available trading accounts or understand what valid values are. Forces agents into dead-end state when trying to trade on alternate accounts.
Minimal descriptions on read-only discovery tools. get_markets, get_tickers, get_competitions, get_futures_markets all have <60 char descriptions ('List every...', 'Get all...'). Insufficient to guide LLM tool selection or explain when to call vs alternatives.
Pagination support is inconsistent. get_trade_history, get_daily_ohlcv, get_candles support 'limit' and 'before_id'/'offset' but output schema is not documented, so LLMs cannot determine whether 'next_cursor' or 'total_count' is returned. Some list tools (get_markets, get_tickers) may return unbounded results without documented pagination.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are missing. Modern MCP spec recommends annotations on tool metadata. place_order, cancel_order, revoke_api_key should be marked destructiveHint=true; get_* tools should be marked readOnlyHint=true. Enables LLM safety plugins and audit trails.