KitchenSink4PPT
KitchenSink4PPT is an MCP server for working with PowerPoint .pptx files: reading, editing, building, and exporting decks with native editable graphics, tables, charts, themes, and safety-first atomic saves.
Read and explore decks: get anchored slide/shape views, plain text, find text, slide info, presentation info, element listing, and hyperlink inventory.
Edit slides and text: batch edits via anchors, search/replace, insert/delete/duplicate/reorder slides, placeholder text, text fitting, hyperlink set/remove, and formatting-aware text updates.
Native vector graphics: compile SVG into editable, grouped PowerPoint shapes; insert shapes, freeform geometry, and glued connectors; group, align, distribute, set z-order, add images/video/audio, text boxes, run formatting, bullets, format painter, and LaTeX equations.
Tables and charts: create and bulk-edit tables, merge/split cells, insert/delete rows and columns, borders/fills/styles, CSV/JSON import/export; create bar/line/pie/scatter/combo charts with editable embedded workbooks and data readback.
Design and themes: create presentations from templates, apply layouts, read and write theme colors/fonts, extract/apply brand styles, edit masters/layouts, slide backgrounds, hide/move slides, and run accessibility audit and repair.
Assembly and export: speaker notes, sections, footers, slide numbers, PDF/PNG/handout export, text extraction, cross-deck slide copy, deck merge/split, agenda slides, statistics, document properties, anonymization, and custom shows.
Transitions, animations, review, and sweeps: slide transitions and bounded entrance animations, threaded comments with replies, deck-to-deck diffing, font/color/language/logo sweeps, and compression.
Session and workflow control: tiered tool packs can be enabled/disabled mid-session, recipe-style workflows are provided, plus live editing of decks open in PowerPoint (COM) and Windows PowerPoint status checks.
Safety and backups: atomic validated saves, two-slot automatic backups, permanent snapshots, byte-identical passthrough for untouched parts, conservative refusals, optional path sandboxing, and file locking to prevent corruption.
Click on "Install 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
Landing page · llms.txt (machine-readable capability manifest for agents and LLM crawlers)
Everything plus the kitchen sink for Microsoft PowerPoint: an MCP server for .pptx files, engineered not to corrupt. Slides, text, tables, charts, notes, export, and the one thing no other server in the ecosystem does: arbitrary vector graphics as native, editable PowerPoint shapes.
New here? Start with the Quickstart.
The headline: real graphics, not pictures of graphics
Feed svg_to_shapes any SVG and it compiles into a grouped tree of NATIVE
PowerPoint shapes: custom geometry, gradients, strokes, text, nested groups.
No rasterizing, no external APIs, no PowerPoint install needed to build.
Every shape keeps its own id, so afterward you edit the diagram
semantically: recolor node 7, resize the box, rewrite its label.
Connectors are GLUED. Move the node and the arrows follow, exactly as if a person had drawn the diagram by hand in PowerPoint. The human you hand the deck to can nudge any piece in seconds, with no regeneration round trip.
insert_shape (presets and freeform geometry), insert_connector
(straight, elbow, curved, arrowheads), group_shapes, align_shapes,
distribute_shapes, and set_z_order cover from-scratch diagram building;
export_slide_image renders a PNG so the agent can look at what it made and
fix it.
Related MCP server: PowerPoint Editor MCP Server
Install
Claude Desktop: one click
Download kitchensink4ppt.mcpb from the
latest release
and double-click it, or drag it into the Claude Desktop window. Desktop adds
it as an extension and the sink is connected. Nothing to type, nothing to
configure. The bundle launches the server with
uv, so uv needs to be on your PATH
(pip install uv); if Desktop does not pick the file up on a double-click,
use Settings > Extensions > Advanced settings > Install extension.
Claude Code: one line
claude mcp add powerpoint -s user -- uvx kitchensink4pptThat fetches and runs the server for you, so there is nothing to install first.
For developers: pip, source, other MCP clients
Install the package and point any MCP client at the executable:
pip install kitchensink4ppt{"mcpServers": {"powerpoint": {"command": "kitchensink4ppt"}}}The ppt-mcp executable is an equivalent entry point. From a clone:
git clone https://github.com/KitchenSink4AI/KitchenSink4PPT
cd KitchenSink4PPT
python -m venv .venv
.venv\Scripts\pip install -e .
claude mcp add powerpoint -s user -- <absolute-path>\.venv\Scripts\ppt-mcp.exeRequires Python 3.12+. Everything file-based runs on any OS; PDF and image export prefer PowerPoint via COM on Windows and fall back to LibreOffice headless where available. Nothing ever needs a network connection.
Tiered loading: start light, grow mid-session
The server starts in lite mode: 24 tools, roughly 5.3k tokens of tool context, covering reading, slide CRUD, text, hyperlinks, batch editing, backups, and diagnostics. The other 117 tools are registered but disabled until asked for:
enable_tools(packs=["graphics"])The tool list grows in place (the server emits tools/list_changed and the
client re-fetches), and the result reports the approximate token cost added
so the tradeoff is visible. disable_tools shrinks the surface again, and
get_workflows ships recipes that name the right pack for each job.
Environment pins for hosts and power users:
Variable | Effect |
| startup surface: |
|
|
|
|
|
|
| opt-in path sandbox; tools refuse to touch files outside these roots |
|
|
Update check. The server looks for a newer release on PyPI only when you
call diagnose, never at startup and never on a timer, at most one request
every seven days, capped at two seconds. The check is a single plain HTTPS
GET to pypi.org that sends nothing but the request itself. A failed check is
reported with its reason rather than hidden. Set KS4P_UPDATE_CHECK=off to turn it off
completely (the older KS4P_NO_UPDATE_CHECK=1 still works). The server never
downloads or installs anything.
The last two are the checkboxes the .mcpb bundle shows in Claude Desktop:
"Load every tool at startup" and "Lock the tool set at startup". Both take
true or false, treat an empty value as off, and refuse to start on
anything else rather than guessing. The server writes one line to stderr at
startup naming what decided the surface.
Tip: in Claude Desktop's Tool permissions, set the Read-only tools group to Always Allow: those tools cannot change anything, and it stops most permission prompts.
Pack inventory (141 tools total)
Pack | Tools | ~Tokens | What is in it |
lite core (always on) | 24 | 5.3k | 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 |
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 |
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 |
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 |
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) |
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 |
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 |
Full surface: about 29.8k tokens if you pin KS4P_MODE=full (numbers from
scripts/measure_surface.py, not hand-math).
v1.1 consolidated nine packs into six. The v1.0 names
transitions-animations, review, sweeps, and com-live still resolve
to their new homes in enable_tools, disable_tools, and KS4P_MODE, so
nothing that worked before stops working.
Structural table operations on the file itself (merging, inserting and deleting rows AND columns, per-edge borders) exist in no other PowerPoint MCP server; they were previously COM-or-nothing.
Safety story
The same discipline as KitchenSink4Word, applied from day one:
Atomic validated saves. Every mutation rebuilds the package in memory, validates the payload, then atomically replaces the file. A failed operation leaves the original byte-identical; the file is never absent from its own path, even for an instant.
Two-slot backups. Before each mutation the current content rotates into
prev.pptxandanchor.pptxunder a hidden.ks4p-backups/folder.manage_backupslists, restores (undoably), and purges;create_snapshotmakes DTG-stamped permanent keepers.Byte-identical passthrough. Parts the tool did not touch are written back byte-for-byte, so themes, media, and animations survive edits to other slides untouched.
Conservative refusals. Ambiguous targets refuse with a candidate list (no first-match guessing), merged-cell surgery that would split a span refuses, stale batch anchors refuse the whole batch before anything mutates. Refusals are structured (
{ok: false, error: {code, message, hint}}) and tell you the exact next call to make.Sandboxing, opt-in. Set
KS4P_ALLOWED_ROOTSand every path in and out is checked.Locks. Mutations of one file are serialized in-process and across processes; files open in PowerPoint are refused rather than corrupted.
Maturity
Beta. The file layer (packages, slides, text, graphics, tables, charts,
comments, animations, themes, links, media, notes, masters, equations,
accessibility, deck assembly, sweeps, export) is covered by a 1,241-test
suite, including validation that generated decks open clean in real
PowerPoint, and the server passes a raw stdio protocol round-trip suite.
Live editing of decks open in PowerPoint runs every call through one
process-wide lock with dialog detection at the window layer and bounded
timeouts, and ships with its own COM gate scripts (tests/com_gates/).
It has not yet had a long field life; treat important decks with the
respect the backup tools make easy, and expect fast point releases.
Before filing:
ask your AI to run diagnose and paste the output here; it is designed
to be safe to share.
License
AGPL-3.0-only (see LICENSE and NOTICE.md). Free for personal, academic, and open-source use. If you want to embed it in closed-source commercial software, open an issue to discuss a commercial license.
Family
Sibling of KitchenSink4Word (the same engineering for .docx; site).
Available Tools
24 toolsapply_editsA
Batch editor: many edits, one lock, one backup, one atomic save. Each edit is {"op": name, ...params} addressed by a view "anchor" (from get_presentation_view) or explicit {"slide", "shape"/"table"} keys. Ops: set_text, set_shape (graphics pack), set_table_cells (tables-charts pack), search_and_replace, set_placeholder_text, format_text (graphics pack), delete_shape (graphics pack). Every location is resolved BEFORE anything mutates; any stale anchor refuses the whole batch listing every failed index, and result.changed maps op index to outcome. These ops EDIT existing content; nothing here inserts shapes, tables, or slides. Creation tools live in the packs (enable_tools). atomic must stay True: v1 has no partial-apply mode. Saves atomically with two-slot backup; backup=False skips rotation. Use this when a change needs two or more edits; for a single edit use the standalone tool (set_shape, format_text, set_table_cells, set_placeholder_text, search_and_replace, delete_shape).
| Name | Required | Description | Default |
|---|---|---|---|
| edits | Yes | ||
| atomic | No | ||
| backup | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses one lock, one backup, atomic save, stale-anchor refusal, and result.changed mapping. These behavioral details go well beyond the readOnlyHint: false annotation and give the agent an accurate model of what happens during execution.
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 dense but every sentence contributes: core behavior, DSL format, op list, safety constraints, and routing to standalone tools. It is front-loaded with the most important information and contains 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?
Given the complexity of a batch editor with pack-specific ops and 0% schema coverage, the description is remarkably complete. It covers the operation model, failure behavior, backup behavior, required atomicity, and single-edit alternatives. The presence of an output schema covers return-value details.
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?
With schema description coverage at 0%, the description carries the full burden and does so admirably. It explains the edit structure, anchor addressing, valid op names, atomic/backup semantics, and result.changed, adding substantial meaning beyond the bare 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 opens with 'Batch editor' and immediately conveys the tool's function: applying many edits atomically to a presentation. It lists the supported ops and explicitly distinguishes itself from creation tools, making its scope unmistakable.
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 explicitly states when to use this tool ('needs two or more edits') and when to prefer standalone tools, naming each alternative. It also warns that atomic must stay True and that no partial-apply mode exists, giving clear operational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_presentationA
Copy a deck byte-for-byte, e.g. to a working copy before heavy edits (create_snapshot names a DTG-stamped copy for you; this tool takes an explicit dest_path). Refuses an existing dest_path unless overwrite=True; an overwritten destination's previous content rotates into its .ks4p-backups prev slot first, so the overwrite is undoable via manage_backups restore. The source file is never modified.
| Name | Required | Description | Default |
|---|---|---|---|
| dest_path | Yes | ||
| file_path | Yes | ||
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses overwrite refusal, the backup rotation behavior into .ks4p-backups, undoability via manage_backups, and the guarantee that the source file is never modified. These details go far beyond the readOnlyHint=false annotation and describe important side effects.
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 sentences deliver the core purpose, the key alternative, and all critical behavioral caveats without fluff. The primary action is front-loaded, and every sentence adds necessary information.
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?
The description covers purpose, routing, overwrite semantics, backup/undo behavior, and source safety. With an output schema present, no return-value detail is needed; an agent has enough context to invoke this tool correctly.
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 description coverage is 0%, so the description must compensate. It explains dest_path and overwrite behavior explicitly, and file_path is inferable as the source deck. This adds meaning beyond the bare 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 clearly states it copies a deck byte-for-byte and immediately contrasts with create_snapshot, which names a DTG-stamped copy. This makes the tool's purpose and distinction from its sibling obvious.
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 an explicit use case ('before heavy edits') and names the alternative tool (create_snapshot) with the criterion for choosing this one: an explicit dest_path rather than an auto-generated stamp. This is clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_snapshotA
Save a DTG-stamped permanent copy: YYYYMMDD_HHMM_.pptx (an existing leading DTG in the name is replaced, not stacked), plus an optional short label. Snapshots are the PERMANENT keepers alongside the automatic prev/anchor slots: slots rotate on every mutation, snapshots are never auto-pruned and manage_backups never touches them. Never overwrites (collisions get a numeric suffix). The source file is not modified. Take one before any large or risky editing pass.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| dest_dir | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state readOnlyHint=false, so the description carries the burden of behavioral detail. It discloses non-obvious behaviors: DTG replacement instead of stacking, numeric suffixes on collisions, no auto-pruning, manage_backups never touching snapshots, and the source file not being modified. These go well beyond the annotations and add significant safety-relevant context.
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 the primary purpose and then packs multiple distinct rules into a compact block. Every sentence carries information, though the density makes it slightly harder to parse. It is appropriately sized for the tool's complexity.
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?
The main behavior and safety properties are well covered, and since an output schema exists, return values need not be described. However, the dest_dir parameter's meaning and default behavior are absent, which is a noticeable gap. An agent could still call the tool correctly, but not with full confidence about where snapshots land.
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 description coverage is 0%, so the description must compensate. It explains the file_path role and the optional short label, but it never mentions the dest_dir parameter at all. One of three parameters remains semantically unexplained, so the description only partially compensates for the empty 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 opens with a specific verb and resource: 'Save a DTG-stamped permanent copy' and an exact naming format. It also distinguishes itself from siblings by explaining that snapshots are permanent keepers that 'manage_backups never touches,' so an agent can tell it apart from rotation/backup tools without opening schemas.
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 explicitly advises 'Take one before any large or risky editing pass,' giving a clear when-to-use condition. It also contrasts snapshots with automatic prev/anchor slots and manage_backups, which routes an agent away from alternatives. It does not enumerate every sibling exclusion, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_slideA
Delete a slide and garbage-collect everything only it used: notes, charts, embeddings, comments, custom-show references, section membership; jump links to it are neutered. slide: 0-based index or {"slide_id": N}. Prefer set_slide_hidden (design pack) when it might come back. Saves atomically with two-slot backup; backup=False skips rotation. live='auto' edits the open PowerPoint copy when the file is locked by it (UNSAVED until live_save, com pack); 'force' targets the open session; 'off' refuses locked files.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | auto | |
| slide | Yes | ||
| backup | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the single readOnlyHint:false annotation by disclosing garbage-collection behavior, neutered jump links, atomic saving with two-slot backup, and the unsafe 'UNSAVED until live_save' live-editing caveat. This is exactly the behavioral risk context an agent needs for a destructive 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?
Three dense sentences cover the core action, side effects, alternatives, backup semantics, and live-editing behavior without fluff. The most critical destructive effects are front-loaded, and every clause adds operational value.
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 tool with complex side effects, the description is complete: it covers what gets removed, how to avoid permanent deletion, backup behavior, locked-file behavior, and the live-saving implication. With an output schema present, the lack of return-value detail is not a 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 description coverage is 0%, so the description must compensate. It defines the slide parameter's accepted forms ('0-based index or {"slide_id": N}'), explains backup=False behavior, and clarifies live mode values. This turns potentially ambiguous schema properties into actionable semantics.
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 opens with the specific action 'Delete a slide' and names the resource, then elaborates the destructive scope: notes, charts, embeddings, comments, custom-show references, section membership, and jump links. This clearly distinguishes it from sibling slide operations like insert_slide, duplicate_slide, and reorder_slides.
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 explicitly says to prefer set_slide_hidden when the slide might come back, giving a concrete alternative for a common scenario. The live parameter values 'auto', 'force', and 'off' also explain when each mode applies, including the locked-file case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnoseARead-only
Self-check for this environment and, optionally, one file. Reports export engine availability (PowerPoint COM vs LibreOffice), sandbox state, KS4P mode/policy env, and the current pack surface with token costs. With file_path: existence, size, PowerPoint lock state, whether the package opens, and slide count, WITHOUT mutating anything. Output is PASTE-SAFE by default: no absolute paths, so it can go straight into a bug report; verbose=True adds the sandbox roots, engine locations, and full file path for local troubleshooting. Run it first when any tool refuses unexpectedly or an export engine seems missing. Reports the update-check state; the only place the check runs. The validate tool (assembly-export pack) does the real opens-clean check in PowerPoint.
| Name | Required | Description | Default |
|---|---|---|---|
| verbose | No | ||
| file_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
ReadOnlyHint already marks it read-only, and the description reinforces this with 'WITHOUT mutating anything.' It also adds valuable behavioral context: output is PASTE-SAFE by default, verbose=True exposes paths, and it is the only place the update-check runs.
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 dense but every sentence contributes: what it checks, optional file behavior, output safety, when to run it, and the boundary with validate. The key purpose is front-loaded in the first sentence.
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 output schema exists, the description need not enumerate return fields. It covers the diagnostic scope, safety profile, parameter effects, invocation timing, and the sibling tool boundary, making it complete for an agent deciding whether and how to call diagnose.
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?
With 0% schema description coverage, the description carries full responsibility for explaining parameters. It clearly explains file_path enables file-level checks, and verbose=True adds sandbox roots, engine locations, and the full file path, which goes beyond the schema's bare types.
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 ('Self-check') and resource ('this environment and, optionally, one file'), and enumerates exactly what it reports. It also differentiates itself from the validate tool, so an agent can distinguish diagnose from a real PPT opens-clean check.
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 explicitly says 'Run it first when any tool refuses unexpectedly or an export engine seems missing,' and tells the agent that validate is the tool for the actual opens-clean check in PowerPoint. This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable_toolsA
Switch pack tools back off to shrink the tool surface (the lite core always stays on). Takes the same pack names as enable_tools, or 'everything'. Idempotent: already-disabled packs are reported, not errors. Nothing about the presentation files changes; this only trims what this session's client has to carry. Reports the approx token cost removed and the remaining active surface.
| Name | Required | Description | Default |
|---|---|---|---|
| packs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation only provides readOnlyHint=false, leaving the description to carry behavioral context. It excellently discloses idempotency ('already-disabled packs are reported, not errors'), the lack of file changes ('Nothing about the presentation files changes'), session-scoped impact, and output behavior ('Reports the approx token cost removed and the remaining active surface'). No contradiction with annotations.
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 five compact sentences, each adding unique value: the action, parameter semantics, idempotency, side-effect clarification, and output. It is front-loaded with the core purpose and contains 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 one-parameter tool with an output schema present, the description fully covers the operation, parameter domain, important side-effect constraints, and expected report output. Nothing an agent needs to call 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?
Since the schema has 0% description coverage, the description must compensate. It does so by defining the parameter as pack names shared with enable_tools and allowing the special value 'everything'. It does not enumerate the actual pack names, but the pointer to enable_tools is sufficient.
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 opens with a specific verb and resource: 'Switch pack tools back off to shrink the tool surface'. It clearly identifies the tool's scope, mentions the lite core always staying on, and references enable_tools as the counterpart, so an agent can distinguish it from siblings without ambiguity.
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 explicitly ties itself to enable_tools ('Takes the same pack names as enable_tools, or "everything"'), making the alternative obvious, and the context of shrinking the tool surface implies when to use it. However, it does not give an explicit 'use this when...' or when-not rule, 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.
duplicate_slideA
Deep-copy a slide: notes, charts with their embedded workbooks, and embeddings are cloned and retargeted; layout and media stay shared by design; creation GUIDs are regenerated (duplicates corrupt). slide: 0-based index or {"slide_id": N}. position: 0-based final index for the copy, default right after the original. The design pack adds move and hide: enable_tools(packs=['design']). Saves atomically with two-slot backup; backup=False skips rotation.
| Name | Required | Description | Default |
|---|---|---|---|
| slide | Yes | ||
| backup | No | ||
| position | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the single readOnlyHint=false annotation, the description discloses deeply relevant behavior: cloned vs shared content, GUID regeneration to avoid corruption, atomic saving with two-slot backup, and backup=False skipping rotation. This is exactly the kind of operational context an agent needs.
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 dense but purposeful: copy semantics come first, then parameter details, then the pack prerequisite and save behavior. No filler is present; the design-pack sentence is slightly tangential but still relevant to the tool's capability.
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 complex mutation tool with an empty slide schema and minimal annotations, the description covers all non-obvious aspects: deep-copy behavior, parameter formats, destructive-corruption warning, backup behavior, and a capability prerequisite. Given the existing output schema, nothing essential 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?
With 0% schema description coverage, the description carries the full burden and succeeds. It explains slide's index/object form, position's 0-based meaning and default, and backup's rotation-skip effect. file_path is not explicitly described, but it is the most self-explanatory parameter.
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 opens with 'Deep-copy a slide', a specific verb and resource, then clarifies the exact scope: notes, charts with embedded workbooks, and embeddings are cloned, while layout/media stay shared and GUIDs are regenerated. This clearly distinguishes the tool from insert_slide, delete_slide, and reorder_slides.
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 concrete invocation guidance: slide can be a 0-based index or an object, position defaults to right after the original, and the design pack prerequisite for move/hide is stated. It does not explicitly name sibling alternatives or say when not to use this tool, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enable_toolsA
Switch on optional tool packs mid-session; the tool list grows and your client is notified to re-fetch it. Packs: 'graphics' (shapes, connectors, groups, align, z-order, SVG to native editable shapes, diagram generators, images, video/audio, text boxes, run formatting, bullets, format painter, LaTeX equations); 'tables-charts' (tables: create, bulk cells, merge, row/column surgery, borders, styles, CSV/JSON; bar/line/pie/scatter/combo charts, formatting, data readback); 'design' (create FROM template, apply layouts, theme colors/fonts read AND write, brand extract/apply, layout guardrails, slide size, hide/move, autofit report, slide/master backgrounds, master and layout editing, accessibility audit/repair); 'assembly-export' (notes, sections, footers, PDF/PNG/handout export, validation, text extraction, cross-deck copy, deck merge/split, agenda slides, statistics, document properties, anonymize, custom shows, slide transitions and entrance animations); 'review-sweeps' (threaded comments, compare_decks, deck-wide font/color/language/logo sweeps, compress); 'com' (PowerPoint status, zombie check, and editing the deck OPEN in PowerPoint); 'everything' (all). The v1.0 names transitions-animations, review, sweeps, and com-live still resolve to their new homes. Idempotent; reports approx token cost added and the active surface. disable_tools reverses.
| Name | Required | Description | Default |
|---|---|---|---|
| packs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the minimal readOnlyHint annotation by disclosing side effects: the tool list grows, the client is notified to re-fetch, the operation is idempotent, it reports approximate token cost added and the active surface, and it can be reversed with disable_tools. This is rich behavioral context that annotations do not provide.
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 justified because it must enumerate seven distinct pack names and their contents plus legacy aliases. It is front-loaded with the core action and effect, then systematically lists each pack. Some internal parentheses are dense, but the structure is understandable and every sentence contributes useful information.
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?
Despite having only one simple parameter, the description provides a complete picture: what packs are available, what each contains, legacy name resolution, idempotency, side effects on the client, cost reporting, and how to reverse the operation. Nothing essential is missing for an agent to decide whether and how to call this 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 0% and there are no enums, so the description carries the full burden of explaining the 'packs' parameter. It does this thoroughly by listing every valid pack name, including aliases for legacy names, and describing what each pack includes. This gives the agent concrete, actionable parameter values.
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?
Description uses a specific verb ('Switch on') and resource ('optional tool packs'), and clearly distinguishes itself from disable_tools by naming the inverse. It enumerates exactly which packs exist and what each contains, so an agent can understand the tool's purpose without any ambiguity.
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 states this is for enabling optional tool packs mid-session, provides the full list of valid packs, and explicitly says disable_tools reverses the operation. It gives clear context for when to use the tool, though it doesn't elaborate on scenarios where it should not be used or contrast with other tools beyond disable_tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_textARead-only
Search the deck's text. Returns every match with slide index, shape id, paragraph index, and character offsets, exactly the addresses format_text (graphics pack) and apply_edits consume. regex=True treats query as a regular expression (guarded against catastrophic backtracking). Matches text as displayed, not raw XML, so search for & rather than &. count is always the true total; a "page" block gives the omitted count and next offset when more matched than the budget fits. compact=True returns matches as a fields header plus one array each. Formatting-aware replacement lives in the graphics pack: enable_tools(packs=['graphics']). Use this to locate text; to read it in order, use get_text.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| regex | No | ||
| scope | No | ||
| offset | No | ||
| compact | No | ||
| file_path | Yes | ||
| include_notes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=true, and the description adds substantial behavior beyond that: regex is guarded against catastrophic backtracking, matching is against displayed text rather than raw XML, count is always the true total, pagination exposes an omitted count and next offset, and compact changes the shape. No contradictions with annotations.
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 dense but free of filler; every clause adds operational information, and the first sentence front-loads the core purpose. Subsequent details are grouped by related behavior (regex safety, XML escaping, pagination, compact output, tool routing).
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?
With an output schema present, return-value details are covered structurally. The description covers matching semantics, address format, pagination, and routing to sibling tools. Minor gap: scope and include_notes parameters are not described, but the overall behavior is sufficiently complete for an agent to call the tool correctly for common cases.
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 description coverage is 0%, and the description compensates well by explaining regex=True, compact=True, limit/offset pagination via the 'page' block, and the meaning of budget. However, scope and include_notes are left unexplained, and file_path/query rely on context rather than explicit semantics, so it is not complete.
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: 'Search the deck's text.' It then defines the exact return shape (slide index, shape id, paragraph index, and character offsets) and ties it to sibling tools by naming the addresses format_text and apply_edits consume. This clearly distinguishes find_text from get_text, which reads text in order.
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 usage: 'Use this to locate text; to read it in order, use get_text.' It also directs formatting-aware replacement to the graphics pack via enable_tools(packs=['graphics']), and notes apply_edits consumes its output, so an agent knows how this tool fits into a workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fit_textA
Shrink overflowing text to fit: estimates the largest uniform font scale (floor min_size pt) via an average-glyph-width heuristic, rewrites explicit run sizes (or writes a normAutofit fontScale when sizes are inherited), and enables normAutofit. shape=None fits every overflowing text shape on the slide; one that cannot fit at min_size reports still_overflowing. An ESTIMATE (no font metrics): verify with export_slide_images (assembly-export pack). Saves atomically with two-slot backup; backup=False skips rotation.
| Name | Required | Description | Default |
|---|---|---|---|
| shape | No | ||
| slide | Yes | ||
| backup | No | ||
| min_size | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses much more than readOnlyHint=false: the result is an ESTIMATE lacking font metrics, a shape that cannot fit at min_size reports still_overflowing, and saves are atomic with a two-slot backup where backup=False skips rotation. These traits (estimation caveat, failure reporting, atomic save semantics) materially affect how an agent trusts and invokes the tool, and none contradict the annotation.
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?
Four dense sentences, each earning its place: purpose/mechanism, shape=None scope, estimation caveat with verification, and atomic/backup save behavior. The main purpose is front-loaded and there is no filler, even though the overall density is high.
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 mutating 5-parameter tool with an output schema present, the description covers the heuristic, the failure report (still_overflowing), scope selection, verification guidance, and save behavior. The only minor gaps (shape's type, slide reference convention) appear to be shared conventions across the sibling toolset, so little is left unknown for an agent making the call.
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?
With 0% schema description coverage, the description carries the load and meaningfully clarifies min_size (floor in pt), shape (None means every overflowing shape), and backup (False skips rotation). file_path and slide are left implicit, and shape's type is unspecified, but the otherwise-ambiguous parameters are compensated for.
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 ('Shrink overflowing text to fit') and details the mechanism (largest uniform font scale via an average-glyph-width heuristic, rewriting run sizes, enabling normAutofit). This clearly separates it from sibling text tools like get_text, find_text, and search_and_replace, which read or edit text content rather than fit it.
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?
Provides clear when-to-use context: apply when text overflows, with shape=None extending the operation to every overflowing shape and min_size acting as the floor. It also advises a concrete verification step with export_slide_images due to the estimate heuristic. It stops short of naming sibling alternatives or stating when not to use it (e.g., when exact font metrics are required).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_presentation_infoARead-only
Deck-level facts in one call: slide count and size, slide order with durable ids and titles, masters and layouts, section list, and notes presence. The cheap first look before get_presentation_view. To enumerate one kind of element, use list_elements. Rendering, validation, and PDF export live in the assembly-export pack: enable_tools(packs=['assembly-export']).
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this as a read-only 'facts' call. It adds useful behavioral context beyond annotations: it is a 'cheap first look', it returns deck-level metadata including notes presence, and it explicitly excludes rendering, validation, and PDF export. No contradiction with annotations.
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 compact and front-loaded: it states the tool's purpose first, then lists contents, then provides routing to alternatives. Every sentence earns its place, and the line breaks aid scanning.
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 output schema exists and the operation is read-only, the description covers the essential invocation context: what facts are returned, when to prefer this over siblings, and where related capabilities live. No critical information for selecting or calling this tool 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?
The schema has one parameter, file_path, with no description, and the description does not clarify its expected format, bounds, or access semantics. The parameter name is self-explanatory enough to avoid a score of 1, but with 0% schema description coverage, the description should have compensated and did not.
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 uses a specific verb and resource: 'Deck-level facts in one call' about a presentation, and enumerates exactly what is returned. It also draws clear lines against sibling tools like get_presentation_view and list_elements, so an agent can distinguish it without opening schemas.
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 explicitly states when to use this tool: 'The cheap first look before get_presentation_view.' It also names alternatives and exclusions: use list_elements for enumerating one kind of element, and use the assembly-export pack for rendering, validation, and PDF export.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_presentation_viewARead-only
The anchored markdown projection of a deck, THE cheap way to read it: slide headers with durable [s:id] anchors, one block per shape with a stable [a:hex] anchor, tables as pipe tables with t:hex:rNcN cell addresses (1-based there; table tools take 0-based row/col), notes as quoted blocks. Feed the anchors to apply_edits. scope: None for all slides, an index, {"slide_id": N}, or a list. detail: "outline", "text" (default), or "full" (geometry too). Budgeted: a deck too large to render whole returns whole slides plus a "page" block giving the omitted count and the offset that continues; limit/offset page in slides. Shape and diagram editing: enable_tools(packs=['graphics']).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| scope | No | ||
| detail | No | text | |
| offset | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, it discloses the output format ('slide headers with durable anchors', 'pipe tables', 'quoted blocks'), cell address conventions, budgeted rendering behavior, and how to enable graphics editing. This gives an agent a rich, accurate model of what will happen when the tool is called.
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 dense and front-loaded with the core purpose, followed by structured details for output, scope, detail, and pagination. It is slightly run-on, but every clause contributes meaningful behavior, so the length is justified despite some stylistic informality.
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?
The description covers output shape, anchor semantics, all parameter families, budgeted behavior, and the relationship to editing workflows. An output schema exists for return values, and readOnlyHint handles safety, so nothing critical is left unexplained for an agent to invoke this tool correctly.
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?
With 0% schema description coverage, the description takes on full parameter documentation. It explains scope (None, index, slide_id object, or list), detail levels ('outline', 'text', 'full'), and limit/offset pagination semantics. The 1-based table addresses vs 0-based table-tool convention also clarifies offset-related 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 clearly identifies the tool as 'anchored markdown projection of a deck' and 'THE cheap way to read it', with a specific verb and resource. It conveys the core purpose of reading a presentation efficiently and distinguishes it from edit-oriented siblings by mentioning stable anchors for apply_edits.
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 strong usage context: scope values, detail modes, budgeted pagination, and how to feed anchors to apply_edits. It does not explicitly name alternative tools or state when not to use this tool, but the 'cheap way to read it' phrasing and detailed invocation options make intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_slide_infoARead-only
One slide in depth: durable slide_id, layout, hidden flag, notes presence, and every shape with id, name, kind, geometry in inches, placeholder type, and text preview. Shape ids here are the addresses every editing tool takes; edit what it lists via the graphics pack. slide: 0-based index or {"slide_id": N}. Budgeted: a crowded slide returns a "page" block with the omitted count and next offset. All slides: get_presentation_view. live='auto' edits the open PowerPoint copy when the file is locked by it (UNSAVED until live_save, com pack); 'force' targets the open session; 'off' refuses locked files.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | auto | |
| limit | No | ||
| slide | Yes | ||
| offset | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states that "live='auto' edits the open PowerPoint copy" while the annotations declare readOnlyHint=true. This directly contradicts the read-only annotation and could mislead an agent into thinking the tool mutates the presentation. Despite other useful behavioral disclosures, the contradiction is severe.
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 a clear summary, then adds shape-id relevance, slide addressing, pagination, and live-mode behavior. It is dense but each clause contributes useful information. A bit of restructuring or bullets could improve skimmability, but it is not bloated.
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?
The description covers return fields, shape IDs, pagination, and sibling routing well, and an output schema is present. However, the live-mode 'edits' contradiction creates a significant completeness problem: an agent cannot safely infer whether this tool has side effects, which undermines the otherwise rich 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 description coverage is 0%, so the description must carry parameter meaning. It explains slide input as '0-based index or {"slide_id": N}' and describes live modes in detail. It also gives contextual meaning to limit/offset through the budgeted page-block explanation, though file_path and exact numeric semantics are left implicit.
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 names the tool's purpose: retrieve detailed information about a single slide, listing concrete fields like durable slide_id, layout, hidden flag, notes presence, and shape geometry. It also distinguishes itself from siblings by explicitly pointing to get_presentation_view for all slides.
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 explicit routing: 'All slides: get_presentation_view.' It also explains the live parameter modes, locked-file behavior, and pagination via 'page' block with omitted count and next offset, giving the agent actionable guidance on when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_textARead-only
Plain text of the deck in reading order: shapes in spTree order, table cells tab-joined, fields rendering their cached text. scope: None for all slides, a 0-based index, {"slide_id": N}, or a list; include_notes=True appends speaker notes. Budgeted, paging in whole slides: slide_count stays the deck's true total and a "page" block gives the omitted count and the next offset; limit/offset page explicitly. Rendered-appearance checks live in the assembly-export pack. live='auto' edits the open PowerPoint copy when the file is locked by it (UNSAVED until live_save, com pack); 'force' targets the open session; 'off' refuses locked files. For edit anchors, use get_presentation_view.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | auto | |
| limit | No | ||
| scope | No | ||
| offset | No | ||
| file_path | Yes | ||
| include_notes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'live=auto edits the open PowerPoint copy when the file is locked by it' and mentions UNSAVED changes until live_save, which directly contradicts the annotation readOnlyHint=true. This is a serious inconsistency: a read-only tool should not be editing the target file.
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 dense but purposeful: it front-loads the primary purpose and then systematically covers parameters and special behaviors. The main drawback is heavy jargon such as 'com pack' and 'assembly-export pack' that assumes domain knowledge, but there is no filler or repetition.
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?
The description covers reading order, scoping, notes, paging, live behavior, and sibling routing, while the output schema handles return shape. It is nearly complete, but unexplained domain-specific terms and the unresolved contradiction with readOnlyHint prevent a perfect score.
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 description coverage is 0%, so the description carries the full burden for parameter semantics. It covers scope (None, 0-based index, slide_id dict, list), include_notes, limit/offset paging behavior, and live values ('auto', 'force', 'off'). Only file_path is left implicit, but its meaning is self-evident.
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 the tool returns 'Plain text of the deck in reading order' and specifies the ordering rules without ambiguity. It also differentiates itself from siblings by pointing to get_presentation_view for edit anchors and noting that rendered-appearance checks live elsewhere.
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 explicitly describes scope options, include_notes behavior, limit/offset paging, and live mode semantics. It also provides an exclusion: for edit anchors, use get_presentation_view. This gives an agent clear, actionable guidance on when and how to invoke the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workflowsARead-only
Step-by-step recipes for the common jobs, each naming the packs it needs and the exact tool order: build-a-diagram, one-call-diagram, equation-authoring (graphics), build-a-table-report (tables-charts), template-deck-setup, master-restyle, accessibility-pass (design), render-and-review, cross-deck-assembly, deck-merge, animate-a-build (assembly-export), batch-edit-from-view (lite, the cheap loop), review-cycle (review-sweeps), rebrand-pipeline (review-sweeps + design), live-session (com). Call with no task for the index, with a task name for full steps. Read the matching recipe before your first deck edit of a session; it prevents most wrong-tool detours.
| Name | Required | Description | Default |
|---|---|---|---|
| task | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description does not need to restate read-only behavior. It adds useful context about the two call modes (index vs full steps) and the content of the recipes. This goes beyond the annotations without contradicting them.
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 the core purpose and then lists workflow names, which is necessary information. The list is long but each item is useful for selecting a task. Slightly verbose, but every sentence earns its place.
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?
With an output schema present and readOnlyHint=true, the description provides everything needed to invoke the tool correctly: purpose, parameter semantics, and when to use it. There are no missing prerequisites or ambiguous behaviors that would prevent correct use.
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 description coverage is 0%, so the description must carry the parameter explanation. It does: no task returns the index, a task name returns full steps. It also enumerates many valid task names, effectively compensating for the lack of enums in 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 clearly states the tool provides step-by-step recipes for common jobs, each naming required packs and tool order. It lists many workflow names, giving a concrete sense of the resource covered. It is distinct from the sibling operation tools, though it lacks an explicit verb like 'retrieves' or 'returns'.
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 gives explicit invocation guidance: call with no task for the index, with a task name for full steps. It also advises reading the matching recipe before the first deck edit to prevent wrong-tool detours. However, it does not explicitly name alternative tools or conditions for using them, only implies them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_slideA
Add a slide built from a layout (name, or 0-based global index; list_elements kind='layouts' lists them), carrying the layout's placeholder skeleton so inheritance binds. position: 0-based final index, default end. Whole decks start via create_presentation (design pack). Saves atomically with two-slot backup; backup=False skips rotation. live='auto' edits the open PowerPoint copy when the file is locked by it (UNSAVED until live_save, com pack); 'force' targets the open session; 'off' refuses locked files.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | auto | |
| backup | No | ||
| layout | Yes | ||
| position | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only mark readOnlyHint=false, yet the description discloses atomic saving, two-slot backup rotation, the backup=False opt-out, and the three live= modes with their locked-file behavior and UNSAVED caveat. This is substantial behavioral context well beyond the structured annotation.
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 dense and runs several clauses together, but each clause earns its place and the core action is front-loaded. A bit more separation of parameter definitions would improve readability without adding length.
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 tool's complexity—layout selection, positional insertion, backup semantics, and live PowerPoint-lock handling—the description covers all essential behaviors and references the relevant discovery/list commands. With an output schema present, not detailing return values is acceptable.
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 0%, so the description must add parameter meaning, and it does: layout is disambiguated by name/index and how to list them, position is defined as 0-based final index with end default, backup is tied to rotation behavior, and live receives explicit auto/force/off semantics. Only file_path is left to obvious inference.
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?
Description opens with a specific verb and object ('Add a slide built from a layout') and distinguishes the operation from sibling slide tools like delete_slide, duplicate_slide, and reorder_slides. It also states the key mechanism (placeholder skeleton inheritance) so the agent understands what this insertion accomplishes beyond a generic add.
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 clearly positions this as the tool for adding a slide to an existing deck and points to list_elements kind='layouts' for discovering valid layout identifiers. It names create_presentation as the alternative for whole-deck creation, which is an explicit boundary, though it doesn't spell out exclusions for sibling slide-editing tools because those are implied by their names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_elementsARead-only
THE multiplex enumerator, one kind per call: slides, shapes, placeholders, tables, charts, images, diagrams (SmartArt frames with their editable nodes), notes, sections, layouts, masters. Returns a flat item list with ids and locations; slide-scoped kinds honor scope (None = all slides, a selector, or a list). count is always the true number found; a deck with more elements than fit the per-call output budget returns a "page" block naming how many were held back and the offset that continues, so nothing goes missing quietly. limit/offset page explicitly, and compact=True returns a fields header plus one array per item, about a third the size on large decks. Use it to find layout names for insert_slide and shape ids for editing. The packs (enable_tools) hold the tools that edit what this lists. For one slide in depth, use get_slide_info; for edit anchors, use get_presentation_view.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| limit | No | ||
| scope | No | ||
| offset | No | ||
| compact | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint annotation by explaining exact output behavior: count is always accurate, paging reports held-back items and continuation offsets, compact mode reduces payload size, and scope handling is defined. There is no contradiction with annotations, and the read-only nature is consistent with the enumerator framing.
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 dense but every sentence earns its place: element kinds, return shape, paging/count behavior, compact mode, concrete use cases, and sibling routing. It is front-loaded with the core purpose and does not waste words on restating the name or 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 six-parameter tool with no schema descriptions, the description covers nearly all invocation-relevant behavior and output semantics, and an output schema exists for the rest. It explains paging, scope, compact mode, and when to choose alternatives, making it complete enough for correct selection and invocation.
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?
With 0% schema description coverage, the description compensates strongly: kind enumerates valid values, scope explains None/selector/list, limit/offset are described as explicit paging, and compact is tied to a smaller response format. Only file_path is left to inference, and the exact selector/list syntax for scope is not specified, so it is not quite perfect.
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 names a precise verb and resource: it is 'THE multiplex enumerator' that returns flat item lists for many presentation element kinds. It immediately enumerates the supported kinds and contrasts itself with sibling tools, so an agent can tell it apart from get_slide_info and get_presentation_view without opening schemas.
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 is explicit: use it to find layout names for insert_slide and shape ids for editing, while get_slide_info and get_presentation_view are named as alternatives for other needs. It also tells the agent that editing tools live in the enable_tools packs, giving clear routing for follow-up actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_hyperlinksARead-only
Every hyperlink in scope (default all slides): external URLs and jump-to-slide links, on shapes and on text runs, with broken-target detection (missing rels, rels to deleted slides, empty URLs). The addresses reported are exactly what set_hyperlink and remove_hyperlink take. Media playback controls (insert_video/insert_audio, graphics pack) are not hyperlinks and are not listed. Read-only; the file is never modified.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint annotation by explaining the exact output contract (addresses accepted by set_hyperlink and remove_hyperlink), broken-target detection behavior, and explicit exclusions. It also states the file is never modified, reinforcing and clarifying the annotation without contradiction.
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 dense and front-loads the core purpose, with each sentence adding useful information such as output compatibility and exclusions. The final 'Read-only; the file is never modified' is slightly redundant with the readOnlyHint annotation but is brief and reinforces the safety guarantee.
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?
The description covers scope semantics, included hyperlink types, target detection, output compatibility, exclusions, and read-only behavior. Given that an output schema exists, the lack of explicit return-value details is acceptable; the tool is well specified for correct invocation.
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?
With 0% schema description coverage, the description partially compensates by explaining that 'scope' defaults to all slides, but it does not specify the expected format for scope values or clarify file_path beyond what the property name implies. The file_path parameter is self-evident, but the scope parameter remains underspecified for an agent that needs to pass a non-default value.
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 uses a specific verb ('list') and resource ('hyperlinks') and details exactly what is included: external URLs and jump-to-slide links on shapes and text runs, with broken-target detection. It also distinguishes itself from related concepts by explicitly excluding media playback controls, so an agent can tell it apart from sibling tools.
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 gives clear context for when to use the tool: to enumerate hyperlinks in scope, with a default of all slides, and notes that media playback controls should not be expected here. It also ties the output to set_hyperlink and remove_hyperlink, implying a coupled usage pattern, though it does not explicitly state when to prefer list_elements or get_text over this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_backupsA
The automatic backups under .ks4p-backups/ next to each mutated deck: prev (state before the last mutation) and anchor (session start). action='list': slots for one file_path or a whole directory, plus orphaned folders. action='restore': overwrite file_path from source ('prev', 'anchor', or a .pptx path); current content rotates into prev FIRST so the restore is undoable, and the payload is validated before the atomic replace. action='purge': scope 'orphans' or 'slots'; dry_run=True (default) reports only, dry_run=False deletes.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | ||
| action | Yes | ||
| source | No | ||
| dry_run | No | ||
| directory | No | ||
| file_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the single readOnlyHint=false annotation. It discloses that restore overwrites file_path, rotates current content into prev first to make restore undoable, validates the payload before atomic replacement, and that purge deletes only when dry_run=False. These are exactly the behavioral details an agent needs before invoking a destructive 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 dense and information-rich with no fluff, and it front-loads the backup-location concept before diving into actions. The single-paragraph semicolon-heavy structure is a little harder to parse than a bulleted breakdown, but every clause earns its place.
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 tool's complexity (6 parameters, destructive restore/purge modes), the description covers the critical details: undoability, validation, atomic replacement, dry-run defaults, and scoping. An output schema exists, so return values are not the description's job. It still leaves a few gaps around parameter interactions and edge cases, but it is fundamentally complete for safe invocation.
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?
With 0% schema description coverage, the description carries the full burden and largely succeeds: it explains action values ('list', 'restore', 'purge'), source options ('prev', 'anchor', '.pptx path'), scope values ('orphans', 'slots'), and dry_run's default behavior. Some combinations remain implicit, such as how file_path and directory interact for list, but the essential parameter semantics are covered.
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 identifies the tool's domain—managing automatic backups in .ks4p-backups/—and enumerates three concrete actions (list, restore, purge) with their effects. It is specific enough to understand what the tool does, though it never explicitly contrasts itself with the sibling create_snapshot, so it stops short of full differentiation.
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 gives clear usage context for each action: list for slots/orphans, restore for overwriting from a source, and purge for cleanup with dry-run semantics. However, it does not explicitly state when to prefer this tool over alternatives or when not to use it, leaving the selection guidance implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_hyperlinkA
Remove hyperlinks from a shape or text range. target: a shape id (removes the shape-level link AND every run-level link inside the shape) or {"shape_id": N, "paragraph": P, "start"?: S, "end"?: E} for the covered runs only. Orphaned link rels are dropped; media playback affordances (graphics pack av inserts) are left alone. Saves atomically with two-slot backup; backup=False skips rotation.
| Name | Required | Description | Default |
|---|---|---|---|
| slide | Yes | ||
| backup | No | ||
| target | Yes | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint annotation by disclosing important side effects: shape-level and run-level link removal, orphaned rel dropping, preservation of media playback affordances, atomic saves with two-slot backup, and the ability to skip backup rotation. This is rich, actionable behavioral detail.
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 compact and well-structured: purpose first, then target syntax, then side effects, then save behavior. Every clause adds necessary information without repetition or fluff.
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?
The description provides enough detail to call the tool correctly for most cases: target format, scope, backup behavior, and side effects are all covered. It is slightly incomplete regarding the format of 'slide' and 'file_path', but given the output schema exists and sibling tools share conventions, this is a minor 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?
With 0% schema description coverage, the description must compensate for the empty parameter schema. It does explain 'target' in detail and 'backup' behavior, but it leaves 'file_path' and 'slide' undocumented, relying on convention and sibling tool context.
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 the action 'Remove hyperlinks' and specifies the two target forms: a shape id or a text range. It distinguishes itself from sibling tools like set_hyperlink and list_hyperlinks by focusing on removal with precise scope details.
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 gives clear context on when to use this tool: whenever hyperlinks need to be removed from either a shape or a specific run range. It thoroughly explains the target selection semantics, though it doesn't explicitly mention alternatives or when not to use it relative to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorder_slidesA
Rearrange the whole deck in one call. order: every current 0-based slide index exactly once, in the desired new sequence (a permutation; partial lists refuse). Durable slide_ids and view anchors survive reordering, plain indices do not. For moving ONE slide, move_slide in the design pack is simpler: enable_tools(packs=['design']). Saves atomically with two-slot backup; backup=False skips rotation.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | ||
| backup | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond the readOnlyHint annotation: atomic save with two-slot backup, backup=False skipping rotation, durable slide_ids surviving reordering while plain indices do not, and validation rejecting partial lists. This gives the agent important expectations about side effects and persistence.
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 compact and front-loaded with the core action. Every sentence adds either parameter semantics, an alternative tool, or behavioral side effects. No filler or repetition exists.
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 tool with three parameters, mutation semantics, and validation constraints, the description covers all essential aspects: required permutation, index semantics, backup behavior, and when to use a different tool. An output schema exists, so not describing the return value is acceptable.
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?
With 0% schema description coverage, the description carries the full burden. It thoroughly explains the order parameter as a complete permutation of current 0-based indices, and explains backup semantics including the default rotation behavior. file_path is left to its name, but it is self-explanatory in context.
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 opens with a specific verb and resource: 'Rearrange the whole deck in one call.' It clearly communicates the scope (whole deck), the operation (reorder), and differentiates itself from one-slide moves by explicitly pointing to move_slide as the simpler tool for that case.
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 states when to use this tool (reordering the entire deck) and provides an explicit alternative: 'For moving ONE slide, move_slide in the design pack is simpler.' It also specifies that partial lists are refused, so the agent knows a full permutation is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_and_replaceA
Deck-wide find and replace, safe across fragmented runs (each replacement keeps the first run's formatting), SmartArt node text included. regex=True enables capture groups (refused live); matches overlapping slide-number/date fields are skipped. Bulk cell rewrites: set_table_cells (tables-charts pack). Saves atomically with two-slot backup. live='auto' edits the open PowerPoint copy of a locked file; 'force' targets the open session; 'off' refuses locked files. Batches: apply_edits.
| Name | Required | Description | Default |
|---|---|---|---|
| find | Yes | ||
| live | No | auto | |
| regex | No | ||
| scope | No | ||
| backup | No | ||
| replace | Yes | ||
| file_path | Yes | ||
| match_case | No | ||
| include_notes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint=false, it discloses atomic saves with two-slot backup, the formatting-preservation guarantee across fragmented runs, regex capture-group refusal in live mode, and skipped slide-number/date fields. These are concrete side-effect and edge-case behaviors an agent cannot infer from annotations.
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 text is about 60 words yet covers purpose, safety, regex/live modes, backup, and sibling routing. It is front-loaded with the core operation and every clause adds information.
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 write tool with output schema available, it covers most invocation-relevant behaviors: locking, backup, formatting, and exclusions. The main gap is the scope parameter, whose semantics are not clarified, which keeps it from being fully complete.
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?
It adds meaningful behavior for regex (capture groups, refused live) and live (auto/force/off), and mentions the backup behavior. However, with 0% schema description coverage, the description still leaves several parameters unexplained, notably scope, and only implies match_case/include_notes from their names.
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 first clause, 'Deck-wide find and replace', names a specific verb and resource with clear scope, and the rest adds distinguishing traits (fragmented-run safety, SmartArt inclusion, excluded fields). It also points to set_table_cells and apply_edits as different tools, which separates it from nearby siblings.
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 gives explicit routing: bulk cell rewrites go to set_table_cells, batched edits go to apply_edits. It also defines the live parameter's three modes (auto/force/off) with the exact locked-file behavior, which tells an agent when to select each setting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_hyperlinkA
Set a hyperlink on a shape or text range, replacing any link already there. target: a shape id, or {"shape_id": N, "paragraph": P, "start"?: S, "end"?: E} for a text range. Exactly one destination: url (external) or to_slide (a jump by index or {"slide_id": N}, the structure delete_slide knows how to neuter). tooltip sets hover text. Navigation buttons pair with insert_shape (graphics pack). Saves atomically with two-slot backup; backup=False skips rotation.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| slide | Yes | ||
| backup | No | ||
| target | Yes | ||
| tooltip | No | ||
| to_slide | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint=false annotation, the description discloses that the tool replaces existing links, requires exactly one destination, and saves atomically with two-slot backup rotation unless backup=False. This gives the agent a clear picture of the mutation and persistence behavior.
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 dense but organized, front-loading the main purpose before parameter details. The phrase about delete_slide knowing how to neuter the structure is awkward, but every clause otherwise earns its place.
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 7-parameter tool with no schema descriptions, this is nearly complete: target and destination forms are specified, backup semantics are explained, and an output schema exists. A short example or an explicit slide-parameter type would push it to fully complete.
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?
With 0% schema description coverage, the description compensates well by defining target formats, explaining the url/to_slide destination split and mutual exclusivity, and clarifying tooltip and backup behavior. It does not explicitly define the slide parameter, but the overall parameter guidance is strong.
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 action, setting a hyperlink on a shape or text range, and clearly notes that it replaces any existing link. This distinguishes it from remove_hyperlink and other sibling tools without ambiguity.
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 gives clear context: when to target shapes versus text ranges, when to use an external URL versus an internal slide destination, and how navigation buttons pair with insert_shape. It does not explicitly name alternatives or say when not to use the tool, but the provided context is sufficient for most decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_placeholder_textA
Fill a layout placeholder (styling inherits from the layout). placeholder: "title", "subtitle", "body"/"content" (each matches both body and obj placeholders; exact type wins), a raw ph type, or an idx int (idx/paragraphs= file-mode only). text: newline = paragraph, leading tabs = levels; or paragraphs=[{"text": str, "level": 0..8}]. Free text boxes: graphics pack. Saves atomically with two-slot backup; backup=False skips rotation. live='auto' edits the open PowerPoint copy of a locked file. Batches: apply_edits.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | auto | |
| text | No | ||
| slide | Yes | ||
| backup | No | ||
| file_path | Yes | ||
| paragraphs | No | ||
| placeholder | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint=false in annotations, the description carries the disclosure burden and meets it. It reveals atomic two-slot backup behavior and the backup=False opt-out, explains that live='auto' edits the open PowerPoint copy of a locked file, and notes that styling inherits from the layout rather than accepting direct formatting.
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 each clause adds value, but the density and the cryptic 'Free text boxes: graphics pack' aside make it harder to parse than the best examples. It is information-dense rather than ambiguous, but not quite as clean.
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 7-param, 0%-coverage tool, this description covers nearly all non-obvious parameters and behaviors, including output-free return assumptions (output schema exists). The main gaps are the undefined 'file-mode' concept and the unspecified semantics of the 'slide' parameter (index vs ID), which an agent would need to infer.
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 0%, so the description is the only source of parameter meaning. It thoroughly documents placeholder (named strings, raw types, index int with file-mode restriction), text (newline/tab parsing), paragraphs (object shape with level 0..8), backup, and live. Only file_path and slide are left self-evident.
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 verb 'Fill' plus object 'layout placeholder' states exactly what the tool does, and the parenthetical about inherited styling adds precision. The closing 'Batches: apply_edits' creates a clear boundary against the sibling batch tool, so an agent can select it from the sibling list.
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 explicitly names alternatives and conditions: 'Batches: apply_edits' tells the agent when to use a different tool, and 'Free text boxes: graphics pack' indicates a separate path for a different placeholder type. It also restricts idx/paragraphs to 'file-mode only', preventing misuse in other modes, though the 'graphics pack' reference is terse and not a listed sibling.
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.
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 24 tools
Most tools have clearly distinct jobs, especially around hyperlinks, slides, text search/replace, and backup management. A few read-related tools (get_presentation_view, get_slide_info, get_presentation_info, list_elements, get_text) could be confused at first glance, but their descriptions clearly separate scopes and output formats.
Tool names follow a consistent snake_case verb_noun pattern: get_*, set_*, list_*, insert_*, delete_*, duplicate_*, reorder_*, create_*, manage_*, enable_*, disable_*. There are no camelCase outliers or unpredictable verb styles.
24 tools sits at the high end of the borderline range and feels heavy for a core surface. The count is somewhat mitigated by general-purpose tools like list_elements and apply_edits, but the server also advertises many additional pack-gated tools, making the actual surface much larger when fully enabled.
The core covers deck reading, text manipulation, slide lifecycle operations, hyperlink management, and safety/backup workflows well. Advanced creation and export features live in optional packs rather than the base set, so there are minor gaps in the visible surface, but enable_tools makes those capabilities discoverable and avoid major dead ends.
Maintenance
Related MCP Connectors
Generate, edit, merge, translate and PDF-convert PowerPoint (.pptx) over MCP. 8 tools.
Presentations.AI MCP server — create designed slide decks from a topic, text, or document.
Deterministic, fully editable PowerPoint from typed slide intents. 200+ layouts, brand templates.
AI presentation and report generation: slides, diagrams, PPTX export, live preview MCP App.
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.1,852MIT
- 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 gradedqualityBmaintenanceMCP server for creating, reading, and editing PowerPoint (.pptx) presentations.1MIT
- FlicenseNot gradedqualityDmaintenanceEnables creating, editing, and reading PowerPoint presentations (PPTX) with security features like ZIP bomb protection, macro detection, and path traversal prevention.-