{
  "markdown": "<!-- mcp-name: io.github.nometalalchemist/kitchensink4ppt -->\n# 🖌️ KitchenSink4PPT\n\n[![Tests](https://github.com/KitchenSink4AI/KitchenSink4PPT/actions/workflows/tests.yml/badge.svg)](https://github.com/KitchenSink4AI/KitchenSink4PPT/actions/workflows/tests.yml)\n[![PyPI](https://img.shields.io/pypi/v/kitchensink4ppt)](https://pypi.org/project/kitchensink4ppt/)\n[![License: AGPL-3.0](https://img.shields.io/badge/license-AGPL--3.0-blue)](LICENSE)\n\n[Landing page](https://kitchensink4ai.github.io/KitchenSink4PPT/) · [llms.txt](https://kitchensink4ai.github.io/KitchenSink4PPT/llms.txt) (machine-readable capability manifest for agents and LLM crawlers)\n\nA full-featured PowerPoint (.pptx) MCP server: slides, text, native vector\ndiagrams your hands can still move, structural tables, charts, speaker\nnotes, and render-to-verify export, with budgeted reads that never flood a\nconversation. 142 tools. Works with Claude Code, Claude Desktop, Cursor, and\nany MCP client. Part of the KitchenSink4AI suite with kitchensink4word\n(Word), kitchensink4xl (Excel), and kitchensink4web (browser).\n\nNot affiliated with, endorsed by, or sponsored by Microsoft Corporation.\nMicrosoft and PowerPoint are trademarks of the Microsoft group of companies.\nDual-licensed: AGPL-3.0, or a commercial license for organizations that need\nto ship it in closed products ([details](#license)).\n\nEverything plus the kitchen sink for Microsoft PowerPoint: an MCP server for\n.pptx files, engineered not to corrupt. Slides, text, tables, charts, notes,\nexport, and the one thing no other server in the ecosystem does: arbitrary\nvector graphics as native, editable PowerPoint shapes.\n\nNew here? Start with the [Quickstart](docs/QUICKSTART.md).\n\n## The headline: real graphics, not pictures of graphics\n\nFeed `svg_to_shapes` any SVG and it compiles into a grouped tree of NATIVE\nPowerPoint shapes: custom geometry, gradients, strokes, text, nested groups.\nNo rasterizing, no external APIs, no PowerPoint install needed to build.\nEvery shape keeps its own id, so afterward you edit the diagram\nsemantically: recolor node 7, resize the box, rewrite its label.\n\nConnectors are GLUED. Move the node and the arrows follow, exactly as if a\nperson had drawn the diagram by hand in PowerPoint. The human you hand the\ndeck to can nudge any piece in seconds, with no regeneration round trip.\n\n`insert_shape` (presets and freeform geometry), `insert_connector`\n(straight, elbow, curved, arrowheads), `group_shapes`, `align_shapes`,\n`distribute_shapes`, and `set_z_order` cover from-scratch diagram building;\n`export_slide_image` renders a PNG so the agent can look at what it made and\nfix it.\n\n## Install\n\n### Claude Desktop: one click\n\nDownload `kitchensink4ppt.mcpb` from the\n[latest release](https://github.com/KitchenSink4AI/KitchenSink4PPT/releases/latest)\nand double-click it, or drag it into the Claude Desktop window. Desktop adds\nit as an extension and the sink is connected. Nothing to type, nothing to\nconfigure. The bundle launches the server with\n[uv](https://docs.astral.sh/uv/), so uv needs to be on your PATH\n(`pip install uv`); if Desktop does not pick the file up on a double-click,\nuse Settings > Extensions > Advanced settings > Install extension.\n\n### Claude Code: one line\n\n```\nclaude mcp add powerpoint -s user -- uvx kitchensink4ppt\n```\n\nThat fetches and runs the server for you, so there is nothing to install\nfirst.\n\n### For developers: pip, source, other MCP clients\n\nInstall the package and point any MCP client at the executable:\n\n```\npip install kitchensink4ppt\n```\n\n```json\n{\"mcpServers\": {\"powerpoint\": {\"command\": \"kitchensink4ppt\"}}}\n```\n\nThe `ppt-mcp` executable is an equivalent entry point. From a clone:\n\n```\ngit clone https://github.com/KitchenSink4AI/KitchenSink4PPT\ncd KitchenSink4PPT\npython -m venv .venv\n.venv\\Scripts\\pip install -e .\nclaude mcp add powerpoint -s user -- <absolute-path>\\.venv\\Scripts\\ppt-mcp.exe\n```\n\nRequires Python 3.12+. Everything file-based runs on any OS; PDF and image\nexport prefer PowerPoint via COM on Windows and fall back to LibreOffice\nheadless where available. Nothing ever needs a network connection.\n\n## Tiered loading: start light, grow mid-session\n\nThe server starts in lite mode: 25 tools, roughly 5.5k tokens of tool\ncontext, covering reading, slide CRUD, text, hyperlinks, batch editing,\nbackups, and diagnostics. The other 117 tools are registered but disabled\nuntil asked for:\n\n```\nenable_tools(packs=[\"graphics\"])\n```\n\nThe tool list grows in place (the server emits tools/list_changed and the\nclient re-fetches), and the result reports the approximate token cost added\nso the tradeoff is visible. `disable_tools` shrinks the surface again, and\n`get_workflows` ships recipes that name the right pack for each job.\n\nEnvironment pins for hosts and power users:\n\n| Variable | Effect |\n|---|---|\n| `KS4P_MODE` | startup surface: `lite` (default), `full`, or a pack list like `graphics,com` |\n| `KS4P_PACK_POLICY` | `auto` (default) or `locked` (enable_tools refuses; surface fixed at startup) |\n| `KS4P_ALL_TOOLS` | `true` loads every pack at startup; `false` or empty keeps lite. `KS4P_MODE` wins when set |\n| `KS4P_LOCK_TOOLS` | `true` fixes the surface at startup; `false` or empty leaves it adjustable. `KS4P_PACK_POLICY` wins when set |\n| `KS4P_ALLOWED_ROOTS` | opt-in path sandbox; tools refuse to touch files outside these roots |\n| `KS4P_UPDATE_CHECK` | `off` turns the update check off completely: no network call, no cache file (the older `KS4P_NO_UPDATE_CHECK=1` still works) |\n\n**Update check.** The server looks for a newer release on PyPI only when you\ncall `diagnose`, never at startup and never on a timer, at most one request\nevery seven days, capped at two seconds. The check is a single plain HTTPS\nGET to pypi.org that sends nothing but the request itself. A failed check is\nreported with its reason rather than hidden. Set `KS4P_UPDATE_CHECK=off` to turn it off\ncompletely (the older `KS4P_NO_UPDATE_CHECK=1` still works). The server never\ndownloads or installs anything.\n\nThe last two are the checkboxes the `.mcpb` bundle shows in Claude Desktop:\n\"Load every tool at startup\" and \"Lock the tool set at startup\". Both take\n`true` or `false`, treat an empty value as off, and refuse to start on\nanything else rather than guessing. The server writes one line to stderr at\nstartup naming what decided the surface.\n\nTip: in Claude Desktop's Tool permissions, set the Read-only tools group to\nAlways Allow: those tools cannot change anything, and it stops most\npermission prompts.\n\n## Pack inventory (142 tools total)\n\n| Pack | Tools | ~Tokens | What is in it |\n|---|---|---|---|\n| lite core (always on) | 25 | 5.5k | anchored deck view, atomic batch edits, get/find/replace text (live-aware, SmartArt text included), slide insert/delete/duplicate/reorder, placeholder text, hyperlinks (set/remove/list with broken-link detection), info and enumeration, copy, snapshots, backups, diagnose, workflows, enable/disable_tools |\n| graphics | 27 | 7.1k | shapes, glued connectors, SVG compiler, one-call diagram generators (timeline, org chart, matrix, cycle, comparison), images, video/audio embed, groups, align/distribute, z-order, text boxes, run formatting, bullets, format painter (copy_format/copy_position), native LaTeX equations |\n| tables-charts | 19 | 4.1k | create table, bulk cells, merge/unmerge, row and column insert/delete, borders and fills, widths/heights, 74 built-in styles, CSV/JSON export/import, bar/line/pie/scatter/combo charts with editable data workbooks, chart formatting and data readback |\n| design | 25 | 5.1k | create presentation FROM template, apply layouts, theme read AND write (colors, fonts), brand extract/apply, layout guardrail checks, slide size, hide/move slide, autofit report, slide and master/layout backgrounds, full master and layout editing (placeholders, decoration shapes, create_layout), accessibility audit and repair |\n| assembly-export | 28 | 5.2k | speaker notes, sections, footers and slide numbers, PDF/PNG/handout export, engine detection, opens-clean validation, text extraction, cross-deck slide copy, deck merge and split, agenda slides, deck statistics, document properties, anonymize, slide-show setup and custom shows, slide transitions (fade/push/wipe/split/cut/random, millisecond durations, auto-advance) and bounded entrance animations (appear/fade/wipe, click builds, by-paragraph) |\n| review-sweeps | 13 | 2.4k | modern threaded comments (add, replies, resolve, cascade delete, dual-system listing), whole-deck review report, structural deck-to-deck diff (compare_decks), and the deck-wide sweeps: font inventory/replace (incl. charts and phantom declarations), color remap and literal-to-theme unification, proofing language, whole-deck logo replace, compress/purge |\n| com (Windows only) | 5 | 0.6k | PowerPoint status and zombie process check, plus editing the deck while it is OPEN in the user's PowerPoint: explicit save, scroll-to-slide, session status; eleven file tools route here automatically via `live='auto'` |\n\nFull surface: about 29.9k tokens if you pin `KS4P_MODE=full` (numbers from\n`scripts/measure_surface.py`, not hand-math).\n\nv1.1 consolidated nine packs into six. The v1.0 names\n`transitions-animations`, `review`, `sweeps`, and `com-live` still resolve\nto their new homes in `enable_tools`, `disable_tools`, and `KS4P_MODE`, so\nnothing that worked before stops working.\n\nStructural table operations on the file itself (merging, inserting and\ndeleting rows AND columns, per-edge borders) exist in no other PowerPoint\nMCP server; they were previously COM-or-nothing.\n\n## Safety story\n\nThe same discipline as KitchenSink4Word, applied from day one:\n\n- **Atomic validated saves.** Every mutation rebuilds the package in\n  memory, validates the payload, then atomically replaces the file. A\n  failed operation leaves the original byte-identical; the file is never\n  absent from its own path, even for an instant.\n- **Two-slot backups.** Before each mutation the current content rotates\n  into `prev.pptx` and `anchor.pptx` under a hidden `.ks4p-backups/`\n  folder. `manage_backups` lists, restores (undoably), and purges;\n  `create_snapshot` makes DTG-stamped permanent keepers.\n- **Byte-identical passthrough.** Parts the tool did not touch are written\n  back byte-for-byte, so themes, media, and animations survive edits to\n  other slides untouched.\n- **Conservative refusals.** Ambiguous targets refuse with a candidate\n  list (no first-match guessing), merged-cell surgery that would split a\n  span refuses, stale batch anchors refuse the whole batch before anything\n  mutates. Refusals are structured (`{ok: false, error: {code, message,\n  hint}}`) and tell you the exact next call to make.\n- **Sandboxing, opt-in.** Set `KS4P_ALLOWED_ROOTS` and every path in and\n  out is checked.\n- **Locks.** Mutations of one file are serialized in-process and across\n  processes; files open in PowerPoint are refused rather than corrupted.\n\n## Maturity\n\nBeta. The file layer (packages, slides, text, graphics, tables, charts,\ncomments, animations, themes, links, media, notes, masters, equations,\naccessibility, deck assembly, sweeps, export) is covered by a 1,251-test\nsuite, including validation that generated decks open clean in real\nPowerPoint, and the server passes a raw stdio protocol round-trip suite.\nLive editing of decks open in PowerPoint runs every call through one\nprocess-wide lock with dialog detection at the window layer and bounded\ntimeouts, and ships with its own COM gate scripts (`tests/com_gates/`).\nIt has not yet had a long field life; treat important decks with the\nrespect the backup tools make easy, and expect fast point releases.\n[Before filing](https://github.com/KitchenSink4AI/KitchenSink4PPT/issues/new?template=bug_report.yml):\nask your AI to run `diagnose` and paste the output here; it is designed\nto be safe to share.\n\n## License\n\nKitchenSink4PPT is dual-licensed:\n\n**AGPL-3.0 (open source).** Free for anyone (individuals, academics, and\nbusinesses) for any use that complies with the AGPL's terms. Those terms\ninclude sharing source, including your modifications, when you distribute\nthe software or make it available over a network.\n\n**Commercial license.** For organizations that want to build KitchenSink4PPT\ninto their own products or services without the AGPL's source-sharing\nobligations. Contact licensing@kitchensink4.ai.\n\nCopyright (c) 2026 Alvut Consulting, LLC. KitchenSink4AI is a product line\nof Alvut Consulting, LLC.\n\nNot affiliated with, endorsed by, or sponsored by Microsoft Corporation.\nMicrosoft and PowerPoint are trademarks of the Microsoft group of companies.\n\n## Family\n\nSibling of [KitchenSink4Word](https://github.com/KitchenSink4AI/KitchenSink4Word)\n(the same engineering for .docx; [site](https://kitchensink4ai.github.io/KitchenSink4Word/)).\n",
  "bytes": 12843,
  "sha": "818b6d800813717f0b52d441ff18ecd35eb5b4c9963578c6333c32efabcf4367",
  "repo_slug": "kitchensink4ai/kitchensink4ppt",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_nometalalchemist_kitchensink4p_f676a59c/readme"
}