MCP server for Groww trading platform. Access the Groww trading platform to place, modify, and cancel orders across Equity, F&O, and Commodities; view holdings and positions; get market data including quotes, LTP, OHLC, and historical candles; search and lookup trading instruments; check available margin and calculate order margin requirements; and subscribe to real-time price updates via WebSocket.
The Groww Trading MCP server registers 31 tools with basic definitions but exhibits significant gaps in schema completeness, parameter descriptions, and error handling guidance. While tool names follow verb_noun conventions (subscribe_ltp, get_live_ltp, place_order), the input schemas are minimally documented. Most tools lack detailed parameter constraints, enums for restricted values, or clear guidance on interdependencies. Output schemas are not documented. Error handling is absent, there is no recovery guidance for failed operations, no categorization of retryable vs. fatal errors, and no actionable error messages visible in the code. The code shows authentication is properly handled server-side (via environment variables in auth.py), but tool definitions themselves lack security annotations or permission gates. Description lengths vary widely; some are adequate (subscribe_ltp at ~200 chars), others minimal (get_active_subscriptions, get_index_value). Tool composition is reasonable (each tool has a single responsibility), but chaining information is often missing, e.g., subscribe_ltp returns subscription status, but unclear if it includes instrument identifiers needed by subsequent calls.
Calculate margin required for a potential order. Useful for checking margin requirements before placing an order. Primarily used for F&O segment orders.
Cancel a pending or open order.
Get list of all active LTP subscriptions.
Get a summary of all available instruments. Returns a summarized view of the instrument database including counts by exchange, segment, and instrument type. Note: The full instrument list can be very large (100k+ instruments). Use the search methods for specific lookups.
Get available margin details across all segments. Returns margin information for equity, F&O, and commodity segments including cash available, collateral, and segment-specific details.
Output schemas not documented. Tools like get_live_ltp, get_market_depth, get_active_subscriptions return data but the response structure is invisible in the provided code. LLMs cannot plan downstream calls or extract fields without seeing what is returned.
subscribe_position_updates has no input schema (empty dict). The parameter 'segment' is described in other subscription tools but missing from this one. Cannot verify if the tool accepts parameters or how subscription filters work.
Parameter constraints missing. Many enum-like parameters (exchange, segment, product, order_type, transaction_type) lack explicit enum definitions. The code shows valid values in descriptions (NSE, BSE, MCX; CASH, FNO, COMMODITY) but not in structured schema. LLMs may hallucinate invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Get historical candle data for an instrument. Time interval constraints: - 1 min: max 7 days, last 3 months available - 5 min: max 15 days, last 3 months available - 10 min: max 30 days, last 3 months available - 1 hour (60): max 150 days, last 3 months available - 4 hours (240): max 365 days, last 3 months available - 1 day (1440): max 1080 days (~3 years), full history - 1 week (10080): no limit, full history
Get all holdings in your DEMAT account. Holdings represent long-term equity delivery stocks stored in the user's DEMAT account. Assets remain indefinitely unless sold, delisted, or modified by exchanges.
Get the latest index values from active subscriptions.
Get the latest LTP data from active subscriptions. Returns the most recent Last Traded Price data for all instruments that have been subscribed via subscribe_ltp(). Must call subscribe_ltp() first before using this method.
Get last traded price for multiple instruments.
Get the latest market depth data from active subscriptions. Returns order book data with bid/ask levels for subscribed instruments.
Get OHLC (Open, High, Low, Close) for multiple instruments. Returns real-time snapshot OHLC data, not historical.
Get detailed information about a specific order.
Get list of orders (including pending, executed, cancelled).
Get the status of a specific order.
Get position details for a specific trading symbol.
Get all positions across segments. Positions represent current day's trading positions including intraday and carry-forward positions.
Get a real-time quote for an individual instrument.
Get list of trades executed for a specific order.
Modify an existing pending or open order.
Place a new order on Groww.
Search for an instrument using the unique exchange-assigned token.
Search for an instrument using Groww's proprietary identifier.
Search for an instrument using exchange and trading symbol.
Search instruments by trading symbol pattern.
Subscribe to live index value updates.
Subscribe to live LTP (Last Traded Price) updates for instruments. Subscribes to real-time price updates via WebSocket. After subscribing, use get_live_ltp() to retrieve the latest prices. Maximum 1000 concurrent subscriptions allowed.
Subscribe to market depth (order book) updates for instruments.
Subscribe to real-time order updates. Receive notifications when orders are placed, modified, executed, or cancelled.
Subscribe to real-time F&O position updates. Receive notifications when positions change in the F&O segment.
Unsubscribe from LTP updates for specific instruments.
Error handling absent. No visible error recovery guidance, no categorization of retryable vs. fatal errors, no actionable error messages in the tool definitions. If place_order fails, agents have no guidance on whether to retry, adjust parameters, or escalate.
Irreversible operations lack dry-run or confirmation. place_order is marked IRREVERSIBLE but offers no confirmation or dry-run capability. An agent could accidentally place a live order instead of a test.
Tool chaining information missing. subscribe_ltp returns 'subscription status' but unclear if it returns instrument identifiers needed by get_live_ltp. Responses likely lack the exchange_token or other IDs needed for subsequent unsubscribe or query calls.
Generic descriptions on discovery tools. get_index_value, get_market_depth, get_active_subscriptions have 30-50 char descriptions that do not explain when to call them or what structure they return. Insufficient context for LLM selection.
Pagination not visible in schema. get_order_list and get_trades_for_order accept page and page_size but no explicit documentation of total count, next_cursor, or whether results are complete. Large result sets may exceed context window without guidance.
Price parameter in place_order is optional but required for LIMIT and STOP_LOSS orders. Documentation exists in the description but not enforced as a conditional requirement. Agents may omit price and receive a cryptic API error.
No tool annotations. tools lack readOnlyHint, destructiveHint (place_order, cancel_order), or idempotentHint annotations. Clients cannot infer tool safety or retry logic from metadata.