MetricDuck — Financial Analysis
https://mcp.metricduck.com/mcpskills: {'id': 'browse_company', 'name': 'browse_company', 'description': "Entity-axis navigation primitive — the front door for company research.\n\nReturns 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).\n\n**When to use:**\n- Starting a research thread on a single company\n- Confirming what data MetricDuck has indexed before deep-diving\n- Discovering which signals fire (M&A, partnerships, guidance shifts, accounting flags) without needing to fetch a filing first\n\n**When NOT to use:**\n- Cross-company screening → use `screen_companies` (metrics) or `screen_filing_signals` (signals)\n- Concept/theme discovery → use `search_sec_filings`\n\n**Drill-down map (the response will recommend specific calls based on what's available):**\n- `browse_signal(signal_id, ticker=X)` — descend into a specific signal's payload + see_also accessions\n- `get_filing_index(ticker)` — full signal map for the latest filing\n- `get_xbrl_facts(ticker)` — dimensional financial drill-down\n\n_(atom v1: revisit response shape after first 5 q001/q012/q003 traces)_", 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'browse_signal', 'name': 'browse_signal', 'description': 'Signal-axis navigation primitive — descend into a single signal\'s payload + see-also accessions.\n\nUse this AFTER `browse_company` shows a signal is available, OR as the front door for signal-first questions ("which companies announced M&A in the last 30 days?", "show me TSM\'s monthly revenue signals").\n\n**When to use:**\n- Following up a `browse_company` response that surfaced a non-zero signal count\n- Cross-company signal discovery for a single signal type (e.g., all M&A announcements this quarter)\n- Time-travel research on a historical event (use since_date / until_date for anchors >1 year back)\n\n**When NOT to use:**\n- Multi-signal screening with combined filters → `screen_filing_signals` (supports match_mode=all/any)\n- Concept/theme search → `search_sec_filings`\n- Entity-axis discovery → `browse_company` first\n\n**Discriminators:**\n- `agreement_type_filter` — for `ir_partnership` signals only. Filters to specific deal types (m_and_a_announcement vs partnership_strategic etc.). Critical for separating M&A from partnerships in the unified ir_partnership signal store.\n\n_(atom v1: revisit response shape after first 5 q001/q012/q003 traces)_', 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'search_companies', 'name': 'search_companies', 'description': 'Resolve a company name or ticker to the exact ticker symbol via fuzzy name/ticker match.\n\n**Scope:** exact-entity lookup only. Handles partial names ("micro" -> MSFT), typos, and ticker variations.\nReturns ticker, full name, CIK, and business description.\n\n**Use this when:** you have a specific company name or ambiguous ticker and need to confirm the exact ticker before calling other tools.\n\n**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.\n\n**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).', 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'get_company_overview', 'name': 'get_company_overview', 'description': 'Get comprehensive financial overview for a company in a single call.\n\nIncludes: current price, valuation (P/E, P/B, EV multiples, PEG), profitability (revenue, margins, returns),\ncash flow (OCF, FCF, yields), balance sheet (debt, equity, ratios), capital allocation (buybacks, shares outstanding, shareholder yield),\nbusiness segment + geographic revenue mix (latest 10-K, with YoY change), latest earnings insights, filing intelligence highlights, and company flags.\n\nDepth presets:\n- 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.\n- depth="core" (default) — full overview with valuation, profitability, segments, cash flow, balance sheet, capital allocation, and earnings.\n- 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.\n\nLatest 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.\n\nUse search_companies first if unsure of the exact ticker.', 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'get_financials', 'name': 'get_financials', 'description': 'Get multi-period financial statements: income statement, balance sheet, and cash flow in one call.\n\nReturns quantitative historical data with key metrics and trends. Default: all 3 statements, quarterly, 2 years.\nFor qualitative analysis (risks, accounting quality, management tone), use get_filing_index (signal map) then get_filing_section to read the text.\n\nUse Cases:\n- "Show me AAPL\'s financials" -> all statements\n- "MSFT revenue trend 5 years" -> period="annual", years=5\n- "Is Tesla\'s debt increasing?" -> statements=["balance"]\n- "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)\n\nResponses capped at ~20K chars. If truncated, request fewer statements or reduce years.', 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'get_financial_metrics', 'name': 'get_financial_metrics', 'description': 'Alias of `get_financials` (agents commonly guess this name). Multi-period income statement / balance sheet / cash flow + computed metrics for a company.', 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'compare_companies', 'name': 'compare_companies', 'description': 'Compare a company against peers across ~70 curated fundamental metrics (TTM), with percentile rankings and relative strengths/weaknesses.\n\nReturns 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),\nleverage & liquidity (debt/equity, net debt/EBITDA, interest coverage, current ratio), efficiency (asset/inventory turnover, DSO, cash conversion cycle),\nand capital returns (dividend yield, dividend payout ratio, buyback yield, shareholder yield). Sector-inapplicable metrics are omitted (e.g. gross margin / FCF leverage for banks).\n\nPass \'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.\n\npeer_mode controls peer selection:\n- \'sector\' (default): auto-selected from same sector + similar market cap\n- \'tags\': auto-selected by business model similarity (tag Jaccard) — better for cross-sector comparisons\n\nOverride with custom_peers for specific matchups.\nData sourced from SEC EDGAR, updated with each quarterly/annual filing.\n\nUse Cases:\n- "Compare AAPL vs MSFT" -> compare_companies("AAPL", custom_peers="MSFT")\n- "How does NVDA stack up in its sector?" -> compare_companies("NVDA")\n- "Dividend payout ratio: KO vs KDP/PEP/KHC/SJM" -> compare_companies("KO", custom_peers="KDP,PEP,KHC,SJM", metrics="dividend_payout_ratio,dividend_yield")\n- "COST vs WMT vs TGT" -> compare_companies("COST", custom_peers="WMT,TGT")\n\nResponses capped at ~20K chars. If truncated, use fewer custom_peers or a \'metrics\' subset.', 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'screen_companies', 'name': 'screen_companies', 'description': 'Screen 5,500+ US companies by financial metrics. Find stocks matching quantitative criteria.\n\nMetric IDs (canonical names from filing_metrics):\n- Valuation: pe_ratio, pb_ratio, ev_ebitda, fcf_yield, market_cap, ev\n- Profitability: gross_margin, oper_margin, net_margin, ebitda_margin, roe, roa, roic, roce\n- Cash Flow: fcf, net_cf_ops, cash_conversion\n- Balance Sheet: debt_to_equity, current_ratio, ttl_debt, ttl_equity, cash_st_invs\n- Size: revenues, net_income, ebitda, gross_profit\n\nGrowth screening: use period_type on any base metric:\n- Revenue growth YoY: metric_id="revenues", period_type="ttm.yoy"\n- 3-year revenue CAGR: metric_id="revenues", period_type="ttm.cagr3"\n- Earnings growth: metric_id="net_income", period_type="ttm.yoy"\n\nPeriod types: ttm (default), q, fy, ss (balance sheet snapshot), ttm.yoy, ttm.cagr3, ttm.cagr5\n\nSectors: TECH, FIN, HEALTH, CONS_STAPLES, CONS_DISC, IND, ENERGY, UTIL, RE, MAT, COMM\nOperators: gt (>), gte (>=), lt (<), lte (<=), eq (=), between\n\nTag filtering (required_tags / excluded_tags): filter by business model classification.\nRequires companies to be classified — unclassified companies are excluded from tag-filtered results.\n\nNote: For P/E screening, negative P/E means losses. Add a gt(0) filter to exclude loss-making companies.\nNote: ROIC values are decimals (0.15 = 15%). Margins and returns are also decimals.\n\nUse Cases:\n- "High ROIC tech stocks" -> filters=[{metric_id:"roic", operator:"gt", value:0.15}], sectors=["TECH"]\n- "Undervalued profitable industrials" -> filters=[{metric_id:"pe_ratio", operator:"lt", value:15}, {metric_id:"pe_ratio", operator:"gt", value:0}], sectors=["IND"]\n- "Revenue growing >10% YoY" -> filters=[{metric_id:"revenues", operator:"gt", value:0.10, period_type:"ttm.yoy"}]\n- "AI infrastructure companies not exposed to China supply chain" -> required_tags=["ai_ml_infrastructure"], excluded_tags=["china_supply_chain_heavy"]\n- "Profitable subscription businesses" -> filters=[{metric_id:"net_margin", operator:"gt", value:0.10}], required_tags=["subscription_recurring"]\n- "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"]\n\nWhen 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.\n\nResponses capped at ~20K chars. If truncated, reduce limit or add stricter filters.', 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}; uptime_30d 1.0%; p95 73.4ms; conformance: pass
How to connect
https://mcp.metricduck.com/mcp
curl -X POST https://mcp.metricduck.com/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'