MCP server that manages a stock portfolio with tools for checking values, listing stocks, adding/selling positions, and web search
Portfolio Management Server has 8 tools with mixed quality. Strengths: all tools have descriptions and most have schemas. Critical weaknesses: (1) Most tool descriptions lack specificity about when to use each tool vs alternatives, e.g., get_stock_position_tool vs get_stock_position_llm are poorly differentiated. (2) No parameter descriptions for any tool except add_stock_tool and a few others. (3) Output schemas are entirely missing, no documented return structure for any tool. (4) Error handling is minimal; tools return free-form strings with no guidance for recovery. (5) Tool composition issues: add_stock_tool and sell_stock_tool operate on the same resource but lack clear distinction in when to use each. (6) get_stock_position_llm uses deprecated Sampling pattern (ctx.sample) which is not in the current MCP spec (2026-07-28) and indicates reliance on removed features. Overall, this is a learning-stage MCP server that would not pass production code review.
Add a stock to the portfolio as a new position. if the date_acquired is not provided, it defaults to today.
Calculate the total value of the portfolio
Get the current position(s) of a specific stock in the portfolio, and ask the LLM on client side to summarize or explain the position.
Get the current position(s) of a specific stock in the portfolio
List all stocks in the portfolio with their details
Remove or Sell all positions of a stock from the portfolio
Sell a specified number of shares of a stock from the portfolio. Selling of the shares is using a FIFO (First In, First Out) method.
Output schemas completely missing. No documented return structures for any tool. LLM cannot know what fields to expect, forcing parsing of free-form strings. Violates pattern:tool and pattern:response-shaper baseline of 100% of A+ tools having documented return types.
Parameter descriptions missing for most tools. get_stock_position_tool, list_stocks_tool, check_portfolio_value_tool, remove_stock_tool have empty input schemas with no param docs. Even tools with params like sell_stock_tool lack description for 'shares' parameter. Violates pattern:tool-description baseline of 100% of A+ tools having param descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 42 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 41 | - | v1 |
Perform a web search and return the results.
Tool naming ambiguity: get_stock_position_tool and get_stock_position_llm both do nearly the same thing (get position) but second one invokes LLM analysis. Names do not clearly distinguish responsibility. Violates pattern:tool rule that similar tools must have obvious distinctions.
get_stock_position_llm uses deprecated Sampling pattern (ctx.sample, SamplingMessage, system_prompt). This pattern was removed from MCP spec (2026-07-28). Server relies on removed functionality. Should integrate with LLM provider API directly instead of relying on client-side sampling.
Error handling is minimal and non-actionable. Tools return free-form strings with no guidance for recovery. E.g., get_stock_position_tool returns 'Stock symbol not found' with no suggestion to search or list available stocks. Violates pattern:recovery-guide.
Destructive operation (remove_stock_tool) has no confirmation or dry-run capability. An agent could accidentally delete all shares of a stock with one call. Violates pattern:confirmation-request.
Tool composition issue: add_stock_tool and sell_stock_tool operate on the same portfolio resource. When to use each is clear from context, but descriptions do not explain mutual relationship or dependency. E.g., sell_stock_tool uses FIFO but add_stock_tool does not mention order handling.
add_stock_tool description says 'if the date_acquired is not provided, it defaults to today' but parameter schema shows date_acquired has no default and no documentation of the default behavior in the schema. LLM cannot see default in schema, must infer from description text.