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.

Tool Schema Changelog

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

Loading tool schema changelog…

    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.
      13 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
      D
      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