# MCP Server

## Install

```pwsh
dotnet tool install --global Sbroenne.PowerPointMcp.McpServer
```

This installs the `mcp-powerpoint` command. Point your MCP client (Claude
Desktop, VS Code, GitHub Copilot, etc.) at it over stdio:

```json
{
  "mcpServers": {
    "powerpoint": {
      "command": "mcp-powerpoint"
    }
  }
}
```

## Capabilities

**17 tools with 191 operations across 17 domains:**

| Tool | Ops | Coverage |
| --- | --- | --- |
| `presentation` | 20 | create, open, Save As, Save Copy As, close, list, templates, get/set final, document properties, string tags |
| `slide` | 23 | slide lifecycle, backgrounds, sections, comments, import, string tags |
| `shape` | 48 | shape creation, styling, grouping, hyperlinks, placeholders, string tags, `copy-formatting`, `get-link-info`, `update-link`, `break-link`, `set-link-auto-update` |
| `textframe` | 20 | text content, font formatting, alignment, bullets, auto-size |
| `table` | 12 | tables, cell text, row/column edits, cell fill/border, merge |
| `notes` | 2 | set/get speaker notes |
| `layout` | 4 | set/get slide layout |
| `pagesetup` | 5 | slide size, numbering, footer, date/time |
| `accessibility` | 3 | deterministic audit and reading order |
| `master` | 11 | theme color palettes, title/body placeholder fonts, solid + gradient master backgrounds |
| `animation` | 5 | shape effects, transition read/write |
| `image` | 7 | add picture, brightness/contrast, recolor, crop |
| `media` | 2 | add embedded/linked audio or video, get native media info |
| `chart` | 16 | charts, series, titles, legend, data replacement, styles, colors, data tables |
| `smartart` | 7 | SmartArt insertion and node editing |
| `export` | 3 | export to PDF or images |
| `customshow` | 3 | named custom shows: curated, ordered subsets of a presentation's slides |

Every domain is exposed as a single **action-dispatch tool** taking an `action`
parameter — including `presentation`. Example MCP calls:

- `presentation(action="create", filePath="C:\\Decks\\demo.pptx")`
- `presentation(action="apply-template", sessionId="...", templatePath="C:\\Templates\\brand.potx")`
- `chart(action="add-chart", session_id="...", slide_index=2, ...)`

## How it works

`ComInterop` (STA thread + OLE message filter) → `Core` (domain command classes) →
`PowerPointMcp.Service` (shared service layer) → `McpServer` (stdio host, calling the service
in-process) and `CLI` (talks to the same service via a background named-pipe daemon). Each open
presentation is a session identified by a `sessionId`; tools operate on a session until it is
closed.

## Links

- Documentation: https://powerpointmcpserver.dev
- Source: https://github.com/sbroenne/mcp-server-powerpoint

Licensed under the MIT License.
