MCP server for PPTX presentation editing — create, read, and edit PowerPoint slides with professional formatting
Project description
pptx-mcp-server
MCP server for creating, reading, and editing PowerPoint (.pptx) presentations. Provides 25 tools for slide management, shape/text manipulation, table operations, composite layouts, and slide rendering -- all accessible via the Model Context Protocol.
Installation
pptx-mcp-server ships with two install paths: a minimal library install for
driving the engine programmatically, and an [mcp] extra for running the MCP
server CLI.
# Library usage (no MCP runtime — only python-pptx + lxml):
pip install pptx-mcp-server
# MCP server (includes the mcp SDK):
pip install 'pptx-mcp-server[mcp]'
The MCP SDK lives behind the [mcp] extra so that pure-library consumers do
not pay for the MCP SDK + anyio transitive dependencies at install time. The
pptx-mcp-server CLI and pptx_mcp_server.server module require the [mcp]
extra; importing them without it raises a clear ImportError pointing back here.
Claude Desktop Configuration
Add the following to your Claude Desktop MCP config (claude_desktop_config.json):
{
"mcpServers": {
"pptx-editor": {
"command": "pptx-mcp-server"
}
}
}
Or, if running from source:
{
"mcpServers": {
"pptx-editor": {
"command": "python",
"args": ["-m", "pptx_mcp_server"]
}
}
}
Use as a Python library
pptx-mcp-server also ships a pure-Python engine you can drive directly,
without starting an MCP server. The engine and theme modules have no
dependency on the MCP SDK at import time, so you can build decks from scripts,
notebooks, or batch jobs.
Install it the same way you would any other package — the bare install does not pull the MCP SDK:
# From PyPI (once published) — library only:
pip install pptx-mcp-server
# From a local checkout (editable install during development):
pip install -e /path/to/pptx-mcp-server
Then compose a deck by calling the engine functions directly:
from pptx_mcp_server.engine.pptx_io import create_presentation, open_pptx
from pptx_mcp_server.engine.shapes import add_textbox
from pptx_mcp_server.engine.slides import add_slide
from pptx_mcp_server.theme import MCKINSEY
out = "deck.pptx"
create_presentation(out, width_inches=13.333, height_inches=7.5)
add_slide(out, layout_index=6)
add_textbox(
out,
slide_index=0,
left=1.0, top=1.0, width=10.0, height=1.0,
text="Hello from pptx_mcp_server",
font_name=MCKINSEY.fonts.get("body", "Arial"),
font_size=24,
bold=True,
)
prs = open_pptx(out)
print(f"Slides: {len(prs.slides)}")
The mcp SDK is an optional extra (pip install 'pptx-mcp-server[mcp]')
and is only required when launching the pptx-mcp-server CLI / importing
pptx_mcp_server.server. Nothing in pptx_mcp_server.engine or
pptx_mcp_server.theme imports it — an AST-level CI guardrail in
tests/test_library_usage.py enforces that, and
tests/test_packaging_extras.py enforces the packaging side of the split.
Tools
Presentation
| Tool | Description |
|---|---|
pptx_create |
Create a new blank PPTX file (default 16:9 widescreen) |
pptx_get_info |
Get presentation overview: slide count, dimensions, shape summaries |
pptx_read_slide |
Read detailed content of a slide -- all shapes, text, tables |
pptx_list_shapes |
List all shapes on a slide with indices, types, positions, text preview |
Slides
| Tool | Description |
|---|---|
pptx_add_slide |
Add a new slide with a specified layout |
pptx_delete_slide |
Delete a slide by 0-based index |
pptx_duplicate_slide |
Duplicate a slide (appended at end) |
pptx_set_slide_background |
Set solid background color for a slide |
pptx_set_dimensions |
Set presentation slide dimensions in inches |
Text & Shapes
| Tool | Description |
|---|---|
pptx_add_textbox |
Add a text box with full formatting options |
pptx_edit_text |
Edit text content and formatting in an existing shape |
pptx_add_paragraph |
Append a new paragraph to an existing shape |
pptx_add_shape |
Add an auto shape (rectangle, oval, arrow, chevron, etc.) |
pptx_add_image |
Add an image (PNG, JPG, SVG) to a slide with optional sizing |
pptx_delete_shape |
Delete a shape from a slide by index |
pptx_format_shape |
Reposition, resize, or restyle an existing shape |
Tables
| Tool | Description |
|---|---|
pptx_add_table |
Add a professionally formatted table with headers and alternating rows |
pptx_edit_table_cell |
Edit a single table cell's text and formatting |
pptx_edit_table_cells |
Batch edit multiple table cells |
pptx_format_table |
Apply bulk formatting to an entire table |
Composites
| Tool | Description |
|---|---|
pptx_add_content_slide |
Add a content slide with action title, divider, footnote, page number |
pptx_add_section_divider |
Add a section divider slide with dark background and accent stripes |
pptx_add_kpi_row |
Add a row of KPI callout boxes |
pptx_add_bullet_block |
Add a bulleted text block with multiple items |
Rendering
| Tool | Description |
|---|---|
pptx_render_slide |
Render slide(s) to PNG via LibreOffice for visual verification |
Dependencies
Required (installed by pip install pptx-mcp-server):
- python-pptx -- PPTX file manipulation
- lxml -- XML processing
Optional extra (installed by pip install 'pptx-mcp-server[mcp]'):
- mcp -- Model Context Protocol SDK
(required only for the
pptx-mcp-serverCLI /pptx_mcp_server.server)
System tools
- LibreOffice -- required for
pptx_render_slide(PPTX to PDF conversion). Install withbrew install --cask libreoffice(macOS) or your system package manager. - pdftoppm (poppler-utils) -- required for
pptx_render_slide(PDF to PNG conversion). Install withbrew install poppler(macOS) orapt install poppler-utils(Debian/Ubuntu).
Development
# Install in editable mode
pip install -e .
# Run tests
python -m pytest tests/ -v
See CONTRIBUTING.md for development conventions.
License
MIT -- see LICENSE for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pptx_mcp_server-0.1.0.tar.gz.
File metadata
- Download URL: pptx_mcp_server-0.1.0.tar.gz
- Upload date:
- Size: 1.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbe88af6ec5b9bb99940160a6583813949ed557ba4394ce47ee5aa7731e33f8a
|
|
| MD5 |
1639edd9a0aa2f8b0dc57bdc10c9681f
|
|
| BLAKE2b-256 |
40f37734a85990e595d65e87e351eda45161cb10571f3dac12fa0933bc89d235
|
Provenance
The following attestation bundles were made for pptx_mcp_server-0.1.0.tar.gz:
Publisher:
publish.yml on knorq-ai/pptx-mcp-server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pptx_mcp_server-0.1.0.tar.gz -
Subject digest:
bbe88af6ec5b9bb99940160a6583813949ed557ba4394ce47ee5aa7731e33f8a - Sigstore transparency entry: 1340580685
- Sigstore integration time:
-
Permalink:
knorq-ai/pptx-mcp-server@e22039142180107d2bd4a923b353e9f720aec637 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/knorq-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e22039142180107d2bd4a923b353e9f720aec637 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pptx_mcp_server-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pptx_mcp_server-0.1.0-py3-none-any.whl
- Upload date:
- Size: 1.3 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af66b884a53002a74795ef3744a6b717f33b65d16273c51d4ca2cdaa1fd75f0b
|
|
| MD5 |
ee8ce81ab32c4f137801063f3844e20a
|
|
| BLAKE2b-256 |
382f227c503329ef811a9205f306ba8706d925bd4f0d0cf000309829071bcda6
|
Provenance
The following attestation bundles were made for pptx_mcp_server-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on knorq-ai/pptx-mcp-server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pptx_mcp_server-0.1.0-py3-none-any.whl -
Subject digest:
af66b884a53002a74795ef3744a6b717f33b65d16273c51d4ca2cdaa1fd75f0b - Sigstore transparency entry: 1340580687
- Sigstore integration time:
-
Permalink:
knorq-ai/pptx-mcp-server@e22039142180107d2bd4a923b353e9f720aec637 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/knorq-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e22039142180107d2bd4a923b353e9f720aec637 -
Trigger Event:
push
-
Statement type: