Skip to main content
Glama
wolf-ms-ppt-mcp
by amareca

wolf-ms-ppt-mcp

MCP server that lets AI agents create and manipulate Microsoft PowerPoint presentations (.pptx) locally, without requiring Microsoft Office.

CI

Status

Phases 1, 2 and 3 are implemented.

Phase 1 — Foundation and reading:

  • create_presentation — create a new deck (16:9 by default) or from a template.

  • open_presentation — open an existing .pptx.

  • save_presentation / save_as — persist changes.

  • list_slides — list slides with layout, title and text preview.

  • inspect_slide — detailed shapes/text/images/positions of one slide.

Phase 2 — Slide management:

  • add_slide — add a slide using a layout, optionally at a given position.

  • duplicate_slide — duplicate a slide (shapes, background and images).

  • delete_slide — delete a slide.

  • move_slide — reorder slides.

Phase 3 — Content (text and images):

  • set_slide_text — set slide titles, subtitles, bodies or named shapes, with optional color.

  • add_text_box — add a text box at a position (inches), with optional color.

  • replace_text — find/replace text across all slides or one slide.

  • add_image — insert an image from a local path or an http(s) URL.

All planned MVP phases are implemented. Future work includes verifying PowerPoint for the Web and the post-MVP versions (COM backend, advanced content, cloud).

Related MCP server: PowerPoint MCP Server

Requirements

  • Python 3.11+

  • No Microsoft Office installation required

Installation

uv sync

Or install from source:

pip install .

Usage

Run the server over stdio:

uv run wolf-ms-ppt-mcp

Configure your MCP client (Claude, Cursor, etc.):

{
  "mcpServers": {
    "wolf-ms-ppt": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/wolf-ms-ppt-mcp",
        "run",
        "wolf-ms-ppt-mcp"
      ]
    }
  }
}

Once published to PyPI, this can be simplified to uvx wolf-ms-ppt-mcp.

Development

uv sync --extra dev
uv run pytest

Contributing

See CONTRIBUTING.md.

Security

See SECURITY.md.

Changelog

See CHANGELOG.md.

License

MIT. See LICENSE. Third-party attributions are listed in THIRD_PARTY_LICENSES.md.

Disclaimer

PowerPoint and Microsoft Office are trademarks of Microsoft Corporation. This project is not affiliated with or endorsed by Microsoft.

Available Tools

14 tools
add_imageB

Insert an image from a local path or an http(s) URL.

Args: index: Zero-based index of the slide. source: Local file path or http(s) URL. x: Left position in inches. y: Top position in inches. w: Optional width in inches (keeps aspect ratio if h is omitted). h: Optional height in inches (keeps aspect ratio if w is omitted).

Inputs: x (required), y (required), index (required), source (required), +2 more.

add_slideA

Add a new slide to the current presentation.

Args: layout_name: Name of the slide layout to use. Defaults to "Title and Content" when available, otherwise "Blank". index: Optional zero-based position to insert the slide at. When omitted, the slide is appended at the end.

Inputs: index, layout_name.

add_text_boxB

Add a text box to a slide. Coordinates and size are in inches.

Args: index: Zero-based index of the slide. text: Text content (use \n for multiple paragraphs). x: Left position in inches. y: Top position in inches. w: Width in inches. h: Height in inches.

Inputs: h (required), w (required), x (required), y (required), +2 more.

create_presentationC

Create a new PowerPoint presentation and make it the current one.

Args: path: Optional file path where the presentation will be saved later. template_path: Optional .pptx or .potx template to base the deck on. When omitted, a blank 16:9 presentation is created.

Inputs: path, template_path.

delete_slideB

Delete a slide from the current presentation.

Args: index: Zero-based index of the slide to delete.

Inputs: index (required).

duplicate_slideA

Duplicate a slide, copying its shapes, background and images.

Args: index: Zero-based index of the slide to duplicate. new_index: Optional zero-based position for the copy. When omitted, the copy is appended at the end.

Inputs: index (required), new_index.

inspect_slideA

Return detailed information about one slide.

Includes each shape's id, name, type, placeholder status, position and size (in inches), plus text and image metadata when present.

Args: index: Zero-based index of the slide.

Inputs: index (required).

list_slidesA

List all slides in the current presentation.

Returns the index, layout name, title, shape count and a short text preview for each slide.

Inputs: no named parameters.

move_slideC

Move a slide to a new position.

Args: from_index: Zero-based index of the slide to move. to_index: Zero-based destination index.

Inputs: to_index (required), from_index (required).

open_presentationB

Open an existing .pptx file and make it the current presentation.

Args: path: Path to the .pptx file to open.

Inputs: path (required).

replace_textC

Replace exact text in the current presentation.

Args: find: Text to search for (must be non-empty). replace: Replacement text. scope: None or "all" for every slide, or a zero-based slide index.

Inputs: find (required), replace (required), scope.

save_asC

Save the current presentation to a new path.

Args: path: Destination path for the .pptx file.

Inputs: path (required).

save_presentationB

Save the current presentation to its current path.

Inputs: no named parameters.

set_slide_textB

Set the text of a slide.

Args: index: Zero-based index of the slide. content: Either a string (sets the slide title) or an object mapping targets to text. Targets can be "title", "subtitle", "body", "content", a placeholder index as a string, or a shape name. Values can be strings or lists of paragraphs.

Inputs: index (required), content (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 14 tools

    Disambiguation5/5

    Tools are cleanly separated by object and action: presentation lifecycle, slide CRUD/reorder, and content insertion/replacement. The only mild overlap is set_slide_text vs replace_text vs add_text_box, but the descriptions make their scopes clear.

    Naming Consistency4/5

    All tools use snake_case and start with an action verb, mostly following a verb_noun pattern such as create_presentation, list_slides, and add_image. save_as is a minor deviation from strict verb_noun naming but remains predictable.

    Tool Count5/5

    Fourteen tools is well within the appropriate range for a PowerPoint authoring server. The set covers presentation, slide, and basic content operations without excessive fragmentation.

    Completeness3/5

    Core presentation and slide lifecycle is covered, plus text and image insertion. However, content editing is incomplete: there is no shape/image deletion or update, no table/chart/shape drawing, and no formatting or notes operations, creating dead ends for richer edits.

    Maintenance

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers