PowerPoint MCP Server
A Python-based MCP (Model Context Protocol) server for creating and managing PowerPoint presentations using python-pptx.
Features
- Create presentations with title slides
- Add various slide types: title slides, text slides with bullets, image slides, blank slides
- Add content elements: textboxes, shapes (rectangle, oval, etc.), tables
- Query presentations: get slide count, presentation info
- Full programmatic control over PowerPoint files without requiring Microsoft Office
Installation
From PyPI (Recommended)
pip install mcp-pptx-tools
From Source
git clone https://github.com/Prathush21/powerpoint-mcp.git
cd powerpoint-mcp
pip install -e .
Prerequisites
- Python 3.10 or higher
- pip
Usage
Running the server
python -m powerpoint_mcp.server
Or if installed:
powerpoint-mcp
MCP Client Configuration
Add to your MCP client configuration (e.g., Claude Desktop):
{
"mcpServers": {
"powerpoint": {
"command": "python",
"args": ["-m", "powerpoint_mcp.server"]
}
}
}
Or with full path:
{
"mcpServers": {
"powerpoint": {
"command": "/path/to/python",
"args": ["/path/to/powerpoint-mcp/powerpoint_mcp/server.py"]
}
}
}
Available Tools
1. create_presentation
Create a new PowerPoint presentation.
Parameters:
filepath(required): Path where the presentation will be savedtitle(optional): Title for the title slidesubtitle(optional): Subtitle for the title slide
Example:
{
"filepath": "my_presentation.pptx",
"title": "My Awesome Presentation",
"subtitle": "Created with MCP"
}
2. add_title_slide
Add a title slide to an existing presentation.
Parameters:
filepath(required): Path to the PowerPoint filetitle(required): Title textsubtitle(optional): Subtitle text
Example:
{
"filepath": "presentation.pptx",
"title": "Welcome",
"subtitle": "Introduction to MCP"
}
3. add_text_slide
Add a slide with title and bullet points.
Parameters:
filepath(required): Path to the PowerPoint filetitle(required): Slide titlecontent(required): Array of strings for bullet points
Example:
{
"filepath": "presentation.pptx",
"title": "Key Features",
"content": [
"Easy to use",
"Powerful automation",
"Cross-platform compatibility",
"No Microsoft Office required"
]
}
4. add_image_slide
Add a slide with a title and an image.
Parameters:
filepath(required): Path to the PowerPoint filetitle(required): Slide titleimage_path(required): Path to the image fileleft(optional): Left position in inches (default: 1.5)top(optional): Top position in inches (default: 2.5)width(optional): Image width in inches (default: 6)
Example:
{
"filepath": "presentation.pptx",
"title": "Our Product",
"image_path": "/path/to/image.png",
"left": 2,
"top": 2,
"width": 5
}
5. add_blank_slide
Add a blank slide to the presentation.
Parameters:
filepath(required): Path to the PowerPoint file
Example:
{
"filepath": "presentation.pptx"
}
6. add_textbox
Add a textbox to the last slide with custom positioning.
Parameters:
filepath(required): Path to the PowerPoint filetext(required): Text contentleft(required): Left position in inchestop(required): Top position in incheswidth(required): Width in inchesheight(required): Height in inchesfont_size(optional): Font size in points (default: 18)bold(optional): Make text bold (default: false)
Example:
{
"filepath": "presentation.pptx",
"text": "Important Note!",
"left": 1,
"top": 5,
"width": 4,
"height": 1,
"font_size": 24,
"bold": true
}
7. add_shape
Add a shape to the last slide.
Parameters:
filepath(required): Path to the PowerPoint fileshape_type(required): Type of shape - 'rectangle', 'oval', 'rounded_rectangle', 'triangle'left(required): Left position in inchestop(required): Top position in incheswidth(required): Width in inchesheight(required): Height in inchesfill_color(optional): Fill color in hex format (e.g., '#FF0000')
Example:
{
"filepath": "presentation.pptx",
"shape_type": "rectangle",
"left": 2,
"top": 3,
"width": 4,
"height": 2,
"fill_color": "#4472C4"
}
8. add_table
Add a table to the last slide.
Parameters:
filepath(required): Path to the PowerPoint filerows(required): Number of rowscols(required): Number of columnsdata(required): 2D array of table data (rows x cols)left(optional): Left position in inches (default: 1)top(optional): Top position in inches (default: 2)width(optional): Table width in inches (default: 8)height(optional): Table height in inches (default: 4)
Example:
{
"filepath": "presentation.pptx",
"rows": 3,
"cols": 3,
"data": [
["Header 1", "Header 2", "Header 3"],
["Data 1", "Data 2", "Data 3"],
["Data 4", "Data 5", "Data 6"]
]
}
9. get_slide_count
Get the number of slides in a presentation.
Parameters:
filepath(required): Path to the PowerPoint file
Example:
{
"filepath": "presentation.pptx"
}
10. get_presentation_info
Get detailed information about a presentation.
Parameters:
filepath(required): Path to the PowerPoint file
Example:
{
"filepath": "presentation.pptx"
}
Testing
Run the test suite:
python test_server.py
This will:
- Start the MCP server
- Run comprehensive tests of all tools
- Create a test presentation (
test_presentation.pptx) - Display test results
- Clean up and shut down
Example Workflow
# 1. Create a new presentation
create_presentation(filepath="demo.pptx", title="Sales Report", subtitle="Q4 2024")
# 2. Add content slides
add_text_slide(
filepath="demo.pptx",
title="Overview",
content=["Revenue increased 25%", "New customers: 1,200", "Market expansion successful"]
)
# 3. Add a table with data
add_blank_slide(filepath="demo.pptx")
add_table(
filepath="demo.pptx",
rows=4,
cols=3,
data=[
["Quarter", "Revenue", "Growth"],
["Q1", "$1.2M", "15%"],
["Q2", "$1.5M", "20%"],
["Q3", "$1.8M", "25%"]
]
)
# 4. Add visual elements
add_blank_slide(filepath="demo.pptx")
add_shape(
filepath="demo.pptx",
shape_type="rectangle",
left=1, top=2, width=3, height=2,
fill_color="#00B050"
)
add_textbox(
filepath="demo.pptx",
text="Revenue Growth",
left=1.5, top=2.5, width=2, height=0.5,
font_size=20, bold=True
)
# 5. Get info
get_presentation_info(filepath="demo.pptx")
Architecture
The server is built using:
- MCP SDK: For Model Context Protocol implementation
- python-pptx: For PowerPoint file manipulation
- asyncio: For asynchronous operation handling
Limitations
- Some advanced PowerPoint features are not supported by python-pptx
- Charts and complex animations require additional implementation
- The server operates on files (not in-memory editing with auto-save)
Contributing
Contributions are welcome! Areas for enhancement:
- Add chart support (bar, line, pie charts)
- Add more shape types
- Support for themes and templates
- Slide master customization
- Animation support
License
MIT
Resources
Metadata
Release files for mcp-pptx-tools 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mcp_pptx_tools-1.0.0.tar.gz | 8.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcp_pptx_tools-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.6 kB
Release files / mcp_pptx_tools-1.0.0.tar.gz
| Download URL | mcp_pptx_tools-1.0.0.tar.gz |
|---|---|
| Size | 8.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0ace465403dd83829a60f817da4b7b0a9536c5af43bba9444a0fe05029f280bf
|
|
BLAKE2b-256 checksum How to use checksums |
91c2219bd8e2b3d9a4089122f83528ea2f786792c24396d7ee6836f8b4d01165
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.11
|
Release files / mcp_pptx_tools-1.0.0-py3-none-any.whl
| Download URL | mcp_pptx_tools-1.0.0-py3-none-any.whl |
|---|---|
| Size | 8.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c5b25cd04901b84c2069c946a047a085247db31e7735f51608ae859d308f7c38
|
|
BLAKE2b-256 checksum How to use checksums |
91e67db1a82847aa92f72874c2a21c3503e6f536ac63296611ea7029e25a13b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.11
|