mcpField
O
Okppt

Okppt

本地服务
github.com/NeekChaw生产力6872 周前更新

关于 Okppt

MCP OKPPT Server 是一个 MCP 服务,可将 SVG 图像作为矢量图插入 PowerPoint 演示文稿。大模型可先生成 SVG,再借助该工具完成 PPTX 的创建与编辑,适合希望以 AI 辅助设计幻灯片的用户。

主要功能

  1. 01将 SVG 以矢量形式插入 PPTX
  2. 02批量插入多个 SVG 文件
  3. 03从 SVG 文件或代码创建演示文稿
  4. 04复制与替换幻灯片,支持 SVG 转 PNG

适用场景

  1. 01由 AI 生成 SVG 后快速制作 PPT 页面
  2. 02在 PowerPoint 中继续编辑 AI 生成的 SVG 元素
  3. 03批量替换或复制包含 SVG 的幻灯片

MCP 相关

该项目是 MCP 服务,向 MCP 客户端暴露 insert_svg、copy_svg_slide、get_pptx_info 等工具,用于处理 SVG 与 PPTX 文件。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"okppt": {
"command": "uvx",
"args": [
"mcp-server-okppt"
]
}
}
}
启动命令uvx mcp-server-okppt

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimcp-server-okppt

工具

14

收录的工具列表 · 更新于 3 周前

参数类型必填说明
create_if_not_existsboolean否
height_inchesnumber否
output_pathstring否
pptx_pathstring是
slide_numberinteger否
svg_patharray是
width_inchesnumber否
x_inchesnumber否
y_inchesnumber否

详细介绍

来自项目 README

MCP OKPPT Server

MCP Compatible

一个基于Model Context Protocol (MCP)的服务器工具,专门用于将SVG图像插入到PowerPoint演示文稿中。它能够保留SVG的矢量特性,确保在PowerPoint中显示的图像保持高品质和可缩放性。

设计理念

此项目是让大型语言模型(如Claude、GPT等)能够自主设计PowerPoint演示文稿的"曲线救国"解决方案。通过让AI生成SVG图像,再借助本工具将其全屏插入PPT幻灯片,我们成功实现了AI完全控制PPT设计的能力,而无需直接操作复杂的PPT对象模型。

这种方法带来三大核心优势:

  1. AI完全控制:充分发挥现代AI的图形设计能力,同时避开PPT编程的复杂性
  2. 用户可编辑:Office PowerPoint提供了强大的SVG编辑功能,插入后的SVG元素可以像原生PPT元素一样直接编辑、调整和重新着色,让用户能轻松地在AI生成基础上进行二次修改
  3. 矢量级质量:保持高品质可缩放的矢量特性,确保演示内容在任何尺寸下都清晰锐利

这一创新思路通过SVG作为AI与PPT之间的桥梁,既保证了设计的高度自由,又兼顾了最终成果的实用性和可维护性。

功能特点

  • 矢量图保留: 将SVG作为真实矢量图插入PPTX,保证高品质和可缩放性
  • 批量批处理: 支持一次操作多个SVG文件和幻灯片
  • 全新演示文稿: 直接从SVG文件创建完整的演示文稿
  • 幻灯片复制与替换: 智能复制SVG幻灯片并替换现有内容
  • SVG代码处理: 支持直接从SVG代码创建文件
  • 格式转换支持: 内置SVG到PNG的转换功能

PPT效果示例

以下是一些使用MCP OKPPT Server生成的PPT效果图:

2008年金融危机 2008年金融危机分析PPT封面

小红书爆款指南 小红书爆款内容分析报告PPT页面

安装方法

方法一:从PyPI安装
# 使用pip安装
pip install mcp-server-okppt

# 或使用uv安装
uv pip install mcp-server-okppt
方法二:配置Claude Desktop

在Claude Desktop配置文件中添加服务器配置:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json

添加以下配置:

{
  "mcpServers": {
    "okppt": {
      "command": "uvx",
      "args": [
        "mcp-server-okppt"
      ]
    }
  }
}
方法三:从源码安装并配置Cursor本地开发环境

在Cursor IDE中,可以通过本地配置文件来设置MCP服务器:

Windows: C:\Users\用户名\.cursor\mcp.json
macOS: ~/.cursor/mcp.json

添加以下配置:

{
  "mcpServers": {
    "okppt": {
      "command": "uv",
      "args": [
        "--directory",
        "D:\\本地项目路径\\mcp-server-okppt\\src\\mcp_server_okppt",
        "run",
        "cli.py"
      ]
    }
  }
}

这种配置方式适合本地开发和测试使用,可以直接指向本地代码目录。

使用方法

使用Claude Desktop
  1. 安装并配置Claude Desktop
  2. 在配置文件中添加上述MCP服务器配置
  3. 重启Claude Desktop
  4. 在对话中使用PPTX相关工具
使用MCP CLI进行开发
# 运行测试
mcp test server.py

可用工具

1. 插入SVG图像 (insert_svg)
def insert_svg(
    pptx_path: str,
    svg_path: List[str],
    slide_number: int = 1,
    x_inches: float = 0,
    y_inches: float = 0,
    width_inches: float = 16,
    height_inches: float = 9,
    output_path: str = "",
    create_if_not_exists: bool = True
) -> str

将SVG图像插入到PPTX文件的指定位置。

参数:

  • pptx_path: PPTX文件路径
  • svg_path: SVG文件路径或路径列表
  • slide_number: 要插入的幻灯片编号(从1开始)
  • x_inches: X坐标(英寸)
  • y_inches: Y坐标(英寸)
  • width_inches: 宽度(英寸)
  • height_inches: 高度(英寸)
  • output_path: 输出文件路径
  • create_if_not_exists: 如果PPTX不存在是否创建

返回: 操作结果消息

2. 列出目录文件 (list_files)
def list_files(
    directory: str = ".",
    file_type: Optional[str] = None
) -> str

列出目录中的文件。

参数:

  • directory: 目录路径
  • file_type: 文件类型过滤,可以是"svg"或"pptx"

返回: 文件列表

3. 获取文件信息 (get_file_info)
def get_file_info(
    file_path: str
) -> str

获取文件信息。

参数:

  • file_path: 文件路径

返回: 文件信息

4. 转换SVG为PNG (convert_svg_to_png)
def convert_svg_to_png(
    svg_path: str,
    output_path: Optional[str] = None
) -> str

将SVG文件转换为PNG图像。

参数:

  • svg_path: SVG文件路径
  • output_path: 输出PNG文件路径

返回: 操作结果消息

5. 获取PPTX信息 (get_pptx_info)
def get_pptx_info(
    pptx_path: str
) -> str

获取PPTX文件的基本信息。

参数:

  • pptx_path: PPTX文件路径

返回: 包含文件信息和幻灯片数量的字符串

6. 保存SVG代码 (save_svg_code)
def save_svg_code(
    svg_code: str
) -> str

将SVG代码保存为SVG文件并返回保存的绝对路径。

参数:

  • svg_code: SVG代码内容

返回: 操作结果消息和保存的文件路径

7. 删除幻灯片 (delete_slide)
def delete_slide(
    pptx_path: str,
    slide_number: int,
    output_path: Optional[str] = None
) -> str

从PPTX文件中删除指定编号的幻灯片。

参数:

  • pptx_path: PPTX文件路径
  • slide_number: 要删除的幻灯片编号
  • output_path: 输出文件路径

返回: 操作结果消息

8. 插入空白幻灯片 (insert_blank_slide)
def insert_blank_slide(
    pptx_path: str,
    slide_number: int,
    layout_index: int = 6,
    output_path: Optional[str] = None,
    create_if_not_exists: bool = True
) -> str

在PPTX文件的指定位置插入一个空白幻灯片。

参数:

  • pptx_path: PPTX文件路径
  • slide_number: 插入位置
  • layout_index: 幻灯片布局索引,默认为6(空白布局)
  • output_path: 输出文件路径
  • create_if_not_exists: 如果PPTX不存在是否创建

返回: 操作结果消息

9. 复制SVG幻灯片 (copy_svg_slide)
def copy_svg_slide(
    source_pptx_path: str,
    target_pptx_path: str = "",
    source_slide_number: int = 1,
    target_slide_number: Optional[int] = None,
    output_path: Optional[str] = None,
    create_if_not_exists: bool = True
) -> str

复制包含SVG图像的幻灯片。

参数:

  • source_pptx_path: 源PPTX文件路径
  • target_pptx_path: 目标PPTX文件路径
  • source_slide_number: 要复制的源幻灯片编号
  • target_slide_number: 要插入到目标文件的位置
  • output_path: 输出文件路径
  • create_if_not_exists: 如果目标PPTX不存在是否创建

返回: 操作结果消息

最佳实践

替换幻灯片内容的推荐方法
方法一:完全替换法(最可靠)
# 步骤1:删除要替换的幻灯片
delete_slide(
    pptx_path="演示文稿.pptx",
    slide_number=3,
    output_path="临时文件.pptx"
)

# 步骤2:在同一位置插入空白幻灯片
insert_blank_slide(
    pptx_path="临时文件.pptx",
    slide_number=3,
    output_path="临时文件2.pptx"
)

# 步骤3:将新SVG插入到空白幻灯片
insert_svg(
    pptx_path="临时文件2.pptx",
    svg_path=["新内容.svg"],
    slide_number=3,
    output_path="最终文件.pptx"
)

注意事项

  1. 避免内容叠加:直接对现有幻灯片插入SVG会导致新内容叠加在原内容上,而非替换
  2. 批量处理:批量插入SVG时,svg_path参数必须是数组形式,即使只有一个文件
  3. SVG代码转义:在使用save_svg_code时,特殊字符(如"&")需要正确转义为"&"
  4. 文件路径:尽量使用英文路径,避免路径中出现特殊字符
  5. 检查结果:每次操作后应检查输出文件以确认修改是否成功

常见问题解答

Q: SVG插入后变成了位图而非矢量图?

A: 请确保使用copy_svg_slide或create_pptx_from_svg函数,这些函数专门设计用于保留SVG的矢量特性。

Q: 如何批量处理多个SVG文件?

A: 可以使用insert_svg函数并将多个SVG路径作为列表传入,或者使用create_pptx_from_svg一次性创建包含多个SVG的演示文稿。

Q: 文件名变得很长且复杂?

A: 这是因为每次操作都会添加时间戳。建议使用"新文件法"一次性创建最终文件,或在最后一步操作中指定简洁的输出文件名。

版本信息

当前最新版本: v0.2.0

查看所有版本和更新信息: GitHub Releases

致谢

本项目在开发过程中受益于Model Context Protocol(MCP) 编程极速入门这一优质资源。该项目提供了全面而清晰的MCP开发指南,涵盖了从基础概念到实际部署的各个方面,极大地降低了开发者学习MCP协议的门槛。特别感谢其在服务配置、工具开发和部署流程等方面的详细示例和说明,为MCP生态的发展和普及做出了宝贵贡献。推荐所有对MCP开发感兴趣的开发者参考这份指南,它将帮助你快速掌握MCP服务器的开发与配置技能。

贡献指南

欢迎提交问题和拉取请求到项目仓库!以下是一些潜在的改进方向:

  • 添加更多幻灯片布局支持
  • 增强SVG处理和兼容性
  • 添加批量SVG处理的进度报告
  • 改进错误处理和诊断功能
  • 添加图表和表格的特殊处理功能

许可证

本项目采用MIT许可证。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。