Edgarmcp
БесплатноНе проверенMCP server for SEC EDGAR that provides real-time access to filings, financial statements, and full-text search across all EDGAR documents.
Описание
MCP server for SEC EDGAR that provides real-time access to filings, financial statements, and full-text search across all EDGAR documents.
README
MCP server for SEC EDGAR. 5 tools, zero infrastructure. Resolves everything in real-time against EDGAR + XBRL.
get_filings— Discover filings, press releases, contracts, and notesread_document— Read filings, sections, exhibits, or notes as Markdownsearch_filings— BM25 search across filings, attachments, and notesview_financials— XBRL statements with Q4 inference, YTD normalization, stock splits, TTMsearch_edgar— Full-text search across all of EDGAR (SEC EFTS)
Key features
- Multi-period financials — Pull 8 quarters or 3 years in one call. Q4 inferred, YTD normalized, stock splits adjusted, TTM computed.
- Everything is addressable — Sections, press releases, exhibits, and notes are individually discoverable, readable, and searchable.
- Clickable citations — Results link to the exact element in the original SEC filing HTML. Click to open, highlight, and scroll to source.
- High-fidelity parsing — Powered by sec2md. Tables, sections, iXBRL tags, and page structure preserved.
- Two-stage search — Broad discovery across all EDGAR via EFTS, then deep BM25 search within specific filings.
- Persistent cache — Parsed filings, company metadata, and XBRL statements cached to disk (or S3) so repeat queries are instant, even across restarts.
- Remote deployment — One-click deploy to Railway with API key auth, health checks, and remote citations.
Quick Start
Install from PyPI
pip install mcp-sec-edgar
Or install from source:
git clone https://github.com/lucasastorian/edgarmcp.git
cd edgarmcp
pip install -e .
Claude Code
claude mcp add edgarmcp -- env EDGAR_IDENTITY="Your Name [email protected]" edgarmcp
Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"edgarmcp": {
"command": "edgarmcp",
"env": {
"EDGAR_IDENTITY": "Your Name [email protected]"
}
}
}
}
If installed from source with uv:
{
"mcpServers": {
"edgarmcp": {
"command": "uv",
"args": ["--directory", "/path/to/edgarmcp", "run", "edgarmcp"],
"env": {
"EDGAR_IDENTITY": "Your Name [email protected]"
}
}
}
}
Restart Claude Desktop. edgarmcp should appear as an MCP server.
Transport
edgarmcp # stdio (default)
edgarmcp --http --port 8000 # streamable HTTP (localhost)
edgarmcp --http --host 0.0.0.0 # public HTTP (auto-generates API key)
edgarmcp --no-citations # disable citation tags
EDGAR Identity
The SEC requires a User-Agent header identifying who is making requests. Set the EDGAR_IDENTITY environment variable to your name and email:
export EDGAR_IDENTITY="Your Name [email protected]"
Remote Deployment (Railway)
Deploy edgarmcp as a remote MCP server on Railway with one click.
Setup
- Fork/clone the repo and connect it to Railway
- Set environment variables in Railway:
| Variable | Required | Description |
|---|---|---|
EDGAR_IDENTITY |
yes | "Your Name [email protected]" |
EDGARMCP_API_KEY |
no | Bearer token for auth (auto-generated if not set) |
EDGARMCP_BASE_URL |
no | Your deployment URL for citation links (e.g. https://edgarmcp-production.up.railway.app) |
- Railway builds from the included
Dockerfileand deploys with/healthhealthcheck
Auth
When binding to 0.0.0.0 (all remote deployments), an API key is always required:
- Set
EDGARMCP_API_KEYexplicitly, or - One is auto-generated on startup and printed to logs
Clients authenticate with Authorization: Bearer <key>. The /health, /cite/, and /filing/ endpoints are public (SEC filings are public data).
Persistent Cache
Parsed filings, company metadata, and XBRL statements are cached persistently so expensive SEC fetches and parses happen once:
| Layer | Key | What |
|---|---|---|
| Companies | companies/{id}.json.gz |
Ticker/CIK/name mapping |
| Parsed filings | parsed/{accession}.json.gz |
Full sec2md parse (pages, sections, notes, attachments) |
| XBRL statements | xbrl/{accession}/{statement}.json.gz |
Extracted financial data per filing |
Local: stored at ~/.edgarmcp/cache/ (default, zero-config).
S3-compatible (Railway Storage Buckets): set these env vars to use S3 instead of filesystem:
| Variable | Description |
|---|---|
BUCKET |
Bucket name |
ACCESS_KEY_ID |
S3 access key |
SECRET_ACCESS_KEY |
S3 secret key |
ENDPOINT |
S3 endpoint URL |
REGION |
AWS region (default: us-east-1) |
Citations
Citations work remotely — filing HTML is served through the main HTTP port at /cite/ and /filing/. Set EDGARMCP_BASE_URL to your deployment URL so citation links resolve correctly for remote clients.
Connecting a Remote MCP Client
claude mcp add edgarmcp-remote --transport http https://edgarmcp-production.up.railway.app/mcp \
--header "Authorization: Bearer YOUR_API_KEY"
Tools
get_filings
Discover a company's SEC filings, attachments, and notes — all as a flat document list. Combines company lookup, filing listing, attachment listing, and notes listing in a single tool.
| Parameter | Type | Required | Description |
|---|---|---|---|
company |
str |
yes | Ticker, company name, or CIK |
forms |
list[FormType] |
no | Filter by form type (default: major forms) |
attachment_types |
list[AttachmentType] |
no | Filter to specific attachment types |
include_notes |
bool |
no | Include notes to financial statements |
start_date / end_date |
str |
no | YYYY-MM-DD date range (default: last 2 years) |
limit |
int |
no | Max documents returned (default: 20, max: 100) |
Supported forms: 10-K, 10-Q, 8-K, 20-F, 6-K, DEF 14A, S-1, SC 13D, SC 13G, Form 4. Attachment types include press releases, investor presentations, material contracts, merger agreements, debt instruments, charter/bylaws, and more.
read_document
Unified reader — one tool for main filings, sections, press releases, exhibits, and notes. Route by parameter:
| Parameter | Type | Required | Description |
|---|---|---|---|
accession_number |
str |
yes | Filing accession number |
section |
SectionType |
no | Specific section (e.g. "risk_factors", "mda") |
exhibit_number |
str |
no | Exhibit to read (e.g. "99.1") |
note_name |
str |
no | Note to read (e.g. "note_2") |
start_page / end_page |
int |
no | Page range (max 20 pages per request) |
First read of any filing returns a navigation header with sections, notes, and attachments — the LLM uses these to decide where to go next.
Section extraction covers 10-K, 10-Q, 8-K, and 20-F.
search_filings
BM25 search across a company's filings, attachments, and notes. Resolves filings internally, loads and parses them, chunks everything, and ranks by BM25.
| Parameter | Type | Required | Description |
|---|---|---|---|
query |
str |
yes | Search query |
company |
str |
yes* | Ticker/name/CIK (*or provide accession_numbers) |
forms |
list[FormType] |
yes* | Form types to search |
sections |
list[SectionType] |
no | Scope to specific sections |
attachment_types |
list[AttachmentType] |
no | Search only these attachment types |
xbrl_tags |
list[str] |
no | Filter to chunks containing XBRL concept tags |
accession_numbers |
list[str] |
no | Search explicit filings directly |
limit |
int |
no | Max filings to load (default: 5, max: 10) |
top_k |
int |
no | Results to return (default: 10, max: 25) |
Searches main filing pages, notes, and high-value attachments (press releases, investor presentations, material contracts, etc.) by default.
view_financials
Pull financial statements from XBRL with full period merging.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol |
str |
yes | Ticker symbol |
statement_type |
StatementType |
yes | income_statement, balance_sheet, or cash_flow |
report_type |
ReportType |
yes | annual, quarterly, or ttm |
periods |
int |
no | Number of periods (default: 4, max: 8) |
Under the hood: loads XBRL from filings, extracts statement DataFrames, then runs Q4 inference (FY - Q1 - Q2 - Q3), YTD normalization (converting 6M/9M data to individual quarters), stock split adjustment, and TTM computation. Returns a clean Markdown table with the notes index from the source filings so the LLM can immediately dig into accounting details.
search_edgar
Full-text search across the entire EDGAR corpus using SEC EFTS.
| Parameter | Type | Required | Description |
|---|---|---|---|
query |
str |
yes | Full-text query (supports boolean operators) |
entity |
str |
no | Company name or CIK to scope the search |
forms |
list[FormType] |
no | Filter by form type |
start_date / end_date |
str |
no | YYYY-MM-DD |
limit |
int |
no | Max results (default: 10, max: 50) |
The discovery tool. Search all of EDGAR without knowing which companies to look at. Pipe results into read_document or search_filings for deeper analysis.
Design Decisions
5 tools, maximum coverage. Company lookup, filing listing, attachment listing, and notes listing are consolidated into get_filings. Filing, attachment, and note reading are unified in read_document. Minimum surface area for the LLM.
Two-level cache. L1 is an in-memory LRU (~20 filings) for instant re-reads within a session. L2 is persistent (filesystem or S3) so parsed filings survive restarts and can be shared across instances. SEC filings are immutable — no TTL needed.
BM25 over embeddings. Pure Python, no GPU or API needed. Good enough for keyword-heavy SEC filings. SEC EFTS covers cross-corpus discovery.
Limitations
- No embedding search — BM25 only. Mitigated by SEC EFTS for cross-corpus discovery.
- Cold start per filing — First read requires download + parse (~2-5s). Subsequent reads cached (persistent across restarts).
- SEC rate limits — 10 requests/second. Parallel loading respects this via edgartools-async.
- XBRL availability —
view_financialsrequires XBRL (10-K/10-Q/20-F, generally available since ~2009). - No market data — No price or market cap context.
- Memory — Each cached filing ~1-5MB. 20 filings in L1 = 20-100MB.
view_financialslatency — Loading XBRL for 4-8 filings takes ~5-15s on first call.
Dependencies
edgartools-async, sec2md, mcp (FastMCP), rank-bm25, pydantic, pandas
License
Apache 2.0 — see LICENSE for details.
Установка Edgarmcp
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/lucasastorian/edgarmcpFAQ
Edgarmcp MCP бесплатный?
Да, Edgarmcp MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Edgarmcp?
Нет, Edgarmcp работает без API-ключей и переменных окружения.
Edgarmcp — hosted или self-hosted?
Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.
Как установить Edgarmcp в Claude Desktop, Claude Code или Cursor?
Открой Edgarmcp на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
GitHub
PRs, issues, code search, CI status
автор: GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
автор: mcpdotdirectCompare Edgarmcp with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development
