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].
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:
- What does the company sell, to whom?
- How does it deliver — physical, digital, marketplace, services-led?
- 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 viafinancial_trendsif 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 / LowStopping 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_briefreturns "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.
What MCP-grounded 10-K Speedrun adds
| Speedrun element | Without MCP | With MCP |
|---|---|---|
| Latest 10-K accession | Approximate / outdated | company_filings returns the actual most recent annual |
| Headline financials | Often from a stale training snapshot | company_brief returns the period-end figures |
| YoY revenue story | Generic ("revenue grew due to strong demand") | filing_section(mdna) returns management's actual explanation |
| Risk factors | Generic boilerplate the LLM remembers | filing_section(risk_factors) returns the year's specific list |
| Capital allocation | Vague directional language | MD&A "Liquidity" section has exact capex / dividend / buyback dollars |
| Post-10-K events | Guesswork | material_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.
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)
- 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.
- 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.
- 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.
Related
- 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.