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

EdgarParser MCP

PYPI · EDGAR-MCP · SCANNED SEP 20

MCP stdio server for source-backed SEC EDGAR financial data from the hosted EdgarParser API.

Available components

−1 this week 74 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 1 of 20 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency32
Schema Quality & AI Usability63
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 7377 tokens (~237/item across 31 items; 31 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 Management77
  • Stability observed for 23 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage74
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 9% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 31 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 32 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the EdgarParser MCP server?

EdgarParser MCP runs locally as a PyPI package, launched with uvx edgar-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · edgar-mcp

# add to Claude Code
claude mcp add henrysouchien-edgar-mcp -- uvx edgar-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "henrysouchien-edgar-mcp": {
      "command": "uvx",
      "args": [
        "edgar-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "henrysouchien-edgar-mcp": {
      "command": "uvx",
      "args": [
        "edgar-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add henrysouchien-edgar-mcp -- uvx edgar-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "henrysouchien-edgar-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "edgar-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add henrysouchien-edgar-mcp --command uvx --arg edgar-mcp
# ~/.hermes/config.yaml
mcp_servers:
  henrysouchien-edgar-mcp:
    command: "uvx"
    args: ["edgar-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "henrysouchien-edgar-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "edgar-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add henrysouchien-edgar-mcp -t stdio -c uvx -a edgar-mcp
// mcp.json
{
  "mcpServers": {
    "henrysouchien-edgar-mcp": {
      "command": "uvx",
      "args": [
        "edgar-mcp"
      ]
    }
  }
}
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.

  • 20 Sept 26 −4
    • Stability: pass → 0.77 functional
  • 19 Sept 26 +1
    • Stability: 0.97 → pass security
  • 17 Sept 26 +1

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

  • 15 Sept 26 +16
    • Malware scan: unverified → pass security
  • 14 Sept 26 −15
    • Malware scan: pass → unverified security
  • 13 Sept 26 −2
    • Stability: fail → 0.80 functional
  • 10 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 88 to 92.

  • 8 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 82 to 85.

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 20 Sept 2026 · Analysed pypi/edgar-mcp@1.0.2

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 20 packages
Packages resolved 20
Stale 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 31 exposed · ~6,984 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. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
cite_concept ~374

Cite a registry-backed concept by returning the canonical concept value and the filing prose around that value from MD&A, notes, risk factors, and optional cached extraction spans. Use `cite_concept` for metric-anchored narrative joins (concept value first → find the prose around it). For question-shaped narrative retrieval (no anchoring concept), use `get_filing_evidence` instead. The two tools are sharply distinguished: `cite_concept` ALWAYS resolves a canonical concept value and returns the narrative around it; `get_filing_evidence` runs a source-pack planner and surfaces evidence for an arbitrary query. Discovery: choose concept_name from the v1 concept registry (data/concept_registry_v1.json) or from get_statement output, then pass the canonical name exactly. Each citation includes corpus_coverage. Use Edgar mint fields only when corpus_coverage="gap". Treat corpus_coverage="unknown" exactly like "covered": attempt the corpus excerpt service, then fall back to unverified if the corpus cannot resolve it. For gap citations, corpus_content_hash is sha256 over the ENTIRE content stream named by locator.content/locator.content_norm (whole cached filing markdown or whole flattened document text), not over the cited span; recompute that full stream and use locator to select the span within it.

NameTypeReqDescription
allow_stale_extractionsboolean
concept_namestringyes
date_type
full_year_modeboolean
include_extractionsboolean
max_narrative_spans_per_sourceinteger
narrative_sources
quarterintegeryes
sourcestring
tickerstringyes
yearintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

compare_concept ~152

Compare one registry-backed concept across a caller-provided list of filers. This is cross-filer comparison, not search: caller ticker order is preserved, and partial coverage is returned per row with available=false. Discovery: choose concept_name from the v1 concept registry (data/concept_registry_v1.json) or from a prior get_statement/get_concept call, then reuse that exact canonical name for every ticker.

NameTypeReqDescription
concept_namestringyes
date_type
full_year_modeboolean
quarterintegeryes
sourcestring
ticker_periods
tickersarrayyes
yearintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

compare_filing_tables ~115

Compare structured filing tables across caller-provided tickers in one response. Preserves ticker order and returns per-ticker availability, matching table metadata, and optionally hydrated table rows.

NameTypeReqDescription
description
form_type
include_full_tablesboolean
limit_per_tickerinteger
period_from
period_to
section_key
sourcestring
table_type
tickersarrayyes

Structured output declared, but exposes no named fields.

No examples provided.

concept_trend ~220

Return a cache-only time series for a registry-backed concept over a period range. v1 uses the latest filing's reported series and has no restatement awareness: it does not return restated or original_value fields. Discovery: choose concept_name from the v1 concept registry (data/concept_registry_v1.json), get_statement output, or a successful get_concept call before requesting the trend.

NameTypeReqDescription
concept_namestringyes
date_type
period_fromstringyesInclusive concept period bound in FYyyyy, YYYY-FY, or YYYY-Qn format, for example FY2024, 2024-FY, or 2024-Q4. ISO dates are not accepted.
period_tostringyesInclusive concept period bound in FYyyyy, YYYY-FY, or YYYY-Qn format, for example FY2024, 2024-FY, or 2024-Q4. ISO dates are not accepted.
sourcestring
tickerstringyes

Structured output declared, but exposes no named fields.

No examples provided.

describe_filing ~67

Show cached data availability for one filing across XBRL, sections, tables, extraction schemas, and markdown. Read-only; does not populate caches.

NameTypeReqDescription
quarterintegeryes
sourcestring
tickerstringyes
yearintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

extract_filing_file ~110

Resolve a short-lived artifact handle issued by get_filing_sections and run scratch extraction for the requested schema via /api/documents/scratch-extract, without creating a canonical filing identity. Discovery: choose schema_name from list_extraction_schemas and pass the artifact_handle returned by get_filing_sections(output="file"). Local file paths and unregistered bytes are never accepted.

NameTypeReqDescription
artifact_handlestringyes
schema_namestringyes
sections_filter

Structured output declared, but exposes no named fields.

No examples provided.

get_concept ~149

Get a registry-backed financial concept value from cached XBRL financials. v1 resolves tag-backed concepts only and returns available=false for derivation or unsupported concepts. It never warms caches; call get_financials first when cache_status is cold. Discovery: choose concept_name from the v1 concept registry (data/concept_registry_v1.json) or from statement rows returned by get_statement. Pass the canonical concept name exactly.

NameTypeReqDescription
concept_namestringyes
date_type
full_year_modeboolean
quarterintegeryes
sourcestring
tickerstringyes
yearintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

get_event_filings ~237

Discover SEC event filings by ticker/CIK, filing-date range, and form type. Use this for deal, financing, proxy, filed-communication, and status-update materials that are not tied to a fiscal quarter's 10-K/10-Q. Do not pass 10-K or 10-Q here; use get_filings for periodic filing discovery, or get_filing_document/get_filing_sections when periodic filing content is needed. Event-form examples include 8-K, 425, proxy forms, S-3/S-3ASR, S-4, FWP, 424B*, 8-A12B, CERT, and SC 13D. Returns accession, issuer CIK, form, filing date, primary document URL, and deterministic event_type labels; it does not perform broad corpus search.

NameTypeReqDescription
cik
filing_date_from
filing_date_to
form_types
limitinteger
query
related_tickers
sort_orderstring
ticker

Structured output declared, but exposes no named fields.

No examples provided.

get_extraction_series ~226

Periodized counts (and optional hits) for langextract spans across a YYYY-Qn/YYYY-FY period range. ISO dates are not accepted. Cache read only. For raw cross-filing hits, use search_extractions.

NameTypeReqDescription
allow_staleboolean
attributes
class_
form_type
include_candidatesboolean
include_hitsboolean
limit_hits_per_periodinteger
period_fromstringyesInclusive period bound in YYYY-Qn or YYYY-FY format, for example 2024-Q4 or 2024-FY. ISO dates such as 2024-12-31 are not accepted.
period_tostringyesInclusive period bound in YYYY-Qn or YYYY-FY format, for example 2024-Q4 or 2024-FY. ISO dates such as 2024-12-31 are not accepted.
schemastringyes
sourcestring
tickerstringyes

Structured output declared, but exposes no named fields.

No examples provided.

get_filing_cover_facts ~117

Get exact cover-page DEI facts from a 10-K/10-Q, including citation-ready source metadata. Use this for outstanding-share questions instead of balance-sheet common-stock rows or weighted-average share metrics. Related tools: get_filing_document for markdown, get_filing_evidence for qualitative evidence, and get_filing_extractions for cached structured spans.

NameTypeReqDescription
fact_namestring
quarterintegeryes
tickerstringyes
yearintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

get_filing_document ~497

Get a SEC filing as readable markdown. Returns sectioned markdown with ## SECTION: headers. Supports section filtering and pagination via char range or max_chars cap. Pass accession plus cik/form_type/primary_document from get_event_filings to read an exact event filing without falling back to the latest filing for a fiscal quarter. Period-keyed reads are cache backed; exact-accession reads are fetched live. sections accepts canonical keys such as item_1a, item_7, item_7a, item_8, part1_item1, part1_item2, earnings_release, and proxy_statement; Item notation such as "Item 7" is also accepted. Common aliases include MD&A, Risk Factors, Financial Statements, Notes, Debt, Leases, Non-GAAP reconciliation / non_gaap_reconciliation, Director Compensation, Voting Rights, Election of Directors, and Proposal 1. For narrow topical phrases inside a filing section, call search_filing_text first and then read the returned section key or char range with get_filing_document. Related tools: get_filing_evidence plans evidence retrieval, get_filing_cover_facts reads exact DEI facts, and get_filing_extractions returns cached structured spans. char_start/char_end are always full-document offsets; offset_frame="document" or offset_frame="auto" is accepted for compatibility and ignored. Do not use offset_frame="scoped" here; use corpus filings_read for section-scoped offsets. The top-level response includes corpus_coverage; document_id, corpus_content_hash, and locator are emitted only for parser-owned gaps. Treat corpus_coverage="unknown" exactly like "covered": attempt the corpus excerpt service, then fall back to unverified if unresolved. For gap responses, corpus_content_hash is sha256 over the ENTIRE content stream named by locator.content/locator.content_norm, not over the returned slice; recompute that full stream and use locator to select the slice within it.

NameTypeReqDescription
accession
char_end
char_start
cik
form_type
max_charsinteger
offset_frame
primary_document
quarter
sections
sourcestring
ticker
year

Structured output declared, but exposes no named fields.

No examples provided.

get_filing_evidence ~460

Plan and retrieve filing evidence in one call for a qualitative SEC filing question. The source planner is internal; inspect its output by setting include_planner_trace=true, or by reading the X-Edgar-Planner-Trace response header when using the HTTP route directly. For metric-anchored joins from a concept value to supporting prose, use cite_concept instead once that Phase 6 tool is shipped. Supported task_intent values include regulatory_risk, concentration_risk, acquisition_strategy, revenue_disaggregation, debt_terms, deal_status, security_offering_terms, and guidance_actuals; deal_terms is accepted as a deal_status alias for merger/acquisition-status questions. For event backed intents, pass filing_date_from/to and form_types when known. Related tools: get_filing_document for source markdown, get_filing_cover_facts for exact cover facts, and get_filing_extractions for cached structured spans. Evidence rows include corpus_coverage. Use document_id, corpus_content_hash, and locator only on rows where corpus_coverage="gap". Treat corpus_coverage="unknown" exactly like "covered": attempt the corpus excerpt service, then fall back to unverified if unresolved. For gap rows, corpus_content_hash is sha256 over the ENTIRE content stream named by locator.content/locator.content_norm (whole cached filing markdown or whole flattened document text), not over the cited span; recompute that full stream and use locator to select the span within it. For table-kind rows, top-level char_start/char_end are a legacy table-ordinal anchor retained for compatibility, not character offsets; the locator object is authoritative for table rows.

NameTypeReqDescription
filing_date_from
filing_date_to
form_types
include_full_sectionsboolean
include_planner_traceboolean
max_hitsinteger
quarterintegeryes
querystringyes
related_tickers
sourcestring
task_intent
tickerstringyes
yearintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

get_filing_extractions ~120

Return cached langextract spans for one filing, or fetch the filing and run extraction on cache miss. Use this for ticker/year/quarter-keyed filings. Related tools: get_filing_document reads markdown, get_filing_evidence plans qualitative evidence, and get_filing_cover_facts returns DEI facts.

NameTypeReqDescription
allow_staleboolean
quarterintegeryes
schemastringyes
sourcestring
tickerstringyes
yearintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

get_filing_sections ~579

Parse qualitative sections from one filing resolved by ticker/year/quarter. Required call shape: `get_filing_sections(ticker="MSCI", year=2025, quarter=4, sections=["item_1", "item_7"])`. This tool does not accept accession-only calls. If you only have an accession, call get_filing_document for readable markdown, or recover the ticker/year/quarter with get_filings/get_event_filings before requesting sections. Do not pass `form_types`, `forms`, `limit`, `years`, or `period`. Section filters accept canonical keys like "item_1" and "part1_item2", or filing headings like "Item 1. Business". Use source='8k' for 8-K earnings release sections or source='proxy' for DEF 14A proxy statements. Use source='20f' or source='6k' for foreign private issuer filings exposed as whole-document sections. get_filings does not list proxy filings; use this routed access path directly. Do not use as the first step for broad qualitative questions; prefer corpus search (research-corpus-mcp.filings_search) when available, or search_filing_text once it lands. Pass explicit sections only after evidence discovery has identified them. Related tools: get_filing_document for readable markdown, get_filing_evidence for question-shaped evidence, and get_filing_cover_facts for exact DEI cover-page facts.

NameTypeReqDescription
fallbackboolean
formatstring
include_tablesboolean
max_words
outputstring
quarterintegeryesFiscal quarter number 1-4 for the one filing period to retrieve. Use quarter=4 for annual 10-K/full-year context. Do not pass quarter=0 or period='annual'.
sectionsOptional section keys or headings, for example ['item_1', 'item_7'] for a 10-K or ['part1_item2'] for a 10-Q. Omit to list available sections for the resolved filing.
sourceOptional filing family override. Omit or use auto for ordinary 10-K/10-Q filings; use 8k for earnings releases, proxy for DEF 14A proxy statements, or 20f/6k for foreign issuer filings.
tables_onlyboolean
tickerstringyesCompany ticker symbol, for example MSCI or PCTY. Required for periodic filing tools.
yearintegeryesFiscal year for the one filing period to retrieve, for example 2025. Do not pass years=5 or period='annual'; call the periodic tool once per target fiscal period.

Structured output declared, but exposes no named fields.

No examples provided.

get_filing_tables ~189

Fetch structured filing tables. Listing modes return metadata only; supplying table_id returns a single table with full row data. Pass accession to require the returned table cache to match a specific resolved filing identity. Omit source or use source='auto' for ordinary 10-K/10-Q tables. Use source='proxy' for DEF 14A proxy tables; use source='20f' or source='6k' with accession to target a specific foreign issuer filing from get_filings. Related tools: get_filing_document reads markdown, get_filing_evidence finds prose evidence, and get_filing_cover_facts returns exact cover-page DEI facts.

NameTypeReqDescription
accession
quarterintegeryes
section
source
table_id
tickerstringyes
yearintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

get_filings ~351

Fetch SEC filing metadata for one fiscal period. Required call shape: `get_filings(ticker="MSCI", year=2025, quarter=4)`. This is not a recent-filings/list/search endpoint. Do not pass `form_types`, `forms`, `limit`, `years`, or `period`. For annual 10-K discovery use quarter=4. For quarterly 10-Q discovery use the target fiscal quarter. Defaults to 10-Q, 10-K, and 8-K earnings release filings. Use source='20f' or source='6k' to list foreign issuer filings and discover accessions for targeted table retrieval. Do not use source='proxy' here: get_filings does not list DEF 14A proxy filings. For proxy discovery, call get_event_filings with form_types=['DEF 14A'] and a filing-date range. For proxy content, call get_filing_document, get_filing_sections, or get_filing_tables with source='proxy' and quarter=4 because DEF 14A is annual.

NameTypeReqDescription
quarterintegeryesFiscal quarter number 1-4 for the one filing period to retrieve. Use quarter=4 for annual 10-K/full-year context. Do not pass quarter=0 or period='annual'.
sourcestring
tickerstringyesCompany ticker symbol, for example MSCI or PCTY. Required for periodic filing tools.
yearintegeryesFiscal year for the one filing period to retrieve, for example 2025. Do not pass years=5 or period='annual'; call the periodic tool once per target fiscal period.

Structured output declared, but exposes no named fields.

No examples provided.

get_financials ~401

Extract all financial facts from one fiscal filing. Required call shape: `get_financials(ticker="MSCI", year=2024, quarter=4, full_year_mode=True)`. This is not a multi-year/list endpoint. Do not pass `years`, `period`, `limit`, `statement`, `forms`, or `form_types`. For a five-year history, call this tool once per target fiscal period, or use get_statement range mode when a bulk template-backed statement is acceptable. Returns structured JSON with income statement, balance sheet, and cash flow data. If returned, `scope_warnings` flag mixed-scope cash-flow facts. `scope_bridges` are returned only when distinct, period-aligned continuing- or discontinued-operations CFO facts support a same-scope candidate; otherwise the warning reports `bridge_status="unavailable"` and the raw filing facts remain authoritative.

NameTypeReqDescription
full_year_modebooleanTrue only when retrieving full-year/annual facts such as a 10-K period. Keep false for quarterly 10-Q or quarterly 8-K pulls, including Q4 quarter-only work.
outputstringUse file for large fact sets; inline only for small/debug reads.
quarterintegeryesFiscal quarter number 1-4 for the one filing period to retrieve. Use quarter=4 for annual 10-K/full-year context. Do not pass quarter=0 or period='annual'.
sourcestringUse auto for normal 10-Q/10-K lookup, or 8k for earnings-release facts.
tickerstringyesCompany ticker symbol, for example MSCI or PCTY. Required for periodic filing tools.
yearintegeryesFiscal year for the one filing period to retrieve, for example 2025. Do not pass years=5 or period='annual'; call the periodic tool once per target fiscal period.

Structured output declared, but exposes no named fields.

No examples provided.

get_issuer_submissions_meta ~90

Fetch an issuer's SEC submissions header by CIK. Returns the issuer name, tickers, exchanges, and fiscal year end directly from the public SEC submissions JSON. This tool does not require EDGAR_API_KEY. CIK must contain at most 10 digits; shorter values are zero-padded to the SEC's 10-digit format.

NameTypeReqDescription
cikstringyes

Structured output declared, but exposes no named fields.

No examples provided.

get_metric ~327

Get a specific financial metric by common name or XBRL tag and return current/prior values with YoY comparison. For guessed or user-facing names, call search_metrics or list_metrics first and pass an exact discovered metric_name into this tool; do not retry near-miss names blindly. Optional role filters accept friendly statement roles such as ["cash_flow"] or ["balance_sheet"]. If the response says the cache is cold, call warm_metric_cache with warm_hint.body.items, poll warm_metric_cache_status, then retry get_metric. Cash-flow metrics may include `scope_warnings` and `scope_bridges`; treat bridges as adjustment candidates for same-scope analysis, not replacements for reported facts. Filing-native operational KPI misses include a remediation hint for get_operational_kpi_drivers when the name looks like a non-XBRL operating metric. Scope bridges require direct, period-aligned CFO-scope facts; component-level wind-down or working-capital facts remain evidence and do not create calculated continuing-operations CFO. Discovery: call list_metrics or search_metrics for the same ticker, year, quarter, source, and date_type before choosing metric_name. Use get_metric for one period and get_metric_series when the same metric is needed across periods.

NameTypeReqDescription
date_type
full_year_modeboolean
metric_namestringyes
quarterintegeryes
role
sourcestring
tickerstringyes
yearintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

get_metric_series ~499

Fetch one metric across multiple periods in a single call, using cache-first execution and per-period status reporting. Optional role filters are applied per period before the best match is selected. Pass `axis_key` exactly as returned by search_metrics/list_metrics when the user needs a dimensional fact such as product revenue. For FCF, FCF margin, cash conversion, or trend questions, inspect per-period `scope_warnings` and `scope_bridges`. Bridges require direct, period-aligned CFO-scope facts; when a warning instead reports `bridge_status="unavailable"`, present the raw trend and underlying evidence without manufacturing a same-scope value. `metric_name` must be an exact discovered metric name, not a natural-language description. If the metric label came from the user, a filing heading, or your own shorthand, call `search_metrics` or `list_metrics` for the ticker/period first and pass the returned `metric_name`/`metric_id` exactly. Do not guess nearby names such as `Revenues`, `capital expenditures`, `cash flow from operations`, or `GrossBookingValue`; use discovered values such as `Revenue`, `NetCashProvidedByUsedInOperatingActivities`, or `PaymentsToAcquirePropertyPlantAndEquipment` when those are the returned matches. Required parameters are `metric_name`, `end_year`, and `end_quarter`; do not use `metric`, `years`, or `period`. If the result says "Metric series has no values," treat it as a metric-name miss and retry after discovery unless the message explicitly says uncached. If the message says uncached, call `warm_metric_cache` with `warm_hint.body.items`, poll `warm_metric_cache_status`, then retry this tool. Discovery: call list_metrics or search_metrics for the same ticker, period, source, and date_type to choose metric_name. Use get_metric for a single period and get_metric_series for multi-period retrieval.

NameTypeReqDescription
axis_key
cached_onlyboolean
date_type
end_quarterintegeryes
end_yearintegeryes
full_year_modeboolean
metric_namestringyes
periodsinteger
role
sourcestring
tickerstringyes

Structured output declared, but exposes no named fields.

No examples provided.

get_operational_kpi_driver_rows ~218

Return the strict producer-owned operational-KPI driver row DTO from `/api/operational-kpis/drivers`. Use these versioned, calculation-ready rows for programmatic consumers and cross-transport interoperability. `topic` optionally scores rows against a requested metric. Set `filter_to_topic=true` to exclude rows with no positive topic match. `include_non_numeric` preserves explicitly non-numeric observations when the producer has them. The MCP transport returns the HTTP data payload unchanged and does not infer missing semantic fields. For exploratory filing research that needs narrative change amounts, constant-currency driver commentary, or filing-local label discovery, use `get_operational_kpi_drivers`; that distinct research tool is not a mirror of this DTO.

NameTypeReqDescription
filter_to_topicboolean
include_non_numericboolean
quarterintegeryes
sourcestring
tickerstringyes
topic
yearintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

get_operational_kpi_drivers ~190

Return structured operational KPI values and driver growth rates from a filing's MD&A/earnings discussion. Use this for non-XBRL operating metrics such as Gross Bookings, MAPCs, Trips, customer counts, revenue driver bridges, take-rate inputs, segment growth rates, constant-currency growth, and volume-vs-price decomposition. It discovers candidate labels from the filing document and returns citation-ready rows with snippets; it does not run the slower generic KPI catalog extractor. For the strict producer-owned operational-KPI row DTO mirrored from HTTP, use get_operational_kpi_driver_rows instead.

NameTypeReqDescription
max_charsinteger
quarterintegeryes
sections
sourcestring
tickerstringyes
topicstringyes
yearintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

get_statement ~247

Return a bulk structured statement (income statement, balance sheet, or cash flow statement) from a deterministic v1 statement template and the v1 concept registry. Supports single-period mode with year+quarter and range mode with period_from+period_to; the two modes are mutually exclusive. v1 templates contain tag-kind concepts only, so computed or derivation rows such as margins and ratios belong in separate concept_trend calls. Note for model_build / AI-excel-addin populator consumers: this tool is NOT pre-approved as a model_build input. Production model_build flows must continue to use `/api/financials` + `/api/metric/series` until model_build explicitly accepts this tool's contract, provenance shape, error semantics, and `concept_registry_version` pinning. `get_statement` is additive and opt-in for ad-hoc use, FinanceBench harness, and standalone Edgar product.

NameTypeReqDescription
date_type
full_year_modeboolean
period_from
period_to
quarter
sourcestring
statementstringyes
tickerstringyes
year

Structured output declared, but exposes no named fields.

No examples provided.

list_extraction_schemas ~23

List the document extraction schemas available through the EDGAR API.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

list_metrics ~164

List available metric tags for a filing period so an agent can choose an exact metric_name before calling get_metric. Cash-flow candidates may carry `scope_warning` and `scope_bridge_ids`; validate those before using CFO in margin or trend formulas. Debt candidates may carry `debt_component_kind` values such as `instrument_principal`, `coupon_rate`, `finance_lease`, `other_notes`, or `total_debt_rollup`; consumers own any source-basis sum.

NameTypeReqDescription
date_type
full_year_modeboolean
include_valuesboolean
limitinteger
quarterintegeryes
sourcestring
tickerstringyes
yearintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

search_extractions ~210

Search cached langextract spans across filings using structured filters. Periods must use YYYY-Qn or YYYY-FY, not ISO dates. Read-only; cache misses are reported and never trigger LLM extraction.

NameTypeReqDescription
allow_staleboolean
attributes
class_
form_type
include_candidatesboolean
limitinteger
period_fromstringyesInclusive period bound in YYYY-Qn or YYYY-FY format, for example 2024-Q4 or 2024-FY. ISO dates such as 2024-12-31 are not accepted.
period_tostringyesInclusive period bound in YYYY-Qn or YYYY-FY format, for example 2024-Q4 or 2024-FY. ISO dates such as 2024-12-31 are not accepted.
schemastringyes
sourcestring
tickerstringyes

Structured output declared, but exposes no named fields.

No examples provided.

search_filing_tables ~123

Cross-filing search over an Edgar table index for a ticker. Matches on table description, table_type, and section. Returns metadata only; use get_filing_tables with the table_id to fetch full table contents. Use search_filing_text for same-filing prose search.

NameTypeReqDescription
description
form_type
limitinteger
period_from
period_to
section_key
sourcestring
table_type
tickerstringyes

Structured output declared, but exposes no named fields.

No examples provided.

search_filing_text ~244

Search cached markdown within one SEC filing keyed by ticker, year, quarter, and source. Read-only: cold caches return cache_status='cold' and are not warmed. CC5 prefix exception: although search_* usually denotes cross-filing search, search_filing_text is intentionally same-filing only and requires the per-filing ticker/year/quarter inputs. Use search_filing_tables for cross-filing table metadata search. Hits include corpus_coverage. Mint fields appear only when Edgar is the authoritative parser-side source for the cited span. Treat corpus_coverage="unknown" exactly like "covered": attempt the corpus excerpt service, then fall back to unverified if unresolved. For gap hits, corpus_content_hash is sha256 over the ENTIRE content stream named by locator.content/locator.content_norm (whole cached filing markdown), not over the hit span; recompute that full stream and use locator to select the span within it.

NameTypeReqDescription
quarterintegeryes
querystringyes
sourcestring
tickerstringyes
yearintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

search_metrics ~183

Search available filing metrics by natural-language query and return ranked candidates. Optional role filters accept friendly statement roles such as ["cash_flow"], ["balance_sheet"], or ["income_statement"]. Cash-flow matches may carry mixed-scope warnings and bridge IDs; inspect the returned top-level `scope_bridges` before using CFO in FCF-style formulas. Debt refinance/tranche queries surface structured XBRL components with `debt_component_kind`; this tool does not pre-sum refinanceable debt.

NameTypeReqDescription
date_type
full_year_modeboolean
include_valuesboolean
limitinteger
quarterintegeryes
querystringyes
role
sourcestring
tickerstringyes
yearintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

warm_metric_cache ~57

Enqueue async cache warming for metric periods. Paid/internal API tiers only. Each item requires ticker, year, quarter, and optional full_year_mode. Returns a job_id for warm_metric_cache_status polling.

NameTypeReqDescription
itemsarrayyes

Structured output declared, but exposes no named fields.

No examples provided.

warm_metric_cache_status ~45

Poll an async metric cache warming job by job_id. Discovery: job_id is returned by warm_metric_cache; do not invent one.

NameTypeReqDescription
job_idstringyes

Structured output declared, but exposes no named fields.

No examples provided.

Common questions

What is the EdgarParser MCP server?

EdgarParser MCP is listed in the public MCP registry as io.github.henrysouchien/edgar-mcp. MCP stdio server for source-backed SEC EDGAR financial data from the hosted EdgarParser API. This page covers its PyPI package (edgar-mcp).

Is the EdgarParser MCP server safe to use?

EdgarParser MCP scores 74 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the EdgarParser MCP server expose?

EdgarParser MCP exposes 31 tools: get_filings, get_event_filings, get_issuer_submissions_meta, get_financials, describe_filing, and 26 more. Their descriptions and schemas cost roughly 6,984 tokens of context every time the server is loaded.

Is the EdgarParser MCP server still maintained?

EdgarParser MCP is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.