The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the EDGAR Filings listing page.
Cursor / Claude tools that return SEC filing numbers, not web-search guesses.
Who this is for: people already in an IDE chat who need a ticker’s 10-K/10-Q symbols, segment revenue, BDC non-accrual, or Form 4 lines without writing edgartools glue.
Pain it solves: models invent segment mix, insider trades, and BDC credit quality. These tools return accession, concept, period, open_market, non-accrual method, and the EDGAR index URL so you can check the filing.
What it is not: a research product, a document reader, or a substitute for reading the 10-K. It wraps edgartools for four jobs only. China PE, humanoid robots, and unlisted credit CVs are out of scope — those filings are not on EDGAR.
If uv is already on PATH, paste this into ~/.cursor/mcp.json (Windows: %USERPROFILE%\.cursor\mcp.json). Use a real name and email (SEC FAQ). Same snippet is in examples/cursor.mcp.json and examples/claude.mcp.json.
PyPI package edgar-filings-mcp is live. Registry name is io.github.Dxfory/edgar-mcp. Skip Smithery hosted. Pin mcp>=1.9,<2 — MCP 2.x renamed FastMCP; the package already pins that range.
The first uvx launch downloads edgartools (pandas / pyarrow). If the client looks stuck, run uvx edgar-filings-mcp once in a terminal so uv can cache the wheels, then restart the MCP server. After that, initialize is a couple of seconds.
No uv yet:
macOS / Linux:
Windows (PowerShell):
From git instead of PyPI:
macOS / Linux:
Windows:
Point the client at that interpreter with args ["-m", "edgar_mcp"].
If PyPI SSL fails (common with a local HTTPS proxy), use a mirror:
| Tool | Returns |
|---|---|
get_trading_symbols | Every dei:TradingSymbol on the latest 10-K or 10-Q, plus the legacy entity_info scalar |
get_segment_revenue | Dimensioned XBRL revenue (product / business / geographic axes) |
get_bdc_nonaccrual | BDC non-accrual rate, fair value, named investments, and extraction method |
get_form4 | Newest Form 4 summaries, transaction lines, open_market, and code_counts |
form on get_trading_symbols, get_segment_revenue, and get_bdc_nonaccrual is 10-K (default) or 10-Q. get_bdc_nonaccrual only accepts SEC BDCs (814- filers) such as ARCC. There is no fifth tool.
| Theme | Agent invents | Tool | Stop |
|---|---|---|---|
| AI infrastructure | NVIDIA / hyperscaler “AI mix” | get_segment_revenue on NVDA (Data Center is tagged). AMZN/MSFT capex is not AI-only | Do not add a fake AI-capex tool |
| Private credit / BDC | Non-accrual, NAV as credit quality, PIK as current | get_bdc_nonaccrual | Non-accrual ≠ Fitch default rate; PIK can still be accrual |
| GP-led continuation vehicles | Deal price and “premium to par” | None | Private secondaries are not EDGAR |
| China PE / 具身智能 | Round sizes and factory hours | None | SSE/HKEX, not EDGAR |
entity_info.ticker is last-wins on repeated TradingSymbol facts. Dual-class and preferred tickers can replace the common symbol.get_financials(). Some statement “DETAILED” views drop reportable-segment lines; this server queries dimensioned facts instead.A / M / F are grants, option exercises, and tax withholding — open_market is false.extraction_method=none or a zero rate plus extractor warnings is a parse gap, not proof the book is clean.10-K can be a 10-K/A. The tools prefer the original form so Schedule-of-Investments footnotes are not dropped.stdio only. Do not print to stdout.
smoke_stdio.py only checks initialize + four tool names (no EDGAR). After uvx is on PATH:
pressure.py hits live EDGAR and needs EDGAR_IDENTITY.
MIT. Filing data is from the SEC EDGAR system; this project is not affiliated with the SEC.