pptx-mcp for Claude, Cursor, and any MCP client
Let AI agents generate, parse, validate, and render PowerPoint presentations natively. Runs locally via npx pptx-mcp or remotely at mcp.pptx.dev. Built on the TypeScript SDK.
Tools
Four tools, matched 1:1 to the REST surface. All accept JSON documents or base64 file bytes; file-oriented tools also accept absolute filesystem paths when running locally.
| Tool | Purpose |
|---|---|
| generate_presentation | Submit an OPF document to pptx.dev. Returns a 202-accepted envelope with job status, slide count, and any validation warnings. |
| parse_pptx | Convert a .pptx file into OPF JSON (or return a parseId for per-slide reads). Accepts absolute filesystem paths or base64 data. |
| validate_opf | Validate an OPF document against the canonical schema. Always free — use before generate_presentation to catch schema errors client-side. |
| render_format | Render a .pptx to web (interactive HTML), svg, or png. web returns slide data + a viewerUrl; svg/png return a 202 job acknowledgement. |
Local (stdio)
No install step — Claude Desktop and Cursor spawn the server with npx.
npx pptx-mcp
Claude Desktop
Edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json) and restart Claude.
{
"mcpServers": {
"pptx": {
"command": "npx",
"args": ["-y", "pptx-mcp"],
"env": {
"PPTX_API_KEY": "ppx_your_key_here"
}
}
}
}Cursor
Add to ~/.cursor/mcp.json or a project-local .cursor/mcp.json. Cursor picks up changes without a restart.
{
"mcpServers": {
"pptx": {
"command": "npx",
"args": ["-y", "pptx-mcp"],
"env": {
"PPTX_API_KEY": "ppx_your_key_here"
}
}
}
}Remote (HTTP streaming)
For clients that support the HTTP-streaming MCP transport, point at:
https://mcp.pptx.dev
Send your API key as a bearer token:
Authorization: Bearer ppx_your_key_here
Environment variables
| Variable | Purpose |
|---|---|
| PPTX_API_KEY | Bearer token for api.pptx.dev. Required for every tool except validate_opf. |
| PPTX_API_BASE_URL | Override base URL (defaults to https://api.pptx.dev). Useful for dev / staging. |
Get your API key from the API Keys page.
Programmatic use
Build your own transport (SSE, WebSocket, custom HTTP) around the shared server factory:
import { createPptxMcpServer } from "pptx-mcp";
const server = createPptxMcpServer({
apiKey: process.env.PPTX_API_KEY,
});
// Connect any @modelcontextprotocol/sdk transport
await server.connect(myTransport);Example prompt
Once configured, ask your agent something like:
“Generate a pptx with one title slide that says ‘Q1 Review’ and give me the job metadata.”
The agent calls generate_presentation with an OPF document like:
{
"$schema": "https://pptx.dev/schema/opf/v1",
"version": "1.0",
"meta": { "title": "Q1 Review" },
"design": { "theme": "corporate-minimal" },
"slides": [
{
"id": "title",
"layout": "title-slide",
"elements": [
{ "id": "h1", "type": "text", "content": { "text": "Q1 Review" } }
]
}
]
}