An MCP server that enables LLMs to create visually rich slide presentations using HTML/CSS. Each slide is a full HTML page rendered at 1920x1080 (16:9). Presentations are exported as PPTX or PDF by screenshotting each slide via headless Chrome.
- Create multi-slide presentations with HTML/CSS
- Update, add, or delete individual slides
- Add images and media files for use in slides
- Export to PPTX (PowerPoint) or PDF
- Terminal mode for testing
- Fixed 1920x1080 slide dimensions (standard 16:9 widescreen)
- The LLM generates HTML/CSS for each slide with full visual control (backgrounds, gradients, images, custom fonts)
- Each slide is stored as a separate HTML file
- On export, each slide is screenshotted at 1920x1080 via headless Chrome (2x resolution)
- Screenshots are assembled into PPTX (using XML/ZIP) or PDF
{ROOT_DIR}/quarterly-review-a3f9/
├── metadata.json # Presentation metadata
├── slides/
│ ├── 1.html # Slide 1 HTML
│ ├── 2.html # Slide 2 HTML
│ └── 3.html # Slide 3 HTML
├── media/ # Shared media files
│ ├── chart.png
│ └── logo.svg
└── exports/ # Generated exports
Set the root directory via environment variable:
export PRESENTATION_CREATOR_ROOT_DIR="/path/to/presentations"Default: ~/.savant_presentations
./run.sh install # Install dependencies
./run.sh build # Build binary to bin/presentation_creator# Create a presentation
./run.sh create "Q4 Review" '["<h1>Q4 Review</h1>","<h1>Revenue</h1>"]'
# List presentations
./run.sh list
# Get presentation
./run.sh get q4-review-a3f9
# Update a slide
./run.sh update-slide q4-review-a3f9 1 "<h1>Updated Title</h1>"
# Add a slide
./run.sh add-slide q4-review-a3f9 "<h1>New Slide</h1>"
# Delete a slide
./run.sh delete-slide q4-review-a3f9 3
# Add media
./run.sh add-media q4-review-a3f9 /path/to/chart.png
# Export to PPTX
./run.sh export q4-review-a3f9 ~/Desktop/q4-review.pptx
# Export to PDF
./run.sh export q4-review-a3f9 ~/Desktop/q4-review.pdf pdfCreate a new presentation with initial slides.
Parameters:
name(string, required): Presentation nameslides(array of strings, required): HTML content for each slidemedia_files(array of strings, optional): Absolute paths to media files
Returns:
{
"status": "succeeded",
"presentation_id": "q4-review-a3f9",
"name": "Q4 Review",
"width": 1920,
"height": 1080,
"slide_count": 3,
"file_path": "/path/to/q4-review-a3f9"
}Update a single slide's HTML content.
Parameters:
presentation_id(string, required): Presentation IDslide_number(integer, required): 1-based slide numberhtml_content(string, required): New HTML content
Add a new slide at a specified position.
Parameters:
presentation_id(string, required): Presentation IDhtml_content(string, required): HTML contentposition(integer, optional): Insert position (defaults to end)
Remove a slide. Remaining slides are renumbered.
Parameters:
presentation_id(string, required): Presentation IDslide_number(integer, required): Slide number to delete
Retrieve a presentation with all slide contents.
Parameters:
presentation_id(string, required): Presentation ID
List all presentations with metadata.
Add a media file to a presentation's media folder.
Parameters:
presentation_id(string, required): Presentation IDsource_path(string, required): Absolute path to media file
Returns: relative_path (e.g., media/chart.png) for use in HTML.
Export to PPTX or PDF.
Parameters:
presentation_id(string, required): Presentation IDformat(string, required):"pptx"or"pdf"output_path(string, required): Output file path
Headless Chrome is required for export. The server uses Rod (Go Chrome DevTools wrapper) which will auto-download Chromium if a system Chrome is not found.
./run.sh testcmd/main.go- Entry point with terminal modepkg/config/- Configuration from env varspkg/presentation/- Core presentation logic and typespkg/storage/- File operations (per-slide HTML, metadata)pkg/screenshot/- Headless Chrome screenshottingpkg/pptx/- PPTX and PDF assemblypkg/handler/- MCP protocol implementation
MIT License