Server has 8 tools with clear verb-noun naming (get_, list_) and reasonable descriptions (avg ~150 chars). All tools are READ_ONLY, reducing risk. However, input schemas lack formal type constraints (no enums for order_status despite accepting only 4 values), parameter descriptions are minimal, and output schemas are entirely undocumented. Tools return unstructured strings rather than structured JSON, forcing LLMs to parse text. Error handling is present but generic ('❌ Error...'). No pagination support despite list_positions and list_orders potentially returning large datasets.
Show account details like cash, portfolio value, and buying power.
Get historical daily closing prices for a stock.
Show portfolio allocation by stock.
Fetch recent news headlines for a stock symbol.
Get a comprehensive snapshot of a stock's latest trading activity. This includes: - Last traded price and timestamp - Current ask and bid prices - Daily high, low, and previous close
List orders by status: 'open', 'closed', 'filled', or 'canceled'. Args: order_status: The status of orders to list. - 'open': Currently active orders not yet filled or canceled - 'closed': All closed orders (filled, canceled, expired, etc.) - 'filled': Only filled orders (filtered from closed) - 'canceled': Only canceled orders (filtered from closed)
All tools return unstructured string responses instead of structured JSON objects. LLMs must parse emoji-prefixed text, making downstream tool chaining impossible and wasting tokens on text parsing.
list_orders accepts order_status as free-form string with no enum constraint. Parameter description lists valid values but schema lacks formal enum definition, inviting hallucinated values like 'pending' or 'active'.
No output schemas documented for any tool. LLMs cannot predict response structure, making it impossible to plan multi-step workflows or extract specific fields reliably.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | 2026-07-28+ | v2 |
List all current stock positions in the portfolio.
Calculate today's gain/loss for each open position by comparing the current price with the previous close. Returns: A breakdown of daily performance per stock and total portfolio change.
list_positions and list_orders lack pagination (limit, offset, page_size parameters). Large portfolios or order histories will be truncated or cause context window overflow.
Error messages are generic and non-actionable ('❌ Error getting stock snapshot for {symbol}: {str(e)}'). LLMs cannot determine if error is retryable, user-fixable, or fatal, blocking recovery.