返回市场
麦普服务器-okppt

麦普服务器-okppt

作者:NeekChaw58 星标更新:2025-06-08

项目介绍

技术文档摘要

MCP OKPPT Server

MCP 兼容

基于模型上下文协议(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页面

安装方法

方法1:从PyPI安装

# 使用pip安装
pip install mcp-server-okppt

# 或使用uv安装
uv pip install mcp-server-okppt

方法2:配置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"
      ]
    }
  }
}

方法3:从源码安装并配置本地开发环境

在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:完全替换法(最可靠)

# 步骤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_slidecreate_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许可证。