create-pptx
Create editable PowerPoint presentations from markdown. Markdown headings become slides, with support for tables, charts, and bullet lists.
Instructions
Create an EDITABLE PowerPoint presentation (.pptx) you can open in PowerPoint / Keynote / Google Slides. USE when the user asks for slides / a deck / a presentation / a pitch deck / 'powerpoint' / 'keynote'. NOT for a flowing document (→ create-doc / create-pdf), code/repo docs (→ create-markdown), or pure tabular data (→ create-excel). SLIDE STRUCTURE: the title becomes a centered title slide; EACH '## ' heading starts a NEW slide whose body is the markdown beneath it. Inside a slide, '### ' is a sub-heading, '- '/'1. ' are bullets, '| a | b |' GitHub tables render as native slide tables, a chart fenced block (first line 'type: bar|column|line|pie|doughnut|area', optional 'title:', then a markdown table whose first column is the category and each other column is a data series) becomes a NATIVE editable chart, and fenced code blocks render as monospace. Keep each slide focused — a few bullets, not a wall of text. Styled from the same 8 presets as create-doc (colors/fonts map onto the slides). Supported markdown: '# H1' '## H2' '### H3' headings; 'bold'; 'italic'; 'code'; '- ' or '1. ' lists; '> ' blockquotes; '---' horizontal rule; fenced code blocks; '| a | b |' GitHub tables (with a '|---|---|' separator row); 'text' links. EXAMPLE content: "## Problem\n- Manual steps are slow\n- Errors slip through\n\n## Our Solution\n- One-click automation\n- Built-in checks\n\n## Results\n| Metric | Before | After |\n|---|---|---|\n| Time | 2h | 5m |". Title MUST be specific. Use dryRun: true to preview the slide breakdown. (To make a fixed, non-editable deck use create-pdf instead.)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags for registry search and discovery. | |
| style | No | Advanced: fine-grained style overrides merged on top of stylePreset. | |
| title | Yes | Specific descriptive title (rejected: 'Document', 'Untitled', etc.). Becomes the title slide. | |
| dryRun | No | Return a preview (title, slide count, section headings) without writing the file (default: false). | |
| tables | No | Optional tables as 2D arrays. First row is the header. Rendered as native slide tables, appended after the body. | |
| content | No | PREFERRED. The entire document body as ONE markdown string. Supported markdown: '# H1' '## H2' '### H3' headings; '**bold**'; '*italic*'; '`code`'; '- ' or '1. ' lists; '> ' blockquotes; '---' horizontal rule; ```fenced code blocks```; '| a | b |' GitHub tables (with a '|---|---|' separator row); '[text](https://url)' links. The title is added as the document H1 automatically, so start the body at '## '. EXAMPLE content: "## Overview\nThis report covers **Q2** results.\n\n### Highlights\n- Revenue up *18%*\n- Two new markets\n\n| Metric | Value |\n|---|---|\n| MRR | $42k |\n| Churn | 1.2% |\n\n> Next review: July." Use this instead of `paragraphs` unless you need per-paragraph style objects. | |
| docType | No | Tone and depth of the documentation. | |
| category | No | Document category for subfolder organization. | |
| uploadUrl | No | OPTIONAL. HTTPS URL of a receiver that will accept a JSON envelope `{data:base64, filename, mimeType, size}` POSTed with this Bearer auth. If you have NOT been given an uploadUrl in your context, OMIT this field and the tool just writes the file locally. Single-use semantics — do not retry on 4xx. Works with any compliant receiver (CogniRunner attachment-upload web trigger is the reference implementation, but the contract is generic). | |
| clientHint | No | How the response should be shaped. 'interactive' = polished one-line message for end-users (no chatty registry/lineage notes). 'agent' = verbose response with all metadata for AI consumption. 'auto' (default) = detect from input shape or MCP_CLIENT_TYPE env var, falling back to 'agent'. | |
| outputPath | No | Optional. Default: derived from title, placed under docs/<category>/. | |
| paragraphs | No | ALTERNATIVE to `content`. Body as an array of markdown strings or { text, headingLevel } objects. Prefer the single `content` string. Each '## ' heading starts a new slide. | |
| description | No | Brief description stored in the registry; also used as the title-slide subtitle when the body has no preamble. | |
| stylePreset | No | Style preset. 'claude-like' (modern blue-accented professional) is the default for general-purpose docs. 'professional' is the executive serif look. Auto-selected from category if omitted. | |
| uploadFilename | No | OPTIONAL. Filename to put in the upload envelope. Defaults to the local file's basename. Useful when the local file got auto-suffixed (e.g. duplicate prevention) and you want a clean name on the receiver side. | |
| uploadAuthHeader | No | OPTIONAL. Authorization header value for uploadUrl (e.g. 'Bearer abc123'). REQUIRED when uploadUrl is set; ignored otherwise. Never logged. | |
| enforceDocsFolder | No | If false, allow output outside docs/. Default: true (recommended). | |
| preventDuplicates | No | If false, allow same-title duplicates. Default: true (recommended). |