powerpoint

Local 2025-09-01 00:09:02 0

Creates and manipulates PowerPoint presentations with capabilities for adding various slide types, generating images, and incorporating tables and charts through natural language commands.


A MCP server project that creates powerpoint presentations

Powerpoint Server MCP server

Components

Tools

The server implements multiple tools: - create-presentation: Starts a presentation - Takes "name" as required string arguments - Creates a presentation object - add-slide-title-only: Adds a title slide to the presentation - Takes "presentation_name" and "title" as required string arguments - Creates a title slide with "title" and adds it to presentation - add-slide-section-header: Adds a section header slide to the presentation - Takes "presentation_name" and "header" as required string arguments - Creates a section header slide with "header" (and optionally "subtitle") and adds it to the presentation - add-slide-title-content: Adds a title with content slide to the presentation - Takes "presentation_name", "title", "content" as required string arguments - Creates a title with content slide with "title" and "content" and adds it to presentation - add-slide-title-with-table: Adds a title slide with a table - Takes "presentation_name", "title", "data" as required string and array arguments - Creates a title slide with "title" and adds a table dynamically built from data - add-slide-title-with-chart: Adds a title slide with a chart - Takes "presentation_name", "title", "data" as required string and object arguments - Creates a title slide with "title" and adds a chart dynamically built from data. Attempts to figure out the best type of chart from the data source. - add-slide-picture-with-caption: Adds a picture with caption slide - Takes "presentation_name", "title", "caption", "image_path" as required string arguments - Creates a picture with caption slide using the supplied "title", "caption", and "image_path". Can either use images created via the "generate-and-save-image" tool or use an "image_path" supplied by the user (image must exist in folder_path) - open-presentation: Opens a presentation for editing - Takes "presentation_name" as required arguments - Opens the given presentation and automatically saves a backup of it as "backup.pptx" - This tool allows the client to work with existing pptx files and add slides to them. Just make sure the client calls "save-presentation" tool at the end. - save-presentation: Saves the presentation to a file. - Takes "presentation_name" as required arguments. - Saves the presentation to the folder_path. The client must call this tool to finalize the process. - generate-and-save-image: Generates an image for the presentation using a FLUX model - Takes "prompt" and "file_name" as required string arguments - Creates an image using the free FLUX model on TogetherAI (requires an API key)

Configuration

An environment variable is required for image generation via TogetherAI Register for an account: https://api.together.xyz/settings/api-keys

"env": {
        "TOGETHER_API_KEY": "api_key"
      }

A folder_path is required. All presentations and images will be saved to this folder.

"--folder-path",
        "/path/to/decks_folder"

Quickstart

Install

Make sure you have UV installed

MacOS/Linux

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Clone the repo

git clone https://github.com/supercurses/powerpoint.git

Claude Desktop

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

  • --directory: the path where you cloned the repo above
  • --folder-path: the path where powerpoint decks and images will be saved to. Also the path where you should place any images you want the MCP server to use.
  # Add the server to your claude_desktop_config.json
  "mcpServers": {
    "powerpoint": {
      "command": "uv",
      "env": {
        "TOGETHER_API_KEY": "api_key"
      },
      "args": [
        "--directory",
        "/path/to/powerpoint",
        "run",
        "powerpoint",
        "--folder-path",
        "/path/to/decks_folder"
      ]
    }

Usage Examples

Create a presentation about fish, create some images and include tables and charts
Create a presentation about the attached paper. Please use the following images in the presentation:
author.jpeg

Assuming you have SQLite MCP Server installed.

Review 2024 Sales Data table. Create a presentation showing current trends, use tables and charts as appropriate

License

This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.

[
  {
    "description": "This tool starts the process of generating a new powerpoint presentation with the name given by the user. Use this tool when the user requests to create or generate a new presentation.",
    "inputSchema": {
      "properties": {
        "name": {
          "description": "Name of the presentation (without .pptx extension)",
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "type": "object"
    },
    "name": "create-presentation"
  },
  {
    "description": "Generates an image using a FLUX model and save the image to the specified path. The tool will return a PNG file path. It should be used when the user asks to generate or create an image or a picture.",
    "inputSchema": {
      "properties": {
        "file_name": {
          "description": "Filename of the image. Include the extension of .png",
          "type": "string"
        },
        "prompt": {
          "description": "Description of the image to generate in the form of a prompt.",
          "type": "string"
        }
      },
      "required": [
        "prompt",
        "file_name"
      ],
      "type": "object"
    },
    "name": "generate-and-save-image"
  },
  {
    "description": "This tool adds a new title slide to the presentation you are working on. The tool does not return anything. It requires the presentation_name to work on.",
    "inputSchema": {
      "properties": {
        "presentation_name": {
          "description": "Name of the presentation to add the slide to",
          "type": "string"
        },
        "title": {
          "description": "Title of the slide",
          "type": "string"
        }
      },
      "required": [
        "presentation_name",
        "title"
      ],
      "type": "object"
    },
    "name": "add-slide-title-only"
  },
  {
    "description": "This tool adds a section header (a.k.a segue) slide to the presentation you are working on. The tool does not return anything. It requires the presentation_name to work on.",
    "inputSchema": {
      "properties": {
        "header": {
          "description": "Section header title",
          "type": "string"
        },
        "presentation_name": {
          "description": "Name of the presentation to add the slide to",
          "type": "string"
        },
        "subtitle": {
          "description": "Section header subtitle",
          "type": "string"
        }
      },
      "required": [
        "presentation_name",
        "header"
      ],
      "type": "object"
    },
    "name": "add-slide-section-header"
  },
  {
    "description": "Add a new slide with a title and content to an existing presentation",
    "inputSchema": {
      "properties": {
        "content": {
          "description": "Content/body text of the slide. Separate main points with a single carriage return character.Make sub-points with tab character.Do not use bullet points, asterisks or dashes for points.Max main points is 4",
          "type": "string"
        },
        "presentation_name": {
          "description": "Name of the presentation to add the slide to",
          "type": "string"
        },
        "title": {
          "description": "Title of the slide",
          "type": "string"
        }
      },
      "required": [
        "presentation_name",
        "title",
        "content"
      ],
      "type": "object"
    },
    "name": "add-slide-title-content"
  },
  {
    "description": "Add a new a comparison slide with title and comparison content. Use when you wish to compare two concepts",
    "inputSchema": {
      "properties": {
        "left_side_content": {
          "description": "Content/body text of left concept. Separate main points with a single carriage return character.Make sub-points with tab character.Do not use bullet points, asterisks or dashes for points.Max main points is 4",
          "type": "string"
        },
        "left_side_title": {
          "description": "Title of the left concept",
          "type": "string"
        },
        "presentation_name": {
          "description": "Name of the presentation to add the slide to",
          "type": "string"
        },
        "right_side_content": {
          "description": "Content/body text of right concept. Separate main points with a single carriage return character.Make sub-points with tab character.Do not use bullet points, asterisks or dashes for points.Max main points is 4",
          "type": "string"
        },
        "right_side_title": {
          "description": "Title of the right concept",
          "type": "string"
        },
        "title": {
          "description": "Title of the slide",
          "type": "string"
        }
      },
      "required": [
        "presentation_name",
        "title",
        "left_side_title",
        "left_side_content",
        "right_side_title",
        "right_side_content"
      ],
      "type": "object"
    },
    "name": "add-slide-comparison"
  },
  {
    "description": "Add a new slide with a title and table containing the provided data",
    "inputSchema": {
      "properties": {
        "data": {
          "description": "Table data object with headers and rows",
          "properties": {
            "headers": {
              "description": "Array of column headers",
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "rows": {
              "description": "Array of row data arrays",
              "items": {
                "items": {
                  "type": [
                    "string",
                    "number"
                  ]
                },
                "type": "array"
              },
              "type": "array"
            }
          },
          "required": [
            "headers",
            "rows"
          ],
          "type": "object"
        },
        "presentation_name": {
          "description": "Name of the presentation to add the slide to",
          "type": "string"
        },
        "title": {
          "description": "Title of the slide",
          "type": "string"
        }
      },
      "required": [
        "presentation_name",
        "title",
        "data"
      ],
      "type": "object"
    },
    "name": "add-slide-title-with-table"
  },
  {
    "description": "Add a new slide with a title and chart. The chart type will be automatically selected based on the data structure.",
    "inputSchema": {
      "properties": {
        "data": {
          "description": "Chart data structure",
          "properties": {
            "categories": {
              "description": "X-axis categories or labels (optional)",
              "items": {
                "type": [
                  "string",
                  "number"
                ]
              },
              "type": "array"
            },
            "series": {
              "items": {
                "properties": {
                  "name": {
                    "description": "Name of the data series",
                    "type": "string"
                  },
                  "values": {
                    "description": "Values for the series. Can be simple numbers or [x,y] pairs for scatter plots",
                    "items": {
                      "oneOf": [
                        {
                          "type": "number"
                        },
                        {
                          "items": {
                            "type": "number"
                          },
                          "maxItems": 2,
                          "minItems": 2,
                          "type": "array"
                        }
                      ]
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "name",
                  "values"
                ],
                "type": "object"
              },
              "type": "array"
            },
            "x_axis": {
              "description": "X-axis title (optional)",
              "type": "string"
            },
            "y_axis": {
              "description": "Y-axis title (optional)",
              "type": "string"
            }
          },
          "required": [
            "series"
          ],
          "type": "object"
        },
        "presentation_name": {
          "description": "Name of the presentation to add the slide to",
          "type": "string"
        },
        "title": {
          "description": "Title of the slide",
          "type": "string"
        }
      },
      "required": [
        "presentation_name",
        "title",
        "data"
      ],
      "type": "object"
    },
    "name": "add-slide-title-with-chart"
  },
  {
    "description": "Add a new slide with a picture and caption to an existing presentation",
    "inputSchema": {
      "properties": {
        "caption": {
          "description": "Caption text to appear below the picture",
          "type": "string"
        },
        "image_path": {
          "description": "Path to the image file to insert",
          "type": "string"
        },
        "presentation_name": {
          "description": "Name of the presentation to add the slide to",
          "type": "string"
        },
        "title": {
          "description": "Title of the slide",
          "type": "string"
        }
      },
      "required": [
        "presentation_name",
        "title",
        "caption",
        "image_path"
      ],
      "type": "object"
    },
    "name": "add-slide-picture-with-caption"
  },
  {
    "description": "Opens an existing presentation and saves a copy to a new file for backup. Use this tool when the user requests to open a presentation that has already been created.",
    "inputSchema": {
      "properties": {
        "output_path": {
          "description": "Path where to save the presentation (optional)",
          "type": "string"
        },
        "presentation_name": {
          "description": "Name of the presentation to open",
          "type": "string"
        }
      },
      "required": [
        "presentation_name"
      ],
      "type": "object"
    },
    "name": "open-presentation"
  },
  {
    "description": "Save the presentation to a file. Always use this tool at the end of any process that has added slides to a presentation.",
    "inputSchema": {
      "properties": {
        "output_path": {
          "description": "Path where to save the presentation (optional)",
          "type": "string"
        },
        "presentation_name": {
          "description": "Name of the presentation to save",
          "type": "string"
        }
      },
      "required": [
        "presentation_name"
      ],
      "type": "object"
    },
    "name": "save-presentation"
  }
]