edgar_filing_text

Pack: edgar · Connect: https://pipeworx.io/mcp (see Connect below for a single-pack URL)

No MCP client? Call it directly: GET https://gateway.pipeworx.io/v1/tools/edgar_filing_text for the schema, then POST the same URL with its arguments for the data.

The full text of an SEC filing’s main document, HTML stripped to clean plaintext.

Tool description as the model sees it

AUTHORITATIVE full text of a SEC filing’s primary document (10-K / 10-Q / 8-K body), HTML stripped to clean plaintext — the source for disclosures that live in prose, not XBRL: going-concern language, ATM / at-the-market equity facilities, committed-equity share caps, public-float figures, subsequent events, the liquidity footnote, and MD&A KPIs XBRL never tags (test volume, units shipped, subscriber counts, same-store sales). Pass an accession (from edgar_search_filings / edgar_company_filings) plus the filer’s ticker or CIK; OR omit accession and pass ticker + form_type to auto-resolve the latest matching filing. For a specific fact inside a long filing, pass search (a word or exact phrase, e.g. “tests processed” or “processed approximately”) instead of paging blind — it scans the WHOLE document (before any offset/max_chars windowing) and returns every matching passage with surrounding context and its own offset in the document, so a KPI ~100k characters in is found in one call instead of paging through max_chars windows by hand. A zero-match search is a real answer (the filing does not use that exact wording) — retry with a shorter or different phrase rather than assuming the tool failed. A search response carries ONLY the matched passages, so it reports returned_chars against total_chars and sets truncated:true whenever those differ — read a figure’s absence from it as “the phrase did not match there”, never as “the filing does not say it”, and re-read without search (or at a passage offset) to confirm. (Do not read search.truncated as a completeness signal: it is about the SEARCH — false means every distinct match location was returned — and is routinely false on a response holding a third of the document.) For a question asking two facts from the same filing (“revenue and test volume in the latest 10-Q”), pass search as |-separated phrases (e.g. “revenue|tests processed”) to get both in this one call under searches[] — and when a phrase names a financial total (revenue, net income, EPS, …), the matching XBRL figure for this exact accession comes back under xbrl even if that total never appears as an absolute number in the prose (common: filings often state only the growth delta/percentage in text). Optionally set section to return just one part (going_concern | liquidity | capital_resources | subsequent_events); search runs within that slice when both are given. Large docs (a 10-Q is ~100k+ chars of text) are PAGED, not spilled, when search is not used: the result caps at max_chars (default 50000) from offset, and returns truncated + next_offset — pass next_offset back as offset to read the next window. An especially large filing (e.g. an S-1 with heavy inline-XBRL tagging can exceed 10MB of raw HTML) is also capped on the READ side — the response sets raw_truncated:true when only the first portion of the document was read at all, which bounds how far offset can page (and how far search can scan) and can make a late section or search term come back not-found even though it exists further in. Use for “does $TICKER disclose substantial doubt / going concern”, “what ATM facility does $TICKER have”, “read the liquidity section of the latest 10-Q”, “how many tests did $TICKER process this quarter”. For the list of documents/exhibits in a filing use edgar_filing_documents; for structured financial numbers use edgar_company_concept.

Parameters

NameTypeRequiredDescription
accessionstringnoSEC accession number, dashed or not (e.g. “0001683168-26-003909”). Omit to auto-resolve the latest filing of form_type for the given ticker/cik — the response then says accession_source:"auto_selected" and lists under auto_selected.candidates the other filings you might have meant. If the question names WHICH filing (a date, “the September 29 8-K”), pass filed or an accession instead of relying on that choice.
filedstringnoOnly consider filings filed on this date, in this month, or in this year — “2026-09-29”, “2026-09”, “2026” (US spellings “09/29/2026” and “September 29, 2026” accepted). Pass this whenever the question names a date (“Tesla’s September 29 2026 8-K”): without it the NEWEST filing of that form is read, and for an 8-K that is routinely a different filing — verified live 2026-10-18, the newest TSLA 8-K was six days later, 3,061 chars, and contained none of the credit-facility figures asked about.
filing_datestringnoAlias for filed.
tickerstringnoFiler ticker (e.g. “ACTU”). Provide this OR cik. ONLY pass a ticker you are CERTAIN of — a wrong remembered ticker silently retrieves a DIFFERENT company’s filing as a clean success (a “SpaceX” question filled with SPCE returns Virgin Galactic’s S-1). For a recent IPO or any uncertain ticker, resolve first: edgar_company_filings accepts the company NAME and returns the cik — pass that cik here.
cikstringnoFiler CIK number (e.g. “1652935”). Provide this OR ticker.
form_typestringnoWhen accession is omitted, the form type of the latest filing to fetch — “10-K”, “10-Q”, “8-K”, “DEF 14A”, etc. For “the most recent 10-K OR 10-Q” (or any “whichever of these is newer” question), pass a |-separated SET, e.g. “10-K|10-Q” — do NOT guess a single type (“10-K” by habit skips a newer 10-Q) and do NOT omit this field to get “any type”, since a company files far more 8-Ks/Form 4s/Form 144s between annual or quarterly reports than it files the reports themselves and an empty form_type returns the single most recent filing of ANY kind (verified live 2026-09-25, fleet #2450: NTRA’s single most recent SEC filing was a Form 144 insider-sale notice, filed weeks after its real 10-Q and completely unrelated to the question asked).
sectionstringnoReturn only this section (located by heading). Omit for the whole document. Unmatched sections fall back to the whole document (section_found:false).
max_charsnumbernoMax characters to return in this page (1000–100000, default 50000). Doc text past this is available via next_offset.
offsetnumbernoCharacter offset to start from (default 0). Pass the prior result’s next_offset to page forward.
searchstringnoFind a specific fact instead of paging blind. Pass a short 2-4 word phrase likely to appear VERBATIM in the prose (“processed approximately”, “tests processed”, “going concern”) rather than restating the question. Case-insensitive substring match over the WHOLE document text (or the whole section slice), run BEFORE max_chars/offset windowing; returns matching passages (context + their own offset) instead of the paged text, ranking passages with a nearby figure first. If a multi-word phrase has no verbatim match, it falls back to the phrase’s individual words and returns the passages holding the most of them (search.match_mode “words”) — read those passages for the fact rather than treating them as confirmed. Use a returned offset with a follow-up call (no search) to read more surrounding text. For TWO OR MORE facts from this same filing in one call, separate phrases with | (e.g. “Signatera revenue|tests processed”) — each is searched independently and reported under searches[], keyed by phrase, instead of the singular search. This is the way to answer a compound question (“what was revenue AND test volume in the latest 10-Q”) without a second call. Note: a phrase naming a financial TOTAL (revenue, net income, EPS, assets, cash, gross/operating profit, long-term debt, stockholders equity, shares outstanding) often has NO verbatim match at all, because filers frequently state only the growth delta/percentage in prose and report the actual total exclusively in XBRL — when a phrase names one of these, the response also attaches that concept’s value for THIS SAME accession under xbrl (sourced like edgar_company_concept, not text-matched), so you don’t need a separate edgar_company_concept call just to get the number the text search alone would report as a false “not found”. Accepted aliases: contains, find, phrase.
containsstringnoAlias for search.
findstringnoAlias for search.
phrasestringnoAlias for search.
ticker_or_cikstringnoAlias for ticker / cik — the single-argument spelling edgar_company_filings and edgar_insider_transactions use. Takes either a ticker or a CIK.

Example call

Arguments

{
  "ticker": "ACTU",
  "form_type": "10-Q",
  "section": "liquidity"
}

curl

curl -X POST https://gateway.pipeworx.io/edgar/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"edgar_filing_text","arguments":{"ticker":"ACTU","form_type":"10-Q","section":"liquidity"}}}'

TypeScript (@pipeworx/sdk)

import { Pipeworx } from '@pipeworx/sdk';
const pipeworx = new Pipeworx();

const result = await pipeworx.call('edgar_filing_text', {
  "ticker": "ACTU",
  "form_type": "10-Q",
  "section": "liquidity"
});

More examples

{
  "accession": "0001683168-26-003909",
  "cik": "1652935",
  "section": "going_concern",
  "max_chars": 30000
}
{
  "ticker": "NTRA",
  "accession": "0001628280-26-054525",
  "search": "processed approximately"
}

Connect

Add this to your MCP client config — every tool in the catalog, including this one — or use one-click install buttons:

{
  "mcpServers": {
    "pipeworx": {
      "url": "https://pipeworx.io/mcp"
    }
  }
}
Connect to just the edgar pack
{
  "mcpServers": {
    "edgar": {
      "url": "https://gateway.pipeworx.io/edgar/mcp"
    }
  }
}

See Getting Started for client-specific install steps.

Regenerated from source · build October 22, 2026