wolf-ms-ppt-mcp
An MCP server for creating and editing local PowerPoint (.pptx) presentations without Microsoft Office.
Create presentations (blank 16:9 or from .pptx/.potx templates), open existing decks, and save or save as.
List slides and inspect slide shapes, text, images, positions, and sizes.
Add, duplicate, delete, and move slides using layouts and insertion positions.
Set slide text (titles, subtitles, bodies, named shapes), add text boxes, and find/replace text.
Insert images from local paths or HTTP(S) URLs with optional size and position in inches.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@wolf-ms-ppt-mcp Create a 5-slide PowerPoint about renewable energy and add an image to slide 2."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
wolf-ms-ppt-mcp
MCP server that lets AI agents create and manipulate Microsoft PowerPoint
presentations (.pptx) locally, without requiring Microsoft Office.
Status
Phases 1, 2 and 3 are implemented.
Phase 1 — Foundation and reading:
create_presentation— create a new deck (16:9 by default) or from a template.open_presentation— open an existing.pptx.save_presentation/save_as— persist changes.list_slides— list slides with layout, title and text preview.inspect_slide— detailed shapes/text/images/positions of one slide.
Phase 2 — Slide management:
add_slide— add a slide using a layout, optionally at a given position.duplicate_slide— duplicate a slide (shapes, background and images).delete_slide— delete a slide.move_slide— reorder slides.
Phase 3 — Content (text and images):
set_slide_text— set slide titles, subtitles, bodies or named shapes, with optional color.add_text_box— add a text box at a position (inches), with optional color.replace_text— find/replace text across all slides or one slide.add_image— insert an image from a local path or an http(s) URL.
All planned MVP phases are implemented. Future work includes verifying PowerPoint for the Web and the post-MVP versions (COM backend, advanced content, cloud).
Related MCP server: PowerPoint MCP Server
Requirements
Python 3.11+
No Microsoft Office installation required
Installation
uv syncOr install from source:
pip install .Usage
Run the server over stdio:
uv run wolf-ms-ppt-mcpConfigure your MCP client (Claude, Cursor, etc.):
{
"mcpServers": {
"wolf-ms-ppt": {
"command": "uv",
"args": [
"--directory",
"/path/to/wolf-ms-ppt-mcp",
"run",
"wolf-ms-ppt-mcp"
]
}
}
}Once published to PyPI, this can be simplified to uvx wolf-ms-ppt-mcp.
Development
uv sync --extra dev
uv run pytestContributing
See CONTRIBUTING.md.
Security
See SECURITY.md.
Changelog
See CHANGELOG.md.
License
MIT. See LICENSE. Third-party attributions are listed in
THIRD_PARTY_LICENSES.md.
Disclaimer
PowerPoint and Microsoft Office are trademarks of Microsoft Corporation. This project is not affiliated with or endorsed by Microsoft.
Available Tools
14 toolsadd_imageB
Insert an image from a local path or an http(s) URL.
Args: index: Zero-based index of the slide. source: Local file path or http(s) URL. x: Left position in inches. y: Top position in inches. w: Optional width in inches (keeps aspect ratio if h is omitted). h: Optional height in inches (keeps aspect ratio if w is omitted).
Inputs: x (required), y (required), index (required), source (required), +2 more.
add_slideA
Add a new slide to the current presentation.
Args: layout_name: Name of the slide layout to use. Defaults to "Title and Content" when available, otherwise "Blank". index: Optional zero-based position to insert the slide at. When omitted, the slide is appended at the end.
Inputs: index, layout_name.
add_text_boxB
Add a text box to a slide. Coordinates and size are in inches.
Args: index: Zero-based index of the slide. text: Text content (use \n for multiple paragraphs). x: Left position in inches. y: Top position in inches. w: Width in inches. h: Height in inches.
Inputs: h (required), w (required), x (required), y (required), +2 more.
create_presentationC
Create a new PowerPoint presentation and make it the current one.
Args: path: Optional file path where the presentation will be saved later. template_path: Optional .pptx or .potx template to base the deck on. When omitted, a blank 16:9 presentation is created.
Inputs: path, template_path.
delete_slideB
Delete a slide from the current presentation.
Args: index: Zero-based index of the slide to delete.
Inputs: index (required).
duplicate_slideA
Duplicate a slide, copying its shapes, background and images.
Args: index: Zero-based index of the slide to duplicate. new_index: Optional zero-based position for the copy. When omitted, the copy is appended at the end.
Inputs: index (required), new_index.
inspect_slideA
Return detailed information about one slide.
Includes each shape's id, name, type, placeholder status, position and size (in inches), plus text and image metadata when present.
Args: index: Zero-based index of the slide.
Inputs: index (required).
list_slidesA
List all slides in the current presentation.
Returns the index, layout name, title, shape count and a short text preview for each slide.
Inputs: no named parameters.
move_slideC
Move a slide to a new position.
Args: from_index: Zero-based index of the slide to move. to_index: Zero-based destination index.
Inputs: to_index (required), from_index (required).
open_presentationB
Open an existing .pptx file and make it the current presentation.
Args: path: Path to the .pptx file to open.
Inputs: path (required).
replace_textC
Replace exact text in the current presentation.
Args: find: Text to search for (must be non-empty). replace: Replacement text. scope: None or "all" for every slide, or a zero-based slide index.
Inputs: find (required), replace (required), scope.
save_asC
Save the current presentation to a new path.
Args: path: Destination path for the .pptx file.
Inputs: path (required).
save_presentationB
Save the current presentation to its current path.
Inputs: no named parameters.
set_slide_textB
Set the text of a slide.
Args: index: Zero-based index of the slide. content: Either a string (sets the slide title) or an object mapping targets to text. Targets can be "title", "subtitle", "body", "content", a placeholder index as a string, or a shape name. Values can be strings or lists of paragraphs.
Inputs: index (required), content (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Tools are cleanly separated by object and action: presentation lifecycle, slide CRUD/reorder, and content insertion/replacement. The only mild overlap is set_slide_text vs replace_text vs add_text_box, but the descriptions make their scopes clear.
All tools use snake_case and start with an action verb, mostly following a verb_noun pattern such as create_presentation, list_slides, and add_image. save_as is a minor deviation from strict verb_noun naming but remains predictable.
Fourteen tools is well within the appropriate range for a PowerPoint authoring server. The set covers presentation, slide, and basic content operations without excessive fragmentation.
Core presentation and slide lifecycle is covered, plus text and image insertion. However, content editing is incomplete: there is no shape/image deletion or update, no table/chart/shape drawing, and no formatting or notes operations, creating dead ends for richer edits.
Maintenance
Related MCP Connectors
Generate AI slide decks and export native PowerPoint (.pptx) and PDF presentations from chat.
Productivity toolbox for Personal Agents: create PPTs, covers, websites, music and process files.
Convert, create and edit Word, PowerPoint, Excel and PDF documents from any AI agent.
Create professionally designed, editable PowerPoint presentations from a prompt.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables AI assistants to create, edit, and manipulate PowerPoint presentations programmatically with support for text styling, shapes, slide rearrangement, and direct Office XML access.81-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with PowerPoint presentations through natural language commands, supporting reading, editing, slide management, and automated speaker notes processing.MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to create, modify, and manage PowerPoint presentations programmatically using python-pptx.17-
- FlicenseCqualityCmaintenanceEnables conversational, deterministic inspection, editing, rendering, and validation of PowerPoint (.pptx) presentations, allowing agentic creation and modification of slides with style preservation and visual verification.34-