secedgar-mcp-server

SEC EDGAR filings and financials

@cyanheads/secedgar-mcp-server

Query SEC EDGAR filings, XBRL financials, and company data through MCP. STDIO & Streamable HTTP.

5 Tools • 2 Resources • 1 Prompt

npm Framework MCP SDK

License TypeScript Bun

Public Hosted Server: https://secedgar.caseyjhand.com/mcp


Tools

Five tools for querying SEC EDGAR data:

ToolDescription
secedgar_company_searchFind companies and retrieve entity info with optional recent filings
secedgar_search_filingsFull-text search across all EDGAR filing documents since 1993
secedgar_get_filingFetch a specific filing's metadata and document content
secedgar_get_financialsGet historical XBRL financial data for a company
secedgar_compare_metricCompare a financial metric across all reporting companies

secedgar_company_search

Entry point for most EDGAR workflows — resolve tickers, names, or CIKs to entity details.

  • Supports ticker symbols (AAPL), company names (Apple), or CIK numbers (320193)
  • Optionally includes recent filings with form type filtering
  • Returns entity metadata: SIC code, exchanges, fiscal year end, state of incorporation

secedgar_search_filings

Full-text search across all EDGAR filing documents since 1993.

  • Exact phrases ("material weakness"), boolean operators (revenue OR income), wildcards (account*)
  • Entity targeting within query string (cik:320193 or ticker:AAPL)
  • Date range filtering, form type filtering, pagination up to 10,000 results
  • Returns form distribution for narrowing follow-up searches

secedgar_get_filing

Fetch a specific filing's metadata and document content by accession number.

  • Accepts accession numbers in dash or no-dash format
  • Converts HTML filings to readable plain text
  • Configurable content limit (1K–200K characters, default 50K)
  • Can fetch specific exhibits by document name

secedgar_get_financials

Get historical XBRL financial data for a company with friendly concept name resolution.

  • Friendly names like "revenue", "net_income", "eps_diluted" auto-resolve to correct XBRL tags
  • Handles historical tag changes (e.g., ASC 606 revenue recognition)
  • Automatic deduplication to one value per standard calendar period
  • Filter by annual, quarterly, or all periods
  • See secedgar://concepts resource for the full mapping

secedgar_compare_metric

Compare a financial metric across all reporting companies for a specific period.

  • Same friendly concept names as secedgar_get_financials
  • Supports annual (CY2023), quarterly (CY2024Q2), and instant (CY2023Q4I) periods
  • Sorted ranking with configurable limit and direction
  • Enriches results with ticker symbols where available

Resources

URIDescription
secedgar://conceptsCommon XBRL financial concepts grouped by statement, mapping friendly names to XBRL tags
secedgar://filing-typesCommon SEC filing types with descriptions, cadence, and use cases

Prompts

PromptDescription
secedgar_company_analysisGuides a structured analysis of a public company's SEC filings: identify recent filings, extract financial trends, surface risk factors, and note material events

Features

Built on @cyanheads/mcp-ts-core:

  • Declarative tool definitions — single file per tool, framework handles registration and validation
  • Structured output schemas with automatic formatting for human-readable display
  • Unified error handling across all tools
  • Pluggable auth (none, jwt, oauth)
  • Structured logging with request-scoped context
  • Runs locally (stdio/HTTP) from the same codebase

SEC EDGAR–specific:

  • Rate-limited HTTP client respecting SEC's 10 req/s limit with automatic inter-request delay
  • CIK resolution from tickers, company names, or raw CIK numbers with local caching
  • Friendly XBRL concept name mapping with historical tag change handling
  • HTML-to-text conversion for filing documents via html-to-text
  • No API keys required — SEC EDGAR is a free, public API

Getting started

Public Hosted Instance

A public instance is available at https://secedgar.caseyjhand.com/mcp — no installation required. Point any MCP client at it via Streamable HTTP:

{
  "mcpServers": {
    "secedgar-mcp-server": {
      "type": "streamable-http",
      "url": "https://secedgar.caseyjhand.com/mcp"
    }
  }
}

Self-Hosted / Local

Add the following to your MCP client configuration file.

{
  "mcpServers": {
    "secedgar-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/secedgar-mcp-server@latest"],
      "env": {
        "EDGAR_USER_AGENT": "YourAppName [email protected]",
        "MCP_TRANSPORT_TYPE": "stdio"
      }
    }
  }
}

Or with npx (no Bun required):

{
  "mcpServers": {
    "secedgar-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/secedgar-mcp-server@latest"],
      "env": {
        "EDGAR_USER_AGENT": "YourAppName [email protected]",
        "MCP_TRANSPORT_TYPE": "stdio"
      }
    }
  }
}

For Streamable HTTP, set the transport and start the server:

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp

Prerequisites

Installation

  1. Clone the repository:
git clone https://github.com/cyanheads/secedgar-mcp-server.git
  1. Navigate into the directory:
cd secedgar-mcp-server
  1. Install dependencies:
bun install
  1. Build:
bun run build

Configuration

All configuration is validated at startup via Zod schemas in src/config/server-config.ts. Key environment variables:

VariableDescriptionDefault
EDGAR_USER_AGENTRequired. User-Agent header for SEC compliance. Format: "AppName [email protected]". SEC blocks IPs without a valid User-Agent.
EDGAR_RATE_LIMIT_RPSMax requests/second to SEC APIs. Do not exceed 10.10
EDGAR_TICKER_CACHE_TTLSeconds to cache the company tickers lookup file.3600
MCP_TRANSPORT_TYPETransport: stdio or httpstdio
MCP_HTTP_PORTHTTP server port3010
MCP_AUTH_MODEAuthentication: none, jwt, or oauthnone
MCP_LOG_LEVELLog level (debug, info, warning, error, etc.)info
LOGS_DIRDirectory for log files (Node.js only).<project-root>/logs

Running the server

Local development

  • Build and run the production version:

    bun run rebuild
    bun run start:http   # or start:stdio
    
  • Run checks and tests:

    bun run devcheck     # Lints, formats, type-checks
    bun run test         # Runs test suite
    

Docker

docker build -t secedgar-mcp-server .
docker run -e EDGAR_USER_AGENT="MyApp [email protected]" -p 3010:3010 secedgar-mcp-server

Project structure

DirectoryPurpose
src/mcp-server/tools/definitions/Tool definitions (*.tool.ts). Five SEC EDGAR tools.
src/mcp-server/resources/definitions/Resource definitions. XBRL concepts and filing types.
src/mcp-server/prompts/definitions/Prompt definitions. Company analysis prompt.
src/services/edgar/SEC EDGAR API client, XBRL concept mapping, HTML-to-text conversion.
src/config/Server-specific environment variable parsing and validation with Zod.
tests/Unit and integration tests, mirroring the src/ structure.

Development guide

See CLAUDE.md for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches — no try/catch in tool logic
  • Use ctx.log for logging, ctx.state for storage
  • Register new tools and resources in the createApp() arrays

Contributing

Issues and pull requests are welcome. Run checks and tests before submitting:

bun run devcheck
bun run test

License

This project is licensed under the Apache 2.0 License. See the LICENSE file for details.

Server Terkait