EdgarTools

io.github.dgunningPublished by GitHub account dgunningv5.62.1Updated Oct 24, 2026

Open-source SEC EDGAR toolkit — 13 tools, 7 prompts, every filing type. No API key required.

The publisher's own server: edgar.tools SEC Intelligence

Overview

AI-generated overview

Local MCP server exposing SEC EDGAR filings as structured data: full-text search, financial statements, insider trades, 13F and fund holdings.

What you can do
  • Search filing text and filter by form type, item or date range, and look up filings by accession number, CIK or ticker
  • Pull standardized income statements, balance sheets and cash flow statements across years, quarters and trailing twelve months
  • Read 10-K and 10-Q sections as text or whole filings as markdown for retrieval workflows
  • Extract 13F institutional holdings, Form 4 insider transactions, N-PORT fund portfolios and 8-K items as typed objects and tables
When to use it
Useful when an assistant needs to answer questions about what public companies filed with the SEC, compare reported financials across companies, or trace insider trades and institutional holdings, without writing parsing code.
Requirements
Runs locally via uvx from the edgartools package with the ai extra (or pip install and python -m edgar.ai); needs Python 3.11+ and uv, or pip. The EDGAR_IDENTITY environment variable is required and must contain a name and contact email for SEC identification. Network access to SEC EDGAR is needed; no API key or signup.
Before you install
EDGAR_IDENTITY is sent to the SEC on every request, so use a real contact address you are willing to disclose. The server reads public filings only, but it shares the SEC fair-access limit of 10 requests per second. Do not attach this local server and the hosted edgar.tools connector at the same time, since they overlap and split the assistant's routing.

Installation

In SourceWeft

  1. Open EdgarTools in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[EdgarTools logo]

EdgarTools — Python Library for SEC EDGAR Filings


[PyPI - Version] [Python versions] [Build status] [Monthly downloads]

EdgarTools is a Python library for SEC EDGAR filings as structured data: financial statements, insider trades, fund holdings, proxy statements and dozens of other filing types, through one consistent Python API. SEC publishes every filing since 1994 for free, and almost none of it is ready to use; EdgarTools turns a filing into a typed Python object. Free and open source, MIT-licensed.

Docs · Cheat sheet · Agents: Skill · MCP server · Hosted: edgar.tools

[EdgarTools SEC filing data extraction demo]

Quick Start

1. Install. The package is edgartools; the module you import is edgar. Python 3.11+.

bash
uv add edgartools        # or: pip install edgartools

2. Identify yourself to the SEC. EDGAR requires a contact email on every request. There is no key, signup or rate-limit tier.

python
from edgar import Company, set_identity
set_identity("[email protected]")

3. Get data.

python
# Five fiscal years of standardized income statement, from XBRLCompany("NVDA").income_statement(periods=5)#> Total Revenue $215.9B $130.5B $60.9B

Why not just call SEC's APIs?

data.sec.gov gives you JSON facts and filing indexes. Everything past that is your code. EdgarTools does that part:

  • Section text and markdown. Item 1A, Item 7 or any Item of a 10-K or 10-Q as text, and whole filings as markdown for RAG. Raw HTML is where hand-rolled parsers break.
  • Parsed forms, not XML. 13F holdings, Form 4 transactions, N-PORT portfolios and 8-K items as typed objects and DataFrames.
  • Statements that line up. Rows standardized across filers, so "Total Revenue" means the same thing for a bank and a chipmaker, plus discrete quarters (Q4 derived from the 10-K) and trailing twelve months.
  • Search and plumbing. Full-text search over filing content, the live filing feed, rate limiting, caching and offline storage.

It runs in your own process, MIT-licensed, with no API key and no vendor quota; SEC's fair-access limit of 10 requests a second still applies, and EdgarTools keeps to it.

What you can do

Full-text search across SEC filings

Search the text of every filing since 2001, not just form types and dates.

python
from edgar import search_filings
# Every 10-K filed since 2025 that mentions tariffsresults = search_filings("tariff", forms="10-K", start_date="2025-01-01")hit = results[0]hit.accession_number, hit.form, hit.filed, hit.company  # a hit's fields; filed is the filing datehit.get_filing()  # the Filing behind a hit, ready for .obj() or .markdown()
# Structured: 8-Ks that reported a cybersecurity incident (Item 1.05) in 2025search_filings(forms="8-K", items="1.05", start_date="2025-01-01", end_date="2025-12-31")#> 19 total

Full-text search guide →

Financial statements over several years

python
Company("MSFT").income_statement(periods=10)  # also .balance_sheet() and .cash_flow_statement()

Financial Statements guide →

One metric across companies

Pick rows by their standardized label, never by position: the first row of an income statement is not always total revenue.

python
import pandas as pd
revenue = {    ticker: Company(ticker).income_statement(periods=3, as_dataframe=True)            .set_index("label").filter(like="FY").loc["Total Revenue"] / 1e9    for ticker in ["JPM", "PFE", "CAT"]}pd.DataFrame(revenue).round(1)  # $ billions#> FY 2025 182.4 62.6 67.6

Quarterly figures and trailing twelve months

python
nvda = Company("NVDA")nvda.get_ttm_revenue()                                 # the last four quarters, summednvda.income_statement(period="quarterly", periods=8)   # discrete quarters; Q4 is derived from the 10-K

Sections and markdown for RAG

python
filing = Company("NVDA").latest("10-K")filing.markdown()          # the whole filing as markdown
tenk = filing.obj()tenk.risk_factors          # Item 1A as texttenk["Item 1C"]            # any Item by number

Sections guide →

Find filings, by anything

python
from edgar import find, get_current_filings, get_filings
get_filings(2025, 4, form="10-K")   # every 10-K filed in Q4 2025get_current_filings()               # the live feed, as SEC posts itfind("0000320193-25-000079")        # an accession number, CIK or ticker

Finding filings guide →

[find() resolving a ticker, a CIK and an accession number]

[get_current_filings() showing the live SEC filing feed]

13F institutional holdings

python
thirteenf = Company("BRK.A").get_filings(form="13F-HR").latest().obj()thirteenf.holdings  # one row per security: Issuer, Cusip, Ticker, SharesPrnAmount, Value, ...

Institutional Holdings guide →

[Berkshire Hathaway's latest 13F holdings]

Insider trades from Form 4

python
form4 = Company("TSLA").get_filings(form="4").latest().obj()form4.to_dataframe()  # buys, sells, grants and exercises

Insider Trades guide →

[Tesla's latest Form 4 parsed into a structured object]

Fund holdings from N-PORT

python
from edgar import Fund
Fund("VOO").get_portfolio()  # the latest N-PORT holdings as a DataFrame

Fund Portfolios guide →

8-K events and earnings releases

python
eightk = find("0001045810-26-000073").obj()  # NVIDIA, 2026-08-26eightk.items      # ['Item 2.02', 'Item 9.01']eightk.earnings   # the EX-99.1 press release tables, parsed

Current Events guide →

Library or hosted?

EdgarTools is this library: free, MIT-licensed, running in your own Python process. edgar.tools is the hosted platform built on it: the same parsing, kept running and current, with every answer cited to its filing. You are not paying for the parsing; you are paying for it to be run and answerable. No feature is ever removed from the library to sell the platform.

If you want to…Use
Build something that runs: pipelines, backfills, backtests, model corpora, notebooks, custom joins, anything repeated across hundreds of names or run inside your own networkThe library
Ask, not build: what the companies you cover filed and what changed since last time, who sold, who holds it, one person across every company they touch, screens across a universe, alerts, cited answers to forward or share with a team. From a browser, a phone, Excel, Claude or ChatGPT, or an agent that cannot run Pythonedgar.tools. Free account to start
Own a maintained dataset (insider trades, 13F, BDC portfolios, material events), every row traceable to its filing, without running the pipelineedgar.tools data licensing
Fetch one known filing or one JSON document, once, from a scriptNeither: call EDGAR directly

Both have an MCP server: the library's runs locally (see AI Integration below), and edgar.tools' is hosted at app.edgar.tools/mcp. Attach one per client, not both: they overlap and split your assistant's routing.

AI integration

EdgarTools ships an agent skill and a local MCP server, both in the ai extra. For an assistant that cannot run Python, use the hosted connector from the section above instead.

bash
pip install "edgartools[ai]"python -c "from edgar.ai import install_skill; install_skill()"  # the skill, for Claude Code and Claude Desktop

The MCP server works with any MCP client. For Claude Desktop, add it to claude_desktop_config.json:

json
{  "mcpServers": {    "edgartools": {      "command": "uvx",      "args": ["--from", "edgartools[ai]", "edgartools-mcp"],      "env": {        "EDGAR_IDENTITY": "Your Name [email protected]"      }    }  }}

uvx needs uv; without it, pip install "edgartools[ai]" and run python -m edgar.ai. Setup for other clients: MCP server guide · Skill guide.

Support the project

The SEC changes filing formats and ships a new XBRL taxonomy every year. Sponsorship is what keeps the parsers current and pays for new ones as new disclosures appear.

  • GitHub Sponsors: monthly or one-time. Companies can sponsor on their existing GitHub bill.
  • Buy Me a Coffee: a one-time thank-you.
  • Consulting: help from the library's author with SEC data pipelines and financial AI built on it.

[Sponsor on GitHub]    [Buy Me A Coffee]

Docs, help and contributing

EdgarTools is distributed under the MIT License.

Source: README.md at commit 018156a

Tools

0
SourceWeft started this package once in an isolated sandbox, without credentials, to list its tools. That failed: the server did not start.

Version history

5
  1. v5.62.1LatestOct 23, 2026
  2. v5.62.0Oct 11, 2026
  3. v5.61.1Oct 7, 2026
  4. v5.61.0Oct 6, 2026
  5. v5.21.1Sep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Edgar integrations