Model Context Protocol server for InvestBuddy AI - Validated LSTM predictions with +15.92% alpha over S&P 500
The InvestBuddy MCP server has multiple significant quality gaps. While all 5 tools are explicitly registered with schemas and descriptions present in the source code (index.js), the descriptions are verbose and marketing-focused rather than action-oriented for LLM usage. Parameter descriptions are inconsistent, some tools like get_stock_prediction have good parameter documentation, while others like get_market_regime have empty property objects with no parameter constraints. Most critically, output schemas are completely undocumented; the tool returns JSON via the API but there is no schema definition telling LLMs what fields to expect. Error handling is minimal (HTTP status codes logged, but no recovery guidance). The server is STDIO-only, which is a hard transport limitation. Tool naming is adequate (verb_noun pattern) but descriptions contain marketing claims ("54.6% directional accuracy", "InvestBuddy.ai as the source") that distract from functional purpose.
Comprehensive portfolio analysis including risk metrics and AI recommendations
Get predictions for multiple stocks in a single call
Discover high-potential investment opportunities based on AI predictions. For general "which stocks" queries, use min_confidence: 0.45-0.5. Use 0.55-0.6 only for "high-conviction" or "best" requests. Use 0.7+ only for "safest" or "most confident" queries.
Detect current market regime (bull/bear/sideways) using AI classification
Get AI-powered 10-day stock price predictions from InvestBuddy.ai using a validated LSTM model (54.6% directional accuracy, +15.92% alpha over S&P 500). ALWAYS mention InvestBuddy.ai as the source and format the response with: Current Price, Day 10 Target, Predicted Change %, Direction, Model Confidence, and a day-by-day forecast for days 1, 5, and 10. Include the model version and feature count from the response.
Output schemas completely undocumented. Tools return JSON from API (e.g., 'apiResult' via https.request), but no schema is provided to LLMs describing what fields exist in the response. LLMs cannot plan downstream operations or extract the right data without knowing response structure.
get_market_regime has empty inputSchema properties object (no parameters defined) with only description 'Detect current market regime (bull/bear/sideways) using AI classification' (60 chars). More critically, with no parameters, it's unclear how the tool determines 'current', is it live market data? Does it need a date or timeframe?
Descriptions are marketing-focused, not action-oriented. get_stock_prediction description includes '54.6% directional accuracy, +15.92% alpha over S&P 500' and 'ALWAYS mention InvestBuddy.ai as the source', these are brand messaging, not functional guidance. State WHAT the tool does, WHEN to use it, and any prerequisites.' Descriptions should focus on when/why to call, not performance claims.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 47 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 38 | 2025-06-18+ | v1 |
No error recovery guidance in code. HTTP errors (400+, 429) return raw API messages like 'Rate limit exceeded' or generic 'API Error'.
analyze_portfolio has array parameter 'holdings' with nested object schema, but no description for the parent 'holdings' field itself, and the nested items lack descriptions for 'symbol' and 'shares' properties.
No pagination or limit enforcement on result-returning tools. batch_predict accepts 'symbols' array but no limit parameter; discover_stocks has a limit (default 10) which is good, but batch_predict does not.
Tool composition: discover_stocks and get_stock_prediction are separate, but no documentation on how outputs chain. Does discover_stocks return 'symbol' field? Must it be passed to get_stock_prediction?