SEC EDGAR Company Filings & XBRL Financials MCP Server
Pricing
Pay per usage
SEC EDGAR Company Filings & XBRL Financials MCP Server
Query SEC EDGAR 10-K, 10-Q, 8-K filings, full-text EFTS search, corporate profiles, and standardized US-GAAP XBRL financial facts with YoY growth via Batch JSON API or Standby MCP Server.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Mutualistic Labs
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
MCP Server for AI Agents: SEC EDGAR Filings & XBRL Financials
An always-on Model Context Protocol (MCP) server and batch Actor for SEC EDGAR: recent company filings (10-K, 10-Q, 8-K, Form 4, 13F), EDGAR full-text search, company profiles and exact XBRL financial facts with year-over-year growth. Built for AI agents (Claude Desktop, Cursor, Windsurf, OpenAI Agents, LangChain), equity research, compliance monitoring, event-driven alerts and financial data pipelines.
No proxies, no browser, no logins, no API keys: only the official, unauthenticated SEC JSON APIs are called (data.sec.gov,
efts.sec.gov, www.sec.gov) with a compliant, identifying User-Agent.
Features
- Four modes:
company_filings,search_filings,company_profile,financial_facts. - Filings of one or many companies (tickers or CIKs, up to 10) with form, date range and keyword filters; every filing carries a direct
https://www.sec.gov/Archives/...document link and the filing index link. - Full-text search across all EDGAR filings (
search_filings), optionally restricted to given companies (CIKs; the bare default["AAPL"]prefill is treated as "not set", so use0000320193or add another company to force an Apple-only search), forms and dates. - Company profiles: CIK, name, tickers, exchanges, SIC, EIN, state of incorporation, fiscal year end, business address, latest 10-K and 10-Q dates and links.
- XBRL financial facts per company and concept with exact values and
yoy_change_pct. - Deterministic de-duplication (
uid), hardmax_itemsandmax_total_charge_usdcaps.
What you get
record_type | Mode | What it is |
|---|---|---|
filing | company_filings, search_filings | One SEC filing (form, dates, items, primary document, XBRL flags, links) |
company_profile | company_profile | One company (identity, tickers, SIC, address, latest 10-K and 10-Q) |
financial_fact | financial_facts | One XBRL fact (concept, unit, value, period, filing, YoY change) |
Endpoints
GET /andGET /health: readiness probe, returns{"status":"ok","actor":"sec-edgar-filings-mcp",...}.POST /mcp: MCP JSON-RPC 2.0 (initialize,ping,tools/list,tools/call).
Standby URL: https://mutualistic-housing--sec-edgar-filings-mcp.apify.actor/mcp (authenticate with your Apify API token).
Input
| Field | Type | Default |
|---|---|---|
mode | company_filings, search_filings, company_profile, financial_facts | company_filings |
companies | string[] of tickers or CIKs, 1 to 10 | none (prefill AAPL; falls back to AAPL). In search_filings they restrict the search to those CIKs, but the bare default ["AAPL"] counts as "not set" (no restriction); use the CIK form 0000320193 or add another company to restrict to Apple |
forms | string[] of form types such as 10-K, up to 20 | all forms |
query | string, max 300 chars (required for search_filings; keyword filter in company_filings) | none |
concepts | string[] of preset keys or XBRL tags, 1 to 10 (mode financial_facts) | ["NetIncomeLoss"] |
taxonomy | us-gaap, dei, ifrs-full (non-preset concepts) | us-gaap |
start_date, end_date | YYYY-MM-DD; filing date for filings, period end date for facts | none |
max_items | integer 1 to 500 | 25 |
max_total_charge_usd | number or null | no cap |
An empty {} input runs: the 25 latest filings of Apple (AAPL). camelCase aliases (startDate, endDate, maxItems,
maxTotalChargeUsd) are accepted. Invalid input is rejected with INVALID_INPUT_ZERO_CHARGE before any network call or charge.
Batch input examples
Latest annual and quarterly reports of three companies:
{"mode": "company_filings", "companies": ["AAPL", "MSFT", "NVDA"], "forms": ["10-K", "10-Q"], "max_items": 30}
Full-text search for 10-K filings that mention a topic:
{"mode": "search_filings", "query": "artificial intelligence", "forms": ["10-K"], "start_date": "2025-01-01", "end_date": "2025-12-31"}
Company profiles:
{"mode": "company_profile", "companies": ["AAPL", "BRK-B", "320193"]}
Revenue and net income with year-over-year change from annual reports:
{"mode": "financial_facts", "companies": ["AAPL"], "concepts": ["Revenues", "NetIncomeLoss"], "forms": ["10-K"], "max_items": 20}
Preset companies and concepts
Companies (tickers are resolved without a lookup request; any other ticker or CIK works too): AAPL, MSFT, NVDA, GOOGL, AMZN,
META, TSLA, BRK-B, JPM, LLY.
Concepts: Revenues (falls back to RevenueFromContractWithCustomerExcludingAssessedTax and SalesRevenueNet), NetIncomeLoss,
OperatingIncomeLoss, Assets, Liabilities, StockholdersEquity, CashAndCashEquivalentsAtCarryingValue,
EarningsPerShareDiluted, CommonStockSharesOutstanding (dei:EntityCommonStockSharesOutstanding or
us-gaap:CommonStockSharesOutstanding). Any other XBRL tag works with taxonomy.
MCP tools
{"mcpServers": {"sec-edgar": {"url": "https://mutualistic-housing--sec-edgar-filings-mcp.apify.actor/mcp","headers": { "Authorization": "Bearer <APIFY_TOKEN>" }}}}
get_company_filings:companies,forms,query,start_date,end_date,max_items(default 10).search_sec_filings:query(required),forms,start_date,end_date,max_items.get_company_profiles:companies.get_financial_facts:companies,concepts,taxonomy,forms,start_date,end_date,max_items.list_preset_companies: no arguments; lists the preset companies and concepts (free).
Example calls:
curl -X POST "https://mutualistic-housing--sec-edgar-filings-mcp.apify.actor/mcp" \-H "Authorization: Bearer <APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_company_filings","arguments":{"companies":["AAPL"],"forms":["10-K"],"max_items":5}}}'
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_sec_filings","arguments":{"query":"artificial intelligence","forms":["10-K"],"max_items":10}}}
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_company_profiles","arguments":{"companies":["AAPL","NVDA"]}}}
{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"get_financial_facts","arguments":{"companies":["AAPL"],"concepts":["NetIncomeLoss"],"forms":["10-K"],"max_items":5}}}
{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"list_preset_companies","arguments":{}}}
Output fields
Filing records:
| Field | Meaning |
|---|---|
record_type, uid | Record kind; deterministic SHA-256 identifier |
cik, company_name, tickers | 10-digit CIK, company name and ticker symbols |
accession_number, form | SEC accession number and form type |
filing_date, report_date, acceptance_datetime | Filing date, period or event date, SEC acceptance timestamp |
act, file_number, film_number | Securities act, SEC file number and film number |
items | 8-K item numbers such as 2.02, 9.01 |
description, primary_document | Document description and primary document file name |
size_bytes, is_xbrl, is_inline_xbrl | Filing size and XBRL flags (submissions data only) |
filing_url, index_url | Direct document link (or the index page when the primary document is not a plain file) and the filing index page |
source | Upstream SEC API |
The filing uid is derived from the CIK, accession number and primary document.
Company profile records:
| Field | Meaning |
|---|---|
record_type, uid | Record kind; deterministic SHA-256 identifier |
cik, company_name, entity_type | Identity |
sic, sic_description | Standard Industrial Classification |
tickers, exchanges, ein | Tickers, listing exchanges (parallel to tickers) and employer identification number |
state_of_incorporation, fiscal_year_end | State or country of incorporation and fiscal year end (MMDD) |
business_city, business_state | Business address |
recent_filings_count | Number of filings in the recent filings list |
latest_10k_date, latest_10k_url, latest_10q_date, latest_10q_url | Filing date and link of the latest 10-K and 10-Q |
sec_browse_url, source | EDGAR company page; upstream SEC API |
Financial fact records:
| Field | Meaning |
|---|---|
record_type, uid | Record kind; deterministic SHA-256 identifier |
cik, company_name | Company |
taxonomy, concept, label | XBRL taxonomy, tag and human-readable label |
unit, value | USD, USD/shares or shares; exact reported value (integers unchanged, decimals rounded half-up to 4 places) |
start_date, end_date | Period; instant facts (balance sheet) have no start_date |
fiscal_year, fiscal_period | Fiscal year and period of the reporting filing, not of the fact period |
form, filed_date, accession_number, frame | Reporting filing and XBRL frame |
yoy_change_pct | Year-over-year change in percent; see below |
source | Upstream SEC API |
The fact uid is derived from the CIK, taxonomy, concept, unit, accession number, start_date, end_date, fiscal_period and frame. It includes start_date, so a 3-month and a 9-month fact of the same filing that share the same end_date stay distinct records.
Example financial fact (shortened):
{"record_type": "financial_fact", "cik": "0000320193", "company_name": "Apple Inc.", "taxonomy": "us-gaap","concept": "NetIncomeLoss", "unit": "USD", "value": 93736000000, "start_date": "2023-10-01", "end_date": "2024-09-28","fiscal_year": 2024, "fiscal_period": "FY", "form": "10-K", "filed_date": "2024-11-01", "yoy_change_pct": -3.36,"uid": "<sha256>"}
Year-over-year rule
yoy_change_pct is matched by period dates, not by fiscal_year (the fiscal year of a filing also covers the comparative periods
it repeats). For each fact the prior-year fact has the same unit, the same kind (instant or duration), a period end 358 to 372 days
earlier and, for durations, a length within 7 days. If several prior facts match, the most recently filed one is used. The result is
(value - prior) / |prior| * 100, rounded half-up to 2 decimals. It is null when no comparable period exists or when the prior value
is zero or negative.
SEC fair access
The SEC asks automated clients to identify themselves and stay below 10 requests per second. This Actor sends the User-Agent
MutualisticLabs-SecEdgarMCP/0.1 (support@mutualisticlabs.com), keeps its own
requests below that rate with a process-wide limiter shared by all clients and concurrent MCP calls (at most 8 requests per second, one
request start every 0.125 s), backs off on 429 and 5xx responses and honours
Retry-After. Data comes straight from the SEC and is not investment advice.
Security and limits
- Allowlisted hosts only: outbound requests go exclusively to
data.sec.gov,efts.sec.govandwww.sec.govover https. Redirects to any other host, non-https redirects, credentials in URLs and non-443 ports are rejected. - SSRF protections: DNS results (and the connected peer address, checked before any body is read) that are loopback, private, link-local, CGNAT, NAT64, 6to4, Teredo, multicast or unspecified are refused. Resolved IP addresses never appear in error messages.
- Bounds: at most 500 items per run, 10 companies and 10 concepts per call, a 120 s global batch deadline, a 45 s deadline per MCP tool call, a 15 s per-request timeout (connect, TLS, headers and body) and a 4 MiB response size cap.
- MCP server: request bodies above 64 KiB return
413,POST /mcprequiresContent-Type: application/json(415otherwise) and at most 8 concurrent tool calls run (503when busy). - Unknown tickers, CIKs or concepts return an error entry for that company or concept; per-company failures never abort other companies.
Pricing
Pay per event: $0.001 per result-item (result-item: one de-duplicated filing, company profile or financial fact, as a dataset
item or an MCP tool result row); the actor-start event is free and list_preset_companies is free. max_items and
max_total_charge_usd are hard caps enforced in code, so a run never charges more than you configure. Invalid input and empty results
are never charged.