INDUSS Research Intelligence MCP Server
Provides employee-review and workplace-sentiment signals used by the negative_news tool to flag reputational risks and support due-diligence screening.
Provides social-sentiment signals used by the negative_news tool to surface public discussion and support reputational risk screening.
Click on "Install 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., "@INDUSS Research Intelligence MCP ServerResearch Apple's financials, recent news, and litigation risk"
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.
INDUSS Research Intelligence MCP Server
An MCP (Model Context Protocol) server that acts as an institutional research backend for AI assistants (Claude, ChatGPT, Cursor, VS Code, Windsurf, or any MCP-compatible client). The LLM handles reasoning and orchestration; this server handles all data retrieval, extraction, validation, calculation, and citation generation.
Status
The architecture is now considered stable: 15 tools proving the full pattern end-to-end (context → route → search → extract → normalize → validate → cite → calculate → report), built entirely on reusable engines rather than per-tool logic. Adding the remaining ~30 tools from the spec is now purely additive — new source profiles and new tool files composing existing engines, no structural changes expected.
Related MCP server: INDUSS Research Intelligence MCP Server
Architecture
Tools are thin orchestrators. All reusable logic lives in engines
(src/core/*) and sources (src/sources/*), driven by one shared
ResearchContext so the same inputs always resolve to the same sources,
the same query, and the same citations — a tool call is deterministic.
Claude / ChatGPT / Cursor
│ MCP Protocol
INDUSS MCP Server (src/index.ts)
│
┌──────────────────────────────────────────────────┐
│ src/tools/registerTools.ts │ Tool Registry (15 tools, thin orchestration)
│ src/tools/toolRegistry.ts │ Tool Metadata (category/inputs/outputs/sources)
│ │
│ src/types/context.ts │ ResearchContext — the one input shape every
│ │ research tool takes (company/sector/country/
│ │ listed/objective/date)
│ │
│ src/core/pipeline/searchPipeline.ts │ Universal Search Pipeline — the ONLY caller
│ │ of core/exa/search.ts. Every search-backed
│ │ tool goes through this, end to end:
│ │ Router → Exa → Normalizer → Extractor →
│ │ Validator → Citation Engine → Response
│ src/core/pipeline/fetchDocument.ts │ Deep-extraction document fetcher (opt-in)
│ │
│ src/core/router/objective-router.ts │ objective → source names
│ src/core/router/source-router.ts │ source names → domain allowlist
│ src/core/exa/{client,search,contents}.ts │ Exa REST integration
│ src/core/extraction/* │ HTML / PDF / Table extraction
│ src/core/normalization/normalizer.ts │ text/number normalization
│ src/core/citations/citationEngine.ts │ builds + dedupes + flattens citations
│ src/core/citations/sourcePriority.ts │ Source Priority Engine — Tier + Authority +
│ │ Recency → Confidence
│ src/core/quality/validationEngine.ts │ Validator stage: CIN format, financial
│ │ statement plausibility (grows to cover
│ │ hallucination/citation-completeness checks)
│ src/core/financial/financialEngine.ts │ Financial Calculator over FinancialStatement
│ │ objects (Income Statement/Balance Sheet/
│ │ Cash Flow)
│ src/core/reports/reportEngine.ts │ Report orchestration (delegates to renderers/)
│ src/core/renderers/{html,markdown}/* │ Pure ResearchSection → string renderers
│ src/core/pdf/pdfEngine.ts │ PDF Generator (Playwright, HTML → PDF)
│ │
│ src/sources/{mca,sec,company,government,macro, │ Each source is fully self-contained: domains,
│ news,industry,exchange,regulator,legalMedia, │ query templates per research angle, trust
│ financialData,privateData,socialSentiment}/ │ tier, baseline authority score
│ index.ts │
└──────────────────────────────────────────────────┘
│
Public Data Sources (Exa, domain-restricted per src/sources/*)Search flow: tool builds a ResearchContext (with its fixed objective) →
runSearchPipeline() → source-router resolves domains from the matched
sources → the first matching source's query template is used → Exa (cached) →
Normalizer → optional deep Extractor → optional Validator → Citation Engine
(Source Priority scoring + dedupe) → tool shapes the result.
Report flow: tool assembles ResearchSection[] (each carrying its own
summary, tables, citations, and confidence) into a ReportInput →
core/reports/reportEngine.ts → core/renderers/{markdown,html}/reportRenderer.ts
→ (for PDF) core/pdf/pdfEngine.ts (Playwright). The HTML renderer produces
a full cover page + table of contents + numbered sections; a section's
metadata.tone (info/success/warning/danger) and metadata.label
wrap it in a colored callout card, and summary supports a light markdown
subset (**bold**, - bullets, > blockquotes) — see
ReportInputSchema/ResearchSectionSchema in src/types/schemas.ts.
PDF delivery: generate_pdf returns the rendered PDF as a base64 MCP
resource content block embedded directly in the tool response — this is
what makes it retrievable by a remote client (e.g. Claude.ai talking to a
Railway deployment), since a server-local file path is meaningless off-box.
It's also written to reports/ locally and, when MCP_BASE_URL is set
(httpStream/production), served over GET /reports/:filename (registered
via server.getApp()), so the response additionally includes a
downloadUrl.
Setup
npm install
npx playwright install chromium
cp .env.example .env # fill in EXA_API_KEY
npm run build
npm start # stdio transport, for Claude Desktop / Cursor etc.For local development with auto-reload:
npm run devFor HTTP transport (remote MCP clients):
MCP_TRANSPORT=httpStream npm startWith Docker (includes Redis + Postgres)
docker compose up --buildTesting
npm test # vitest — financial engine, citation engine, source priority, quality engine, report engine
npm run typecheckTools implemented in this slice (23)
Category | Tools |
Company Intelligence |
|
Financial Intelligence |
|
Valuation & Risk |
|
Funding Intelligence |
|
Competitor Intelligence |
|
Industry Intelligence |
|
News Intelligence |
|
Litigation & Compliance |
|
Promoter Intelligence |
|
Report Generation |
|
PDF & Export |
|
Ops |
|
negative_news (soft signal: press + Glassdoor/Reddit sentiment) and
litigation_history (hard signal: SEBI/NCLT orders + legal-journalism case
coverage) are deliberately split — they answer different due-diligence
questions and shouldn't be conflated into one keyword screen.
generate_institutional_report — the composite orchestrator
Every tool above also has its core logic exported as a plain function
(getCompanyProfile, getFinancialStatements, etc., alongside each
registerXTool), so core/orchestration/institutionalReport.ts can call
them directly, in-process — no re-entering the MCP protocol per phase. A
single generate_institutional_report call runs company profile,
financials, industry, server-ranked competitors, funding, and a combined
litigation/promoter/negative-news risk screen in parallel
(Promise.allSettled, one phase failing doesn't sink the rest), composes
the results into ResearchSections with deterministic templated text (no
LLM tokens spent server-side), and renders whichever of
json/markdown/html/pdf the caller asked for. The calling model gets a
finished report instead of having to plan and narrate ~10 separate tool
calls itself.
Two quality mechanisms run underneath every company-subject tool (including this composite one):
Entity verification (
core/quality/entityVerification.ts) — a result must contain the searched company's distinctive name tokens, not just one word it happens to share with an unrelated company (fixes the "Big Bang Boom" query pulling in "Nirmal Bang" or "BB Food").Evidence metadata (
tools/shared/evidenceMetadata.ts) — every response'smetadataincludessourcesChecked(human-readable labels),primarySources/secondarySourcescounts, and how many raw hits were dropped as false positives, so a clean screen reads as "checked SEBI, NCLT, Indian Kanoon... — no matches" rather than going quiet.
financial_statements also never returns bare nulls: when data can't be
found it returns { status: "not_available", reason, recommendedSources }
instead.
The macro/Industry Overview section runs unconditionally now (previously
gated behind an explicit sector argument) — real initiating-coverage
notes always carry this context, so industry_overview falls back to
searching around the company's own industry when no sector is supplied,
rather than the section silently disappearing. The composite report also
closes with a "Next: Analyst Synthesis" section that tells the calling
model exactly which judgment-based sections a finished institutional note
still needs — SWOT, bull/bear case, valuation — and to write them (and
every other section) in a direct, sell-side-analyst register rather than
hedged AI narration; see core/orchestration/institutionalReport.ts's
buildAnalystChecklistSection().
financial_statements — the source waterfall
Real filing data is what everything downstream (ratio analysis, DCF,
comps) depends on, so financial_statements tries several extraction
strategies in order rather than one attempt against one URL:
screener.in structured extraction (
core/extraction/screenerExtractor.ts) — screener.in's company page has a stable, server-rendered DOM (#profit-loss,#balance-sheet,#cash-flowsections, each one<table>), so for any listed company it covers this recovers every published annual period's real revenue/EBITDA/net profit/assets/ equity/debt/cash-flow figures in one fetch — no JS rendering needed. The ticker slug is read off whichever screener.in URL Exa's search already returned, not guessed from the company name (tickers diverge from legal/brand names — e.g. Zomato Limited lists on screener.in as "ETERNAL" post-rebrand).Filing-PDF table recovery (
core/extraction/pdfTableExtractor.ts) — for BSE/NSE results and annual-report PDFs, which have no HTML table to scrape. Usespdfjs-distto read each text run's exact (x, y) position and reconstructs rows/columns from that positioning — pdf-parse alone (used elsewhere for keyword-context extraction) only returns flattened text with layout discarded, which is why the pre-waterfall version of this tool could never recover real figures from a PDF.Generic HTML
<table>scraping (core/extraction/htmlExtractor.ts+tableExtractor.ts) — the original fuzzy-label-match approach, kept as a fallback for IR/exchange pages that aren't screener.in.Keyword-context text windows (
core/extraction/pdfExtractor.ts) — last resort when no table structure could be recovered at all.Press-digest estimate for unlisted companies (
core/extraction/pressFinancialsExtractor.ts) — steps 1-4 above only ever work for listed companies (screener.in, BSE/NSE PDFs, IR pages all require a public filing to exist). For an unlisted company, every free third-party financials aggregator we tested (Zaubacorp, Tofler's public site, Craft.co, Owler, Dealroom) is bot-walled against automated access — confirmed by direct testing, not assumed. The one freely-reachable channel is business media that specifically buys and digests RoC/MCA AOC-4 filings into articles reporting exact figures (Entrackr, Inc42, YourStory — seesources/startupMedia/index.ts); this step regex-extracts period/revenue/profit-or-loss/growth from that coverage. The result comes back as{ status: "estimate_only", estimates, note }instead of being merged into the normalFinancialStatement[]shape — it is explicitly not claimed to be audited-grade, and thenotefield names the real fix (a paid MCA-data vendor, e.g. Probe42 or Setu's MCA API) rather than pretending the paywall problem was solved.
The tool returns real FinancialStatement[] objects (the same shape
ratio_analysis consumes) rather than an ad hoc line-items record, and by
default (includeRatios: true) computes the full ratio set and
multi-period CAGR trend inline — so a single financial_statements call
gives you filing data, ratios, and trend together instead of a manual
reshape-and-round-trip through ratio_analysis. Every returned statement
is also run through checkFinancialPlausibility(), and any flagged period
lowers the response's confidence rather than being silently trusted.
AI-interpretation sections — synthesis without conflating it with fact
Every fact-bearing tool in this server is source-derived and scored by the
Source Priority Engine, but a genuinely useful research report also needs
judgment (is this a real moat, is this red flag material, would we invest)
— and no regex/heuristic in this codebase should try to fake that (see
core/competitor/peerRanking.ts's comment on a "real, checkable heuristic"
vs. a fabricated score). That synthesis belongs to the calling LLM, so
ResearchSectionSchema.metadata.kind = "ai_interpretation"
(core/reports/analystNote.ts) is a recognized convention: any section a
caller marks this way gets a visually distinct callout in both the
HTML and Markdown renderers, and the renderer unconditionally appends a
"not investment/legal/financial advice" disclaimer — enforced by the
renderer, not left to whichever caller assembled the section to remember
to type it. Use it whenever you (the calling model) are writing your own
analysis, an investment thesis, or a verdict rather than restating what a
source said.
Valuation & Risk tools — mechanical, no forecasting of their own
dcf_valuation, comparables_valuation, scenario_analysis, and
red_flag_screen (core/financial/dcfEngine.ts,
comparablesEngine.ts, scenarioEngine.ts, redFlagEngine.ts) are pure
calculation tools — no search, no LLM tokens spent server-side — that
follow the same design split as everything else here: the MCP computes
and verifies, the calling LLM judges. Concretely:
dcf_valuationruns a discounted-cash-flow model from assumptions you supply explicitly (revenue growth path, EBITDA margin path, D&A/capex/NWC as % of revenue, tax rate, WACC, terminal growth, net debt) — it forecasts nothing and defaults nothing; every assumption is echoed back in the output, and a structurally broken assumption set (e.g.wacc <= terminalGrowthRate) is reported inissuesinstead of silently producing a distorted number.comparables_valuationapplies a peer multiple set you supply (EV/EBITDA, P/E, EV/Sales — e.g. sourced fromlisted_peer_comparison) to the target's own metrics, returning low/median/high bands per multiple type plus one blended equity-value range (enterprise-value bands bridged to equity vianetDebt). It picks no peers and invents no multiples.scenario_analysisreruns the same DCF three times — base, and bull/bear perturbed by deltas you choose — plus an optional 2D sensitivity grid (typically WACC × terminal growth).red_flag_screentallies evidence you've already gathered fromlitigation_history,negative_news,ratio_analysis/financial_statements' plausibility checks, and any promoter regulatory-hit count you derived frompromoter_background, into a severity-bucketed flag list using fixed, disclosed thresholds. It renders no verdict — a "clean" result means the inputs given raised no flags, not that none exist.
None of these tools produce a "management quality" score or an automated
INVEST/AVOID verdict, and they never will — that is deliberately left to
the calling LLM, ideally written as its own section marked
metadata.kind = "ai_interpretation" above.
Every tool returns the standard envelope:
{
"success": true,
"data": {},
"citations": [],
"confidence": 0.98,
"metadata": {}
}Every Citation carries the four components the Source Priority Engine
scores it on:
{
"source": "mca.gov.in",
"url": "...",
"publicationDate": "...",
"evidenceSnippet": "...",
"tier": "official_filing",
"authority": 0.95,
"recencyPenalty": 0,
"confidenceScore": 0.96
}Adding a new tool
If the objective needs a source not already covered, add a new profile under
src/sources/<name>/index.ts(domains + searchTemplates + tier + confidence + supportsPDF/HTML) and register it insrc/sources/index.ts. Otherwise, add the objective → source mapping tosrc/core/router/objective-router.tsand reuse existing sources.Create
src/tools/<category>/<toolName>.ts. Accept acontext: ResearchContextInputSchema.required({...})parameter, callwithObjective(args.context, "<objective>"), thenrunSearchPipeline({ context, templateKey, subject, ... })— never callcore/exa/search.tsdirectly.Export a
<toolName>Meta: ToolMetaalongside the register function (category/inputs/outputs/requiredSources/caching/estimatedRuntimeMs) and add it tosrc/tools/toolRegistry.ts.Register the tool in
src/tools/registerTools.ts.If the tool does deterministic calculation only (no search), add pure functions to the relevant engine under
src/core/<engine>/(or a new engine folder) with unit tests intests/.For fact validation beyond Zod's type checks (format/plausibility rules), add functions to
src/core/quality/validationEngine.ts.
Notes on infra
Redis is optional at runtime: if unreachable, the cache layer (
src/cache/cache.ts) transparently falls back to an in-process memory store, so the server still works withoutdocker compose up.Postgres is optional and only used for the query/result history schema in
src/db/migrations.sql; tools function withoutDATABASE_URLset.BullMQ (
src/queue/queue.ts) is wired up for future long-running report jobs but no tool enqueues to it yet in this slice.
Available Tools
32 toolscompany_overviewBRead-only
Produces a narrative business overview (what the company does, products/services, target market) sourced from the company's own site and LinkedIn.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool readOnlyHint=true and openWorldHint=true, so the safety profile is clear. The description adds useful context by naming the data sources and the narrative format, but it does not disclose limitations such as potentially outdated or incomplete public data, or access failures.
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 sentence with no filler, front-loaded with the core action and output. Every phrase adds information about either the output content or the data sources, making it easy to scan.
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?
The description adequately names the output type and content for a simple read-only research tool, and the schema covers most inputs. However, there is no output schema and the description does not address the sector-research alternative supported by the schema, nor any caveats about the narrative result, leaving some gaps.
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 0%, and the required context.company field has no description in the input schema. The tool description does not explain how to specify the company (name vs. domain), nor does it clarify the optional sector/country fields, so the description fails to compensate for the schema gap.
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 uses a specific verb ('Produces') and clearly identifies the resource: a narrative business overview. It also lists the content dimensions (what the company does, products/services, target market) and sources, which helps differentiate it from sibling tools like company_profile or industry_overview, though it does not explicitly name them.
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?
No explicit guidance is given on when to use this tool versus alternatives such as company_profile or discover_competitors, and no exclusions are stated. The description only indirectly implies a use case (public-facing overview from the company's own site and LinkedIn), leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
company_profileARead-only
Retrieves registry-grade company profile facts (CIN, incorporation date, registered office) by searching MCA/Tofler/Zauba/OpenCorporates and the company's own site.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnlyHint=true and openWorldHint=true, so the description does not need to re-establish safety. It adds useful behavioral context by disclosing that the tool aggregates data from MCA, Tofler, Zauba, OpenCorporates, and the company's own site, which helps the agent calibrate expectations about data provenance and breadth. It does not cover failure modes or freshness, but this is not required given the annotation coverage.
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 description is a single compact sentence with the core action front-loaded, then concrete facts in parentheses, then sources at the end. Every element earns its place and there is no filler or redundancy.
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?
The description is enough for an agent to understand the tool's basic purpose and safety profile, especially with readOnlyHint and openWorldHint present. However, it leaves open how to construct the required `context` object, how to distinguish this from sibling profile/overview tools, and what happens when registry data is unavailable, so it is not fully complete for autonomous invocation.
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 schema description coverage is 0% for the top-level `context` parameter, and the required `company` field has no schema description. The tool description names the kind of facts retrieved but does not clarify how `company` should be provided (legal name, CIN, or search string) or how optional fields like `sector`, `listed`, and `companyDomain` affect the lookup, so the description does not compensate for the schema gap.
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 uses a specific verb ('Retrieves') and a specific resource ('registry-grade company profile facts') with concrete examples of the data returned (CIN, incorporation date, registered office). It also names the sources searched, which distinguishes it from generic overview or search tools even without explicitly mentioning 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?
The intended use is implied: an agent can infer this is for authoritative registry-level company facts rather than a narrative overview. However, it does not explicitly state when to prefer this over siblings like company_overview or search_company, nor does it provide any exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comparables_valuationARead-onlyIdempotent
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 issues) if you didn't supply both the peer multiples and the matching target metric — it never guesses a missing input.
| Name | Required | Description | Default |
|---|---|---|---|
| peers | Yes | Peer multiples — e.g. sourced from listed_peer_comparison output or your own research | |
| target | Yes | ||
| companyName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and idempotent, so the description adds valuable behavioral context: it is deterministic, silently omits a multiple type if inputs are incomplete, never guesses missing inputs, and bridges enterprise value to equity via netDebt. This goes well beyond the annotation hints and helps the agent anticipate edge cases.
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 description is three dense sentences with the primary behavior front-loaded, followed by constraints and edge-case behavior. The parentheticals add length but every clause carries meaningful information; it is concise relative to the complexity it explains, though not as tight as a two-sentence definition.
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 tool with nested objects and no output schema, the description explains inputs, outputs, methodology, and failure behavior well. It mentions `issues` for silent omissions, but because there is no output schema, the agent still lacks exact return-value structure. Overall it is complete enough for correct invocation.
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?
With schema description coverage only at 33%, the description compensates by explaining the core meaning of `peers` (real peer multiples, e.g. from listed_peer_comparison), `target` (the company's own financial metrics), and `netDebt` (used to bridge enterprise-value bands to equity). It does not detail every parameter such as `companyName` or `sharesOutstanding`, but the most important semantic distinctions are covered.
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 verb ('Applies'), a precise resource (peer trading multiples to target financial metrics), and the exact outputs (low/median/high valuation bands plus a blended equity range). It also differentiates itself from sibling valuation tools like dcf_valuation and listed_peer_comparison by stating it 'picks no peers and invents no multiples.'
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 tool says to supply real peer figures 'e.g. from listed_peer_comparison' and clarifies it performs only banding/blending arithmetic, not peer selection. It implies the right condition for use — when peer multiples and target metrics are already available — but does not explicitly contrast with DCF or other valuation alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
consensus_estimatesARead-only
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses the tool's best-effort nature, its reliance on press coverage rather than paid feeds, and the risk of misrepresenting the output as a true Street consensus. This is meaningful behavioral context that annotations alone do not provide.
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?
Three sentences, no filler, and the most important caveat is placed immediately after the core function. Every sentence earns its place by either defining the tool or preventing misuse.
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?
The description clearly conveys what the tool returns, its limitations, and how the output should be framed. It does not describe the output schema or parameter usage, but the required 'context.company' is evident from the schema and the tool's purpose is unambiguous.
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 0%, and the description adds no parameter-level guidance. There is one required nested 'context' parameter with a required 'company' field, but the description never explains how to specify the company, date, or other context fields. The tool's behavior implies a company context but does not compensate for the missing schema descriptions.
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 verb and resource: 'Pulls individually-reported brokerage target prices/ratings from press coverage.' It explicitly distinguishes the tool from a real consensus feed, which prevents the natural misreading of the tool name 'consensus_estimates.'
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 description gives explicit when-to-use guidance: 'Use this for "here's what a few brokerages have said"' and a clear when-not: 'never present averageTargetPrice as "the market consensus."' It also explains why, citing the lack of a paid market-data subscription.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dcf_valuationARead-onlyIdempotent
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 issues field reports it instead of returning a distorted number. This tool computes; it does not render a verdict — pair its output with your own investment-thesis section marked metadata.kind = "ai_interpretation" (see generate_report) rather than treating fairValuePerShare as advice.
| Name | Required | Description | Default |
|---|---|---|---|
| assumptions | Yes | ||
| companyName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent hints, the description discloses that the tool never forecasts, guesses, or defaults assumptions; echoes all assumptions for auditability; reports structural issues like wacc <= terminalGrowthRate in an `issues` field; and outputs calculations rather than a verdict. This is exactly the kind of contextual behavior annotations cannot convey.
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 description is long but information-dense, with each sentence contributing either scope, prerequisites, issue handling, or output interpretation. It could be more scannable with structure, but there is no filler or tautology.
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?
Given no output schema, the description covers most of the contract: explicit assumptions in, auditable output, fairValuePerShare, issues reporting on structural problems, and non-advisory framing. It references metadata.kind and generate_report, giving an agent enough context to use the result responsibly; only the full result shape and the optional companyName/sharesOutstanding semantics remain implicit.
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?
Despite 0% schema-description coverage at the top level, the description names most assumption inputs: revenue growth path, EBITDA margin path, D&A/capex/NWC percentages, tax rate, WACC, terminal growth rate, and net debt. It omits the optional companyName and sharesOutstanding parameters, so it does not fully compensate for the schema gap, but it adds substantial semantic meaning beyond the raw field names.
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 opens with a specific verb ('Runs') and a concrete operation: a discounted-cash-flow valuation from caller-supplied assumptions. It clearly distinguishes this from report-generation or advisory tools, though it does not explicitly differentiate among DCF siblings like multi_stage_dcf_valuation.
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 description gives strong usage context: reason about assumptions from financial_statements, ratio_analysis, and sector context before calling, and pair the output with an ai_interpretation section rather than treating fairValuePerShare as advice. It does not explicitly state when not to use this versus multi-stage, SOTP, or comparables, but the computation-vs-verdict framing provides clear orientation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_competitorsARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and openWorldHint already present, the description adds substantial process detail: source types, text-pattern extraction, ranking heuristics, and deterministic top-5 selection. It also clarifies that coverage is open-world and that candidate selection is not left to the calling model.
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 conveys source, method, ranking inputs, output cardinality, and determinism without filler. The action is front-loaded and every clause adds useful 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?
The behavior and output count are well described, but the description is not fully complete because it omits output shape and the meaning of the optional nested context parameters. Given no output schema and 0% schema description coverage, these gaps matter for reliable invocation.
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 0%, so the description needed to compensate, but it only implicitly covers 'company' and hints at a 'listed-company signal'. The nested context fields (date, sector, country, companyDomain) and their effect on the search are left undocumented in both the schema and description.
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 action (searches industry-analyst and news sources), a specific resource (competitors/rivals of a company), and a concrete output (top-5). It also distinguishes itself from manual/model-driven selection by noting the server picks peers deterministically.
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 description implies when this is useful (when deterministic server-side competitor selection is desired rather than model-selected peers) but never gives an explicit condition or names alternative sibling tools. There are no when-not-to-use or fallback rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
financial_statementsARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | ||
| includeRatios | No | Compute ratio_analysis's full ratio set + multi-period CAGR trend inline once statements are extracted, so callers don't need a second round-trip. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint/openWorldHint annotations by disclosing the source waterfall, inline ratio/CAGR/projection computation, the mechanical nature of the projection, and the structured not_available response instead of bare nulls. This is rich behavioral context that annotations do not provide.
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 description is front-loaded with the primary purpose and waterfall, then packs the important caveats into compact, purposeful clauses. Every sentence adds value: return shape, projection labeling, fallback sources, and null handling. No filler or repetition of schema details.
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 explains the return type, projection behavior, and failure mode, referencing ratio_analysis for shape. It is slightly incomplete regarding coverage nuances for unlisted vs. global companies and exact date-range handling, but it is comprehensive enough for most invocation decisions.
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?
With 50% schema coverage, the description partially compensates by adding conditional detail about includeRatios ('computed inline by default whenever 2+ historical periods are available'). However, it does not clarify the required context object's role in the source waterfall or explain how fields like listed, country, or sector influence behavior, leaving a gap for the required parameter.
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 uses a specific verb ('Retrieves') and names the exact resource ('financial statements'), then details the source waterfall. It also distinguishes itself from siblings by noting that ratio_analysis consumes its output and that dcf_valuation/scenario_analysis handle assumption-driven fair value, so an agent can tell it apart without inspecting schemas.
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 description clearly signals when this tool is appropriate: when financial statements are needed, and it routes fair-value work to dcf_valuation/scenario_analysis. It does not explicitly say when not to use it or name a direct alternative for the same statements, but the context is strong enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
funding_historyARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description reveals that the tool searches multiple external sources and 'extracts candidate round/amount facts from retrieved text,' signaling possible noise and text-derived inferences. It does not mention rate limits, pagination, or failure behavior, but the annotations already cover the safety profile.
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 front-loads the action and then efficiently lists sources and target data. Every word earns its place, with 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?
The description covers the core behavior and output type but omits how optional context fields affect the search and what the exact return format is. Given the absence of an output schema and the range of parameters, this is a clear gap.
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 0%, and the description provides no guidance on the required 'company' field or the optional 'date', 'country', 'listed', 'sector', and 'companyDomain' fields. The named data sources hint at country relevance (e.g., Tofler/MCA for India), but the relationship is left implicit.
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 uses the specific verb 'Searches' and identifies the exact resource: funding rounds, investors, and valuation mentions across six named sources. It clearly distinguishes funding_history from sibling tools like financial_statements or company_overview, and the extraction phrase clarifies the output type.
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 description implies this tool is for retrieving a company's funding history, but it never explicitly states when to prefer it over sibling research tools or which contexts it is unsuitable for. No alternatives or exclusions are mentioned, leaving the agent to infer usage from the behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| listed | No | unknown | |
| sector | No | Industry/sector — sharpens the macro/Industry Overview section's search; if omitted, that section falls back to searching around the company's own industry instead of being skipped | |
| company | Yes | Company (or promoter/legal entity) name to research | |
| country | No | india | |
| reportType | No | general_diligence | |
| companyDomain | No | Company's own website domain, e.g. acme.com | |
| outputFormats | No | Which rendered formats to include in the response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only carry readOnlyHint=false, openWorldHint=true, idempotentHint=false, leaving the description to carry the behavioral burden, and it does so thoroughly. It discloses the sector fallback, the report's closing section telling the calling model exactly which analyst-judgment sections to add next (SWOT, bull/bear, valuation with metadata.kind='ai_interpretation'), the risk screen's evidence checklist of which sources were checked, output rendering behavior, and the required writing convention with concrete examples of direct versus hedged phrasing.
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 description is unusually long for a tool definition at roughly 200 words, but nearly every clause earns its place: the verb+scope statement is front-loaded, the consolidation directive over nine sibling tools is placed early, and the trailing writing-style instruction, while lengthy, dictates the model's output voice and is essential to downstream quality. It is dense but not padded.
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 complex 7-parameter aggregator with no output schema, the description covers a great deal: the report's section composition, sector fallback, output formats, sibling alternatives to avoid, and the expectation that the calling model adds analyst-judgment sections. What is missing is the response shape (no output schema exists, and the description only says 'rendered in the requested output formats') and the behavioral meaning of the three enum parameters, both of which matter for a correct call.
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 57%: company, sector, companyDomain, and outputFormats already have schema descriptions, and the tool description adds no new per-parameter meaning — the sector fallback repeats the schema text and outputFormats merely lists the same formats. The three enum parameters (listed, country, reportType) remain undocumented in both schema and description, so an agent has no way to know what reportType=debt_raising changes or what listed=unlisted affects behaviorally. Since coverage sits in the mid range and the description does not compensate for the enum gaps, baseline 3 is 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?
The opening clause 'Generates a complete institutional research report for a company in one call' pairs a specific verb with a clear resource, and the description then enumerates the report's contents (company profile, financial snapshot, macro/industry overview, competitor list, funding history, risk screen, news). It differentiates itself from siblings by explicitly naming the nine tools it consolidates, so an agent can select it over search_company or company_profile without ambiguity.
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 description contains an explicit directive: '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,' which clearly states when this tool is the right choice and names the alternatives. It also explains the sector fallback behavior. It stops short of a full 5 because it never states when NOT to use it — e.g., when only a single section like financial statements is needed — but the consolidation guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_markdownAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Cover-page badge pills, e.g. ['Unlisted', 'Credit Assessment'] | |
| title | Yes | ||
| sections | Yes | ||
| subtitle | No | ||
| brandName | No | Report letterhead name; defaults to the server's own branding | |
| preparedBy | No | Shown on the cover page, e.g. 'INDUSS Research Intelligence Agent' | |
| companyName | No | ||
| generatedAt | No | ||
| brandTagline | No | Report letterhead tagline | |
| classification | No | Cover-page eyebrow label, e.g. 'CONFIDENTIAL RESEARCH REPORT' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool idempotent; the description adds that the operation renders/transforms rather than mutating, and enumerates output components. It does not disclose whether the result is a returned Markdown string or a written file, which would be valuable since no output schema exists. 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 sentence with the action front-loaded and the output structure compressed into a list of meaningful deliverables. The parenthetical schema pointer is efficient and avoids repeating the nested schema.
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?
The description captures the core rendering behavior and output features, but with no output schema it should state whether the result is a Markdown string or a file path, and ideally indicate the intended pipeline from generate_report. It is adequate but not fully complete for a 10-parameter tool.
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 schema already documents half the parameters, and the description reinforces the semantics of 'sections' by mentioning per-section confidence/sources and consolidated citations. It does not add meaning for tags, subtitle, generatedAt, or other cover-page fields, but those are relatively self-evident and the input schema carries the detail.
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 action ('Renders'), a clear input ('structured report ... generate_report's schema'), and a concrete output ('GitHub-flavored Markdown document with table of contents, per-section confidence/sources, and a consolidated citation list'). It is unambiguous about what the tool produces, though it does not explicitly contrast with generate_pdf or generate_report.
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 'see generate_report's schema' reference implies it is meant to consume output produced by generate_report, and the output type differentiates it from PDF generation. However, it never explicitly states when to choose this over generate_pdf or when not to use it, nor does it describe the intended pipeline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Cover-page badge pills, e.g. ['Unlisted', 'Credit Assessment'] | |
| title | Yes | ||
| sections | Yes | ||
| subtitle | No | ||
| brandName | No | Report letterhead name; defaults to the server's own branding | |
| preparedBy | No | Shown on the cover page, e.g. 'INDUSS Research Intelligence Agent' | |
| companyName | No | ||
| generatedAt | No | ||
| brandTagline | No | Report letterhead tagline | |
| classification | No | Cover-page eyebrow label, e.g. 'CONFIDENTIAL RESEARCH REPORT' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses important runtime behavior beyond the generic annotations: the PDF is embedded directly as a base64 resource, a downloadUrl appears only over httpStream, and no filesystem access is required. This gives an agent a clear model of how output is delivered, though it does not mention error cases or potential server-side side effects.
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 tightly packed sentences with no filler. The first sentence front-loads the core purpose and output format; the second explains delivery behavior. Every clause earns its place.
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 10-parameter tool with no output schema, the description covers the input source, the output format, transport behavior, and the main layout characteristics. Minor gaps remain around defaults and error behavior, but an agent has enough information to select and invoke the tool correctly.
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?
With schema description coverage at 50%, the description adds meaning by referencing generate_report's schema and explaining that the input is a structured report with rendering-specific layout features. It does not individually explain every optional parameter, but the external schema reference plus self-explanatory field names covers most practical invocation needs.
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 action ('Renders a structured report'), a concrete output ('institutional-layout PDF'), and details the layout features. It also points to generate_report's schema, tying the tool's input contract to a sibling and clearly distinguishing this PDF-rendering tool from markdown or structured-report 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?
The description clearly indicates this is for rendering a generate_report-style structure into a PDF and returning it inline for remote clients. It does not explicitly say 'use generate_markdown instead when Markdown is needed' or list excluded alternatives, so it stops short of full when-to-use/when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_reportAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Cover-page badge pills, e.g. ['Unlisted', 'Credit Assessment'] | |
| title | Yes | ||
| sections | Yes | ||
| subtitle | No | ||
| brandName | No | Report letterhead name; defaults to the server's own branding | |
| preparedBy | No | Shown on the cover page, e.g. 'INDUSS Research Intelligence Agent' | |
| companyName | No | ||
| generatedAt | No | ||
| brandTagline | No | Report letterhead tagline | |
| classification | No | Cover-page eyebrow label, e.g. 'CONFIDENTIAL RESEARCH REPORT' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide idempotentHint=true and readOnlyHint=false, so the description does not need to restate safety. It adds useful behavioral context beyond the schema: the renderer visually distinguishes AI-interpretation sections, always attaches a 'not advice' disclaimer, and the tool enforces a specific analyst voice. This enriches the agent's mental model of what invoking the tool produces.
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 description is front-loaded with the core purpose and then adds only high-value operational guidance. The length is justified by the need to communicate report content standards, AI-interpretation handling, and voice requirements; there is no filler or repetition of schema details.
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?
The description covers when to call, what it does, how to mark interpretive sections, and the required writing style. For a tool with no output schema, it could more explicitly state what the call returns (e.g., a rendered report or a report object), but the phrase 'assembles ... into the standard report envelope' implies the output sufficiently for an agent.
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 50%, so the description must add parameter meaning. It clarifies that sections carry 'summary, tables, citations, and confidence' and gives precise semantics for metadata.kind = 'ai_interpretation', which the schema leaves open as additionalProperties. It does not cover every undocumented field (e.g., generatedAt, companyName), but it adds real value beyond the schema on the most behaviorally important parameters.
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 verb ('Assembles'), a specific resource ('a structured research report from ResearchSections ... into the standard report envelope'), and explicitly differentiates it from research-gathering tools: 'this tool does no research of its own.' It is immediately distinguishable from fact-finding siblings like financial_statements or latest_news.
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 description gives explicit when-to-use guidance: 'Use after gathering facts with other tools.' It also rules out using it as a research tool, and explains exactly how to handle interpretive content by setting metadata.kind = 'ai_interpretation'. This is strong routing guidance relative to the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
global_peer_compsARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| companyNames | Yes | Peer companies to look up — typically the target company plus discover_competitors' output |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description goes well beyond that by revealing the data source (screener.in), the point-in-time nature of the multiples, and the non-fabrication behavior: unavailable peers return status 'not_available' with a reason rather than a made-up valuation. It also honestly states the ceiling of free data versus paid market-data subscriptions, which is valuable behavioral context for an agent.
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 description is front-loaded with the core action and output fields in the first sentence. The second sentence efficiently conveys coverage limits and failure behavior. The final sentence, while relevant for setting expectations, is slightly rhetorical and could be tightened without losing meaning. Overall it is well-structured but slightly more verbose than necessary.
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 read-only tool with a single parameter and no output schema, the description covers everything an agent needs to invoke it and interpret results: the input convention, the source, the returned multiples, the failure mode for unsupported peers, and the explicit honesty boundary versus paid terminal data. Nothing critical 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?
There is only one parameter, companyNames, and the schema already describes it as peer companies to look up, typically the target plus discover_competitors' output. The description repeats the same guidance without adding extra meaning such as string format, company-name matching rules, or case sensitivity. With 100% schema description coverage, a baseline score of 3 is 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?
The description precisely states what the tool does: for each peer company name, it searches screener.in and pulls real point-in-time valuation multiples, listing the exact metrics (CMP, Market Cap, Stock P/E, Book Value, ROCE, ROE). It is clearly distinguished from a generic global-comps tool by stating the Indian-listed-only limitation and the not_available status for private or foreign peers.
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 description gives clear usage context: feed it peer names, typically the target plus discover_competitors' output, and use it only for Indian-listed companies. It also tells the agent when the tool will not work—for private or foreign-exchange-listed companies—and explicitly disclaims the possibility of producing a paid-terminal-grade global forward-consensus table. However, it does not name a specific sibling tool as a concrete alternative, so routing guidance is not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkARead-onlyIdempotent
Reports server health: config validity, Redis cache connectivity, Postgres configuration status, and the tool capability registry.
| 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 false. The description adds useful behavioral context by specifying what is assessed (config, Redis, Postgres, registry), going beyond the annotations. It doesn't mention response format or auth, but for a read-only diagnostic this is sufficient.
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 entire description is one front-loaded sentence with no filler. Every phrase adds concrete information about what the health check reports.
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 zero-parameter read-only health check, the description covers the important operational aspects: the subsystems checked and the diagnostic scope. It doesn't specify the response schema, but no output schema exists and the listed components give an agent enough context to invoke and interpret basic results.
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 has zero parameters and the schema is fully described, so there are no parameter semantics to clarify. Per the rubric, zero params warrants a baseline 4.
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 uses a specific verb ('Reports') with a clear resource ('server health') and enumerates the exact subsystems checked: config validity, Redis cache connectivity, Postgres configuration status, and the capability registry. This clearly distinguishes it from all sibling tools, which focus on company/valuation data.
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 description makes the operational use obvious: call this when server health status is needed. It doesn't explicitly name alternatives or exclusions, but none of the siblings serve a health-check purpose, so the context is clear enough without them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
industry_overviewARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already covering the safety profile, the description adds meaningful behavioral context: it names the top-tier research sources and describes fallback behavior when sector is omitted. 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?
Two front-loaded sentences convey the core purpose, scope, and usage hint efficiently. The source list is somewhat long but adds credibility and helps define the tool's domain; no filler.
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?
The description conveys what the tool returns (industry research with specific components) and how to steer it, which is enough for initial selection. With no output schema, it does not describe return structure or formatting, but the core decision-making context is present.
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 0%, so the description must compensate. It clarifies the sector/company relationship and fallback, but leaves other context fields (country, listed, date, companyDomain) semantically unexplained, leaving gaps for an agent.
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 uses a specific verb ('Retrieves') and a clear resource ('macro/industry-level research') with enumerated content areas (market structure, key players, growth drivers, TAM/market size). It distinguishes itself as the industry-wide context for company-specific reports, though it does not explicitly name sibling tools that overlap (e.g., market_size).
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 description gives actionable usage guidance: pass context.sector for a sharper search, and notes the fallback to context.company's industry. It contrasts with company-specific (micro) reports, implying when not to use it, but it does not name alternative sibling tools or explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
latest_newsBRead-only
Retrieves recent news coverage of a company from Reuters, Economic Times, Mint, Business Standard, and Moneycontrol, sorted by publish date.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | ||
| daysBack | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the core safety profile is covered. The description adds useful behavioral context by naming specific news sources and stating that results are sorted by publish date, but it does not disclose limits, pagination, return shape, or how broad 'recent' is. This is acceptable but not rich.
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 description is a single sentence with no filler. It front-loads the core action and covers the main scope, sources, and ordering. Every part of the sentence earns its place.
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?
The description covers the core operation adequately for a read-only news lookup, and the schema fills in parameter structure. However, there is no output schema and no mention of what the returned news items look like (titles, links, summaries), nor is there any guidance on the meaning of daysBack or how this differs from negative_news. It is minimally viable but has clear gaps.
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 0%, so the description needed to compensate for parameter meaning. It only hints at the 'company' parameter through 'of a company', and it says nothing about 'daysBack', 'date', 'country', or the nested context object structure. The schema provides some field names and defaults, but the description does not help an agent understand how to set these parameters effectively.
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 action and resource: retrieving recent news coverage of a company, and it names concrete sources and a sort order. It is clear in what the tool does, but it does not explicitly differentiate it from sibling tools like negative_news or management_commentary, aside from the general word 'coverage'.
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 guidance about when to choose this tool over alternatives. It does not mention that negative_news exists for negative-only coverage, or that management_commentary covers management statements instead of press coverage. The usage context is implied by the name and description but never made explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listed_peer_comparisonARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true and openWorldHint=true already covering the safety profile and non-exhaustive nature, the description adds meaningful context: multi-source aggregation across screener.in, Trendlyne, and exchange portals, plus the expectation of repeated per-company calls. It doesn't cover failure modes like source unavailability, but the openWorldHint partially covers that.
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, information-packed sentence that front-loads the action and resource before the usage tail. Every clause earns its place — the em-dash section is critical for sibling differentiation. Slightly run-on and could be split into two sentences, but there is zero filler.
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 read-only, one-parameter tool with no output schema, the description covers the essential bases: what fields come back (market cap, P/E, shareholding-pattern context), where the data comes from, and how to call it per company. Minor gaps: the Indian-only sources imply country=india but the schema allows 'global', and the description doesn't clarify behavior when a company is unlisted.
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 0% per the context signal, so the description bears the burden. It adds important semantics for the required 'company' parameter (must be a listed company; one company per call). However, it says nothing about 'country', 'listed', 'sector', or 'companyDomain' semantics, and while the schema itself documents three of six properties, the key required param is only partially explained.
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?
Uses a specific verb ('Retrieves') with a concrete resource ('listed company's own financial snapshot') and names the exact data points (market cap, P/E, shareholding-pattern context). The 'run once per company' clause distinguishes it from sibling tools like discover_competitors and global_peer_comps, which operate across companies in one call.
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 description gives an explicit invocation pattern: run once per company, for the target and each peer that discover_competitors identifies, then assemble results into a peer-comparison table. It clearly references a sibling workflow but stops short of naming alternatives to avoid or stating when-not-to-use conditions (e.g., for unlisted companies).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
litigation_historyARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety and exhaustiveness profile (readOnlyHint=true, openWorldHint=true), so the bar is lower. The description adds real provenance context: the specific legal databases screened and the categories of enforcement records covered, which helps an agent calibrate coverage expectations. It does not address result format, data freshness, or source-coverage limitations, but these are secondary given the 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?
Exactly two sentences with no filler: the first packs sources, record types, and subject scope; the second delivers the sibling distinction. The most decision-relevant information is front-loaded before the alternative routing.
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 read-only research tool with one required nested parameter and no output schema, the description covers the subject, sources, record categories, and the key alternative thoroughly. Two gaps remain: it never hints at the return shape (list of case citations vs. narrative findings), and the `sector`-as-subject option is not reconciled with the 'company or promoter name' subject phrasing. These are minor for invoking the tool correctly, hence a 4 rather than 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 0% at the top level, and the only required field (`company`) is undescribed in the schema, so the description must compensate. It partially does by stating the subject can be a company or promoter name, giving the `company` parameter meaning the schema lacks. However, it adds nothing about `date`, `listed`, `country`, or `companyDomain`, and the India-specific source list sits awkwardly with the `country: global` option — compensation is only partial.
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 uses a specific verb ('screens'), names precise sources (SEBI, NCLT, IndianKanoon, LiveLaw, Bar & Bench), and enumerates concrete record types (litigation, regulatory penalties, insolvency proceedings, director disqualification). It also explicitly distinguishes itself from the closest sibling, negative_news, so an agent can differentiate the tools without opening schemas.
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 second sentence gives an explicit routing rule: this tool is for hard legal/regulatory records, while negative_news covers general press/employee sentiment. That is a clear when/when-not with a named alternative, matching the structure of the strongest calibration examples. It only covers one sibling, but negative_news is the genuinely confusable one; other siblings are distinguished by name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
management_commentaryARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses crucial behavioral traits beyond the readOnly/openWorld annotations: it returns 'guidance-shaped sentence fragments' from press coverage, not verified transcript quotes, and instructs agents to attribute to the covering outlet unless the source is the transcript. This materially shapes how the output should be interpreted and cited, which is highly valuable for an agent.
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 description is two sentences, each earning its place: the first states the function and use case, the second sets expectations about source quality and attribution. It is front-loaded and contains no filler or redundant restatement of the tool title.
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 tool with no output schema, the description does a good job of explaining what the agent will receive and how to attribute it. However, it does not explain how optional context fields such as date, listed, sector, or country affect results, leaving some ambiguity for non-standard queries like sector-level research.
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 reported at 0%, so the description is responsible for explaining how the context parameter influences the tool's behavior. It provides no guidance about company, date, country, sector, or other input fields, leaving the agent to infer parameter semantics from the schema alone. This is a significant gap for a nested parameter object.
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 uses a specific verb ('Finds') and a specific resource ('management guidance and outlook commentary from earnings-call coverage and press interviews'), making the tool's purpose immediately clear. The added analogy about 'what did management say about the next few quarters' further clarifies its role in initiating-coverage research. It is easily distinguishable from sibling tools like management_profile or consensus_estimates.
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 description clearly identifies a use case: the management-guidance input for initiating-coverage notes. It also informs the agent that output comes from press coverage rather than verified transcripts, setting expectations about source fidelity. However, it does not name alternative tools or explicitly state when not to use this tool, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
management_profileBRead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint and openWorldHint, and the description adds valuable behavioral disclosure: the data is pattern-extracted from narrative search snippets, so identity must be verified against the source URL before quoting. This goes beyond the annotation safety profile by flagging potential unreliability. 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?
The core action is front-loaded in the first sentence, and the second sentence contains the important caveat. The text is compact at roughly two sentences, though the second sentence is slightly convoluted with the 'Every real initiating-coverage note' construction.
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?
The description names the output fields and the reliability caveat, which is helpful given there is no output schema. However, it does not explain how optional context fields like sector, listed, or country affect the lookup, nor the return shape beyond field names, so an agent may have to infer some invocation details.
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?
With schema description coverage at 0%, the description needed to explain the required context.company and the optional filters, but it does not. 'Company's own site' loosely hints at companyDomain, and 'company' is inferable from the subject matter, but no explicit parameter guidance is provided.
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 clearly states a specific action ('Retrieves') and resource ('key management personnel and board member profiles') and enumerates the data fields (name, designation, background) and sources. It does not explicitly position the tool against siblings such as management_commentary or promoter_background, so it falls short of full sibling differentiation.
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 description gives a purpose but no when-to-use guidance, prerequisites, or comparisons to alternative tools. The second sentence explains data provenance and a verification requirement, but it does not tell an agent when to choose this tool over management_commentary, promoter_background, or company_profile.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_sizeARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already provide readOnlyHint and openWorldHint. The description adds useful behavioral context: results are numeric estimates extracted via pattern matching from analyst/research sources, and the sector-to-company fallback behavior. It does not mention no-result behavior, but it goes beyond what the annotations convey.
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 with no filler. The first sentence states the tool's purpose, method, and sources; the second gives parameter guidance. Information is front-loaded and every sentence earns its place.
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 read-only extraction tool with no output schema, it communicates the purpose, sources, extraction method, and parameter fallback. It does not specify the exact return shape, units, or behavior when no figures are found, but these are minor gaps given the tool's narrow scope and simple input context.
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 description explains the relationship between context.sector and context.company, which is not evident from the schema alone, and it tells the agent which to set. The nested schema fields have their own descriptions, though the top-level context parameter lacks one; a little more about expected units or country defaults would round this out.
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 clearly identifies the action ('Finds') and the resource ('market size and CAGR figures for an industry'), and it names concrete analyst/research sources. It also explicitly distinguishes the company-fallback behavior, so an agent can tell this tool apart from broader industry-overview or company-profile tools.
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?
It provides explicit parameter guidance: pass context.sector when known, otherwise the tool falls back to searching around context.company's own market. It does not name sibling alternatives or state when not to use it, but the intended usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
multi_stage_dcf_valuationARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| assumptions | Yes | ||
| companyName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds meaningful behavioral context beyond those: 'every assumption is caller-supplied and echoed back, nothing is guessed or defaulted, and this computes — it doesn't render a verdict.' It also explains the glide mechanics of the fade stage, which is a behavioral trait not evident from the 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?
The description is informative but quite long and parenthetical. It front-loads the core 'Runs a 3-stage DCF' and the key structural details, but the ICICI Securities anecdote and the extended contrast with single-stage ad value. It could be tightened without losing meaning.
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?
Given the tool's complexity and the absence of an output schema, the description should clarify what the tool returns (e.g., enterprise value, equity value, per-share value) and how 'echoed back' manifests. It explains the conceptual model and parameter usage well, but the output contract is left to inference via 'same rules as dcf_valuation.'
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?
With schema description coverage at 0% for top-level parameters, the description carries the burden for explaining the complex inputs. It elaborates on stage1GrowthPath/stage1EbitdaMarginPath (explicit forecast years, typical 8-10 for growth names) and fadeYears (linear glide from stage 1 final rate to terminal growth). However, standard inputs like wacc, taxRate, and netDebt are not individually described, leaving some gaps.
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 verb and resource: 'Runs a 3-stage DCF' with an explicit forecast stage, fade stage, and terminal value. It clearly differentiates from sibling dcf_valuation by describing the single-stage alternative's behavior and why multi-stage is superior for fast-growing names.
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 description gives clear context on when the tool is appropriate: companies still years from steady state benefit from 8-10 year explicit forecasts and a fade stage, whereas single-stage dcf_valuation understates such cases. It names the alternative (dcf_valuation) but doesn't spell out a hard when-to-use/when-not-to-use rule or address other valuation siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
negative_newsARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows this is safe and potentially partial. The description adds context about the information sources (Glassdoor, Reddit) and the type of adverse signals covered (fraud, layoffs, defaults, employee/public controversy), which goes beyond the annotations. It does not describe pagination or return format, but for a screening tool with readOnlyHint and openWorldHint, the description adds meaningful behavioral context. A 4 seems fair.
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, front-loaded with the core purpose and examples of what it covers. The second sentence routes to the alternative tool. No filler. Slightly dense but highly 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?
Given no output schema, complexity includes a nested context object with several optional fields. The description tells the agent the purpose and the source categories, and points to the sibling for legal records. It does not explain how to use optional parameters like sector, companyDomain, or listed, and does not describe output shape, but the readOnly and openWorld annotations cover the uncertainty. Complete enough for the agent to decide and invoke, though parameter usage guidance is modest.
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 0%, so the description must compensate. The description mentions 'a company' but does not elaborate on any of the input parameters (context, company, date, listed, sector, country, companyDomain). It does not say how the parameters influence the search, e.g., how country or listed affect the sources. Baseline is 3 when description adds some context; here it adds purpose context but no parameter-specific semantics beyond what the JSON schema already shows.
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 clearly states the tool's purpose: screens news and public-sentiment sources (Glassdoor, Reddit) for adverse media and complaints about a company, specifically for due-diligence and risk-screening. It differentiates from litigation_history by explicitly stating that hard regulatory/legal records should use that tool instead. The verb 'screens' plus the resource and context make the purpose specific and distinguishable.
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 description explicitly names an alternative tool (litigation_history) and gives the condition for selecting it ('For hard regulatory/legal records... use litigation_history instead'). This leaves no ambiguity about when to use this tool versus its closest sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
operating_metricsARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | ||
| metricNames | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and openWorldHint already in annotations, the description still adds substantial behavioral context: the proximity-matching mechanism ('proximity-matched numbers near a metric name in free text'), the output being 'not a structured KPI table', the fallback to a 'generic cross-sector list', and an explicit verification directive ('treat every value as a lead to verify against its source URL'). Nothing contradicts the 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?
Three sentences, each earning its place: (1) scope and sources, (2) parameter tuning plus fallback, (3) quality warning and verification workflow. The core purpose is front-loaded, and there is zero filler or repetition of schema 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?
Given no output schema and two parameters, the description covers the essential ground: what is searched, where, how to narrow it, what happens without narrowing, and how to treat the noisy results. Minor gaps: it doesn't name a specific structured alternative to route to, and the return shape is described only abstractly (proximity-matched numbers with source URLs) rather than concretely.
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 0% at the parameter level, so the description must compensate. It richly explains metricNames — its purpose, how to source the vocabulary (industry_overview/discover_competitors results), and the fallback when omitted. The context object is not explained, but its nested schema provides structural hints for company/sector/country; the gap is minor since metricNames is the differentiating parameter.
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 opens with a specific verb ('Searches for') and a well-scoped resource ('sector-specific operating KPIs'), backed by concrete examples (store count, same-store-sales growth, DAU/MAU, GMV) and explicit sources (investor-presentation and press coverage). This clearly separates it from structured-financial siblings like financial_statements and ratio_analysis without needing the schemas.
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 description gives explicit usage guidance for the key parameter — 'Pass metricNames with the specific KPI vocabulary... for a sharper search' — and discloses the fallback behavior when it is omitted. The noise caveat ('noisier than the server's other tools') implies the agent should prefer structured tools for citable facts, though it stops short of naming a specific alternative sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
promoter_backgroundARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | context.company should be the promoter/director's name, or the company name if screening its leadership generally |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the description only needs to add context beyond that. It adds the regulatory source set and clarifies the company-field semantics, but it does not disclose result format, limitations of coverage, or how open-world results should be interpreted.
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, front-loaded with the tool's purpose, followed by a direct invocation instruction. There is no filler or redundant material.
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 tool with one required parameter, the description fully explains what to pass and why, and the schema documents optional fields. The only gap is that it does not hint at the shape or nature of the returned findings, but this is not essential for correct invocation.
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 context property description already explains that context.company should be the promoter/director's name or a company name. The tool description essentially restates that same guidance without adding new parameter-level meaning.
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 action ('Screens'), a specific subject (promoter or director name), specific data sources (SEBI/MCA/registry), and specific outcomes (disqualification, debarment, regulatory penalty). This is enough to distinguish it from general management or litigation lookup tools.
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 description gives clear instruction on what to pass as context.company and when that could be a person or a company. However, it does not explicitly state when to prefer this tool over siblings such as management_profile, litigation_history, or red_flag_screen, nor does it mention exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ratio_analysisARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| statements | Yes | Chronologically ordered (oldest first) financial statements, e.g. from the financial_statements tool | |
| companyName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint, idempotentHint, and openWorldHint, and the description adds 'deterministic' and 'Pure calculation — no search, no LLM tokens', reinforcing and extending the behavioral profile. It does not contradict annotations. It could add edge-case or output-format details, but the annotations carry part of the burden.
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, front-loaded with the primary purpose, with no redundant filler. The behavioral qualifier 'Pure calculation — no search, no LLM tokens' is compact and earns its place.
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 calculation tool with a detailed input schema, the description covers the key inputs, the computation scope, and the output themes. There is no output schema, so a little more detail about the returned structure would improve completeness, but the description is still sufficient for selection and invocation.
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 schema describes the main 'statements' parameter with ordering and source context, and the description adds the notion of multi-period CAGR and the financial statement categories. However, optional fields like companyName and the exact required financial metrics (revenue, netProfit) are not explained beyond the schema, and schema description coverage is only 50%.
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?
Description uses a specific verb ('performs') with a clear resource ('financial ratio analysis over FinancialStatement objects') and lists the exact ratio categories and CAGR trend. The phrase 'Pure calculation — no search, no LLM tokens' also helps distinguish it from sibling tools that generate narratives or search data.
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 description provides clear context for when to use it: when deterministic financial ratio analysis or multi-period CAGR is needed, not when search or LLM-driven output is required. It does not explicitly name sibling alternatives or state when-not-to-use conditions, 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.
red_flag_screenARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| companyName | No | ||
| litigationCases | No | Pass through the `cases` array from litigation_history's output | |
| negativeNewsCount | No | Count of entity-matched hits from negative_news's output | |
| monthsSinceLastFunding | No | ||
| promoterRegulatoryHits | No | Count of disqualification/regulatory hits you found in promoter_background's output | |
| plausibilityIssuesByPeriod | No | Pass through metadata.plausibilityIssues from ratio_analysis/financial_statements |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, the description adds important behavioral context: the tool only aggregates supplied evidence, never fabricates new evidence, and does not render an investment verdict. It also explains the optionality behavior, making the tool's operational boundaries clear.
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 description is dense but every sentence earns its place: it defines the output, names the evidence sources, clarifies non-invention and non-verdict behavior, and explains optionality. It is front-loaded with the core purpose and avoids redundant phrasing.
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?
The description covers the aggregation purpose, severity buckets, overall severity, source traceability, and optional inputs. Since there is no output schema, the description does most of the work, though it stops short of describing the exact flag object structure or threshold logic; monthsSinceLastFunding is also left unexplained.
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 description usefully maps several parameters to their upstream tool outputs, such as litigationCases from litigation_history and negativeNewsCount from negative_news. However, monthsSinceLastFunding and companyName receive no semantic explanation in either the schema or the description, leaving a noticeable gap for those parameters.
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 verb and resource: it aggregates already-gathered evidence into a severity-bucketed flag list. It names the upstream tools and explicitly clarifies that it invents no new evidence and renders no investment verdict, which clearly distinguishes it from other research and report-generation 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?
The description gives clear context for when to use the tool: after evidence has been collected from litigation_history, negative_news, ratio_analysis/financial_statements, and promoter_background. It also states that all inputs are optional and that omitted categories contribute no flags, which is practical selection guidance, though it does not explicitly name exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scenario_analysisARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bearDelta | No | ||
| bullDelta | No | ||
| companyName | No | ||
| sensitivity | No | Optional 2D grid, e.g. rowAxis=wacc values [0.09..0.13], columnAxis=terminalGrowthRate values [0.02..0.05] | |
| baseAssumptions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint=false, and idempotentHint. The description adds meaningful behavior beyond these: it reports each case's validity issues rather than presenting a distorted number, invents no assumptions of its own, and performs no search. This is consistent with the annotations and gives an agent useful non-obvious expectations.
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?
Three dense sentences with no filler: the first states the core behavior, the second explains input ownership and validity handling, and the third gives the tool-type constraint. The length is justified by the tool's complexity and every sentence adds useful guidance.
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 complex nested-schema tool with no output schema, the description covers execution modes, input ownership, validity behavior, and the no-search constraint. It could be more explicit about the exact shape of returned fair-value outputs, but 'fair-value outcomes' and per-case validity reporting give adequate expectations.
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 low (~20%), so the description does meaningful compensation: it explains bull/bear deltas with a concrete example (+3% revenue growth, -1% WACC), clarifies that the base case is 'as given', and notes sensitivity grid values are typically WACC x terminal growth rate. It does not enumerate the required baseAssumptions fields, but those are standard DCF inputs largely inferable from property names.
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 verb ('Runs'), resource ('mechanical DCF'), and precise behavior: three cases (base, bull, bear) plus an optional 2D sensitivity grid. It also clearly distinguishes the tool from the sibling dcf_valuation by noting it runs the same DCF across scenarios rather than a single valuation.
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 description positions the tool relative to dcf_valuation, explains that the caller must supply deltas/grid values from their own analysis, and explicitly says it is 'pure calculation — no search'. It provides clear context but does not enumerate exclusions or name alternatives like multi_stage_dcf_valuation or sotp_valuation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companyARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Builds on the readOnlyHint and openWorldHint by explaining that the search is domain-restricted and that it returns authoritative source URLs for website, LinkedIn, and registry presence. This gives the agent useful behavioral expectations without contradicting the 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?
Two front-loaded sentences: the first names the output and method, the second gives the routing intent. No filler or repetition of schema data.
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 simple read-only discovery tool, the description names the output and its upstream position. However, it omits semantics for the optional context fields and any no-result behavior, so while adequate, it is not fully complete for an agent working with the richer nested context parameter.
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?
With schema description coverage at 0%, the description needed to explain the context object and its optional fields (date, listed, sector, country, companyDomain), but it only implies the company name. Aside from company, an agent cannot tell from the description why or how to set the other fields, so it does not compensate for the schema gap.
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 ('Discover') plus concrete resources (official website, LinkedIn, registry presence) and the method (domain-restricted Exa search). The second sentence clarifies it is a pre-resolution step for other company tools, so it is clearly distinct from downstream tools like company_profile or financial_statements.
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?
Explicitly instructs the agent to use this first to resolve a company name to authoritative URLs before other company tools, which is clear situational guidance. It stops short of saying when not to use it (e.g., when the domain is already known) or naming specific alternative tools, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
segment_revenueARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description adds valuable behavioral detail: it does not fabricate splits when unreported, it is pattern-matched from narrative text, and users should verify labeled values against the source URL. This gives an agent an accurate model of the tool's reliability and limitations.
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 description is three sentences, each earning its place: the first defines the core purpose, the second explains the empty-result behavior, and the third warns about verification. The main function is front-loaded and there is no filler.
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 tool with no output schema, the description conveys the key return behavior (mentions[]), the anti-fabrication guarantee, and the need to verify against source URLs. It does not fully describe the output structure or parameter semantics, but it gives enough context for an agent to call the tool and interpret basic results.
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 0%, and the description provides essentially no parameter-level guidance. It mentions 'a company' and 'source URL' but does not explain the context object, required company field, optional sector/country/date fields, or how the input affects the search. The description fails to compensate for the low schema coverage.
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 uses a specific verb and resource: it 'Finds business-segment or channel revenue mix' and gives concrete examples like Online vs Offline and product-line splits. It also clarifies that it only returns results when a company actually discloses such a split, which clearly distinguishes it from generic financial or operating metric tools.
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 description clearly states when the tool applies: when a company discloses segment revenue in an investor presentation, annual report, or press coverage. It also provides guidance for the negative case by noting that an empty mentions[] is returned rather than a fabricated split. It does not explicitly name alternatives, but the scope is clear enough for selection among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sotp_valuationARead-onlyIdempotent
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 rationale field, and mark the section that presents this as your own valuation call with metadata.kind = "ai_interpretation" (see generate_report).
| Name | Required | Description | Default |
|---|---|---|---|
| cash | No | ||
| netDebt | No | ||
| segments | Yes | ||
| companyName | No | ||
| sharesOutstanding | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as read-only and idempotent, and the description is fully consistent. Beyond the annotations, it discloses the tool's key behavioral boundary — it computes but does not judge — and explains the expected analyst contribution: reasoning per segment, supplying rationale, and marking the output as an AI interpretation. This is materially useful 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?
The description is dense but every sentence carries important information: mechanics, usage context, a real-world example, and analyst responsibilities. It could be slightly tightened or broken into bullets, but it remains well front-loaded with the core function and does not waste words on filler.
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 valuation tool with no output schema, the description covers the full workflow: valuation logic, segment structure, citation of peer inputs, rationale expectations, and metadata handling. An agent has enough to call the tool correctly and to present the result appropriately in a report.
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?
With schema description coverage at 0%, the description compensates well: it enumerates the allowed metric types, clarifies that 'Direct EV' supplies the segment value directly while other metrics use a multiple, and traces how cash, netDebt, and sharesOutstanding feed into the final per-share value. companyName is not explicitly mentioned, but its meaning is self-evident, so the gap is minor.
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 opens with a specific verb and resource: 'Runs a Sum-of-the-Parts valuation,' then walks through the exact valuation waterfall. It also distinguishes itself from a single blended DCF/multiple by stating it is for companies whose segments have genuinely different economics, which separates it from dcf_valuation and comparables_valuation 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?
It explicitly says when to use this tool ('Use this instead of a single blended DCF/multiple for a company whose segments have genuinely different economics') and gives a concrete example. It also tells the agent what not to expect ('does NOT choose the multiples for you') and directs it to peer-comparison tools for support, making the selection and invocation decision clear.
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. Dates show when Glama detected each change.
32 tool updates
v0.1.0- First observed
company_overview - First observed
company_profile - First observed
comparables_valuation - First observed
consensus_estimates - First observed
dcf_valuation - First observed
discover_competitors - First observed
financial_statements - First observed
funding_history - First observed
generate_institutional_report - First observed
generate_markdown - First observed
generate_pdf - First observed
generate_report - First observed
global_peer_comps - First observed
health_check - First observed
industry_overview - First observed
latest_news - First observed
listed_peer_comparison - First observed
litigation_history - First observed
management_commentary - First observed
management_profile - First observed
market_size - First observed
multi_stage_dcf_valuation - First observed
negative_news - First observed
operating_metrics - First observed
promoter_background - First observed
ratio_analysis - First observed
red_flag_screen - First observed
scenario_analysis - First observed
search_company - First observed
segment_revenue - First observed
shareholding_pattern - First observed
sotp_valuation
TDQS
Most tools map to a distinct research function, but there are several close pairs and triples: the three DCF variants, listed_peer_comparison vs global_peer_comps, the four report/generation tools, and market_size vs industry_overview. The descriptions do an excellent job of separating them, but the boundaries are subtle enough that an agent must read carefully to avoid selecting the wrong tool.
Tool names are consistently lower_snake_case and mostly follow a descriptive noun-phrase pattern for data-gathering tools, with a clear generate_* subgroup for report/PDF/Markdown output. Minor deviations like search_company, discover_competitors, and health_check mix in verbs, but the overall pattern remains predictable and readable.
At 32 tools, the surface is well beyond the 25+ threshold and will impose a meaningful selection burden even though the domain is broad. Several tools could plausibly be consolidated, such as the DCF variants and the overlapping peer-comparison tools.
The set covers the full equity-research workflow: company resolution, profile, financials, ratios, segment and operating data, multiple valuation methodologies, peer and industry context, news and risk screening, and structured report rendering. There are no obvious dead ends for producing an initiating-coverage-style research note.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
AI research on companies and industries — one MCP tool per research domain.
Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools.
The financial MCP for AI agents - 90+ financial tables, SEC filings, signals, alt-data.
The Octagon MCP server provides specialized AI-powered financial research and analysis by integrating with the Octagon Market Intelligence API. It enables users to analyze public market data (SEC filings, earnings transcripts, financial metrics, and stock data for 8000+ companies), private market data (3M+ companies, 500k+ funding rounds, 2M+ M&A/IPO transactions), and conduct deep research including web scraping capabilities. The server also features autonomous research agents that search hundreds of sources and return fully cited reports in approximately one minute.
Related MCP Servers
FlicenseNot gradedqualityDmaintenanceEnables dealmaking research for AI assistants, providing company intelligence, transaction data, and research deliverables via MCP.-- FlicenseAqualityBmaintenanceProvides an institutional research backend for AI assistants, with 15 tools for company, financial, funding, competitor, industry, and news intelligence, plus Markdown/PDF report generation, featuring deterministic source routing, extraction, validation, and citation generation.15-
- AlicenseAqualityBmaintenanceEnables AI clients to perform autonomous multi-agent deep research through MCP tools, including deep research, quick search, and retrieval of archived Markdown reports with live web search and source citations.4MIT
- AlicenseBqualityCmaintenanceProvides a suite of MCP tools for evidence-grounded investment research, including time-bounded search of reports and news, thesis verification against subsequent events, market response calculations, and generation of validated research briefs.9MIT
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