MCP server for Alpaca trading platform integration, providing tools for account management, market data retrieval, and order execution
Server has 9 tools with basic descriptions and input schemas, but significant quality gaps. All tools have descriptions (good), but most are under 100 chars and lack actionable context. Input schemas present but incomplete: many parameters lack type constraints (e.g., 'status' in get_orders accepts free-form strings instead of enum). No output schemas documented. Error handling is minimal, most tools return raw exception strings rather than recovery guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. Parameter descriptions are generic ('Stock ticker symbol') without format constraints or examples of valid values. Tools like place_market_order and close_all_positions are high-risk but lack confirmation/dry-run patterns. No pagination support despite tools returning lists. Naming is clear (verb_noun pattern), but composition could be tighter, place_market_order and place_limit_order could share a unified order interface.
Cancel all open orders.
Close all open positions.
Get the current account information including balances and status.
Get orders with the specified status.
Get all current positions in the portfolio.
Get historical price bars for a stock.
Get the latest quote for a stock.
No output schemas documented. Tools return free-text strings instead of structured JSON. LLMs cannot parse results reliably or chain downstream calls.
Parameter 'status' in get_orders accepts free-form strings ('open', 'closed', 'all') but is not declared as an enum. LLMs may pass invalid values like 'pending' or 'completed'.
Destructive tools (place_market_order, place_limit_order, cancel_all_orders, close_all_positions) lack confirmation/dry-run patterns and tool annotations (destructiveHint). No recovery guidance if agent makes a mistake.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Place a limit order.
Place a market order.
Error handling returns raw exception strings ('Error fetching quote for {symbol}: {str(e)}') instead of actionable recovery guidance. LLMs cannot determine if error is retryable or user-fixable.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. Agents cannot reason about side effects or retry safety.