Create slide
Create editable PowerPoint slides or whole decks with SlideForge. Use when the user asks to make a slide, deck, presentation, dashboard slide, chart slide, QBR/board exhibit, or anything that results in a .pptx file. Structured intents render deterministically with a fidelity manifest (verbatim vs ai_completed); briefs work too. Requires the slideforge MCP server (or the REST API).From its SKILL.md
npx -y skills add smartdatabrokers/slideforge-mcp --skill create-slideAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
5.9 KB, as published. Nobody here has run it
Create slides & decks
SlideForge is a compiler: a slide is a typed intent (form + typed content fields) rendered
deterministically into native, editable .pptx — no LLM in the render path. $0.05/slide,
usable-or-free; identical input re-renders free.
The reliable path (use for real content)
- Pick the form.
browse_cataloglists 200+ patterns (kpi_metrics, waterfall_bridge, gantt_plan, funnel, org_structure, data_table, comparison_matrix, timeline_roadmap, …). Unsure?plan_slidewith a one-line brief returns ranked candidates, free. - Get the contract.
browse_catalogwithtype=schema+ the form returns the JSON Schema and a copy-pasteable example intent. Start from the example; swap in the user's real content; keep the advertised field names exactly. - Dry-run. Send the intent with
dry_run: true→status: validated+ afidelity_forecastat $0. Iferrors[]come back, each carries a machinecodeand aremedy— fix and re-dry-run. Never pay to discover a validation error. - Render. Same payload without
dry_run. The response embeds a preview PNG inline, cost, and the fidelity manifest. The editable file downloads separately (see below).
For a whole deck: ONE create_deck call with slides[] (a list of create_slide intents).
Parallel render, one merged pptx, per-slide fidelity rollup; failed slides are isolated and free.
Grammar worth knowing (v5.104 surface):
- Stat prominence: list/workflow block items take
metric: {value, label}— the number renders as a stat column instead of hiding in prose. Keep values bare (42or"42"), no % signs, units, or currency symbols inside numeric fields. - Architecture depth: layer stacks take
orientation: "horizontal"(left-to-right pipeline with crossing control rails) and per-componentstate: current|target|gap(capability-heat tinting) — consulting capability-map staples from one typed payload. quality_profile(executive/technical/appendix) answers on ANY form — the response'slayout.presentation_readyis judged against it; measurement only, never blocks or bills.
Quick path (throwaway / exploratory)
A plain-text brief renders in one call — the engine routes it to a form. Fine for drafts;
expect fidelity: ai_completed (the model structured your prose). For business numbers,
always prefer typed fields.
Reading the response honestly
fidelity: verbatim— every word/number came from the user's input. Say so.fidelity: mixed / ai_completed— the manifest names which fields a model completed. Tell the user which parts to double-check.fidelity: partial— some supplied content did not make it onto the slide. The manifest names what was dropped. Never deliver apartialrender without telling the user what's missing.status: completed_with_errors— the render is flawed and was NOT billed. Read the error remedies, fix the intent, re-render. Do not deliver the artifact as if it were fine.warnings[]— quality advisories (density, contrast, overflow) with remedies; the slide billed and is usable, but mention material ones.
Headless verification (Claude Code / Codex CLI — no widgets)
The preview PNG is embedded inline in the tool result — read it directly, no fetch needed. Always look at your own render before declaring done. Download the deliverable via header-auth:
curl -H "Authorization: Bearer sf_live_YOUR_KEY" \
-o slide.pptx https://api.slideforge.dev/v1/jobs/<job_id>/pptx # ownership-checked
If the preview shows a problem, fix the intent and re-render — refinement is a fresh $0.05 render (identical input is free, so only actual changes cost).
Escape hatch: mode=code
When no catalog form fits, create_slide with mode=code runs your python-pptx in a sandbox
(same $0.05, deterministic). browse_catalog type=widgets / type=helpers lists the bundled
board-grade widget + chart toolkit so you don't hand-roll primitives.
Do / don't
- DO put real content in
data.*typed fields; DON'T paste it into a brief when it matters. - DO fix errors by their
remedy; DON'T retry an identical failed payload. - DO use one
create_deckfor multi-slide; DON'T loopcreate_slide. - DO pass
min_font_ptwhen the user demands a minimum font size (binding: type grows to meet it; unmeetable content = $0 error naming the size it needs); DON'T shrink-to-fit by cutting the user's words yourself —allow_truncationdrops whole items, never words. - DO set
direction: "rtl"ONCE at deck level for Arabic/Hebrew content (it inherits into every slide; a slide's own value wins) — never per slide only, which risks a mixed deck. Text is typeset right-to-left; layout stays unmirrored and the response says so. - DO pass
theme_id(or upload a theme PPTX viaupload_asset(purpose="theme", data=<base64>)) for branding — uploaded themes render NATIVE by default, built ON the client's own template file (master, layouts, fonts). - DO use
create_slide(form="template_layout", theme_id=..., data={"layout": ..., "fills": ...})to fill the template's own designed cover/agenda/divider slides verbatim. - DO expect topical design on the default themes: an unpinned render may take a subject-informed
accent palette + designed cover (the response's design note names the choice). Pass
styling: "clean"for the neutral default look; a pinnedtheme_id/uploaded theme never takes topical styling.