返回市场
pptxgenjs-mcp服务器

pptxgenjs-mcp服务器

作者:gavanduffy0 星标更新:2025-11-15

项目介绍

PptxGenJS MCP Server

一个基于Model Context Protocol (MCP)的服务器,使用PptxGenJS提供全面的PowerPoint演示文稿创建能力。该服务器通过一个适合LLM的接口提供了PptxGenJS的所有功能。

功能

此MCP服务器提供的工具包括:

  • 演示文稿管理:创建具有自定义布局、元数据和属性的演示文稿
  • 幻灯片操作:添加带有背景、部分和自定义布局的幻灯片
  • 文本内容:添加具有丰富样式选项(字体、颜色、对齐方式、项目符号等)的格式化文本
  • 形状:插入各种形状,包括矩形、圆形、箭头、流程图元素等
  • 图片:从URL、本地路径或base64数据中添加图片
  • 图片搜索:通过SearXNG搜索图片并自动将其添加到幻灯片中
  • 表格:创建具有自定义样式的表格,包括边框和单元格属性
  • HTML表格导入:导入HTML表格并将其转换为PowerPoint表格,同时保留样式
  • 图表:生成各种类型的图表(条形图、折线图、饼图、面积图、散点图、气泡图、雷达图、环形图)
  • 演讲者备注:向幻灯片添加演讲者备注
  • 批量操作:在单个操作中添加多个内容项的幻灯片以提高效率
  • 幻灯片母版模板:定义和重用幻灯片模板以保持一致的演示设计
  • PPTX模板:将现有的PPTX文件转换为JSON模板,并使用动态内容替换创建新的演示文稿
  • 导出:将演示文稿保存到文件或将演示文稿导出为base64或二进制数据

安装

本地开发

npm install
npm run build

Cloudflare Workers 部署

此MCP服务器也可以部署到Cloudflare Workers,用于基于云的操作,并使用R2存储来存储演示文稿。请参阅CLOUDFLARE_DEPLOYMENT.md获取详细的设置说明。

快速开始:

npm install -g wrangler
wrangler login
wrangler r2 bucket create pptx
npm run deploy

使用方法

与Claude Desktop(本地)

在你的Claude Desktop配置文件中添加以下内容:

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

{
  "mcpServers": {
    "pptxgenjs": {
      "command": "node",
      "args": ["/path/to/pptxgenjs-mcp/dist/index.js"]
    }
  }
}

与MCP客户端

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";

const transport = new StdioClientTransport({
  command: "node",
  args: ["/path/to/pptxgenjs-mcp/dist/index.js"]
});

const client = new Client({
  name: "example-client",
  version: "1.0.0"
}, {
  capabilities: {}
});

await client.connect(transport);

可用工具

演示文稿管理

create_presentation

创建一个新的PowerPoint演示文稿。

参数:

  • presentationId(可选):演示文稿的自定义ID
  • layout(可选):布局类型('LAYOUT_4x3', 'LAYOUT_16x9', 'LAYOUT_16x10', 'LAYOUT_WIDE')
  • author(可选):作者姓名
  • company(可选):公司名称
  • title(可选):演示文稿标题
  • subject(可选):演示文稿主题
  • rtlMode(可选):启用右对齐模式

返回值: 用于后续操作的演示文稿ID

list_presentations

列出内存中的所有活动演示文稿。

define_layout

创建具有特定尺寸的自定义幻灯片布局。

参数:

  • presentationId:演示文稿ID
  • name:布局名称(例如,'A4')
  • width:宽度(英寸)
  • height:高度(英寸)

幻灯片操作

add_slide

向演示文稿添加一个新的幻灯片。

参数:

  • presentationId:演示文稿ID
  • backgroundColor(可选):六位数的十六进制颜色(例如,'FF0000')
  • backgroundImage(可选):图像路径或base64数据

add_section

添加一个命名的部分以组织幻灯片。

参数:

  • presentationId:演示文稿ID
  • title:部分标题

内容工具

add_text

向当前幻灯片添加具有丰富格式的文本。

参数:

  • presentationId:演示文稿ID
  • text:文本内容(字符串或文本对象数组)
  • x, y, w, h:位置和大小(英寸或百分比)
  • fontSize:字体大小(磅)
  • fontFace:字体族名称
  • color:文本颜色(六位数的十六进制)
  • bold, italic, underline:文本样式
  • align:水平对齐方式('left', 'center', 'right', 'justify')
  • valign:垂直对齐方式('top', 'middle', 'bottom')
  • bullet:启用项目符号
  • lineSpacing:行间距倍数

add_shape

向当前幻灯片添加一个形状。

参数:

  • presentationId:演示文稿ID
  • shape:形状类型(例如,'rect', 'ellipse', 'roundRect', 'triangle', 'rightArrow', 'star')
  • x, y, w, h:位置和大小
  • fill:填充配置(颜色、透明度)
  • line:边框配置(颜色、宽度、虚线类型)

支持的形状包括:

  • 基本形状:矩形、椭圆、三角形、菱形、星形、心形、云
  • 箭头:rightArrow、leftArrow、upArrow、downArrow、bentArrow
  • 流程图:flowChartProcess、flowChartDecision、flowChartDocument等
  • 更多...

add_image

向当前幻灯片添加一个图像。

参数:

  • presentationId:演示文稿ID
  • pathdata:图像来源(URL、本地路径或base64)
  • x, y, w, h:位置和大小
  • sizing:尺寸选项(contain、cover、crop)
  • hyperlink:添加可点击链接
  • rounding:圆角
  • transparency:图像透明度(0-100)

search_and_add_image

通过SearXNG搜索图像,并可选地将它们添加到演示文稿的幻灯片中。

参数:

  • query:图像搜索查询(例如,'中世纪城堡建筑','工业革命工厂')
  • maxResults(可选):要返回的最大结果数量(默认:10)
  • presentationId(可选):要添加图像的演示文稿ID(如果autoAdd为true则需要)
  • slideIndex(可选):目标幻灯片索引(0开始,如果没有提供则使用最后一个幻灯片)
  • position(可选):位置和大小对象,包含属性:
    • x, y:位置(英寸或百分比)
    • w, h:宽度和高度(英寸或百分比)
  • autoAdd(可选):如果为true,则自动将第一个搜索结果添加到指定的幻灯片(默认:false)

返回值:

  • results:图像搜索结果数组,包含descriptionsourceUrl
  • addedToSlide(当autoAdd为true时):关于已添加图像的信息,包括presentationIdslideIndeximageUrldescription

示例:

仅搜索:

await callTool("search_and_add_image", {
  query: "中世纪城堡建筑",
  maxResults: 5
});

搜索并自动添加:

await callTool("search_and_add_image", {
  query: "工业革命工厂",
  presentationId: "pres_123",
  slideIndex: 2,
  position: { x: 5, y: 2, w: 4, h: 3 },
  autoAdd: true
});

add_table

添加一个具有可定制样式的表格。

参数:

  • presentationId:演示文稿ID
  • rows:行数组(每行是单元格数组)
  • x, y, w, h:位置和大小
  • colW:列宽数组
  • rowH:行高数组
  • fontSize, fontFace, color:默认文本样式
  • fill:默认单元格背景色
  • border:默认单元格边框

每个单元格可以是:

  • 简单字符串
  • 包含textoptions的对象,用于单独的单元格样式

add_chart

向当前幻灯片添加一个图表。

参数:

  • presentationId:演示文稿ID
  • type:图表类型('bar', 'bar3D', 'line', 'pie', 'area', 'scatter', 'bubble', 'radar', 'doughnut')
  • data:数据系列数组(每个系列包含名称、标签和值)
  • x, y, w, h:位置和大小
  • title:图表标题
  • showLabel, showLegend, showTitle, showValue:显示选项
  • legendPos:图例位置('b', 't', 'l', 'r', 'tr')
  • barDir:柱状图方向('bar', 'col')
  • barGrouping:分组样式('clustered', 'stacked', 'percentStacked')
  • catAxisTitle, valAxisTitle:轴标题

add_notes

向当前幻灯片添加演讲者备注。

参数:

  • presentationId:演示文稿ID
  • notes:备注文本

高级工具

import_html_table

导入HTML表格并将其转换为PowerPoint表格。自动保留样式,包括粗体、斜体、颜色、对齐方式、colspan和rowspan。

参数:

  • presentationId:演示文稿ID
  • html:HTML表格标记(应包含<table>标签)
  • x, y, w, h:位置和大小(英寸或百分比)
  • fontSize(可选):单元格的默认字体大小
  • border(可选):单元格的默认边框配置

示例:

await callTool("import_html_table", {
  presentationId: "pres_1",
  html: `<table>
    <tr>
      <th bgcolor="#2C3E50">标题</th>
      <td>数据</td>
    </tr>
  </table>`,
  x: 1,
  y: 1.5,
  w: 8,
  h: 3
});

add_slide_with_content

在一个操作中添加一个新幻灯片,包含多个内容项(文本、形状、图像、表格、图表)。比多次单独调用更高效。

参数:

  • presentationId:演示文稿ID
  • backgroundColor(可选):幻灯片背景颜色
  • backgroundImage(可选):背景图像配置
  • content:内容项数组,每个项包含type('text', 'shape', 'image', 'table', 'chart')和data(与单独工具相同的参数)

示例:

await callTool("add_slide_with_content", {
  presentationId: "pres_1",
  backgroundColor: "F8F9FA",
  content: [
    {
      type: "text",
      data: { text: "标题", x: 1, y: 0.5, w: 8, h: 0.75, fontSize: 32, bold: true }
    },
    {
      type: "shape",
      data: { shape: "ellipse", x: 2, y: 2, w: 2, h: 2, fill: { color: "3498DB" } }
    }
  ]
});

define_slide_master

定义一个可重复使用的幻灯片母版模板,具有预定义的布局和样式,以保持一致的演示设计。

参数:

  • masterId:幻灯片母版的唯一标识符
  • name:人类可读的名称(例如,'标题幻灯片','内容幻灯片')
  • backgroundColor(可选):默认背景颜色
  • backgroundImage(可选):默认背景图像
  • placeholders:占位符定义数组,包含idtype、位置和样式

示例:

await callTool("define_slide_master", {
  masterId: "title-slide",
  name: "标题幻灯片",
  backgroundColor: "1A1A2E",
  placeholders: [
    {
      id: "title",
      type: "text",
      x: 1, y: 2, w: 8, h: 1.5,
      fontSize: 44, bold: true, align: "center", color: "FFFFFF"
    }
  ]
});

add_slide_from_master

根据预定义的幻灯片母版模板添加一个新的幻灯片。

参数:

  • presentationId:演示文稿ID
  • masterId:要应用的幻灯片母版ID
  • placeholderContent(可选):占位符ID作为键,内容作为值的对象

示例:

await callTool("add_slide_from_master", {
  presentationId: "pres_1",
  masterId: "title-slide",
  placeholderContent: {
    title: { text: "我的演示文稿标题" }
  }
});

list_slide_masters

列出所有已定义的幻灯片母版。

返回值: 包含幻灯片母版ID、名称和占位符计数的幻灯片母版数组。

模板工具

模板系统允许您将现有的PPTX演示文稿转换为可重复使用的JSON模板。这些模板保留了原始演示文稿的布局、样式和结构,同时在创建新的演示文稿时允许动态内容替换。

convert_pptx_to_template

将现有的PPTX文件转换为JSON模板格式。

参数:

  • filePath:要转换的PPTX文件的路径

返回值: 包含幻灯片结构和元素的JSON模板数据

示例:

const result = await callTool("convert_pptx_to_template", {
  filePath: "/path/to/template.pptx"
});
// 返回可以保存的templateData

save_template

保存一个带有元数据的JSON模板供以后使用。

参数:

  • templateData:JSON模板数据(来自convert_pptx_to_template或自定义)
  • templateId(可选):模板的自定义ID(如果没有提供则自动生成)
  • name(可选):模板的人类可读名称
  • description(可选):模板的用途描述

返回值: 模板ID和元数据

示例:

await callTool("save_template", {
  templateId: "季度报告",
  templateData: convertedData,
  name: "季度报告模板",
  description: "季度业务报告的标准模板"
});

list_templates

列出所有已保存的模板及其元数据。

返回值: 包含模板ID、名称、描述、幻灯片数量和创建日期的模板数组

示例:

const result = await callTool("list_templates", {});
// 返回:{ templates: [...], count: N }

load_template

通过其ID加载已保存的模板以进行检查或修改。

参数:

  • templateId:要加载的模板ID

返回值: 包含数据和元数据的完整模板对象

delete_template

通过其ID删除已保存的模板。

参数:

  • templateId:要删除的模板ID

create_from_template

从已保存的模板创建一个新的演示文稿,可选地替换内容。

参数:

  • templateId:要使用的模板ID
  • contentMapping(可选):映射元素标识符到替换内容的对象

内容映射格式: contentMapping对象允许您替换模板元素中的内容。键可以是:

  • 元素位置:"slide_0_element_1"(幻灯片索引,元素索引)
  • 元素名称:原始演示文稿中的元素名称

值是基于元素类型的属性对象:

  • 文本/形状元素{ text: "新的文本内容" }
  • 图像元素{ path: "url/or/path" }{ data: "base64..." }
  • 表格元素{ rows: [[...]] }
  • 图表元素{ chartType: "bar", data: [...] }

返回值: 新的演示文稿ID

示例: