Stdio-based Model Context Protocol server for Financial Modeling Prep API. Provides real-time financial data, stock quotes, company fundamentals, and market insights.
Financial Modeling Prep MCP exhibits solid foundational quality with consistent naming, all tools having schemas and descriptions. However, it suffers from several systematic issues: (1) output schemas are not documented, no visibility into what fields/structures each tool returns, forcing LLMs to guess; (2) parameter descriptions are frequently generic or minimal, lacking actionable constraints; (3) no error handling guidance, tools fail silently without recovery hints; (4) no input validation examples; (5) descriptions are moderately detailed (avg ~80 chars) but lack WHEN-to-use context; (6) no pagination guidance for high-volume data (news, market data, earnings calendar). The tool definitions themselves are well-formed JSON Schema with types and enums, and naming is consistently verb-noun (get_*, search_*), which are major positives. This server would function but lacks production-grade refinement.
Get analyst financial estimates for a stock (revenue, EPS forecasts)
Get analyst ratings and upgrades/downgrades for a stock
Get company balance sheet statement (annual or quarterly)
Get company cash flow statement (annual or quarterly)
Get detailed company profile information including description, industry, sector, CEO, and more
Get upcoming earnings announcements calendar
No output schemas documented. Tool descriptions do not specify what fields/structures the API returns (e.g., get_quote returns what fields? price, change, volume, market_cap?). LLMs cannot plan downstream operations or extract specific fields without knowing the response shape.
No error handling or recovery guidance. Tools offer no documentation of failure modes, retry eligibility, or actionable recovery steps. Example: if get_quote returns a 404 for an invalid symbol, the LLM has no guidance, should it search_symbol first, or ask the user?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 33 | - | v1 |
Get upcoming economic data releases calendar
Get economic indicator data (GDP, unemployment, inflation, etc.)
Get detailed financial ratios (profitability, liquidity, efficiency)
Get company income statement (annual or quarterly)
Get recent insider trading activity for a stock
Get key financial metrics (P/E, ROE, debt ratios, etc.)
Get stocks with the largest price increases (top gainers)
Get stocks with the largest price drops (top losers)
Get most actively traded stocks by volume
Get analyst price target summary for a stock
Get real-time stock quote for a symbol (e.g., AAPL, TSLA, MSFT)
Get current sector performance snapshot
Get latest news articles for a stock symbol
Get Relative Strength Index (RSI) technical indicator
Search for stock symbols by company name or ticker
Parameter descriptions lack actionable constraints. 'period' is described as 'Period type (annual or quarter)', good use of enum, but no explanation of WHEN to use each. 'limit' has no min/max bounds documented (e.g., 'limit (1-100, default 5)'). Financial data often has large result sets; no pagination guidance.
Tools returning lists (get_stock_news, get_earnings_calendar, get_economic_calendar, get_insider_trading, get_market_gainers/losers/most_active) lack pagination documentation. No mention of whether results are limited, offset/page parameters, or cursor-based pagination. Financial data can be large; missing pagination risks context window exhaustion.
Descriptions lack WHEN-to-use context. 'Get analyst financial estimates for a stock (revenue, EPS forecasts)' tells what it returns, but not when an agent should prefer it over get_key_metrics or get_company_profile. Production tools guide LLM selection with contextual hints.
No validation or sampling for date parameters. 'from' and 'to' in get_earnings_calendar and get_economic_calendar accept strings in YYYY-MM-DD format, but no guidance on valid ranges, defaults, or handling of invalid dates. LLMs frequently produce invalid date formats.
API key handling is correct (server-side injection via FMP_API_KEY env var), but the implementation silently fails if the key is missing or invalid. No meaningful error message to guide debugging.