一个基于Model Context Protocol (MCP)的服务器,使用PptxGenJS提供全面的PowerPoint演示文稿创建能力。该服务器通过一个适合LLM的接口提供了PptxGenJS的所有功能。
此MCP服务器提供的工具包括:
npm install
npm run build
此MCP服务器也可以部署到Cloudflare Workers,用于基于云的操作,并使用R2存储来存储演示文稿。请参阅CLOUDFLARE_DEPLOYMENT.md获取详细的设置说明。
快速开始:
npm install -g wrangler
wrangler login
wrangler r2 bucket create pptx
npm run deploy
在你的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"]
}
}
}
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(可选):演示文稿的自定义IDlayout(可选):布局类型('LAYOUT_4x3', 'LAYOUT_16x9', 'LAYOUT_16x10', 'LAYOUT_WIDE')author(可选):作者姓名company(可选):公司名称title(可选):演示文稿标题subject(可选):演示文稿主题rtlMode(可选):启用右对齐模式返回值: 用于后续操作的演示文稿ID
list_presentations列出内存中的所有活动演示文稿。
define_layout创建具有特定尺寸的自定义幻灯片布局。
参数:
presentationId:演示文稿IDname:布局名称(例如,'A4')width:宽度(英寸)height:高度(英寸)add_slide向演示文稿添加一个新的幻灯片。
参数:
presentationId:演示文稿IDbackgroundColor(可选):六位数的十六进制颜色(例如,'FF0000')backgroundImage(可选):图像路径或base64数据add_section添加一个命名的部分以组织幻灯片。
参数:
presentationId:演示文稿IDtitle:部分标题add_text向当前幻灯片添加具有丰富格式的文本。
参数:
presentationId:演示文稿IDtext:文本内容(字符串或文本对象数组)x, y, w, h:位置和大小(英寸或百分比)fontSize:字体大小(磅)fontFace:字体族名称color:文本颜色(六位数的十六进制)bold, italic, underline:文本样式align:水平对齐方式('left', 'center', 'right', 'justify')valign:垂直对齐方式('top', 'middle', 'bottom')bullet:启用项目符号lineSpacing:行间距倍数add_shape向当前幻灯片添加一个形状。
参数:
presentationId:演示文稿IDshape:形状类型(例如,'rect', 'ellipse', 'roundRect', 'triangle', 'rightArrow', 'star')x, y, w, h:位置和大小fill:填充配置(颜色、透明度)line:边框配置(颜色、宽度、虚线类型)支持的形状包括:
add_image向当前幻灯片添加一个图像。
参数:
presentationId:演示文稿IDpath 或 data:图像来源(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:图像搜索结果数组,包含description和sourceUrladdedToSlide(当autoAdd为true时):关于已添加图像的信息,包括presentationId、slideIndex、imageUrl和description示例:
仅搜索:
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:演示文稿IDrows:行数组(每行是单元格数组)x, y, w, h:位置和大小colW:列宽数组rowH:行高数组fontSize, fontFace, color:默认文本样式fill:默认单元格背景色border:默认单元格边框每个单元格可以是:
text和options的对象,用于单独的单元格样式add_chart向当前幻灯片添加一个图表。
参数:
presentationId:演示文稿IDtype:图表类型('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:演示文稿IDnotes:备注文本import_html_table导入HTML表格并将其转换为PowerPoint表格。自动保留样式,包括粗体、斜体、颜色、对齐方式、colspan和rowspan。
参数:
presentationId:演示文稿IDhtml: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:演示文稿IDbackgroundColor(可选):幻灯片背景颜色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:占位符定义数组,包含id、type、位置和样式示例:
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:演示文稿IDmasterId:要应用的幻灯片母版IDplaceholderContent(可选):占位符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:要删除的模板IDcreate_from_template从已保存的模板创建一个新的演示文稿,可选地替换内容。
参数:
templateId:要使用的模板IDcontentMapping(可选):映射元素标识符到替换内容的对象内容映射格式:
contentMapping对象允许您替换模板元素中的内容。键可以是:
"slide_0_element_1"(幻灯片索引,元素索引)值是基于元素类型的属性对象:
{ text: "新的文本内容" }{ path: "url/or/path" } 或 { data: "base64..." }{ rows: [[...]] }{ chartType: "bar", data: [...] }返回值: 新的演示文稿ID
示例: