MCP server for creating and editing PowerPoint presentations
PowerPoint MCP Server
This is a Model Context Protocol (MCP) server for creating and editing PowerPoint presentations. Built with Python and python-pptx.
Features
- Presentation Management: Create, open, save, and close presentations
- Slide Operations: Add, delete, duplicate, and reorder slides
- Content Creation: Add textboxes, images, shapes, tables, and charts
- Icons: Insert Phosphor SVG icons with custom colors
- Modifications: Modify shapes, delete elements, find and replace text
- Escape Hatch: Execute arbitrary python-pptx code for advanced operations
Requirements
- Python 3.9 or higher
- No PowerPoint installation required – works directly with .pptx files
Installation
- Clone the repository:
git clone https://github.com/juanocampo400/powerpoint-mcp.git
cd powerpoint-mcp
- Install dependencies:
pip install -r requirements.txt
- (Optional) For icon support:
- Windows:
pip install cairosvg(works if pycairo is installed, which is common with graphics/PDF tools) - macOS:
brew install cairo pango && pip install cairosvg
- Windows:
Usage with Claude
Add to your Claude configuration using Claude Code CLI:
macOS:
cd powerpoint-mcp
chmod +x server.sh
claude mcp add powerpoint-mcp --scope user -- $PWD/server.sh
Windows (Git Bash):
cd powerpoint-mcp
claude mcp add powerpoint-mcp --scope user -- python $PWD/server.py
Note: --scope user makes the server available globally. Without it, the server only works when you're in the project directory.
Why
server.shon macOS? The wrapper script setsDYLD_FALLBACK_LIBRARY_PATHso Python can find the Homebrew-installed cairo library (required for icon support). Without this, icons may not work even if cairo is installed correctly.
Or manually edit ~/.claude.json:
macOS:
{
"mcpServers": {
"powerpoint-mcp": {
"type": "stdio",
"command": "/Users/yourname/powerpoint-mcp/server.sh",
"args": []
}
}
}
Windows:
{
"mcpServers": {
"powerpoint-mcp": {
"type": "stdio",
"command": "C:/Users/yourname/AppData/Local/Programs/Python/Python312/python.exe",
"args": ["C:/Users/yourname/powerpoint-mcp/server.py"]
}
}
}
Available Tools
Core Management
| Tool | Description |
|------|-------------|
| manage_presentation | Open, create, save, save_as, close presentations |
| get_presentation_info | Get slide count, dimensions, overview |
| manage_slide | Add, delete, duplicate, move slides |
| get_slide_snapshot | Get detailed info about shapes on a slide |
Content Creation
| Tool | Description |
|------|-------------|
| add_textbox | Add text with formatting (font, size, color, alignment) |
| add_image | Insert images (PNG, JPG, etc.) |
| add_shape | Add shapes (rectangle, oval, arrow, star, etc.) |
| add_table | Create tables with data |
| add_chart | Create charts (bar, column, line, pie, area) |
| insert_icon | Insert Phosphor SVG icons |
| list_icons | List available icons by category |
Modifications
| Tool | Description |
|------|-------------|
| modify_shape | Change position, size, color, text of shapes |
| delete_shape | Remove shapes by ID or name |
| find_and_replace | Find and replace text across slides |
Advanced
| Tool | Description |
|------|-------------|
| evaluate_code | Execute arbitrary python-pptx code |
Recommended Workflow & Next Steps
This MCP server works best when paired with a well-prepared PowerPoint template. Here's the recommended workflow based on testing:
Quick Start (No Template Prep)
- Download a template from PowerPoint's built-in library (e.g., "Architecture Pitch Deck")
- Save it to your working folder
- Ask Claude Code to create a presentation using the template
Results: Works fairly well out of the box – Claude Code can identify placeholders and populate content.
Better Results (Templatized)
For improved results, ask Claude Code to prepare the template first:
- Save a PowerPoint template to your working folder
- Ask Claude Code to: "Strip the existing text and replace it with generic placeholder text to make this a reusable template"
- Make your own personal tweaks to master layouts and example slides (e.g., icon placement, text box size)
- Use the prepared template for your presentations
Results: More consistent placeholder detection, cleaner content replacement, and better overall output.
Recommended Next Steps
Once you have a workflow that works well for your use case:
- Create a custom template – Design or modify a template that matches your branding/style guidelines
- Package into a skill – Create a Claude Code skill that encodes your storytelling and branding guidelines, so Claude follows them automatically when creating presentations
- Optional: Add a hook – Configure a hook to load your skill before the MCP tools are invoked, ensuring consistent results every time
This approach gets closer to "one-shotting" powerpoint slides consistently.
Notes
- All positions and sizes use inches as the unit
- Colors are specified as hex codes (e.g., "#FF0000" for red)
- Icons are bundled from Phosphor Icons (1,500+ icons available)
- The server keeps one presentation open in memory at a time