Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

MetricDuck — Financial Analysis

REMOTE · MCP.METRICDUCK.COM · SCANNED AUG 3

SEC filing intelligence for AI agents. Financials, screening, peer comparison for 5,000+ companies.

+7 this week 78 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security89
Transport & Reachability100
Schema Quality & AI Usability69
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 21421 tokens (~973/item across 22 items; 22 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · mcp.metricduck.com

# add to Claude Code
claude mcp add --transport http com-metricduck-financial-analysis https://mcp.metricduck.com/mcp
# ~/.codex/config.toml
[mcp_servers.com-metricduck-financial-analysis]
url = "https://mcp.metricduck.com/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-metricduck-financial-analysis": {
      "type": "remote",
      "url": "https://mcp.metricduck.com/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add com-metricduck-financial-analysis --url https://mcp.metricduck.com/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  com-metricduck-financial-analysis:
    url: "https://mcp.metricduck.com/mcp"
// mcp.json
{
  "mcpServers": {
    "com-metricduck-financial-analysis": {
      "type": "http",
      "url": "https://mcp.metricduck.com/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 2 Aug 26 −1
    • Authorization: pass → partial security
  • 1 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Jul 26 +5
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

  • 29 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 70

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://mcp.metricduck.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=metricduck.com CN=WE1,O=Google Trust Services,C=US 15 Jun 2026 13 Sept 2026 ECDSA 256 ECDSA-SHA256 5e9b31c23b48f2d313318e9c305c76d6
SANs: metricduck.com, mcp.metricduck.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b
DNSSEC insecure

Validation of mcp.metricduck.com. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
metricduck.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer realm="OAuth", error="invalid_token", error_description="Missing or invalid access token", resource_metadata="https://mcp.metricduck.com/.well-known/oauth-protected-resource"

Bearer realm="OAuth", error="invalid_token", error_description="Missing or invalid access token", resource_metadata="https://mcp.metricduck.com/.well-known/oauth-protected-resource"

Protected resource metadata

Document https://mcp.metricduck.com/.well-known/oauth-protected-resource
Retrieved Yes
Resource https://mcp.metricduck.com/mcp
Authorisation server https://mcp.metricduck.com
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.metricduck.com/mcp Verified 200
http (plaintext) http://mcp.metricduck.com/mcp HTTPS enforced 301 https://mcp.metricduck.com/mcp
MCP tools — 22 exposed · ~20,849 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
browse_company ~407

Entity-axis navigation primitive — an orientation map for one company. Returns a single response containing identity (incl. CIK), filing inventory by form type, **signal availability inline**, indexed range, and ranked drill-down pointers — so one call tells you which signals fire for the company and which axis to descend next (signal-axis, source-axis, or metric-axis). Accepts a ticker, a company name, or a CIK, so it also resolves the entity. Compared with `search_companies`: that one is the resolver — it matches a name or partial name across companies and carries the SEC EDGAR entity link, filer_type, fiscal year-end and former names. Use it to pick between candidates; use this when you already know the company and want its inventory. **When to use:** - Starting a research thread on a single company - Confirming what data MetricDuck has indexed before deep-diving - Discovering which signals fire (M&A, partnerships, guidance shifts, accounting flags) without needing to fetch a filing first **When NOT to use:** - Cross-company screening → use `screen_companies` (metrics) or `screen_filing_signals` (signals) - Concept/theme discovery → use `search_sec_filings` **Drill-down map (the response will recommend specific calls based on what's available):** - `get_filing_index(ticker)` — full signal map for the latest filing - `get_xbrl_facts(ticker, search="...")` — dimensional financial drill-down _(atom v1: revisit response shape after first 5 q001/q012/q003 traces)_

NameTypeReqDescription
include_delistedbooleanInclude delisted companies in fuzzy match. Default false.
querystringyesCompany name, ticker, or 10-digit zero-padded CIK. Accepts free-text fuzzy match like 'US Steel' or 'AAPL'. For delisted companies, prefer the CIK.

No output schema declared.

No examples provided.

compare_companies ~700

Compare a company against peers across ~70 curated fundamental metrics (TTM), with percentile rankings and relative strengths/weaknesses. Returns a side-by-side table covering valuation (P/E, P/B, EV/EBITDA, EV/Sales, FCF yield), profitability (gross/operating/net/EBITDA margins, ROE, ROA, ROIC), leverage & liquidity (debt/equity, net debt/EBITDA, interest coverage, current ratio), efficiency (asset/inventory turnover, DSO, cash conversion cycle), and capital returns (dividend yield, dividend payout ratio, buyback yield, shareholder yield). Sector-inapplicable metrics are omitted (e.g. gross margin / FCF leverage for banks). Pass 'metrics' to focus the table on specific metric_ids. This is a TTM cross-sectional snapshot — for a single company's value in a specific fiscal year/quarter use get_metric_history. Valuation multiples here use the current/TTM price; for a multiple AS OF a specific past date, or a CUSTOM definition (e.g. lease-adjusted EV), assemble it from get_stock_price (price leg) + get_metric_history primitives. peer_mode controls peer selection: - 'sector' (default): auto-selected from same sector + similar market cap - 'tags': auto-selected by business model similarity (tag Jaccard) — better for cross-sector comparisons Override with custom_peers for specific matchups. The number of custom_peers is capped by plan (Free: 3, Pro: 10); exceeding it returns the limit and the count you asked for, so retry with that many. Data sourced from SEC EDGAR, updated with each quarterly/annual filing. Use Cases: - "Compare AAPL vs MSFT" -> compare_companies("AAPL", custom_peers="MSFT") - "How does NVDA stack up in its sector?" -> compare_companies("NVDA") - "Dividend payout ratio: KO vs KDP/PEP/KHC" -> compare_companies("KO", custom_peers="KDP,PEP,KHC", metrics="dividend_payout_ratio,dividend_yield") - "COST vs WMT vs TGT" -> compare_companies("COST", custom_peers="WMT,TGT") Responses capped at ~20K chars. If truncated, use fewer custom_peers or a 'metrics' s…

NameTypeReqDescription
custom_peersstringOptional comma-separated peer tickers (e.g., 'MSFT,GOOG,AMZN'). Auto-selected if omitted.
metricsstringOptional comma-separated metric_ids to show instead of the default curated table (e.g. 'dividend_payout_ratio,dividend_yield,ev_ebitda,roa,interest_coverage'). Drawn from the ~70 curated fundamentals…
peer_modestringPeer selection method: 'sector' (same sector + similar market cap, default) or 'tags' (business model similarity — finds companies with overlapping classification tags). Use 'tags' for cross-sector b…
tickerstringyesPrimary company ticker symbol to compare (e.g., 'AAPL'). Must be exact.

No output schema declared.

No examples provided.

compare_earnings_calls ~1,037

How has management's posture shifted across recent earnings calls? Cross-quarter trajectory view of transcript signals for a single ticker. This is MetricDuck's EARNINGS-CALL TRANSCRIPT tool (agents also look for this as get_earnings_call_transcript / get_earnings_transcript / get_earnings_call / search_earnings_calls). For ONE call's verbatim prepared remarks or Q&A, drill with get_filing_section(section_id="transcript_prepared_remarks" | "transcript_qa_session"); this tool gives the cross-quarter view. Different from get_filing_index (single-call triage map). This tool aligns earnings calls by event date and surfaces CROSS-QUARTER patterns: guidance deltas grouped by metric, scalar aggregates in a trajectory table, per-quarter strategic priorities, coverage gaps. For per-call depth, drill with get_filing_index. Output sections (all optional depending on coverage + dimensions): - Coverage table: event date, fiscal period, accession, coverage status, and transcript Source provenance (SEC-filed vs Issuer-published vs Machine-transcribed) per quarter — surfaces NO_TRANSCRIPT / WAITING gaps. Earnings-call transcripts are management commentary, not SEC-filed XBRL facts. - Aggregate trajectory: Q&A Deflection / Concerns Retained / Forward Commits — one row per scalar, one column per quarter. - Guidance trajectory: grouped by metric name with the existing delta_vs_prior flag from each call. - Strategic priorities by quarter. - Macro responses by quarter (factor + stance + iter033 drift tag), competitive mentions by quarter (competitor + context_type + iter033 drift tag). - Scale claims, revenue decompositions, KPI disclosures, capital-allocation postures, scenario sensitivities, forward commitments, and customer-cohort metrics by quarter — qualitative arrays surfaced side-by-side; agent reads parallel arrays to detect drift / cross-quarter framing. - Drill hints pinned to accessions for per-quarter deep-dives via get_filing_section. Use Cases: - "Deflection trend?" -…

NameTypeReqDescription
dimensionsarrayFilter to specific trajectory axes. Omit for all. guidance: forward guidance items with delta_vs_prior. hedges: Q&A deflection rate (the surviving hedge-family behavioral measure). qa: Q&A Exchange A…
n_quartersintegerHow many most-recent earnings calls to compare (default: 4, min: 2, max: 8).
tickerstringyesCompany ticker symbol (e.g., 'NVDA'). Must be exact.
vantage_datestringAs-of vantage (YYYY-MM-DD): compare only earnings calls reported ON OR BEFORE this date, with the window anchored to this date (not today) — for point-in-time / 'as of <date>' / time-anchored questio…

No output schema declared.

No examples provided.

get_company_events ~300

Retrieve a company's IR event CALENDAR — UPCOMING and PAST investor-relations events (earnings calls, annual/shareholder meetings, broker conferences, investor days) with the materials attached to each (deck, webcast, press release, transcript). Reach for this to answer time/calendar questions the document catalog can't: - "When does {ticker} next report / hold its earnings call?" → the UPCOMING list (scheduled events) - "What IR events did {ticker} have this year?" / "was {ticker} at any conferences?" - "What materials are attached to {ticker}'s last earnings event?" Each event has: occurred_at (issuer-local datetime) + time_precision, event_type (verbatim/open vocab), the verbatim source title, and material chips — each material's `material_id` is the get_ir_documents doc_id (a POINTER; read the content with get_ir_documents, not here). Coverage is honest: if a company hasn't been harvested yet, that is stated — an empty result does NOT mean the company has no IR events. `last_checked_at` stamps the calendar's as-of time (events announced since are not shown). For a deck's slide TEXT → get_ir_documents. For what management SAID on an earnings call (guidance/tone by quarter) → compare_earnings_calls.

NameTypeReqDescription
tickerstringyesCompany ticker symbol (e.g., 'AAPL'). Required.

No output schema declared.

No examples provided.

get_company_overview ~553

Get comprehensive financial overview for a company in a single call. Includes: current price, valuation (P/E, P/B, EV multiples, PEG), profitability (revenue, margins, returns), cash flow (OCF, FCF, yields), balance sheet (debt, equity, ratios), capital allocation (buybacks, shares outstanding, shareholder yield), business segment + geographic revenue mix (latest 10-K, with YoY change), latest earnings insights, filing intelligence highlights, and company flags. Depth presets: - depth="snapshot" — headline facts only (~2K chars): title, key signals, filing signals summary, flags, latest filing pointers. Best for multi-ticker sequencing or quick health checks. - depth="core" (default) — full overview with valuation, profitability, segments, cash flow, balance sheet, capital allocation, and earnings. - depth="full" — core + all tags (no 7-tag truncation), all earnings highlights/concerns (no 3-item truncation), plus 5Y historical distribution (median/p25/p75/p90) for P/E, EV/EBITDA, EV/FCF. Latest snapshot only — use get_financials for multi-year trends, get_xbrl_facts for multi-period segment history, get_filing_index for a signal map of the latest filing, compare_companies for peer benchmarking, get_stock_price for a historical/as-of-a-date close or a return between two dates (the price here is current only). POINT-IN-TIME / AS-OF: this overview does NOT take an as-of date — every figure is the latest snapshot. For a backtest or "as of <past date>" analysis (avoiding look-ahead), do NOT read the as-of state off this tool; route to the as-of-capable tools instead: get_financials(vantage_date="YYYY-MM-DD") for the statements filed on/before that date, get_filing_section/get_filing_index(vantage_date=…) for the then-current filing text/signals, get_xbrl_facts for point-in-time facts, and get_stock_price for the close on/after a date. Use search_companies first if unsure of the exact ticker.

NameTypeReqDescription
depthstringResponse shape preset. 'snapshot' = headline facts only (~2K chars) — best for multi-ticker sequencing or quick checks. 'core' (default) = standard overview (~5-9K). 'full' = core + lifted truncation…
tickerstringyesCompany ticker symbol (e.g., 'AAPL', 'MSFT'). Must be exact.

No output schema declared.

No examples provided.

get_earnings ~581

8-K earnings-RELEASE financials — headline income statement (revenue, net income, operating income, diluted EPS) PLUS the as-released cash-flow statement (operating cash flow, capex, free cash flow, +growth) — the figures management reports on release day, typically WEEKS before the audited 10-Q/10-K. On release day this is often the ONLY structured source for the fresh quarter's capex/OCF/FCF (the 8-K carries no XBRL, so get_financials/get_metric_history still show the prior quarter until the 10-Q lands). Distinct from get_financials (audited XBRL 10-K/10-Q statements — filed later, GAAP-consistent) and get_company_overview (single-period snapshot; its earnings section is prose only, no figures). Use this tool for the earliest-available as-reported release figures, each with a per-figure deep-link + verbatim quote into the source exhibit when the API has an attested receipt. Use Cases: - "What did NVDA report for its latest quarter's revenue?" -> get_earnings("NVDA") - "TSLA's last 8 quarters of earnings releases" -> get_earnings("TSLA", quarters=8) Release figures are management's own characterization and may be non-GAAP-adjacent — verify against the quote when precision matters. A figure without a receipt is still shown (often filled from a prior extraction pass or awaiting the producer's validation) but without a deep-link — absence of a receipt is not evidence the value is wrong. **NOT point-in-time.** This tool has no `vantage_date` and always serves the LATEST releases, walking back by `quarters` from today — never "as of" a past date. For as-of / backtest / "what was known on date X" work, use a tool that accepts `vantage_date`: `get_filing_section`, `get_filing_index`, `list_filings`, `get_financials`, `get_metric_history`, `get_company_overview`, `compare_earnings_calls`. Stated explicitly because an agent cannot otherwise tell an absent as-of capability from an ignored one — and silently substituting present-day figures into a point-in-time question…

NameTypeReqDescription
quartersintegerNumber of most recent quarters to return (1-8, default 4).
tickerstringyesCompany ticker symbol (e.g., 'NVDA'). Must be exact.

No output schema declared.

No examples provided.

get_earnings_reports ~435

Per-fiscal-period earnings DOCUMENT INDEX — one row per quarter/year gathering the documents for that reporting period: the 8-K press release, the earnings-call transcript (with prepared-remarks / Q&A deep-links), the 10-Q/10-K, the IR presentation deck(s), and the webcast event. Each artifact is present or honestly absent, so this is the "what can I pull for this quarter, and how do I reach it" map. Reach for this to answer "what's available / where do I read it" per period: - "What documents does {ticker} have for its last earnings?" → the newest row's artifacts (press release, transcript, deck, webcast, 10-Q) - "Give me {ticker}'s earnings transcripts / decks by quarter" → the per-period transcript + deck links - "Is there a webcast / presentation deck for {ticker}'s Q2?" → that row's webcast + deck cells (honest-absent when not harvested) This is a NAVIGATION index, not figures. For the release NUMBERS (revenue / EPS / net income) use get_earnings; for audited XBRL statements get_financials; for the IR event CALENDAR (upcoming + past) get_company_events; for a deck's slide TEXT get_ir_documents; for what management SAID on the call (guidance/tone by quarter) compare_earnings_calls. Coverage is honest per cell: a transcript reads present/pending/none; a deck join is exact (fiscal-period tuple, never a date); a webcast is a single-candidate ±1d match — and when the IR calendar isn't harvested that is stated (a missing webcast is NOT "no webcast held"). The response's `claimed` set is the deck/event ids this surface owns (so an IR-card consumer subtracts them cleanly).

NameTypeReqDescription
limitintegerMost-recent fiscal periods to return (newest first). Default 12.
tickerstringyesCompany ticker symbol (e.g., 'MRK'). Required.

No output schema declared.

No examples provided.

get_filing_index ~906

Get a navigable signal index for a company's latest SEC filing. Returns typed facts extracted from the filing, each with evidence and a section pointer for drill-down. This is the "table of contents" for what's in the filing — use it to decide WHAT to read. The index is agnostic to your intent — all facts presented neutrally. Pick the facts relevant to YOUR analysis, then drill with get_filing_section(). Facts from LLM analysis are labeled as such. Optional lens parameter filters to a specific analytical view: - earnings_quality: SBC, accounting flags, material weaknesses - debt_stress: debt profile, covenant compliance, near-term maturities - risk_trajectory: risk factors, escalations, key uncertainties - competitive_position: segments, customer/channel/geographic concentration - management_outlook: tone, guidance, guidance accuracy Use this as the lightweight first-look map of what's in a filing before drilling into the text with get_filing_section. IMPORTANT — indexes only the LATEST filing. For a PRIOR quarter's operating KPIs (same-store / comparable sales, ARPU, take-rate, bookings), forward GUIDANCE, or a BEAT/MISS-vs-guidance question (e.g. "FND same-store sales in Q4 2024", "did MU beat its Q3 gross-margin guidance"), do NOT page through the latest 10-Q/10-K — those metrics live in that quarter's EARNINGS-RELEASE 8-K, which MetricDuck extracts (comparable sales, KPIs, guidance, beat/miss) per quarter. Route: list_filings(ticker, form_subtype="8-K-earnings") to find that quarter's accession, then get_filing_section(ticker, "earnings_press_release" | "earnings_income_statement" | "earnings_segment_data", accession_number=<that 8-K>). The release NARRATIVE — highlights, forward GUIDANCE/outlook, CEO commentary — lives in "earnings_press_release" (target it with query="outlook"); "earnings_document_map" is now a compact TOC (headline metrics + table/section index — call get_filing_section with accession_number and NO section_id for the outline). (compare_…

NameTypeReqDescription
lensstringFilter to a specific analytical view. earnings_quality: SBC dilution, accounting flags, material weaknesses, earnings quality assessments. debt_stress: Debt profile, covenant compliance, near-term ma…
tickerstringyesCompany ticker symbol (e.g., 'AAPL'). Must be exact.
vantage_datestringAs-of vantage (YYYY-MM-DD): index the signal map for the latest filing filed ON OR BEFORE this date — for point-in-time / 'as of <date>' analysis (backtest, 'what was known at the announcement'). Omi…

No output schema declared.

No examples provided.

get_filing_section ~3,405

Read a specific section from an SEC Source (10-K, 10-Q, 8-K earnings, 8-K events, or DEF 14A proxy). **Two modes:** 1. **Section mode (default)** — pass section_id for full paginated text (up to 10 chunks per page). 2. **Outline mode** — OMIT section_id and pass accession_number to receive the filing's section TOC with ~120-char content previews per section. Use this when drilling into an unfamiliar Source (multi-exhibit 8-K, DEF 14A, FPI 6-K) to pick the right section by content rather than guessing from section_id. Use list_filings first to discover accession numbers. In section mode, omitting accession_number returns the latest filing's section. The section_id field description (below) enumerates valid IDs by category. Use Cases: - "Apple risk factors" -> get_filing_section("AAPL", "risk_factors") - "Customer concentration in NVDA" -> get_filing_section("NVDA", "risk_factors", query="customer concentration") - "Workforce / headcount / employees by geography" -> get_filing_section("MSFT", "business_description", query="human capital") (Human Capital Resources lives in Item 1, not a separate section) - "M&A terms" -> get_filing_section("CVX", "item_1_01_material_agreement", form_type="8-K") - "As of a past date / point-in-time" -> get_filing_section("MSFT", "business_description", vantage_date="2025-04-07") (serves the latest 10-K filed on/before that date — use this for time-anchored questions instead of assuming the newest filing; or pin an exact report via accession_number from list_filings) - "Multi-exhibit 8-K" -> get_filing_section(ticker, accession_number="...") (outline mode) → pick exhibit → get_filing_section(ticker, section_id="item_7_01_exhibit_99_02") Sister Sources (non-SEC): - Earnings call transcripts → `compare_earnings_calls` (cross-quarter view) or list_filings + section_id="transcript_prepared_remarks" - IR press releases / events → `screen_filing_signals` with signal_type="ir_press_release" - Forward guidance / operational KPIs / segment…

NameTypeReqDescription
accession_numberstringFiling accession number from list_filings. Latest filing used if omitted.
char_offsetintegerWithin-chunk character offset (default 0). For an oversized chunk that exceeds max_chars, the response serves a char-window and emits a `char_offset` cursor; pass it back (with the same `offset`) to…
cikstring10-digit SEC CIK as alternative to ticker. Use this for delisted/acquired companies (e.g., Foot Locker cik='0000850209', Activision cik='0000718877') where the ticker is no longer active.
companion_accessionsarrayOptional explicit companion accession_numbers (from a prior `screen_filing_signals` row's `value.companion_accessions`). When provided alongside `include_companions=true`, skips the same-day-8-K disc…
fiscal_periodstringFiscal period: 'Q1'/'Q2'/'Q3' for a quarter's 10-Q, or 'FY' for the annual 10-K (the default when omitted). Resolved via the XBRL DEI period index (correct for non-calendar fiscal years). The fourth…
fiscal_yearintegerFiscal year to look up (e.g., 2023). Resolves to that fiscal year's filing via the XBRL period index — correct for non-calendar fiscal years (e.g. a 10-K filed Feb 2024 covers FY2023, not FY2024). Co…
form_typestringForm type filter (used when accession_number is omitted to pick latest of that type). Includes 20-F/40-F/6-K for foreign private issuers
include_companionsbooleanWhen true AND section_id='item_1_01_material_agreement' on an 8-K anchor (Brief 35 Pattern 4): auto-expand the response to include text from same-day same-issuer companion 8-Ks (7.01 Reg FD + Ex 99 p…
include_delistedbooleanSet true to query historical data for a delisted/acquired company via its old ticker. Default false returns a structured delisted error pointing at the CIK.
max_charsintegerSoft response-size cap (default 20,000 chars). Anchor cover always included full; companion sections are appended in priority order (7.01 Reg FD → Ex 99 sequence → 8.01) and truncated from the end of…
max_chunksintegerChunks per page (default 10, max 10)
offsetintegerChunk offset for pagination (default 0)
preview_charsintegerOutline-mode preview length per section. Phase AD: when section_id is omitted and accession_number is set, returns section TOC with first N chars of each section's content. Default 120 (~25 words). I…
querystringKeyword to search within section chunks (e.g., 'customer concentration', 'export control'). Returns only matching chunks.
section_idstringSection ID. **Omit to enter outline mode** (Phase AD): when section_id is absent and accession_number is provided, returns the filing's section TOC with content previews instead of full section text…
tickerstringCompany ticker symbol (e.g., 'AAPL'). Required unless cik is provided.
vantage_datestringAs-of vantage date (YYYY-MM-DD): serve the latest filing filed ON OR BEFORE this date — for point-in-time / 'as of <date>' / historical questions (the agent should not assume the newest filing reflec…

No output schema declared.

No examples provided.

get_financials ~368

Get multi-period financial statements: income statement, balance sheet, and cash flow in one call. Returns quantitative historical data with key metrics and trends. Default: all 3 statements, quarterly, 2 years. For qualitative analysis (risks, accounting quality, management tone), use get_filing_index (signal map) then get_filing_section to read the text. Use Cases: - "Show me AAPL's financials" -> all statements - "MSFT revenue trend 5 years" -> period="annual", years=5 - "Is Tesla's debt increasing?" -> statements=["balance"] - "As of a past date / point-in-time" -> get_financials("MSFT", vantage_date="2024-04-30") (values as known from filings published on/before that date) Each period cites its original disclosing SEC filing (accession + filed date in a footnote; resolvable `mdck` + EDGAR index handles in the `<raw_data>` block), so every figure is traceable to its source filing. Responses capped at ~20K chars. If truncated, whole statements are dropped (not sliced) with a note — request fewer statements or reduce years.

NameTypeReqDescription
periodstringTime period granularity
statementsarrayWhich statements to include (default: all three)
tickerstringyesCompany ticker symbol (e.g., 'AAPL'). Must be exact.
vantage_datestringAs-of vantage (YYYY-MM-DD): return values as known from filings published on or before this date (point-in-time / 'as of <date>'). Omit for the latest.
yearsintegerYears of history (default 2, max 10)

No output schema declared.

No examples provided.

get_guidance_vs_actual ~541

Did management deliver what they guided? Joins forward guidance from earnings-call transcripts to reported actuals from 10-K/10-Q + 8-K earnings for the same ticker + fiscal period. Returns both sides verbatim with quotes and locators — agents synthesize the delivered-vs-guided narrative. This is a cross-feed temporal join; no single feed answers this question. Use Cases: - "Did NVDA deliver on Q2 FY2026 guidance?" -> get_guidance_vs_actual("NVDA", fiscal_period="Q2 FY2026") - "How disciplined has MSFT been against its own guidance?" -> get_guidance_vs_actual("MSFT") then compare across periods - "Latest period's guidance-vs-actual" -> get_guidance_vs_actual("TSLA") (period defaults to most recent) Returns everything a beat/miss verdict needs — never the verdict. The comparison is basis-matched, as-reported-only arithmetic; the CALLER applies valence (whether "above guidance" is good is the caller's judgment, not MetricDuck's). Use Cases: - "Did NVDA deliver on Q2 FY2026 guidance?" -> get_guidance_vs_actual("NVDA", fiscal_period="Q2 FY2026") — read range_position (above/within/below) + delta and decide yourself. Output: - Guidance: forward items targeting the period — from earnings-call transcripts AND 8-K earnings releases (metric, value/range, basis, period, verbatim quote, source). - Actuals: SEC 10-Q/K metric + narrative signals for that period, plus 8-K earnings signals when present. - Comparison: for each guidance item, when it can be recomputed from the receipts on its OWN basis (GAAP vs non-GAAP matched, units aligned, period settled) — a neutral `range_position` (above | within | below the guided band) + signed `delta`. Otherwise a typed `status` says why NOT (no_actual_on_basis / not_yet_settled / value_unparsed / period_unresolved / value_incongruent) — never a false or guessed verdict. A non-GAAP guide is never compared to a GAAP actual. - Notes: counts of calls/filings covered + comparison statuses so agents know coverage depth before interpreting.

NameTypeReqDescription
fiscal_periodstringTarget fiscal period, e.g. "Q2 FY2026". If omitted, defaults to the most recent period with SEC filing actuals.
tickerstringyesCompany ticker symbol (e.g., 'NVDA'). Must be exact.

No output schema declared.

No examples provided.

get_ir_documents ~638

Retrieve IR earnings-PRESENTATION-DECK text — forward guidance, operational KPIs, and segment outlook that are ONLY in the company's investor-relations slide deck and NOT in the SEC 8-K/10-Q release text or XBRL. Reach for this when the answer is a forward-looking guidance range or an operational KPI that the structured tools miss: - get_metric_history / get_xbrl_facts return no series for a KPI or guidance figure - get_filing_section finds the 8-K earnings release but it lacks the guidance/KPI (decks are a separate exhibit/source) What lives here (not in XBRL/filing text): production or revenue guidance ranges, segment/division outlook, operational KPIs presented as slide charts (e.g., berth capacity %, Mboed production guidance, adjusted-EBITDA guidance). Use Cases: - "OXY Q3 2024 production guidance" -> get_ir_documents("OXY", fiscal_year=2024, fiscal_period="Q3", query="production guidance") - "NCLH berth capacity outlook" -> get_ir_documents("NCLH", fiscal_year=2021, fiscal_period="Q3", query="berth") - "KNTK adjusted EBITDA guidance range" -> get_ir_documents("KNTK", fiscal_year=2023, fiscal_period="Q3", query="EBITDA") Each deck returns its title, original IR url, a stable MetricDuck-hosted gcs_uri, and the matching slide text cited by page. Pass a `query` to land on the exact page; omit it for a bounded prefix of the latest deck. Resolve by ticker or cik; narrow with fiscal_year/fiscal_period.

NameTypeReqDescription
cikstring10-digit SEC CIK as an alternative to ticker (e.g., '0000797468').
fiscal_periodstringFiscal period: 'Q3' (with fiscal_year) or combined '2024Q3'. Omit to return the latest deck(s).
fiscal_yearintegerFiscal year of the deck (e.g., 2024). Narrows to one period when combined with fiscal_period.
modestringResponse mode. 'full' (default): slide TEXT for the matched deck(s) — combine with query/period to pull a figure. 'list': a cheap one-row-per-item INVENTORY of the company's served IR documents (doc_…
querystringKeyword filter over slide text — returns ONLY the deck pages whose text matches every word (whole-word AND, case-insensitive). Use this to pull a specific figure (e.g., query="production guidance", "…
tickerstringCompany ticker symbol (e.g., 'OXY'). Required unless cik is provided.

No output schema declared.

No examples provided.

get_metric_history ~1,756

Time series for one metric across fiscal periods. Returns newest-first rows with fiscal_year + fiscal_period labels — AUTHORITATIVE for period-specific questions ("Q2 FY2025?"). The period_end calendar date is NOT the fiscal label, especially for non-December FYE companies (AAPL FY ends Sep; CRM FY ends Jan; ORCL FY ends May). Each row with an SEC accession is cited back to the source filing via the MetricDuck viewer. Use Cases: - "What was AAPL's Q2 FY2025 gross margin?" -> get_metric_history("AAPL", "gross_margin") - "ROE last 5 years for MSFT" -> get_metric_history("MSFT", "roe", period_type="FY", window=5) - "NVDA TTM revenue trend" -> get_metric_history("NVDA", "revenues", period_type="TTM") - "ABNB gross booking value trend" -> get_metric_history("ABNB", "gross_booking_value") (operating KPI; quarterly or FY) - "Net interest margin for a bank" -> get_metric_history("<bank>", "net_interest_margin") - "As of a past date / point-in-time" -> get_metric_history("MSFT", "revenues", vantage_date="2024-04-30") (series as known from filings published on/before that date) Common XBRL metric_ids: gross_margin, oper_margin, net_margin, ebitda_margin, roe, roa, roic, pe_ratio, ev_ebitda, ev_sales, fcf_yield, pb_ratio, current_ratio, debt_to_equity, interest_coverage, revenues, net_income, ebitda, fcf, net_cf_ops, capex, dividends_per_share, dividends_paid, dividend_yield, dividend_payout_ratio, fcf_payout_ratio, dividend_coverage. Also serves NON-XBRL operating KPIs (LLM-extracted from 10-K/10-Q MD&A + earnings releases), available QUARTERLY and ANNUAL (FY) — coverage varies by KPI. This set spans banking (net_interest_margin, common_equity_tier_1_capital_ratio, return_on_average_assets/equity), insurance (combined_ratio), SaaS (arr, remaining_performance_obligations), retail/marketplace (store_count, same_store_sales, gross_booking_value, take_rate), lodging/REIT (revpar, occupancy_rate, average_daily_rate), airlines (passenger_load_factor, prasm, casm), energy (oil_…

NameTypeReqDescription
metric_idstringyesExact metric id (lowercase + underscores). Common XBRL financials: gross_margin, oper_margin, net_margin, ebitda_margin, roe, roa, roic, pe_ratio, ev_ebitda, ev_sales, fcf_yield, pb_ratio, current_ra…
period_typestringQ = quarterly, FY = fiscal year, TTM = trailing 12 months.
tickerstringyesCompany ticker symbol (e.g., 'AAPL'). Must be exact.
vantage_datestringAs-of vantage (YYYY-MM-DD): return the series as known from filings published on or before this date (point-in-time / 'as of <date>'). Omit for the latest.
windowintegerMax observations returned, newest first. Default 20, max 40.

No output schema declared.

No examples provided.

get_metric_lineage ~460

The DERIVATION of one COMPUTED metric — its human formula + immediate inputs (each value + source), one level at a time. The audit / verify affordance for derived figures (margins, ratios, ROIC, FCF, adj-EBITDA): call it ONLY when the query asks **how a metric is computed**, **which definition** MetricDuck used, or to **verify / audit** the derivation — NOT to get the value itself (use get_metric_history / get_company_overview for that). Drillable (lazy, one level per call): - a `derived` input points to its OWN derivation — call get_metric_lineage(ticker, that_symbol) to go deeper. - a `base` input is an as-filed XBRL fact — open its filing handle, or get_xbrl_facts(ticker, search="<symbol>") to land on the exact fact. Use Cases: - "How is AAPL's net_margin calculated?" -> get_metric_lineage("AAPL", "net_margin") - "Which ROIC definition does this use?" -> get_metric_lineage("AAPL", "roic") - "Audit / verify gross_margin for Q2 FY2025" -> get_metric_lineage("AAPL", "gross_margin", fiscal_year=2025, fiscal_period="Q2") Computed metrics only — a base as-filed figure has no derivation (the tool says so and points to get_xbrl_facts).

NameTypeReqDescription
fiscal_periodstringPin the fiscal period. Omit for the latest.
fiscal_yearintegerPin the fiscal year (e.g. 2025). Omit for the latest period.
metricstringyesMetric id of a COMPUTED metric (e.g. 'net_margin', 'roic', 'fcf', 'ev_ebitda').
period_typestringQ = quarterly, FY = fiscal year, TTM = trailing 12 months.
segmentstringReporting segment id. Omit for the consolidated figure.
tickerstringyesCompany ticker symbol (e.g., 'AAPL'). Must be exact.

No output schema declared.

No examples provided.

get_stock_price ~823

Daily end-of-day stock prices (open/high/low, close, split- & dividend-adjusted adj_close, volume) for US exchange-listed companies. Sourced from a market-data feed, not SEC filings. Markets are open only on business days, so rows exist ONLY for trading days — the data IS the trading calendar: - Price ON OR AFTER a date (e.g. an announcement landing on a weekend): pass start_date=<date>; the FIRST row is that date or the next open day. - Price ON OR BEFORE a date: pass end_date=<date>; the LAST row is that date or the prior open day. - A single specific date: pass start_date=<date> (omit end_date) — returns a short forward window whose first row is your on/after price. Use Cases: - "AAPL close on 2025-07-28" -> get_stock_price("AAPL", start_date="2025-07-28") (first row = that day or next open day) - "DKNG total return 2025-01-02 → 2026-02-27" -> TWO calls: get_stock_price("DKNG", start_date="2025-01-02") and get_stock_price("DKNG", end_date="2026-02-27"); take each first/last close and compute the return (cheaper than one 14-month window) - "SUI 1/14/30 calendar days after an 8-K date" -> get_stock_price("SUI", start_date="<announce>", end_date="<announce + ~32d>"), then pick the first row on/after announce, +1, +14, +30 - "Latest price" -> get_stock_price("AAPL") When the window spans ≥2 trading days, the response also reports the first/last close and the period return on BOTH close (literal point-to-point) and adj_close (split/dividend-adjusted — the true economic return; the two diverge across a split or dividend). Each response also includes the latest REPORTED period-end shares outstanding on/before your end date (period-end balance-sheet count; dei cover where absent) plus the implied market cap at the latest close — use these for market-cap / EV / P/B math instead of deriving share counts from NI/EPS (that yields weighted-average shares, a different basis). Coverage: ~8,400 US common-equity tickers, end-of-day only (no intraday/real-time, no options/FX…

NameTypeReqDescription
end_datestringWindow end (YYYY-MM-DD). The LAST returned row on/before this date is the price ON OR BEFORE it. Omit start_date to fetch just the price on/before this date.
limitintegerMax rows (newest first if the window exceeds it). Default 30. For a point-to-point return over a long span, make TWO narrow-window calls (one per date) rather than one wide window — cheaper, and avoi…
start_datestringWindow start (YYYY-MM-DD). Markets trade only on business days — if this date is a weekend/holiday the FIRST returned row is the next OPEN day (the price ON OR AFTER this date). Omit end_date to fetc…
tickerstringyesCompany ticker symbol (e.g., 'AAPL'). US exchange-listed (NYSE/Nasdaq/AMEX), 1–5 letters.

No output schema declared.

No examples provided.

get_xbrl_facts ~1,471

Raw XBRL facts from SEC filings — use only when `get_financials` cannot answer the question. **Scope:** escape-hatch for dimensional / industry-specific / as-filed numbers. ~3,000 facts per filing with dimensional breakdowns (segment, geography, product line). Search by human-readable label (not XBRL concept names). **First try `get_financials`** — it covers the 323+ standard metrics (revenue, margins, EPS, FCF, ROIC, leverage, etc.) across TTM/FY/Q + YOY/CAGR dimensions for all 5,500+ companies. It is faster, cheaper, and more portable across tickers. **Use `get_xbrl_facts` only when:** - You need a segment / geographic / product-line breakdown that `get_financials` aggregates away — available only for concepts the filer XBRL-tags dimensionally (usually revenue + segment profit / Adjusted EBITDA). Segment-level **costs / operating expenses** are frequently NOT tagged — but a single segment's total operating expense = its **Revenue − Adjusted EBITDA** (both usually ARE tagged dimensionally), so search both members and subtract. Finer per-segment cost DETAIL (e.g. programming vs other) lives only in the MD&A — `get_filing_section(section_id="mda_results_operations", query="<segment> total costs and expenses adjusted ebitda")`. - You need **revenue concentration / share** by customer, channel, distributor, geography, or product — the as-filed `ConcentrationRiskPercentage` facts (e.g. "what % of revenue from channel partners / a distributor / a region"). Deterministic and present even when the filing prose only describes the relationship qualitatively. Search `concentration`. - You need an industry-specific metric not in the standard catalog (e.g., `medical cost ratio` for a health insurer, `reserve replacement ratio` for an oil & gas name) - You need to verify a specific number from filing text against the as-filed XBRL value - You need a historical fiscal year not returned by `get_financials` (pass `fiscal_year`) - You need a cash-flow / income **line across peri…

NameTypeReqDescription
accession_numberstringSpecific filing accession number (from list_filings). If omitted, resolves automatically from form_type + fiscal_year.
fiscal_periodstringPin the exact period when resolving by fiscal_year (Q1/Q2/Q3/Q4/FY). WITHOUT it, fiscal_year resolves to the LATEST filing of that year — wrong for 'as of <quarter>' questions (use this to get the ri…
fiscal_yearintegerFiscal year to look up (e.g., 2022). If omitted, uses the latest filing. Ignored if accession_number provided.
form_typestringFiling type when auto-resolving (ignored if accession_number provided). Default: 10-K (annual). FPI filers: 20-F/40-F (annual) or 6-K (interim) — the backend auto-resolves the right form family, so t…
limitintegerMaximum facts to return (default 50, max 200)
period_historybooleanReturn the searched concept's full as-filed series ACROSS filings (every period: quarter, 6-month YTD, 9-month YTD, FY) instead of one filing's facts. Use this to de-cumulate a cumulative cash-flow /…
searchstringyesSearch XBRL concepts by label or name. Comma-separated for multiple terms (OR match). Examples: 'medical cost ratio', 'goodwill,impairment', 'segment revenue', 'concentration' (revenue share by custo…
tickerstringyesCompany ticker symbol (e.g., 'UNH', 'AAPL'). Must be exact.

No output schema declared.

No examples provided.

list_filings ~1,008

Browse Sources inventory and the section catalog for a single company. Covers SEC filings: 10-K, 10-Q, 8-K, DEF 14A, plus 20-F / 40-F / 6-K for foreign private issuers. **Scope:** filings-metadata utility. Returns filing list (form type, dates, accession numbers) plus per-section details (word count, chunk count, tables) for 10-K/10-Q/DEF 14A; 8-K returns filing metadata only. Default: last 2 years. Use `fiscal_year` + `fiscal_period` to pin a single historical filing in one call. **For signal triage and "what matters" in a filing, use `get_filing_index` instead.** Use `list_filings` only when: - You need an accession_number for a specific historical filing (before `get_xbrl_facts` or `get_filing_section`) - You need to pin a specific fiscal year/period (e.g., FY2020 Q3) - You need the full section inventory with sizes to plan pagination - You need to confirm whether a specific filing exists Sister Sources (non-SEC): - Earnings call transcripts → `compare_earnings_calls` (cross-quarter view) - IR press releases / events → `screen_filing_signals` with signal_type="ir_press_release" **Delisted / acquired issuers**: pass `cik` (10-digit, zero-padded) instead of (or alongside) `ticker` and set `include_delisted=true`. SEC's ticker registry excludes delisted issuers, so `ticker`-only calls 404 even when filings exist in MetricDuck. Examples: SAVE Spirit Airlines (`cik="0001498710"`), RDFN Redfin (`cik="0001382821"`), ATVI Activision (`cik="0000718877"`). Data horizon: 2013+. Responses capped at ~20K chars; narrow via `form_type`, `fiscal_year`, or reduce `years`.

NameTypeReqDescription
cikstring10-digit SEC CIK as alternative to ticker. Use for delisted/acquired companies (e.g., Z=Zillow ticker may not resolve; pass cik='0001617640' instead). Either ticker or cik required.
fiscal_periodstringPick a specific fiscal period. FY = annual (10-K / 20-F / 40-F); Q1/Q2/Q3 = quarterly (10-Q). The 4th quarter is reported in the annual 10-K, so Q4 is treated as FY. Combine with fiscal_year to pin a…
fiscal_yearintegerPick a specific fiscal year (e.g., 2020). Resolved via the XBRL period index — correct for non-calendar fiscal years (a 10-K filed Feb 2024 is FY2023). Alone, lists all of that fiscal year's filings…
form_subtypestringFilter 8-K filings by sub-type (derived from section inventory). 8-K-earnings = earnings releases; 8-K-event = M&A, exec changes, debt; 8-K-transcript = earnings call transcripts; 8-K-other = misc. I…
form_typestringFilter by form type: 10-K annual, 10-Q quarterly, 8-K current reports, DEF 14A proxy; 20-F/40-F annual and 6-K interim for foreign private issuers
include_delistedbooleanOpt in to historical data for delisted companies. Default false: the API returns a structured 'delisted' error (HTTP 410) naming the delisting date when a delisted ticker is queried; pass true to pro…
tickerstringCompany ticker symbol (e.g., 'AAPL'). Must be exact. Either ticker or cik required.
vantage_datestringAs-of vantage (YYYY-MM-DD): only list filings filed ON OR BEFORE this date (point-in-time). Omit to list the most recent filings. For vantages older than the `years` window, pass a larger `years`.
yearsintegerYears of filing history (default 2, max 7). Ignored when fiscal_year is set.

No output schema declared.

No examples provided.

list_recent_filings ~575

Discover recent SEC filings landed since a watermark — single call, universe-wide, optional portfolio filter. **Use this when:** building event-driven agent workflows (Routines, alerts, daily portfolio checks). The right primitive when the question is "what new filings have landed?" rather than "what filings does this one company have?". **Returns:** flat list of {ticker, accession, filed_at, form_type, form_subtype}, newest filing date first and **largest issuers first within a date** — so `limit=15` during earnings week surfaces the banks and mega-caps that filed, not the alphabetically-first micro-caps. `form_subtype` is computed from the filing's section inventory: '8-K-earnings' (has any earnings_* section), '8-K-transcript' (has any transcript_* section), '8-K-event' (has any item_* section), '8-K-other' (8-K with none of the above), or null for non-8-K forms. **Cost:** ~one call regardless of portfolio size — vs O(N) calls if you fan out per-ticker via `list_filings`. **Composition:** for each row in the result, drill in via `get_filing_section(ticker, accession_number=...)` (omit `section_id` for the filing's section outline) to see what is in that specific filing, then `get_filing_section` with a `section_id` for narrative content. **Use `list_filings` instead when:** you need ALL filings for ONE company (paginate by year). `list_recent_filings` is the cross-company / event-discovery primitive; `list_filings` is the per-company catalog.

NameTypeReqDescription
form_subtypesarrayFilter by 8-K sub-type derived from section inventory. '8-K-earnings' = earnings release; '8-K-transcript' = earnings call transcript; '8-K-event' = M&A / executive changes / debt; '8-K-other' = misc…
form_typesarrayFilter by SEC form type. Examples: ['8-K'], ['8-K', '10-Q'], ['10-K']. Omit to include all form types.
limitintegerMax results (default 50, max 100). Sorted newest filing date first, then by company size, so a small limit still surfaces the largest issuers that filed.
sincestringyesFiling date floor (inclusive). YYYY-MM-DD. Required. Pass the watermark from your last poll to get only new filings.
tickersarrayOptional portfolio filter. Up to 50 tickers. Omit to scan the full universe.

No output schema declared.

No examples provided.

screen_companies ~933

Screen 5,500+ US companies by financial metrics. Find stocks matching quantitative criteria. Metric IDs (canonical names from filing_metrics): - Valuation: pe_ratio, pb_ratio, ev_ebitda, fcf_yield, market_cap, ev - Profitability: gross_margin, oper_margin, net_margin, ebitda_margin, roe, roa, roic - Cash Flow: fcf, net_cf_ops, cash_conversion - Balance Sheet: debt_to_equity, current_ratio, ttl_debt, ttl_equity, cash_st_invs - Size: revenues, net_income, ebitda, gross_profit Growth screening: use period_type on any base metric: - Revenue growth YoY: metric_id="revenues", period_type="ttm.yoy" - 3-year revenue CAGR: metric_id="revenues", period_type="ttm.cagr3" - Earnings growth: metric_id="net_income", period_type="ttm.yoy" Period types: ttm (default), q, fy, ss (balance sheet snapshot), ttm.yoy, ttm.cagr3, ttm.cagr5 Sectors: TECH, FIN, HEALTH, CONS_STAPLES, CONS_DISC, IND, ENERGY, UTIL, RE, MAT, COMM Operators: gt (>), gte (>=), lt (<), lte (<=), eq (=), between Tag filtering (required_tags / excluded_tags): filter by business model classification. Requires companies to be classified — unclassified companies are excluded from tag-filtered results. Note: For P/E screening, negative P/E means losses. Add a gt(0) filter to exclude loss-making companies. Note: ROIC values are decimals (0.15 = 15%). Margins and returns are also decimals. Use Cases: - "High ROIC tech stocks" -> filters=[{metric_id:"roic", operator:"gt", value:0.15}], sectors=["TECH"] - "Undervalued profitable industrials" -> filters=[{metric_id:"pe_ratio", operator:"lt", value:15}, {metric_id:"pe_ratio", operator:"gt", value:0}], sectors=["IND"] - "Revenue growing >10% YoY" -> filters=[{metric_id:"revenues", operator:"gt", value:0.10, period_type:"ttm.yoy"}] - "AI infrastructure companies not exposed to China supply chain" -> required_tags=["ai_ml_infrastructure"], excluded_tags=["china_supply_chain_heavy"] - "Profitable subscription businesses" -> filters=[{metric_id:"net_margin", operator:"gt",…

NameTypeReqDescription
excluded_tagsarrayClassification tags results must NOT have (e.g., ['china_supply_chain_heavy', 'regulated_industry']).
filtersarrayyesMetric filters
limitintegerMax results (default 20, max 50)
required_tagsarrayClassification tags all results must have (e.g., ['ai_ml_infrastructure', 'subscription_recurring']). Tags: cloud_infrastructure, saas_enterprise, saas_smb, marketplace_platform, semiconductor_design…
sectorsarraySector codes (e.g., ['TECH', 'HEALTH', 'MAT'])
sort_bystringMetric ID to sort by (default: 'market_cap')

No output schema declared.

No examples provided.

screen_filing_signals ~2,073

Screen companies by signals across all source types — filings, earnings, transcripts, IR events. This is NOT metric screening (use screen_companies for P/E, ROIC, etc.). Screens by verifiable facts, not LLM-generated scores. Available signals: Filing intelligence (from 10-K/10-Q): - tone_cautious: Management tone is cautious/defensive - customer_concentration_high: Customer concentration > 20% or elevated risk - covenant_risk: Covenant tight, waiver obtained, or violation - debt_maturity_near: Significant debt maturing within 12 months - dividend_coverage_weak: Dividend coverage below operating cash flow - sbc_unhedged: Stock comp exceeds buybacks (net dilution) - has_fuel_sensitivity: Fuel cost sensitivity quantified in MD&A - mda_has_scale_claims: ≥3 quantified operational scale claims extracted from MD&A narrative (e.g. renewal rates, member counts, comp sales) Earnings releases (8-K Item 2.02 and 6-K Ex 99.1, from earnings press releases): - earnings_revenue_grew: Revenue grew year-over-year - earnings_revenue_declined: Revenue declined year-over-year - earnings_margin_expanded: Operating or gross margin expanded vs prior year - earnings_margin_contracted: Operating or gross margin contracted vs prior year - earnings_guidance_raised_8k: Forward guidance raised in earnings release - earnings_guidance_lowered_8k: Forward guidance lowered in earnings release - earnings_has_special_items: Non-recurring charges or special items disclosed - earnings_accrual_concerning: Accrual quality weak or concerning (cash vs earnings divergence) - earnings_has_capital_return: Shareholder capital returned (buybacks and/or dividends) Transcript (from earnings call Q&A): - transcript_has_guidance: Specific guidance given on earnings call - transcript_has_prepared_remarks: Prepared remarks available (true for all transcript sources) - transcript_has_analyst_questions: Analyst Q&A captured with topics + firms - transcript_guidance_raised: ≥1 guidance item raised vs prior quarter…

NameTypeReqDescription
agreement_type_filterstringDiscriminator for `ir_partnership` signals. Filters to a specific agreement_type — use 'm_and_a_announcement' for fresh M&A deals, 'partnership_strategic' for strategic alliances. Mirrors services/se…
limitintegerMax results (default: 20)
match_modestringSignal-list match semantics within each source type. 'all' (default): row qualifies only if every requested signal_id fires on the same source row — use for targeted screening. 'any': row qualifies i…
order_bystringResult ordering. 'recency' (default): event_date / filing_date DESC. 'market_cap': company market-cap DESC NULLS LAST, recency tiebreaker. Use 'market_cap' for broadcast-digest discovery so high-impa…
recency_daysintegerOnly filings from last N days (default: 90)
sectorsarraySector codes: TECH, HEALTH, FIN, RE, CONS_DISC, CONS_STAPLES, IND, MAT, ENERGY, UTIL, TRANSPORT, COMM, OTHER
signalsarrayyesSignal filters to match. Pass one or more ids EXACTLY as listed below (only these are screenable). Omit `ticker` to screen the whole universe for a signal (the common case); pass `ticker` only to che…
since_datestringTime-travel lower bound (inclusive) on event_date / filing_date. When provided alongside until_date, defines an explicit date range — overrides recency_days. Format: YYYY-MM-DD. Use for backfilling p…
tickerstringFilter to a single ticker (e.g. 'NVDA'). Use for per-ticker cross-source signal inventory. Omit to screen across all companies.
until_datestringTime-travel upper bound (inclusive) on event_date / filing_date. When provided alongside since_date, defines an explicit date range — overrides recency_days. Format: YYYY-MM-DD.

No output schema declared.

No examples provided.

search_companies ~547

Resolve a company name or ticker to the exact ticker symbol via fuzzy name/ticker match. **Scope:** exact-entity lookup only. Handles partial names ("micro" -> MSFT), typos, and ticker variations. Returns ticker, full name, CIK, SIC, filer type (domestic / foreign private issuer / fund — i.e. which form family to expect), fiscal year-end, and a primary-source SEC EDGAR entity-page link (verify the resolution + see the company's full filing history) for each match. **Use this when:** you have a specific company name or ambiguous ticker and need to confirm the exact ticker before calling other tools. **Delisted / renamed / acquired companies** are resolvable by current OR former name (e.g. "American Software" → Logility, "Chase Manhattan" → JPM). They are returned ranked below active matches, flagged `[delisted]`, with their CIK. They have no current ticker — pass the returned `cik` to downstream tools (every company tool accepts a CIK in place of a ticker). **Input tip:** queries matching the pattern of 2-5 uppercase letters are auto-extracted as a ticker. If you pass an all-caps company name (e.g., "AMCOR") that is NOT a ticker, the lookup may miss — pass "Amcor" with normal casing to force name-search behavior. On miss, this tool returns suggested near-matches when possible. **Do NOT use this for concept/theme/industry discovery** (e.g., "gold miners", "LNG exposure", "companies mentioning tariffs"). This tool matches on company-name text only — it cannot surface companies by what they do. For concept discovery, use `search_sec_filings` (full-text search across filings) or `screen_companies` (metric + sector filters). **Coverage boundary:** MetricDuck is **SEC-EDGAR only**. This tool is the authoritative coverage check. A no-match on a **non-US local-exchange symbol** (e.g. `3087.T`, `LSE:HSBA`, `7203:JP`) is a coverage boundary, not a lookup miss — the tool says so explicitly and you should treat it as **terminal** (don't retry ticker variations). Foreign i…

NameTypeReqDescription
limitintegerMaximum results (default 5, max 20)
querystringyesCompany name or ticker (supports partial matches and typos)

No output schema declared.

No examples provided.

search_sec_filings ~1,332

Search the full text of every SEC filing since 2001 to find companies related to any concept — a product, technology, regulation, event, or company. Returns filing-level results with aggregated statistics (company count, form type breakdown, industry distribution). For 10-K/10-Q filings processed by MetricDuck, also shows WHICH SECTIONS contain the term with drill-in pointers. **Searchable form types** (all SEC forms since 2001): - 10-K, 10-Q — Annual/quarterly reports (section-level drill-down available) - 8-K — Material events, earnings announcements, leadership changes - DEF 14A, DEFM14A, PRE 14A — Proxy statements: executive compensation, board proposals, merger votes - S-1, F-1 — IPO registration statements (new market entrants, competitive landscape) - S-3, S-4 — Shelf registrations, M&A registration statements - 424B series — Prospectus supplements (debt/equity offerings) - N-CSR, N-CSRS — Fund annual/semi-annual reports (institutional positioning) - SD — Conflict minerals disclosure (physical supply chain mapping) - SC 13D, SC 13G — Beneficial ownership (activist investors, large holders) - 20-F, 40-F, 6-K — Foreign private issuer reports - Any other SEC form type — omit form_type to search all **The FORM TYPE reveals the context:** - 10-K risk factors → dependency, competition, or regulatory exposure - 10-K revenue footnote / business description → customer/supplier/partner - 8-K → material event reaction or announcement - S-1 → new market entrant (IPO in your space) - DEF 14A → executive compensation tied to a metric or initiative - SD → physical supply chain (minerals, manufacturing) - SC 13D → activist investor targeting a company **Section-level enrichment** (10-K/10-Q only): For MetricDuck-processed filings, results include which sections contain the term (risk factors, MD&A, revenue footnote, etc.) with chunk pointers for immediate drill-in via get_filing_section. Non-standard forms (S-1, DEF 14A, etc.) return filing metadata and accession number…

NameTypeReqDescription
companystringRestrict to one company. Accepts a ticker (e.g. 'WSC'), a CIK (exact match, preferred — get from search_companies; shorter numeric CIKs are auto-zero-padded to 10 digits), or a company name (partial…
date_fromstringStart date YYYY-MM-DD. Default: 1 year ago.
date_tostringEnd date YYYY-MM-DD. Default: today.
form_typestringSEC form type filter. 10-K (annual report), 10-Q (quarterly), 8-K (material events), DEF 14A (proxy/compensation), S-1 (IPO registration). Comma-separated for multiple: '10-K,10-Q'. Omit to search al…
limitintegerMax results (default 10, max 100). Results deduplicated by filing, sorted most recent first. Section-level enrichment applies to the first 10 results.
querystringSearch terms. All terms required by default (implicit AND). Syntax: exact phrase "revenue recognition", OR: "goodwill impairment" OR "asset writedown", NOT: restructuring NOT "restructuring charges",…
rank_bystringSort order for the returned filing list. 'date' (default) = most recent filings first — best for time-sensitive queries (breaches, guidance changes, recent events). 'relevance' = EFTS native relevanc…
sectionsbooleanInclude section-level matches showing WHERE in each filing the term appears. Provides exact section + chunk pointers for immediate drill-in with get_filing_section. Set false for faster filing-level-…
ticker_lookupstringShortcut: provide a ticker to find companies that mention this company in their filings. Auto-resolves to formal name and filters self-references. Example: ticker_lookup="AAPL" finds companies listin…

No output schema declared.

No examples provided.