SEC 10-K/10-Q symbols, segment revenue, BDC non-accrual, and Form 4 lines with citations.
Runs on your machine from its package; the steps are below.
At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx edgar-filings-mcp
MCP client config
{
"mcpServers": {
"edgar-filings": {
"command": "uvx",
"args": [
"edgar-filings-mcp"
]
}
}
}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.
{
"mcpServers": {
"edgar-filings": {
"command": "uvx",
"args": ["edgar-filings-mcp"],
"env": {
"EDGAR_IDENTITY": "Your Name you@example.com"
}
}
}
}
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:
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows (PowerShell):
irm https://astral.sh/uv/install.ps1 | iex
From git instead of PyPI:
uvx --from git+https://github.com/Dxfory/edgar-mcp.git edgar-filings-mcp
git clone https://github.com/Dxfory/edgar-mcp.git
cd edgar-mcp
python -m venv .venv
macOS / Linux:
.venv/bin/python -m pip install -e .
Windows:
.\.venv\Scripts\python -m pip install -e .
Point the client at that interpreter with args ["-m", "edgar_mcp"].
If PyPI SSL fails (common with a local HTTPS proxy), use a mirror:
python -m pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
| 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.python -m edgar_mcp
stdio only. Do not print to stdout.
python tests/run_offline.py
python scripts/smoke_stdio.py
python scripts/pressure.py
smoke_stdio.py only checks initialize + four tool names (no EDGAR). After uvx is on PATH:
python scripts/smoke_stdio.py -- uvx edgar-filings-mcp
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.