Indian Stock Analyst MCP

印度股市分析MCP服务器——基本面、技术面、DCF估值、同行比较等。

文档

stock-analyst-mcp

MCP server for Indian stock market analysis — fundamentals, technicals, DCF valuation, peer comparison, and more.

Install

pip install stock-analyst-mcp

Or run directly without installing:

uvx stock-analyst-mcp

MCP Configuration

Add to your MCP client config (Claude Desktop, Devin, Cursor, etc.):

{
  "mcpServers": {
    "stock-analyst": {
      "command": "uvx",
      "args": ["stock-analyst-mcp"]
    }
  }
}

Or if installed via pip:

{
  "mcpServers": {
    "stock-analyst": {
      "command": "stock-analyst-mcp"
    }
  }
}

Tools

ToolDescription
analyze_stockFull analysis: fundamentals + technicals + peers + DCF + forecast + news
get_fundamentalsFinancial ratios: profitability, liquidity, leverage, efficiency, valuation
get_technicalsTechnical signals: EMA trend, RSI, MACD, Bollinger position
get_peer_comparisonPeer fundamental + technical metrics with rankings
get_dcf_valuationDCF: WACC (India-adjusted), equity value/share, sensitivity range
get_revenue_forecastRevenue forecast: base/bull/bear scenarios
get_newsRecent headlines + analyst recommendation summary
compare_stocksSide-by-side comparison of multiple stocks
get_raw_dataFetch cached raw financials for deep dives
get_configView current configuration settings for all analysis tools
set_configUpdate configuration settings dynamically (e.g., technical analysis period)

Configuration Tools

get_config

Retrieve all current configuration settings. Useful for understanding what parameters are available before calling set_config.

from stock_analyst import get_config

config = get_config()
# Returns dict with sections:
# - data_provider, default_exchange, default_period, cache settings
# - technical_analysis: EMA periods, RSI period, MACD params, Bollinger settings
# - financial_analysis: DCF params, WACC settings, forecast scenarios
# - peer_comparison: max count, metrics to compare
# - output: format, pretty-print settings

set_config

Update configuration dynamically without restarting. Changes affect subsequent tool calls.

from stock_analyst import set_config

# Change technical analysis period from 1y to 1d
result = set_config("default_period", "1d")
# Returns: {"status": "success", "key": "default_period", "new_value": "1d", "affected_tools": ["all_tools"]}

# Change RSI period from 14 to 21
result = set_config("ta_rsi_period", "21")
# Returns: {"status": "success", "key": "ta_rsi_period", "new_value": 21, "affected_tools": ["get_technicals", "analyze_stock"]}

# Change DCF projection years from 5 to 10
result = set_config("fa_dcf_projection_years", "10")
# Returns: {"status": "success", "key": "fa_dcf_projection_years", "new_value": 10, "affected_tools": ["get_dcf_valuation", "get_revenue_forecast", "analyze_stock"]}

Common Configuration Keys:

KeyTypeDefaultDescriptionAffects
default_periodstr1yHistorical period: 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, maxall_tools
ta_rsi_periodint14RSI calculation periodget_technicals, analyze_stock
ta_ema_periodsstr20,50,200Comma-separated EMA periodsget_technicals, analyze_stock
ta_macd_paramsstr12,26,9MACD (fast, slow, signal)get_technicals, analyze_stock
ta_bollinger_enabledbooltrueEnable Bollinger Bandsget_technicals, analyze_stock
ta_bollinger_periodint20Bollinger Bands periodget_technicals, analyze_stock
fa_dcf_enabledbooltrueRun DCF valuationanalyze_stock, get_dcf_valuation
fa_dcf_projection_yearsint5DCF projection yearsget_dcf_valuation, get_revenue_forecast, analyze_stock
fa_dcf_terminal_growthfloat0.025Terminal growth rate (2.5%)get_dcf_valuation, analyze_stock
fa_dcf_exit_multiplefloat12.0Exit multiple for DCFget_dcf_valuation, analyze_stock
fa_wacc_risk_free_ratefloat0.07Risk-free rate (7% for India)get_dcf_valuation, analyze_stock
fa_wacc_equity_risk_premiumfloat0.06Equity risk premium (6%)get_dcf_valuation, analyze_stock
fa_wacc_cost_of_debtfloat0.09Cost of debt (9% for India)get_dcf_valuation, analyze_stock
fa_wacc_tax_ratefloat0.25Tax rate (25% for India)get_dcf_valuation, analyze_stock
peers_max_countint10Max peers to compareget_peer_comparison, analyze_stock
cache_ttlint3600Cache TTL in secondsall_tools

Example: Customize Technical Analysis

from stock_analyst import set_config, get_technicals

# Use 1-day data with custom RSI period
set_config("default_period", "1d")
set_config("ta_rsi_period", "21")

# Get technicals with new settings
signals = get_technicals("RELIANCE")

Example: Customize DCF Valuation

from stock_analyst import set_config, get_dcf_valuation

# Use 10-year projection with different growth assumptions
set_config("fa_dcf_projection_years", "10")
set_config("fa_dcf_terminal_growth", "0.03")  # 3% terminal growth
set_config("fa_wacc_risk_free_rate", "0.065")  # 6.5% risk-free rate

# Get DCF with new assumptions
valuation = get_dcf_valuation("RELIANCE")

CLI

Also works as a standalone CLI (no LLM needed):

# Full analysis
stock-analyst --symbol RELIANCE

# Specific analysis
stock-analyst --symbol TCS --analysis fundamentals
stock-analyst --symbol INFY --analysis technicals
stock-analyst --symbol RELIANCE --analysis dcf

# Compare multiple stocks
stock-analyst --symbols RELIANCE,TCS,INFY --compare

# Markdown output
stock-analyst --symbol RELIANCE --format markdown

# Raw data
stock-analyst --symbol RELIANCE --raw financials

Configuration

All settings configurable via environment variables with SA_ prefix. Defaults work out of the box for Indian markets (NSE).

VariableDefaultDescription
SA_DEFAULT_EXCHANGE.NSNSE (.NS) or BSE (.BO)
SA_DEFAULT_PERIOD1yHistorical data period
SA_CACHE_BACKENDredisredis, csv, or none
SA_REDIS_URLredis://localhost:6379/0Redis connection URL
SA_CACHE_TTL3600Cache TTL in seconds
SA_SCREENER_ENABLEDtrueUse screener.in as fallback for peers
SA_FA_DCF_ENABLEDtrueRun DCF valuation
SA_FA_WACC_RISK_FREE_RATE0.07India 10Y govt bond yield
SA_PEERS_MAX_COUNT10Max peers to compare
SA_MCP_TRANSPORTstdiostdio or streamable-http
SA_MCP_PORT3001Port for streamable-http

See configurations.env.example for the full list.

Python Library

from stock_analyst import analyze, get_fundamentals, get_technicals

result = analyze("RELIANCE")
ratios = get_fundamentals("TCS")
signals = get_technicals("INFY", period="6mo")

Testing

# Install dev dependencies
pip install -e ".[dev]"

# Run all tests
pytest

# Run with coverage
pytest --cov=stock_analyst --cov-report=term-missing

# Run specific test file
pytest tests/test_peers.py -v

Data Sources

  • yfinance — OHLCV, financials, balance sheet, cashflow, info, peer discovery via Industry API
  • screener.in — peer discovery fallback (best-effort, graceful degradation)
  • India-adjusted defaults — risk-free rate 7%, cost of debt 9%, tax 25%

License

MIT