MCP server for Indian-market (NSE/BSE) fundamental analysis, backed by Yahoo Finance data
FinMCP demonstrates solid fundamentals: all 15 tools have clear verb-noun naming (get_*, calculate_*, analyze_*, find_*) and substantive descriptions (100-300 chars typical). Input schemas are present with typed parameters and enums where appropriate (period: [annual|quarterly], interval: [1d|1wk|1mo]). However, output schemas are entirely undocumented, no tool specifies what fields it returns, forcing LLMs to infer structure. Error handling is minimal: tools raise ToolError but provide no recovery guidance or categorization. Parameter descriptions are adequate but lack format/range constraints (e.g., 'max 5' for symbols array is stated in description text, not as JSON Schema maxItems). The server is domain-focused and internally consistent, but lacks the polish expected of production-grade tools.
Assess cash-flow quality for an NSE/BSE-listed Indian equity across its available annual history: cash conversion (CFO/net income and FCF/net income), and whether receivables or inventory grew meaningfully faster than revenue (a classic early signal worth investigating, not proof of a problem -- this tool flags, it doesn't score or accuse).
Run the complete fundamental-analysis pipeline for one NSE/BSE-listed Indian equity in a single call: profile, ratios, growth, margin trends, cash flow quality, earnings quality, red flags, capital allocation, management quality, historical valuation, and health score. Composes every other tool in this server rather than re-deriving anything -- the underlying Yahoo fetches are shared/cached across all of them, so this is far cheaper than it looks.
Track gross/operating/net margin (as %) across an NSE/BSE-listed Indian equity's available annual history, oldest to newest, plus the first-vs-latest delta in percentage points. Deliberately doesn't label the trend "expanding"/"contracting" -- that interpretation is left to the caller.
Calculate revenue, net income, EPS, and free-cash-flow CAGR for an NSE/BSE-listed Indian equity over its available annual history (Yahoo provides ~5 years, so this is at most a 4-year CAGR -- `years_used` reports the actual span, never implies a longer history than exists).
No output schemas documented. Tools return structured data but LLMs cannot see field names, types, or nesting. Forces LLMs to infer structure from trial-and-error.
Parameter constraints stated in descriptions, not JSON Schema. 'max 5' for symbols array should be maxItems: 5 in schema. LLMs cannot parse natural-language constraints reliably.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Compare profile, key ratios, growth, and health score for multiple NSE/BSE-listed Indian equities side by side. Neutral comparison, not a relative-attractiveness ranking (see peer_valuation for that). A symbol that can't be resolved gets its `error` field set rather than failing the whole call.
Score an NSE/BSE-listed Indian equity 0-100 across five equal-weighted (20% each) pillars -- Profitability (ROCE/ROE/net margin vs disclosed thresholds), Growth (revenue/EPS CAGR vs disclosed thresholds), Balance Sheet (current ratio + debt/equity), Cash Flow (FCF and CFO conversion vs net income), Valuation (historical P/E percentile, inverted so cheaper-than-own-history scores higher). A documented, transparent heuristic composed from calculate_financial_ratios, calculate_growth_metrics, analyze_cash_flow_quality, and historical_valuation -- not a market-validated predictive model.
Screen an explicit list of NSE/BSE-listed Indian equities and rank by financial_health_score, using earnings-quality score and red-flag count as tiebreakers. Yahoo has no NIFTY-500-style constituent-list endpoint, so you supply the candidates (max 15). Candidates that couldn't be resolved are appended at the end rather than dropped silently.
Screen an explicit list of NSE/BSE-listed Indian equities for undervaluation signals: cheap vs their own historical P/E, and/or a reverse-DCF "growth cushion" (the price implies less growth than the company has actually delivered). Yahoo has no NIFTY-500-style constituent-list endpoint, so this can't discover a universe on its own -- you supply the candidates (max 15). Ranked best-first by a transparent 0-100 score, min-max normalized across this candidate list only (not an absolute scale); candidates that couldn't be resolved are appended at the end rather than dropped silently.
Get the balance sheet for an NSE/BSE-listed Indian equity: assets, liabilities, equity, debt, and working-capital line items per fiscal period. Yahoo provides ~5 years annual / ~5-6 quarters, newest period first.
Get the cash flow statement for an NSE/BSE-listed Indian equity: operating cash flow, capex, free cash flow, financing cash flow, and dividends paid per fiscal period. Yahoo provides ~5 years annual / ~5-6 quarters, newest period first.
Get the company profile/overview for an NSE/BSE-listed Indian equity. Accepts a bare symbol (e.g. "RELIANCE") and normalizes it to NSE by default (appends .NS), or an explicit .NS/.BO suffix to pick the exchange. This server covers Indian markets only -- a symbol that resolves to real data on a non-Indian exchange is rejected rather than silently returned.
Get the dividend and stock-split history for an NSE/BSE-listed Indian equity. An empty `dividends` list is a legitimate result for a company that has never paid one (common for growth companies) -- not an error; ticker validity is checked via `.info` separately.
Get the income statement for an NSE/BSE-listed Indian equity: revenue, gross profit, operating income, EBIT, EBITDA, net income, and EPS per fiscal period. Yahoo provides ~5 years annual / ~5-6 quarters, newest period first.
Get OHLCV price history for an NSE/BSE-listed Indian equity. Intraday intervals aren't supported (out of scope for a fundamentals tool, and Yahoo restricts them to short windows anyway). Capped at 500 bars -- if a period/interval combination would return more, the oldest are dropped and `truncated` is set.
Health-check tool — confirms the MCP server is wired up correctly.
Error handling provides no recovery guidance. ToolError is raised for TickerNotFoundError, RateLimitedError, NotIndianExchangeError but LLM receives no hint whether to retry, ask user, or try alternative symbol.
No pagination support. Tools like analyze_company and compare_companies return composite results but no limit/offset parameters or truncation indicators. Large result sets risk context window exhaustion.
Symbol parameter accepts bare strings (RELIANCE) or suffixed (TCS.NS, TCS.BO) but no enum or pattern constraint. Description explains normalization but LLM could pass invalid formats.