MCP server for equity order management and market data access, built with Spring Boot and Spring AI. Provides tools for placing/modifying/cancelling equity orders, checking market prices, managing cash accounts, and tracking positions.
Spring AI MCP Server demonstrates solid definition quality with 10 tools providing trading and account management functionality. Strengths include proper tool annotations on critical tools, structured schemas with typed parameters, and detailed descriptions for complex trading concepts. Weaknesses include: (1) inconsistent parameter documentation across tools, (2) missing output schemas for most tools (only response model names visible, no inline schema documentation), (3) several tools lack error recovery guidance, (4) generic naming for utility tool (greet), and (5) some critical parameters missing validation constraints. The server follows the verb_noun naming convention well for domain tools (place_equity_order, modify_equity_order, cancel_equity_order) but has limited enum constraints for critical parameters like 'side', 'orderType', and 'status' values that should be formally declared rather than described as strings.
Cancel an existing equity order
Retrieve cash account(s) for a client, optionally filtered by currency. CashAccounts with Status:NORMAL are considered valid for trading
Get current market price for a symbol
Get order history with optional filters
Get the status of an equity order
Get current stock positions for a client. Optionally filter by symbol.
Greet the user by name
Missing enum constraints for critical parameters that accept a fixed set of values (side: BUY|SELL, orderType: MARKET|LIMIT|STOP, status filters, etc.). Currently documented only as free-form strings in descriptions, inviting hallucinated values from LLMs.
Output schemas not documented in source code. Tool definitions show Java return types (OrderResponse, MarketPriceResponse, List<CashAccountResponse>) but no explicit JSON schema documentation visible for the LLM to understand response structure. Forces LLMs to infer field names and types.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 78 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 55 | - | v1 |
List all active (non-filled, non-cancelled) orders
Modify an existing equity order (change quantity or price)
Places a new equity order (BUY or SELL) using specified cash account. Supports MARKET, LIMIT, and STOP order types. Ensure the Cash Account(cashAccountId) has sufficient funds for BUY Orders or sufficient shares before placing the SELL order.
Missing error recovery guidance for critical failure modes. Examples: (1) place_equity_order lacks guidance when cashAccountId has insufficient funds, (2) modify_equity_order doesn't explain what happens if attempting to modify a FILLED order, (3) cancel_equity_order silent on partial-fill scenarios.
Inconsistent parameter documentation. Some tools have thorough parameter descriptions (place_equity_order: 8/8 params described), others minimal (modify_equity_order: 4/4 described but vague). No consistent guidance on parameter constraints, ranges, or interdependencies.
No pagination support documented for list-returning tools (list_active_orders, get_order_history, get_positions). If portfolios or order histories are large, returning all results in one call will exhaust context windows. Missing limit/offset or cursor parameters.
Generic/minimal descriptions for several tools. Examples: get_market_price (8 chars), modify_equity_order (12 words), list_active_orders minimal context. Descriptions under 50 chars provide insufficient guidance for LLM tool selection in complex scenarios.
Weak naming for 'greet' utility tool. Generic action verb with no business context. Recommend renaming to reflect actual use-case (acknowledge_session, get_greeting) or removing if not essential to trading workflow.