A real-time Indian stock market AI assistant using Model Context Protocol. Provides live NSE/BSE prices, options chain data, sentiment analysis, AI trade signals, portfolio P&L tracking, virtual trades, Greeks calculation, unusual activity detection, market screening, and sector heatmaps.
IndiaQuant MCP presents a solid Indian stock market domain with 10 well-scoped tools. Strengths: all 10 tools have descriptions (80-90 chars average), all have explicit Pydantic input schemas with type constraints, tool annotations present (readOnlyHint/destructiveHint), and domain-specific validation (e.g., option_type enum, side validation). Weaknesses: output schemas are completely undocumented (tools return JSON strings, no response field documentation), error handling is minimal ('Failed to fetch price' with no recovery guidance), and several parameter descriptions lack actionable format details (e.g., timeframe '1mo'|'3mo'|'6mo'|'1y' not enforced as enum). Tool get_portfolio_pnl and get_sector_heatmap are missing input schemas entirely in visible code. Naming is strong (verb_noun pattern) but some descriptions fall short of the 50-200 char LLM-optimized range.
Analyze News Sentiment
Calculate Option Greeks using Black-Scholes model
Detect unusual options activity via OI spike and Vol/OI ratio analysis
Generate AI Trade Signal
Get Live Stock Price
Get Live Options Chain
Get Portfolio P&L
Output schemas completely undocumented. All 10 tools return JSON strings via _json() helper with no response field documentation. LLMs cannot plan downstream tool chains or extract typed fields. Baseline 100% of A+ tools have documented return types.
Two tools missing input schema definitions entirely. get_portfolio_pnl and get_sector_heatmap have no visible Pydantic input classes and no @mcp.tool schema attribute.
Error handling does not guide recovery. All error responses return _error(msg) with no classification (retryable vs fatal), no suggestions, and no invalid-value echoing. E.g. 'Failed to fetch price for {symbol}' gives LLM no next step. Baseline pattern:recovery-guide requires actionable guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 67 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Sector-level % change heatmap for all major Indian sectors
Place Virtual Trade
Market-wide stock screener with RSI, price change, sector, and volume filters
Parameter format constraints not enforced as enums. timeframe ('1mo'|'3mo'|'6mo'|'1y'), option_type ('CE'|'PE'), and side ('BUY'|'SELL') are validated in code but not declared as enums in schema. LLMs cannot self-correct invalid input without trial-error. Should use enum in JSON Schema.
Tool descriptions under 50 characters (LLM-optimized minimum). get_portfolio_pnl ('Get Portfolio P&L', 18 chars), get_sector_heatmap ('Sector-level % change heatmap for all major Indian sectors', 58 chars but minimal context). Descriptions should explain WHAT, WHEN, and WHY to use the tool.
No result limits documented or enforced for potentially large result sets. scan_market defaults to max_results=10 (good), but analyze_sentiment and get_options_chain return unbounded chains. Large unstructured results waste tokens and degrade reasoning. Baseline pattern:paginated-result requires capping and documenting limits.
Parameter descriptions lack format/constraint details. E.g., expiry described as 'YYYY-MM-DD format' textually but no regex pattern in schema; symbol accepts max 30 chars for get_live_price but no limit stated for analyze_sentiment. LLMs cannot reliably follow unstated format rules.
No idempotency hints for write tools. place_virtual_trade may create duplicate trades if retried. Tool annotations lack idempotentHint=False, leaving LLMs unaware of retry risk. Pattern:idempotent-operation requires idempotency declarations.
No confirmation or dry-run step for destructive write operations. place_virtual_trade executes immediately with no preview. Pattern:confirmation-request requires a safeguard (confirm parameter or separate preview tool) for financial transactions.