Mbb Decks logo

Mbb Decks

Community
floflo11
mbb-decks

Use when generating consulting-grade slide decks, MBB-style presentations, McKinsey/Bain/BCG-format slides, board prereads, executive readouts, recommendation decks, market entry decks, due diligence decks, or any business presentation that requires action-title storylines, pyramid-principle structure, MECE bullets, and a clean editorial visual system rendered to a real .pptx file.

Overview

Publisherfloflo11
Repositorymbb-decks
Skill namembb-decks
Stars
21
Forks
1
Bundled files
45
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 45 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by floflo11 on GitHub. Read the source before you install it.

Installation

Install the Mbb Decks AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/floflo11/mbb-decks/tree/main
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/floflo11/mbb-decks.git \
  .claude/skills/mbb-decks
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Mbb Decks in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Mbb Decks on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Mbb Decks is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

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.

  1. Verify renderer dependencies (first run only). Before producing any deck, confirm Python 3.9+ and python-pptx are installed by running:
    bash
    python3 -c "import pptx; print(f'python-pptx {pptx.__version__} on Python {__import__(\"sys\").version.split()[0]}')"
    If this prints a version, skip to step 1. If it errors with ModuleNotFoundError: No module named 'pptx', tell the user:

    The renderer needs python-pptx. Run pip install python-pptx in 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.

  2. 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.
  3. 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.
  4. Expand. Fill in bullets, charts, footnotes, sources. Keep each slide MECE under its action title.
  5. 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.

#SectionNotes
1CoverTitle, subtitle, author, organization. Blank theme.
2Executive summaryOne headline that answers "so what." Three to five MECE bullets.
3AgendaTwo to four sections. Section titles match the dividers.
4SectionsEach begins with a divider slide (number + title). Two to four content slides per section.
5RecommendationHeadline + action table (Owner / Action / Outcome). Action table is mandatory.
6AppendixOptional. 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.

ElementSpecification
BackgroundWhite #FFFFFF
HeadlinesGeorgia, deep navy #051C2C
Body textCalibri, near-black #1A1A1A
AccentElectric blue #2251FF, used sparingly for rules and section numbers
Gridlines, dividersLight grey #E5E7EB
Footnotes, sources, page numbersCalibri 8pt, mid-grey #949BA8
Slide size16:9, 13.333" × 7.5"
Margins0.5" left and right
Page numberLower right, format Page X / Y
Date in footerNever
IconsNever, unless user explicitly requests

Chart families

Pick the chart that matches the claim in the action title.

Action title verbChart 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 as E (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:

DomainAuthoritative sources
Macro and tradeWorld Bank, IMF, OECD, BIS, UN ComTrade, WTO
Cloud and AI infrastructureSynergy Research Group, IDC, Dell'Oro Group, Gartner, JLL Data Center Outlook, Structure Research
Energy and climateIEA, BloombergNEF, EIA, Lazard LCOE, NREL ATB, Wood Mackenzie
Financial marketsBloomberg, S&P Global, Refinitiv (LSEG), FactSet, Capital IQ, PitchBook, Preqin
Consulting/strategy reportsMcKinsey Global Institute, BCG, Bain (publicly cited), Oliver Wyman
ConsumerEuromonitor, Nielsen, Kantar, eMarketer, Statista
Public companiesCompany 10-K, 10-Q, S-1, earnings transcripts (SEC EDGAR)
Regulatory and policyFederal 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:

  • Renders each [text](url) segment as a hyperlink in the .pptx.
  • Sends a HEAD request to each URL at render time. If the URL returns a 4xx error, the link is dropped silently and only the plain text is rendered. The reader does not see a broken link.
  • Leaves the link in place for non-4xx outcomes (network timeout, DNS error, blocked HEAD), since we cannot definitively call those broken.

If you cannot find a public URL for a specific report, leave the source as plain text. Do not invent URLs.

Pairing chart with commentary

Never ship a chart slide as just a chart. Every chart slide should carry its own commentary panel on the same slide so the reader gets the picture and the takeaway in one view. If the bullets describing a chart end up on the next slide, merge them.

Two layouts:

  • commentary_position: "right" (default). Chart takes left 62%, "KEY TAKEAWAYS" panel on the right with three to four bullets. Use for most chart slides.
  • commentary_position: "below". Chart full-width on top (~2.8" tall), commentary in a 2-column row below. Use when the chart needs more horizontal room (5+ categories with multiple series), or when there are 4+ takeaway bullets.

Logos as bullet markers

Wherever a commentary or two-column bullet focuses on a single named entity (company, regulator, sovereign fund), use the entity's logo as the bullet marker instead of an abstract icon or a plain dot. The skill auto-downloads logos from logo.dev (a public token ships with the skill; override with LOGODEV_TOKEN for a private quota) and caches them in assets/logos/. If logo.dev does not yet have a brand mark for the domain it returns HTTP 202 and the bullet falls back to a plain • marker rather than a placeholder.

A bullet entry can be:

  • A plain string → renders with • marker.
  • { "icon": "→", "text": "..." } → renders the glyph in navy as the marker.
  • { "logo": "microsoft.com", "text": "..." } → renders the company logo as the marker. Auto-downloaded on first render and cached.
  • { "logo": "...", "icon": "...", "text": "..." } → logo wins.

If a bullet covers a concept rather than an entity (a region, a principle), use icon, not logo. If it names multiple companies, split the bullet so each has one anchor entity.

JSON spec

The script reads a JSON file with this shape. See examples/market-entry/input.json and examples/data-center-landscape/input.json for complete worked examples.

jsonc
{
  "meta": { "title": "...", "subtitle": "...", "author": "...", "organization": "..." },
  "executive_summary": {
    "headline": "Full-sentence claim, 15 to 25 words",
    "bullets": ["...", "...", "..."]
  },
  "agenda": [
    { "title": "Section title", "subtitle": "Optional subtitle" }
  ],
  "sections": [
    {
      "title": "Matches an agenda title",
      "slides": [
        {
          "action_title": "Full sentence, 10 to 15 words",
          "content_type": "bullets",       // or "bar_chart" or "two_column"

          // for content_type "bullets"
          "bullets": [
            "Plain bullet text",
            { "icon": "$", "text": "Bullet with abstract icon marker" },
            { "logo": "microsoft.com", "text": "Bullet with company logo marker" }
          ],

          // for content_type "bar_chart"
          "chart": {
            "categories": ["A", "B", "C"],
            "series": [{ "name": "...", "values": [1.0, 2.0, 3.0] }],
            "unit": "USD millions"
          },
          "commentary": [                  // optional; pairs with chart
            { "logo": "aws.amazon.com", "text": "AWS-specific takeaway" },
            { "logo": "microsoft.com", "text": "Azure-specific takeaway" },
            { "icon": "◆", "text": "General takeaway not tied to one company" }
          ],
          "commentary_position": "right",  // or "below"; default "right"

          // for content_type "two_column"
          "left_header": "...",
          "left":  [ "plain", { "icon": "$", "text": "..." }, { "logo": "...", "text": "..." } ],
          "right_header": "...",
          "right": [ /* same shape as left */ ],

          "footnote": "Optional. Auto-prefixed with '*'. Body or chart label should carry a matching '*' marker.",
          "source": "Optional. Format: '[Org], [Publication], [Year]; [Org 2], [Year]'"
        }
      ]
    }
  ],
  "recommendations": {
    "headline": "Approve / proceed / invest claim",
    "actions": [
      { "owner": "CFO", "action": "Specific action by date", "outcome": "What it produces" }
    ]
  },
  "appendix": [
    // Same shape as section slides
  ]
}

Calling the build script

bash
python scripts/build_deck.py <input.json> <output.pptx>

The script validates the slide count and prints a warning if the main deck exceeds 15 slides.

Common mistakes

MistakeFix
Action title is a label ("Market sizing")Rewrite as a sentence with a verb and claim
Action titles do not connect into a storyReorder or rewrite. Read them all aloud as one paragraph.
More than five bullets per slideCut to three or split the slide
Bullets repeat the action titleBullets must add evidence, not restate the claim
Chart slide with no commentaryAdd a commentary panel on the same slide; never let bullets describing a chart spill onto the next slide
Chart is decorative, not load-bearingReplace with the chart that proves the action title
No source on a data slideAdd one. Every numeric claim needs attribution.
Decorative icons sprinkled into body textRemove. Use icons or logos only as bullet markers, never as page decoration
Bullet names a company but uses an abstract iconReplace with {"logo": "<domain>", "text": "..."}; the logo becomes the marker
Mixing logo markers and navy-circle icons in the same panelDrop the circle background on icon glyphs (the script does this automatically)
Em dashesReplace with periods or commas. House style is no em dashes.
Date in footerRemove. House style omits date.
Slide count exceeds 15 in main deckMove detail to appendix.

Red flags that mean stop and restart

  • "I'll write the slides first and figure out the story after." Stop. Ghost deck first.
  • "The action title is too long, I'll shorten it." Check it is still a complete claim. If a label is shorter, that is not the right tradeoff.
  • "Three bullets is not enough, I have more to say." Split into two slides or move detail to appendix.
  • "I'll put the chart on one slide and the bullets describing it on the next." Stop. Merge them. Add a commentary panel on the same slide.
  • "I'll add a few icons to make it visual." Use logos for bullets that name a company. Use abstract icons only for concept bullets. Never sprinkle decorative icons.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Mbb Decks AI skill do?

Use when generating consulting-grade slide decks, MBB-style presentations, McKinsey/Bain/BCG-format slides, board prereads, executive readouts, recommendation decks, market entry decks, due diligence decks, or any business presentation that requires action-title storylines, pyramid-principle structure, MECE bullets, and a clean editorial visual system rendered to a real .pptx file.

Why use Mbb Decks on TypingMind?

Because you install it once and use it with any model. Mbb Decks is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Mbb Decks in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/floflo11/mbb-decks/tree/main. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Mbb Decks?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Mbb Decks?

As many as you like. As long as a model supports skills, you can use Mbb Decks with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Mbb Decks AI skill free?

Yes. It is published on GitHub by floflo11 under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇