KitchenSink4PPT
KitchenSink4PPT is an MCP server for reading, editing, and managing PowerPoint (.pptx) decks, with a lite core plus enableable packs for graphics, tables/charts, design, assembly/export, review, and live PowerPoint.
Read decks as anchored markdown/text, find text, inspect slides/elements/hyperlinks, and get deck/server diagnostics.
Batch-edit text and placeholders, search/replace, set or remove hyperlinks, and insert/delete/duplicate/reorder slides.
Fit overflowing text, copy decks, create snapshots, and list/restore/purge rotating backups.
Enable graphics tools for shapes, connectors, SVG-to-shapes, diagrams, images, video/audio, equations, and formatting.
Enable tables/charts tools for creating and editing tables, importing CSV/JSON, and editable chart data.
Enable design tools for templates, layouts, themes, brands, masters, backgrounds, transitions, animations, and accessibility.
Enable assembly/export tools for notes, sections, footers, PDF/PNG export, validation, merging/splitting, agendas, statistics, and anonymization.
Enable review/sweeps tools for comments, deck comparison, font/color/language/logo sweeps, and compression.
Enable COM/live tools to work with decks open in PowerPoint.
Get guided workflows and server information.
Uses a supported LibreOffice installation as a rendering engine to export PowerPoint presentations to PDF or PNG images when PowerPoint is not available.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@KitchenSink4PPTTurn this org chart SVG into editable PowerPoint shapes with glued connectors."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
KitchenSink4PPT
Build and revise PowerPoint decks with your AI assistant, with diagrams made of shapes you can still edit.
Your AI gets 193 actions in PowerPoint, a backup before every change, and a question instead of a guess when your request could mean more than one shape.
KitchenSink4PPT is an MCP server that lets Claude Code, the Codex CLI, Copilot CLI, Claude Desktop and other local MCP clients create and edit .pptx files. Its diagrams are built from native PowerPoint shapes and glued connectors, so the slide is still yours to adjust after the AI is done. This is the free Community edition, licensed under the AGPL-3.0.
Product page · llms.txt · Changelog
Platform: the file tools run on Windows and Linux (macOS is untested in this release). Editing a deck that is open in PowerPoint needs Windows with PowerPoint. PDF and image export need PowerPoint on Windows or a supported LibreOffice.
Install
The package needs Python 3.12 or newer. Run the commands below in PowerShell or a terminal, not in an AI chat.
Claude Code or Codex CLI. Install uv, run the line for your app, and start a new session:
claude mcp add ppt -s user -- uvx kitchensink4pptcodex mcp add ppt -- uvx kitchensink4pptClaude Desktop. Install uv and restart Claude Desktop. Download the .mcpb file from the latest release, then open Settings > Extensions > Advanced settings > Install extension and choose the file. The first launch downloads the Python package, so it needs a network connection.
Any other local MCP client. Use uvx as the command and kitchensink4ppt as its argument, or install the package and run kitchensink4ppt as the server command:
pip install kitchensink4pptOptional: pip install "kitchensink4ppt[metrics]" adds measurement with your installed fonts for text fitting and overflow checks. The results are still estimates, so render the slide to confirm.
Related MCP server: PowerPoint Editor MCP Server
What it can do
Build a deck from a template and revise its text and speaker notes.
Draw diagrams from editable shapes and glued connectors, or generate timelines, org charts, matrices, cycles and comparisons in one call.
Turn SVG graphics into native PowerPoint shapes.
Align objects and apply consistent fonts, colors, themes and layouts.
Build tables and charts that colleagues can keep editing.
Merge, split and compare decks, and work through review comments.
Check slides for accessibility issues and apply the supported repairs.
Export PDF or slide images when a rendering application is installed.
In total the server offers 145 operations in 9 tools, 193 counting each action an operation can take (for example each kind of transition or alignment). The whole tool list costs about 7.3k tokens of your AI's working memory at startup. Figures come from scripts/measure_surface.py and scripts/count_operations.py.
KitchenSink4Word (Word), KitchenSink4XL (Excel) and KitchenSink4Web (web pages) are built the same way.
Real graphics, not pictures of graphics
svg_to_shapes compiles an SVG into a grouped tree of native PowerPoint shapes: custom geometry, gradients, strokes, text and nested groups. Nothing is rasterized, no external service is called, and building does not need PowerPoint installed. Every shape keeps its own id, so you can recolor one node, resize a box or rewrite a label afterward.
Connectors are glued. Move a node and its arrows follow, exactly as if someone had drawn the diagram by hand, so the person you hand the deck to can adjust any piece without regenerating it.
insert_shape (presets and freeform geometry), insert_connector (straight, elbow, curved, with arrowheads), group_shapes, align_shapes, distribute_shapes and set_z_order cover diagrams built from scratch, and export_slide_image renders a PNG so your AI can look at what it made and fix it.
Tool packs and context cost
The server lists nine tools, all from the first message. Every tool except ppt_help takes an op (the operation to run) and args (its arguments, including the path to the .pptx). Everything is available from the start; nothing needs switching on. Token figures count the full tools/list entry the client receives and come from scripts/measure_surface.py. ppt_help returns the arguments and a working example for any operation, and unknown arguments are refused rather than ignored. Name a slide with slide_number, which counts from 1 the way people do, or with slide, which counts from 0; every answer about one slide gives its number and title.
Tool | Operations | Approx. tokens | What it covers |
| 18 | ~1.0k | Read a deck as text with a stable address on every slide, find text, list elements, read tables, charts, notes, comments, equations and hyperlinks, |
| 17 | ~0.9k | Audits that change nothing: accessibility, layout and overflow checks, font inventory, deck comparison, statistics, brand extraction, theme, document properties, |
| 19 | ~0.9k | Batch edits with |
| 27 | ~1.2k | Shapes and their adjust handles, glued connectors, the SVG compiler, one-call diagram generators, grouping, alignment, z-order, images, video and audio, equations, alt text and reading order, and copying a shape or group from another deck |
| 16 | ~0.7k | Tables with cell edits, merge and unmerge, row and column insert and delete, borders and fills, widths and heights, built-in styles, CSV and JSON import; charts with editable data |
| 19 | ~0.9k | Slide size, layouts, theme colors and fonts, brand application, backgrounds, master and layout editing, font and color replacement across the deck, transitions and entrance animations |
| 7 | ~0.6k | Threaded comments (add, reply, resolve, delete) and anonymizing a deck for review. Also updates the server when you ask ( |
| 22 | ~1.0k | New presentations from templates, copies, snapshots and backups, copying slides between decks, merge and split, PDF, PNG, shape image and handout export, agenda slides, footers, compression, validation, and saving or scrolling a deck open in PowerPoint |
| n/a | ~0.2k | The arguments and an example for any operation |
All nine | 145 | ~7.3k | Loaded once at the start; nothing to switch on later |
For a recipe, ask your AI to call get_workflows. It includes the build-a-diagram, template and table sequences with the right tool for each step. The server's own instructions add about 500 tokens to the figures above. Administrators who want a narrower server can set KS4P_READ_ONLY=1 or list what to remove in KS4P_FORBID (see Configuration); what is removed no longer counts toward the cost.
Safety model
Atomic, validated saves. Every change rebuilds the package in memory, validates it, then swaps the new file in for the old one. A failed operation leaves the original exactly as it was. On Windows the deck keeps its Mark of the Web, so a downloaded deck still opens in Protected View, and its creation time; it keeps its own permissions wherever the file system and the folder allow it; where they do not, the deck takes its folder's permissions and the answer says so in a warning. Other programs may see the deck missing for a moment during a save, usually a few milliseconds; this server's reads wait it out.
Backups before every change. The current version rotates into
prev.pptxandanchor.pptxin a hidden.ks4p-backups/folder next to the deck.create_snapshotkeeps a permanent copy in the same hidden folder, where nothing rotates or purges it; withdest_dirit writes a visible copy there instead, named after the deck so it never carries a newer leading date stamp than the deck.manage_backupslists and restores them all (a restore can itself be undone) and purges the rotating ones.Untouched parts stay untouched. Parts a call does not change are written back byte for byte, so themes, media and animations survive edits to other slides.
Refusals instead of guesses. Ambiguous targets are refused with a list of candidates, merged-cell edits that would split a span are refused, and a batch with a stale anchor is refused before anything changes. Each refusal is structured (
{ok: false, error: {code, message, hint}}) and names the next call to make.Locks. Changes to one file are serialized within a server and across processes. A deck open in PowerPoint is read from its saved file, and the answer says so; the file tools refuse to change it rather than risk it.
PowerPoint stays yours. The server ends a PowerPoint process only if it started that process itself, and it cancels a hung call safely instead of killing the application.
Encrypted and read-only files. An encrypted presentation is refused before any Office call, and a read-only file is reported as read-only.
Privacy
The server runs on your computer. KitchenSink4AI never receives your files or usage data. Your AI app may send prompts, file contents and tool results to its own provider under that app's settings and terms. The update check described below contacts PyPI at most once a week and sends only the package name and the installed version. Choosing Update now downloads the new version from PyPI, or the new bundle from GitHub for Claude Desktop. The server's startup banner is switched off, so the framework it runs on makes no version check of its own. The Privacy Policy covers the product, purchases and support.
Configuration
Variable | Effect |
|
|
| Comma-separated tool or operation names to remove, for example |
| Optional sandbox: tools refuse to touch files outside these folders |
| Seconds a single call may run before it is cancelled safely (default 120) |
| Ceiling on the size of one reply, so a large deck is read in pages (default 52,000 characters) |
|
|
|
|
| Who signs a comment or reply when the call names no author: |
| A name that signs every comment and reply whose call names no author, in place of the |
A value the server cannot use stops startup with a plain message instead of being guessed at: an unreadable KS4P_READ_ONLY, KS4P_CALL_TIMEOUT_S, KS4P_MAX_OUTPUT_CHARS or KS4P_AUTHOR, a name in KS4P_FORBID that is not a tool or operation, or a retired setting that locked the tools, such as KS4P_PACK_POLICY=locked. A variable name the server does not know is ignored, so a misspelled one such as KS4P_READ_ONY has no effect. Check the spelling; get_server_info reports whether the server is read-only and what it forbids.
Update check and update notices. At most once a week, after you use a tool, the server asks PyPI in the background which version of kitchensink4ppt is newest. The request names only the package and the installed version and contains no decks, file names or identifiers. When a newer version exists and the server runs through uvx or the Claude Desktop extension, your AI app shows a short notice with Update now and Not now, where the app supports one. Otherwise your AI mentions the new version once and offers to update. It never downloads or installs a new version unless you choose Update now in its notice or ask your AI to update it. To turn notices off, ask your AI to turn off KitchenSink4PPT update notices; KS4P_UPDATE_NOTICES=off turns them off everywhere, and KS4P_UPDATE_CHECK=off turns the check off completely (the older KS4P_NO_UPDATE_CHECK=1 also works). The setting is kept in the server's own state folder, so it survives updates.
Upgrading from 1.x
Version 2.0 regroups the 142 flat tools of 1.3.1 into the nine tools above. Every 1.3.1 operation still exists, but you now call it as an operation of a group tool: ppt_graphics with op: "svg_to_shapes" instead of a tool named svg_to_shapes. Some arguments changed, so check ppt_help for an operation before the first call.
docs/surface_map.mdlists each 1.3.1 tool beside the tool and operation that replaces it.The
migrate-from-v1recipe inget_workflowsgives your AI the same map, so it can translate a saved prompt or script.enable_toolsanddisable_toolsare gone, because every operation is present from the start. The launch settingsKS4P_MODE,KS4P_PACK_POLICY,KS4P_ALL_TOOLSandKS4P_LOCK_TOOLSare retired. Settings from earlier versions are handled for you: an old default (KS4P_MODE=lite,fulloreverything,KS4P_PACK_POLICY=auto,KS4P_ALL_TOOLS,KS4P_LOCK_TOOLS=false) is ignored with a one-line notice, and a setting that locked the tools (KS4P_PACK_POLICY=locked,KS4P_LOCK_TOOLS=trueor aKS4P_MODElist of tool groups) stops the start with a message naming what to use instead. To limit what the server offers, useKS4P_READ_ONLYandKS4P_FORBID(see Configuration).The install commands, the package name and the
kitchensink4pptcommand are unchanged.
The changelog lists everything else that changed.
Testing
The file layer (packages, slides, text, graphics, tables, charts, comments, animations, themes, links, media, notes, masters, equations, accessibility, assembly, sweeps and export) is covered by a suite of 3,689 tests, including checks that generated decks open cleanly in PowerPoint, and the server passes a protocol round-trip suite over stdio. Tests that need sample decks generate synthetic ones, so the suite runs on any machine. Editing a deck that is open in PowerPoint runs every call through one process-wide lock, with dialog detection and bounded timeouts.
Reporting problems
Please open an issue with what you asked for, what happened and what you expected. Ask your AI to run diagnose and paste the output; it is designed to be safe to share. Please do not attach decks that contain anything private. For security issues, follow SECURITY.md.
Business edition
The Business edition pairs these tools with a Windows installer, a signed update channel and support under the Business terms. Update checks tell you when a covered release is available, and nothing installs on its own. See pricing. The Community edition stays free under the AGPL, including business use that meets its terms.
Contributing
Bug reports, fixes, tests and documentation are welcome. See CONTRIBUTING.md; first-time contributors agree to the Contributor License Agreement.
License
KitchenSink4PPT is dual-licensed.
AGPL-3.0. Free for anyone, including businesses, for any use that complies with the AGPL. Its terms include sharing your source code, with your modifications, when you distribute the software or make it available over a network.
Commercial license. For organizations that want to build KitchenSink4PPT into their own products or services without the AGPL's source-sharing obligations. Contact licensing@kitchensink4.ai.
Copyright (c) 2026 Alvut Consulting, LLC. KitchenSink4AI is a product line of Alvut Consulting, LLC. KitchenSink4AI tools are built with the help of AI coding assistants, and every release goes through the full test suite before it ships.
Not affiliated with, endorsed by, or sponsored by Microsoft Corporation. Microsoft and PowerPoint are trademarks of the Microsoft group of companies. GitHub and Copilot are trademarks of the Microsoft group of companies. Claude is a trademark of Anthropic. Codex and OpenAI are trademarks of OpenAI. All other trademarks are the property of their respective owners.
Available Tools
9 toolsppt_deckPowerPoint Decks and ExportsADestructive
Whole decks and PowerPoint itself: create, copy, snapshot, backups, copy slides between decks, merge, split, export to PDF, images, handouts or tables, document properties, agenda slides, compression, show settings, custom shows, footers, the opens-clean check (validate), and saving or scrolling a deck open in PowerPoint. Edits to a deck open in PowerPoint stay unsaved for the user to review and save; call live_save only when the user asks. Operations, one per line, as name: what it does:
create_presentation: Create a new .pptx, blank or from a template deck; an existing file is refused.
copy_presentation: Copy a deck byte for byte to dest_path; an existing destination is refused unless overwrite=true.
create_snapshot: Save a permanent copy of the deck in its hidden backup folder, or a visible one in dest_dir; never pruned or overwritten.
manage_backups: List, restore or purge the automatic backups (prev and anchor slots); purge is a dry run unless dry_run=false.
copy_slide_between: Copy one slide from another deck into this one; the source deck is not changed.
merge_decks: Append whole decks onto this deck, in order.
split_deck: Split a deck into files by section or slide range; the source is not changed.
export_pdf: Export the deck to PDF through PowerPoint, or LibreOffice when PowerPoint is absent.
export_slide_image: Render slides to PNG files to check them: slides counts from 0 (or send slide_numbers, from 1) and width sets the pixels (default 1280); the deck is not changed.
export_shape_image: Render one shape or group to a PNG at a set width; needs PowerPoint.
export_handout: Export a handout or notes-page PDF; needs PowerPoint.
export_table: Export a table's content as CSV or JSON, to a file or inline.
set_document_properties: Set the deck's document properties; an empty string clears a field.
generate_agenda_slide: Insert an agenda slide listing the sections, each linked to its first slide. More operations follow, in the same format, in the op parameter's description.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | The operation to run: one listed in this tool's description, or one of these, in the same format: - refresh_agenda_slide: Rebuild the agenda slide after reordering or section changes. - compress_deck: Shrink a deck by downsampling images; purge_unused=true also drops unused parts, and dry_run=true reports without changing anything. - set_show_properties: Set how the slide show runs: presenter, window or kiosk, looping, timings and range. - manage_custom_show: Create, rename, delete or list custom shows (named slide sequences). - set_footer: Set footer text, slide numbers and dates per slide or deck-wide, where the design allows them. - validate: Check the deck is sound: the file structure, then a real open in a hidden PowerPoint when available. - live_save: Save the open deck, only when the user asks; live edits stay unsaved for them to review. A first key saved_user_work means the save wrote their own edits too. - live_scroll_to: Scroll the open deck's window to a slide so the user can watch edits land. | |
| args | No | The operation's arguments as an object, including file_path unless the operation names other paths or reads no deck; unknown keys are refused. Slides count from 1 in slide_number and from 0 in slide: the user's slide 2 is slide_number 2 or slide 1. ppt_help lists every argument. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important side effects and safeguards: live edits stay unsaved for user review, create_presentation refuses existing files, copy_presentation requires overwrite=true to replace, snapshots are never pruned, backup purge is a dry run unless dry_run=false, and validate opens the deck in hidden PowerPoint. This gives the agent substantial behavioral context for a destructive multi-operation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but the length is largely justified by the 22 operations and it is structured one operation per line. The opening summary slightly duplicates the following operation list, but the format remains front-loaded and navigable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high complexity, rich op schema, and annotations covering the destructive profile, the description is substantially complete for selecting an operation and understanding key side effects. Remaining gaps are outputs/return values and full per-operation argument coverage, which is partially mitigated by the pointer to ppt_help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The op parameter is the central dispatch parameter, and the description gives meaningful semantics for the first fourteen enum values that the schema enum alone does not explain. It also adds operation-specific argument hints such as overwrite, dry_run, dest_path, slide numbering, and image width, though it defers full argument documentation to ppt_help.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this is the deck-level and PowerPoint-operations tool, then enumerates concrete operations such as create, copy, snapshot, merge, split, export, and validate. It is specific about verbs and resources, but it does not explicitly distinguish itself from siblings like ppt_edit, ppt_read, or ppt_inspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear operational context, including when to call live_save only when the user asks, when existing files are refused, and when dry_run or overwrite flags apply. It does not explicitly route the agent between this tool and the sibling tools, so the sibling-selection guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppt_designPowerPoint Design and MastersADestructive
Deck design: slide size, layouts, theme colors and fonts, brand transfer, backgrounds, masters and layout placeholders, deck-wide font and color replacement, transitions and entrance animations. Theme and master reads are ppt_inspect. Every edit backs the file up first and saves atomically. Operations, one per line, as name: what it does:
set_slide_size: Change the slide size (16:9, 4:3, A4, Letter or inches); content is not rescaled.
apply_layout: Switch a slide to another layout; matching placeholders keep their content, others are reported.
set_theme_colors: Set any of a master's 12 theme color slots to hex colors.
set_theme_fonts: Set a master's theme heading and body fonts.
apply_brand: Apply an extract_brand result (theme colors and fonts) to every master of this deck.
set_slide_background: Set or clear one slide's background: a color, gradient or picture.
set_master_placeholder: Set a master placeholder's position, size and text defaults, which every slide inherits.
set_layout_placeholder: Set a layout placeholder's position, size and text defaults, for slides using that layout.
add_layout_placeholder: Add a placeholder to a layout; existing slides do not gain it, new slides do.
remove_layout_placeholder: Remove a placeholder from a layout; refuses while slides use it unless force=true.
insert_master_shape: Put a decoration shape (logo box, footer bar, rule line) on a master or one layout.
delete_master_shape: Delete a decoration shape from a master or layout by id; placeholders are refused.
create_layout: Create a new layout under a master, copied from an existing layout or blank.
set_master_background: Set the background of a master or one layout: a color or a gradient.
replace_fonts: Replace typefaces across the whole deck, including charts, SmartArt and unused declarations.
replace_colors: Replace literal colors across the deck, optionally with theme colors that follow later theme edits. More operations follow, in the same format, in the op parameter's description.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | The operation to run: one listed in this tool's description, or one of these, in the same format: - set_transition: Set or remove a slide transition (fade, push, wipe, split, cut or random). - add_entrance_animation: Add an appear, fade or wipe entrance animation to a shape, optionally paragraph by paragraph. - clear_animations: Remove a slide's animations, or one shape's; transitions stay. | |
| args | No | The operation's arguments as an object, including file_path unless the operation names other paths or reads no deck; unknown keys are refused. Slides count from 1 in slide_number and from 0 in slide: the user's slide 2 is slide_number 2 or slide 1. ppt_help lists every argument. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds real value on top: 'Every edit backs the file up first and saves atomically', plus per-operation consequences ('content is not rescaled', 'existing slides do not gain it, new slides do', 'refuses while slides use it unless force=true', 'transitions stay'). It stops short of describing return values or partial-failure reporting in any general way.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The summary, the read-alternative, and the safety note are front-loaded before the operation list, and the one-line-per-operation format is scannable. The list is long, but each line carries distinct behavioral information; only the trailing pointer to the op parameter's description is slightly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-operation destructive tool with a free-form nested `args` object and no output schema, the description covers operation scope, safety semantics, and where to find argument details (ppt_help). What it omits is what a call returns or how per-slide outcomes are reported, which matters given there is no output schema to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by glossing every enum value of `op` with its effect rather than just its name. The `args` slide-indexing convention (slide_number 1-based vs slide 0-based) is also surfaced in the schema, so no additional compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific domain statement ('Deck design: slide size, layouts, theme colors and fonts, brand transfer...') and then enumerates all operations verb-by-verb, so the agent knows exactly what class of edit this tool performs. It also explicitly distinguishes reads from writes: 'Theme and master reads are ppt_inspect.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes inspection/read work to the ppt_inspect sibling and specifies that per-operation arguments live in ppt_help, giving clear entry conditions. However, it never states when to prefer this tool over the write-oriented siblings (ppt_edit, ppt_graphics, ppt_deck), so the boundary for deck-level design edits is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppt_editEdit PowerPoint Slides and TextADestructive
Slide text and slides: the batch editor (apply_edits), find and replace, placeholders, fit, text formatting, bullets, text boxes, notes, hyperlinks, and inserting, deleting, duplicating, ordering, hiding and sectioning slides. Shapes and pictures are ppt_graphics; tables and charts are ppt_tables. Every edit backs the file up first and saves atomically. Edits to a deck open in PowerPoint stay unsaved for the user to review and save; call live_save only when the user asks. Operations, one per line, as name: what it does:
apply_edits: Apply many edits (text, paragraphs, shapes, tables, speaker notes) in one call: one backup and one save; one stale anchor refuses all.
search_and_replace: Find and replace across the deck, SmartArt text included, keeping each run's formatting.
set_placeholder_text: Fill a layout placeholder (title, subtitle, body) with text that takes the layout's styling.
fit_text: Shrink overflowing text to fit its box; this is an estimate, so check with export_slide_image.
format_text: Format existing text in one shape: whole shape, one paragraph, or a character range (start/end from find_text, file-mode only).
set_bullets: Set character, numbered or no bullets on a text shape's paragraphs.
insert_textbox: Add a free text box at a position in inches, for labels and callouts.
set_notes: Replace one slide's speaker notes, or many in one save with notes; dropping bold, bullets or links needs flatten=true.
delete_notes: Remove one slide's speaker notes entirely.
set_hyperlink: Set a hyperlink (a URL or a jump to a slide) on a shape or text range, replacing any link there.
remove_hyperlink: Remove hyperlinks from a shape or text range.
insert_slide: Add a slide from a layout (by name or index), with the layout's placeholders ready to fill.
delete_slide: Delete a slide and everything only it used; links to it are disabled. set_slide_hidden keeps it instead. More operations follow, in the same format, in the op parameter's description.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | The operation to run: one listed in this tool's description, or one of these, in the same format: - duplicate_slide: Copy a slide with its notes, charts and embedded objects; the copy lands after the original by default. - reorder_slides: Put every slide in a new order in one call; the order must list every slide exactly once. - move_slide: Move one slide to a new 0-based position. - set_slide_hidden: Hide or unhide a slide; hidden slides keep their content but are skipped in the show. - manage_section: Create, rename or delete a section, or move a slide into one (action); slides are never deleted. - set_language: Set the proofing language on every text run across slides, layouts, masters, notes and charts. | |
| args | No | The operation's arguments as an object, including file_path unless the operation names other paths or reads no deck; unknown keys are refused. Slides count from 1 in slide_number and from 0 in slide: the user's slide 2 is slide_number 2 or slide 1. ppt_help lists every argument. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: every edit backs the file up first and saves atomically, edits to a deck open in PowerPoint stay unsaved for review, and a single stale anchor refuses the entire apply_edits batch. It also discloses side effects of specific ops (links to a deleted slide are disabled, delete_slide removes only it used) — all far beyond destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: routing summary, then behavioral guarantees, then a one-line-per-operation list with a pointer to the op description for the rest. Dense but nearly every clause carries information; the length is justified by 19 operations, though the boundary between description and op schema could be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, multi-operation batch editor with nested args and no output schema, the definition covers safety (backup/atomic save), side effects, op selection, argument shape, and a route to ppt_help for full argument listings. Nothing an agent needs in order to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description goes further: it documents the op discriminator by giving ~13 named operations with concrete semantics and defers the remainder to the op param's description. It also clarifies slide numbering (slide_number is 1-based, slide is 0-based) and that args requires file_path and rejects unknown keys — meaning the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Slide text and slides: the batch editor') and immediately scopes what is in and out, naming ppt_graphics for shapes/pictures and ppt_tables for tables/charts. An agent can separate this tool from every sibling without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing rules ('Shapes and pictures are ppt_graphics'), per-operation choice guidance ('set_slide_hidden keeps it instead'), a batching recommendation via apply_edits, and a concrete when-to-use condition for live_save ('only when the user asks'). Alternatives and exclusions are both stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppt_graphicsPowerPoint Shapes and MediaADestructive
Shapes and media: insert, edit, group, align, distribute and restack shapes; connectors; SVG to native shapes; diagrams; format and position painters; pictures, video and audio; equations; alt text and reading order. Slide text is ppt_edit. Every edit backs the file up first and saves atomically. Operations, one per line, as name: what it does:
insert_shape: Insert a native shape (a preset like rect or ellipse, or a freeform path) at a position in inches.
insert_connector: Draw a straight, elbow or curved connector; ends glued to shapes follow them when they move.
set_shape: Edit one shape by id or name, inside groups too: position, size, rotation, fill, line, effect, text or name; only the values given change.
set_shape_adjustments: Read or set a preset shape's adjust handles: an arc's start and end angles, a rounded corner, an arrow's head, an elbow's bend.
delete_shape: Delete one shape, group or connector by id; connectors glued to it are kept and unglued.
group_shapes: Group two or more shapes by id into one group, like Ctrl+G.
ungroup_shapes: Ungroup one group by id, keeping each member's position and size, like Ctrl+Shift+G.
align_shapes: Align shapes left, center, right, top, middle or bottom, to each other or to the slide.
distribute_shapes: Space three or more shapes evenly across or down; the outer two stay put.
set_z_order: Bring a shape to the front or back, or one step forward or backward.
svg_to_shapes: Turn SVG markup into a group of native, editable shapes (no images); unsupported features are reported.
set_diagram_text: Replace the text of nodes in an existing SmartArt diagram, leaving its layout and styling alone.
generate_diagram: Build a timeline, org chart, matrix, cycle or comparison diagram of editable shapes from one spec.
copy_format: Copy one shape's fill, line, effects and text style onto other shapes. More operations follow, in the same format, in the op parameter's description.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | The operation to run: one listed in this tool's description, or one of these, in the same format: - copy_position: Copy one shape's position and size onto the same-named shape on other slides. - copy_shape_between: Copy one shape or group from a slide of another deck (or this one) onto a slide, with its pictures and charts; drop members, resize, scale text. - insert_image: Place a picture (PNG, JPEG, GIF, BMP or TIFF) on a slide at a position in inches. - replace_image: Swap the picture in an image shape, keeping its position, size, crop and effects. - set_image: Move, resize, crop, rename or set alt text on a picture by shape id; only the values given change. - replace_image_everywhere: Swap every copy of one picture across slides, layouts and masters, keeping each one's geometry. - insert_video: Embed an MP4 video on a slide; other formats are refused. - insert_audio: Embed MP3, M4A or WAV audio on a slide; other formats are refused. - set_media_playback: Set how a video or audio plays: start, loop, rewind, mute, volume, full screen; only the values given change. - insert_equation: Insert a LaTeX equation as native, editable PowerPoint math in a new text box. - add_equation_to_shape: Add a LaTeX equation as a new math paragraph inside an existing shape's text. - set_alt_text: Set or clear the alt text screen readers read, on any shape by id. - set_reading_order: Set a slide's screen-reader order by listing every top-level shape id; this also changes stacking order. | |
| args | No | The operation's arguments as an object, including file_path unless the operation names other paths or reads no deck; unknown keys are refused. Slides count from 1 in slide_number and from 0 in slide: the user's slide 2 is slide_number 2 or slide 1. ppt_help lists every argument. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond the annotations: 'Every edit backs the file up first and saves atomically' tells the agent about rollback safety and write atomicity, which the destructiveHint=true flag alone does not convey. Per-op semantics also disclose side effects (delete_shape 'connectors glued to it are kept and unglued', set_reading_order 'also changes stacking order', svg_to_shapes 'unsupported features are reported') and partial-update behavior ('only the values given change').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a scoping paragraph, then a uniform 'name: what it does' list that is easy to scan, with an explicit pointer that the rest continues in the op parameter. The list is long, but each line carries distinct information; the one inefficiency is splitting the op catalogue across description and schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 27-operation dispatch tool with no output schema, the description covers the operation catalogue, the safety model (backup plus atomic save), the slide-indexing convention, unknown-key rejection, and where to find argument detail. It does not describe what a successful op returns or any preconditions such as the file needing to exist, which is the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the op enum description carries the remaining 13 operations in the same format, so the enum values are fully self-documenting. The description also adds semantics the schema can't express, such as 'a position in inches' and the slide numbering convention, but the freeform args object is deferred entirely to ppt_help rather than per-op argument names, leaving a gap for a 27-op tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a concrete verb set and resource domain ('insert, edit, group, align, distribute and restack shapes... pictures, video and audio; equations; alt text'), then enumerates 14 named operations with one-line definitions. It also explicitly carves out the boundary 'Slide text is ppt_edit', so an agent can separate this tool from at least the nearest sibling without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Routing is stated for the main ambiguity ('Slide text is ppt_edit'), and each op line describes when that op is the right one (e.g. 'distribute_shapes: Space three or more shapes evenly...; the outer two stay put'). It lacks explicit when-not guidance for the media/equation/a11y ops and doesn't say to prefer this over ppt_design or ppt_tables, but the operational context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppt_helpPowerPoint Tool HelpARead-onlyIdempotent
Read-only help. With no arguments it lists every tool and its operations; with op it returns that operation's full arguments, an example call and its tool. Call it when arguments are unclear or after a BAD_ARGS refusal. Reads no deck.
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | An operation name, for its arguments and an example; leave it out to list every tool and operation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description still adds real value by stating 'Reads no deck', confirming zero side effects on presentation data, and by describing the distinct outputs of each calling mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses with zero filler: mode-without-arg first, mode-with-arg second, invocation trigger third. Every sentence earns its place and the calling conditions are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
One optional parameter, no output schema, and rich annotations; the description covers both call modes, the return content of each, and when to invoke it. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the `op` schema description is already thorough, so baseline is 3. The description goes slightly beyond by tying the optional `op` to both what it returns (full arguments, example call) and which tool owns the operation, and by explicitly pairing its absence with listing behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (tool/operation help) and both concrete behaviors: with no arguments it enumerates every tool and operation; with `op` it returns that operation's arguments, example call and owning tool. It is unmistakably distinct from the action siblings (ppt_read, ppt_edit, ppt_tables, etc.) because it manipulates no artifact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Two explicit triggers are given: 'when arguments are unclear' and 'after a BAD_ARGS refusal', which tells the agent exactly when to reach for this tool. It does not name an alternative or state a when-not condition, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppt_inspectInspect and Audit DeckARead-onlyIdempotent
Audits and deck-level facts: accessibility, layout checks, font inventory, comment report, deck comparison, statistics, theme, brand, autofit, properties, footer support, masters, export engines, and PowerPoint status. Never changes a file. Slide content reads are ppt_read. Operations, one per line, as name: what it does:
audit_accessibility: Audit alt text, table headers, reading order, missing titles and contrast; each finding names the fixing call.
check_layout: Check slides for overlap, off-slide shapes, tiny text, contrast and more; findings name the fixing call.
font_inventory: List every font in use and where, plus fonts declared where no visible text uses them; run before replace_fonts.
comment_report: Report every comment thread by slide, with authors, dates, replies and resolved state, plus a markdown summary.
compare_decks: Compare two decks slide by slide (matched by id, title, then position): text, layout, shape and notes changes.
deck_statistics: Count slides, words in body and notes, shapes, images, tables and charts, and estimate speaking time.
diagnose: Check this environment and, optionally, one file; output leaves out local paths unless verbose=true.
extract_brand: Read a deck's theme colors, fonts and most-used literal fills, for apply_brand on another deck.
zombie_check: Count running PowerPoint processes to spot one left behind by automation; never ends any.
get_theme: Read a master's theme: its 12 color slots and its heading and body fonts.
get_autofit_state: Report each text shape's autofit mode and shrink level, to find crowded slides.
get_document_properties: Read the deck's document properties (title, author, dates, company and counters).
get_footer_support: Check whether a slide's design can show a footer, slide number and date; run before set_footer.
list_master_elements: List a master's layouts, placeholders, decoration shapes and backgrounds, with which slides use each layout. More operations follow, in the same format, in the op parameter's description.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | The operation to run: one listed in this tool's description, or one of these, in the same format: - get_export_engines: Report which render engines exist here (PowerPoint or LibreOffice) and what each can export. - live_status: Check whether the user's PowerPoint responds, and which open decks have unsaved changes. - powerpoint_status: Report whether PowerPoint is installed and running, and which decks the user has open. | |
| args | No | The operation's arguments as an object, including file_path unless the operation names other paths or reads no deck; unknown keys are refused. Slides count from 1 in slide_number and from 0 in slide: the user's slide 2 is slide_number 2 or slide 1. ppt_help lists every argument. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description reinforces this with 'Never changes a file' while adding traits annotations cannot express: zombie_check 'never ends any' process, diagnose omits local paths unless verbose=true, and unknown args keys are refused. It stops short of covering failure modes or how findings are shaped beyond a few hints (comment_report's markdown summary).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is long, but the length is earned by 17 operations and the format is highly scannable: scope statement first, then one 'name: what it does' line per operation. A few lines pad slightly ('and more', 'in the same format') but nothing is redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-operation dispatcher with only two parameters and no output schema, the description gives enough per-operation intent and return hints (counts, findings, markdown summary, theme color slots) to call it correctly. Remaining gaps — error behavior and the precise result shape of audit/check findings — are minor for a read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value: it spells out what each op argument set means in practice (compare_decks takes two decks, diagnose optionally one file, extract_brand reads fills for apply_brand elsewhere). The 1-based slide_number vs 0-based slide distinction lives in the schema rather than the description, so the description is not carrying that burden itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening states the tool's domain (deck-level auditing and read-only facts) and immediately enumerates the operations, so an agent knows exactly what class of work this covers. It explicitly excludes slide-content reads and routes them to ppt_read, making the boundary with the most likely sibling unambiguous despite the awkward 'Audits and deck-level facts' fragment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage routing is explicit at both levels: 'Never changes a file. Slide content reads are ppt_read' for the tool as a whole, and per-operation sequencing rules such as 'font_inventory ... run before replace_fonts' and 'get_footer_support ... run before set_footer'. Several operations also state what they are for (autofit state 'to find crowded slides', zombie_check 'to spot one left behind by automation').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppt_readRead PowerPoint DeckARead-onlyIdempotent
Read slide content: the anchored deck view, deck and slide facts, text, find, elements, links, tables, chart data, notes, comments, equations, media, transitions and animations. Never changes a file. Audits and checks are ppt_inspect; to change anything use ppt_edit, ppt_graphics, ppt_tables, ppt_design, ppt_review or ppt_deck. Operations, one per line, as name: what it does:
get_presentation_view: Read the deck as an anchored markdown view with shape and table-cell anchors; the cheap first read, and apply_edits takes its anchors.
get_presentation_info: Read deck-level facts: slide count and size, slide order with ids and titles, masters, layouts and sections.
get_slide_info: Read one slide in depth: layout, hidden flag, and every shape with its id, kind, geometry and text preview.
get_text: Read the deck's text in reading order, optionally with speaker notes; pages in whole slides.
find_text: Find text deck-wide or in scope (slides, a range, or slide_numbers from 1), exact case unless match_case=false; each match gives its slide, shape, paragraph and character offsets for edits.
list_elements: List one kind of element (slides, shapes, placeholders, tables, charts, images, layouts, ...) with ids and locations.
list_hyperlinks: List every link and click action on shapes, text, tables, notes, SmartArt, layouts and masters, broken ones flagged.
get_table: Read one table in full: cell text, merge regions, column widths and row heights, with 0-based addresses.
get_chart_data: Read what a chart holds: series names, categories, values and axis titles, from the chart's cached values.
get_notes: Read one slide's speaker notes with their paragraph and run structure, to edit without losing formatting.
extract_text: Read all slide text and every slide's speaker notes in one call; pages by slide.
list_comments: List every comment, modern threads with replies and legacy comments, with the ids the comment operations take. More operations follow, in the same format, in the op parameter's description.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | The operation to run: one listed in this tool's description, or one of these, in the same format: - list_equations: List every equation in slides, tables and notes with its location and characters. - get_media_playback: Read how an embedded video or audio plays: start, loop, rewind, mute, volume and full screen. - get_transitions: Read each slide's transition: kind, direction, speed, duration and advance settings. - list_animations: Read one slide's animations in play order, with effects this server does not write counted separately. - get_server_info: Report product, edition, version, tool and operation totals, platform and Python; needs no deck. - get_workflows: List task recipes, or return one recipe's ordered steps naming the exact tool and operation. | |
| args | No | The operation's arguments as an object, including file_path unless the operation names other paths or reads no deck; unknown keys are refused. Slides count from 1 in slide_number and from 0 in slide: the user's slide 2 is slide_number 2 or slide 1. ppt_help lists every argument. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, but the description adds substantial context beyond them. It discloses cached chart values, broken-link flagging, paging by whole slides, exact-case search behavior, unknown-key refusal, and that get_server_info needs no deck.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and sibling routing, then uses a consistent one-line-per-operation format. Despite its length, each operation line adds relevant information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-operation read tool, the definition is complete: it covers the operation set, distinguishes read-only use from inspection and editing, explains return shapes at a high level, and documents important caveats like cached chart values and slide indexing. No output schema exists, but the per-operation descriptions provide enough return context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the structured fields already carry the argument details. The description still adds meaningful operation semantics for the first twelve ops, while the remaining six are described in the op parameter's schema description; the args object semantics are mostly handled by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: read slide content from a PowerPoint deck. It enumerates the read operations and explicitly distinguishes this tool from siblings, naming ppt_inspect for audits and ppt_edit/ppt_graphics/ppt_tables/ppt_design/ppt_review/ppt_deck for changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing guidance: audits and checks belong to ppt_inspect, and any mutation belongs to one of the edit-family tools. It also adds operation-level usage cues, such as get_presentation_view being the cheap first read and find_text using exact case unless match_case=false.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppt_reviewPowerPoint Comments and ReviewADestructive
Review: add, reply to, resolve and delete modern threaded comments, and anonymize authors. Reading comments is ppt_read list_comments or ppt_inspect comment_report. anonymize_deck saves a snapshot automatically before changing anything, because the change cannot be undone in the file. Operations, one per line, as name: what it does:
add_comment: Add a modern threaded comment to a slide; a deck with legacy comments is refused. Leave author out to sign with the user's own name, or pass author="assistant" to sign as "AI Assistant via KS4PPT".
reply_to_comment: Reply to a modern comment thread (reply to the thread root, not to a reply). Leave author out to sign with the user's own name, or pass author="assistant" to sign as "AI Assistant via KS4PPT".
resolve_comment: Mark a modern comment thread resolved, or reopen it.
delete_comment: Delete a comment thread, or one reply; a thread with replies needs cascade_replies=true.
anonymize_deck: Replace author names in properties and comments throughout the deck; a snapshot is saved first because this cannot be undone in the file.
update_now: Install the newer version the update notice named; call only when the user asks or agrees.
update_notices: Turn update notices on or off, or show their status (action).
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | The operation to run: one of the operations listed in this tool's description. | |
| args | No | The operation's arguments as an object, including file_path unless the operation names other paths or reads no deck; unknown keys are refused. Slides count from 1 in slide_number and from 0 in slide: the user's slide 2 is slide_number 2 or slide 1. ppt_help lists every argument. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description goes further: it states anonymize_deck is irreversible in the file and auto-snapshots first, and that add_comment is refused on legacy-comment decks. It does not address idempotency or what the openWorld behavior means in practice, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-operation-per-line list is well front-loaded and each bullet earns its place. The snapshot-before-anonymize warning is duplicated in the opening paragraph and again in the anonymize_deck bullet, which is the one avoidable redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a heterogeneous 7-op dispatcher with a free-form args object and no output schema, the description supplies the operation inventory, the key argument conventions, and a pointer to ppt_help for full argument lists. An agent can pick and call an operation correctly; only the return shape of each op is left unstated, which is acceptable without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and both top-level parameters (op, args) are already documented there. The description does add real meaning inside the free-form args object — the author omission/'assistant' signing convention, cascade_replies=true for threaded deletes, and the 1-based vs 0-based slide convention — but those live in prose bullets rather than being tied to argument names, and ppt_help is deferred to for the rest.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opening sentence names the domain (threaded comments and author anonymization) with specific verbs, then enumerates all seven operations with a one-line definition each. It explicitly separates itself from ppt_read list_comments and ppt_inspect comment_report, so an agent can place it among siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the reading alternatives and the condition that selects them, and it gates update_now ("call only when the user asks or agrees"). Per-operation preconditions (legacy-comment decks refused, cascade_replies required for threads with replies) tell the agent when a call will fail before it is made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppt_tablesPowerPoint Tables and ChartsADestructive
Tables and charts: create, fill, merge, resize, style and import tables, and create, refill and format charts. Table and chart reads are ppt_read. Row and column addresses are 0-based. Every edit backs the file up first and saves atomically. Operations, one per line, as name: what it does:
create_table: Insert a native table at a position in inches, optionally filled from rows of data.
set_table_cells: Write many table cells in one save: text, and per-cell bold, size, color and fill.
merge_cells: Merge a rectangle of cells (0-based, inclusive); text from covered cells moves to the first cell.
unmerge_cells: Split one merged region back into cells; its text stays in the top-left cell.
insert_table_rows: Insert empty rows before a 0-based row (at = row count appends).
delete_table_rows: Delete rows starting at a 0-based row, with their content.
insert_table_cols: Insert empty columns before a 0-based column.
delete_table_cols: Delete columns starting at a 0-based column, with their content.
format_table_cells: Set borders, fill, margins and vertical alignment on a range of cells; text is left alone.
set_column_widths: Set table column widths in inches, for all columns or some.
set_row_heights: Set table row heights in inches; rows still grow to fit their text.
apply_table_style: Apply one of PowerPoint's built-in table styles by name, with its stripe and header options.
import_table: Build or refill a table from a CSV or JSON file.
create_chart: Insert a native, editable chart (bar, column, line, pie, scatter or combo) from categories and series.
update_chart_data: Replace a chart's data in place, keeping its type and styling; the series count must stay the same.
format_chart: Format a chart's titles, legend, number format, gridlines and data labels.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | The operation to run: one of the operations listed in this tool's description. | |
| args | No | The operation's arguments as an object, including file_path unless the operation names other paths or reads no deck; unknown keys are refused. Slides count from 1 in slide_number and from 0 in slide: the user's slide 2 is slide_number 2 or slide 1. ppt_help lists every argument. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: 'Every edit backs the file up first and saves atomically' discloses the safety/rollback model, and per-op consequences are spelled out (deleted rows/cols take their content, merged text moves to the first cell, series count must stay the same, rows still grow to fit text). That goes well past destructiveHint=true and readOnlyHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded summary plus the addressing convention and the backup/atomic-save guarantee, then a scannable one-line-per-op list. With 16 operations the length is the minimum needed and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-op mutation tool with a nested free-form args object and no output schema, the description covers the operation set and cross-references ppt_help for argument detail. It does not describe what a successful call returns or how failures are surfaced, which is the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning for the free-form args bag: 0-based row/column addressing, inches as the unit, 'at = row count appends', and per-op semantics for each enum value. It does not document individual arg keys, delegating that to ppt_help.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource scope (create/fill/merge/resize/style tables and charts) and enumerates all 16 operations with one-line definitions. It explicitly carves out the read side: 'Table and chart reads are ppt_read', so an agent can distinguish this from that sibling without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes reads to ppt_read and points to ppt_help for argument details, and each op line implies when it applies (e.g. unmerge vs merge, update_chart_data vs create_chart). It does not state exclusions against the other write siblings (ppt_edit, ppt_graphics, ppt_design), so the boundary with those is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
34 tool updates
v2.0.0- Removed
apply_edits - Removed
copy_presentation - Removed
create_snapshot - Removed
delete_slide - Removed
diagnose - Removed
disable_tools - Removed
duplicate_slide - Removed
enable_tools - Removed
find_text - Removed
fit_text - Removed
get_presentation_info - Removed
get_presentation_view - Removed
get_server_info - Removed
get_slide_info - Removed
get_text - Removed
get_workflows - Removed
insert_slide - Removed
list_elements - Removed
list_hyperlinks - Removed
manage_backups - Added
ppt_deck - Added
ppt_design - Added
ppt_edit - Added
ppt_graphics - Added
ppt_help - Added
ppt_inspect - Added
ppt_read - Added
ppt_review - Added
ppt_tables - Removed
remove_hyperlink - Removed
reorder_slides - Removed
search_and_replace - Removed
set_hyperlink - Removed
set_placeholder_text
1 tool update
v1.2.2- Added
get_server_info
24 tool updates
v1.2.1- Changed
apply_edits1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
copy_presentation1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_snapshot1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
delete_slide2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / slide / titleRemoved value: -"Slide"
- Changed
diagnose1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
disable_tools1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
duplicate_slide2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / slide / titleRemoved value: -"Slide"
- Changed
enable_tools1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
find_text4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / compactAdded value: +{ + "default": false, + "type": "boolean" +} - added
Input schema / properties / limitAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "type": "integer" +}
- Changed
fit_text2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / slide / titleRemoved value: -"Slide"
- Changed
get_presentation_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_presentation_view3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / limitAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "type": "integer" +}
- Changed
get_slide_info4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / limitAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "type": "integer" +} - removed
Input schema / properties / slide / titleRemoved value: -"Slide"
- Changed
get_text3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / limitAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "type": "integer" +}
- Changed
get_workflows1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
insert_slide2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / layout / titleRemoved value: -"Layout"
- Changed
list_elements4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / compactAdded value: +{ + "default": false, + "type": "boolean" +} - added
Input schema / properties / limitAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "type": "integer" +}
- Changed
list_hyperlinks1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
manage_backups1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
remove_hyperlink3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / slide / titleRemoved value: -"Slide" - removed
Input schema / properties / target / titleRemoved value: -"Target"
- Changed
reorder_slides1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
search_and_replace1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_hyperlink3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / slide / titleRemoved value: -"Slide" - removed
Input schema / properties / target / titleRemoved value: -"Target"
- Changed
set_placeholder_text3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / placeholder / titleRemoved value: -"Placeholder" - removed
Input schema / properties / slide / titleRemoved value: -"Slide"
1 tool update
v1.1.3- Changed
diagnose1 field changed- added
Input schema / properties / verboseAdded value: +{ + "default": false, + "type": "boolean" +}
24 tool updates
v1.0.0- First observed
apply_edits - First observed
copy_presentation - First observed
create_snapshot - First observed
delete_slide - First observed
diagnose - First observed
disable_tools - First observed
duplicate_slide - First observed
enable_tools - First observed
find_text - First observed
fit_text - First observed
get_presentation_info - First observed
get_presentation_view - First observed
get_slide_info - First observed
get_text - First observed
get_workflows - First observed
insert_slide - First observed
list_elements - First observed
list_hyperlinks - First observed
manage_backups - First observed
remove_hyperlink - First observed
reorder_slides - First observed
search_and_replace - First observed
set_hyperlink - First observed
set_placeholder_text
TDQS
Scored across 9 tools
Each tool has a clearly distinct domain, and the descriptions explicitly cross-reference boundaries (e.g. ppt_read vs ppt_inspect, ppt_edit vs ppt_graphics vs ppt_tables). While ppt_read and ppt_inspect are both read-only, the split between slide content reads and audits/deck-level facts is well defined and reinforced.
All tools use a consistent ppt_<category> prefix, with no mixing of camelCase, hyphens, or unrelated verb styles. The naming is predictable and readable across the entire set.
Nine tools is well within a reasonable range for a PowerPoint automation server, and each tool maps to a coherent functional area rather than being redundant. The heavy operation count is internal to each tool and does not inflate the tool-level count.
The surface covers the full PowerPoint lifecycle: reading, auditing, editing text and slides, graphics and media, tables and charts, design and themes, review comments, deck-level operations and export, plus help. No obvious CRUD or workflow gap is apparent from the tool set.
Maintenance
Related MCP Connectors
Generate, edit, merge, translate and PDF-convert PowerPoint (.pptx) over MCP. 8 tools.
Convert images and infographics into editable PowerPoint (PPTX) and SVG files.
Create, edit, export and manage presentations. Requires a paid PPT.AI API merchant account.
Deterministic, fully editable PowerPoint from typed slide intents. 200+ layouts, brand templates.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceA server that enables creating and editing PowerPoint presentations programmatically through the Model Context Protocol, supporting features like adding slides, images, textboxes, charts, and tables.14,140 PyPI1,863MIT
- FlicenseNot gradedqualityDmaintenanceA server that provides PowerPoint presentation creation and editing capabilities through the Model Context Protocol, allowing users to create slides, add text, images, shapes and other content programmatically.2-
- AlicenseNot gradedqualityCmaintenanceMCP server for creating, reading, and editing PowerPoint (.pptx) presentations.44 PyPI3MIT
- FlicenseNot gradedqualityDmaintenanceEnables creating, editing, and reading PowerPoint presentations (PPTX) with security features like ZIP bomb protection, macro detection, and path traversal prevention.-