create_presentationLABSCO SUMMARY
Deck automation that carries a house style, not just slides.
The style-profile and template tools are the reason to pick this over a bare python-pptx script — learn a look from an existing deck, apply it elsewhere, and generate a batch of decks from one template. Operation is single-threaded and in-memory, so it suits one deck at a time rather than a server-side pipeline.
What it is
A python-pptx server for PowerPoint files: create or load a deck, add content to it, apply a house style, and save it back out.
What you get
- Deck lifecycle: create_presentation from scratch or a template, load_presentation, save_presentation and get_presentation_info
- Content: add_slide with a choice of layout, add_text_box with font, weight and colour control, add_image from a file or a URL, add_professional_shape
- add_chart covers column, bar, line, pie and area charts driven by your data
- create_from_json builds a deck from a schema, and extract_text pulls all the text back out for analysis
- Style capture and reuse: analyze_presentation_style, create_style_profile, apply_style_profile, save_style_profile and load_style_profile
- Layout discipline: create_layout_grid, snap_to_grid, distribute_shapes, create_color_palette and apply_color_palette, create_typography_profile and apply_typography_style
- Masters and templates: create_master_slide_theme, apply_master_theme, create_template, apply_template and bulk_generate_presentations
- critique_presentation reviews design, content, accessibility and technical issues; screenshot_slides renders slide images on Windows
Requirements
Python with python-pptx installed, run as a local process. Only the modern .pptx format is handled, decks are held in memory while you work on them, and the screenshot tool is Windows-only. No account or key.
Setup effort
Build from source — git clone https://github.com/charleslukowski/ppt_mcp.git
USE CASES
Turning an outline into a first-draft deck
Create the file, add slides on the layouts you want, and drop formatted text boxes onto them.
Matching a client's existing look
Read the style out of a deck they already use, save it as a profile, and apply it to yours.
Getting numbers onto a slide
Build a column, line or pie chart from your data instead of pasting a screenshot of a spreadsheet.
Tidying a slide someone else laid out
Lay a grid over the slide, snap the shapes to it and even out the spacing.
Producing the same deck for many audiences
Define a template with placeholders once, then generate the whole batch from your data.
Sanity-checking before you present
Get a review of design, content and accessibility problems, and on Windows look at rendered slides rather than trusting the XML.
30 tools
Listed in project docs. Your client may show a different list.
load_presentationsave_presentationadd_slideextract_textget_presentation_infoadd_text_boxadd_imageadd_chartcreate_from_jsonadd_professional_shapescreenshot_slidescritique_presentationanalyze_presentation_stylecreate_style_profileapply_style_profilesave_style_profileload_style_profilecreate_layout_gridsnap_to_griddistribute_shapescreate_color_paletteapply_color_palettecreate_typography_profileapply_typography_stylecreate_master_slide_themeapply_master_themecreate_templateapply_templatebulk_generate_presentationsBEFORE YOU INSTALL
What to know first
Tools you get
30 tools named in the project's documentation.
Requires
- Python with pip
- python-pptx and the rest of the clone's requirements.txt
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Server setup
git clone https://github.com/charleslukowski/ppt_mcp.git
cd ppt_mcp
pip install -r requirements.txt
python -c "import pptx; print('python-pptx installed successfully')"MCP Clients
Cursor
{
"mcpServers": {
"powerpoint": {
"command": "python",
"args": [
"<YOUR_PATH_TO_PPT_MCP>/powerpoint_mcp_server.py"
],
"env": {},
"description": "PowerPoint MCP Server for presentation manipulation"
}
}
}<YOUR_PATH_TO_PPT_MCP> is the folder you cloned into. The README's ./powerpoint_mcp_server.py only resolves if Cursor starts the server from that folder, and the README says to update the path.