# PowerPoint Engine > REST API and MCP server that generate PowerPoint (.pptx) presentations programmatically — from simple markup or your own .pptx template. Built for developers and AI agents automating decks. ## Quick start (REST) - Generate from markup: `POST https://powerpointengine.io/api/powerpoint/generate` - Body: `{ "markup": "# Q3 Review\n## Revenue\n- Up 24%\n- Churn down\n## Outlook\n- Expand EU", "theme": "corporate" }` - Markup syntax: a single `# ...` sets the deck title and becomes the cover slide; each `## ...` starts a new slide; `- ...` adds a bullet. - Response: `{ "success": true, "result": { "filename": "...", "downloadUrl": "https://..." } }` - Generate from a structured template: same endpoint with `{ "template": { "title": "...", "slides": [ ... ] }, "theme": "corporate" }` - Native editable chart slide (in a template): `{ "type": "chart", "title": "Quarterly Revenue", "chartData": { "kind": "col", "categories": ["Q1","Q2","Q3","Q4"], "series": [ { "name": "Revenue", "values": [120,150,170,210] } ] } }`. `kind` is `col`, `bar`, `line`, or `pie` (pie uses the first series); multiple series supported for col/bar/line. - Charts in markup: put a fenced block under a `## Slide` heading — ```` ```chart ````, then lines `type: line`, `categories: Q1, Q2, Q3`, and one `SeriesName: 1, 2, 3` per series. Combo charts + secondary axis: `type: combo` and per-series options in parens, e.g. `Margin % (line, secondary): 10, 12, 14`. - Native tables: a GitHub-style markdown table (`| a | b |` rows) under a `## Slide` heading becomes a real PowerPoint table with a styled header row, banded rows and borders. Template API: `{ "type": "table", "tableData": { "headers": [...], "rows": [[...]] } }`. - Replace text in your own .pptx (structure-preserving): `POST https://powerpointengine.io/api/powerpoint/replace` (multipart: `file` = your .pptx, `replacements` = JSON like `{"client":"ACME"}`, `replaceMode` = `placeholders`). Write `{{client}}` in the template; works even when PowerPoint splits the placeholder across runs. - Edit slides in your own .pptx (duplicate / delete / reorder, formatting untouched): `POST https://powerpointengine.io/api/powerpoint/edit` (multipart: `file` = your .pptx, `operations` = JSON array like `[{"op":"duplicate","slide":2},{"op":"delete","slide":5},{"op":"move","slide":3,"to":1}]`). Slide numbers are 1-based; operations apply sequentially. This covers what python-pptx cannot do (its oldest open feature requests: clone, delete, reorder slides). - Replace an image in your own .pptx (position, size, crop and effects kept): add `image:` file fields to the `/replace` call, e.g. `-F 'image:Logo=@new-logo.png'`. Supported: png, jpg, gif, webp, bmp. - Merge presentations: `POST https://powerpointengine.io/api/powerpoint/merge` (multipart: 2–5 repeated `files` fields). Slides are appended in upload order and every deck keeps its own design — layouts, masters, themes, media and charts are copied with the slides. - Translate an existing deck: `POST https://powerpointengine.io/api/powerpoint/translate` (multipart: `file` = your .pptx, `targetLang` = e.g. `Spanish`). Replaces text in place, preserving layout; returns a download URL. - Convert to PDF: `POST https://powerpointengine.io/api/powerpoint/pdf` (multipart: `file` = your .pptx). Returns JSON with a signed `downloadUrl` for the PDF (valid 24h). python-pptx cannot render PDF; this replaces PowerPoint COM automation or a self-managed LibreOffice. - Brand it: add `"brand": { "primary": "#E4002B", "secondary": "#111827", "accent": "#00A" }` (6-hex, override the theme) and/or `"font": "Georgia"` to any generate request. - Themes: `corporate`, `modern`, `minimal`, `vibrant` - The free tier returns watermarked files; the Pro plan ($9/month) removes the watermark. ## MCP server (for AI agents) A remote Model Context Protocol server exposes the generator as tools, so an AI client can create presentations directly. - Endpoint: `https://powerpointengine.io/api/mcp/mcp` (Streamable HTTP) - Auth: OAuth 2.1 with browser authorization (PKCE, dynamic client registration). Discovery at `https://powerpointengine.io/.well-known/oauth-protected-resource`. - Tools (file inputs are URLs, e.g. the downloadUrl returned by another tool): - `generate_presentation` — arguments: `markup` (string), `theme` (optional) → returns a download URL - `generate_from_template` — arguments: `template` (object), `theme` (optional) - `replace_text` — `file_url`, `replacements` (map), `replace_mode` (`placeholders`|`objects`) → edits your .pptx without breaking formatting - `edit_slides` — `file_url`, `operations` (duplicate/delete/move, 1-based) - `merge_presentations` — `file_urls` (2-5 decks, each keeps its design) - `convert_to_pdf` — `file_url` → PDF download URL - `translate_presentation` — `file_url`, `target_lang` (layout preserved) - `get_account_status` — no arguments → plan, credits, recent generations and errors - Add to Claude Code: `claude mcp add --transport http powerpoint-engine https://powerpointengine.io/api/mcp/mcp` - Installable agent skill (SKILL.md): https://powerpointengine.io/skill/SKILL.md ## Links - Documentation: https://powerpointengine.io/docs - Code examples: https://powerpointengine.io/examples - Live demo (no signup): https://powerpointengine.io/powerpoint-tool - Pricing: https://powerpointengine.io/pricing - Status: https://status.powerpointengine.io