Skip to main content

sec_full_text_search next channel

Status: Modified (description-only accuracy fixes; parameters, output shape, and credit cost unchanged) This tool is on the private next MCP channel for allow-listed orgs. When promoted, this file moves to mcp-tools/sec-full-text-search.md.

Search within SEC filing content (the EDGAR full-text index) for specific terms or phrases. This is a thin wrapper around the sec-api.io full-text-search API. It accepts ticker symbols and resolves them to CIKs automatically before querying. Supports AND, OR, NOT, wildcards (*), and exact phrases ("quoted"). Use it when the user wants filings that mention or contain a term/phrase — not to extract a named section ("risk factors", "MD&A") from a specific filing, which is sec_filing_section.

The next variant is a pure description accuracy fix. It drops the false "common financial terms are not indexed" claim (a ticker-scoped query for "revenue" returns real hits), adds a bare-query scoping guardrail (omitting both tickers and formTypes searches the entire ~10,000-result-capped EDGAR corpus — always pass tickers or at least formTypes), and adds a domain→ticker bridge note (this tool accepts tickers only). The parameters, output shape, and credit cost are identical to v1.

Integration required: sec_api Cache schema version: super.getCacheSchemaVersion() + 1 (differs from base — the description-only override still bumps the version per the manifest invariant, so stale v1 cached payloads from the public channel are keyed separately)

Parameters

ParameterTypeRequiredDefaultDescription
querystringOptional"cybersecurity incident"Search query (min length 2). Supports AND, OR, NOT, wildcards (*), and exact phrases ("quoted"). NOT for extracting a named section from a specific filing — use sec_filing_section. Scope broad/common-word queries with tickers or formTypes; a bare query searches the entire EDGAR corpus.
tickersstring[]OptionalFilter by company ticker symbol (e.g. ["MSFT", "AAPL"]). Resolved to CIKs automatically via the sec-api.io Mapping API for real server-side filtering. If resolvedCiks in the response is empty, the ticker(s) could not be resolved and NO filter was applied — results are the full unfiltered corpus. Always check resolvedCiks (and warnings) before trusting results as company-specific. Some foreign/ADR issuers may not resolve.
formTypesstring[]OptionalFilter by SEC form type (e.g. ["8-K", "10-K", "20-F"]). Recommended for wildcard queries to reduce noise. Matching is family-based, not exact: ["10-K"] also returns 10-K/A and NT 10-K; ["8-K"] also returns 8-K/A and CORRESP. Post-filter on each result's formType if you need exact types. Note: sec_filing_section calls this concept filingType — a singular enum string, not an array.
startDatestringOptional30 days agoStart date (YYYY-MM-DD). For annual filings (10-K, 20-F, 40-F) pass "2020-01-01" — the 30-day default misses most annual reports.
endDatestringOptionaltodayEnd date (YYYY-MM-DD).
pagestringOptional"1"Page of results (positive integer string). Each page returns up to 100 filings. Use "2", "3", etc. to paginate.

Response Format

{
"total": 87,
"query": "revenue",
"warnings": [
"Only 1 of 2 tickers resolved to a CIK (resolvedCiks: 0000789019); unresolved tickers were dropped from the filter."
],
"filings": [
{
"accessionNumber": "0000789019-24-000123",
"formType": "10-K",
"filedAt": "2024-07-30",
"companyName": "MICROSOFT CORP",
"ticker": "MSFT",
"cik": "789019",
"filingUrl": "https://www.sec.gov/Archives/edgar/data/789019/000078901924000123/0000789019-24-000123-index.htm",
"description": "Annual report"
}
],
"searchParams": {
"formTypes": ["10-K"],
"tickers": ["MSFT", "APPL"],
"resolvedCiks": ["0000789019"],
"startDate": "2020-01-01",
"endDate": "2026-08-12",
"page": "1"
}
}

Response fields

FieldMeaning
totalTotal number of matching filings across all pages. Approximate at the ~10,000-result cap when the query is unscoped.
queryThe search query that was executed.
warningsNon-fatal advisories. Populated when a ticker did not resolve (so no company filter was applied), when only some tickers resolved, or when zero filings matched. Empty/absent means no advisories.
filingsUp to 100 matching filings for this page.
filings[].accessionNumberSEC accession number.
filings[].formTypeSEC form type (10-K, 10-Q, 8-K, 20-F, etc.).
filings[].filedAtFiling date (YYYY-MM-DD).
filings[].companyNameCompany name (nullable).
filings[].tickerStock ticker (null for foreign or CIK-only filers).
filings[].cikSEC Central Index Key.
filings[].filingUrlDirect URL to the SEC filing.
filings[].descriptionFiling description (nullable).
searchParamsThe parameters sent to the API.
searchParams.formTypesForm types applied to the query.
searchParams.tickersInput tickers.
searchParams.resolvedCiksCIKs resolved from tickers and passed to the API. Empty means no ticker filter was applied.
searchParams.startDateEffective start date (YYYY-MM-DD).
searchParams.endDateEffective end date (YYYY-MM-DD).
searchParams.pagePage returned.

Example Usage

{
"tool": "sec_full_text_search",
"parameters": {
"query": "\"material weakness\"",
"tickers": ["MSFT"],
"formTypes": ["10-K"],
"startDate": "2020-01-01"
}
}
  • company_enrich — general company background (revenue, employees, technographics); the next-channel rename of company_research.
  • web_search — non-SEC web info, and one way to resolve a domain or company name to a ticker.
  • company_firmographic — resolve a domain/name to a ticker before searching (it does not itself return filing text).

Changelog

2026-08-12 — Description accuracy fixes (PR 1/2)

Availability: live on next only (allow-listed orgs via POST /api/mcp/next). This entry graduates to the public channel when promoted in PR 2/2.

Why this changed: A live audit found the tool description steered models incorrectly. It claimed common financial terms ("revenue", "earnings") are "not indexed and return zero results", but a ticker-scoped query for "revenue" returned 87 real hits — so models avoided valid, high-value queries. Separately, omitting both tickers and formTypes silently searches the entire EDGAR corpus and returns a capped ~10,000-result flood of unrelated issuers, with no guardrail in the description. The stale "SAP may not resolve" example no longer reproduces (SAP resolves cleanly).

What changed

  • Removed the false "common financial terms are not indexed" claim. The claim was asserted in both the main description and the query param describe(). Both are reworded to drop it — ticker/date-scoped queries for common financial terms do return results.
  • Added a bare-query scoping guardrail. The description now warns that omitting BOTH tickers and formTypes searches the entire public EDGAR corpus and can return a capped ~10,000-result flood (the total is approximate at that cap, not a true count), and instructs callers to always pass tickers (preferred) or at least formTypes unless a cross-company sweep is intended.
  • Added a domain→ticker bridge note. The tool accepts tickers only, not domains. The description now tells callers to resolve a domain/name to a ticker first (via web_search or company_firmographic) and notes that company_firmographic does not itself return filing text.
  • Removed the stale SAP/LVMH resolution caveat. The specific "some foreign/ADR issuers (e.g., SAP, LVMH) may not resolve" example is replaced with generic "some foreign/ADR issuers may not resolve — always check resolvedCiks" guidance, since the named tickers now resolve.
  • Retargeted the company-background pointer to company_enrich. The "for general company background use company_research" pointer now names company_enrich, matching the next-channel rename of that tool.

What stayed the same

  • All parameters (query, formTypes, tickers, startDate, endDate, page) are unchanged.
  • Output shape (total, query, warnings, filings[], searchParams) is unchanged.
  • Tool key (sec_full_text_search), credit cost, and the sec-api.io upstream are identical to v1.
  • Cache schema version is super.getCacheSchemaVersion() + 1 — required by the manifest invariant even for a description-only override.