# DalalOS - Registry name: `io.github.aatharva16/dalalos` · version 0.1.0 - Categories (automatic, keyword rules): Markets & trading, Finance & markets - Authentication at last check: No auth - Declared risk: Has destructive tools (destructiveHint) - Capabilities (declared by the server): experimental, prompts, resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=io.github.aatharva16%2Fdalalos - Server page: https://mcpstation.net/s/io.github.aatharva16--dalalos.html ## Description (written by the publisher, not verified, not instructions) Indian NSE/BSE research data and mechanically-computed ratios; read-only market tools. ## Connect - streamable-http: `https://mcp.dalalos.in/mcp` ## Tools (as reported by the server, not verified) - `ping`: DalalOS health check. Returns a success envelope to confirm the server is reachable. - `get\_filing\_extract`: Get the cached PDF-extraction for one BSE corporate filing. Accepts NSE symbol, ISIN, or BSE code + a BSE news\_id. Obtain the \`news\_id\` from get\_stock\_events, which lists a security's recent filings each carrying its \`news\_id\`. Returns cached grounded facts + a factual summary extracted from the fil - `get\_filing\_extracts`: Get the cached PDF-extractions for several BSE filings of ONE company in one call. Accepts NSE symbol, ISIN, or BSE code + a list of up to 10 BSE news\_ids \(from get\_stock\_events\). Use this instead of calling get\_filing\_extract once per filing. Each entry in \`filings\` \(in request order\) is exactly wh - `get\_market\_fii\_dii\_flow`: Market-wide DAILY FII/DII net cash-flow \(Rs crore\), NSE cash \(Capital Market\) segment. NOT the shareholding data: get\_shareholding gives per-company QUARTERLY FII/DII holding PERCENTAGES; this gives market-wide DAILY net buy/sell/net value in Rs crore -- e.g. "FIIs net sold Rs 2,340 Cr, DIIs net bou - `get\_stock\_fii\_flow`: Per-stock DAILY FII/FPI transaction flow \(raw Rs\) -- daily series + trailing-30d summary. Accepts NSE symbol, ISIN, or BSE code. \`days\` \(1..1825, default 90\) bounds the daily \`series\`; \`summary\` is always the trailing-30d figure \(the SAME single-source helper get\_company\_profile's compact \`fii\_activ - `get\_watchlist`: Get the caller's DalalOS watchlist: bare stock symbols, no quantity/cost-basis. Use this whenever the user asks what's on their \(DalalOS\) watchlist, or before adding/ removing symbols to check current state. This is DalalOS's OWN watchlist, tied to the caller's DalalOS account -- if another connecte - `add\_to\_watchlist`: Add one or more stocks to the caller's DalalOS watchlist, accepting a pasted list. Use this when the user says "watch X", "track X", "add X to my watchlist", or asks to save stocks they just searched/screened/analyzed via DalalOS for later. This writes to DalalOS's OWN watchlist \(tied to the caller' - `remove\_from\_watchlist`: Remove one or more stock symbols from the caller's DalalOS watchlist in a single call. Use this when the user says "stop watching X", "remove X from my watchlist", or "clear my watchlist" \(call get\_watchlist first, then pass every returned symbol here in one call\). This is DalalOS's OWN watchlist -- - `search\_stocks`: Find Indian stocks by company name, NSE symbol, BSE code, or ISIN. Returns matching securities with their ISIN, internal company\_id, name, and both exchange codes. Use this first when a ticker is unknown or ambiguous, then pass a returned \`nse\_symbol\` / \`isin\` / BSE code as the \`query\` argument to a - `get\_stock\_quote`: Get the latest end-of-day quote \(price, OHLC, volume\) for an Indian stock. Accepts an NSE symbol, ISIN, or BSE code. Prices are EOD from the NSE bhavcopy. Carries \`currency\` \("INR"\) and a mechanically-computed \`vwap\` \(turnover / volume for the latest bar, None when either is missing/zero\). P/E and P - `get\_batch\_quotes`: Get EOD quotes for up to 20 Indian stocks in one call \(peer benchmarking\). Each item carries the same fields as get\_stock\_quote \(currency, vwap, bse\_reported, any valuation\_notes/ratios\_caveat/dividend fields\) plus \`status\` and \`error\` keys, so an unresolved or uncached symbol is reported per-item r - `get\_financials`: Get consolidated financials \(P&L + balance sheet\), TTM, and computed margins. Accepts an NSE symbol, ISIN, or BSE code. \`period\_type\` is "quarterly" \(default\) or "annual". Banks/NBFCs/insurers return an interest-income template \(NII / interest income\) instead of Revenue / EBITDA. Returns raw line it - `get\_company\_profile`: Get a company profile: identity, sector/industry, market snapshot, and TTM summary. Assembled from cached security master + quotes + financials. Accepts NSE symbol, ISIN, or BSE code. \`fundamentals\` is None when no financials are cached yet; \`market\` is None when no quote is cached. When present, \`m - `get\_company\_report`: Get a source-linked, read-only canonical company report for one security. Accepts an NSE symbol, ISIN, BSE code, or company name. \`days\` \(1-365, default 90\) is the reporting window that selects which recent disclosures are in scope. Returns the validated \`company\_report\_v1\` model as the envelope \`da - `get\_peer\_comparison`: Compare a stock against its sector/industry peers on valuation metrics. Auto-identifies the peer group and returns a side-by-side table \(Mkt Cap, PE, PB, Revenue TTM, net / EBITDA margin, ROE, ROA, ROCE, interest coverage, D/E, the EV bundle — EV, EV/EBITDA, EV/EBIT and the EV-based earnings yield — - `get\_shareholding`: Get the promoter / FII / DII / public shareholding-pattern time series for a stock. Accepts an NSE symbol, ISIN, or BSE code. \`limit\` caps the most-recent quarterly periods \(max 12\). Returns raw reported ownership percentages — no verdicts. Sourced from cache; returns an empty series with a note whe - `get\_price\_history`: Get the OHLC + volume price-history series for an Indian stock. Accepts NSE symbol, ISIN, or BSE code. \`days\` \(1..1825\) bounds the lookback window. Set \`adjusted=True\` for split/bonus-adjusted closes; default is raw close. \`interval\` is 'daily' \(default\), 'weekly', or 'monthly' \(weekly/monthly resam - `get\_valuation\_history`: Get point-in-time P/E and price-to-sales history for an Indian stock. Each point uses only the TTM filing that was public on that trade date. \`days\` accepts 1..1825; \`interval\` is daily, weekly, or monthly. P/S is null where the filing lacks a usable top line or disclosed share count. Cache-only, me - `get\_returns`: Get mechanical return statistics over standard windows for an Indian stock. Accepts NSE symbol, ISIN, or BSE code. Returns period returns \(1W/1M/3M/6M/1Y/YTD/max\), CAGR, annualized volatility, max drawdown, and 52-week high/low — all computed from the split/bonus-adjusted close series. A null return - `get\_technical\_indicators`: Get moving averages, RSI, MACD, Bollinger Bands, beta, and circuit-filter band/hit-days for an Indian stock. Accepts NSE symbol, ISIN, or BSE code. Moving averages \(sma\_50/sma\_100/sma\_200\), \`rsi\_14\` \(Wilder's 14-period RSI\), \`macd\` \(12/26/9 EMA line/signal/histogram\), \`bollinger\_bands\` \(20-day, 2-st - `get\_delivery\_trends`: Get the delivery-volume / delivery-percentage trend for an Indian stock. Accepts NSE symbol, ISIN, or BSE code. \`days\` \(1..1825\) bounds the lookback window. Returns the raw delivery quantity and delivery % time series from the NSE bhavcopy. - `get\_dividends`: Get the cash-dividend history for an Indian stock. Accepts NSE symbol, ISIN, or BSE code. \`years\` \(1..15, default 5\) bounds the window. Returns disclosed dividend amounts per share with ex-dates. Raw disclosures only. \`annual\_totals\` \(fiscal-year, Apr-Mar buckets\) also carries a dividend-YIELD HISTO - `get\_brsr`: Get BRSR \(Business Responsibility & Sustainability Report\) ESG disclosures for a stock. Accepts NSE symbol, ISIN, or BSE code. \`years\` \(1..10, default 3\) caps fiscal years returned, newest first. Each year gives curated KPIs grouped as \`emissions\` \(Scope 1/2 + intensity\), \`energy\`, \`water\`, \`waste\`, - `get\_bulk\_block\_deals`: Get NSE bulk/block trade disclosures for an Indian stock. Accepts NSE symbol, ISIN, or BSE code. \`deal\_type\` optionally narrows to "bulk" or "block" \(omitted returns both\); \`days\` \(1..1825, default 90\) bounds the trailing window; \`limit\` \(1..500, default 100\) caps rows returned, newest first. Each r - `get\_derivatives\_positioning`: Get NSE F&O \(futures & options\) positioning for one underlying. Accepts an NSE symbol, ISIN, or BSE code for a stock, OR a raw F&O underlying/index name \(e.g. "NIFTY", "BANKNIFTY"\) that has no security-master row of its own. Returns the latest trading day's aggregate: \`futures\_oi\`/\`futures\_oi\_change - `get\_fo\_participant\_activity`: Get NSE participant-wise \(FII/DII/Pro/Client\) F&O open interest & volume — market-wide. \`days\` \(1..366, default 30\) bounds the trailing window. Each row is one \(trade\_date, client\_type\) pair with raw long/short contract counts across futures-index, futures-stock, options-index-call/put, and options- - `get\_fno\_ban\_list`: Get the full NSE F&O securities-in-ban list for the most-recently-published trading day. Market-wide, not per-underlying — no \`query\` argument. This is the whole-list companion to \`get\_derivatives\_positioning\`'s per-symbol \`in\_ban\_list\` flag: use this tool when you want everything currently banned i - `get\_corporate\_actions`: Get the disclosed corporate-action timeline for ONE STOCK, HISTORICAL \(splits, bonuses, dividends, etc.\) — the per-stock, backward-looking sibling of get\_market\_calendar \(whole- market, any window, all event types merged\) and get\_upcoming\_results \(whole-market, forward- only results convenience\). Us - `get\_stock\_events`: Get recent BSE corporate announcements \(SEBI Reg-30 disclosures\) for an Indian stock. Accepts NSE symbol, ISIN, or BSE code. \`days\` \(1..365, default 30\) bounds the trailing window over filing date; \`category\` optionally narrows to one BSE category \(e.g. "Board Meeting", or "Insider Trading / SAST" f - `search\_company\_disclosures`: Search this company's already cached official filings, page by page. Use after get\_stock\_events/get\_filing\_extract when you need historical context, such as a prior commissioning date, original order announcement, customer, project, or tender. This is cache-only: it never downloads a filing or trigg - `get\_event\_context`: Return cached prior-state context for a canonicalized filing event. Use after get\_filing\_extract for an order, capacity or other supported event. The result retains source quotes and reports only deterministic historical links; it does not infer price correlation, business causality, or an investmen - `get\_company\_operating\_metrics`: Return cached, source-grounded operating KPI history for one company. Coverage distinguishes company-disclosed values from \`\`not\_disclosed\`\` fields. It never infers a current order book from a new order and never fetches or writes on this read path. - `get\_company\_macro\_exposures`: Return cached company macro pathway evidence and eligible official context signals. Signals are emitted only when an active, reviewed, sourced company exposure passes the factor policy against a complete official PPAC Indian Basket or FBIL USD/INR window. This is conditional context only: it never s - `get\_company\_exposures`: Return one company's REVIEWED macro-factor exposures, labelled via the factor catalog. Cache-only, read-only: the company's reviewed \`\`company\_exposures\`\` rows joined to the \`\`factor\_registry\`\` catalog, so each exposure carries its factor label/description/dimension alongside the disclosed pathway \( - `get\_relevant\_peers`: Return an explainable peer set for operating, financial, or valuation comparison. Uses reviewed, provenance-backed business tags and overrides plus cached factual metrics. The existing get\_peer\_comparison table remains the broader SEBI-classification comparison. This tool may return fewer peers when - `list\_announcement\_buckets`: List the market-wide BSE announcement discovery buckets \(id + label\). Each bucket groups a real-world disclosure type \(e.g. "order-receipts", "fundraise", "credit-rating", "acquisitions", "management-changes"\) across the WHOLE market — the inverse of get\_stock\_events, which is scoped to one company. - `get\_announcement\_bucket`: Get every company that filed a matching BSE announcement in a trailing window, market-wide. \`bucket\` is one of the ids from list\_announcement\_buckets \(e.g. "order-receipts", "fundraise"\). \`days\` \(1..90, default 7\) bounds the trailing window over filing date. Returns newest first across the WHOLE uni - `screen\_stocks`: Screen the Indian security universe by user-supplied mechanical criteria. All \`filters\` keys are optional and AND-combined. \`sort\_by\`/\`order\` order the result set; \`limit\` \(1..100\) caps it. Returns matching securities with the screened metrics — data only, no recommendations. An unknown filter key r - `screen\_by\_query`: Screen the Indian security universe with one free-form Screener.in-style expression. Reach for this instead of screen\_stocks when the ask needs OR, arithmetic between two metrics, or a comparison screen\_stocks' fixed \`\\_min\`/\`\_max\` keys cannot express — e.g. \`Return on capital employed \> 22% - `get\_sector\_overview`: Get an aggregate market overview by sector \(or a finer SEBI grain\). Omit \`sector\` to list all groups; pass one to drill in. \`grain\` is "sector" \(default\), "igroup" \(SEBI Industry\), or "isubgroup" \(SEBI Basic Industry, the finest grain\). Returns count, total market cap, and median/mean PE and median - `list\_index\_constituents`: List the constituent stocks of an Indian market index \(e.g. NIFTY 50, NIFTY 500\). \`index\` is matched exactly to a known index name — get the valid names from list\_indices. \`limit\` \(1..500\) caps the returned constituents. Returns the member securities with identifiers \(each \`nse\_symbol\`/\`isin\` can be - `list\_indices`: List the market indices for which constituent membership is cached. - `get\_market\_heatmap`: Get valuation + multi-horizon returns for the constituents of an Indian market index. \`index\` is matched exactly to a known index name \(e.g. NIFTY 50, NIFTY 500\) — get the valid names from list\_indices. \`limit\` \(1..500\) caps the returned constituents, sorted by market cap desc. Each row carries mark - `get\_top\_movers`: Raw ranked gainers/losers/most-active for an index over one completed EOD session. \`index\` defaults to 'NIFTY 500' — get valid names from list\_indices. \`metric\` picks the raw sort field: 'pct\_change' \(day % change, default\), 'change' \(absolute price change, Rs\), 'turnover' \(traded value, Rs\), or 'vo - `list\_preset\_screens`: List the fixed, nightly-precomputed preset screens \(name/description/cache freshness\). Presets are FIXED mechanical filter combinations \(never live-queried, never ranked or labelled as a recommendation\) — a discovery starting point a caller can further filter via screen\_stocks itself. Use run\_preset - `run\_preset\_screen`: Return the last nightly-precomputed result for one registered preset screen. \`name\` must be one of the names returned by list\_preset\_screens. A preset that has never been computed yet returns an empty result with reason\_code "no\_data". Cache-only — this is the stored output of an equivalent screen\_s - `get\_upcoming\_results`: List companies with an upcoming board-meeting / results date — WHOLE-MARKET, FORWARD-ONLY. This is a forward-only, sector-filterable CONVENIENCE view over the same results\_calendar data get\_market\_calendar also reads — equivalent to get\_market\_calendar\(date\_from=today, date\_to=today+days, types=\["re - `get\_fii\_dii\_flow`: DEPRECATED \(issue \#285\) — renamed to \`get\_market\_fii\_dii\_flow\`; use that instead. Kept as a thin back-compat alias for this release only \(no removal date committed yet\): delegates to the exact same query function as \`get\_market\_fii\_dii\_flow\`, so the response is byte-for-byte identical for the same a - `get\_index\_valuation`: NSE's own daily OHLC + P/E + P/B + Div Yield time series for one named index. \`index\` is matched case-insensitively against NSE's own published index names \(e.g. "Nifty 50", "Nifty Bank", "Nifty IT", "Nifty Auto", "Nifty FMCG", "India VIX" — use get\_india\_vix for a VIX-specific shape\). \`from\_date\`/\` - `list\_index\_valuations`: List every NSE index name tracked \(headline, broad-market, sector/thematic, India VIX\). Each entry carries \`\{index\_name, latest\_trade\_date, latest\_close\}\`. Powers get\_index\_valuation's \`available\_indices\_hint\` and lets you discover NSE's exact index-name spelling before calling it. - `get\_india\_vix`: NSE's daily India VIX \(volatility index\) OHLC time series. \`from\_date\`/\`to\_date\` are optional ISO dates \(default: trailing \~30 days; window capped at 1825 days\). Each row is \`\{trade\_date, open, high, low, close, points\_change, pct\_change\}\` — VIX has no P/E, P/B, dividend yield, volume, or turnover, - `get\_market\_breadth`: Whole-market advance/decline/unchanged breadth: how many NSE-listed securities moved up/down/flat on a trading day. \`from\_date\`/\`to\_date\` are optional ISO dates \(default: trailing \~30 days; window capped at 366 days\). Each row is \`\{trade\_date, advances, declines, unchanged, total\}\`, sourced from NSE - `get\_macro\_indicators`: Official macro/sector indicators: MOSPI CPI, WPI, IIP \(monthly\), GDP \(annual\), and PPAC's Indian Basket crude-oil price \(monthly\). \`dataset\` is required: \`"cpi"\` \(headline Consumer Price Index by sector/division\), \`"wpi"\` \(headline Wholesale Price Index — overall + food index only\), \`"iip"\` \(Index o - `get\_fx\_reference\_rates`: Daily FBIL INR reference rates \(USD/GBP/EUR/JPY/AED/IDR against INR\). \`currency\_pair\` optionally filters to one pair \(e.g. \`"USD/INR"\`, case-insensitive\). \`from\_date\`/\`to\_date\` are optional ISO dates \(default: trailing 30 days\). Each row is \`\{rate\_date, currency\_pair, unit\_base, rate, source\}\` — \`ra - `get\_sector\_fii\_flow`: Daily FII/FPI net flow \(raw Rs\), aggregated by sector -- the \#74 sector-wise breakdown. Scope-keyed alongside its siblings \(issue \#285\): get\_market\_fii\_dii\_flow is market-wide with no sector dimension; get\_stock\_fii\_flow is per-stock; get\_shareholding is per-company QUARTERLY holding %. This is DAIL - `get\_sector\_fpi\_investment`: Fortnightly FPI net investment and assets under custody by sector, from NSDL's Fortnightly Sector-wise FPI Investment data. Covers every FPI across BOTH depositories \(NSDL and CDSL\), 2012 onward -- the current sector-level FPI source; get\_sector\_fii\_flow's CDSL feed stopped publishing after March 20 - `get\_fii\_activity`: DEPRECATED \(issue \#285\) — renamed to \`get\_stock\_fii\_flow\`; use that instead. Kept as a thin back-compat alias for this release only \(no removal date committed yet\): delegates to the exact same query function as \`get\_stock\_fii\_flow\`, so the response is byte-for-byte identical for the same arguments. - `get\_market\_calendar`: Get a unified, WHOLE-MARKET calendar of disclosed events across all NSE/BSE securities, over an ARBITRARY window \(past or future\). Use this instead of get\_upcoming\_results when you need a past window or multiple event types together; use get\_upcoming\_results instead when you just want a forward resu - `get\_ipos`: List IPO/public-issue records: upcoming, open, listing pending, or recently listed. \`status\` optionally filters to \`upcoming\`, \`open\`, \`listing\_pending\`, or \`listed\` \(omitted returns all four\); an unknown value is a bad\_request. Unlike most fields, \`status\` is derived at READ TIME from dates versus - `get\_financial\_trends`: Get multi-period growth and margin trends for an Indian stock. Levels-vs-deltas division: this tool returns a PER-PERIOD time series \(QoQ/YoY growth, \`net\_margin\_delta\`, \`fcf\_growth\`, and per-period reportable-segment breakdowns, one row per displayed period\) — not the latest levels or a summary gro - `get\_pledge\_trend`: Get the promoter share-pledge percentage trend for an Indian stock. Accepts NSE symbol, ISIN, or BSE code. \`limit\` \(1..16\) caps the most-recent periods. Returns the reported pledged-percentage time series. Raw disclosures only. Each period carries \`pledge\_disclosed\`: false means this quarter's pledg - `get\_data\_freshness`: Report cache freshness: last successful refresh per data domain and overall health. Every scraper-backed domain \(including fii\_dii and the ipos family\) carries a staleness threshold matched to its real refresh cadence, so a domain whose scraper job silently stops running gets flagged stale rather th Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html