DeepSeek 导航网:这个项目是一个基于 MCP (Model Context Protocol) 的服务器工具,名为 "MCP OKPPT Server"。它的核心功能是允许大型语言模型(如 Claude、GPT 等)通过生成 SVG 图像来间接设计和创建 PowerPoint 演示文稿。工具负责将这些 SVG 图像高质量地插入到 PPTX 幻灯片中,并保留其矢量特性,确保图像在 PowerPoint 中可缩放且清晰。
设计理念
此项目是让大型语言模型(如 Claude、GPT 等)能够自主设计 PowerPoint 演示文稿的"曲线救国"解决方案。通过让 AI 生成 SVG 图像,再借助本工具将其全屏插入 PPT 幻灯片,我们成功实现了 AI 完全控制 PPT 设计的能力,而无需直接操作复杂的 PPT 对象模型。
这种方法带来三大核心优势:
- AI 完全控制:充分发挥现代 AI 的图形设计能力,同时避开 PPT 编程的复杂性
- 用户可编辑:Office PowerPoint 提供了强大的 SVG 编辑功能,插入后的 SVG 元素可以像原生 PPT 元素一样直接编辑、调整和重新着色,让用户能轻松地在 AI 生成基础上进行二次修改
- 矢量级质量:保持高品质可缩放的矢量特性,确保演示内容在任何尺寸下都清晰锐利
这一创新思路通过 SVG 作为 AI 与 PPT 之间的桥梁,既保证了设计的高度自由,又兼顾了最终成果的实用性和可维护性。
功能特点
- 矢量图保留: 将 SVG 作为真实矢量图插入 PPTX ,保证高品质和可缩放性
- 批量批处理: 支持一次操作多个 SVG 文件和幻灯片
- 全新演示文稿: 直接从 SVG 文件创建完整的演示文稿
- 幻灯片复制与替换: 智能复制 SVG 幻灯片并替换现有内容
- SVG 代码处理: 支持直接从 SVG 代码创建文件
- 格式转换支持: 内置 SVG 到 PNG 的转换功能
安装方法
方法一:从 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
- 安装并配置 Claude Desktop
- 在配置文件中添加上述 MCP 服务器配置
- 重启 Claude Desktop
- 在对话中使用 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"
)
注意事项
- 避免内容叠加:直接对现有幻灯片插入 SVG 会导致新内容叠加在原内容上,而非替换
- 批量处理:批量插入 SVG 时,
svg_path
参数必须是数组形式,即使只有一个文件 - SVG 代码转义:在使用
save_svg_code
时,特殊字符(如"&")需要正确转义为"&" - 文件路径:尽量使用英文路径,避免路径中出现特殊字符
- 检查结果:每次操作后应检查输出文件以确认修改是否成功
常见问题解答
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 许可证。
提供全面的 Gmail 集成和 LLM 处理能力