EdgarMCP

EdgarMCP

Provides AI agents with clean, normalized access to financial data including company fundamentals, insider trades, SEC filings, macro series from FRED, real-time quotes, and ETF holdings.

Category
Visit Server

README

<!-- mcp-name: io.github.birthday-tools/edgarmcp -->

EdgarMCP

PyPI License: MIT CI

An MCP server that gives AI agents clean, normalized access to financial data: company fundamentals and insider trades from SEC EDGAR, macro series from FRED, real-time quotes via the Tradernet WebSocket feed, ETF/fund holdings from SEC NPORT-P, look-through analytics, and index snapshots.

Raw sources (XBRL, bulky filing HTML, ownership XML) are expensive and error-prone for agents — they burn tokens and trip up on parsing. EdgarMCP returns agent-ready JSON.

Installation

pip install mcp-edgar

This installs the edgarmcp console script (a stdio MCP server).

Quick start

Add it to an MCP client. For Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "edgarmcp": {
      "command": "edgarmcp",
      "env": {
        "FRED_API_KEY": "your-free-fred-key",
        "OPENFIGI_API_KEY": "optional-openfigi-key"
      }
    }
  }
}

Both keys are optional: without FRED_API_KEY the FRED-backed tools degrade gracefully; without OPENFIGI_API_KEY holding resolution runs in anonymous mode.

Tools

Tool Purpose
get_company_facts(ticker) Normalized fundamentals (revenue, EPS, margins, debt)
get_financial_statement(ticker, statement, period) Income/balance/cashflow as structured JSON
get_filings(ticker, form_type, limit) Recent SEC filings (10-K/10-Q/8-K) with metadata and document URLs
parse_filing_section(url, section) Extract a 10-K section (Risk Factors, MD&A) as clean text
get_insider_trades(ticker, limit) Form 3/4/5 insider transactions (who, role, buy/sell, volume)
get_macro_series(series_id, start, end) FRED macro series (rates, inflation, unemployment) with metadata
get_quote(ticker) Real-time L1 quote (last/bid/ask/volume) via the Tradernet WebSocket feed
get_etf_holdings(ticker, limit) ETF/fund holdings (top by weight) + AUM, NAV, asset/country mix from SEC NPORT-P
get_holdings_analysis(symbol, limit) Look-through of an ETF/index: sector breakdown + weighted net-margin/ROE with coverage
get_index(index) Index snapshot (S&P 500, NASDAQ-100, Dow, NASDAQ Composite): level from FRED, tracking ETF, holdings preview

Configuration

Variable Description Default
EDGAR_USER_AGENT User-Agent for SEC requests EdgarMCP/0.1 (contact: info+sec@birthday.tools)
EDGAR_RATE_LIMIT Requests per second 10
EDGAR_CACHE_DIR File cache directory edgar_cache
FRED_API_KEY Free FRED key for get_macro_series / index levels —
OPENFIGI_API_KEY Optional OpenFIGI key for higher CUSIP/ISIN rate limit —
EDGAR_TELEMETRY Enable anonymous opt-in usage telemetry (1/true/yes/on) off
EDGAR_TELEMETRY_URL Telemetry endpoint (only used when telemetry is enabled) https://t.birthday.tools/v1/events

Variables are read from the environment; locally you can put them in a .env file.

Telemetry

Telemetry is opt-in and off by default. Enable it by setting EDGAR_TELEMETRY=1. When enabled, the server periodically sends an anonymous, aggregated payload:

  • a random install id (generated once, stored locally),
  • the package version, Python minor version (e.g. 3.12), and OS (darwin/linux/windows),
  • per-tool call counts and per-tool error counts.

It never sends request content — no tickers, arguments, results, error messages, IP addresses, file paths, or environment. Sending is fire-and-forget and never blocks or breaks a tool call. Override the endpoint with EDGAR_TELEMETRY_URL, or leave telemetry disabled (the default) to send nothing.

Architecture

Three isolated layers: a platform-independent data layer (HTTP client with a host allowlist, ticker/name/CUSIP/ISIN resolution, XBRL normalizers, filing/ownership/NPORT-P parsers, FRED, the Tradernet WebSocket client, OpenFIGI identifier mapping, look-through and index analytics); a cache layer (aggressive caching of immutable filings and FIGI mappings; mutable FRED series are not cached); and a thin MCP layer. The data layer knows nothing about MCP and ports unchanged between a marketplace and self-hosting.

Security

  • Outbound requests are restricted to an HTTPS host allowlist (SSRF defense), centralized across all sources (SEC, FRED, OpenFIGI).
  • Ownership and NPORT XML is parsed with defusedxml (XXE / billion-laughs defense).
  • Secrets (FRED / OpenFIGI keys) are redacted from error messages and never placed in URLs or cache keys.
  • Real-time quotes come from Tradernet's public anonymous WebSocket feed (wss://wss.tradernet.com/); a dedicated client with a hardcoded URL.
  • CUSIP/ISIN holding resolution goes through OpenFIGI (api.openfigi.com, allowlisted); on failure it falls back to name matching.

Data licenses

SEC EDGAR data is public domain, used with a descriptive User-Agent and the 10 req/s limit. FRED data is provided by the Federal Reserve Bank of St. Louis under its terms of use. Real-time quotes come from Tradernet's public anonymous WebSocket feed. CUSIP/ISIN → ticker mapping uses OpenFIGI (Bloomberg; free tier, 25 req/min anonymous, 250 req/min with a key).

License

MIT © 2026 birthday.tools

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured