INDUSS Research Intelligence MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| EXA_API_KEY | Yes | The API key for Exa search integration. Required for search-backed tools. | |
| DATABASE_URL | No | Postgres connection string for query/result history. Optional; tools function without it. | |
| MCP_BASE_URL | No | The base URL for serving generated reports over HTTP when using httpStream transport. If set, the server serves reports at /reports/:filename and includes a downloadUrl. | |
| MCP_TRANSPORT | No | The transport protocol. Use 'httpStream' for HTTP transport (remote clients). Defaults to stdio. | stdio |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
| logging | {} |
| completions | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_companyA | Discover a company's official website, LinkedIn, and registry presence via domain-restricted Exa search. Use this first to resolve a company name to authoritative source URLs before calling other company tools. |
| company_profileA | Retrieves registry-grade company profile facts (CIN, incorporation date, registered office) by searching MCA/Tofler/Zauba/OpenCorporates and the company's own site. |
| company_overviewB | Produces a narrative business overview (what the company does, products/services, target market) sourced from the company's own site and LinkedIn. |
| shareholding_patternA | Retrieves a listed company's Promoter / FII / DII / Public shareholding split (and pledge %, where disclosed) from screener.in, Trendlyne, and exchange sources. Every real institutional note carries this as a standalone exhibit — pattern-extracted from search snippets, so verify against the source URL before quoting in a client-facing report. |
| management_profileB | Retrieves key management personnel and board member profiles (name, designation, background) from LinkedIn, the company's own site, and annual-report text. Every real initiating-coverage note carries brief management/board biographies as a standalone exhibit — this is pattern-extracted from narrative search snippets, so verify identity against the source URL before quoting. |
| financial_statementsA | Retrieves a company's financial statements through a source waterfall: screener.in's structured profit-and-loss/balance-sheet/cash-flow tables first (real multi-period data for any covered listed company), then positional table recovery from filing PDFs (BSE/NSE results, annual reports), then generic HTML table scraping, then keyword-context text windows as a last resort. Returns ready-to-use FinancialStatement[] — the same shape ratio_analysis consumes — with ratios, multi-period CAGR trend, and a 3-year trend-extrapolated Revenue/EBITDA/PAT projection (computed inline by default whenever 2+ historical periods are available; clearly labeled as a mechanical CAGR carry-forward, never management guidance or a DCF output — see dcf_valuation/scenario_analysis for assumption-driven fair value). Never returns bare nulls: when data can't be found, returns a structured not_available status naming which sources were checked. |
| ratio_analysisA | Performs deterministic financial ratio analysis (profitability, liquidity, leverage, returns) plus multi-period CAGR trend over a set of FinancialStatement objects (Income Statement / Balance Sheet / Cash Flow). Pure calculation — no search, no LLM tokens. |
| segment_revenueA | Finds business-segment or channel revenue mix (e.g. Online vs Offline, product-line splits) when a company discloses one in its investor presentation, annual report, or press coverage. Not every company reports this — returns an empty mentions[] rather than a fabricated split when it isn't disclosed. Pattern-matched from narrative text, so verify labeled values against the source URL. |
| operating_metricsA | Searches for sector-specific operating KPIs (store count, same-store-sales growth, DAU/MAU, average daily turnover, GMV, capacity utilization, etc.) in investor-presentation and press coverage. Pass metricNames with the specific KPI vocabulary for this company's sector (read from its industry_overview/discover_competitors results first) for a sharper search — without it, falls back to a generic cross-sector list. This is inherently noisier than the server's other tools: results are proximity-matched numbers near a metric name in free text, not a structured KPI table, so treat every value as a lead to verify against its source URL, not a citable fact on its own. |
| dcf_valuationA | Runs a mechanical, transparent discounted-cash-flow valuation from assumptions the caller (you) supplies explicitly — revenue growth path, EBITDA margin path, D&A/capex/NWC as % of revenue, tax rate, WACC, terminal growth rate, net debt. This tool does not forecast, guess, or default any of these — you should reason about realistic assumptions from the company's own financials (financial_statements, ratio_analysis) and sector context before calling it, and every assumption you pass is echoed back in the output so the reasoning stays auditable. If wacc <= terminalGrowthRate or another structural issue exists, the |
| multi_stage_dcf_valuationA | Runs a 3-stage DCF: an explicit forecast stage (your stage1GrowthPath/stage1EbitdaMarginPath, however many years you want — a fast-growing company's real initiating-coverage model often runs 8-10 years here, not 5), a fade stage (fadeYears — growth glides linearly from stage 1's final rate down to terminalGrowthRate), then the terminal value. This is the structure ICICI Securities' Vishal Mega Mart note actually uses (a 10-year explicit stage, then a 10-year fade, then terminal) — jumping a fast-growing company straight from year-5 growth to a ~6% terminal rate (what the single-stage dcf_valuation does) understates a name that's genuinely still years from steady-state. Same rules as dcf_valuation: every assumption is caller-supplied and echoed back, nothing is guessed or defaulted, and this computes — it doesn't render a verdict. |
| sotp_valuationA | Runs a Sum-of-the-Parts valuation: each business segment gets its own multiple (EV/EBITDA, EV/Sales, EV/Revenue, P/E, or a directly-stated EV), the segment values sum to a total enterprise value, cash is added and net debt subtracted to reach equity value, then divided by shares outstanding for a fair value per share. Use this instead of a single blended DCF/multiple for a company whose segments have genuinely different economics (Motilal Oswal valued PhysicsWallah this way: 50x EV/EBITDA for the online segment, 15x for offline, 1x EV/Sales for other businesses, plus cash). This tool does NOT choose the multiples for you — that's the analyst judgment call; reason about each segment's multiple from real peer multiples (see global_peer_comps / listed_peer_comparison) or your own view, state your rationale in each segment's |
| comparables_valuationA | Applies a supplied set of peer trading multiples (EV/EBITDA, P/E, EV/Sales) to the target company's own financial metrics to derive an implied low/median/high valuation band per multiple type, plus a single blended equity-value range (enterprise-value bands are bridged to equity via netDebt). This tool picks no peers and invents no multiples — pass real peer figures (e.g. from listed_peer_comparison) and it does the banding/blending arithmetic deterministically. A multiple type is silently omitted (see |
| scenario_analysisA | Runs the same mechanical DCF three times — as given (base), and perturbed by bull/bear deltas you supply (e.g. +3% revenue growth and -1% WACC for a bull case) — and optionally builds a 2D sensitivity grid (typically WACC x terminal growth rate) of fair-value outcomes. Like dcf_valuation, this invents no assumptions of its own: you choose the deltas/grid values based on your own read of the company's upside/downside case, and the tool reports each case's own validity issues (e.g. a bear-case WACC bump that breaks wacc > terminalGrowthRate) rather than a distorted number. Pure calculation — no search. |
| red_flag_screenA | Aggregates evidence you've already gathered from other tools this session — litigation_history's cases, negative_news's hit count, ratio_analysis/financial_statements' plausibility issues, and any promoter regulatory-hit count you derived from promoter_background — into a single severity-bucketed flag list (low/medium/high, plus an overall severity). Every flag traces to a count or record you supplied from a real source; this tool invents no new evidence and renders no investment verdict. All inputs are optional — pass whichever you have; omitted categories simply contribute no flags. |
| funding_historyA | Searches Crunchbase, Tofler, MCA, Pitchbook, Dealroom, and OpenCorporates for a company's funding rounds, investors, and valuation mentions, and extracts candidate round/amount facts from the retrieved text. |
| discover_competitorsA | Searches industry-analyst and news sources for named competitors/rivals of a company, extracts candidates via text-pattern heuristics, then ranks them (mention frequency across sources + a listed-company signal) and returns a top-5 — the server picks peers deterministically instead of leaving selection to the calling model. |
| listed_peer_comparisonA | Retrieves a listed company's own financial snapshot (market cap, P/E, shareholding-pattern context) from screener.in, Trendlyne, Ace Equity-adjacent sources, and exchange/finance portals — meant to be run once per company (the target and each peer discover_competitors identifies) so the results can be assembled into a peer-comparison table. |
| global_peer_compsA | For each peer company name passed in (typically the target plus discover_competitors' output), attempts to find it on screener.in and pull its real point-in-time valuation multiples (CMP, Market Cap, Stock P/E, Book Value, ROCE, ROE). Only works for Indian-listed companies — a peer that's private, or listed on a foreign exchange, comes back status: 'not_available' with a reason, never a fabricated multiple. This is the honest ceiling without a paid market-data subscription (Bloomberg/CapitalIQ/Refinitiv): a real multi-year forward-consensus peer table across global names — the kind a bulge-bracket note shows — is NOT reproducible from free web search, and this tool will not pretend otherwise. |
| industry_overviewA | Retrieves macro/industry-level research (market structure, key players, growth drivers, TAM/market size) from top-tier consulting/research sources (Deloitte, PwC, EY, KPMG, McKinsey, Bain, BCG, IMARC, Statista, NASSCOM) — the industry-wide context a company-specific (micro) report should sit inside. Pass context.sector when known for a sharper search; if omitted, falls back to searching around context.company's own industry. |
| market_sizeA | Finds market size and CAGR figures for an industry from analyst/research sources (IMARC, Statista, McKinsey, NASSCOM, etc.) and extracts numeric estimates via pattern matching. Pass context.sector when known; if omitted, falls back to searching around context.company's own market. |
| latest_newsB | Retrieves recent news coverage of a company from Reuters, Economic Times, Mint, Business Standard, and Moneycontrol, sorted by publish date. |
| negative_newsA | Screens news and public-sentiment sources (Glassdoor, Reddit) for adverse media and complaints about a company (fraud, layoffs, defaults, employee/public controversy) for due-diligence / risk-screening purposes. For hard regulatory/legal records (SEBI, NCLT, court cases), use litigation_history instead. |
| management_commentaryA | Finds management guidance and outlook commentary from earnings-call coverage and press interviews — the 'what did management say about the next few quarters' input every real initiating-coverage note works from. Returns guidance-shaped sentence fragments from press coverage, not verified transcript quotes — attribute to the covering outlet unless the source is the transcript itself. |
| consensus_estimatesA | Pulls individually-reported brokerage target prices/ratings from press coverage. This is explicitly NOT a Bloomberg/Refinitiv-style consensus feed — this server has no paid market-data subscription, so there is no honest way to compute a real Street consensus. Use this for 'here's what a few brokerages have said', never present averageTargetPrice as 'the market consensus'. |
| litigation_historyA | Screens SEBI, NCLT, and legal-journalism sources (IndianKanoon, LiveLaw, Bar & Bench) for litigation, regulatory penalties, insolvency proceedings, and director disqualification records tied to a company or promoter name. Distinct from negative_news, which screens general press/employee sentiment rather than hard legal/regulatory records. |
| promoter_backgroundA | Screens a promoter or director name against SEBI/MCA/registry sources for disqualification, debarment, or regulatory penalty records. Pass the individual's name (or the company name to screen its leadership generally) as context.company. |
| generate_reportA | Assembles a structured research report from ResearchSections (each carrying its own summary, tables, citations, and confidence) into the standard report envelope. Use after gathering facts with other tools; this tool does no research of its own. If you (the calling model) want to include your own analysis, judgment, or a verdict — not something a source stated — write it as its own section and set metadata.kind = "ai_interpretation": the renderer visually distinguishes it from sourced-evidence sections and always attaches a 'not advice' disclaimer, so synthesis is welcome but never confused with verified fact. Write every section — sourced or interpretive — in a sell-side analyst's voice: direct declarative sentences that lead with the number and its implication, not hedged AI narration ("it is important to note that...", "the data appears to suggest...", "based on the information available..."). State what's known plainly; state what's uncertain by naming the gap, not by hedging the tone. |
| generate_institutional_reportA | Generates a complete institutional research report for a company in one call: company profile, financial snapshot, macro/industry overview (runs even without a sector — falls back to the company's own industry), a server-ranked competitor list, funding history, a combined litigation/promoter/adverse-media risk screen (with an evidence checklist of exactly which sources were checked), and recent news — composed into report sections and rendered in the requested output formats (json/markdown/html/pdf). Use this instead of calling search_company, company_profile, financial_statements, discover_competitors, litigation_history, promoter_background, negative_news, latest_news, and generate_pdf separately. The report's closing section tells you (the calling model) exactly which analyst-judgment sections to add next — SWOT, bull/bear case, valuation — each written in your own analytical voice and marked metadata.kind = "ai_interpretation" (see generate_report), so the finished document reads like an analyst's note rather than a data dump. Write plainly and directly: state the number and its implication in one motion ("EBITDA margin expanded 420bp to 34% on operating leverage"), not hedged narration ("the data appears to suggest a possible improvement") — every one of the reference institutional notes this convention was modeled on (PL Capital, ICICI Securities, Motilal Oswal) writes this way. |
| generate_markdownA | Renders a structured report (see generate_report's schema) into a GitHub-flavored Markdown document with a table of contents, per-section confidence/sources, and a consolidated citation list. |
| generate_pdfA | Renders a structured report (see generate_report's schema) into an institutional-layout PDF (cover page, TOC, headers, footers, page numbers, tables, per-section confidence, citations) via headless-browser HTML-to-PDF conversion. Returns the PDF embedded directly in the response (as a base64 resource) so remote clients can retrieve it without filesystem access, plus a downloadUrl when running over httpStream. |
| health_checkA | Reports server health: config validity, Redis cache connectivity, Postgres configuration status, and the tool capability registry. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/viraj43/Indus_mcp_latest'
If you have feedback or need assistance with the MCP directory API, please join our Discord server