MBB Decks
Generate consulting-grade .pptx decks from a JSON spec. Encodes the MBB house-style rules: action-title storyline, six-section structure, MECE bullets, citation discipline, and a navy-and-white editorial visual system.
When to use
- User asks for an MBB deck, McKinsey-style deck, consulting deck, board pre-read, executive readout, market entry deck, due diligence deck, recommendation deck, or strategy presentation.
- User provides analysis that needs to be turned into slides for a non-technical executive audience.
- User wants a real .pptx file, not a Markdown outline.
Workflow: ghost deck first, expand second
Do NOT skip the ghost-deck step. It is the single biggest quality lever.
- Verify renderer dependencies (first run only). Before producing any deck, confirm Python 3.9+ and
python-pptxare installed by running:
If this prints a version, skip to step 1. If it errors withpython3 -c "import pptx; print(f'python-pptx {pptx.__version__} on Python {__import__(\"sys\").version.split()[0]}')"ModuleNotFoundError: No module named 'pptx', tell the user:The renderer needs
python-pptx. Runpip install python-pptxin your terminal, then say "ready" and I'll continue. Wait for the user to confirm before proceeding. The build script also fails gracefully with the same install message if you skip this check, but checking up front gives a cleaner experience. - Ghost deck. Produce only the action titles for every slide (cover, executive summary headline, agenda items, every content slide's action title, recommendation headline). Read them top to bottom as a paragraph. They must form one coherent argument: situation → complication → resolution, or claim → evidence → recommendation.
- Confirm with the user. Show the ghost deck. Ask: "Does this storyline land? Anything to add, cut, or reorder before I expand?" Wait for confirmation.
- Expand. Fill in bullets, charts, footnotes, sources. Keep each slide MECE under its action title.
- Render. Write the JSON spec to disk and call
scripts/build_deck.py.
Deck structure (six sections)
Hard cap: 15 slides for sections 1 to 5. Appendix is unbounded.
| # | Section | Notes |
|---|---|---|
| 1 | Cover | Title, subtitle, author, organization. Blank theme. |
| 2 | Executive summary | One headline that answers "so what." Three to five MECE bullets. |
| 3 | Agenda | Two to four sections. Section titles match the dividers. |
| 4 | Sections | Each begins with a divider slide (number + title). Two to four content slides per section. |
| 5 | Recommendation | Headline + action table (Owner / Action / Outcome). Action table is mandatory. |
| 6 | Appendix | Optional. Backup detail and supporting analysis. Same content slide format. |
Action title rules
Every slide except cover, dividers, and appendix divider has an action title. The action title carries the meaning. The body proves it.
- One full sentence, 10 to 15 words. Subject + verb + claim.
- Specific. "Vietnam middle-class spending grows 7% CAGR through 2030" beats "Market is attractive."
- Stand-alone. A reader skimming only the action titles must understand the argument.
- Causal where possible. "X drives Y" beats "X and Y."
- No questions, no labels. "Market sizing" is a label, not an action title. Replace with the finding.
Read all action titles in sequence before writing any body content. If the sequence does not tell a coherent story, fix the storyline before expanding.
MECE bullets
Each slide has 3 to 5 bullets max. They must be:
- Mutually exclusive. No overlap.
- Collectively exhaustive. No obvious gap under the action title.
- Parallel structure. Same grammatical pattern across bullets on a slide.
- Concrete. Numbers, dates, named entities. "Three local partners screened" beats "Several partners considered."
Visual system
Defaults are encoded in scripts/build_deck.py. Do not override unless the user explicitly asks.
| Element | Specification |
|---|---|
| Background | White #FFFFFF |
| Headlines | Georgia, deep navy #051C2C |
| Body text | Calibri, near-black #1A1A1A |
| Accent | Electric blue #2251FF, used sparingly for rules and section numbers |
| Gridlines, dividers | Light grey #E5E7EB |
| Footnotes, sources, page numbers | Calibri 8pt, mid-grey #949BA8 |
| Slide size | 16:9, 13.333" × 7.5" |
| Margins | 0.5" left and right |
| Page number | Lower right, format Page X / Y |
| Date in footer | Never |
| Icons | Never, unless user explicitly requests |
Chart families
Pick the chart that matches the claim in the action title.
| Action title verb | Chart family |
|---|---|
| "Grows," "declines," "trended" | Column or line |
| "Composed of," "share of" | 100% stacked column or pie (pie used sparingly) |
| "Higher than," "ranks first" | Bar (horizontal) sorted by value |
| "Drives," "explains" | Waterfall or stacked bar |
| "Correlates with" | Scatter |
| "Builds from X to Y" | Waterfall |
The script currently renders column-clustered charts cleanly. For other chart types, fall back to bullets and describe the data in prose, then add the chart in PowerPoint manually OR extend the script.
Citation format
- Inline marker in body text:
[1],[2], etc., when a specific number or claim needs attribution. - Source line at the bottom of the slide:
Source: [text](url); [text](url). Use markdown-style[text](url)syntax so each source is rendered as a clickable hyperlink in the.pptx. Multiple sources separated by semicolons. Plain text without(url)still works for sources that have no public URL. - Footnote line above the source: explanatory note about a number (e.g., "Excludes Singapore"). Distinct from source.
- No source line if the slide makes no specific data claim.
Data sourcing rules (critical)
The skill is only as credible as its numbers. These rules apply to every chart, every bullet, every claim with a number in it.
Always use the current year
Today's date is available in your runtime context. Use it.
- For historical data: cite the most recent available release. If a 2026 dataset exists, do not cite the 2023 version.
- For forward-looking projections: forecast labels should start from the current year forward. If today is in 2026, forward years are
2026E,2027E,2028E. Never label a past year asE(estimate). - For "as of" qualifiers in footnotes: say "as of Q[current quarter] [current year]", not a stale date.
Use only authoritative, recognized sources
A short non-exhaustive list of sources Claude should reach for, by domain:
| Domain | Authoritative sources |
|---|---|
| Macro and trade | World Bank, IMF, OECD, BIS, UN ComTrade, WTO |
| Cloud and AI infrastructure | Synergy Research Group, IDC, Dell'Oro Group, Gartner, JLL Data Center Outlook, Structure Research |
| Energy and climate | IEA, BloombergNEF, EIA, Lazard LCOE, NREL ATB, Wood Mackenzie |
| Financial markets | Bloomberg, S&P Global, Refinitiv (LSEG), FactSet, Capital IQ, PitchBook, Preqin |
| Consulting/strategy reports | McKinsey Global Institute, BCG, Bain (publicly cited), Oliver Wyman |
| Consumer | Euromonitor, Nielsen, Kantar, eMarketer, Statista |
| Public companies | Company 10-K, 10-Q, S-1, earnings transcripts (SEC EDGAR) |
| Regulatory and policy | Federal Reserve, BLS, BEA, ECB, EU Commission, regulator filings |
Do NOT use: random blog posts, AI-generated summaries, paywalled content without a verifiable cite, or "Statista projections" as the only source for a numeric claim.
Every source needs a clickable URL when one exists
Format: Source: [BloombergNEF Energy Transition Investment Trends, 2025](https://about.bnef.com/energy-transition-investment/); [IEA World Energy Outlook, 2024](https://www.iea.org/reports/world-energy-outlook-2024)
The build script automatically:
- Rende