INDUSS Research Intelligence MCP Server
The INDUSS Research Intelligence MCP Server is an institutional research backend for AI assistants, enabling end‑to‑end retrieval, extraction, validation, and reporting of company, financial, industry, and risk data from public sources—with full citations, entity verification, and evidence metadata, so answers are grounded in real data rather than LLM‑generated facts.
Capabilities:
Company Intelligence: Resolve company names to authoritative URLs (
search_company); retrieve registry‑grade profiles (CIN, incorporation date, registered office) and narrative business overviews; extract structured financial statements (Income Statement, Balance Sheet, Cash Flow).Financial Analysis: Perform deterministic ratio analysis (profitability, liquidity, leverage) and multi‑period CAGR trends on financial data.
Funding & Competitors: Discover funding rounds, investors, and valuations from Crunchbase/MCA; identify candidate competitors and listed peers.
Industry & Market: Get industry overviews (structure, key players, drivers) from top‑tier sources (Deloitte, McKinsey, BCG, etc.) and numeric market size/CAGR figures.
News & Risk: Fetch latest news (configurable lookback) and screen for adverse media (fraud, litigation, regulatory actions, defaults); access litigation history, promoter backgrounds, and regulatory orders.
Report Generation & Export: Assemble structured research reports with summaries, tables, citations, and confidence scores; export as GitHub‑flavored Markdown, institutional‑layout PDF (base64 or download URL), HTML, or JSON. An
generate_institutional_reportorchestrator can compile a full report in one call.System Health: Check server configuration, cache/database connectivity, and the full tool capability registry via
health_check.
All responses include detailed citations (source, URL, date, tier, authority, recency penalty, confidence) and entity verification to avoid false positives. Infrastructure degrades gracefully when optional Redis/Postgres are unavailable.
Allows screening for negative signals about a company by retrieving employee sentiment data from Glassdoor, used in the negative_news tool for due-diligence risk assessment.
Allows screening for negative signals about a company by retrieving social sentiment data from Reddit, used in the negative_news tool for due-diligence risk assessment.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@INDUSS Research Intelligence MCP ServerGenerate a research report on Tesla's financials and competitors"
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: Linkup Company Research MCP
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 (19)
Category | Tools |
Company Intelligence |
|
Financial Intelligence |
|
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.
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
15 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 declare readOnlyHint=true and openWorldHint=true, so the agent knows it is a safe read operation. The description adds value by specifying data sources (company site, LinkedIn) and output type (narrative overview), but it does not disclose limitations, error behavior, or data freshness details.
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, focused sentence that immediately states the tool's purpose and includes relevant details about content and sources. 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?
Despite being concise, the description is incomplete for a research tool with one complex parameter and many sibling tools. It lacks usage differentiation, parameter explanations, and details on output structure or failure modes.
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 has a single nested 'context' object with properties like company, country, listed, sector, and companyDomain, but schema_description_coverage is 0% and the tool description does not explain these fields or their semantics. It only implies the company is the subject, leaving other parameters ambiguous.
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 resource ('narrative business overview') and clarifies content (what the company does, products/services, target market) and sources (company site, LinkedIn). However, it does not explicitly distinguish this from sibling tools like 'company_profile', which may overlap.
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 no guidance on when to use this tool versus alternatives such as 'company_profile', 'industry_overview', or 'search_company'. It simply states what it does, leaving the AI agent to infer appropriate usage.
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?
The description adds context beyond the readOnly/openWorld annotations by revealing the tool aggregates data from MCA/Tofler/Zauba/OpenCorporates and the company's own site, and notes the 'registry-grade' nature of the facts. This gives the agent a sense of data provenance and expected trustworthiness, though it does not cover failure modes or rate limits.
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 of ~20 words, front-loaded with the main action and deliverables. Every word contributes; 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 supplies key return facts and sources, and the schema covers the input object, but without an output schema the description does not fully specify the return structure or behavior for missing companies. It is adequate for a simple lookup but leaves some operational 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?
The tool's description does not explain how to fill the 'context' object; the schema has some nested property descriptions (date, sector, companyDomain) but the top-level parameter lacks documentation. With schema description coverage at 0%, the description offers no compensation for parameter semantics.
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 specifies a concrete action ('Retrieves'), the resource ('company profile facts'), and the exact data points (CIN, incorporation date, registered office), plus named sources. This clearly distinguishes it from broader tools like company_overview or search_company.
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?
Although the description implies a use case (obtaining registry-grade facts), it does not explicitly state when to prefer this over the sibling tools (e.g., company_overview) or mention any exclusions or alternatives. The context is clear but the guidance is implicit.
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 and extracts candidate competitor names via text-pattern heuristics. Results should be treated as a starting candidate list, not a verified peer set.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds valuable behavioral context: results are based on text-pattern heuristics and should be treated as an unverified candidate list, which sets expectations about result quality and completeness. 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 description is two concise sentences: the first states the main action and method, the second provides an important caveat. It is front-loaded and contains no unnecessary words.
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 tool has a nested context object and no output schema, so the description should compensate by explaining input usage and output format. It mentions the output is candidate competitor names, which gives a basic understanding, but it doesn't detail the expected response structure or how to use the context fields, leaving gaps for more complex usage.
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 has a required nested 'context' object with multiple fields, but schema description coverage is 0% for top-level parameters. The description provides no guidance on how to set or use parameters like company, sector, country, or companyDomain, so the agent must infer entirely from the schema's sparse field comments.
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 searches industry-analyst and news sources for named competitors/rivals, using text-pattern heuristics to extract candidate names. This distinguishes it from sibling tools like company_profile or search_company by specifying the exact action and output.
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 conveys clear context for when to use the tool: to discover candidate competitors as a starting list. It also cautions that results are not verified, guiding appropriate interpretation. However, it doesn't explicitly mention alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
financial_statementsARead-only
Locates a company's annual report / financial statement filing and extracts structured line-item tables (revenue, net profit, EBITDA, assets, equity, debt) from the underlying HTML or PDF document.
| 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, covering the safety profile. The description adds context about parsing HTML or PDF and extracting specific tables, but it does not disclose potential limitations like dependency on company listing status, missing data for unlisted companies, or the exact structure of the returned tables.
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, well-structured sentence that front-loads the tool's purpose and output. Every phrase adds value with no repetition or 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 lists the line items that will be extracted, which is helpful, but there is no output schema and no statement about return format or example usage. Given the moderate complexity and lack of parameter guidance, the description is adequate but has noticeable 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?
The schema has 0% description coverage for the 'context' parameter (the only parameter). The tool description does not explain how to fill the context object, such as the requirement to provide 'company' or the optional fields, leaving the agent to infer from property names alone.
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 specific verbs ('Locates' and 'extracts') and names the resource (annual report / financial statement filing) and the structured line-item outputs (revenue, net profit, EBITDA, assets, equity, debt). This clearly distinguishes it from sibling tools like ratio_analysis or company_profile, which address different 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 implies the tool is for retrieving raw financial line items from filings, but it does not explicitly state when to use it over alternatives such as ratio_analysis or company_overview. No exclusions or alternative tool references are provided.
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, 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?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds value by disclosing the external sources searched and the 'candidate' nature of extracted facts, signaling that results may be unverified or partial. No contradictions 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?
A single sentence that is concise and front-loaded. It packs the essential purpose, sources, and output type without wasted words. Ideal structure.
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 a nested context parameter and no output schema, the description is moderately complete. It explains what is searched and what is extracted, but doesn't detail return format, edge cases (e.g., company not found), or how to use the optional fields. Annotations help, but the absence of output schema leaves a 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%, meaning the tool description does not explain the parameters. It mentions 'company' but not the required 'context' object or its fields (date, country, listed, etc.). The schema has some field descriptions, but the description fails to compensate for the low coverage, leaving the agent without guidance on optional 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 is specific: it names the exact data sources (Crunchbase, Tofler, MCA, OpenCorporates), the target (a company), and the outputs (funding rounds, investors, valuation mentions, candidate round/amount facts). This clearly distinguishes it from sibling tools like financial_statements or company_profile.
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 usage for researching funding history, but provides no explicit when-to-use guidance or exclusions. It doesn't mention alternatives or conditions like 'use for unlisted companies only' or 'use company_profile for overview'. The context is clear but not contrasted with siblings.
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 |
|---|---|---|---|
| title | Yes | ||
| sections | Yes | ||
| subtitle | No | ||
| companyName | No | ||
| generatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include idempotentHint=true and readOnlyHint=false, and the description adds context by detailing the output structure (GFM, TOC, confidence/sources, citations). This goes beyond the annotations to explain what the transformation 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?
A single, information-dense sentence conveys purpose, input reference, and output features with no unnecessary words. Front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and lack of output schema, the description adequately explains what the tool returns (Markdown with TOC, confidence/sources, citations). It does not mention error behavior or return type, but for a rendering tool this is acceptable. The reference to generate_report's schema anchors the 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?
Schema description coverage is 0%, so the description must compensate. It references generate_report's schema, which helps an agent understand the input structure, but it does not explain individual parameters (title, sections, etc.) or how they map to the output. The schema is fairly self-explanatory, but the description could do more.
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 renders a structured report into GitHub-flavored Markdown, with specific features (TOC, per-section confidence/sources, consolidated citations). It distinguishes from siblings like generate_report (input source) and generate_pdf (different output format).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'see generate_report's schema' strongly implies this tool consumes the output of generate_report, providing clear context for when to use it. However, it does not explicitly mention alternatives like generate_pdf or exclusions, so it misses the top score.
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 (headers, footers, page numbers, TOC, tables, per-section confidence, citations) via headless-browser HTML-to-PDF conversion, and writes it to the local reports directory.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| sections | Yes | ||
| subtitle | No | ||
| companyName | No | ||
| generatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors: it uses 'headless-browser HTML-to-PDF conversion' and 'writes it to the local reports directory,' revealing side effects beyond the annotations (readOnlyHint=false, destructiveHint=false). This adds useful context, though it doesn't mention file overwriting or return values.
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 that front-loads the primary purpose, then adds technical details and output location. Every word is purposeful, and it avoids redundant restatement of the tool name or schema fields.
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 complex nested schema and no output schema, the description adequately covers the input source, rendering process, output format, and destination. It lacks explicit return-value or error-handling details, but for an agent selecting and invoking the tool, the essential 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?
The description does not explain the parameters directly; it only references 'generate_report's schema.' With schema description coverage at 0%, the description fails to compensate for the lack of prose parameter explanations. The inline schema is thorough, but the description adds no parameter-specific meaning beyond a cross-reference.
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 function: 'Renders a structured report into an institutional-layout PDF' and specifies the output destination. It distinguishes itself from sibling tools like generate_markdown by the PDF output format and mentions generate_report's schema for input, which clarifies its role.
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 to use this tool: when an institutional-style PDF is needed, as opposed to markdown or a raw report. It doesn't explicitly state 'use this instead of X,' but the context of the PDF layout and mention of generate_report's schema gives clear guidance without exclusions.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| sections | Yes | ||
| subtitle | No | ||
| companyName | No | ||
| generatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true and readOnlyHint=false. The description adds that it relies on pre-assembled ResearchSections and performs no research, which clarifies its internal behavior. However, it does not disclose what the 'standard report envelope' entails or any side effects, so it is adequate 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?
Two sentences, front-loaded with the primary purpose, and no unnecessary detail. It earns every word.
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?
Combined with a detailed schema, the description provides sufficient context: it clarifies the tool's role as an assembler, not a researcher, and specifies usage timing. It could mention optional top-level fields, but the schema covers structure. The 'standard report envelope' is a bit ambiguous without an output schema, but still adequate.
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 summarizes the core structure of the 'sections' parameter (summary, tables, citations, confidence), which helps understand the main argument. Top-level parameters like subtitle and companyName are not mentioned, but their names are self-explanatory. It partially compensates for the schema coverage 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 'assembles' and resource 'structured research report' from ResearchSections. It clearly distinguishes from research-gathering tools by stating 'this tool does no research of its own,' making its role unambiguous.
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 states when to use ('Use after gathering facts with other tools') and what it does not do ('does no research of its own'). It doesn't name specific alternative tools, but the sibling list and context make the intended workflow clear.
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 an industry overview (structure, key players, growth drivers) from top-tier consulting/research sources (Deloitte, PwC, EY, KPMG, McKinsey, Bain, BCG, IMARC, Statista, NASSCOM).
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the description is not required to repeat them. It adds context about the source list and return content, which helps set expectations. No side effects are mentioned, but the read-only nature is covered by annotations and the description is consistent.
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, information-dense sentence with no redundancy. It front-loads the action and provides useful source details without excessive verbosity.
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 should explain the return format or additional behavior. It mentions the content areas but omits details about input semantics and edge cases. The nested parameter structure is not explained, so the definition is incomplete for an agent to use the tool confidently without additional inference.
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% for the top-level context parameter, and the description does not explain how to construct the context object or what each field means. The nested schema has partial descriptions, but the essential sector requirement is not clarified. 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 clearly states the tool retrieves an industry overview, specifying its components (structure, key players, growth drivers) and top-tier sources. This distinguishes it from sibling tools like company_overview and market_size by explicitly focusing on industry-level analysis.
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 usage for industry analysis but does not explicitly contrast with alternatives like company_overview or market_size. It provides no 'when not to use' guidance, leaving the agent to infer the appropriate context from the tool name and description.
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=true and openWorldHint=true, and the description adds useful source scope and sorting behavior. However, it does not disclose pagination, output format, rate limits, or how optional inputs like sector or companyDomain affect results.
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, front-loaded sentence with no wasted words. It efficiently delivers the core purpose and key differentiators.
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 nested schema, missing output schema, and sibling tools, the description is too sparse. It fails to explain parameter semantics, return-value structure, or when to prefer this tool over negative_news, leaving the agent under-informed.
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 carries the full burden of explaining parameters, but it does not mention context, company, daysBack, or their meanings. The word 'recent' only vaguely relates to time-bounded retrieval without connecting to the schema fields.
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 recent news coverage of a company' and lists exact sources and sort order. This distinguishes it from the sibling negative_news tool and avoids 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?
No guidance is given on when to use latest_news versus negative_news or other research tools. The appropriate usage must be inferred from the phrase 'recent news coverage', but no explicit when/when-not or alternatives are mentioned.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose read-only and open-world behavior. The description adds context about specific sources and pattern matching, which is useful, but does not mention limitations such as potential data unavailability or the format of returned estimates. With annotations covering safety, this is adequate 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, dense sentence that front-loads the core purpose and includes source examples and methodology. Every word contributes information, with no fluff 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 explains what the tool does but not the input structure details (e.g., what 'context' contains or the role of 'sector') or the output format. Since there is no output schema, the agent would benefit from knowing the shape of returns. However, for a read-only lookup tool with clear purpose, it is minimally sufficient.
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% for the top-level parameter, and the description does not mention any parameter names or how 'context' should be populated. The required 'sector' is only indirectly referenced by the word 'industry'. The schema property names are self-explanatory but the description adds little semantic value beyond what the names imply.
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 ('Finds market size and CAGR figures') and a specific resource ('for an industry'), and distinguishes itself from sibling tools by specifying analyst/research sources and a methodology ('pattern matching'). It is unambiguous and actionable.
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 clear usage: use when you need market size or CAGR for an industry. It mentions the types of sources and the method, giving context, but does not explicitly exclude alternatives or compare with sibling tools like 'industry_overview' or 'company_profile'.
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 sources for adverse media on a company (fraud, litigation, regulatory action, layoffs, defaults) for due-diligence / risk-screening purposes.
| 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, covering the safety and open-ended nature of the tool. The description adds context about the types of adverse media but does not disclose additional behavioral traits such as source coverage, pagination, or result format. This is adequate 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, front-loaded sentence with no redundancy. It packs the core action, scope, and purpose efficiently, making it easy for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should convey what the tool returns or any limitations (e.g., coverage by country). It does not mention return type, interpretation of results, or that the tool only supports india/global country values. This leaves significant gaps for an agent selecting this 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?
Schema description coverage is 0%, so the description must compensate, but it only mentions 'a company' without explaining the context object or its optional fields (date, country, sector, companyDomain). The schema itself has some descriptions for nested properties, but the tool description adds minimal meaning beyond that.
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 function: 'Screens news sources for adverse media on a company' and names specific categories (fraud, litigation, regulatory action, layoffs, defaults). This distinguishes it from sibling tools like 'latest_news' by focusing on adverse media for due-diligence/risk-screening.
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 specifies the intended use context ('for due-diligence / risk-screening purposes'), which helps an agent decide when to invoke it. However, it does not explicitly compare to alternatives or state when not to use it, 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.
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.
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?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering safety and scope. The description adds behavioral context by specifying that it uses domain-restricted Exa search and returns source URLs for website, LinkedIn, and registry, which goes beyond the annotations without contradicting them.
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, front-loaded with the action verb 'Discover,' and every sentence adds value. The first sentence defines the tool's function, and the second gives usage guidance with no redundant or filler 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?
The tool has no output schema, so the description should explain return values; it partially does by indicating source URLs are produced. However, parameter semantics are under-specified (especially the nested context object), and the description does not elaborate on output format or edge cases, leaving gaps for a tool meant to be used first in a workflow.
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 has a single nested 'context' object with several properties, but schema description coverage is 0% for the top-level parameter and the tool description does not explain parameters beyond mentioning 'company name.' With low schema coverage, the description fails to compensate by describing optional fields like date, listed, sector, country, and companyDomain, leaving parameter usage ambiguous.
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 discovers a company's official website, LinkedIn, and registry presence via domain-restricted Exa search, which is a specific verb+resource combination. It distinguishes itself from sibling tools by positioning itself as the first step to resolve a company name into authoritative source URLs before calling other company 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 explicitly says 'Use this first to resolve a company name to authoritative source URLs before calling other company tools,' providing clear when-to-use guidance. It does not mention exclusions (e.g., when the company domain is already known), but the directive to use it first is a clear contextual pointer.
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.
15 tool updates
v0.1.0- First observed
company_overview - First observed
company_profile - First observed
discover_competitors - First observed
financial_statements - First observed
funding_history - First observed
generate_markdown - First observed
generate_pdf - First observed
generate_report - First observed
health_check - First observed
industry_overview - First observed
latest_news - First observed
market_size - First observed
negative_news - First observed
ratio_analysis - First observed
search_company
TDQS
Scored across 15 tools
Each tool targets a distinct aspect of the research workflow: company identification, profile facts, narrative overview, financial statements, ratio analysis, funding, competitors, industry, market size, news, adverse news, and report generation/rendering. Even the three generate_* tools are clearly differentiated by output type (structured report, Markdown, PDF), so there is no ambiguity.
All tool names are snake_case and readable, but they mix noun-only names (company_profile, financial_statements, industry_overview) with verb_noun names (search_company, discover_competitors, generate_report). The pattern is not fully consistent, though the naming still conveys the tool's purpose without confusion.
With 15 tools, the server sits at the upper end of the ideal range but each tool fills a distinct role in the company-research pipeline, from health check to PDF generation. No tool feels redundant or out of place, making the count well-scoped for the stated purpose.
The tool set covers the entire research lifecycle: company resolution, profile extraction, financial statement parsing, ratio analysis, funding and competitor research, industry and market overviews, news and risk screening, and finally report assembly and rendering. There are no obvious dead ends or missing steps for the server's intended domain.
Maintenance
Related MCP Connectors
Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools.
Investment research superagent: podcasts, SEC filings, and no-code research pipelines.
SEC filings and financial data for AI agents: 59 tools for statements, valuation and supply chains.
Institutional financial data with SEC filing citations, for every AI agent. OAuth 2.1.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides AI assistants with access to comprehensive financial data including real-time stock quotes, company fundamentals, financial statements, market analysis, SEC filings, and economic indicators through 253+ tools across 24 categories.417Apache 2.0
- AlicenseAqualityDmaintenanceProvides 17 research tools for comprehensive company intelligence, covering aspects like overview, products, financials, and competitors. Supports both natural language answers and structured JSON output for automation.18MIT
- FlicenseAqualityDmaintenanceProvides AI assistants with real-time stock prices, financial statements, SEC filings, and analytical tools like DCF valuation and ratio analysis.14-
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to perform grounded equity research by analyzing tickers from SEC filings and market data, producing citation-guarded memos with pre-computed fundamentals.MIT