FilingFirehose

by jaablon

318 downloads
Not rated
GitHub

About

SEC EDGAR filings parsed and exposed via MCP — body-text-classified 8-Ks (7.3% of recent Item 8.01 filings have buried 1.05/5.02 events the filer didn't report), Schedule 13D/G with 21+ activist filers auto-tagged, S-3/424B5 ATM offering detection. Free public tier covers past 72

Details

Author
jaablon
Downloads
318
Categories
Productivity, Finance, Security

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name FilingFirehose
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

Install via pip install filing-firehose. Instantiate FilingFirehose() without an API key for the free tier (last 72 hours) or with an api_key for the full historical archive. Use methods such as recent_8k(), recent_13d(), and recent_atm() with optional filters.

search_8k_filings

Search recent SEC 8-K filings (current report) from the past 72 hours. Args: items: Comma-separated 8-K item codes to filter on. Examples: '1.05' (cybersecurity), '5.02' (officer departure), '8.01' (other events), '1.01' (material agreement). Leave None for all 8-Ks. suspected_buried_only: If True, return only filings where our body-text classifier flagged a suspected misclassification — i.e. cyber language under Item 8.01 that should have been 1.05, officer-departure language under 8.01 that should have been 5.02. limit: Max results (1-50, default 25). Returns: JSON-formatted list of filings. Each includes: accession_number, company_name, filed_at, filer_reported_items, detected_items, discrepancy_items (in body but not reported), and suspected_buried_events (map of reported→suspected).

search_13d_filings

Search recent SEC Schedule 13D / 13G filings from the past 72 hours. Args: activist: Filter to filings tagged with this activist filer name. Substring match, case-insensitive. Examples: 'Saba', 'Starboard', 'Icahn', 'Elliott', 'Pershing'. min_percent: Minimum percent of class disclosed. include_amendments: Include 13D/A and 13G/A amendments. Default True. include_passive_13g: Include passive Schedule 13G filings. Default False (only active 13D / 13D/A returned). limit: Max results (1-50, default 25). Returns: JSON list of filings with cusip, percent_of_class, aggregate_amount, activist_filers, and an Item 4 purpose excerpt.

search_atm_offerings

Search recent SEC at-the-market (ATM) equity offerings from the past 72 hours. Pulls from S-3 / 424B5 family filings where our parser flagged ATM-offering indicators in the body language. Args: sales_agent: Filter by sales agent name (substring, case-insensitive). Examples: 'Cantor Fitzgerald', 'Jefferies', 'Roth Capital', 'H.C. Wainwright'. min_shelf_million_usd: Minimum shelf size in millions USD. limit: Max results (1-50, default 25). Returns: JSON list with shelf_size_usd, is_atm, sales_agents, use_of_proceeds_excerpt.

get_filing

Fetch one filing by SEC accession number, regardless of recency. Useful when an agent has an accession number from a citation or earlier tool call and needs the parsed details. Args: accession_number: SEC accession in 'XXXXXXXXXX-YY-NNNNNN' format. Returns: JSON for the filing if found in our archive, or {"found": false}.

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "filingfirehose": {
            "filingfirehose": {
                "url": "https://filingfirehose.com/mcp"
            }
        }
    }
}

McpServers

{
    "filingfirehose": {
        "url": "https://filingfirehose.com/mcp"
    }
}

filing-firehose

Python client for the FilingFirehose SEC EDGAR
API — body-text-parsed 8-Ks (with buried-event detection), activist-tagged
Schedule 13D/G filings, and ATM offerings extracted from S-3 / 424B5 prospectus
supplements.

Install

pip install filing-firehose

Quick start

The free public tier returns the last 72 hours of filings — no API key required:

from filing_firehose import FilingFirehose

ff = FilingFirehose()

Recent 8-Ks where the body language flags items the filer didn't report

buried = ff.recent_8k(suspected_buried_only=True, limit=10) for f in buried: print(f"{f.company_name}: filer reported {f.filer_reported_items}, " f"body suggests {f.suspected_buried_events}")

Recent activist 13D / 13G filings

for f in ff.recent_13d(activist="Saba"): print(f"{f.company_name} — {f.percent_of_class}% by {f.activist_filers}")

Recent ATM offerings with shelf size > $50M

for f in ff.recent_atm(min_shelf_million_usd=50): print(f"{f.company_name}: ${f.shelf_size_million_usd:.1f}M via {f.sales_agents}")

For the full historical archive, get an API key at
filingfirehose.com:

ff = FilingFirehose(api_key="ff_live_...")

Search the entire archive for cyber events

for f in ff.search_8k(items="1.05", since="2026-01-01"): print(f.company_name, f.filed_at)

Async

import asyncio
from filing_firehose import AsyncFilingFirehose

async def main():
async with AsyncFilingFirehose() as ff:
filings = await ff.recent_8k(items="1.05,5.02")
for f in filings:
print(f.company_name, f.detected_items)

asyncio.run(main())

Why this client

The wedge: most SEC filings APIs trust the filer-reported item codes on
8-K filings. We body-text-classify every filing and surface a
suspected_buried_events field flagging when the body language doesn't match
the filer's claimed item codes. From a 21-day analysis of 4,251 8-Ks,
7.3% of Item 8.01 filings contain language suggesting a more specific item
should have been used
— including buried cyber incidents (1.05), officer
departures (5.02), and material agreements (1.01).

License

MIT.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.