MCP server providing stock data tools using yfinance and paper trading functionality with sentiment analysis
Server provides 10 tools with reasonable naming and schema coverage, but falls short of production quality in several key areas. Tool names follow verb_noun convention (get_, place_, query_, list_), which is positive. However, descriptions are generic and lack depth needed for LLM decision-making. Parameter descriptions are present but minimal (10-30 chars typical). Output schemas are completely undocumented, no return type specifications visible in code. Error handling is absent from tool definitions. Security considerations around MongoDB credentials and API keys appear to be handled via environment variables (good pattern), but no permission gates or audit logging visible. The paper trading tools (place_buy_order, place_sell_order) lack idempotency and confirmation patterns despite being destructive operations.
Get current paper trading portfolio balance and positions
Get historical price data for a stock over a specified date range
Get detailed company information and key financial metrics
Get current stock price and basic trading info for a given ticker symbol
List all collections in the portfolio_risk MongoDB database with document counts.
Place a buy order for a stock in paper trading account
No documented output/return schemas for any tool. LLMs cannot plan downstream operations or extract required fields without knowing the response structure.
Destructive tools (place_buy_order, place_sell_order) lack confirmation patterns, dry-run support, or idempotency guarantees. An agent retry loop could place duplicate orders.
No error handling guidance in tool definitions. Tools provide no recovery hints, error categorization (retryable vs fatal), or actionable error messages for LLM self-correction.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 61 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 25 | - | v1 |
Place a sell order for a stock in paper trading account
Query portfolio positions from MongoDB. Returns holdings data from the portfolio_risk database.
Query historical price data from MongoDB by symbol with date range filtering.
Query risk calculations (VaR, CVaR, Sharpe, volatility) from MongoDB.
Descriptions are generic and lack LLM-optimized context. 'Get current stock price and basic trading info' (54 chars) is too brief, should explain WHEN to use vs similar tools, what 'basic info' includes, and failure modes.
Parameter descriptions are minimal (e.g., 'Stock ticker symbol (e.g., AAPL, GOOGL, TSLA)' is 48 chars and includes example values). Descriptions should be 50-200 chars with format constraints, not examples.
MongoDB tools (query_portfolio_holdings, query_price_history, query_risk_metrics) lack pagination guidance. No mention of result limits, offset/cursor patterns, or when results are truncated.
place_buy_order and place_sell_order lack unit specifications (e.g., 'shares as integer > 0') and cost/impact warnings. LLMs may pass fractional or negative shares without validation feedback.
No permission gates or scope declarations. Tools that modify paper trading account (place_buy_order, place_sell_order) should declare required permissions and verify caller authority.