Read · Section 01

10-K Speedrun — Load-Bearing Facts of Any Annual Report in 5 Minutes

Six-step workflow for triaging a 10-K fast — business, numbers, real risks, capital allocation, post-10-K 8-Ks — grounded in primary-source MCP fetches.

10-K Speedrun — Get the Load-Bearing Facts of Any Annual Report in 5 Minutes

A reading framework for getting through any 10-K fast without skipping what actually moves the stock. Pulls only the sections that change between filings — business overview, MD&A numbers, real risk factors, capital allocation — and skips the boilerplate. Designed for analysts triaging a watchlist, not for full-bench fundamental work.

Why this works with edgar.tools MCP

A 10-K is 80,000+ words. Most of it is recycled SEC-mandated boilerplate the issuer changes once a decade. The load-bearing parts — the MD&A narrative, the year's specific risk factors, the capital-allocation paragraph — change every year and are buried in different places.

Vanilla LLMs handle this by summarizing whatever the model remembers, which means stale or invented numbers and a "summary" that smooths over the parts that matter. With edgar.tools MCP, every section is fetched as primary-source text on demand:

  • company_filings — locate the latest 10-K (and the prior one, for YoY framing).
  • company_brief — one-call profile: revenue, net income, OCF, assets, equity, sector, exchanges, top officers, recent 8-K events, insider sentiment.
  • filing_section (business_overview) — Item 1, the only authoritative description of what the company actually does.
  • filing_section (mdna) — Item 7, the year's narrative on results + liquidity + capital allocation. The single highest-density section.
  • filing_section (risk_factors) — Item 1A, ranked by what's actually new vs. boilerplate.
  • material_events — recent 8-K item codes for context the 10-K doesn't yet reflect.

The speedrun grounds every claim in a fetchable section of a specific accession. No invented EPS, no hallucinated risk factors, no "they recently announced" referencing a press release that never existed.

How to use

Copy the framework below into your Claude / ChatGPT / Gemini conversation. With edgar.tools MCP connected, the model will call the tools it needs. Then ask:

Run the 10-K Speedrun on [TICKER].
Prompt — paste this into Claude, ChatGPT, or Gemini

The framework (v1.0)

You are a buy-side analyst triaging a watchlist. The user has handed you a ticker. Your job is to produce a one-page brief in under 5 minutes by pulling only the sections that matter and skipping the parts that don't.

Non-negotiables

  • No invention. Every dollar amount, percentage, and quoted phrase must come from a tool result with an accession number.
  • If a number isn't in the filings, write UNKNOWN — never approximate.
  • Use the latest 10-K. If the latest annual is a 20-F or 40-F, name the form explicitly.
  • Quote sparingly. Synthesize in your own words and cite the section.

Workflow (ordered, mandatory)

Step 1 — Locate the filing

Call company_filings({ company: "[TICKER]", form: "10-K", limit: 3 }). Pin the most recent accession. Note the filing date and the fiscal-year-end period the 10-K covers.

Step 2 — Business in 3 sentences

Call filing_section({ accession, section: "business_overview" }). Synthesize a 3-sentence summary that answers:

  1. What does the company sell, to whom?
  2. How does it deliver — physical, digital, marketplace, services-led?
  3. What's the segment / geographic structure?

Do NOT lift the company's marketing language ("leading provider of innovative solutions"). Translate.

Step 3 — Numbers that matter

Call company_brief({ company: "[TICKER]" }). Pull and surface:

  • Revenue + YoY % (from the brief's financials.revenue + the prior year via financial_trends if needed)
  • Net income + margin
  • Operating cash flow + OCF margin
  • Total assets + total equity
  • Fiscal year end + period covered

Then call filing_section({ accession, section: "mdna" }). From the MD&A specifically extract:

  • The 2–3 sentences the company itself uses to explain the YoY revenue change (mix, pricing, volume, FX, M&A?)
  • Margin movement (gross + operating) with the basis-point delta and the company's stated drivers
  • The single largest cost / expense story of the year

Step 4 — The risks that actually matter

Call filing_section({ accession, section: "risk_factors" }). The 10-K dumps 30–60 risk factors. Most are boilerplate. Identify the 3 that are genuinely load-bearing — i.e., the ones where the answer to "is this getting worse this year?" would change your view. Heuristics:

  • New or rewritten risks (compare to the prior 10-K when possible — different phrasing means management decided it mattered)
  • Risks naming specific dollar amounts, dates, lawsuits, regulators, or counterparties
  • Risks tied to the company's MD&A drivers (e.g. if margin compression was the story, the input-cost risk is load-bearing)

For each, write 1 sentence on why it could break the thesis — not a paraphrase of the risk factor.

Step 5 — Capital allocation snapshot

From the MD&A's "Liquidity and Capital Resources" subsection (already fetched in Step 3), extract:

  • Capex (actual + planned next year)
  • Dividends paid (regular + any special)
  • Share repurchases (dollar amount + average price)
  • Debt issued / repaid
  • Net cash position (cash + short-term investments)

State whether capital is being returned, reinvested, or hoarded — and at what pace.

Step 6 — Recent activity (post-10-K context)

Call material_events({ company: "[TICKER]", days: 90 }). Note any 8-K items the 10-K doesn't reflect:

  • 5.02 (executive transitions)
  • 4.02 (restatements) — material
  • 2.02 (earnings releases newer than the 10-K)
  • 8.01 (other material events)

If high_impact_items is empty, say so explicitly.

Required output

Produce a one-page brief in this exact structure:

[TICKER] — 10-K Speedrun
[Form] · Filed [date] · FY[year] ending [period_end]
Accession: [link to SEC EDGAR index]

BUSINESS (3 sentences, your own words)

NUMBERS
  Revenue: $X (±Y% YoY)
  Net income: $X (Z% margin)
  OCF: $X (W% margin)
  Total assets / equity: $X / $X

YoY STORY (from MD&A, 2-3 sentences)

THE 3 RISKS THAT MATTER
  1. [Risk] — Why it matters: [1 sentence]
  2. [Risk] — Why it matters: [1 sentence]
  3. [Risk] — Why it matters: [1 sentence]

CAPITAL ALLOCATION
  Capex: $X (planned $Y next year)
  Dividends: $X (special: yes/no)
  Buybacks: $X at avg $Y/share
  Net cash position: $X
  Stance: [returned / reinvested / hoarded]

POST-10-K (last 90 days, from 8-Ks)
  - [Item code] [date]: [one-line summary]
  - (or "no high-impact items")

CONFIDENCE: High / Medium / Low

Stopping conditions

  • If the latest annual is a 20-F filed by a foreign issuer, the XBRL financial-trends path may be empty. Use financial_snapshot + the MD&A narrative for numbers; mark Confidence: Medium.
  • If company_brief returns "ambiguous", pick the entity from the candidates that matches the ticker, then proceed.
  • If the company has filed an 8-K Item 4.02 (restatement) in the last 90 days, stop the speedrun and flag it — the 10-K's numbers are in flux.
Then askRun this on COST.

What MCP-grounded 10-K Speedrun adds

Speedrun elementWithout MCPWith MCP
Latest 10-K accessionApproximate / outdatedcompany_filings returns the actual most recent annual
Headline financialsOften from a stale training snapshotcompany_brief returns the period-end figures
YoY revenue storyGeneric ("revenue grew due to strong demand")filing_section(mdna) returns management's actual explanation
Risk factorsGeneric boilerplate the LLM remembersfiling_section(risk_factors) returns the year's specific list
Capital allocationVague directional languageMD&A "Liquidity" section has exact capex / dividend / buyback dollars
Post-10-K eventsGuessworkmaterial_events returns the 8-K item codes with dates

The speedrun is the recipe most worth running on companies the LLM "already knows" — that's where its memorized numbers are most likely to be stale or wrong.

Sample output structure

A complete speedrun on COST (Costco Wholesale, FY25 10-K filed October 8, 2025) — a mature US-listed warehouse retailer — looks like the preview below.

Sample LLM output — what FORGE returnsPreview

COST — 10-K Speedrun

Form 10-K · Filed 2025-10-08 · FY2025 ending 2025-08-31 Accession: `0000909832-25-000101`

Business. Costco runs membership warehouse clubs and an e-commerce business selling a deliberately limited assortment (food, fresh, non-foods, Kirkland Signature private label) at very low markup, supplemented by ancillary services (gas, pharmacy, optical, travel). Distribution is physical warehouses + online across North America, Europe, Asia, Australia, and New Zealand. Three segments: U.S., Canada, Other International.

Numbers (from company_brief + mdna)

  • Revenue: $275.2B (membership fees $5.3B; net merchandise sales $269.9B, +8% YoY)
  • Net income: $8.10B ($18.21 EPS diluted, +10% YoY from $16.56)
  • OCF: $13.34B (vs. $11.34B prior year)
  • Total assets / equity: $77.1B / $29.2B

YoY story (from MD&A). Net sales grew 8% — comparable sales +6% (shopping frequency +5%, average ticket +1%), plus 24 net new warehouses. Gross margin expanded 20 bps to 11.12%, driven by core-merchandise mix (fresh foods + co-brand credit card) and partially offset by a LIFO charge. SG&A deleveraged 11 bps to 9.25%. Membership fee revenue grew 10% on the September 2024 fee increase and new sign-ups; renewal rates held at 92.3% (US/Canada) and 89.8% (worldwide).

The 3 risks that matter (from risk_factors, filtered)

  1. Tariff exposure on imported merchandise — MD&A names this explicitly as a current pressure ("higher tariffs are more likely to adversely impact rather than improve our results"). Why it matters: low merchandise markup means modest input-cost increases compress operating margin disproportionately.
  2. Membership renewal rate decay — Worldwide renewal is already 250 bps below US/Canada (89.8% vs 92.3%), and the gap is widening as international + digital-promotional members enter the pool. Why it matters: membership fees are >50% of operating income; renewal decay is a slow-burning solvency-of-the-flywheel risk.
  3. Concentrated geographic exposure to the US — The 10-K segments break out US separately; international remains the higher growth-rate engine but on a smaller base. Why it matters: a US consumer slowdown affects the largest segment with the least offset.

Capital allocation (from MD&A "Liquidity")

  • Capex: $5,498M in FY25, planned $6.0–6.5B in FY26 (~35 new warehouses)
  • Dividends: $2,183M ($4.92/share); April 2025 raise to $1.30/qtr (+12%). FY24 included a $15/share special ($6.66B).
  • Buybacks: $903M at avg $957.66/share (943k shares); $1,962M remaining under the $4B authorization through Jan 2027
  • Net cash position: cash + short-term investments $15.28B (vs. $11.14B prior year)
  • Stance: reinvested. Capex outpaces buybacks ~6×; the buyback program exists mostly to neutralize SBC-related share count drift, not to compound EPS.

Post-10-K (last 90 days, from material_events)

  • 8-K 2.02 + 9.01 (2025-12-11, 2026-03-05): Q1 + Q2 earnings releases
  • 8-K 5.02 (2025-10-20): officer / director matter
  • 8-K 5.07 (2026-01-21): annual-meeting voting results
  • No 4.02 restatements; no high-impact items flagged

Confidence: High All numbers pulled from the FY25 10-K MD&A and company_brief. Risk-factor selection is judgment; the underlying section text is verbatim from the filing.

Actual output will vary by ticker; this shows the structure and density the speedrun produces when grounded in MCP.

  • F.O.R.G.E. Framework — when the speedrun makes you want to go deeper on quality/dilution dynamics for a SaaS or compounder.
  • 8-K Event Triager — for the post-10-K 8-K stream when more than a few items fired in the last 90 days.
  • Risk Factors YoY Diff — when "what changed in Item 1A this year" is the actual question, not a triage pass.