Complete reference for all 22 Metric Duck MCP tools available via the remote server at mcp.metricduck.com
Contract version 0.9.0 — auto-derived from mcp-worker/tool-contract.json
Entity-axis orientation map for one company. Returns identity, filing inventory by form type, signal availability inline, indexed range, and ranked drill-down pointers — all in one call, so you can see which axis (signal, source, metric) to descend. Accepts a ticker, name, or CIK, so it resolves the entity too; search_companies is the resolver for picking between candidates.
Accepts ticker, company name, or 10-digit CIK. For delisted companies, prefer the CIK.
query[string]requiredCompany name, ticker, or 10-digit zero-padded CIK. Free-text fuzzy match.
include_delisted[boolean]optionaldefault: falseInclude delisted companies among FUZZY (ticker-prefix / name) candidates. Default false — an exact ticker, former ticker or CIK always resolves regardless, and for a delisted company the CIK is the safest key.
GET /api/v1/companies/search + /data-availability + /signal-summary"What signals fire for US Steel?" or "Tell me about NVDA"Find companies matching a name, ticker, or keyword.
query[string]requiredCompany name or ticker (partial matches and typos OK). Foreign 20-F/40-F filers: use the company name, not a local symbol.
limit[integer]optionaldefault: 5range: 1–20Max results to return.
GET /api/v1/companies/search"Find semiconductor companies" or "Search for NVDA"Everything about a company in one call: profile, profitability (ROE, ROIC, margins), balance-sheet strength, cash-flow quality, valuation multiples, capital allocation, 8-quarter trends, and latest filing-intelligence highlights.
ticker[string]requiredCompany ticker symbol (e.g., AAPL).
depth[string]optionaldefault: coreHow much detail to include. snapshot = thinnest, core = default, full = every section.
GET /api/v1/companies/{ticker}/overview-page"Tell me about Apple" or "Give me a full overview of COST"Daily end-of-day stock prices (open/high/low, close, split- & dividend-adjusted adj_close, volume) for ~8,400 US exchange-listed companies. Rows exist only for trading days — the data is the trading calendar. When the window spans 2+ days it also reports the first/last close and the period return on both close and adj_close. Sourced from a market-data feed, not SEC filings.
Markets trade only on business days: start_date returns the price on/after that date; end_date returns the price on/before it; omit both for the latest price.
ticker[string]requiredCompany ticker symbol (e.g., AAPL). US exchange-listed, 1–5 letters.
start_date[string]optionalWindow start (YYYY-MM-DD). First row is this date or the next open day (price on/after). Omit end_date for just the on/after price.
end_date[string]optionalWindow end (YYYY-MM-DD). Last row is this date or the prior open day (price on/before).
limit[integer]optionaldefault: 30range: 1–2000Max rows, newest first when the window is longer. Default 30. For a point-to-point return over a long span, make two narrow-window calls rather than one wide one — cheaper, and the cap cannot drop your start date.
GET /api/v1/market/daily/{ticker}"AAPL close on 2025-07-28" or "DKNG total return Jan 2025 → Feb 2026"Multi-period financial statement data: income statement, balance sheet, cash flow. Quarterly or annual, up to 10 years.
ticker[string]requiredCompany ticker symbol (e.g., MSFT).
period[string]optionaldefault: quarterlyReporting period.
years[integer]optionaldefault: 2range: 1–10Number of years of history.
statements[array]optionaldefault: [income, balance, cashflow]Which statements to include. Pass any subset.
vantage_date[string]optionalAs-of date (YYYY-MM-DD): restrict to filings published on or before it, and cite the filing current then. Bounds which filings are VISIBLE, not what the numbers were — a later restatement is served at its restated value, with an explicit look-ahead warning. Omit for the latest.
GET /api/v1/companies/{ticker}/income-statementGET /api/v1/companies/{ticker}/balance-sheetGET /api/v1/companies/{ticker}/cash-flow"Show me MSFT revenue trend last 5 years" or "AAPL quarterly cash flow"Benchmark a company against its sector peers across 70+ metrics with sector percentile rankings, 8-quarter trends, and relative strengths/weaknesses.
ticker[string]requiredCompany ticker symbol to benchmark.
custom_peers[string]optionalComma-separated tickers to use instead of sector defaults.
peer_mode[string]optionaldefault: sectorHow peers are selected. sector = SIC peers, tags = thematic-tag peers.
metrics[string]optionalComma-separated metric_ids to show instead of the curated default table (e.g. 'ev_ebitda,roa,interest_coverage'). A near-miss such as 'operating_margin' is read as 'oper_margin' and said so; any other unknown id is named with its closest ids.
GET /api/v1/peers/{ticker}"How does MSFT compare to its peers?" or "Compare Google to its sector"Filter companies by financial metrics. Define metric thresholds with operators (gt/lt/between/...) and rank results by any metric.
filters[array]requiredArray of metric filters. Each filter: { metric_id, operator, value | min_value | max_value, period_type? }.
each: { metric_id, operator, value, min_value, max_value, period_type }
sort_by[string]optionalMetric to sort results by.
sectors[array]optionalOptional sector codes to restrict the universe.
required_tags[array]optionalClassification tags every result must carry (e.g. 'ai_ml_infrastructure', 'subscription_recurring'). Drawn from a fixed vocabulary covering business model, sector and technology; an unrecognised tag matches nothing.
excluded_tags[array]optionalExclude companies with these thematic tags.
limit[integer]optionaldefault: 20range: 1–50Max results (default 20, max 50); a lower limit keeps a large screen under the ~20K response cap.
POST /api/v1/screener/screen"Find high-ROIC tech stocks" or "Screen for companies with FCF yield > 8%"Browse SEC filings for a company with section-level inventory — available sections, word counts, chunk counts, and table counts per filing. Use this to discover what's available before reading specific sections.
ticker[string]optionalCompany ticker symbol.
cik[string]optional10-digit SEC CIK, as an alternative to ticker. Use it for delisted or acquired companies whose ticker no longer resolves. Either ticker or cik is required.
form_type[string]optionalForm 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. Other forms (424B2, FWP, 13F-HR, 4): search_sec_filings(query, company, form_type, sections=false) links the filing on EDGAR (company: the 10-digit CIK; date_from for older filings).
form_subtype[string]optional8-K subtype derived from section inventory (earnings, event, transcript, other).
years[integer]optionaldefault: 2range: 1–7Years of filing history (default 2, max 7). Ignored when fiscal_year is set.
fiscal_year[integer]optionalA specific fiscal year, resolved through the XBRL period index — correct for non-calendar fiscal years (a 10-K filed Feb 2024 is FY2023). Alone it lists that year's 10-K and its 10-Qs; pair it with fiscal_period to pin one. Overrides years. History from 2013.
fiscal_period[string]optionalFY = annual (10-K / 20-F / 40-F); Q1–Q3 = the quarterly 10-Q. The fourth quarter is reported inside the annual 10-K, so Q4 is treated as FY. Pair with fiscal_year to pin a single filing.
vantage_date[string]optionalAs-of date (YYYY-MM-DD): list only filings filed on or before it. For vantages older than the years window, widen years. Omit for the most recent.
include_delisted[boolean]optionaldefault: falseOpt in to a delisted company's history. Default false returns a structured 'delisted' error (HTTP 410) naming the delisting date; querying by cik bypasses the gate. Applies to 10-K / 10-Q / DEF 14A.
GET /api/v1/filings/sections/summary"What filings does Apple have?" or "Show me Tesla's 10-K filings"Read specific sections from SEC filings with pagination. Supports 70 section types for 10-K/10-Q (risk_factors, mda_results_operations, footnote_debt, …) and earnings sections for 8-K filings.
Provide either ticker or cik (CIK is required for delisted companies).
ticker[string]optionalCompany ticker symbol.
cik[string]optional10-digit SEC CIK (zero-padded). Use instead of ticker for delisted companies.
include_delisted[boolean]optionalAllow lookups against delisted companies.
section_id[string]optionalSection identifier (e.g., risk_factors, mda_results_operations).
accession_number[string]optionalSpecific filing accession number (default: latest).
form_type[string]optionalForm type filter — picks the latest filing of that type when accession_number is omitted. 20-F/40-F/6-K cover foreign private issuers. Other forms (424B2, FWP, 13F-HR, 4): search_sec_filings(query, company, form_type, sections=false) links the filing on EDGAR (company: the 10-digit CIK; date_from for older filings).
fiscal_year[integer]optionalFiscal year to look up, resolved through the XBRL period index — correct for non-calendar fiscal years (a 10-K filed Feb 2024 covers FY2023, not FY2024). Pair with fiscal_period for a quarter, or omit it for the annual 10-K. Ignored when accession_number is given, and DEF 14A / other non-XBRL forms are not period-indexed.
fiscal_period[string]optionalQ1/Q2/Q3 for that quarter's 10-Q, or FY for the annual 10-K (the default). Resolved through the XBRL DEI period index, so non-calendar fiscal years land correctly. Q4 is reported in the annual 10-K and is treated as FY. Ignored when accession_number is given.
vantage_date[string]optionalAs-of date (YYYY-MM-DD): serve the latest filing filed on or before it. Ignored when accession_number is given. Omit for the latest.
offset[integer]optionaldefault: 0≥ 0Chunk pagination start.
char_offset[integer]optionaldefault: 0≥ 0Within-chunk character offset (default 0). A chunk longer than max_chars serves a window and returns a char_offset cursor — pass it back with the same offset to read deeper.
max_chunks[integer]optionaldefault: 10range: 1–10Chunks per page.
query[string]optionalOptional keyword to bias chunk selection.
include_companions[boolean]optionaldefault: falseFor Pattern 4 cross-filing 8-Ks (anchor + same-day companion). Expands companion section text inline.
companion_accessions[array]optionalCompanion accession list to expand. If omitted with include_companions=true, falls back to same-day discovery.
max_chars[integer]optionaldefault: 20000range: 2000–60000Response character cap. Larger = more content, more tokens.
preview_chars[integer]optionaldefault: 120range: 0–200Outline-mode preview length per section (default 120, about 25 words). Ignored when section_id is given.
GET /api/v1/filings/text"Show me Apple's risk factors" or "Read Tesla's MD&A section"Search raw XBRL facts by human-readable label, with dimensional breakdowns (segment, geography, product). Machine-readable SEC data that complements get_financials with granular detail.
ticker[string]requiredCompany ticker symbol.
search[string]requiredSearch by human-readable label. Comma-separated for OR (e.g., "revenue,product").
accession_number[string]optionalSpecific filing accession number from list_filings (which takes a vantage date); default: the latest filing as of today.
form_type[string]optionaldefault: 10-KFiling type when auto-resolving; ignored if accession_number is given. Default 10-K. For foreign private issuers the backend resolves the right family (20-F/40-F annual, 6-K interim), so the default serves them too.
fiscal_year[integer]optionalFilter to a specific fiscal year.
fiscal_period[string]optionalPin the exact period (Q1-Q4/FY) when resolving by fiscal_year. Without it, fiscal_year resolves to that year's LATEST filing — wrong for 'as of <quarter>' questions. Ignored if accession_number or period_history is set.
limit[integer]optionaldefault: 50range: 1–200Max facts to return.
period_history[boolean]optionaldefault: falseReturn the 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 it to de-cumulate a YTD cash-flow or income line into a standalone quarter.
GET /api/v1/companies/{ticker}/raw-facts"AAPL revenue by segment" or "UNH medical cost ratio"Compact signal map of a single filing — what's interesting and where. Use this first to triage, then drill in with get_filing_section for the narrative content behind a signal.
ticker[string]requiredCompany ticker symbol.
lens[string]optionalOptional lens to bias the signal map (earnings_quality, debt_stress, risk_trajectory, competitive_position, management_outlook).
vantage_date[string]optionalAs-of date (YYYY-MM-DD): map the latest filing filed on or before it, for point-in-time analysis. Omit for the latest filing.
GET /api/v1/companies/{ticker}/filing-index-bundle"What's in Apple's latest 10-K?" or "Risk-trajectory lens for Tesla's 10-Q"Cross-company screening by qualitative signals — tone shifts, earnings beats/misses, guidance moves, new risks, IR events — across SEC filings, 8-K earnings releases, transcripts, and IR press releases. Verifiable signals (not LLM scores).
signals[array]requiredOne or more signal ids to match, exactly as listed in this tool's description — only those are screenable. Omit ticker to screen the whole universe, which is the common case; pass ticker only to check a single company.
ticker[string]optionalOptional single-ticker filter for per-company inventory.
sectors[array]optionalSector codes (TECH, HEALTH, FIN, RE, CONS_DISC, CONS_STAPLES, IND, MAT, ENERGY, UTIL, TRANSPORT, COMM, OTHER).
recency_days[integer]optionaldefault: 90range: 1–365Only include filings from the last N days.
limit[integer]optionaldefault: 20range: 1–50Max results.
match_mode[string]optionaldefault: allall = every signal must fire on the same row; any = any signal qualifies.
order_by[string]optionaldefault: recencyrecency = newest first; market_cap = largest companies first (recency tiebreaker).
since_date[string]optionalInclusive lower bound on filing/event date (YYYY-MM-DD); with until_date, a range for historical windows or cross-period signal change.
until_date[string]optionalInclusive upper bound on filing/event date (YYYY-MM-DD).
agreement_type_filter[string]optionalDiscriminator for ir_partnership signals — e.g. 'm_and_a_announcement' for fresh M&A, 'partnership_strategic' for alliances. Ignored for other signals.
POST /api/v1/filing-intelligence/screen"Which tech companies have cautious management?" or "Who beat earnings this quarter?"Full-text search of SEC filings since 2001 (not just MetricDuck-tracked tickers); the window defaults to the last year unless date_from is set. Returns aggregated company / form-type / industry stats plus per-result section enrichment for 10-K and 10-Q hits.
query[string]optionalEDGAR full-text query. All terms are required by default; supports exact phrases, OR, NOT, NEAR(n) proximity and trailing wildcards. Use formal terms as written in filings, not abbreviations.
ticker_lookup[string]optionalRetired — returns a redirect naming what to use instead. It never filtered, and it was ignored outright whenever query was also set.
form_type[string]optionalSEC form type filter — 10-K, 10-Q, 8-K, DEF 14A, S-1 and so on. Comma-separated for several ('10-K,10-Q'). Omit to search every type. 13D/13G are filed as 'SCHEDULE 13D' / 'SCHEDULE 13G' since December 2024 and as 'SC 13D' / 'SC 13G' before: pass both for a window that spans it. Forms 3/4/5: a ticker in company finds almost none of a company's filings; use the 10-digit CIK (exact), not a name (partial match).
company[string]optionalRestrict to one company. Accepts a ticker, a 10-digit CIK (exact, preferred), or a company name (partial match — may pull in unrelated companies).
date_from[string]optionalStart date (YYYY-MM-DD; default 1 year ago). For a historical event, set it before the event.
date_to[string]optionalEnd date (YYYY-MM-DD).
limit[integer]optionaldefault: 10range: 1–100Max results (default 10, max 100), deduplicated by filing and sorted most recent first. Section-level enrichment applies to the first 5.
sections[boolean]optionaldefault: trueWhether to add section-level matches (which section and chunk hold the term) to the first 5 hits, for drill-in with get_filing_section.
rank_by[string]optionaldefault: date'date' (default) puts the most recent filings first — best for time-sensitive questions. 'relevance' uses EDGAR's own score, better for thematic discovery where the most concentrated mentions matter more than recency. The Company Exposure Map is frequency-ranked either way.
GET https://efts.sec.gov/LATEST/search-index"Which companies discuss AI agents in 10-Ks?" or "Find proxy fights in 2025"8-K earnings-RELEASE headline financials (revenue, net income, operating income, diluted EPS) — the figures management reports on release day, typically weeks before the audited 10-Q/10-K. Each figure carries a per-figure deep-link + verbatim quote into the source exhibit when the API has an attested receipt.
Distinct from get_financials (audited XBRL, filed later) — this is the earliest-available, as-reported release figure. A figure without a receipt is still shown; absence of a receipt is not evidence the value is wrong.
ticker[string]requiredCompany ticker symbol (e.g., NVDA). Must be exact.
quarters[integer]optionaldefault: 4range: 1–8Number of most recent quarters to return (1-8, default 4).
vantage_date[string]optionalAs-of date (YYYY-MM-DD): serve releases known on or before it, walking quarters back from the vantage rather than from today. Bounds which RELEASES are visible, not which extraction of them. Omit for the latest.
GET /api/v1/earnings/{ticker}/history"What did NVDA report for its latest quarter's revenue?" or "TSLA's last 8 quarters of earnings releases"Cross-feed temporal join: stitches together transcript guidance items, the SEC filing for the period, and the actual results 8-K for the same fiscal_period. Answers 'did they hit guidance?' for a single ticker and quarter.
ticker[string]requiredCompany ticker symbol.
fiscal_period[string]optionalOptional period filter (e.g., Q2-2025). Omit for latest.
GET /api/v1/companies/{ticker}/guidance-vs-actual"Did NVDA hit Q1 guidance?" or "Show DOW guide vs actual for FY24"Cross-quarter trajectory view of earnings-call signals for one ticker — guidance deltas, strategic priorities, Q&A aggregates (deflection rate, concerns retained, forward commitments), macro and competitive stance, capital-allocation posture, scenario sensitivities. Aligns calls by event date for multi-quarter pattern detection.
ticker[string]requiredCompany ticker symbol.
n_quarters[integer]optionaldefault: 4range: 2–8How many recent earnings calls to compare.
dimensions[array]optionalRestrict to specific trajectory axes; each is a per-quarter series, and omitting this returns all. Axes cover guidance (with delta vs prior), Q&A aggregates and deflection rate, ranked priorities, macro stance, competitive mentions, quantified scale claims and segment revenue decompositions.
vantage_date[string]optionalAs-of date (YYYY-MM-DD): compare only calls reported on or before it, with the window anchored there rather than at today. Omit for the most recent.
GET /api/v1/companies/{ticker}/transcript-trajectory"How has NVDA's guidance discipline trended?" or "AT&T tone over last 4 calls"Time series for a single metric across recent fiscal periods. Each row carries fiscal_year + fiscal_period for authoritative 'Q2 FY2025' lookups, plus filing accession for citation.
ticker[string]requiredCompany ticker symbol.
metric_id[string]requiredExact metric id, lowercase with underscores — e.g. gross_margin, roic, ev_ebitda, fcf_yield, revenues, net_income, dividends_per_share. Also covers non-XBRL operating KPIs (net_interest_margin, return_on_average_assets, …), quarterly and annual.
period_type[string]optionaldefault: QPeriod granularity: Q (quarterly), FY (annual), TTM (trailing).
window[integer]optionaldefault: 20range: 1–40How many periods to return.
vantage_date[string]optionalAs-of date (YYYY-MM-DD): restrict the series to periods whose ORIGINAL filing was published on or before it. Bounds period existence and the citation, not the value — a restated period is served restated, with a look-ahead warning. Omit for the latest.
GET /api/v1/companies/{ticker}/metrics/history"AAPL gross margin trend" or "MSFT FCF history annual"The derivation of one COMPUTED metric — its human-readable formula plus immediate inputs (each value + source), one level at a time. The audit / verify affordance for derived figures (margins, ratios, ROIC, FCF): use it to show HOW a metric is computed or WHICH definition was used, not to fetch the value.
Drillable: a derived input points to its own lineage (call again with that symbol); a base input is an as-filed XBRL fact.
ticker[string]requiredCompany ticker symbol. Must be exact.
metric[string]requiredMetric id of a COMPUTED metric (e.g., net_margin, roic, fcf, ev_ebitda).
period_type[string]optionaldefault: QPeriod granularity: Q (quarterly), FY (annual), TTM (trailing).
fiscal_year[integer]optionalPin the fiscal year (e.g., 2025). Omit for the latest period.
fiscal_period[string]optionalPin the fiscal period (Q1–Q4, FY). Omit for the latest.
segment[string]optionalReporting segment id. Omit for the consolidated figure.
GET /api/v1/companies/{ticker}/metrics/lineage"How is AAPL's net_margin calculated?" or "Audit MSFT ROIC for FY2024"IR earnings-PRESENTATION-DECK text — forward guidance, operational KPIs, and segment outlook that live ONLY in a company's investor-relations slide deck, not in the SEC 8-K/10-Q release text or XBRL. The channel to reach for when get_metric_history / get_filing_section / get_xbrl_facts come up empty on a guidance or KPI question.
Pass a query to land on the exact slide page; omit it for a bounded prefix of the latest deck. Resolve by ticker or cik.
ticker[string]optionalCompany ticker symbol (e.g., OXY). Required unless cik is provided.
cik[string]optional10-digit SEC CIK as an alternative to ticker.
fiscal_year[integer]optionalrange: 2000–2100Fiscal year of the deck (e.g., 2024).
fiscal_period[string]optionalFiscal period: 'Q3' (with fiscal_year) or combined '2024Q3'. Omit for the latest deck(s).
query[string]optionalKeyword filter over slide text — returns only pages matching every word; cites the exact page.
mode[string]optional'full' (default) returns slide text for the matched deck(s); 'list' returns a cheap inventory of the company's served IR documents with no slide text. query is ignored in list mode.
GET /api/v1/ir-documents"OXY Q3 2024 production guidance" or "NCLH berth-capacity outlook"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). The when/what-is-attached surface — distinct from get_ir_documents (a document's content) and compare_earnings_calls (what management said).
Returns upcoming (soonest-first) + past events with material chips; a chip's material_id is the get_ir_documents doc_id. Coverage is honest — a not-yet-harvested company says so.
ticker[string]requiredCompany ticker symbol (e.g., AAPL). Required.
GET /api/v1/companies/{ticker}/events"When does AAPL next report?" or "What IR events did NVDA have this year?"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 — the “what can I pull for this quarter, and how do I reach it” map.
A NAVIGATION index, not figures — for the release NUMBERS use get_earnings, for audited statements get_financials, for the IR event CALENDAR get_company_events, for a deck's slide TEXT get_ir_documents, for what management SAID on the call compare_earnings_calls.
ticker[string]requiredCompany ticker symbol (e.g., MRK). Required.
limit[integer]optionalrange: 1–40Most-recent fiscal periods to return, newest first (1-40, default 12).
GET /api/v1/companies/{ticker}/earnings-reports"What documents does MRK have for its last earnings?" or "Give me AMD's earnings decks and transcripts by quarter"Universe-wide feed of extracted filings by SEC filing date since a floor. A small share are extracted days or weeks after their filing date, so look back up to a month and dedupe by accession. Single call regardless of portfolio size — the right primitive for event-driven workflows and daily portfolio checks.
since[string]requiredFiling date floor (inclusive), on the SEC filing date. YYYY-MM-DD. Look back up to a month and dedupe by accession: some filings are extracted days or weeks late.
form_types[array]optionalOptional SEC form type filter (e.g., ['8-K', '10-Q']).
form_subtypes[array]optional8-K subtype filter computed from section inventory. Implies 8-K only.
tickers[array]optionalOptional portfolio filter (up to 50 tickers).
ticker[string]optionalSingle-ticker alias of `tickers` — this is the only tool whose filter is plural, so the singular form is accepted too. Supply both and they are unioned (cap 50).
limit[integer]optionaldefault: 50range: 1–100Max results, sorted by filing date DESC.
GET /api/v1/filings/recent"What 8-Ks landed today?" or "New filings for my watchlist since Monday"get_company_overview for a comprehensive snapshot before drilling into specificsget_filing_index first to triage what's interesting in a filing — then get_filing_section to read the narrativeget_financials for raw numbers in DCFs; get_metric_history for a single metric across periodsscreen_companies with compare_companies for a complete screening workflowscreen_filing_signals for cross-company qualitative screening (tone, beats, guidance, IR events)list_recent_filings as the watermark feed for event-driven workflows and daily portfolio checksget_xbrl_facts for industry-specific metrics or dimensional breakdowns (segment, geography)