cyanheads/secedgar-mcp-server
Query SEC EDGAR filings, XBRL financials, and company data via MCP. STDIO or Streamable HTTP.
Changelog
All notable changes to this project. Each entry links to its full per-version file in changelog/.
0.17.0 — 2026-10-26
Publishes the secedgar-guide Agent Skill over MCP, escapes caller and SEC text inside notices, corrects dataframe join-key and TTL descriptions, and moves to mcp-ts-core 0.13.18 and DuckDB 2.
0.16.0 — 2026-10-25 · ⚠️ Breaking
Over-cap limits are served at the cap behind EDGAR_CLAMP_OVERSIZED_LIMITS, 13F-HR/A amendments are composed into secedgar_get_institutional_holdings, and secedgar_dataframe_query now refuses an unqualified current_schema (breaking).
0.15.15 — 2026-10-24
Correct ownership attribution and holdings disclosure, preserve numeric text and fund denominations, and provide holder-search continuation guidance.
0.15.14 — 2026-10-23
A cancelled tool call stops sending SEC requests and a call is bounded by a 40 s SEC failure budget; response bodies are read inside the retry ladder; secedgar_search_filings accepts filed_after or filed_before alone; get_filing section and heading detection fixes.
0.15.13 — 2026-10-18 · 🛡️ Security
get_filing's section lands on body headings ahead of table-of-contents rows and matches 20-F sub-items and NBSP-led 8-K Items; SEC calls that get no HTTP response retry, then fail as retryable sec_unreachable.
0.15.12 — 2026-10-14
compare_companies and get_financials read annual balance-sheet values at fiscal-year ends, get_filing finds more headings and sections, company_search serves filing_limit above 50, and dataframe_query rejects more SQL via mcp-ts-core 0.13.15.
0.15.11 — 2026-10-04
search_filings counts filings rather than matching documents, company names resolve to their exact match, and legacy plain-text filings keep their line structure for outlines and section navigation.
0.15.10 — 2026-10-04
Framework mcp-ts-core 0.13.6 → 0.13.11. Multi-arch Docker images now install each architecture's DuckDB binding without relying on the OTel step (#150) and drop unused musl bindings; tool errors carry their request ID; server.json's HTTP entry selects the HTTP transport.
0.15.9 — 2026-09-25
Annual XBRL values no longer come from a proxy statement's pay-versus-performance figure or a 10-Q's trailing-twelve-month total. Adds ppe_net, pretax_income, and shares_diluted, successor tags for capex and interest_expense, early unknown_concept errors with suggestions, and a taxonomy input on secedgar_fetch_frames.
0.15.8 — 2026-09-24
secedgar_get_insider_transactions takes a filed_after / filed_before window reading Form 4 history back to mid-2003, and secedgar_get_institutional_holdings finds quarters older than the recent submissions window. Fixes fund-ticker resolution after a failed or mirror-served load, deeply nested filings overflowing the stack, and archive paging.
0.15.7 — 2026-09-21
After a 429, calls are refused locally for SEC's cool-down instead of each reaching SEC and restarting its block. company/filed_after/filed_before/forms replace ticker_or_cik/start_date/end_date/form_types, old spellings accepted as aliases. secedgar_dataframe_query fixes a backslash-escaping bug and gains a fuller SQL error contract.
0.15.6 — 2026-09-16 · 🛡️ Security
Adopts mcp-ts-core through 0.13.2: HTTP sessions resolve stateless by default, shutdown closes the EDGAR mirror, and a linear-time SQL comment stripper replaces a regex a crafted query could hang on. Plugin manifests now deliver EDGAR_USER_AGENT correctly, and an empty or placeholder value fails startup instead of running blank.
0.15.5 — 2026-09-09
Registers the gated dataframe-drop tool as discoverable-but-disabled, adds a describe-then-query pointer across every dataframe-producing tool, and fixes secedgar_dataframe_query's row_limit-bound truncation disclosure with a new row_count_capped field.
0.15.4 — 2026-09-09
Fixes secedgar_get_filing's heading outline and section matching: 20-F filings with bare Item markers and running page headers now produce a full outline of all Items and Parts, and section now resolves headings whose whitespace or quote style differs from the caller's input.
0.15.3 — 2026-09-09
Fixes four EDGAR resolution gaps: corporate-suffix name matching, dotted share-class tickers, ticker near-match suggestions, and a 429 that retried into SEC's ten-minute rate-limit block. Adopts mcp-ts-core 0.12.8 plus dependency refresh.
0.15.2 — 2026-09-02
Adopts @cyanheads/mcp-ts-core 0.12.5. An SEC 5xx now classifies as ServiceUnavailable rather than InternalError, a caller disconnect as RequestCancelled, and server identity resolves from the served package instead of the launching client's working directory. No changes to this server's own source.
0.15.1 — 2026-08-22
Adopts @cyanheads/mcp-ts-core 0.12.3: tool inputs are strict, so an undeclared argument key is rejected by name instead of silently dropped. .env.example now defaults MCP_SESSION_MODE to stateless, and the three tools that cap their inline results disclose the cap through enrichment.
0.15.0 — 2026-07-27
Two new tools — secedgar_get_beneficial_owners (SCHEDULE 13D/13G blockholders) and secedgar_get_fund_holdings (NPORT-P fund portfolios) — plus bounded pre-2001 full-text and straddling-range merge for secedgar_search_filings.
0.14.0 — 2026-07-26
Two new tools — secedgar_find_holders (reverse 13F lookup, issuer to the managers reporting it) and secedgar_get_material_events (8-K filings filtered by decoded item code). Series-staleness caveats now cover a current tag whose series simply ends, and ifrs-full stock_based_compensation picks its element per filer by coverage.
0.13.1 — 2026-07-26
revenue no longer resolves through a tag SEC retired in 2018, and any concept falling through to a retired tag says so in caveats. The missing-quarter detector names every absent quarter instead of at most one, binary filing documents are rejected rather than decoded, and ifrs-full coverage goes 3 to 31 of 33 concepts.
0.13.0 — 2026-07-26
Two new tools — secedgar_get_snapshot (one-call company profile) and secedgar_compare_companies (2-10 companies aligned on calendar periods). Frame dedup and fiscal-period caveats move into shared modules, the local mirror now serves companyfacts, and the fiscal-Q4 caveat is corrected and extended to per-filer series.
0.12.5 — 2026-07-26
secedgar_get_filing now renders every document filename into content[] and embeds a categorized catalog in its not-found errors; fetch_frames and get_institutional_holdings gain offset paging; bare-CIK 404s return declared errors instead of a raw SEC URL; the insider tool's Form 3/5 coverage claim is corrected to Form 4 / 4-A.
0.12.4 — 2026-07-09
secedgar_search_filings now serves pre-2001 date ranges (back to 1993) from the SEC archives — entity-scoped submissions history or a quarterly full-index browse — tagging every result row with its source (efts/submissions/full-index); straddling or unscoped pre-2001 full-text ranges are rejected with a recovery hint.
0.12.3 — 2026-07-09
secedgar_company_search pages into the older submissions archive for date-filtered or under-filled form scans and discloses scan depth; secedgar_search_filings adds a query-optional browse mode; secedgar_dataframe_query's non-SELECT rejection now carries a recovery hint; and secedgar://filing-types lists the current SCHEDULE 13D/13G form names.
0.12.2 — 2026-07-09
secedgar_get_institutional_holdings resolves institutional names via EDGAR entity-autocomplete search, reports ambiguous matches instead of guessing, stops leaking the SEC URL on a bare-CIK 404, and routes operating-company CIKs to the right tools; secedgar_company_analysis routes ownership-focused requests through the insider and 13F tools.
0.12.1 — 2026-07-06
Adopts @cyanheads/mcp-ts-core 0.10.14 and refreshes dependencies: a bunfig supply-chain install guard (3-day release-age hold plus the Socket install scanner), an oven/bun:1.3.14 Dockerfile pin with BuildKit install-cache mounts, a SECURITY.md disclosure policy, and .gitattributes normalization.
0.12.0 — 2026-07-02 · ⚠️ Breaking
Breaking: get_financials dataframe columns fiscal_year/fiscal_period renamed to source_filing_fy/source_filing_fp; heading detection covers mixed-case Item/Part headings on styled filings; section-miss errors render the detected outline in the message
0.11.3 — 2026-07-02
Canvas-bridge register_as clash pre-check with contract recovery hints; EFTS degraded-2xx shape guard and typed ticker:/cik: validation in search_filings; insider-transactions canvas scan floor with truthful dataset.truncated; get_institutional_holdings docs drop the unimplemented issuer-to-holders lookup; .env.example dataframe settings
0.11.2 — 2026-07-02 · 🛡️ Security
secedgar_get_filing hardening: accession/CIK validation before network I/O, exhibit filename-fallback classification without headers, sentinel-framed upstream filing text; mcp-ts-core ^0.10.10 + lock re-resolve clears bun audit from 8 vulnerabilities to 0 (hono, js-yaml)
0.11.1 — 2026-06-20
Adopt mcp-ts-core ^0.10.9: dataframe_describe filtered-table binder fix and dataframe_query SELECT-shaped prepare failures now classified invalid_sql with DuckDB binder detail; plugin-manifest devcheck lint, synced skills, dependency refresh
0.11.0 — 2026-06-11
Dataframe-query error reclassification and register_as fix (#52, #53, #54); company_search and search_filings whitespace + pagination fixes (#55, #56, #57, #58); get_filing offset paging, section targeting, and extract cache (#59)
0.10.5 — 2026-06-11
mcp-ts-core ^0.10.6: post-pack bundle cleaner, packaging linter checks 8-9, skill syncs, websiteUrl removed from createApp()
0.10.4 — 2026-06-11
Server identity: name and title now use the machine name secedgar-mcp-server (was 'SEC EDGAR MCP Server')
0.10.3 — 2026-06-11
DataCanvas adoption: framework TTL, denySystemCatalogs, inferSchemaFromRows always-nullable; ctx.enrich.truncated() on 5 list tools; server identity fields; mcp-ts-core ^0.10.1 → ^0.10.5
0.10.2 — 2026-06-08
Fix get_financials frame collisions (Spotify IFRS Revenue 26× undercount), instant-period first-call fallback, fetch_frames no_data for empty tags, dataframe_query structured missing_table/invalid_sql, company_search MF fund tickers on mirror, insider shares_traded now unsigned with direction.
0.10.1 — 2026-06-08 · 🛡️ Security
Security: DataCanvas SQL gate fails closed on non-SELECT statements and denies pragma_* table functions; stringbool env-boolean parsing; .mcpbignore dev-dir anchoring; actionable node-cron peer error.
0.10.0 — 2026-06-08
secedgar_company_search: ETF/fund ticker resolution, former-name lookup (Facebook→Meta, Square→Block), near-match suggestions on zero-result name queries, and robustness fixes for private/pre-IPO filers
0.9.0 — 2026-06-08
Ownership tools now register full parsed results to the canvas; fetch_frames surfaces alternate-definition XBRL tags that cover a meaningful share of filers for the base concept.
0.8.4 — 2026-06-04
get_filing error data now returns categorized documents instead of a flat list; search_filings notes Form 3/4/5 index limitations
0.8.3 — 2026-06-02
Adopt @cyanheads/mcp-ts-core ^0.9.21 — per-request log context fix, secret-stripped error messages, and fail-fast retry behavior
0.8.2 — 2026-06-02
mirror:init/verify/refresh commands ship in the production Docker image; docker exec now a supported lever for mirror bootstrap and re-ingest
0.8.1 — 2026-06-01
search_filings cik:/ticker: now scopes server-side via EFTS ciks param; date/period validators; dataframe_query register_as preserves real DuckDB types; get_financials limit param
0.8.0 — 2026-06-01 · ⚠️ Breaking
get_institutional_holdings: whole-USD market values, distinct-position consolidation, working quarter targeting
0.7.4 — 2026-06-01
Gate cross-company frames on a full-coverage completion marker (falling back to live while the store is partial or re-syncing); fix the companyfacts ingester to checkpoint only after the full archive drains so an interrupted ingest re-streams on the next refresh.
0.7.3 — 2026-06-01
Declare node-cron dependency so EDGAR_MIRROR_REFRESH_CRON works in the published package and Docker image; wrap scheduler init in try/catch so a scheduling fault degrades gracefully instead of crashing startup.
0.7.2 — 2026-05-31
Opt-in local SQLite mirror of company_tickers and XBRL company-facts via MirrorService; routed lookups hit SQLite with live-API fallback. Adds EDGAR_MIRROR_* env vars, mirror:init/refresh/verify scripts, and Node/Bun-only Workers guard.
0.7.1 — 2026-05-30
Empty strings now rejected for required string fields — company/concept on secedgar_get_financials and concept/period on secedgar_fetch_frames return a clean ValidationError instead of reaching the handler.
0.7.0 — 2026-05-30
Insider transactions (Form 3/4/5), institutional holdings (13F), IFRS friendly-name resolution, ambiguous-company guard, and system_catalog_access error contract
0.6.3 — 2026-05-30
enrichment adoption — search/concept tools surface query echoes and empty-result guidance via typed enrichment block
0.6.2 — 2026-05-28 · 🛡️ Security
mcp-ts-core ^0.9.9 → ^0.9.13: HTTP body cap (413), session-init gate, quieter 401/403/400/404 logs, GET /mcp keywords; @biomejs/biome ^2.4.15 → ^2.4.16; plugin metadata files; code-simplifier skill.
0.6.1 — 2026-05-25
mcp-ts-core ^0.9.6 → ^0.9.9: git-wrapup skill, ctx.elicit/ctx.fail/ctx.notifyPromptListChanged/ctx.notifyToolListChanged docs, release artifact verification, structured tag annotation format; @duckdb/node-api ^1.5.3-r.1 → ^1.5.3-r.2; stdio/streamable-http npm keywords added.
0.6.0 — 2026-05-25
Concept catalog 16 → 33; get_financials companyfacts probe on no_concept_data; FY bracket label dropped; get_filing primary_document preserved on exhibit fetches; search_filings form_distribution fixed for forms filter; fiscal_year_end formatted MM-DD.
0.5.2 — 2026-05-23
@cyanheads/mcp-ts-core ^0.9.1 → ^0.9.6. RequestContextLike canvas cast removed. zod added as explicit dependency. manifest.json + .mcpbignore scaffolded for MCPB bundle support. Install badges added to README.
0.5.1 — 2026-05-17
secedgar_fetch_frames flags fiscal-Q4 silent dropout on CY####Q[1-4] periods via a new caveats field. Ticker enrichment now resolves multi-class CIKs to common stock (JPM, BAC, C) instead of preferred-share variants (JPM-PA, BAC-PS, C-PR).
0.5.0 — 2026-05-17 · ⚠️ Breaking
In-conversation SQL analytics over SEC EDGAR. secedgar_search_filings, secedgar_get_financials, and the new secedgar_fetch_frames (renamed from secedgar_compare_metric) now materialize their full upstream response as a DuckDB-backed df_<id> dataframe, queryable via three new secedgar_dataframe_* tools.
0.4.5 — 2026-05-16
Adopt framework ^0.9.1 — server now publishes a top-level instructions orientation string on every MCP initialize response. Definition linting moves to build-time only (lint:mcp / devcheck), no longer gates startup. Devcheck bun outdated parser fix and the 350-char changelog summary cap come along for the ride.
0.4.4 — 2026-05-08
secedgar_search_filings reports form_distribution consistent with total under entity targeting; framework ^0.8.13 → ^0.8.19, Node engine ≥24, schema descriptions tightened across all tools and resources.
0.4.3 — 2026-05-04
secedgar_search_filings adds sort (filing_date_desc default); secedgar_get_filing categorizes documents into primary/exhibits/auxiliary/xbrl from SEC headers and gates XBRL artifacts behind include_xbrl. Closes #3, #5.
0.4.2 — 2026-05-04
Framework bump to @cyanheads/mcp-ts-core 0.8.13; secedgar_get_filing now routes its three contract reasons through ctx.fail in the archive-resolution helper for full lint conformance.
0.4.1 — 2026-04-30
Framework upgrade to @cyanheads/mcp-ts-core 0.8.7 with full typed-error-contract adoption, two domain bug fixes against issues #1 and #2, and skill / script syncs.
0.4.0 — 2026-04-24
Framework upgrade to @cyanheads/mcp-ts-core 0.7.0, shared SEC fetch path with retry on filing document downloads, and the lint-warning cleanup that framework 0.6.16 surfaced.
0.3.0 — 2026-04-20
Framework upgrade, content parity across tools, and cleaner entity names.
0.2.0 — 2026-04-17
Concept discovery, filing lookup resilience, and framework sync.
0.1.11 — 2026-03-30
Dependency updates and package metadata improvements.
0.1.10 — 2026-03-28
Framework upgrade, enhanced skills, and MCP linter improvements.
0.1.9 — 2026-03-24
Description and metadata updates.
0.1.8 — 2026-03-24
Tool annotation improvements and agent protocol updates.
0.1.7 — 2026-03-24
Packaging, documentation, and code formatting cleanup.
0.1.6 — 2026-03-24
Fixes for taxonomy resolution, date validation, HTTP retry resilience, and Bun version bump.
0.1.5 — 2026-03-24
Improved entity-targeted search, better error diagnostics, and documentation overhaul.
0.1.4 — 2026-03-24
Dependency updates and code style fixes.
0.1.3 — 2026-03-24
Data quality and resilience fixes for filing text conversion, XBRL financials, and EFTS search results.
0.1.2 — 2026-03-24
Bug fixes for EFTS full-text search, improved error handling, and full test coverage.
0.1.1 — 2026-03-24
Metadata, documentation, and packaging polish — no functional changes.
0.1.0 — 2026-03-24
Initial release. MCP server for SEC EDGAR — company lookups, filing search/retrieval, XBRL financial data, and cross-company comparison.