India Market MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@India Market MCPHow did the market do today, and which sectors led?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
India Market MCP
An MCP server that gives Claude and other AI assistants live Indian market data: NSE quotes and indices, option chains with positioning analytics, company financials, shareholding, corporate actions, exchange filings and mutual fund performance. No API keys needed.
Ask things like:
"How did the market do today, and which sectors led?"
"Compare HDFC Bank and ICICI Bank on valuation, growth and promoter holding."
"What is NIFTY's option chain saying for this week's expiry? Where are the OI walls and max pain?"
"Show Parag Parikh Flexi Cap's 3, 5 and 10-year returns and its worst drawdown."
"What did Reliance announce to the exchange this month?"
Tools
Tool | What it returns |
| Market status, major indices and India VIX with 1w/1m/1y moves, NIFTY 50 P/E and P/B, sectors ranked by move, NIFTY 500 breadth, NIFTY 50 top movers, FII/DII net flows, USD/INR, upcoming holidays |
| NSE symbols (stocks, ETFs, SME) and indices matching a company or index name |
| Price, day range, VWAP, volume, delivery %, 52-week range, market cap, P/E vs sector P/E, sector, index membership. Index names return the index level, returns, P/E, P/B and breadth |
| OHLCV bars plus total return, CAGR, annualised volatility, max drawdown, 20/50/200-day averages, RSI, dividends and splits. Stocks, NSE indices and SENSEX |
| An index's level, returns, valuation and breadth, with every constituent's move, distance from its 52-week high and approximate weight |
| Strikes around the money with LTP, OI, change in OI, volume, IV, bid/ask and delta, plus put-call ratio, max pain, OI support and resistance, biggest OI build-ups, ATM IV, straddle-implied move and ATM Greeks |
| Black-Scholes price and Greeks, or implied volatility from a market price (works offline) |
| Annual or quarterly revenue, EBITDA, profit, EPS, margins, YoY growth, balance sheet, cash flow, ROE, debt/equity, current ratio, interest cover (₹ crore) |
| Promoter and public holding by quarter, with the promoter stake's QoQ and YoY change |
| Dividends (with amount per share), bonuses, splits, rights, buybacks, upcoming ex-dates, trailing 12-month dividend and yield |
| Exchange filings with a summary and PDF link, filterable by keyword |
| Scheme codes by name, filtered to direct/regular and growth/IDCW |
| Latest NAV, trailing returns (1 week to 10 years and since inception), calendar-year returns, 3-year volatility, max drawdowns |
The server also provides three prompts: research_stock, market_brief and options_positioning.
Related MCP server: InvestSights Indian Stock Research MCP
Set up
You need uv. It fetches the right Python and runs the server without a separate install step.
Claude Code
claude mcp add -s user india-market -- uvx --from git+https://github.com/kcodweb/india-market-mcp india-market-mcpClaude Desktop, Cursor, Windsurf and other clients. Add this to the client's MCP config (for Claude Desktop: Settings → Developer → Edit Config):
{
"mcpServers": {
"india-market": {
"command": "uvx",
"args": ["--from", "git+https://github.com/kcodweb/india-market-mcp", "india-market-mcp"]
}
}
}Restart the client and ask about the market.
From a clone
git clone https://github.com/kcodweb/india-market-mcp
cd india-market-mcp
uv sync
uv run india-market-mcp # stdio, for local clients
uv run india-market-mcp --transport streamable-http --port 8000 # HTTP at http://127.0.0.1:8000/mcpData sources
Data | Source | Freshness |
Quotes, indices, option chains, FII/DII, filings, shareholding, corporate actions | NSE website APIs | A few minutes delayed; cached 20 s |
Price history | Yahoo Finance | End of day, adjusted for splits and bonuses |
Financial statements | Yahoo Finance (from company filings) | Updated after results; the tool warns when the latest period looks stale |
Mutual fund NAVs | AMFI via mfapi.in | Daily |
How it works
NSE access. NSE's JSON endpoints sit behind bot protection. The server loads a normal page first to collect session cookies, sends browser-like headers, refreshes the session once if NSE answers 401/403, spaces its requests at least 350 ms apart and caches responses. It uses the endpoints NSE's current website calls, several of which replaced the older
/api/quote-equityfamily that NSE now blocks.Compact output. Results are small JSON documents: nulls dropped, money in ₹ crore, long lists capped with a note on how to see more. That keeps an assistant's context free for reasoning.
Errors the model can act on. A mistyped symbol returns suggestions (
RELIANC→ "Did you mean: RELIANCE (Reliance Industries Limited)…"), an unknown expiry lists the live ones, and a blocked request says why.Analytics in plain Python. Black-Scholes, Greeks, the implied-volatility solver, max pain, CAGR, drawdown, RSI and the rest have no NumPy or SciPy dependency, and all are unit-tested.
Limitations
These are unofficial website endpoints, not a licensed data feed. NSE changes them from time to time, and it blocks many cloud and non-Indian networks. Run the server on your own machine; a server in a US data centre will likely be refused.
Shareholding covers promoter and public totals only; NSE's summary does not break out FII, DII or mutual fund holdings.
Yahoo's statements for banks and financial companies are less complete than for other companies.
This is market data for research and education, not investment advice. Check the terms of use of NSE, Yahoo and AMFI before building anything commercial on it. Not affiliated with NSE, BSE, AMFI or Yahoo.
Development
uv sync # installs the dev tools too
uv run pytest # 118 offline tests, about a second
uv run pytest -m live # checks the real endpoints (run from an Indian connection)
uv run ruff check src tests && uv run ruff format --check src testsThe offline suite replays real responses recorded in tests/fixtures/, through a real MCP client, so it is
deterministic and never calls NSE from CI. To refresh the recordings, run python tests/record_fixtures.py
from a network NSE allows, update RECORDED_AT in tests/scenarios.py, and fix any assertions that depend
on the data.
src/india_market_mcp/
server.py tool and prompt definitions, CLI
features/ one module per area: market, history, derivatives, company, funds
sources/ HTTP clients for NSE, Yahoo Finance and mfapi.in
analytics/ option pricing and return statistics (pure functions)License
MIT
Available Tools
13 toolsget_announcementsCompany announcementsBRead-onlyIdempotent
Exchange filings from NSE (results, board meetings, acquisitions, credit ratings, investor meets...) with a short summary and a link to each PDF.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How many days back to look. | |
| limit | No | Maximum announcements. | |
| symbol | Yes | NSE symbol, e.g. RELIANCE, TCS, HDFCBANK, M&M. | |
| keyword | No | Only announcements whose category or text contains this, e.g. 'results', 'dividend'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety and idempotence are covered. The description adds that each item carries a short summary and a PDF link, which is useful return-format context, but says nothing about the data source's latency, coverage, or failure modes that openWorldHint implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming the source and resource first, then the return shape. No filler, though the trailing '...' list is slightly loose rather than a precise enumeration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully covers what comes back (summary plus PDF link), and the fully-described input schema handles parameter semantics. A note on data freshness or whether results are paginated would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (symbol, days, limit, keyword) are already documented in the schema. The description mentions filing categories, loosely mapping to the keyword filter, but adds no new syntax or meaning beyond the schema's own 'e.g. results, dividend' guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (NSE exchange filings) with a concrete parenthetical list of filing types and the return shape (summary + PDF link). An agent can distinguish it from siblings like get_corporate_actions or get_financials, but it never names or contrasts those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no pointer to alternatives such as get_corporate_actions for dividends/splits. The scope is inferable from the filings list, but nothing states the condition that should select this tool over a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_corporate_actionsDividends, bonuses and splitsARead-onlyIdempotent
Corporate actions (dividends with amount per share, bonus issues, splits, rights, buybacks) with ex and record dates, upcoming ones flagged, plus dividends paid in the last 12 months and the trailing yield.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum actions, newest first. | |
| symbol | Yes | NSE symbol, e.g. RELIANCE, TCS, HDFCBANK, M&M. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety is covered; the description adds real value by disclosing the exact content shape (ex/record dates, upcoming flagged, 12-month paid dividend history, trailing yield). It does not mention auth needs, rate limits, or behavior when a symbol has no actions, but for a read tool this is solid added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the resource and then the covered action types, with no filler. It is slightly run-on with the trailing parenthetical and appended clauses, but every phrase carries content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the return-value burden, and it does by naming the fields and sections returned (amounts, dates, upcoming flags, dividend history, yield). Combined with a fully documented 2-param schema and read-only annotations, an agent has what it needs, though missing sibling disambiguation keeps it short of a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented there (symbol format, limit semantics with default and max). The description adds no parameter-level detail beyond the temporal hints 'upcoming' and 'last 12 months', so the schema does the heavy lifting and baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (corporate actions for a symbol) and enumerates the action types covered: dividends with amount per share, bonus issues, splits, rights, buybacks. An agent knows exactly what this returns. However, it does not differentiate itself from the closest sibling, get_announcements, which could plausibly cover the same events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the scope of the returned data (corporate actions for a given symbol). There is no explicit when-to-use, no statement of when to prefer this over get_announcements or get_financials, and no prerequisites such as an exchange requirement beyond the schema's 'NSE symbol' note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financialsCompany financial statementsARead-onlyIdempotent
Reported revenue, EBITDA, operating profit, net profit and EPS with margins and year-on-year growth, plus balance sheet (assets, equity, debt, cash), cash flow (operating, capex, free cash flow) and ROE, debt/equity, current ratio and interest cover. Amounts in ₹ crore.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of periods, newest first. | |
| period | No | Annual or quarterly results. | annual |
| symbol | Yes | NSE symbol, e.g. RELIANCE, TCS, HDFCBANK, M&M. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent and open-world behavior, so the bar is lower. The description adds genuinely useful operational context the schema lacks: the reporting unit (₹ crore) and the full set of returned metrics, which substitutes for the absent output schema. It says nothing about data coverage, history limits, or behavior when data is unavailable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence, front-loaded with the primary metrics and ending with the unit convention. Every listed item is meaningful given there is no output schema, though the run-on enumeration is heavy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by naming the statements, ratios and currency. It omits any caveat about data availability, history depth, or cases of missing/mixed reporting periods.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so symbol, period and count are fully documented in the schema itself (including the NSE symbol format and count bounds). The description adds no parameter-level detail beyond the currency unit, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates exactly which financial data is returned (revenue, EBITDA, balance sheet, cash flow, ratios), so an agent knows this is a fundamentals/statements tool, clearly separable from get_quote or get_price_history. It never explicitly names a sibling to contrast with, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use statement, no prerequisites, and no routing advice relative to siblings like get_quote or get_shareholding. The usage is only implied by the content listing — an agent must infer that this is for statement-level fundamentals.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_indexIndex details and constituentsBRead-onlyIdempotent
An NSE index's level, returns, valuation (P/E, P/B, dividend yield) and breadth, with every constituent's price, day/30-day/1-year change, distance from its 52-week high and approximate weight.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | Index name or code: 'NIFTY 50', 'NIFTY BANK', 'NIFTY IT', 'NIFTY MIDCAP 100', 'fno'... | |
| limit | No | Maximum constituents to return. | |
| sort_by | No | How to order constituents. | weight |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint and idempotentHint, so the safety profile is covered. The description adds useful behavioral context about what is returned, but says nothing about truncation from the limit parameter or the cost/shape of the constituent-heavy response, which matters for a tool that can return up to 500 rows.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that packs the output contents efficiently with no filler. Slightly dense, but every clause earns its place by describing a distinct data category.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return and does so thoroughly across both index-level and constituent-level fields. The one gap is that 'every constituent's ... approximate weight' understates the limit default of 50, so an agent might assume it always returns the full roster.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so index codes, limit bounds and the sort enum are already fully documented in the schema. The description adds no parameter-level detail (e.g., that 'fno' is an accepted alias or how weight-sorting interacts with limit), so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (an NSE index) and enumerates the exact payload: level, returns, valuation ratios, breadth, and per-constituent price/change/weight. That is enough to separate it from get_quote (single security) and get_market_overview (broad market), though it never explicitly contrasts with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to reach for this tool versus get_market_overview, get_quote, or search_securities, and no prerequisites or exclusions. Usage must be inferred entirely from the content list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_overviewMarket overviewARead-onlyIdempotent
Today's Indian market in one call: market open/closed, major indices and India VIX with 1-week, 1-month and 1-year changes, NIFTY 50 P/E and P/B, sector indices ranked by move, NIFTY 500 breadth, NIFTY 50 top gainers and losers, FII/DII net buying (₹ crore), USD/INR and upcoming market holidays.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds value beyond them by specifying the exact snapshot contents and that figures are 'today's', which sets freshness expectations — notably important since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the payoff ('Today's Indian market in one call') and then lists contents. Every clause earns its place by describing returned data; no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no input params and no output schema, the description carries the return-value burden and does so comprehensively, enumerating every data group an agent would get. Nothing needed to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema baseline of 4 applies. There is nothing for the description to clarify about inputs beyond the implicit assumption that all output is current-market scoped.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Today's Indian market in one call') followed by an explicit enumeration of the exact data returned: indices, India VIX, NIFTY 50 P/E and P/B, sector rankings, breadth, gainers/losers, FII/DII flows, USD/INR, holidays. This clearly distinguishes it from narrower siblings like get_quote or get_index.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'in one call' implies this is the aggregate alternative to making many individual sibling calls, which is useful implicit guidance. However, it never states explicitly when to prefer this over get_index/get_quote or any conditions/exclusions, so usage is only inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mutual_fundMutual fund performanceBRead-onlyIdempotent
A scheme's latest NAV, category and fund house, trailing returns (1 week to 10 years and since inception, annualised beyond a year), calendar-year returns, 3-year volatility and maximum drawdowns.
| Name | Required | Description | Default |
|---|---|---|---|
| scheme_code | Yes | AMFI scheme code from search_mutual_funds, e.g. 122639. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description adds real value by enumerating the returned data because no output schema exists, but it says nothing about data freshness, handling of missing/young funds, or error behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence with no filler, and the most-sought data (latest NAV, category, fund house) is front-loaded before the return-series detail. The lack of an explicit leading verb costs it the top score but the sentence is otherwise efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only lookup whose safety profile is fully covered by annotations, the description adequately covers what comes back even though no output schema exists. Its only substantive gap is the absence of routing guidance versus search_mutual_funds.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single scheme_code parameter is fully documented in the schema (AMFI code from search_mutual_funds, with an example). The description adds no syntax, format or constraint detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates the exact resource contents a scheme lookup returns (NAV, category, fund house, trailing/calendar returns, volatility, drawdowns), which is specific enough for an agent to identify the tool. However, it is phrased as a noun list without an explicit verb and never distinguishes itself from the sibling search_mutual_funds, which is the natural confusion point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance in the description. It does not say this is the detail fetch that follows a search_mutual_funds lookup, nor does it mention any prerequisites. The parameter schema implies provenance of scheme_code, but the description itself offers nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_option_chainOption chain with analyticsARead-onlyIdempotent
NSE option chain around the money, with put-call ratio (OI and volume), max pain, the strikes with the most call and put open interest (resistance/support), biggest OI build-ups, ATM implied volatility, the ATM straddle's implied move and Greeks. Also lists the live expiries.
| Name | Required | Description | Default |
|---|---|---|---|
| expiry | No | 'nearest' (default), 'next', 'monthly', or a date such as 2026-10-27 or 27-Oct-2026. | |
| symbol | Yes | NIFTY, BANKNIFTY, FINNIFTY, MIDCPNIFTY, NIFTYNXT50 or an F&O stock symbol (RELIANCE). | |
| rate_pct | No | Risk-free rate for the Greeks, in percent. | |
| strikes_each_side | No | Strikes to show above and below the at-the-money strike. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld, so the safety profile is covered. The description adds substantial value by disclosing the exact analytics computed and that live expiries are listed, which is otherwise unavailable since there is no output schema. It still omits data-freshness, rate-limit, or sourcing caveats, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single dense, front-loaded sentence enumerating what is returned, with essentially no filler. The list is long but every clause names a distinct returned metric, so it earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of describing the return payload and does so thoroughly. For a read-only analytics tool with fully documented parameters and safety annotations, the only missing element is usage routing against siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents expiry formats, symbol values, rate_pct, and strikes_each_side. The phrase 'around the money' echoes the strikes_each_side/symbol semantics but adds no new meaning beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (NSE option chain) and enumerates the analytics returned (PCR, max pain, OI build-ups, ATM IV, straddle implied move/Greeks), so an agent can distinguish it from siblings like price_option or get_quote without opening the schema. It lacks an explicit contrast naming those siblings, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus alternatives such as price_option (single-option pricing) or get_quote. Usage is only inferable from the enumerated content ('around the money', listing expiries); no context or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_historyPrice history and statisticsARead-onlyIdempotent
Historical OHLCV bars plus total return, CAGR, annualised volatility, max drawdown, period high/low, moving averages (20/50/200-day), RSI and dividends/splits. Statistics use adjusted prices.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Lookback window. | 1y |
| symbol | Yes | NSE stock symbol, NSE index name ('NIFTY 50', 'NIFTY IT'), 'SENSEX' or a Yahoo ticker. | |
| max_bars | No | Most recent bars to return. | |
| bar_interval | No | Bar size for the returned OHLCV rows. 'auto' keeps the table short. | auto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world behavior, so the safety profile is covered. The description adds a genuinely non-obvious behavioral trait beyond the structured fields: statistics are computed on adjusted prices, which affects interpretation of returns and dividends/splits. It still omits any note on data source latency, rate limits, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler; the returned-data inventory leads and the adjusted-price caveat is placed last. Slightly list-heavy, but every item conveys what the tool returns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly takes on the burden of specifying the return contents, and it does so thoroughly. Combined with the full parameter documentation in the schema and read-only annotations, an agent has what it needs, though nothing is said about result size limits or missing-data behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with period, symbol, max_bars, and bar_interval all documented including enums and defaults, so the schema does the heavy lifting. The description adds no parameter-level syntax or interaction detail (e.g., how bar_interval 'auto' interacts with max_bars), which is the expected baseline-3 outcome when coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (historical OHLCV bars) and enumerates the derived metrics returned (total return, CAGR, volatility, drawdown, moving averages, RSI, dividends/splits), so the agent knows exactly what this tool produces. It does not explicitly contrast with siblings like get_quote or get_index, but the historical/statistical scope makes the distinction inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives such as get_quote (current price) or get_index, nor any prerequisites, period-selection advice, or exclusions. Usage is only implied by the listed output content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quoteStock or index quoteARead-onlyIdempotent
Latest price and day range, 52-week range, volume, delivery %, market cap, P/E vs sector P/E, sector and index membership for an NSE stock. Index names return the index level, returns, P/E, P/B and breadth.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | NSE stock symbol (RELIANCE) or index name ('NIFTY 50', 'banknifty', 'INDIA VIX'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld), so the bar is lower. The description then adds concrete output-shape behavior for two input classes (stock fields vs index fields), which is genuinely useful since no output schema exists. It omits freshness/currency and any rate-limit or coverage notes, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the stock case is front-loaded ahead of the index case. The dense comma-separated field list is efficient rather than padded, though it reads as an inventory rather than a prioritized summary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating returned fields for both modes, and annotations cover the read-only safety profile. What remains missing — data freshness, units/currency, and how it differs from get_index — is minor for a single-parameter lookup but not immaterial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the symbol parameter is already fully documented, including example formats. The description echoes the stock/index distinction the schema already makes and adds no new syntax or format meaning. Baseline 3 is correct when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear resource (quote) and enumerates exactly what is returned for stocks versus indices, which is more than a restated title. However, it does not distinguish itself from the sibling get_index, which appears to overlap on index quotes, so an agent cannot fully disambiguate from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: the tool covers both NSE stocks and index names, and the two-part sentence hints at when each branch applies. But there is no explicit guidance on preferring this over get_index, get_price_history, or get_market_overview, and no stated exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_optionBlack-Scholes option calculatorARead-onlyIdempotent
Price a European option and its Greeks (delta, gamma, theta per day, vega, rho, probability of expiring in the money), or give market_price to back out implied volatility. Works offline.
| Name | Required | Description | Default |
|---|---|---|---|
| spot | Yes | Underlying price. | |
| strike | Yes | Strike price. | |
| rate_pct | No | Risk-free rate in percent. | |
| option_type | Yes | call (CE) or put (PE). | |
| market_price | No | Option's market price, to solve for implied volatility. | |
| days_to_expiry | Yes | Calendar days until expiry (fractions allowed). | |
| volatility_pct | No | Annual volatility in percent, e.g. 14.5. | |
| dividend_yield_pct | No | Dividend yield in percent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world, and 'Works offline' corroborates openWorldHint=false. The description adds genuine behavioral value the annotations lack: it discloses the output contents (which Greeks, theta normalized per day) and that the tool also performs IV back-solving, which is a distinct execution path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the primary capability plus its output list is front-loaded ahead of the alternative IV-solving mode. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly enumerates the return values and notes the theta-per-day convention. It does not cover edge behavior — e.g. what happens when neither volatility_pct nor market_price is supplied — which would be useful for an agent deciding which optional inputs to pass.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents spot, strike, rate_pct, option_type, market_price, days_to_expiry, volatility_pct and dividend_yield_pct. The description only re-emphasizes the market_price/IV relationship the schema already states, adding little beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Price') and resource ('a European option'), then enumerates exactly what is returned (delta, gamma, theta per day, vega, rho, probability ITM). 'Works offline' cleanly separates this pure calculator from every sibling, all of which fetch market data (get_option_chain, get_quote, etc.).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'or give market_price to back out implied volatility' clause clearly defines the second invocation mode, and 'Works offline' implies this is the tool to use when you need computed values rather than a data lookup. It stops short of naming a sibling (e.g. get_option_chain) as the alternative for live quotes, so there is no explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_mutual_fundsSearch mutual fundsARead-onlyIdempotent
Find Indian mutual fund schemes and their AMFI scheme codes (needed for get_mutual_fund).
| Name | Required | Description | Default |
|---|---|---|---|
| plan | No | Plan type. | direct |
| limit | No | Maximum results. | |
| query | Yes | Fund name words, e.g. 'parag parikh flexi cap', 'nifty 50 index'. | |
| option | No | Growth or IDCW (dividend) option. | growth |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds the useful workflow fact that returned AMFI codes feed get_mutual_fund, but says nothing about result ordering, pagination or how the limit/plan/option filters affect matching.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the workflow hint is appended compactly rather than buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter read-only search with a fully documented schema and no output schema, the description covers purpose and downstream use adequately. The only gap is that it does not hint at what a result contains (scheme name, code, plan/option), which an agent might want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and enums for plan and option are self-documenting, so the schema carries the parameter burden. The description adds no query syntax or filtering semantics beyond what the schema already states, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Find) and resource (Indian mutual fund schemes and their AMFI scheme codes), and differentiates from the sibling get_mutual_fund by framing itself as the lookup step that feeds that tool. An agent can distinguish it from search_securities without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'needed for get_mutual_fund' gives clear downstream context for when to reach for this tool, effectively positioning it as a prerequisite step. It stops short of explicit when-not guidance or naming an alternative search path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_securitiesSearch NSE securitiesARead-onlyIdempotent
Find NSE symbols for a company, ETF or index by name. Use this whenever the exact symbol is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results. | |
| query | Yes | Company name or part of a symbol, e.g. 'tata motors', 'hdfc'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds no behavioral detail beyond them: no mention of pagination, result caps, or partial-match semantics, which for a search tool is a real but modest gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero padding, with the purpose stated first and the usage condition immediately after. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter lookup with full schema coverage and no output schema, the description covers purpose and trigger adequately. It leaves the returned shape (symbol list with names/exchanges) unstated, but that is a minor omission given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (query, limit) are documented with examples and bounds, so the baseline is 3. The description adds no syntax or matching guidance beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (find) and resource (NSE symbols for company, ETF or index) with the lookup key (by name). The NSE-securities scope implicitly separates it from the sibling search_mutual_funds, though no sibling is named outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this whenever the exact symbol is unknown" gives a clear triggering condition that routes the agent here before symbol-based tools like get_quote. No explicit exclusions or named alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
v0.1.0- First observed
get_announcements - First observed
get_corporate_actions - First observed
get_financials - First observed
get_index - First observed
get_market_overview - First observed
get_mutual_fund - First observed
get_option_chain - First observed
get_price_history - First observed
get_quote - First observed
get_shareholding - First observed
price_option - First observed
search_mutual_funds - First observed
search_securities
TDQS
Scored across 13 tools
Tools cover distinct resource types (securities, options, mutual funds, financials), but index-level data is available from three tools (get_quote, get_index, get_market_overview) and dividend/split data appears in both get_price_history and get_corporate_actions. Descriptions help scope each tool, but an agent may still misselect for broad index or corporate action queries.
All names use snake_case with consistent verb_noun patterns: search_* for discovery, get_* for retrieval, and price_option as the only non-get verb. The single deviation is minor and still predictable.
13 tools cover equities, indices, options, mutual funds, and financials without obvious redundancy. Each tool adds a distinct capability within the Indian market data scope.
The surface is broad, covering search, quotes, history, options, financials, shareholding, corporate actions, announcements, and mutual funds. Minor gaps exist (e.g., mutual fund NAV history, futures, or deeper option analytics), but core workflows are supported.
Maintenance
Related MCP Connectors
Stock market data for AI agents: real-time quotes, financials, options, SEC filings and news.
Live crypto + IDX stock market intelligence for AI agents — 19 tools, no API key.
Indian NSE/BSE research data and mechanically-computed ratios; read-only market tools.
Unified financial infrastructure connecting AI agents directly to trade live/demo brokerage accounts, Web3 non-custodial wallets, real-time market data across equities, ETFs, crypto, forex, options, DeFi swaps, and prediction markets, institutional research feeds, and algorithmic strategy backtesters.
Related MCP Servers
- AlicenseAqualityBmaintenanceIndian stock market (NSE & BSE) MCP server with 55 tools: live quotes, financials, technicals, a 326-ratio screener, FII/DII flows, option chains with IV, parsed annual reports and concall transcripts, IPOs and portfolio tracking for ~8,200 stocks.55430 npm140MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to perform deep Indian stock research with fundamentals, forensic scores, DCF valuation, screening, and news for 6000+ NSE/BSE stocks.9 npm1MIT
- FlicenseCqualityBmaintenanceEnables AI assistants to access National Stock Exchange of India (NSE) data, including live quotes, market status, indices, option chains, corporate actions, and historical data, through natural language.241-
- AlicenseAqualityCmaintenanceEnables AI assistants to query live NSE & BSE stock market data, with 55 tools covering quotes, financials, screeners, FII/DII flows, option chains, and company filings.55MIT