Skip to main content
Glama
edgar-mcp

edgar-mcp

by mcpwright

edgar-mcp

SEC EDGAR filings, inside your agent. An MCP server that lets an LLM resolve companies, search filings, and pull recent securities offerings straight from the SEC — built on Anthropic's official mcp Python SDK.

All tools are read-only and hit public SEC endpoints (no API key required).

Status: 11 tools, working today (see below). Published on PyPI as mcpwright-edgar and in the official MCP Registry. See the roadmap for what's next.

Tools

Tool

What it does

lookup_issuer(query, limit=10)

Resolve a ticker or company name → CIK, legal name, tickers, exchange. Works for exchange-listed and private / non-exchange filers (Reg CF / Reg A issuers, funds).

list_filings(cik_or_query, form_type=None, limit=20)

An issuer's most recent filings, newest first. Optional form-type filter (e.g. 10-K, C, D).

search_filings(query, forms=None, date_from=None, date_to=None, limit=20)

Full-text search across filing documents.

get_recent_offerings(form="C", since=None, state=None, limit=20)

Recent securities offerings, newest first — form="C" (Reg CF), "D" (Reg D), or "A" (Reg A — 1-A offering statements plus 253G2 offering circulars, where the per-share price and any "price walk-up" live), optionally filtered by issuer state (e.g. "CA").

get_filing(accession_or_url, cik=None)

Open one filing: form, filing date, primary-document link, and every document in the filing.

get_form_d_details(accession_or_url, cik=None)

Parse a Form D (Reg D) raise: offering amount, sold/remaining, min investment, # investors, industry, revenue range, security types, exemptions, and the officers/directors/promoters.

get_form_c_details(accession_or_url, cik=None)

Parse a Form C (Reg CF) raise: target/max amount, price, security type, deadline, intermediary, employees, and a two-year financial snapshot (revenue, net income, assets, debt).

get_company_facts(cik_or_query)

Headline financials from a public company's XBRL facts: latest annual revenue, gross/operating income, net income, assets, liabilities, equity, cash.

get_filing_text(url, offset=0, max_chars=20000)

Fetch a document's text (HTML stripped) for reading/summarizing — paginated, since filings can exceed 1M characters.

get_insiders(cik_or_query, limit=25)

A company's insiders (officers, directors, >10% owners) from recent Section 16 filings, with roles.

get_insider_trades(cik_or_query, limit=20)

Recent insider transactions (Form 4): owner, role, buy/sell/grant, shares, price, shares owned after.

Related MCP server: sec-edgar-mcp

Install

Requires Python 3.12+. The zero-clone way to run it (the PyPI package is mcpwright-edgar; the command, server, and tools are all "edgar"):

uvx mcpwright-edgar

Claude Code

claude mcp add edgar -- uvx mcpwright-edgar

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "edgar": { "command": "uvx", "args": ["mcpwright-edgar"] }
  }
}

OpenAI Agents SDK (Python)

It's a standard MCP server, so it works with any MCP-capable client — not just Claude. With the OpenAI Agents SDK:

from agents import Agent, Runner
from agents.mcp import MCPServerStdio

async def main():
    async with MCPServerStdio(
        name="edgar",
        params={
            "command": "uvx",
            "args": ["mcpwright-edgar"],
            "env": {"EDGAR_MCP_USER_AGENT": "your-app you@example.com"},
        },
    ) as edgar:
        agent = Agent(
            name="Analyst",
            instructions="Use the EDGAR tools for SEC filings and company data.",
            mcp_servers=[edgar],
        )
        result = await Runner.run(
            agent, "Recent Reg D raises in California — who's behind the biggest?"
        )
        print(result.final_output)

Any other MCP client (Cursor, VS Code, Cline, Goose, Zed, …)

They all launch a stdio MCP server the same way — point yours at:

{
  "mcpServers": {
    "edgar": {
      "command": "uvx",
      "args": ["mcpwright-edgar"],
      "env": { "EDGAR_MCP_USER_AGENT": "your-app you@example.com" }
    }
  }
}

Hosted chat connectors (e.g. ChatGPT connectors) expect a remote MCP server over Streamable HTTP; mcpwright-edgar runs locally over stdio. Running it behind Streamable HTTP for a hosted endpoint is straightforward if you need that.

SEC etiquette: the SEC requires a descriptive User-Agent with contact info and rate-limits to ~10 req/s. Set your own via the EDGAR_MCP_USER_AGENT env var (e.g. "your-app your-email@example.com"). The client throttles and retries for you.

Caching: responses are cached in-memory (byte-budgeted LRU) to cut latency and SEC load — immutable filing-archive content for days, the ticker map for 24h, everything else briefly. Set EDGAR_MCP_CACHE=0 to disable.

Develop

git clone https://github.com/mcpwright/edgar-mcp && cd edgar-mcp
uv sync
uv run pytest                       # tests (mocked SEC responses)
uv run ruff check . && uv run ruff format --check .   # lint + format
uv run mypy src tests               # strict type checking
uv run mcp dev src/edgar_mcp/server.py   # poke the tools in the MCP Inspector

Roadmap

  • get_recent_offerings(form=C|D) — recent Reg CF / Reg D raises

  • get_filing(accession_or_url) — open a filing and list its documents

  • get_form_d_details(...) — parse Reg D offering data (amount, investors, people)

  • get_form_c_details(...) — parse Reg CF offering data (target/max, financials, terms)

  • get_insiders / get_insider_trades — Section 16 (Form 3/4/5) insiders & trades

  • State filter on get_recent_offerings (industry isn't filterable — EDGAR omits SIC on these listings; screen via get_form_d_details.industry_group)

  • Reg A support in get_recent_offerings (Form 1-A statements + 253G2 offering circulars)

  • get_company_facts(cik) — XBRL headline financials

  • get_filing_text — return a document's text for summarization

  • Published to PyPI (mcpwright-edgar) + the official MCP Registry (io.github.mcpwright/edgar-mcp)

  • get_form_a_details — parse Reg A (Form 1-A) offering data

  • Older-filing metadata (beyond the recent-submissions window)

Privacy

edgar-mcp runs entirely on your machine and collects, stores, or transmits no personal data — no accounts, no tracking, no telemetry. Its only outbound requests go to the U.S. SEC's EDGAR services (data.sec.gov, efts.sec.gov, www.sec.gov) to fetch the public filings you ask for; no API key is needed. One honest note: the SEC's fair-access policy asks for a descriptive User-Agent with contact info (EDGAR_MCP_USER_AGENT="your-app you@example.com") — whatever you set there is sent to the SEC with each request, and nowhere else. Responses are cached in memory only; nothing is persisted to disk.

Full policy: https://mcpwright.com/privacy/

Questions & feedback

  • Questions, ideas, or "could it do X?" → Discussions

  • Bugs & concrete feature requests → Issues

Contributions welcome — and if you build something with it, I'd love to hear about it.


Part of mcpwright · built by Devender Gollapally

Available Tools

3 tools
list_filingsA
Read-only

List the most recent filings for one issuer, newest first.

`cik_or_query`: a CIK (digits) or a ticker/name to resolve.
`form_type`: optional prefix filter, e.g. "10-K", "8-K", "C", "D".

Inputs: cik_or_query (required), form_type, limit. Returns: result

lookup_issuerA
Read-only

Resolve a company name or ticker to its SEC CIK and basic identity.

`query`: a ticker (e.g. "AAPL") or part of a company name (e.g. "Apple").
Returns matching issuers with their 10-digit CIK, legal name, tickers, and
exchange. Resolve a CIK here first — the other tools key off it.

Inputs: query (required), limit. Returns: result

search_filingsA
Read-only

Full-text search across SEC filing documents.

`query`: free text (use quotes inside the string for exact phrases).
`forms`: optional list of form types to restrict to, e.g. ["10-K", "8-K"].
`date_from` / `date_to`: ISO dates (YYYY-MM-DD).

Inputs: query (required), forms, date_from, date_to, +1 more. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 3 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose: lookup_issuer resolves entities, list_filings retrieves recent filings for a specific issuer, and search_filings performs full-text search across documents. No overlap in functionality.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun snake_case pattern: lookup_issuer, list_filings, search_filings. The verbs are distinct and descriptive, and the pattern is uniform across the set.

    Tool Count4/5

    With 3 tools, the set is slightly minimal but covers the core operations for SEC filing access: entity resolution, listing filings, and full-text search. The count is reasonable for a focused domain, though it feels a bit thin for comprehensive coverage.

    Completeness3/5

    The tool set covers entity lookup, recent filing listing, and full-text search, which are essential, but lacks a tool to retrieve the actual filing content or metadata for a specific filing. This is a notable gap for agents that may need to fetch filing details after discovery.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      C
      quality
      B
      maintenance
      MCP server for accessing SEC EDGAR filings. Connects AI assistants to company filings, financial statements, and insider trading data with exact numeric precision.
      21
      849 PyPI
      386
      AGPL 3.0
    • A
      license
      Not graded
      quality
      D
      maintenance
      Hosted MCP server that gives AI agents real-time access to SEC EDGAR filings search, 10-K/8-K reading, XBRL financial facts, and insider-trade (Form 4) alerts.
      12 npm
      1
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      An MCP server that enables models to access SEC EDGAR filings, filing text, and XBRL financial facts with caching, rate limiting, and iXBRL stripping.
      8
      MIT