Command Palette

Search for a command to run...

UnylyUnyly
Browse all

Pptx Minio

FreeNot checked

Enables PowerPoint presentation generation and uploading to MinIO storage, returning presigned download links.

GitHubEmbed

About

Enables PowerPoint presentation generation and uploading to MinIO storage, returning presigned download links.

README

smithery badge

A comprehensive MCP (Model Context Protocol) server for PowerPoint manipulation using python-pptx. Version 2.0 provides 32 powerful tools organized into 11 specialized modules, offering complete PowerPoint creation, management, and professional design capabilities. The server features a modular architecture with enhanced parameter handling, intelligent operation selection, and comprehensive error handling.

中文说明:PPT 生成 + MinIO 下载

本项目基于开源项目 GongRzhe/Office-PowerPoint-MCP-Server 做最小业务扩展。PPT 生成能力仍然来自原开源 MCP 和 python-pptx,本项目只补充“本地 artifact 管理 + 上传 MinIO + 返回下载链接”的能力。

推荐工具边界

现在不再建议把所有动作都塞进一个大工具里。MCP 同时提供分步工具和兼容的一键工具:

工具 用途
create_pptx_artifact 只生成 PPTX,并保存到隔离的本地 artifact 目录,返回 artifact_id
upload_pptx_artifact_to_minio 只上传已生成的 artifact_id,返回 MinIO presigned 下载链接
get_pptx_artifact_info 查询 artifact 是否存在、页数、文件名、状态等信息
cleanup_pptx_artifact 删除本地 artifact 临时目录
generate_pptx_upload_minio 兼容工具,内部执行“生成 -> 上传 -> 清理”

简单场景可以继续使用 generate_pptx_upload_minio。复杂 PPT、长 PPT、多风格 PPT、或者 Agent 容易把参数拼坏的场景,推荐使用 create_pptx_artifact + upload_pptx_artifact_to_minio

推荐架构

Java Agent / Spring AI
        |
        | MCP streamable-http
        v
pptx-minio-mcp
        |
        | create_pptx_artifact
        v
local artifact dir
        |
        | upload_pptx_artifact_to_minio
        v
MinIO / S3-compatible storage
        |
        | presigned url
        v
User browser download

为什么要拆分

拆分之后,PPT 生成失败、JSON 参数失败、MinIO 配置失败、上传失败会分开暴露,Agent 更容易恢复。

如果上传失败但生成成功,返回里会包含 artifact_id,这时只需要重试 upload_pptx_artifact_to_minio,不需要重新生成 PPT。

上传成功后默认清理本地文件,避免并发用户长期堆积临时 PPT。调试时可以传 keep_local: true 保留本地文件。

环境变量

可以通过系统环境变量、Docker 环境变量、平台 Secret 或 env 文件注入。示例文件见 pptx-minio.env.example

MINIO_ENDPOINT=your-minio-host.example.com
MINIO_PORT=9000
MINIO_USE_SSL=false
MINIO_ACCESS_KEY=REPLACE_ME
MINIO_SECRET_KEY=REPLACE_ME
MINIO_BUCKET_NAME=your-bucket
MINIO_PUBLIC_ENDPOINT=
MINIO_PRESIGN_EXPIRES=604800
PPTX_OBJECT_PREFIX=presentations
PPTX_MINIO_WORK_DIR=
PPTX_CLEANUP_LOCAL=true
DEBUG_MCP_ECHARTS=true

配置加载优先级:

系统环境变量 > PPTX_MINIO_ENV_FILE 指定文件 > 当前目录 .env > 当前目录 pptx-minio.env > ~/.codex/pptx-minio.env > /etc/pptx-minio.env > 项目目录 pptx-minio.env > 项目目录 pptx-minio.env.example

变量说明:

变量 必填 说明
MINIO_ENDPOINT MCP 服务上传文件时访问的 MinIO API 地址
MINIO_PORT MinIO API 端口
MINIO_USE_SSL 是否使用 HTTPS
MINIO_ACCESS_KEY MinIO access key,不要返回给用户
MINIO_SECRET_KEY MinIO secret key,不要返回给用户
MINIO_BUCKET_NAME 上传使用的 bucket 名称
MINIO_PUBLIC_ENDPOINT 用户浏览器下载时访问的外部地址
MINIO_PRESIGN_EXPIRES 下载链接有效期,单位秒,最大 604800
PPTX_OBJECT_PREFIX MinIO object key 前缀,默认 presentations
PPTX_MINIO_WORK_DIR 本地 artifact 工作目录,默认系统临时目录
PPTX_CLEANUP_LOCAL 上传成功后是否删除本地 artifact,默认 true
PPTX_MINIO_ENV_FILE 显式指定 env 配置文件路径

内外网地址说明

MINIO_ENDPOINT 是 MCP 服务端上传文件时使用的地址。

MINIO_PUBLIC_ENDPOINT 是最终用户浏览器下载文件时使用的地址。

如果 MCP 服务和 MinIO 在同一个 Docker 网络内,而用户从公网下载,建议这样配置:

MINIO_ENDPOINT=minio
MINIO_PORT=9000
MINIO_USE_SSL=false
MINIO_PUBLIC_ENDPOINT=https://files.example.com

如果 MCP 服务直接通过公网 MinIO 地址上传和下载,可以不配置 MINIO_PUBLIC_ENDPOINT

MINIO_ENDPOINT=your-minio-public.example.com
MINIO_PORT=9000
MINIO_USE_SSL=true
MINIO_PUBLIC_ENDPOINT=

本地启动

Windows PowerShell:

cd C:\Users\28582\Desktop\dev\mcp\mcp_server\pptx-minio-mcp
pip install -r requirements.txt
Copy-Item .\pptx-minio.env.example .\pptx-minio.env
notepad .\pptx-minio.env
python ppt_mcp_server.py --transport http --host 0.0.0.0 --port 8000

Linux / macOS:

cd /path/to/pptx-minio-mcp
pip install -r requirements.txt
cp pptx-minio.env.example pptx-minio.env
vi pptx-minio.env
python ppt_mcp_server.py --transport http --host 0.0.0.0 --port 8000

默认情况下,--host127.0.0.1,只允许本机访问。如果需要让局域网、Docker 容器或 Spring AI 服务访问,请使用 --host 0.0.0.0

如果访问时报:

HTTP 421 Invalid Host header

说明请求里的 Host 头没有通过 MCP SDK 的 DNS rebinding 保护校验。生产环境可以通过 --allowed-hosts--allowed-origins 显式配置白名单。

Spring AI 连接示例

推荐使用 streamable HTTP,不推荐生产环境使用 stdio。

spring:
  ai:
    mcp:
      client:
        toolcallback:
          enabled: true
        streamable-http:
          connections:
            pptx-minio:
              url: http://pptx-minio-mcp:8000
              endpoint: /mcp

分步工具示例

先生成本地 artifact:

{
  "title": "人工智能发展历程",
  "topic": "AI 从规则系统到大模型的发展路径",
  "language": "zh-CN",
  "user_id": "user-123",
  "filename": "人工智能发展历程.pptx",
  "visual_style": "timeline_blue",
  "slides": []
}

返回示例:

{
  "artifact_id": "pptx_20260618_ab12cd34ef56",
  "filename": "人工智能发展历程.pptx",
  "slide_count": 8,
  "status": "generated"
}

再上传 artifact:

{
  "artifact_id": "pptx_20260618_ab12cd34ef56",
  "user_id": "user-123"
}

返回示例:

{
  "download_url": "https://files.example.com/...?X-Amz-Signature=...",
  "object_key": "presentations/users/user-123/2026/06/18/pptx_20260618_ab12cd34ef56/人工智能发展历程.pptx",
  "bucket": "your-bucket",
  "filename": "人工智能发展历程.pptx",
  "slide_count": 8,
  "expires_at": "2026-06-25T00:00:00Z",
  "status": "uploaded"
}

一键工具示例

简单场景仍然可以使用:

generate_pptx_upload_minio

它内部会执行:

create_pptx_artifact -> upload_pptx_artifact_to_minio -> cleanup_pptx_artifact

如果上传失败但生成成功,会返回 artifact_id,Agent 应该复用这个 artifact_id 重试上传。

受控设计系统

默认生成引擎已经切换为受控中文设计系统:

{
  "layout_engine": "design_system",
  "theme": "dark_tech",
  "design_profile": "auto",
  "layout_diversity": "high"
}

design_system 会使用稳定的中文商业 PPT 布局函数生成页面,避免上游演示模板中的 Image 1Metric/Q1/Q2、默认 Contact、英文 placeholder 等内容泄露到最终 PPT。

如果需要回退到旧版手写高级布局,可以传:

{
  "layout_engine": "premium_simple"
}

如果需要实验性调用开源 MCP 自带的 slide_layout_templates.json 模板库,可以传:

{
  "layout_engine": "upstream_templates"
}

upstream_templates 不建议用于生产默认路径,因为上游模板库包含演示占位内容,需要非常完整的字段映射才能避免 placeholder 泄露。

如果需要回退到原开源基础模板映射,可以传:

{
  "layout_engine": "classic_template"
}

复杂 PPT 建议让 Agent 先规划每页信息类型,再交给 design_system 决定最终布局。不要把所有内容页都写成 bullets

支持的 slide type

type 说明
title 封面页
agenda 目录页
bullets 要点页
two-column 双栏内容页
three-column 三栏结构页
metrics 数据指标页
timeline 时间线页
process 流程步骤页
comparison 对比页
before-after 前后对比页
quote 引用观点页
table 数据表格页
team 团队介绍页
product 产品或方案展示页
chapter 章节过渡页
closing 结束页

生产默认不建议让 Agent 显式指定上游 template_id。只有在 layout_engineupstream_templates 的实验模式下,才考虑使用 template_id,例如:

{
  "type": "metrics",
  "title": "AI 应用价值指标",
  "template_id": "key_metrics_dashboard",
  "metrics": [
    {"label": "效率提升", "value": "40%"},
    {"label": "成本下降", "value": "25%"},
    {"label": "响应速度", "value": "3x"}
  ]
}

常用模板包括:

template_id 用途
title_slide 标准封面
minimalist_hero 极简封面
neon_cyberpunk 科技感封面
agenda_slide 目录
chapter_intro 章节过渡
text_with_image 图文要点
three_column_layout 三栏分析
two_column_text 双栏分析
key_metrics_dashboard 指标看板
timeline_slide 时间线
process_flow 流程图
before_after_comparison 前后对比
split_screen_comparison 左右对比
quote_testimonial 引用观点
data_table_slide 数据表格
team_introduction 团队介绍
product_showcase 产品展示
thank_you_slide 结束页

视觉风格

visual_style 说明
auto 默认,根据主题自动选择
timeline_blue 发展历程、时间线、阶段演进
executive_dark 商业战略、企业汇报、管理层汇报
academic_clean 研究报告、课程、教育、学术内容
warm_story 品牌、营销、故事型内容
premium_ai 通用 AI / 科技商业风
minimalist 极简黑白灰风格
creative_gradient 创意、活动、设计提案
classic_template 回退到开源 MCP 基础模板

并发与清理

每次生成都会创建独立 artifact_id,本地目录和 MinIO object key 都包含该 ID,避免并发用户互相覆盖。

默认 object key 格式:

presentations/users/<user_id>/YYYY/MM/DD/<artifact_id>/<filename>.pptx

上传成功后默认删除本地 artifact。如果需要调试,可以传:

{
  "keep_local": true
}

常见问题

如果 Spring AI 只能连接 127.0.0.1,说明 MCP 服务只监听本机地址。生产环境建议监听 0.0.0.0,并通过服务器 IP、Docker service name、Kubernetes Service 或 Nginx 域名访问。

如果上传成功但用户无法下载,优先检查 MINIO_PUBLIC_ENDPOINT 是否是用户浏览器可以访问的公网或内网地址。

如果返回 Missing required MinIO configuration,说明 MINIO_ACCESS_KEYMINIO_SECRET_KEYMINIO_BUCKET_NAME 没有注入到 MCP 服务进程。

如果 bucket 不存在,需要先在 MinIO 中创建 bucket,或者给当前 access key 分配创建 bucket / 写入 object 的权限。

如果下载链接过期,重新调用上传工具生成新的 presigned URL,或者调大 MINIO_PRESIGN_EXPIRES

Not so ugly anymore with new slide_layout_templates

截屏2025-06-20 15 53 45

Example

Prompt

650f4cc5d0f1ea4f3b1580800cb0deb

Output

084f1cf4bc7e4fcd4890c8f94f536c1

Demo's GIF -> (./public/demo.mp4)

Skill(配套说明)

仓库内已内置与本 MCP 匹配的 Skill:

./.codex/skills/pptx-minio-upload/SKILL.md

你可以直接将该目录作为配套文档发布,或在本机按需复制到:

  • C:\Users\<user>\.codex\skills\
  • ~/.codex/skills/

Skill 的目标是让 Agent 只关心“生成 + 下载”两个动作,不直接接触 MinIO 底层细节和本地文件路径。

demo

Features

Core PowerPoint Operations

  • Round-trip support for any Open XML presentation (.pptx file) including all elements
  • Template support with automatic theme and layout preservation
  • Multi-presentation management with global state tracking
  • Core document properties management (title, subject, author, keywords, comments)

Content Creation & Management

  • Slide management with flexible layout selection
  • Text manipulation with placeholder population and bullet point creation
  • Advanced text formatting with font, color, alignment, and style controls
  • Text validation with automatic fit checking and optimization suggestions

Visual Elements

  • Image handling with file and base64 input support
  • Image enhancement using Pillow with brightness, contrast, saturation, and filter controls
  • Professional image effects including shadows, reflections, glows, and soft edges
  • Shape creation with 20+ auto shape types (rectangles, ovals, flowchart elements, etc.)
  • Table creation with advanced cell formatting and styling

Charts & Data Visualization

  • Chart support for column, bar, line, and pie charts
  • Data series management with categories and multiple series support
  • Chart formatting with legends, data labels, and titles

Professional Design Features

  • 4 professional color schemes (Modern Blue, Corporate Gray, Elegant Green, Warm Red)
  • Professional typography with Segoe UI font family and size presets
  • Theme application with automatic styling across presentations
  • Gradient backgrounds with customizable directions and color schemes
  • Slide enhancement tools for existing content
  • 25 built-in slide templates with dynamic sizing and visual effects
  • Advanced template features including auto-wrapping, dynamic font sizing, and professional animations

Advanced Features

  • Font analysis and optimization using FontTools
  • Picture effects with 9 different visual effects (shadow, reflection, glow, bevel, etc.)
  • Comprehensive validation with automatic error fixing
  • Template search with configurable directory paths
  • Professional layout calculations with margin and spacing management

Installation

Installing via Smithery

To install PowerPoint Manipulation Server for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install @GongRzhe/Office-PowerPoint-MCP-Server --client claude

Prerequisites

  • Python 3.6 or higher (as specified in pyproject.toml)
  • pip package manager
  • Optional: uvx for package execution without local installation

Installation Options

Option 1: Using the Setup Script (Recommended)

The easiest way to set up the PowerPoint MCP Server is using the provided setup script, which automates the installation process:

python setup_mcp.py

This script will:

  • Check prerequisites
  • Offer installation options:
    • Install from PyPI (recommended for most users)
    • Set up local development environment
  • Install required dependencies
  • Generate the appropriate MCP configuration file
  • Provide instructions for integrating with Claude Desktop

The script offers different paths based on your environment:

  • If you have uvx installed, it will configure using UVX (recommended)
  • If the server is already installed, it provides configuration options
  • If the server is not installed, it offers installation methods

Option 2: Manual Installation

  1. Clone the repository:

    git clone https://github.com/GongRzhe/Office-PowerPoint-MCP-Server.git
    cd Office-PowerPoint-MCP-Server
    
  2. Install dependencies:

    pip install -r requirements.txt
    
  3. Make the server executable:

    chmod +x ppt_mcp_server.py
    

Usage

Display help text:

python ppt_mcp_server.py -h

Starting the Stdio Server

Run the stdio server:

python ppt_mcp_server.py

Starting the Streamable-Http Server

Run the streamable-http server on port 8000:

python ppt_mcp_server.py --transport http --port 8000

Run in Docker

docker build -t ppt_mcp_server .
docker run -d --rm -p 8000:8000 ppt_mcp_server -t http

MCP Configuration

Option 1: Local Python Server

Add the server to your MCP settings configuration file:

{
  "mcpServers": {
    "ppt": {
      "command": "python",
      "args": ["/path/to/ppt_mcp_server.py"],
      "env": {}
    }
  }
}

Option 2: Using UVX (No Local Installation Required)

If you have uvx installed, you can run the server directly from PyPI without local installation:

{
  "mcpServers": {
    "ppt": {
      "command": "uvx",
      "args": [
        "--from", "office-powerpoint-mcp-server", "ppt_mcp_server"
      ],
      "env": {}
    }
  }
}

🚀 What's New in v2.0

Comprehensive Tool Suite (32 Tools)

  • Complete PowerPoint manipulation with 34 specialized tools
  • 11 organized modules covering all aspects of presentation creation
  • Enhanced parameter handling with comprehensive validation
  • Intelligent defaults and operation-based interfaces

Built-in Slide Templates

  • 25+ professional slide templates with dynamic features built-in
  • Advanced template system with auto-generation capabilities
  • Auto-sizing text that adapts to content length and container size
  • Professional visual effects including shadows, glows, and gradients
  • Complete presentation generation from template sequences

Modular Architecture

  • 11 specialized modules: presentation, content, structural, professional, template, hyperlink, chart, connector, master, and transition tools
  • Better maintainability with separated concerns
  • Easier extensibility for adding new features
  • Cleaner code structure with shared utilities

Available Tools

The server provides 34 specialized tools organized into the following categories:

Presentation Management (7 tools)

  1. create_presentation - Create new presentations
  2. create_presentation_from_template - Create from templates with theme preservation
  3. open_presentation - Open existing presentations
  4. save_presentation - Save presentations to files
  5. get_presentation_info - Get comprehensive presentation information
  6. get_template_file_info - Analyze template files and layouts
  7. set_core_properties - Set document properties

Content Management (8 tools)

  1. add_slide - Add slides with optional background styling
  2. get_slide_info - Get detailed slide information
  3. extract_slide_text - ✨ NEW Extract all text content from a specific slide
  4. extract_presentation_text - ✨ NEW Extract text content from all slides in presentation
  5. populate_placeholder - Populate placeholders with text
  6. add_bullet_points - Add formatted bullet points
  7. manage_text - ✨ Unified text tool (add/format/validate/format_runs)
  8. manage_image - ✨ Unified image tool (add/enhance)

Template Operations (7 tools)

  1. list_slide_templates - Browse available slide layout templates
  2. apply_slide_template - Apply structured layout templates to existing slides
  3. create_slide_from_template - Create new slides using layout templates
  4. create_presentation_from_templates - Create complete presentations from template sequences
  5. get_template_info - Get detailed information about specific templates
  6. auto_generate_presentation - Automatically generate presentations based on topic
  7. optimize_slide_text - Optimize text elements for better readability and fit

Structural Elements (4 tools)

  1. add_table - Create tables with enhanced formatting
  2. format_table_cell - Format individual table cells
  3. add_shape - Add shapes with text and formatting options
  4. add_chart - Create charts with comprehensive customization

Professional Design (3 tools)

  1. apply_professional_design - ✨ Unified design tool (themes/slides/enhancement)
  2. apply_picture_effects - ✨ Unified effects tool (9+ effects combined)
  3. manage_fonts - ✨ Unified font tool (analyze/optimize/recommend)

Specialized Features (5 tools)

  1. manage_hyperlinks - Complete hyperlink management (add/remove/list/update)
  2. manage_slide_masters - Access and manage slide master properties and layouts
  3. add_connector - Add connector lines/arrows between points on slides
  4. update_chart_data - Replace existing chart data with new categories and series
  5. manage_slide_transitions - Basic slide transition management

🌟 Key Unified Tools

manage_text - All-in-One Text Management

# Add text box
manage_text(slide_index=0, operation="add", text="Hello World", font_size=24)

# Format existing text
manage_text(slide_index=0, operation="format", shape_index=0, bold=True, color=[255,0,0])

# Validate text fit with auto-fix
manage_text(slide_index=0, operation="validate", shape_index=0, validation_only=False)

manage_image - Complete Image Handling

# Add image with enhancement
manage_image(slide_index=0, operation="add", image_source="logo.png", 
            enhancement_style="presentation")

# Enhance existing image
manage_image(slide_index=0, operation="enhance", image_source="photo.jpg",
            brightness=1.2, contrast=1.1, saturation=1.3)

apply_picture_effects - Multiple Effects in One Call

# Apply combined effects
apply_picture_effects(slide_index=0, shape_index=0, effects={
    "shadow": {"blur_radius": 4.0, "color": [128,128,128]},
    "glow": {"size": 5.0, "color": [0,176,240]},
    "rotation": {"rotation": 15.0}
})

apply_professional_design - Theme & Design Management

# Add professional slide
apply_professional_design(operation="slide", slide_type="title_content", 
                         color_scheme="modern_blue", title="My Presentation")

# Apply theme to entire presentation  
apply_professional_design(operation="theme", color_scheme="corporate_gray")

# Enhance existing slide
apply_professional_design(operation="enhance", slide_index=0, color_scheme="elegant_green")

Examples

Creating a New Presentation

# Create a new presentation
result = use_mcp_tool(
    server_name="ppt",
    tool_name="create_presentation",
    arguments={}
)
presentation_id = result["presentation_id"]

# Add a title slide
result = use_mcp_tool(
    server_name="ppt",
    tool_name="add_slide",
    arguments={
        "layout_index": 0,  # Title slide layout
        "title": "My Presentation",
        "presentation_id": presentation_id
    }
)
slide_index = result["slide_index"]

# Populate subtitle placeholder
result = use_mcp_tool(
    server_name="ppt",
    tool_name="populate_placeholder",
    arguments={
        "slide_index": slide_index,
        "placeholder_idx": 1,  # Subtitle placeholder
        "text": "Created with PowerPoint MCP Server",
        "presentation_id": presentation_id
    }
)

# Save the presentation
result = use_mcp_tool(
    server_name="ppt",
    tool_name="save_presentation",
    arguments={
        "file_path": "my_presentation.pptx",
        "presentation_id": presentation_id
    }
)

Creating a Professional Presentation with v2.0

# Create a professional slide with modern styling - CONSOLIDATED TOOL
result = use_mcp_tool(
    server_name="ppt",
    tool_name="apply_professional_design",
    arguments={
        "operation": "slide",
        "slide_type": "title_content",
        "color_scheme": "modern_blue",
        "title": "Quarterly Business Review",
        "content": [
            "Revenue increased by 15% compared to last quarter",
            "Customer satisfaction scores reached all-time high of 94%",
            "Successfully launched 3 new product features",
            "Expanded team by 12 new talented professionals"
        ]
    }
)

# Apply professional theme to entire presentation - SAME TOOL, DIFFERENT OPERATION
result = use_mcp_tool(
    server_name="ppt",
    tool_name="apply_professional_design",
    arguments={
        "operation": "theme",
        "color_scheme": "modern_blue",
        "apply_to_existing": True
    }
)

# Add slide with gradient background - ENHANCED ADD_SLIDE
result = use_mcp_tool(
    server_name="ppt",
    tool_name="add_slide",
    arguments={
        "layout_index": 0,
        "background_type": "professional_gradient",
        "color_scheme": "modern_blue",
        "gradient_direction": "diagonal"
    }
)

Working with Built-in Slide Templates (New in v2.0)

# List all available slide templates with their features
result = use_mcp_tool(
    server_name="ppt",
    tool_name="list_slide_templates",
    arguments={}
)

# Apply a professional template to an existing slide
result = use_mcp_tool(
    server_name="ppt",
    tool_name="apply_slide_template",
    arguments={
        "slide_index": 0,
        "template_id": "title_slide",
        "color_scheme": "modern_blue",
        "content_mapping": {
            "title": "Quarterly Business Review",
            "subtitle": "Q4 2024 Results",
            "author": "Leadership Team"
        }
    }
)

# Create a new slide using a template
result = use_mcp_tool(
    server_name="ppt",
    tool_name="create_slide_from_template",
    arguments={
        "template_id": "text_with_image",
        "color_scheme": "elegant_green",
        "content_mapping": {
            "title": "Our Revolutionary Solution",
            "content": "• 250% increase in efficiency\n• 98% customer satisfaction\n• Industry-leading performance"
        },
        "image_paths": {
            "supporting": "path/to/product_image.jpg"
        }
    }
)

# Generate a complete presentation from multiple templates
result = use_mcp_tool(
    server_name="ppt",
    tool_name="create_presentation_from_templates",
    arguments={
        "template_sequence": [
            {
                "template_id": "title_slide",
                "content": {
                    "title": "2024 Annual Report",
                    "subtitle": "Growth and Innovation",
                    "author": "Executive Team"
                }
            },
            {
                "template_id": "key_metrics_dashboard",
                "content": {
                    "metric_1_value": "94%",
                    "metric_2_value": "$2.4M",
                    "metric_3_value": "247"
                }
            },
            {
                "template_id": "before_after_comparison",
                "content": {
                    "content_left": "Manual processes taking hours",
                    "content_right": "Automated workflows in minutes"
                }
            }
        ],
        "color_scheme": "modern_blue"
    }
)

Enhanced Image Management with v2.0

# Add image with automatic enhancement - CONSOLIDATED TOOL
result = use_mcp_tool(
    server_name="ppt",
    tool_name="manage_image",
    arguments={
        "slide_index": 1,
        "operation": "add",
        "image_source": "company_logo.png",
        "left": 1.0,
        "top": 1.0,
        "width": 3.0,
        "height": 2.0,
        "enhancement_style": "presentation"
    }
)

# Apply multiple picture effects at once - CONSOLIDATED TOOL
result = use_mcp_tool(
    server_name="ppt",
    tool_name="apply_picture_effects",
    arguments={
        "slide_index": 1,
        "shape_index": 0,
        "effects": {
            "shadow": {
                "shadow_type": "outer",
                "blur_radius": 4.0,
                "distance": 3.0,
                "direction": 315.0,
                "color": [128, 128, 128],
                "transparency": 0.6
            },
            "glow": {
                "size": 5.0,
                "color": [0, 176, 240],
                "transparency": 0.4
            }
        }
    }
)

Advanced Text Management with v2.0

# Add and format text in one operation - CONSOLIDATED TOOL
result = use_mcp_tool(
    server_name="ppt",
    tool_name="manage_text",
    arguments={
        "slide_index": 0,
        "operation": "add",
        "left": 1.0,
        "top": 2.0,
        "width": 8.0,
        "height": 1.5,
        "text": "Welcome to Our Quarterly Review",
        "font_size": 32,
        "font_name": "Segoe UI",
        "bold": True,
        "color": [0, 120, 215],
        "alignment": "center",
        "auto_fit": True
    }
)

# Validate and fix text fit issues - SAME TOOL, DIFFERENT OPERATION
result = use_mcp_tool(
    server_name="ppt",
    tool_name="manage_text",
    arguments={
        "slide_index": 0,
        "operation": "validate",
        "shape_index": 0,
        "validation_only": False,  # Auto-fix enabled
        "min_font_size": 10,
        "max_font_size": 48
    }
)

Creating a Presentation from Template

# First, inspect a template to see its layouts and properties
result = use_mcp_tool(
    server_name="ppt",
    tool_name="get_template_info",
    arguments={
        "template_path": "company_template.pptx"
    }
)
template_info = result

# Create a new presentation from the template
result = use_mcp_tool(
    server_name="ppt",
    tool_name="create_presentation_from_template",
    arguments={
        "template_path": "company_template.pptx"
    }
)
presentation_id = result["presentation_id"]

# Add a slide using one of the template's layouts
result = use_mcp_tool(
    server_name="ppt",
    tool_name="add_slide",
    arguments={
        "layout_index": 1,  # Use layout from template
        "title": "Quarterly Report",
        "presentation_id": presentation_id
    }
)

# Save the presentation
result = use_mcp_tool(
    server_name="ppt",
    tool_name="save_presentation",
    arguments={
        "file_path": "quarterly_report.pptx",
        "presentation_id": presentation_id
    }
)

Adding Advanced Charts and Data Visualization

# Add a chart slide
result = use_mcp_tool(
    server_name="ppt",
    tool_name="add_slide",
    arguments={
        "layout_index": 1,  # Content slide layout
        "title": "Sales Data",
        "presentation_id": presentation_id
    }
)
slide_index = result["slide_index"]

# Add a column chart with comprehensive customization
result = use_mcp_tool(
    server_name="ppt",
    tool_name="add_chart",
    arguments={
        "slide_index": slide_index,
        "chart_type": "column",
        "left": 1.0,
        "top": 2.0,
        "width": 8.0,
        "height": 4.5,
        "categories": ["Q1", "Q2", "Q3", "Q4"],
        "series_names": ["2023", "2024"],
        "series_values": [
            [100, 120, 140, 160],
            [110, 130, 150, 170]
        ],
        "has_legend": True,
        "legend_position": "bottom",
        "has_data_labels": True,
        "title": "Quarterly Sales Performance",
        "presentation_id": presentation_id
    }
)

Text Validation and Optimization with v2.0

# Validate text fit and get optimization suggestions - USING CONSOLIDATED TOOL
result = use_mcp_tool(
    server_name="ppt",
    tool_name="manage_text",
    arguments={
        "slide_index": 0,
        "operation": "validate",
        "shape_index": 0,
        "text": "This is a very long title that might not fit properly in the designated text box area",
        "font_size": 24,
        "validation_only": True
    }
)

# Comprehensive slide validation with automatic fixes - SAME TOOL, AUTO-FIX ENABLED
result = use_mcp_tool(
    server_name="ppt",
    tool_name="manage_text",
    arguments={
        "slide_index": 0,
        "operation": "validate",
        "shape_index": 0,
        "validation_only": False,  # Auto-fix enabled
        "min_font_size": 10,
        "max_font_size": 48
    }
)

Reading Slide Content with New Text Extraction Tools (v2.1)

# Extract text content from a specific slide - NEW TOOL
result = use_mcp_tool(
    server_name="ppt",
    tool_name="extract_slide_text",
    arguments={
        "slide_index": 0,
        "presentation_id": presentation_id
    }
)

# The result includes:
{
    "success": True,
    "slide_index": 0,
    "text_content": {
        "slide_title": "Quarterly Business Review",
        "placeholders": [
            {
                "shape_index": 1,
                "shape_name": "Subtitle Placeholder 2",
                "text": "Q4 2024 Results",
                "placeholder_type": "SUBTITLE",
                "placeholder_idx": 1
            }
        ],
        "text_shapes": [
            {
                "shape_index": 3,
                "shape_name": "TextBox 4",
                "text": "Revenue increased by 15%"
            }
        ],
        "table_text": [],
        "all_text_combined": "Quarterly Business Review\nQ4 2024 Results\nRevenue increased by 15%"
    },
    "total_text_shapes": 2,
    "has_title": True,
    "has_tables": False
}

# Extract text from all slides in the presentation - NEW TOOL
result = use_mcp_tool(
    server_name="ppt",
    tool_name="extract_presentation_text",
    arguments={
        "presentation_id": presentation_id,
        "include_slide_info": True
    }
)

# The result includes comprehensive text extraction:
{
    "success": True,
    "presentation_id": "pres_123",
    "total_slides": 5,
    "slides_with_text": 4,
    "total_text_shapes": 12,
    "slides_with_titles": 3,
    "slides_with_tables": 1,
    "slides_text": [...],  # Detailed per-slide text content
    "all_presentation_text_combined": "=== SLIDE 1 ===\nTitle Here\nContent here..."
}

# Extract text without additional slide metadata for cleaner output
result = use_mcp_tool(
    server_name="ppt",
    tool_name="extract_presentation_text",
    arguments={
        "presentation_id": presentation_id,
        "include_slide_info": False
    }
)

Template Support

Working with Templates

The PowerPoint MCP Server provides comprehensive template support for creating presentations from existing template files. This feature enables:

  • Corporate branding with predefined themes, layouts, and styles
  • Consistent presentations across teams and projects
  • Custom slide masters and specialized layouts
  • Pre-configured properties and document settings
  • Flexible template discovery with configurable search paths

Template File Requirements

  • Supported formats: .pptx and .potx files
  • Existing content: Templates can contain existing slides (preserved during creation)
  • Layout availability: All custom layouts and slide masters are accessible
  • Search locations: Configurable via PPT_TEMPLATE_PATH environment variable
  • Default search paths: Current directory, ./templates, ./assets, ./resources

Template Configuration

Set the PPT_TEMPLATE_PATH environment variable to specify custom template directories:

# Unix/Linux/macOS
export PPT_TEMPLATE_PATH="/path/to/templates:/another/path"

# Windows  
set PPT_TEMPLATE_PATH="C:\templates;C:\company_templates"

Template Workflow

  1. Inspect Template: Use get_template_info to analyze available layouts and properties
  2. Create from Template: Use create_presentation_from_template with automatic theme preservation
  3. Use Template Layouts: Reference layout indices from template analysis when adding slides
  4. Maintain Branding: Template themes, fonts, and colors are automatically applied to new content

Professional Color Schemes

The server includes 4 built-in professional color schemes:

  • Modern Blue: Microsoft-inspired blue theme with complementary colors
  • Corporate Gray: Professional grayscale theme with blue accents
  • Elegant Green: Forest green theme with cream and light green accents
  • Warm Red: Deep red theme with orange and yellow accents

Each scheme includes primary, secondary, accent, light, and text colors optimized for business presentations.

🎨 Built-in Slide Templates (New in v2.0)

The PowerPoint MCP Server now includes 25 professional slide templates with advanced dynamic features. All templates support:

Dynamic Features

  • Automatic text sizing based on content length and container dimensions
  • Intelligent text wrapping to fit within specified areas
  • Visual effects including shadows, glows, and outlines
  • Gradient backgrounds with multi-layer compositions
  • Professional animations ready for presentation delivery
  • Interactive hover effects for enhanced user experience
  • Smart content overflow handling with automatic adjustments

Available Template Categories

Title & Introduction Slides

  • title_slide - Dynamic title slide with gradient background and text effects
  • chapter_intro - Section divider with chapter numbering and styling
  • thank_you_slide - Closing slide with contact information and effects

Content Layout Slides

  • text_with_image - Text content with stylized image and interactive elements
  • two_column_text - Two equal columns of text with dynamic sizing
  • two_column_text_images - Two columns with text and corresponding images
  • three_column_layout - Three equal columns with text and images
  • full_image_slide - Large background image with text overlay

Business & Analytics Slides

  • key_metrics_dashboard - Interactive metrics dashboard with animated counters
  • before_after_comparison - Dynamic comparison layout with visual dividers
  • chart_comparison - Two charts side by side for performance comparison
  • data_table_slide - Slide focused on tabular data with professional styling
  • timeline_slide - Horizontal timeline with milestones and effects

Process & Flow Slides

  • process_flow - Step-by-step process visualization with enhanced effects
  • agenda_slide - Table of contents or agenda overview with styling
  • quote_testimonial - Featured quote or customer testimonial with effects

Team & Organization Slides

  • team_introduction - Team member showcase with photos and roles

Template Usage Examples

# Browse all available templates
templates = use_mcp_tool("ppt", "list_slide_templates", {})

# Key templates with their features:
{
  "title_slide": {
    "features": ["Dynamic text sizing", "Gradient backgrounds", "Text effects"],
    "elements": ["title", "subtitle", "author", "decorative_accent"]
  },
  "key_metrics_dashboard": {
    "features": ["Animated counters", "Gradient containers", "Trend visualization"],
    "elements": ["3 metric containers", "trend chart", "insights callout"]
  },
  "before_after_comparison": {
    "features": ["Split gradient background", "VS divider", "Improvement arrow"],
    "elements": ["before/after headers", "comparison content", "improvement metrics"]
  }
}

Color Scheme Integration

All templates work seamlessly with the 4 professional color schemes:

  • modern_blue: Microsoft-inspired theme with dynamic gradients
  • corporate_gray: Professional grayscale with blue accents
  • elegant_green: Forest green with cream and light accents
  • warm_red: Deep red with orange and yellow highlights

Dynamic Content Adaptation

Templates automatically adjust to content:

  • Font sizes scale based on text length (8pt - 44pt range)
  • Line spacing adjusts for readability (1.0x - 1.4x)
  • Text wrapping intelligently breaks lines at optimal points
  • Container sizing adapts to content overflow
  • Visual effects scale appropriately with element sizes

📁 File Structure

Office-PowerPoint-MCP-Server/
├── ppt_mcp_server.py          # Main consolidated server (v2.0)
├── slide_layout_templates.json # 25+ professional slide templates with dynamic features
├── tools/                     # 11 specialized tool modules (32 tools total)
│   ├── __init__.py
│   ├── presentation_tools.py  # Presentation management (7 tools)
│   ├── content_tools.py       # Content & slides (6 tools)
│   ├── template_tools.py      # Template operations (7 tools)
│   ├── structural_tools.py    # Tables, shapes, charts (4 tools)
│   ├── professional_tools.py  # Themes, effects, fonts (3 tools)
│   ├── hyperlink_tools.py     # Hyperlink management (1 tool)
│   ├── chart_tools.py         # Advanced chart operations (1 tool)
│   ├── connector_tools.py     # Connector lines/arrows (1 tool)
│   ├── master_tools.py        # Slide master management (1 tool)
│   └── transition_tools.py    # Slide transitions (1 tool)
├── utils/                     # 7 organized utility modules (68+ functions)
│   ├── __init__.py
│   ├── core_utils.py          # Error handling & safe operations
│   ├── presentation_utils.py  # Presentation management utilities
│   ├── content_utils.py       # Content & slide operations
│   ├── design_utils.py        # Themes, colors, effects & fonts
│   ├── template_utils.py      # Template management & dynamic features
│   └── validation_utils.py    # Text & layout validation
├── setup_mcp.py              # Interactive setup script
├── pyproject.toml            # Updated for v2.0
└── README.md                 # This documentation

🏗️ Architecture Benefits

Modular Design

  • 7 focused utility modules with clear responsibilities
  • 11 organized tool modules for comprehensive coverage
  • 68+ utility functions organized by functionality
  • 32 MCP tools covering all PowerPoint manipulation needs
  • Clear separation of concerns for easier development

Code Organization

  • Logical grouping of related functionality across modules
  • Better discoverability with organized tool categories
  • Improved testability with isolated modules
  • Future extensibility through modular structure

Comprehensive Coverage

  • Complete PowerPoint lifecycle from creation to presentation
  • Advanced template system with auto-generation capabilities
  • Professional design tools with multiple effects and styling options
  • Specialized features including hyperlinks, connectors, and slide masters

Developer Experience

  • Clear responsibility boundaries between modules
  • Easier debugging with smaller, focused files
  • Simpler testing with isolated functionality
  • Enhanced maintainability through separation of concerns

🔄 What's New in Version 2.0

Enhanced functionality with comprehensive tool coverage! The updated server provides:

New Specialized Tools Added:

  • manage_hyperlinks - Complete hyperlink management for text elements
  • update_chart_data - Advanced chart data replacement and updating
  • add_connector - Connector lines and arrows between slide elements
  • manage_slide_masters - Access to slide master properties and layouts
  • manage_slide_transitions - Basic slide transition management
  • auto_generate_presentation - AI-powered presentation generation
  • optimize_slide_text - Text optimization for better readability

Enhanced Existing Tools:

  • manage_text - Now supports text run formatting with format_runs operation
  • create_presentation_from_templates - Enhanced template sequence processing
  • apply_picture_effects - Expanded effect combinations and options

🔄 What's New in Version 2.1

Text extraction capabilities added! Now you can read content from existing presentations:

New Text Extraction Tools Added:

  • extract_slide_text - Extract all text content from a specific slide including titles, placeholders, text shapes, and tables
  • extract_presentation_text - Extract text content from all slides in a presentation with comprehensive statistics and combined output

Key Features of Text Extraction:

  • Complete text coverage - Extracts from titles, placeholders, text boxes, and table cells
  • Structured output - Organized by content type (titles, placeholders, shapes, tables)
  • Presentation-wide analysis - Statistics on text distribution across slides
  • Flexible output options - Individual slide content or combined presentation text
  • Error handling - Graceful handling of slides that cannot be processed

License

MIT

from github.com/DaiShuaishuai/pptx-minio-mcp

Installing Pptx Minio

This server has no published package — it is built from source. Open the repository and follow its README.

▸ github.com/DaiShuaishuai/pptx-minio-mcp

FAQ

Is Pptx Minio MCP free?

Yes, Pptx Minio MCP is free — one-click install via Unyly at no cost.

Does Pptx Minio need an API key?

No, Pptx Minio runs without API keys or environment variables.

Is Pptx Minio hosted or self-hosted?

Self-hosted: the server runs locally on your machine via the install command above.

How do I install Pptx Minio in Claude Desktop, Claude Code or Cursor?

Open Pptx Minio on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.

Related MCPs

Compare Pptx Minio with

Not sure what to pick?

Find your stack in 60 seconds

Author?

Embed badge for your README

Browse similar

All development MCPs