Skip to main content
Glama
ykshah1309

Financial Hub MCP Server

by ykshah1309

Financial Hub MCP Server

A TypeScript MCP server for financial data aggregation. Connects any MCP-compatible AI assistant to SEC EDGAR filings, XBRL financial statements, FRED economic indicators, and real-time market data — with built-in XBRL normalization, fact deduplication, computed analytics, stock screening, and rate-limit protection.

Core Concepts

SEC EDGAR

All SEC EDGAR data comes directly from the SEC's free public APIs at data.sec.gov. No API key is required. The server automatically handles:

  • XBRL concept resolution — Different companies use different XBRL tags for the same metric. The server normalizes across 20+ financial concepts (e.g., revenue resolves to Revenues, RevenueFromContractWithCustomerExcludingAssessedTax, SalesRevenueNet, and 11 other variants).

  • Fact deduplication — Raw XBRL data contains duplicate values from overlapping 10-K/10-Q filings and amendments. The server collapses these to one clean value per fiscal period.

  • Rate limiting — SEC enforces 10 requests/second. A token-bucket rate limiter with bounded queuing (max 50 pending, 30s timeout) prevents IP bans.

FRED

FRED (Federal Reserve Economic Data) provides 800,000+ time series from 100+ sources. Requires a free API key from fred.stlouisfed.org. Rate limited to 120 requests/minute (enforced via 2 req/s token bucket). Includes a curated catalog of ~50 essential economic indicators across 9 categories for zero-API-call browsing.

Finnhub Market Data

Real-time stock quotes, company profiles, market news, insider transactions, and financial metrics via the Finnhub API. Free tier provides 30 API calls/second with no credit card required. The server rate-limits to 25 req/s to stay safely under the threshold. Quotes are never cached (stale prices are worse than no cache), while profiles (24h), news (5min), and financial metrics (1h) use appropriate TTLs.

Caching

In-memory LRU cache with TTL expiry reduces redundant API calls:

Cache

TTL

Max Entries

Payload Size

Company facts

1 hour

10

20-50 MB each

Company submissions

1 hour

30

~50 KB each

Company tickers

24 hours

1

~3 MB

FRED series metadata

6 hours

100

~1 KB each

FRED observations

1 hour

50

~5 KB each

Market profiles

24 hours

50

~1 KB each

Market news

5 minutes

10

~5 KB each

Insider transactions

1 hour

30

~3 KB each

Basic financials

1 hour

30

~2 KB each

Eviction is LRU — frequently accessed entries are promoted on read, so the least recently used entry is evicted when capacity is full. Expired entries are proactively swept on every write.

Related MCP server: Financial News and Notes MCP Server

API

Tools

  • search_companies

    • Search SEC-registered companies by name or ticker

    • Input: query (string)

    • Returns matching company names, tickers, and CIK numbers

  • get_company_filings

    • Get recent SEC filings for a company

    • Inputs:

      • cik (string): SEC's unique company identifier

      • formType (string, optional): Filter by form type (10-K, 10-Q, 8-K, DEF 14A)

    • Returns filing metadata: form type, dates, document links

  • get_financial_metric

    • Get deduplicated historical values of a financial metric with trend analysis

    • Inputs:

      • cik (string): Company CIK number

      • concept (string): Friendly name or raw XBRL tag

      • taxonomy (string, optional): XBRL taxonomy (default: us-gaap)

      • annualOnly (boolean, optional): Return only annual data points

    • Accepts friendly names: revenue, net_income, gross_profit, operating_income, eps, total_assets, total_liabilities, stockholders_equity, cash, long_term_debt, current_assets, current_liabilities, operating_cash_flow, capex, shares_outstanding

    • Also accepts raw XBRL tags: Revenues, NetIncomeLoss, Assets, etc.

    • Returns deduplicated values (one per fiscal period), YoY growth rates, and trend direction

  • get_financial_summary

    • Get a comprehensive financial snapshot with computed ratios

    • Input: cik (string)

    • Returns latest metrics: revenue, net income, assets, liabilities, equity, cash, debt, EPS, operating cash flow, free cash flow

    • Computed ratios: profit margin, debt-to-equity, current ratio, ROE, ROA

    • All values deduplicated from the most recent annual filing

  • get_company_facts_summary

    • Get a compact index of all available XBRL data for a company

    • Inputs:

      • cik (string): Company CIK number

      • limit (number, optional): Max concepts to return (default 40, max 100)

    • Returns concept names, latest values, and data point counts — not the full time series

    • Use this to discover what data is available before drilling into specific metrics

  • analyze_financials

    • Deep financial analysis with computed ratios, growth metrics, and health scoring

    • Input: cik (string)

    • Returns:

      • Financial ratios: profit margin, gross margin, operating margin, ROE, ROA, debt-to-equity, current ratio

      • Growth analysis: YoY rates, 3-year and 5-year CAGR, trend detection

      • Composite health grade (A-F) with explanatory factors

    • Uses Promise.allSettled internally — individual metric failures don't crash the analysis

  • compare_companies

    • Side-by-side financial comparison of 2-5 companies

    • Input: ciks (string[], 2-5 CIK numbers)

    • Compares revenue, income, assets, cash, EPS, free cash flow, ratios, and health scores

    • Identifies winners by revenue, profitability, growth, and overall health

    • Individual company failures are isolated — partial comparisons still return

  • search_filings

    • Full-text search across all SEC EDGAR filings with pagination

    • Inputs:

      • query (string): Search terms

      • forms (string, optional): Comma-separated form types

      • startDate (string, optional): YYYY-MM-DD

      • endDate (string, optional): YYYY-MM-DD

      • limit (number, optional): Results per page (default 20, max 50)

      • offset (number, optional): Skip N results for pagination

    • Returns results array + total hit count for pagination

    • Searches the full text of any filing since 2001

  • screen_stocks

    • Screen SEC-registered companies by exchange, industry, name, and financial health

    • Inputs:

      • exchange (string, optional): Filter by exchange (e.g. NYSE, Nasdaq)

      • industry (string, optional): SIC industry group (technology, finance, healthcare, energy, manufacturing, retail, transportation, utilities, services, public_admin)

      • nameContains (string, optional): Case-insensitive substring match on company name

      • minHealthScore (number, optional): Minimum health grade (0-100) from financial analysis

      • limit (number, optional): Max results (default 20, max 50)

    • Two-phase screening: instant client-side filtering on 10,000+ companies, then optional deep filtering via SEC API for industry and health metrics

  • get_corporate_events

    • Get recent 8-K corporate events with significance classification

    • Inputs:

      • cik (string): Company CIK number

      • significance (string, optional): Filter by high, medium, or low significance

      • limit (number, optional): Max events (default 15, max 50)

    • Classifies 25 SEC 8-K item numbers into human-readable categories with significance levels

    • High significance: CEO changes, M&A, bankruptcy, material agreements, auditor changes

    • Medium: earnings releases, departures, asset sales, amendments

    • Uses existing submissions data — zero additional API calls

  • search_economic_data

    • Search the FRED database for economic data series

    • Input: query (string)

    • Returns series IDs, titles, frequencies, and units

    • Use returned series IDs with get_economic_data

  • get_economic_data

    • Get time series observations for a FRED economic data series

    • Inputs:

      • seriesId (string): FRED series ID

      • startDate (string, optional): YYYY-MM-DD

      • endDate (string, optional): YYYY-MM-DD

    • Common series: GDP, CPIAUCSL (CPI), UNRATE (unemployment), FEDFUNDS, DGS10 (10-year treasury), SP500, MORTGAGE30US

  • get_stock_quote

    • Get a real-time stock price quote from Finnhub

    • Input: symbol (string): Stock ticker (e.g. AAPL, MSFT, GOOGL)

    • Returns current price, daily change, percent change, day high/low, open, and previous close

    • Live data — never cached

  • get_market_news

    • Get latest financial news headlines

    • Inputs:

      • symbol (string, optional): Stock ticker for company-specific news. Omit for general market news

      • category (string, optional): general, forex, crypto, merger (only for general news)

    • Returns up to 20 articles with headline, summary, source, URL, and datetime

  • get_insider_transactions

    • Get recent insider trading activity for a company

    • Input: symbol (string): Stock ticker (e.g. AAPL, TSLA)

    • Returns insider names, share counts, transaction dates, prices, and buy/sell codes

    • Transaction codes: P = Purchase, S = Sale, M = Option Exercise, A = Grant/Award, G = Gift, F = Tax withholding

  • get_company_overview

    • Get a comprehensive company overview combining profile, market metrics, and peers

    • Input: symbol (string): Stock ticker (e.g. AAPL, MSFT)

    • Returns name, exchange, industry, market cap, PE ratio, beta, 52-week range, EPS, dividend yield, and peer tickers

    • Merges data from 4 parallel Finnhub API calls (profile, financials, peers, quote)

Resources

  • sec://company/{ticker}

    • Company profile with SEC metadata and recent filings

    • Includes: name, CIK, tickers, exchanges, SIC code, fiscal year end, and the 10 most recent filings

    • Browsable from any MCP client that supports resources

  • fred://catalog/{category}

    • Browse curated FRED economic indicators by category

    • Categories: gdp, labor, inflation, rates, housing, markets, money, trade, consumer

    • Returns series IDs, titles, frequencies, and descriptions — zero API calls

  • fred://indicator/{seriesId}

    • FRED indicator detail with latest observations

    • Returns series metadata from the catalog plus the 10 most recent data points

    • Use this to inspect a specific indicator before pulling full time series

Prompts

  • financial_analysis

    • Guided company financial health analysis

    • Input: ticker (string)

    • Walks through revenue trends, profitability, balance sheet health, and risk assessment

  • peer_comparison

    • Side-by-side comparison of two companies

    • Input: ticker1 (string), ticker2 (string)

  • economic_overview

    • Current US economic conditions dashboard

    • No input required

    • Pulls GDP, unemployment, CPI, fed funds rate, treasury yields, and mortgage rates

Tool Annotations

All tools set MCP ToolAnnotations for safe agent composition:

Hint

Value

Reason

readOnlyHint

true

All tools are read-only — no data is modified

destructiveHint

false

No data destruction

idempotentHint

true

Same inputs produce same outputs

openWorldHint

true

All tools make external API calls

Error Handling

All tools return MCP-compliant error envelopes with isError: true on failure:

{
  "content": [{ "type": "text", "text": "SEC EDGAR request failed: 404 Not Found" }],
  "isError": true
}

This allows the LLM to receive semantic error messages, correct parameters, and retry — rather than receiving opaque transport-level JSON-RPC errors that break the agent loop.

Usage with Claude Desktop

Add this to your claude_desktop_config.json:

NPX

{
  "mcpServers": {
    "financial-hub": {
      "command": "npx",
      "args": ["-y", "financial-hub-mcp"],
      "env": {
        "FRED_API_KEY": "your-free-api-key",
        "SEC_USER_AGENT_EMAIL": "your-email@example.com",
        "FINNHUB_API_KEY": "your-free-api-key"
      }
    }
  }
}

Usage with VS Code

For manual installation, add the configuration to your user-level MCP configuration file. Open the Command Palette (Ctrl + Shift + P) and run MCP: Open User Configuration, then add:

NPX

{
  "servers": {
    "financial-hub": {
      "command": "npx",
      "args": ["-y", "financial-hub-mcp"],
      "env": {
        "FRED_API_KEY": "your-free-api-key",
        "SEC_USER_AGENT_EMAIL": "your-email@example.com",
        "FINNHUB_API_KEY": "your-free-api-key"
      }
    }
  }
}

For more details about MCP configuration in VS Code, see the official VS Code MCP documentation.

Environment Variables

Variable

Required

Description

SEC_USER_AGENT_EMAIL

Yes

Your email address for SEC EDGAR API compliance. The server will exit immediately if this is not set — SEC EDGAR bans requests with missing or generic User-Agent headers.

FRED_API_KEY

For FRED tools

Free 32-character key from fred.stlouisfed.org. The server starts without it but FRED tools will fail at runtime with a clear error message.

FINNHUB_API_KEY

For market tools

Free API key from finnhub.io. Required for stock quotes, market news, insider transactions, and company overviews. The server starts without it but market tools will fail at runtime.

Architecture

src/
├── index.ts              # Entry point — startup validation, MCP server init
├── rate-limiter.ts       # Token-bucket rate limiter with bounded queue + timeout
├── cache.ts              # In-memory TTL cache with proactive eviction
├── edgar/
│   ├── client.ts         # SEC EDGAR HTTP client (rate-limited, cached)
│   ├── tools.ts          # MCP tool registrations (12 tools, isError envelopes)
│   ├── resources.ts      # MCP resource templates (company profiles)
│   ├── xbrl.ts           # XBRL fact deduplication, growth, trend detection
│   ├── concepts.ts       # Concept alias normalization (20+ financial concepts)
│   ├── analytics.ts      # Computed ratios, health scoring, company comparison
│   ├── events.ts         # 8-K corporate event classification (25 item types)
│   └── screening.ts      # Stock screening by exchange, industry, health score
├── fred/
│   ├── client.ts         # FRED HTTP client (rate-limited, cached)
│   ├── tools.ts          # FRED MCP tool registrations
│   ├── catalog.ts        # Curated catalog of ~50 essential FRED indicators
│   └── resources.ts      # FRED MCP resource templates (catalog + indicators)
├── market/
│   ├── client.ts         # Finnhub HTTP client (rate-limited, cached)
│   └── tools.ts          # Market data MCP tool registrations (4 tools)
└── prompts.ts            # Financial analysis prompt templates

Data Pipeline

Raw XBRL data from SEC EDGAR goes through several processing stages:

  1. Rate-limited fetch — Token bucket ensures SEC's 10 req/s limit is never exceeded. Queue rejects after 50 pending requests or 30s wait.

  2. Caching — Company facts cached for 1 hour, max 15 entries to avoid OOM on large payloads.

  3. Concept resolution — Friendly names like revenue are mapped to all known XBRL tag variants across the us-gaap taxonomy.

  4. Deduplication — Overlapping 10-K/10-Q/amendment values are collapsed to one per fiscal period. Prefers 10-K over 10-Q, latest filing date over earlier.

  5. Analysis — Growth rates, CAGR, financial ratios, and health scores are computed from clean data.

  6. Serialization — Minified JSON output to minimize context window usage.

Building from Source

git clone https://github.com/ykshah1309/financial-hub-mcp.git
cd financial-hub-mcp
npm install
npm run build

Run locally:

FRED_API_KEY=your-key SEC_USER_AGENT_EMAIL=your-email FINNHUB_API_KEY=your-key node dist/index.js

Contributing

Pull requests welcome. See CONTRIBUTING.md for the development loop, commit style, and PR checklist. By participating you agree to the Code of Conduct.

Security

Please report security issues privately — see SECURITY.md. Do not file public issues for vulnerabilities or credential leaks.

Changelog

See CHANGELOG.md for release notes.

License

MIT — see LICENSE.

Badges

MCP Badge

Available Tools

16 tools
analyze_financialsAnalyze Company FinancialsA
Read-onlyIdempotent

Deep financial analysis with computed ratios, growth metrics, and health scoring. Returns profit margins, ROE, ROA, debt-to-equity, current ratio, revenue/income/EPS growth with CAGR, trend detection, and a composite health grade (A-F). This goes beyond raw data — it interprets the numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesCompany CIK number

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already reveal read-only and non-destructive behavior, so the description adds value by explaining the interpretative nature of the tool—computing ratios, scores, and trend detection. This goes beyond the safety profile provided by annotations, enhancing the agent's understanding of what to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, packed with specific, relevant details and a clear differentiator. Every phrase adds value, and the structure is front-loaded with the most important information, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Since there is no output schema, the description carries the burden of explaining return values, and it does so by listing concrete metrics and the composite health grade. It does not detail the exact structure or mention potential raw data inclusion, but for a single-parameter read-only tool, this is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully documents the single parameter (cik) with 100% coverage, so the description does not need to add parameter details. The description does not elaborate on cik beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('analyze') and resource ('company financials'), while listing concrete outputs such as profit margins, ROE, ROA, growth metrics, and a health grade. This distinguishes it from sibling tools like get_financial_metric, which likely return single raw metrics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool is for comprehensive, interpreted analysis rather than raw data, as stated by 'This goes beyond raw data — it interprets the numbers.' However, it does not explicitly name alternative tools or state exclusions, providing clear context but not full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_companiesCompare CompaniesA
Read-onlyIdempotent

Side-by-side financial comparison of 2-5 companies with normalized metrics. Compares revenue, income, assets, cash, ratios, and health scores. Identifies the winner in each category. All data is deduplicated and from annual filings.

ParametersJSON Schema
NameRequiredDescriptionDefault
ciksYesArray of 2-5 company CIK numbers to compare

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly, idempotent, etc.), the description discloses significant behavioral traits: normalization of metrics, deduplication of data, reliance on annual filings, and the generation of per-category winners. These details help the agent anticipate output characteristics and data provenance, exceeding the annotation-only baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four short sentences, each adding value: core purpose, metrics compared, output behavior, and data source. It is front-loaded with the main verb and resource, and every sentence earns its place without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple parameter schema, helpful annotations, and absence of an output schema, the description adequately conveys the tool's purpose, the metrics involved, and data characteristics. However, it does not specify the returned data structure or format, which would be valuable for an agent expecting to parse the response. Thus, it is complete enough but not fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully describes the single parameter 'ciks' with min/max constraints and a clear description. The tool description adds no new meaning beyond echoing the 2-5 company range, so the score remains at the baseline of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('compares') and resource ('companies'), with a defined scope of 2-5 companies and enumerated metric categories. It distinguishes itself from sibling tools like get_financial_metric by emphasizing multi-company side-by-side comparison and winner identification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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 this tool (comparing multiple companies with normalized financial metrics) and implies exclusions via 'annual filings' and deduplication. However, it does not explicitly name alternatives or state when-not-to-use cases, so it falls 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.

get_company_facts_summaryGet Company Facts SummaryA
Read-onlyIdempotent

Get a compact index of all available XBRL financial data for a company. Returns concept names, latest values, and data point counts — NOT the full time series. Use this to discover what data is available, then use get_financial_metric for details.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesCompany CIK number
limitNoMax concepts to return (default 40, max 100)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering safety and side effects. The description adds behavioral context by stating it returns a compact index with specific fields and explicitly says 'NOT the full time series,' which is a crucial limitation beyond the annotations. It could mention pagination or rate limits, but what it discloses is valuable and goes beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is just two sentences, front-loaded with the core function, then the return contents, a key clarification, and usage direction. Every sentence earns its place with no redundancy or clutter. It is highly scannable and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple discovery tool with two well-documented parameters and rich annotations, the description is complete. It explains what the tool returns, what it does NOT return, and how to proceed for more detail. The absence of an output schema is compensated by a clear description of the return shape. No critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, as both 'cik' and 'limit' have descriptions. The description does not add new meaning to the parameters beyond what the schema already provides. The 'compact index' phrase implies the limit parameter, but the schema already explains 'Max concepts to return.' Thus the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') with a clear resource ('compact index of all available XBRL financial data for a company'). It explicitly states the output scope (concept names, latest values, data point counts) and distinguishes itself from sibling get_financial_metric by noting it is NOT the full time series. This fully clarifies the tool's purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: 'Use this to discover what data is available, then use get_financial_metric for details.' This names a specific alternative and spells out the intended workflow, which is exactly the kind of when-to-use-versus-alternative signal expected.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_filingsGet Company FilingsA
Read-onlyIdempotent

Get recent SEC filings for a company by CIK number. Returns filing metadata including form type, filing date, and document links. Optionally filter by form type (e.g. 10-K, 10-Q, 8-K, DEF 14A).

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesCentral Index Key — the SEC's unique company identifier
formTypeNoFilter by SEC form type (e.g. 10-K, 10-Q, 8-K). Omit to return all types.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as read-only, idempotent, and non-destructive, lowering the burden. The description adds useful context by specifying the return metadata (form type, filing date, document links) and the optional form-type filter, going beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main verb and resource, with no filler or redundant details. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential return information (metadata, form type, filing date, document links) since there is no output schema. It lacks pagination or limit details, but for a simple listing tool with only two parameters and strong annotations, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters clearly described in the schema. The description adds minimal new meaning beyond the schema—it repeats 'by CIK number' and provides additional form type examples (DEF 14A), but this does not significantly enhance the schema's existing parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get recent SEC filings'), the resource (filings by CIK number), and the return scope (metadata including form type, filing date, document links). It is specific enough to distinguish from financial metric or company overview tools, though it does not explicitly differentiate from the sibling 'search_filings'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for use (by CIK number, optionally filtered by form type) but offers no explicit guidance on when to use this tool versus alternatives like 'search_filings'. No exclusions or when-not-to-use scenarios are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_overviewGet Company OverviewA
Read-onlyIdempotent

Get a comprehensive company overview combining profile, market metrics, and peer companies. Returns name, exchange, industry, market cap, PE ratio, beta, 52-week range, EPS, dividend yield, and peer tickers. This is the 'market overlay' that complements SEC fundamental data. Requires FINNHUB_API_KEY environment variable.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol (e.g. AAPL, MSFT, GOOGL)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds a critical auth requirement (FINNHUB_API_KEY environment variable). It also communicates the output structure (profile, market metrics, peer companies) without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences: purpose, return fields, and context/auth. Every sentence carries unique information, no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with comprehensive annotations, the description fully covers purpose, output, and auth requirements. It clearly explains what data to expect and where it fits among sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema fully documents the single 'symbol' parameter with examples, achieving 100% coverage. The description does not add any parameter-specific semantics beyond what the schema already provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with 'Get a comprehensive company overview' and enumerates specific data points (market cap, PE ratio, beta, 52-week range, EPS, dividend yield, peer tickers). It also distinguishes itself as the 'market overlay' versus SEC fundamental data, setting it apart from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context by positioning the tool as the 'market overlay' complementing SEC fundamental data, implying it should be used for market metrics rather than filings. However, it does not explicitly name alternative tools or state 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.

get_corporate_eventsGet Corporate EventsA
Read-onlyIdempotent

Get recent 8-K corporate events for a company, classified by event type and significance. Covers M&A, earnings announcements, leadership changes, material agreements, cybersecurity incidents, delisting notices, auditor changes, shareholder votes, and more. Each event includes the SEC item number, human-readable label, category, and significance level (high/medium/low).

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesCompany CIK number (from search_companies)
limitNoMax events to return (default 15, max 50)
significanceNoFilter by minimum significance level. 'high' = M&A, earnings, leadership, bankruptcies. 'medium' = governance, obligations, equity sales. 'low' = all events including exhibits.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only and idempotent behavior. The description adds valuable context about the return structure (SEC item number, human-readable label, category, significance level) and event coverage, going beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences: the first states purpose and coverage, the second lists output fields. It is front-loaded with the main verb and resource, with no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description explains what each event includes (SEC item number, label, category, significance). It also lists many event types. The term 'recent' is vague, but the limit parameter and example coverage make the tool understandable for a typical use case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The schema fully documents cik, limit, and significance, including the meaning of each significance level. The description adds no extra parameter details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves recent 8-K corporate events for a company, with a specific verb and resource. It lists concrete event types (M&A, earnings, leadership changes, etc.), which differentiates it from sibling tools that fetch filings or financial data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for getting corporate events but does not explicitly state when to use this tool versus alternatives like get_company_filings or search_filings. No exclusions or alternative guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_economic_dataGet Economic DataA
Read-onlyIdempotent

Get time series observations for a FRED economic data series. Returns recent data points with dates and values. Common series: GDP (Gross Domestic Product), CPIAUCSL (CPI), UNRATE (Unemployment Rate), FEDFUNDS (Fed Funds Rate), DGS10 (10-Year Treasury), SP500 (S&P 500), MORTGAGE30US (30-Year Mortgage Rate).

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoEnd date in YYYY-MM-DD format
seriesIdYesFRED series ID (e.g. GDP, UNRATE, CPIAUCSL)
startDateNoStart date in YYYY-MM-DD format

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds context by stating that it returns 'recent data points with dates and values,' offering a behavioral trait (response shape) not covered by annotations. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences: the first states purpose, the second describes return content, and the third provides valuable examples. Every sentence earns its place with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given full schema coverage, strong annotations, and no output schema, the description provides enough context by mentioning date/value pairs and common series. It does not define 'recent' when startDate/endDate are omitted, but the overall tool is straightforward and the description is adequate for a data retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% since every parameter has a description. The description enhances this by listing common series IDs (GDP, CPIAUCSL, UNRATE, etc.) and their meanings, which helps the agent select appropriate values for seriesId.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies 'Get time series observations for a FRED economic data series,' which clearly names the verb and resource. It distinguishes itself from siblings like get_stock_quote and search_economic_data by focusing on FRED series and listing specific examples.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a FRED series ID is needed and even provides common series IDs, but it does not explicitly state when to use this tool versus search_economic_data or other alternatives. There is no explicit when-not guidance, so it remains implied rather than direct.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_financial_metricGet Financial MetricA
Read-onlyIdempotent

Get deduplicated historical values of a financial metric for a company. Automatically resolves concept aliases — you can use friendly names like 'revenue', 'net_income', 'eps', 'cash', 'total_assets' or raw XBRL tags. Returns clean, one-per-period values with trend analysis. Available concepts: revenue, net_income, gross_profit, operating_income, eps, total_assets, total_liabilities, stockholders_equity, cash, long_term_debt, operating_cash_flow, capex, shares_outstanding.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesCompany CIK number
conceptYesFinancial concept — use friendly names (revenue, net_income, eps, cash, total_assets) or raw XBRL tags (Revenues, NetIncomeLoss)
taxonomyNoXBRL taxonomy — almost always us-gaapus-gaap
annualOnlyNoIf true, return only annual (FY) data points — cleaner for trend analysis

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (read-only, idempotent), the description discloses important behaviors: automatic alias resolution, deduplication, and one-value-per-period output. This adds value beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then gives relevant details. The list of available concepts is long but directly useful for parameter selection. No redundant or filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description describes the return shape (one-per-period values, trend analysis) but could be more explicit about the exact format. Still, the combination of annotations, schema, and description covers the essential usage context sufficiently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers all parameters (100% coverage), so the baseline is 3. The description enriches this by listing the available friendly names and explaining that raw XBRL tags are accepted, which goes beyond the schema's generic placeholder text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches historical values of a financial metric for a company, explicitly mentioning deduplication and alias resolution. This distinguishes it from siblings like get_financial_summary or analyze_financials, which have different scopes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used when you need a single metric's historical time series with clean, deduplicated data. It does not explicitly compare with alternative tools, but the purpose is clear enough 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.

get_financial_summaryGet Financial SummaryA
Read-onlyIdempotent

Get a comprehensive financial snapshot with computed ratios. Returns latest revenue, net income, assets, liabilities, equity, cash, debt, EPS — plus profit margin, debt-to-equity, current ratio, and ROE. All values are deduplicated and from the most recent annual filing.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesCompany CIK number

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, etc. The description goes beyond these by adding meaningful behavioral context: values are deduplicated, drawn from the most recent annual filing, and include computed ratios. This provides useful data-source and processing transparency without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, then a concrete list of returned fields and data quality notes. Every sentence contributes value, with no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description enumerates raw values and computed ratios, and specifies data source and deduplication behavior. It is reasonably complete, but could have mentioned units (e.g., USD) or filing date specifics; still, it covers the essential context for understanding the tool's output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (only 'cik' is described as 'Company CIK number'). The description adds no extra detail about the parameter, such as format or examples. Since the schema fully documents the parameter, the baseline score of 3 applies without additional compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Get' with the resource 'financial summary' and explicitly states it includes computed ratios. It clearly distinguishes from sibling tools like get_financial_metric (likely a single metric) and analyze_financials (deeper analysis) by positioning itself as a comprehensive snapshot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for a broad financial overview but does not explicitly mention when to use this tool over siblings or provide exclusionary guidance. There is no comparison to get_financial_metric or analyze_financials, leaving usage context implicit rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_insider_transactionsGet Insider TransactionsA
Read-onlyIdempotent

Get recent insider trading activity for a company. Returns insider names, share counts, transaction dates, prices, and buy/sell codes. Transaction codes: P = Purchase, S = Sale, M = Option Exercise, A = Grant/Award, G = Gift, F = Tax withholding. Requires FINNHUB_API_KEY environment variable.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol (e.g. AAPL, TSLA)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, establishing a safe read operation. The description adds valuable context beyond annotations: the specific return fields, explanation of transaction codes (P, S, M, A, G, F), and the requirement for the FINNHUB_API_KEY environment variable. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, front-loaded with purpose, followed by return fields, code explanations, and a prerequisite. Every sentence adds value with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema), the description adequately covers return fields and essential context like the API key requirement. It could mention the temporal scope of 'recent' more precisely, but overall it is complete enough for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, as the only parameter 'symbol' has a clear description. The tool's description does not add extra meaning about the parameter beyond what the schema already provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb and resource: 'Get recent insider trading activity for a company.' It also enumerates the return fields (insider names, share counts, dates, prices, codes), making it distinct from sibling tools like get_company_filings or get_stock_quote.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for recent insider transactions via 'recent insider trading activity,' but it does not explicitly contrast with alternatives or state when not to use it. Clear context is provided, but no exclusions or sibling references are made.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_newsGet Market NewsA
Read-onlyIdempotent

Get latest financial news headlines. By default returns general market news. Provide a symbol to get company-specific news instead. Categories for general news: general, forex, crypto, merger. Requires FINNHUB_API_KEY environment variable.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolNoStock ticker for company-specific news. Omit for general market news.
categoryNoNews category (only used when symbol is not provided)general

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the operation as read-only and non-destructive. The description adds important behavioral context by disclosing the FINNHUB_API_KEY environment variable requirement and explaining the default vs symbol-based behavior, which goes beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences: what it does, the two modes, and the API key requirement. No wasted words, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only news tool, the description covers the essential aspects: purpose, parameter usage, categories, and authentication requirement. No output schema exists, but 'headlines' sufficiently sets expectations for return type. Annotations provide safety context, making this complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters described, so baseline is 3. The description adds extra value by clarifying that category is only relevant when symbol is omitted and explicitly mapping categories to general news, reinforcing the parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves latest financial news headlines, distinguishing between general market news and company-specific news via symbol. It is specific and distinct from sibling tools which focus on filings, metrics, or other non-news data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the default general news mode versus providing a symbol for company-specific news, and lists valid categories. It does not explicitly compare to sibling tools, but the tool's niche is well-defined and no alternatives for news exist among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stock_quoteGet Stock QuoteA
Read-onlyIdempotent

Get a real-time stock price quote. Returns current price, daily change, percent change, day high/low, open price, and previous close. Data is live (not cached) from Finnhub. Requires FINNHUB_API_KEY environment variable.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol (e.g. AAPL, MSFT, GOOGL, AMZN)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable context beyond the annotations by stating the data source (Finnhub), the live (non-cached) nature, and the FINNHUB_API_KEY prerequisite, which helps the agent anticipate runtime needs and freshness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise, front-loaded sentences: purpose, return fields, and key behavioral context. Every sentence earns its place with no waste or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with strong annotations and no output schema, the description is highly complete. It covers the purpose, return fields, data source, freshness, and a required environment variable, leaving no critical gaps for an agent to select and invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage for the 'symbol' parameter with a clear description and examples. The tool description does not add additional semantic meaning beyond what the schema provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and the specific resource ('real-time stock price quote'), and enumerates the exact data fields returned. It distinguishes itself from sibling tools like get_financial_metric or get_company_overview by focusing on the quote context and live data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for real-time quotes by emphasizing 'live (not cached)' and listing price fields, but it does not explicitly state when to use this tool versus alternatives like get_financial_metric or get_company_overview. No exclusions or alternative tools are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

screen_stocksScreen StocksA
Read-onlyIdempotent

Discover SEC-registered companies by exchange, industry, name, or financial health score. Fast filters (exchange, name) search 10,000+ companies instantly. Deep filters (industry, health score) require per-company API calls and are slower. Available industries: agriculture, mining, construction, manufacturing, transportation, wholesale, retail, finance, services, public_admin.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 20, max 50)
exchangeNoStock exchange filter (NYSE, NASDAQ, AMEX, etc.)
industryNoSIC industry group: agriculture, mining, construction, manufacturing, transportation, wholesale, retail, finance, services, public_admin
nameContainsNoSubstring match on company name or ticker
minHealthScoreNoMinimum financial health score (0-100). Requires API calls per company — slower.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the tool as read-only, idempotent, non-destructive, and open-world. The description adds valuable behavioral context beyond those annotations: performance characteristics (fast vs. slow), the requirement for per-company API calls on deep filters, and coverage of 10,000+ companies. This helps the agent anticipate cost and latency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with purpose, then performance guidance, then industry enumeration. Every sentence adds useful information with no filler, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter read-only screening tool with no output schema, the description covers the core purpose, filter options, performance trade-offs, and valid industry values. It does not explain how multiple filters combine or what happens when no filters are provided, but the schema's limit default mitigates that gap. Overall, it is solid but not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaning by mapping parameters to performance categories: exchange/nameContains are fast, industry/minHealthScore are slow and require API calls. It also lists acceptable industry values, though those are already in the schema, adding some redundancy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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: 'Discover SEC-registered companies by exchange, industry, name, or financial health score.' This clearly states what the tool does. However, the sibling tool 'search_companies' likely overlaps in purpose, and the description does not explicitly distinguish screen_stocks from it, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear within-tool usage guidance by separating 'Fast filters' from 'Deep filters' and warning that deep filters are slower due to per-company API calls. This implies when to prefer certain filters but does not say when to choose this tool over alternatives like search_companies, so guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_companiesSearch CompaniesA
Read-onlyIdempotent

Search for SEC-registered companies by name or ticker symbol. Returns matching company names, tickers, and CIK numbers. Use the CIK for subsequent filing and financial data lookups.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesCompany name or ticker symbol to search for

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=true, openWorld=true, idempotent=true, and destructive=false. The description adds value by disclosing the return content (company names, tickers, CIK numbers) and the purpose of CIK, complementing the annotation coverage without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action verb, and every sentence contributes meaningful information. There is no fluff or unnecessary repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (one parameter), no output schema, and rich annotations, the description adequately explains what the tool does and what it returns. It also gives context on using the CIK for downstream lookups, which helps the agent understand the tool's role in a workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description covers 100% of parameters, with 'query' described as 'Company name or ticker symbol to search for'. The description essentially restates this, providing no additional semantic detail beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: searching for SEC-registered companies by name or ticker. It specifies the return values (company names, tickers, CIK numbers) and distinguishes it from sibling tools like search_filings which search filings rather than companies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides contextual guidance by stating to use the CIK for subsequent filing and financial data lookups, implying this tool is for company identification. It does not explicitly name alternatives or when not to use it, but the context is clear enough for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_economic_dataSearch Economic DataA
Read-onlyIdempotent

Search the FRED database for economic data series. FRED contains over 800,000 time series from 100+ sources — GDP, inflation, unemployment, interest rates, housing, and more. Returns series IDs that can be used with get_economic_data.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch terms (e.g. 'GDP', 'unemployment rate', 'consumer price index')

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior. The description adds context about the breadth of FRED (800,000+ series from 100+ sources) and discloses the return format (series IDs), which is especially useful given the lack of an output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, consisting of three sentences that are front-loaded with the core action. It includes essential context (database scope, examples, return usage) without any extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter search tool with rich annotations, the description covers the purpose, database, and return value, forming a complete picture. It could mention pagination or result limits, but these are not critical for understanding how to use the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage for the single 'query' parameter, including example terms. The description does not add any additional parameter-level details beyond what the schema already provides, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool searches the FRED database for economic data series, using the specific verb 'search' and resource 'FRED database'. It distinguishes from siblings like search_companies by explicitly targeting economic data and mentions returning series IDs for use with get_economic_data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by specifying the FRED database and indicating the workflow of using returned series IDs with get_economic_data. It doesn't explicitly name alternatives or exclusions, but the focus on economic data makes the intended use self-evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_filingsSearch SEC FilingsA
Read-onlyIdempotent

Full-text search across all SEC EDGAR filings. Search for keywords in filing documents, optionally filtered by form type and date range. Supports pagination — use offset to fetch subsequent pages.

ParametersJSON Schema
NameRequiredDescriptionDefault
formsNoComma-separated form types to filter (e.g. '10-K,10-Q')
limitNoResults per page (default 20, max 50)
queryYesSearch terms to find in filings
offsetNoNumber of results to skip for pagination
endDateNoEnd date in YYYY-MM-DD format
startDateNoStart date in YYYY-MM-DD format

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds meaningful behavioral context about pagination ('use offset to fetch subsequent pages') and optional filtering by form type/date range, going beyond annotation data without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the core purpose, and every sentence earns its place. No filler or redundant information; it efficiently covers scope, filters, and pagination.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with no output schema, the description covers the main functionality, filters, and pagination. It does not describe the return format or fields, which would be helpful, but the overall picture is reasonably complete given the schema covers parameters and annotations cover safety.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all six parameters documented in the schema. The description reinforces the pagination behavior (offset) but does not add significant new meaning beyond the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool performs full-text search across all SEC EDGAR filings, with a specific verb ('search') and resource. It distinguishes itself from siblings like get_company_filings (company-specific) and search_companies (company search) by emphasizing 'all SEC EDGAR filings.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for broad keyword search across all filings and mentions optional filters, but it does not explicitly state when to use this tool versus alternatives or name sibling tools. Usage context is clear but exclusions/alternatives are left to inference.

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.

  1. 16 tool updatesv1.3.1
    • First observedanalyze_financials
    • First observedcompare_companies
    • First observedget_company_facts_summary
    • First observedget_company_filings
    • First observedget_company_overview
    • First observedget_corporate_events
    • First observedget_economic_data
    • First observedget_financial_metric
    • First observedget_financial_summary
    • First observedget_insider_transactions
    • First observedget_market_news
    • First observedget_stock_quote
    • First observedscreen_stocks
    • First observedsearch_companies
    • First observedsearch_economic_data
    • First observedsearch_filings

TDQS

A4.1/5.0

Scored across 16 tools

Disambiguation4/5

Most tools have clearly distinct purposes, but there is some overlap between get_financial_summary, analyze_financials, and get_company_overview, all of which provide financial snapshots. Additionally, search_companies and screen_stocks both serve company discovery, though with different filters and use cases. Descriptions help differentiate them.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with underscores, using 'search_', 'get_', 'analyze_', 'compare_', and 'screen_' as prefixes. No mixed conventions or inconsistent styles are present.

Tool Count4/5

The server offers 16 tools covering SEC filings, financial metrics, market data, news, and economic data. This is slightly above the typical 15-tool threshold for a well-scoped set, but each tool has a distinct role and the breadth is justified by the comprehensive 'financial hub' purpose.

Completeness4/5

The tool surface covers company discovery, filing retrieval, financial metrics and analysis, market data, news, insider transactions, and economic data. Minor gaps include the lack of a single tool to return full standard financial statements (e.g., income statement or balance sheet), but individual metrics are accessible via get_financial_metric.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    A TypeScript-based MCP server that fetches real-time stock market data and company financial information through the Alpha Vantage API.
    4
    6
    -
  • A
    license
    D
    quality
    A
    maintenance
    A TypeScript-based MCP server that enables users to query financial news, stock data, and index information while managing text notes with creation and summarization capabilities.
    5
    104 npm
    663
    MIT
  • A
    license
    C
    quality
    B
    maintenance
    MCP server for accessing SEC EDGAR filings. Connects AI assistants to company filings, financial statements, and insider trading data with exact numeric precision.
    21
    357
    AGPL 3.0