mckinsey-charts
Skill136 starsChanged 7 months agoMITView on GitHub
Generate McKinsey-style consulting charts as native python-pptx objects (editable inside PowerPoint). Three workhorse types — bar+callout for TAM/single-number stories, stacked column over time for revenue/usage mix, and waterfall for drivers/bridge analysis. Use when you need a chart that looks like it came from an EM-reviewed deck, not from Excel defaults.
In this repository14 other files it gives its agents.
- ai-use-case-scorerSkill
- decision-memo-builderSkill
- deck-pipelineSkill
- hypothesis-treeSkill
- issue-tree-builderSkill
- mckinsey-criticSkill
- meeting-prep-kitSkill
- prioritizationSkill
- scpr-frameworkSkill
- stakeholder-mapSkill
- storyline-builderSkill
- synthesisSkill
- top-down-memoSkill
- workshop-designerSkill
The file
We split this skill into the rules it gives an agent
1 rule. About 0 are common, 1 is distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 23
Source line at the bottom in light grey italic: Always include it.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
McKinsey Charts
Drop-in chart builders for python-pptx. Charts are inserted as native PowerPoint chart objects — your audience can edit the data, change the colors, copy the chart to their own deck. No images, no screenshots.
The Three Charts
| Type | When to use | Example |
bar_callout | One number is the story. TAM, market size, headcount, anything where you want to anchor on a single highlighted bar with a big callout. | "RTD coffee TAM will hit $42.5B by 2028" |
stacked_bar_over_time | Composition over time. Revenue by segment, usage by feature, headcount by function. Shows both total growth and mix shift. | "Revenue grew 3x, but enterprise segment grew 7x" |
waterfall | Bridging two numbers. Revenue walk, cost walk, headcount changes, any "start → adds → subtracts → end" story. | "FY24 → FY25 revenue bridge: $80M → $112M" |
Design choices (intentional, not configurable)
- Title is a claim, not a label. "RTD market will hit $42.5B by 2028" beats "Market Size."
- One highlight color, everything else grey. McKinsey decks don't rainbow. The chart points at one thing.
- No gridlines, no chart border, no legend unless multi-series. Less ink → more signal.
- Source line at the bottom in light grey italic. Always include it.
- Single font (Inter) at consistent sizes. Title 20pt, axis 10pt, source 9pt.
How to use
from pptx import Presentation
from pptx.util import Inches
from charts import add_bar_callout, add_stacked_bar_over_time, add_waterfall, new_deck
prs = new_deck() # 16:9 with title slide layout
slide = prs.slides.add_slide(prs.slide_layouts[6]) # blank
add_bar_callout(
slide,
title="RTD coffee TAM will hit $42.5B by 2028",
categories=["2023", "2024", "2025", "2026", "2027", "2028"],
values=[28.1, 30.8, 33.6, 36.5, 39.4, 42.5],
highlight_index=5, # which bar to highlight (last one here)
callout="$42.5B\n2028 TAM",
y_label="USD, billions",
source="Euromonitor 2025; Mintel; team analysis",
)
prs.save("output.pptx")Same pattern for the other two:
add_stacked_bar_over_time(
slide,
title="Enterprise segment now drives 62% of revenue, up from 18% in 2021",
categories=["2021", "2022", "2023", "2024", "2025"],
series=[
("SMB", [12, 14, 15, 16, 18]),
("Mid-market", [8, 12, 16, 22, 28]),
("Enterprise", [4, 10, 22, 38, 74]),
],
highlight_series="Enterprise",
y_label="Revenue, $M",
source="Internal financials; FY21–FY25",
)
add_waterfall(
slide,
title="FY24 → FY25 revenue bridge: $80M → $112M, with new logos doing the heavy lifting",
labels=["FY24", "New logos", "Expansion", "Churn", "Price", "FY25"],
values=[80.0, 24.0, 12.0, -8.0, 4.0, 112.0],
kinds=["start", "pos", "pos", "neg", "pos", "total"],
y_label="Revenue, $M",
source="Internal financials; FY24–FY25",
)Test it
python3 test_charts.py
open test_output.pptxThe test script generates one slide per chart type with realistic sample data. Open it in PowerPoint or Keynote and right-click any chart → "Edit Data" to confirm it's a native chart, not an image.
When NOT to use this skill
- You need a distribution (use a histogram or box plot — not a McKinsey staple).
- You need a scatter / quadrant (the 2x2 / portfolio map is a different skill).
- You're showing >5 series stacked (split into small multiples instead — one chart can't carry that load).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

