MCP server for managing an investment portfolio with tools to buy/sell assets, view portfolio positions, and transaction history
Server has 5 tools with basic schemas and descriptions, but significant gaps limit production readiness. Tool names follow verb_noun convention (buy_asset, sell_asset, get_portfolio, asset_position, get_transaction_history), which is good. However, descriptions are inconsistent in quality and length. buy_asset has a solid 34-char description; sell_asset is only 11 chars ('Sell Asset'), falling below the 20-char minimum. Parameter descriptions exist but are minimal (e.g., 'Ticker symbol of the asset to buy' repeated across tools). No output schemas documented. Error handling and recovery guidance absent. No tool annotations (readOnlyHint/destructiveHint) despite clear READ_ONLY vs WRITE risk classifications. Schemas are present and properly typed (object with required/properties), meeting baseline structure, but lack constraints (enums, ranges, patterns) that would prevent LLM hallucination.
Find asset position. Total amount, average price and more data
Tool to buy an investment asset.
Tool to list personal portfolio
Return the investments wallet transactions history.
Sell Asset
sell_asset description is only 11 characters ('Sell Asset'), below the 20-char minimum. LLMs cannot distinguish it from buy_asset without reading parameter details.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., does get_portfolio return portfolio_id for chaining?).
No tool annotations (readOnlyHint/destructiveHint/idempotentHint) despite clear risk classifications (WRITE vs READ_ONLY). Agents cannot infer safety properties.
Parameter descriptions lack constraints. 'ticker' and 'quantity' have no format, range, or validation hints. LLMs may pass invalid values (negative quantity, invalid ticker symbols).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | <=2025-11-25 | v2 |
No error handling or recovery guidance. If a buy_asset call fails (insufficient funds, invalid ticker), the response provides no actionable next step for the agent.