# MetricDuck — Financial Analysis MCP server

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

## Links
- Registry page: https://www.getdrio.com/mcp/com-metricduck-financial-analysis

## Install
- Endpoint: https://mcp.metricduck.com/mcp
- Auth: Not captured

## Setup notes
- Remote endpoint: https://mcp.metricduck.com/mcp

## Tools
- browse_company (Browse Companies) - Entity-axis navigation primitive — the front door for company research.

Returns a single response containing identity, filing inventory by form type, **signal availability inline**, indexed range, and ranked drill-down pointers. Use this BEFORE any deeper tool — it tells you which signals fire for the company so your next call lands on the right axis (signal-axis, source-axis, or metric-axis).

**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)` — dimensional financial drill-down

_(atom v1: revisit response shape after first 5 q001/q012/q003 traces)_ Endpoint: https://mcp.metricduck.com/mcp
- search_companies (Search Companies) - 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 issuers that file a US 20-F/40-F (HSBC, Toyota, Novo Nordisk…) ARE covered — reach them by **company name**, not their local symbol. Endpoint: https://mcp.metricduck.com/mcp
- get_company_overview (Company Overview) - 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).

Use search_companies first if unsure of the exact ticker. Endpoint: https://mcp.metricduck.com/mcp
- get_stock_price (Stock Price (Daily)) - 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). Recent history is dense; deep pre-2014 history may be sparse. For period-end valuation multiples (P/E, EV/EBITDA, P/B) use get_metric_history; to assemble a CUSTOM multiple (e.g. lease-adjusted EV) combine this price with get_metric_history("ticker","oper_lease_liabs" / "ttl_debt" / "cash_st_invs" / "ttl_equity" / "shares_basic"). Endpoint: https://mcp.metricduck.com/mcp
- get_financials (Financial Statements) - 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. Endpoint: https://mcp.metricduck.com/mcp
- compare_companies (Compare Companies / Peers) - 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.
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/SJM" -> compare_companies("KO", custom_peers="KDP,PEP,KHC,SJM", 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' subset. Endpoint: https://mcp.metricduck.com/mcp
- screen_companies (Screen Companies by Metrics) - 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", value:0.10}], required_tags=["subscription_recurring"]
- "Quality companies with a material charge" -> filters=[{metric_id:"roic", operator:"gt", value:0.15}, {metric_id:"market_cap", operator:"gt", value:10000000000}], signals=["has_material_charge"]

When signals are provided, results include matched_signals and signal_details fields. Signals filter AFTER metric screening — only companies passing metric filters are checked for signals.

Responses capped at ~20K chars. If truncated, reduce limit or add stricter filters. Endpoint: https://mcp.metricduck.com/mcp
- list_filings (List Filing Sections) - 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`. Endpoint: https://mcp.metricduck.com/mcp
- get_filing_section (Read Filing Section) - 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 outlook in the earnings PRESENTATION DECK (not in the SEC filing or XBRL) → `get_ir_documents(ticker, fiscal_year, fiscal_period, query=…)`
- Raw XBRL dimensional facts → `get_xbrl_facts`
- Year-over-year risk-factor change detection ("what's new/changed vs last year's `risk_factors`") → `screen_filing_signals(signals=["has_new_risks"], ticker=…)` — a computed vs-prior-filing signal, cheaper and more reliable than reading two filings and diffing the prose yourself
- A figure ABSENT from the section you expected → `search_sec_filings(company=<ticker/CIK>, query="exact phrase")` locates which section of which filing carries it (per-section drill-in pointers) — absence from one section does not mean the filing lacks it

**Delisted / acquired issuers**: pass `cik` (10-digit, zero-padded) instead of `ticker` and set `include_delisted=true`. Examples: SAVE Spirit Airlines (`cik="0001498710"`), RDFN Redfin (`cik="0001382821"`).

Responses capped at ~20K chars. Use offset for pagination or query to narrow results. Endpoint: https://mcp.metricduck.com/mcp
- get_xbrl_facts (Raw XBRL Facts) - 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 periods to de-cumulate a standalone quarter** — the as-filed cash-flow statement is cumulative YTD (a Q2 10-Q reports the 6-month figure). Set `period_history: true` to get the concept's full series (quarter / 6-mo / 9-mo / FY) across filings in one call, then subtract the prior YTD sharing the same start date (Q2 standalone = 6-month YTD − Q1 3-month).

**Sign:** values are the as-filed positive MAGNITUDES. Facts the filing presents NEGATIVE — a cash OUTFLOW (`PaymentsTo…`, `IncreaseDecreaseIn…`, capex, inventory build, "Other, net") or a contra-asset (accumulated depreciation) — are flagged `(filed −)` in the table and carry `is_negated: true` in the `<raw_data>` envelope; apply that sign when interpreting direction. For ready-signed cash-flow / income lines, `get_financials` applies statement signs for you.

**Exactness:** the markdown rounds for readability; the `<raw_data>` block carries each fact's EXACT value + `decimals` (the as-filed precision floor: −3 = thousands, −6 = millions) + a stable `mdck` handle + two ways to see the fact in its filing: `handle.edgar` (SEC EDGAR — the independent primary source) and `handle.viewer` (the MetricDuck viewer, which opens the filing with the fact highlighted; auto-falls back to EDGAR with a plain scroll when the filing isn't cached in MD).

**Share counts (pick the right basis):** the **dei** `EntityCommonStockSharesOutstanding` (shown as "cover-page / current") is the most-current shares outstanding, as of the filing/cover date — use it for **market cap, equity value, and "shares outstanding from the cover page"**. The **us-gaap** `CommonStockSharesOutstanding` is the **balance-sheet period-end** count (an earlier date); `WeightedAverageNumberOf…SharesOutstanding` is the **per-period average for EPS**. These can differ a few % for buyback-heavy / recently-issuing filers — match the as-of date in the Period column to your task.

Searching: comma-separated terms OR-match (e.g., `revenue,product`). Responses are capped at ~20K chars — over the cap, whole facts are paged out of BOTH the table and the `<raw_data>` block together (the JSON stays valid) with an explicit `facts_omitted` count; narrow the search or lower `limit` for the rest. Endpoint: https://mcp.metricduck.com/mcp
- get_filing_index (Filing Signal Index) - 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_earnings_calls(ticker) gives the cross-quarter KPI/guidance trajectory.)

Use Cases:
- "What should I look at in AAPL's 10-K?" -> get_filing_index("AAPL")
- "Any accounting red flags for ENPH?" -> get_filing_index("ENPH", lens="earnings_quality")
- "Debt situation for BA?" -> get_filing_index("BA", lens="debt_stress")
- "How is TSLA management framing things?" -> get_filing_index("TSLA", lens="management_outlook")
- "FND same-store sales in Q4 2024?" (prior-quarter KPI) -> list_filings("FND", form_subtype="8-K-earnings") -> get_filing_section("FND", "earnings_press_release", accession_number=<Q4 2024 8-K>) (the narrative/guidance prose; "earnings_document_map" is the compact TOC)

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" Endpoint: https://mcp.metricduck.com/mcp
- screen_filing_signals (Screen Filing Signals) - 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
- tone_shifted: Tone shifted more cautious vs prior
- material_weakness: Material weakness in internal controls
- accounting_aggressiveness: Accounting aggressiveness flagged (aggressive or conservative)
- sbc_high: Stock-based compensation > 15% of revenue
- has_new_risks: New risk factors vs prior filing
- 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
- guidance_revised: Guidance raised, lowered, or withdrawn
- has_material_charge: Material non-recurring charge or write-down
- cash_earnings_divergence: Profitable but negative free cash flow
- leverage_spike: Debt-to-equity jumped 50%+ year-over-year
- margin_compression: Gross margin declined 3%+ year-over-year
- dividend_coverage_weak: Dividend coverage below operating cash flow
- sbc_unhedged: Stock comp exceeds buybacks (net dilution)
- ocf_deterioration: Operating cash flow declined 40%+ YoY
- has_fuel_sensitivity: Fuel cost sensitivity quantified in MD&A
- has_commodity_sensitivity: Commodity price sensitivity quantified in MD&A
- has_tariff_sensitivity: Tariff/trade policy impact 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)
- segment_breakdown: Per-segment revenue + ratios + names (always emits when segments present)
- customer_concentration: Customer concentration payload (always emits when populated)
- geographic_concentration: Geographic concentration payload (always emits when populated)
- has_segment_growth_outlier: Any segment grew >20% YoY
- has_segment_decline_material: Any segment declined >10% YoY
- largest_segment_declining: Top-revenue-share segment is declining YoY
- segment_concentration_high: Top segment > 70% of total revenue
- risk_landscape_breakdown: Top risks array (severity, is_new, change_vs_prior) + counts
- exposure_breakdown: Commodity / tariff exposure (qualitative or quantified magnitude)
- has_escalated_risk: ≥1 risk escalated vs prior filing
- risk_severity_high_count_above_3: >3 risks with severity=high
- guidance_breakdown: Forward guidance accuracy + revision direction payload
- guidance_lowered: Guidance lowered (extractor or inferred direction)
- guidance_raised: Guidance raised (extractor or inferred direction)
- debt_profile_breakdown: Debt + covenant + refinancing_risk + computed near_term_pct
- purchase_obligations_breakdown: Take-or-pay schedule with total committed sum
- commitments_breakdown: Cloud computing + VIE/SPE exposure
- near_term_debt_pct_above_30: >30% of total debt maturing within 12 months
- has_purchase_obligations_concentrated: Top counterparty > 50% of purchase obligations
- sensitivities_breakdown: Quantified MD&A sensitivities array (variable + sensitivity + direction)
- scale_claims_breakdown: MD&A scale claims array (capped at 20 by emission order)
- tone_breakdown: Management tone payload (overall + change vs prior)
- accounting_breakdown: Accounting quality (material weakness + aggressiveness + sbc%)
- sbc_breakdown: Stock-based compensation as % of revenue

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_guidance_breakdown: Full forward-guidance array (all metrics, directions, and numeric ranges) from the 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_has_macro_responses: Management addressed macro factors (tariffs, rates, FX, supply chain, etc.)
- transcript_has_strategic_priorities: Management articulated ranked strategic priorities on call
- transcript_has_competitive_mentions: Competitors/partners named on call with context type
- transcript_guidance_raised: ≥1 guidance item raised vs prior quarter (from transcript)
- transcript_guidance_lowered: ≥1 guidance item lowered vs prior quarter (from transcript)
- transcript_has_scale_claims: ≥3 quantified current-state/historical scale claims on earnings call (e.g. '5x throughput YoY', '1B+ subscribers')
- transcript_has_revenue_decompositions: Segment-level revenue decomposed into quantified drivers (volume / price / mix / FX / M&A) on call
- transcript_has_kpi_disclosures: ≥2 issuer-disclosed operating KPIs on call (own-defined scorecard metrics: vitality index, NPS, NRR, NIM, combined ratio, RPO, book-to-bill, etc.)
- transcript_has_capital_allocation_postures: ≥1 forward capital-allocation posture on call (buyback cadence, leverage target, funding-source rationale, capex policy framing, M&A funding, debt issuance, divestment, authorization runway)
- transcript_has_scenario_sensitivities: ≥1 conditional scenario-sensitivity statement on call (trigger event + impact on revenue / EBITDA / margin / EPS — e.g., 'if VantageScore conversion happens, revenue −$270M / EBITDA +$160M / margin +380bps')
- transcript_has_forward_commits: ≥1 forward commitment surfaced from Q&A (speaker + analyst + verbatim excerpt + topic tags — calendar-anchored deliverables management committed to under analyst pressure, e.g., 'midyear update on Sadara restructuring')
- transcript_has_customer_cohort_metrics: ≥1 customer-cohort metric on call — count + threshold + (optional) Y/Y growth-rate triple, OR top-N deal multi-product attach (SaaS/B2B-skewed; e.g., '630 customers >$5M ACV +22% Y/Y', '17 of top 20 deals included 7+ products')
- transcript_has_rpo_disclosure: ≥1 RPO/backlog disclosure on call with structured atom (amount + recognition profile when stated; metric_label, period_end_date, composition_keywords, IR-derived speaker/role) — v1 of forward_commitments family (iter071); bookings + capex_commitment routes ship in v1.1
- transcript_qa_concerns_retained: ≥2 analysts left with concerns retained after Q&A
- transcript_qa_forward_committed: ≥2 executive responses with forward-looking commitments on call (count-based; transcript_has_forward_commits exposes the underlying instances)

IR events (from company press releases):
- ir_acquisition: M&A announced/completed
- ir_executive_change: C-suite/board changes
- ir_dividend_change: Dividend/buyback announcements
- ir_guidance_revision: Guidance raised/lowered/initiated
- ir_clinical_regulatory: Clinical trial or regulatory milestone
- ir_debt_offering: Debt or equity offering announced
- ir_commercial_win: Major commercial contract or win
- ir_deliveries: Product deliveries/shipments reported
- ir_partnership: Strategic partnerships announced

DEF 14A proxy statements (from compensation disclosures):
- def14a_peer_group: Compensation peer group disclosed (with company names)
- def14a_ceo_pay_ratio: CEO pay ratio disclosed

Use Cases:
- "Which tech companies have cautious management?" -> signals=["tone_cautious"], sectors=["TECH"]
- "Does NVDA have any tone_shifted recently?" -> ticker="NVDA", signals=["tone_shifted"], recency_days=30
- "Did AAPL disclose new risk factors vs last year's 10-K?" (year-over-year risk surveillance) -> ticker="AAPL", signals=["has_new_risks"] — prefer this over reading risk_factors for two periods via get_filing_section and diffing the prose by hand
- "Companies that gave specific guidance on calls?" -> signals=["transcript_has_guidance"]
- "Which companies announced acquisitions?" -> signals=["ir_acquisition"]
- "Recent executive changes in financials?" -> signals=["ir_executive_change"], sectors=["FIN"]

Cross-filing composition (Brief 35 — Pattern 4):
`ir_partnership` matches on M&A / partnership 8-K anchors (Item 1.01) carry a `companion_accessions: string[]`
field in their payload value when the announcement is split across an anchor + same-day companion 8-K
(7.01 Reg FD + Ex 99 press release / 8.01 other events). To read the full announcement narrative — CEO quotes,
deal terms, investor-presentation text living in the companion — pass those accession numbers to
`get_filing_section({..., section_id:"item_1_01_material_agreement", include_companions:true, companion_accessions:[...]})`.
Empty list means no companion exists or the producer hasn't backfilled it (acceptable; anchor-only flow still works). Endpoint: https://mcp.metricduck.com/mcp
- search_sec_filings (Full-Text SEC Filing Search) - 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 numbers but no section-level detail.

Use cases:
- "Who supplies Apple?" → ticker_lookup="AAPL" → companies listing Apple in revenue footnotes
- "Recent data breaches?" → query="cybersecurity incident", form_type="8-K"
- "Tariff-exposed companies?" → query="tariff", form_type="10-K" → risk factor disclosures
- "Activist campaigns?" → query="board representation", form_type="DEF 14A,SC 13D"

When to use other tools instead:
- You already know the company → `get_filing_index` (signal triage) or `list_filings` (filing inventory)
- You want financial metrics → `screen_companies` (numeric filters)
- You want earnings call cross-quarter view → `compare_earnings_calls`

Key limitation: keyword matching only, not semantic. "No material weakness" matches "material weakness found." Verify hits with `get_filing_section` for context.

Search tips: quoted exact phrases ("material weakness"); proximity `NEAR(5)`; `OR` / `NOT`; trailing wildcards (`restructur*`).

**Historical event queries** (M&A announcements, lawsuits, restructurings, leadership changes): the default 1-year `date_from` and `rank_by="date"` ordering bury historical anchors under mutual-fund NPORT-P holdings. For specific events, prefer `form_type="8-K"` + widen `date_from` to before the event + `rank_by="relevance"` — this surfaces the anchor 8-K in the top results instead of fund noise. Endpoint: https://mcp.metricduck.com/mcp
- get_guidance_vs_actual (Guidance vs Actual) - 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)

Output:
- Guidance: forward items targeting the period — from earnings-call transcripts AND 8-K earnings releases (metric, value/range, period, source).
- Actuals: SEC 10-Q/K metric + narrative signals (revenue trend, margin, beat/miss, guidance revised) for that period, plus 8-K earnings signals when present.
- Beat/miss: best-effort verdict (beat/miss/inline) where a USD guidance range + reported actual align for the same metric; not_comparable (with reason) otherwise — e.g. %-form guidance needs a base.
- Notes: counts of calls/filings covered + comparison verdicts so agents know coverage depth before interpreting. Endpoint: https://mcp.metricduck.com/mcp
- compare_earnings_calls (Compare Earnings Calls) - 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 — verify) per quarter — surfaces NO_TRANSCRIPT / WAITING gaps. Earnings-call transcripts are management commentary, not SEC-filed XBRL facts.
- Aggregate trajectory: hedge density / deflection rate / Q&A hedge rate / 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.
- Themes by quarter, strategic priorities by quarter.
- Macro responses by quarter (factor + stance + iter033 drift tag), competitive mentions by quarter (competitor + context_type + iter033 drift tag).
- Product transitions, scale claims, revenue decompositions, KPI disclosures 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:
- "Hedge rate trend?" -> compare_earnings_calls("RDDT", n_quarters=8, dimensions=["hedges", "qa"])
- "Guidance discipline shifting?" -> compare_earnings_calls("NVDA", dimensions=["guidance"])
- "Macro stance flip?" -> compare_earnings_calls("DOW", dimensions=["macro"])
- "Strategic priorities + KPIs drift" -> compare_earnings_calls("PG", dimensions=["priorities", "kpi", "themes"])

Sister Sources:
- Single-call deep read → `get_filing_section` with section_id="transcript_prepared_remarks" / "transcript_qa_session"
- Cross-period signal changes (vs other Sources) → `screen_filing_signals` with since_date/until_date
- IR press releases / events → `screen_filing_signals` with signal_type="ir_press_release" Endpoint: https://mcp.metricduck.com/mcp
- get_metric_history (Metric History) - 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_production), workforce (headcount), and more — full data-derived (non-exhaustive) list: net_interest_margin, return_on_average_assets, return_on_average_equity, nonperforming_assets_to_total_assets, nonperforming_loans_to_total_loans, allowance_for_credit_losses_to_total_loans, loan_to_deposit_ratio, net_charge_offs_to_average_loans, common_equity_tier_1_capital_ratio, tier_1_leverage_ratio, tier_1_capital_ratio, total_capital_ratio, return_on_average_tangible_common_equity, net_leverage_ratio, nonperforming_loan_ratio, liquidity_coverage_ratio, net_stable_funding_ratio, combined_ratio, loss_ratio, expense_ratio, policies_in_force, arr, recurring_revenue, remaining_performance_obligations, organic_revenue_growth, cancellation_rate, subscribers, arpu, store_count, same_store_sales, average_order_value, active_customers, customers, active_buyers, orders, bookings, backlog, gross_booking_value, nights_and_seats_booked, monthly_active_platform_consumers, trips, take_rate, occupancy_rate, average_daily_rate, revpar, weighted_average_remaining_lease_term, assets_under_management, passenger_load_factor, available_seat_miles, revenue_passenger_miles, passenger_mile_yield, prasm, trasm, casm, casm_ex, oil_production, natural_gas_production, book_to_bill_ratio, wafer_shipments, production_capacity, headcount, full_time_equivalent_employees, cash_runway. If a KPI you need isn't listed, just try its canonical name; only if it's truly absent does it live solely in filing text — then reach it via get_filing_section(ticker, "mda_results_operations", query=…) or compare_earnings_calls(ticker). Metric_id matching is strict (lowercase, exact spelling). Financial-sector tickers (banks, insurers) often NULL on COGS-based metrics (gross_margin, gross_profit) — use sector-appropriate alternatives (e.g. net_interest_margin, combined_ratio) where available.

Price-derived multiples here (pe_ratio, ev_ebitda, pb_ratio…) use the PERIOD-END close; for a price on a SPECIFIC date use get_stock_price. To assemble a CUSTOM multiple (e.g. EV including operating leases) combine get_stock_price (price leg) with get_metric_history primitives: oper_lease_liabs, ttl_debt, cash_st_invs, ttl_equity, shares_basic.

**Latest fiscal year during earnings season:** full-year results post in an earnings 8-K weeks before the 10-K, which is what populates this structured FY series. If you query the latest FY inside that gap, the series ends one year early — this tool then appends a pointer to the earnings 8-K; follow it (get_filing_section "earnings_income_statement") rather than concluding the year is unavailable.

Adjacent tools: get_company_overview for a single-period snapshot across many metrics; get_financials for full statements (all line items) across multiple periods; get_stock_price for daily share prices and period returns. Endpoint: https://mcp.metricduck.com/mcp
- get_metric_lineage (Metric Lineage) - 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). Endpoint: https://mcp.metricduck.com/mcp
- get_ir_documents (IR Earnings Decks) - 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. Endpoint: https://mcp.metricduck.com/mcp
- list_recent_filings (Recent Filings Feed) - 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 first. `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_index(ticker, accession_number=...)` to get the signal map of that specific filing, then `get_filing_section` 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. Endpoint: https://mcp.metricduck.com/mcp

## Resources
Not captured

## Prompts
- whats_changed - Orient on a company: what's changed across recent filings, where it stands now, and evidence for any active concern. Anchored on canonical status/initiation workflows. Leads with the latest-filing signal map before the current-period snapshot. Arguments: ticker
- signal_section_drill - Drill for evidence on a specific topic within a company's filings: signal map → targeted section search → source-anchored summary. Replaces blind section pagination with keyword-targeted chunk retrieval. Handles dead-ends honestly. Arguments: ticker, topic

## Metadata
- Owner: com.metricduck
- Version: 0.4.1
- Runtime: Streamable Http
- Transports: HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: Mar 18, 2026
- Source: https://registry.modelcontextprotocol.io
