Skip to main content
Glama

EDGAR MCP — SEC companyfacts, frames, Form 4, 13F

MCP server that connects to SEC EDGAR with a User-Agent. No API key. Financials are read via companyfacts / frames, not FMP; XBRL tag mapping is in xbrl_map.py.

Tools

Tool

What it does

search_company

Ticker / CIK / name

get_company

SIC, exchange, fiscal year end

get_financials

Mapped income, balance sheet, cash flow

get_concept

Raw series of a single us-gaap/ifrs/dei tag

get_frame

Same concept + period, all filers (snapshot)

list_filings

10-K, 10-Q, 8-K, 4, 13F-HR...

get_form4

Insider transactions (issuer ticker or person CIK)

get_13f

Institution's 13F-HR portfolio (not stock ticker)

search_filings

Full-text (efts.sec.gov)

Related MCP server: edgarmcp

Setup

cd edgar-mcp
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .env

EDGAR_USER_AGENT in .env must be a real name + email. SEC blocks generic python-requests agents with 403.

EDGAR_USER_AGENT=Your Name your.email@example.com
MCP_TRANSPORT=stdio

Cursor (stdio)

%USERPROFILE%\.cursor\mcp.json:

{
  "mcpServers": {
    "edgar": {
      "command": "python",
      "args": ["server.py"],
      "cwd": "C:\\Users\\yunus\\Documents\\dev\\edgar-mcp",
      "env": {
        "MCP_TRANSPORT": "stdio",
        "EDGAR_USER_AGENT": "Your Name your.email@example.com"
      }
    }
  }
}

Railway → Claude (Streamable HTTP)

If PORT is set, the default transport is http and the endpoint is https://<railway-host>/mcp. Don't set MCP_TRANSPORT=stdio — the process doesn't listen, Railway shows "online" but Claude can't connect.

Variables

Key

Value

EDGAR_USER_AGENT

First Last you@email.com (real, to avoid SEC 403)

MCP_TRANSPORT

http (or don't add it)

MCP_AUTH_TOKEN

long random string

Check: https://<host>/health{"ok": true, ...}

Claude (claude.ai / Desktop Connectors)

  1. Customize → Connectors → Add custom connector

  2. URL: https://<host>/mcp (not ending in /sse)

  3. Request headers → Authorization = Bearer <MCP_AUTH_TOKEN> (including the Bearer space)

  4. Add, open with + → Connectors in the chat

Claude Code

claude mcp add --transport http edgar https://<host>/mcp --header "Authorization: Bearer <MCP_AUTH_TOKEN>"

For the old /sse, use MCP_TRANSPORT=sse (not preferred for the Claude connector).

Test

python -m unittest tests.test_xbrl_map tests.test_form_parsers tests.test_http_auth tests.test_client_utils

Resources

13F values are in thousands of USD per SEC convention. The 13F is filed by the institution, not the stock.

Related MCP Connectors

Related MCP Servers

  • 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.
    27 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for SEC EDGAR that provides real-time access to filings, financial statements, and full-text search across all EDGAR documents.
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    A free, key-less MCP server for SEC EDGAR that provides company filings, XBRL financial facts, and full-text search directly from the SEC.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that wraps SEC EDGAR APIs to provide company financial data, screening metrics, and disclosure signals for investment diligence, with every figure traced to its source filing.
    8
    MIT