Skip to main content
Glama

CI Version License: MIT iWork MCP server Arabic safe Undo

Give your AI the keys to Apple iWork.

Create, edit, format, theme and export Numbers, Keynote and Pages files from Claude or any AI agent. Every write is backed up, checked and swapped in atomically, and any change can be undone with one call.

Install · What it can do · Safety · All 64 tools · For AI agents · Changelog

▶ Watch the film with sound (46s) · Read the launch story


Install

Your app

Do this

Claude desktop app, one click (Mac)

Download iwork-studio-<version>.mcpb from the latest release, double-click it, pick the folders it may use

Claude desktop app (Mac, from Terminal)

Paste in Terminal: curl -LsSf https://raw.githubusercontent.com/Arkanji/iwork-studio/main/install.sh | sh, then quit Claude (Cmd-Q) and reopen

Claude Code, as a plugin (tools + skill)

/plugin marketplace add Arkanji/iwork-studio, then /plugin install iwork-studio@iwork-studio

Claude Code, tools only

claude mcp add iwork-studio -- uvx --from git+https://github.com/Arkanji/iwork-studio iwork-studio-mcp

Cursor, VS Code, Codex, any MCP client

uvx --from git+https://github.com/Arkanji/iwork-studio iwork-studio-mcp config, then paste the printed JSON into the client's MCP settings. Also listed in the MCP Registry as io.github.Arkanji/iwork-studio

That's it. The installer sets up uv if needed, and uv brings its own Python.

  • Fence it (recommended): … | sh -s -- --roots ~/Documents ~/Desktop limits it to those folders. Other clients: set IWORK_STUDIO_ROOTS (:-separated).

  • Load less (optional): only work in Keynote? Set IWORK_STUDIO_TOOLSETS=keynote,design (any of files, numbers, keynote, pages, design; default all). Fewer tools keep the AI focused and its context small. The Claude Desktop extension has a Toolsets field; in Claude Code: claude mcp add iwork-studio -e IWORK_STUDIO_TOOLSETS=keynote,design -- uvx --from git+https://github.com/Arkanji/iwork-studio iwork-studio-mcp. Capabilities, read, find, undo and the kit list always load.

  • First run: macOS asks once whether Claude may control Keynote / Pages / Numbers. Click OK. (Missed it? System Settings → Privacy & Security → Automation.)

  • Check it: ask "what can iwork-studio do on this Mac?".

  • Remove: uvx --from git+https://github.com/Arkanji/iwork-studio iwork-studio-mcp uninstall

AI agent setting this up for someone? Pick the row for their app, run it, then call iwork_capabilities. Rules for using the tools are in AGENTS.md.

Related MCP server: docforge-mcp

Just ask, in English or Arabic

"Build a 6-slide pitch deck on programmable gift cards in the midnight kit, with speaker notes, and export it to PowerPoint."

"Turn sales.numbers into a board deck: chart the quarters, a table of the top regions, in our Resal kit."

"Take the fonts and colours from brand.key and save them as our Resal kit."

"Review pitch.key and fix anything that overflows or is too small to read."

"Make budget.numbers look professional with the banking kit — and show me a preview first."

"Turn sales.csv into a Numbers file, make the header bold on a teal fill, show column B as SAR with two decimals, and add a total row."

"In pitch.key, switch to the Gradient theme, make the title on slide 1 white at 60 pt, add a dissolve between every slide, and put logo.png on the last slide."

"Add a bar chart of revenue by quarter for 2025 and 2026 to slide 4."

"Duplicate slide 3, move the copy to the front and add presenter notes: ملاحظات المتحدث"

"Fill the Name and Date fields in offer-letter.pages, then export it as a password-protected PDF."

"In the invoice.pages table, set the quantity in B3 to 12 and make D9 the total of D2:D8."

"Find my Keynote decks from this week and export each one to PowerPoint."

"Undo the last change to budget.numbers."

What it can do

Numbers

Keynote

Pages

Read

Every sheet, table, cell, formula and format

Every slide's text, notes, layout, theme, styling and charts

Body text, placeholders and tables

Create

From data or CSV ⚡ · from a built-in template · from your own file

A designed deck from an outline, with chart and table slides (straight from a Numbers table) · from a built-in theme · from your own deck

From a built-in template · from your own file

Edit content

Cells ⚡ · formulas · recalculate · insert/delete rows and columns ⚡ · add tables and sheets ⚡ · sort

Find/replace across the deck ⚡ · slide titles and bullets · add, duplicate, delete, move, hide slides · presenter notes · images · charts · tables

Replace text everywhere · replace the body · fill placeholders · table cells (text, numbers, formulas)

Design

Design kits ⚡ · your brand kit ⚡ · fonts, colours, fill, alignment, wrap ⚡ · currency, %, dates, decimals ⚡ · borders ⚡ · widths and heights ⚡ · headers ⚡ · merges ⚡

Design kits · your brand kit · theme · slide layout · text font, size and colour · styled tables · transitions

—

Review

Design review of what Keynote draws: text off the slide or past its box, text Keynote had to shrink, overlaps, small text, crowded slides · any slide as an image

Export

PDF · Excel · CSV

PDF · PowerPoint · images · movie

PDF · Word · EPUB · text · RTF

Present

Start, stop, next, previous

⚡ = works anywhere, no app needed (pure Python). Everything else drives the real app on a Mac with a logged-in session, classic iWork or the Creator Studio apps.

Every file type: preview any change before it's made (dry_run), look up metadata, pull the preview thumbnail, find files with Spotlight, check that a word is visibly rendered, check the rendered font/size/colour, list backups and undo.

What it won't do

On purpose, so it never breaks a file:

  • Files with charts are refused by the tools that work without the app: their rewrite can silently break a chart's link to its data. The app-driven tools (Keynote slides, theming, transitions, images; Numbers formulas and sort) work on them and check every chart is still there.

  • Charts in Numbers and Pages can't be created: Apple doesn't make them scriptable. Keynote charts can be added. To chart sorted data without touching a Numbers chart, sort into a new table (numbers_sort with to_new_table) and build a Keynote chart slide from it.

  • Pages is limited to text and existing tables: replace, set body, placeholders and table cells. New tables can't be created (Pages 15 doesn't script it), and page-layout documents, like most letter templates, have no body text. There is no Pages file format parser anywhere, so it doesn't fake one.

  • Formulas and row shifts: in a table that has formulas, rows and columns can only be appended without the app. Inserting in the middle would leave references pointing at the wrong cells.

  • Not scriptable by Apple, so not offered: Numbers table styles, Keynote shape fill and text alignment, deleting a Keynote table, editing a theme's master slides. Page margins and page setup are planned.

Designed, not just edited

Six design kits turn a plain deck or table into something you'd present: a font pair (Latin + Arabic, all bundled with macOS — nothing to install), a restrained palette checked for WCAG contrast, and a type scale.

Kit

Feel

executive

Calm and corporate: slate neutrals, one blue accent

banking

Trust and weight: deep navy, restrained gold

classic

Formal reports and boards: serif headings, navy and amber

teal

Fresh and confident: deep teal

analytics

Data-forward: strong blue, amber highlights

midnight

Dark stage: near-black slides, white titles, mint accent

Build with one (keynote_build_deck(..., kit="midnight")), restyle anything (keynote_apply_design, numbers_apply_design), or bring your brand as colours and fonts — contrast is checked. Agents also get a design guide: one idea per slide, titles that state the takeaway, right-aligned numbers, restrained colour.

Your brand, once. Point iwork_extract_design_kit at a deck or table that already has your look: it reads the fonts (Latin and Arabic) and colours, and saves them as a named kit you can use anywhere a kit goes. Or save your colours and fonts directly with iwork_save_design_kit.

Numbers on slides. A slide in keynote_build_deck can carry a chart or a table, from data or straight from a Numbers table: the header row gives the columns, the first column the rows. Tables get the kit's header band, fonts, banding and right-aligned numbers, and every cell is read back.

It checks its own work. keynote_review_deck renders the deck through Keynote and compares every drawn line with its text box: text off the slide or running past its box is an error; text Keynote had to shrink to fit, overlapping boxes, text under 18 pt and crowded slides are warnings. keynote_slide_image hands a slide back as an image, so an agent can look before it says "done".

The safety model

An iWork app will happily say "saved" about a file it just broke. Nothing here trusts "saved".

backup → change a scratch copy → re-open it and compare → atomic swap
                       ↘ anything off: your file is untouched, the error says why
  • Backup first, versioned, next to the file in <file>.backups/.

  • Re-read and compared: exactly the requested change happened, and nothing else did. A cell edit checks every other cell. A row insert checks every cell at its new position. A slide op checks every other slide. A sort checks it's a pure reorder, and refuses up front when the table's formulas read other rows (Numbers' own sort would break them). On files with charts, every chart is counted before and after; on decks with tables, every table's cells are compared. An export is read back with a second, independent tool.

  • Atomic swap: the file is replaced in one step, so a crash can't leave half a file.

  • The app's "ok" is never trusted. App-driven writes are re-read from disk, and a write that "succeeded" but didn't land is rolled back.

  • Undo is one call: iwork_list_backups → iwork_restore_backup. The restore backs up the current version first, so undo can be undone too.

  • Preview first: every write takes dry_run=true. It runs the real change on a throwaway copy, with every check, and shows exactly what would change. Your file isn't touched.

  • New files never overwrite an existing one.

  • Refuse, don't mangle. The worst case is a clear "no", never a broken file.

Arabic & RTL

  • Arabic text round-trips exactly in all three apps, including presenter notes, Pages placeholders and Pages table cells.

  • Paragraph direction is checked in Pages. A replace that flips a right-to-left paragraph to left-to-right is rolled back. Pages writes new paragraphs left-to-right, even Arabic ones, and scripting can't change that, so those are flagged: set the direction in Pages (Format › Text).

  • Values are kept as typed: Arabic-Indic digits (١٢٣), "$1,234.56" and =… text stay text. Pass a real number when you want a number.

  • When checking a rendered PDF, assert one Arabic word. PDF text layers reorder multi-word RTL text.

All 64 tools

Writes are marked destructive and reads read-only, so clients can ask before writing. Every write that changes an existing file takes dry_run=true for a preview. Every tool has a title, every parameter a description, and every tool says when to use it instead of its siblings. Need fewer? Load only some toolsets (see Load less under Install).

Tool

What it does

iwork_capabilities

What this machine can do: apps, GUI session, which routes work

iwork_read

Any .numbers / .key / .pages → JSON

iwork_find

Find iWork files by kind and name (Spotlight on a Mac)

iwork_metadata · iwork_thumbnail

Template, app builds, format version, slide count · the stored preview image

iwork_create · iwork_create_from_template

New file from Apple's built-in templates · copy of your own file

iwork_list_templates

Built-in templates (Numbers, Pages) and themes (Keynote)

iwork_list_design_kits

Design kits: fonts, palettes, type scale — presets and your saved kits

iwork_extract_design_kit

A kit from your own deck or table: its fonts and colours; save it by name

iwork_save_design_kit · iwork_delete_design_kit

Keep your brand kit by name · remove one

iwork_export

PDF, Excel, CSV, Word, EPUB, text, RTF, PowerPoint, slide images, movie; optional password

iwork_verify_render · iwork_verify_format

Rendered PDF shows this text · with this font, size, colour, page size

iwork_list_backups · iwork_restore_backup

Undo

Tool

What it does

numbers_create · numbers_import_csv

New file from rows of data · from a CSV/TSV

numbers_edit_cell

Set one cell

numbers_set_formula

Put a formula in a cell; Numbers computes it

numbers_recalculate

Have Numbers recompute every formula after edits made without it

numbers_insert · numbers_delete

Rows or columns, anywhere

numbers_add_table

New table on a sheet, or on a new sheet

numbers_sort

Sort body rows by a column. A table whose formulas read other rows is refused, since Numbers' sort would break them; to_new_table puts a sorted copy of its values in a new table and leaves the original, its formulas and its charts alone

numbers_inspect_format

Widths, heights, headers, merges, and every cell's style, number format and borders

numbers_set_cell_style

Font, size, bold/italic/underline/strike, colours, fill, alignment, wrap

numbers_set_number_format

Number, currency (any ISO code), %, scientific, fraction, date, text; decimals, separators, negatives

numbers_set_borders

All / outline / inner / one side; width, colour, style

numbers_set_dimensions · numbers_set_headers · numbers_merge_cells

Column widths and row heights · header rows/columns · merges

Tool

What it does

keynote_build_deck

A new deck from an outline: titles, bullets, notes, images, chart and table slides, transition, design kit

keynote_review_deck

Design review of the rendered deck: off-slide and overflowing text, overlaps, small text, crowded slides

keynote_slide_image

One slide as an image, to look at

keynote_set_slide_text

Fill a slide's title and body

keynote_apply_design

Restyle every slide from a design kit

keynote_replace_text

Find/replace on every slide, formatting untouched

keynote_list_slides

Every slide's text, notes, hidden state and chart count

keynote_add_slide · keynote_duplicate_slide · keynote_delete_slide · keynote_move_slide · keynote_skip_slide

Slide operations

keynote_set_presenter_notes

Presenter notes

keynote_list_themes · keynote_inspect_style

Available themes · a deck's theme, layouts and text styling

keynote_set_theme · keynote_set_slide_layout · keynote_format_text

Theme · one slide's layout · one text item's font, size, colour

keynote_set_transition

Effect, duration, delay, auto-advance

keynote_add_image

Place an image on a slide

keynote_add_chart

Add a bar, line, area, pie or scatter chart from data

keynote_add_table

Add a table, styled from a design kit; every cell is read back

keynote_slideshow

Start, stop, next, previous

Tool

What it does

pages_preflight

Checks Pages can answer (run once first)

pages_replace_all · pages_set_body

Replace text everywhere · replace the whole body (resets its formatting)

pages_list_placeholders · pages_fill_placeholders

Template fields like Name and Date

pages_read_tables · pages_set_table_cells

Read every table · write text, numbers and formulas into an existing table

Keynote slide, theme, transition and image tools refuse a deck that's open in Keynote (they never close a window that may hold unsaved work). To hide them all: IWORK_STUDIO_DISABLE_SLIDE_OPS=1.

Prompts. Clients that show MCP prompts get four ready-made workflows: Pitch deck from an outline, Report deck from a Numbers table, Restyle with my brand and Make this table look designed. Each writes to the design rules, builds in one call, previews before restyling, and runs the design review before it calls the job done.

For AI agents

  • AGENTS.md: setup and usage rules for any agent (Codex, Cursor, Copilot, Gemini; Claude Code reads it via CLAUDE.md).

  • MCP instructions: the server sends its rules on connect, so the model has them even without this repo.

  • Skill: skill-pack/SKILL.md, auto-discovered by Claude Code in this repo, or bash skill-pack/install.sh for other skill-based agents. It includes CLI scripts with JSON output for agents without MCP.

  • llms.txt: a short machine-readable summary.

The contract: JSON in, JSON out. Errors are typed and say what to tell the user: ChartRefusalError, DocumentOpenError, PagesOutOfScopeError, AquaSessionError (no Mac GUI here) and so on. Don't retry a refused write with a trick.

Python

pip install iwork-studio      # Python 3.12
from iwork_studio import numbers_structure, numbers_format, numbers_io, keynote_io, keynote_slides, exporter, backups

from iwork_studio import keynote_deck, design, review

keynote_deck.build_deck("pitch.key", [{"title": "رسال", "body": "Programmable value"},
                                      {"title": "Why now", "body": ["Trust", "Access"]},
                                      {"title": "Riyadh leads growth", "chart": {"type": "bar", "from": "sales.numbers"}}],
                        kit="midnight")                                  # macOS + Keynote
review.review_deck("pitch.key")["findings"]                              # macOS + Keynote
design.extract_kit("brand.numbers", name="Resal", save=True)
numbers_structure.import_csv("sales.csv", "sales.numbers")
design.apply_to_numbers("sales.numbers", "banking")
numbers_format.set_cell_style("sales.numbers", "A1:D1", bold=True, fill_color="#1A7F79", font_color="#FFFFFF")
numbers_format.set_number_format("sales.numbers", "B2:B99", "currency", currency_code="SAR", decimal_places=2)
numbers_io.edit_cell("sales.numbers", "B2", 2500)
keynote_io.edit_text("pitch.key", "2025", "2026")
keynote_slides.set_presenter_notes("pitch.key", 1, "ملاحظات")          # macOS + Keynote
exporter.export("pitch.key", "pptx")                                     # macOS + Keynote
backups.restore_backup("sales.numbers", backups.list_backups("sales.numbers")[0]["name"])
  1. save in <path> is denied by the iWork sandbox. In-place save and export work. → sandbox-trap.md

  2. Keynote's slide title/body properties throw -1700. Use the text item's object text. → keynote-1700-defect.md

  3. Chart files corrupt quietly when the file-level libraries rewrite them, so those routes refuse them. When the app makes the edit it keeps its own charts linked, so app-driven routes allow them and count every chart before and after.

  4. Byte-equal saves don't exist in iWork's format. The real bar is semantic: it reopens, and the full model matches.

  5. First-run permission and template-chooser dialogs block every script call. A preflight turns the hang into one clear prompt. → tcc-preflight.md

  6. "Creator Studio" apps have different names. A hardcoded Application("Numbers") drives the wrong app; names are resolved per call. → apps.py

  7. stdout is the MCP wire. Import-time warnings from libraries would corrupt it, so they go to stderr.

  8. Keynote's JavaScript insert and move are broken; AppleScript make new slide and move slide … to before slide … work.

  9. Keynote master slides can't be reached from JavaScript (-1700); layouts go through AppleScript.

  10. numbers-parser doesn't save in-place style edits. Styles are registered first, then applied.

  11. numbers-parser stored 12 as 12.000000000000002. Decimals are now encoded exactly.

  12. numbers-parser doesn't update formula references when rows move, so mid-table inserts in formula tables are refused.

  13. Keynote colours are 0–65535 per channel, not 0–255 or 0–1.

  14. Pages page-layout documents have no body text (bodyText() is null), and most letter and flyer templates are page layout. Placeholders are filled and checked across every text box instead.

  15. Pages tables are invisible to JavaScript scripting but readable and writable from AppleScript; creating tables is broken in Pages 15, so only existing tables are offered.

  16. The Pages sandbox refuses AppleScript open for files outside it; JavaScript open is allowed, so documents are opened that way and then found by their exact path.

  17. numbers-parser can break formulas on re-save (an upstream report). Every no-app write compares every formula, so a broken one is caught and nothing changes.

  18. Numbers doesn't recalculate formulas when it opens a file changed without it: a total keeps its old result. Edits made without the app say so, and numbers_recalculate has Numbers recompute every formula.

  19. A rounding library used by numbers-parser wipes every warning filter in the process on each save. It's wrapped so it stays quiet without touching anyone else's settings.

  20. Don't keep the repo in iCloud Drive. Sync creates "main 2" copies inside .git.

  21. Keynote creates tables only one way: tell slide n to make new table works, while make new table at end of tables of slide n and deleting a table fail with -10000. A failed table add is undone by restoring the backup.

More, each with its status: jxa-traps.md (including traps borrowed from reichenbach/iwork_mcp).

pure Python file parsers (headless, deterministic)  →  .numbers everything, .key text
the real app via AppleScript / JXA                   →  .key slides & theming, .pages text & tables, formulas, sort, export, render checks
MCP server · CLI scripts · skill                     →  thin wrappers over the same library and the same safety model
src/iwork_studio/   numbers_io · numbers_format · numbers_structure · keynote_io · keynote_slides · keynote_theme
                    keynote_deck · keynote_table · design · review · preview · pages_io · app_ops · exporter
                    helpers · format_check · render_verify · pdf · backups · apps · mcp_server
mcpb/               Claude Desktop extension manifest (scripts/build_mcpb.sh builds the .mcpb)
skill-pack/         SKILL.md · CLI scripts · references (capabilities, traps, pins); also the Claude Code plugin
.claude-plugin/     plugin marketplace (one plugin: skill-pack/)
tests/              headless suite (CI) · `pytest -m aqua` = live suite for a Mac with iWork
install.sh          one-line setup for the Claude desktop app

Contributing

git clone https://github.com/Arkanji/iwork-studio.git && cd iwork-studio
uv run --extra test pytest -m "not aqua"      # headless suite, what CI runs
uv run --extra test pytest -m aqua            # live suite: a Mac with Numbers, Keynote and Pages
scripts/live.sh                               # the same, unattended: logs to ~/.iwork-studio/probes, quits the apps it opened

iWork changes between releases. If something breaks, check the capabilities and traps, run the live suite, and pin what changed. New write routes must follow the safety model and come with tests that prove the rollback. Clone outside iCloud-synced folders.

License

MIT, traps included. Take them.

Available Tools

64 tools
iwork_capabilitiesWhat this Mac can doA
Read-only

What this machine can do right now: routes, GUI session, installed apps, Keynote slide-op status. Call first when unsure. Call first when unsure what this machine can do: which apps exist, whether a GUI session is available, which toolsets are loaded. Not needed before plain reads of .numbers or .key files.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description's added content is mostly an enumeration of what gets reported, which the output schema already conveys; it discloses no auth needs, cost, or side effects beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening is front-loaded well, but 'Call first when unsure' appears twice in near-identical sentences and the following clause repeats the enumeration already given. The redundancy costs space without adding new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only probe with an output schema and full annotations, the definition covers when to call it and roughly what it reports. Return-value detail is legitimately left to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; it adds no misleading parameter guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete diagnostic scope: routes, GUI session, installed apps, and Keynote slide-op status, so an agent knows it reports machine capabilities rather than performing document work. It is distinguishable from siblings like iwork_metadata or iwork_verify_format, though the phrasing is loose and the enumerated items read as output contents rather than a crisp verb+resource statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger ('Call first when unsure what this machine can do') and an explicit exclusion ('Not needed before plain reads of .numbers or .key files'). An agent can decide whether to call it without opening any schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iwork_createNew file from a built-in templateA
Destructive

New .numbers / .key / .pages from Apple's built-in templates (Keynote: themes); names from iwork_list_templates. Omit template for Blank / Basic White. Refuses to overwrite. Needs macOS + the app. Use for a new, empty file from Apple's templates. Instead: iwork_create_from_template to copy the user's own file, numbers_create to make a Numbers file from data, keynote_build_deck for a finished deck from an outline.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesWhere to create the new file (.numbers, .key or .pages); it must not exist yet.
templateNoTemplate or theme name from iwork_list_templates; omit for Blank / Basic White.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (destructiveHint=true, idempotentHint=false), and the description adds real behavioral facts beyond them: it refuses to overwrite, requires macOS plus the installed app, and treats an omitted template as Blank/Basic White. It stops short of describing failure modes or the response, so a 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and keeps alternatives in a single compact trailing sentence. The telegraphic slash-separated phrasing is dense but nothing is wasted; the only slight cost is readability of the parenthetical Keynote-themes note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. Given that, the description covers prerequisites (macOS + app), overwrite behavior, the blank-template default, and routing to sibling tools — everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both path and template, including the must-not-exist constraint and the omit-for-blank rule. The description restates those points and adds only the pointer that names come from iwork_list_templates, which is marginal added value over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (create) plus resource (a new .numbers/.key/.pages file from Apple's built-in templates) and names the sibling tools it is not. An agent can distinguish it from iwork_create_from_template, numbers_create, and keynote_build_deck without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives when-to-use (a new, empty file from Apple's templates) and three named alternatives with their selecting conditions: iwork_create_from_template for the user's own file, numbers_create for a Numbers file from data, keynote_build_deck for a finished deck from an outline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iwork_create_from_templateNew file from your own fileA
Destructive

Start a new document from one of the user's own files (any .numbers / .key / .pages): copies it to path and checks it opens. Refuses to overwrite. Use when the user has their own template or past file to start from. For Apple's built-in templates use iwork_create.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesWhere to create the new file; it must not exist yet.
templateYesThe user's own .numbers, .key or .pages file to copy.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, non-idempotent, destructive operation, so the safety bar is partly covered. The description adds real behavioral context beyond them: it copies rather than moves, verifies the copy opens, and refuses to overwrite an existing path. It does not explain why destructiveHint is true given the no-overwrite guarantee, but there is no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler, with the core action and the no-overwrite guarantee front-loaded before the routing guidance. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter copy tool with full schema coverage, an output schema, and annotations covering the safety profile, the description supplies everything an agent needs: the action, the source-file constraint, the overwrite refusal, and the sibling it replaces.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented in the schema, including the 'must not exist yet' constraint on path. The description restates the template/path roles without adding format or syntax detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (start a new document by copying one of the user's own .numbers/.key/.pages files) and explicitly distinguishes itself from the sibling iwork_create, which handles Apple's built-in templates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use ('when the user has their own template or past file to start from') and an explicit alternative ('For Apple's built-in templates use iwork_create'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iwork_delete_design_kitDelete design kitA
Destructive

Delete a saved design kit (presets can't be deleted). Returns the kit's contents, so it can be saved again with iwork_save_design_kit. Use only when the user asks to remove a saved kit. To change a kit, save it again with overwrite=true instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the saved kit to delete (presets can't be deleted).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, it discloses the recovery behavior — the deleted kit's contents are returned so it can be re-saved — plus the constraint that presets are undeletable. That recovery detail is exactly the kind of context annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action and its constraint, then the recovery behavior, then when-to-use and the alternative — all in two compact sentences with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return shape needn't be spelled out, and the description still notes the key return property (kit contents for re-saving). Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'name' parameter is already documented with the same preset constraint. The description adds no format or syntax detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a saved design kit') and immediately scopes it with the 'presets can't be deleted' constraint, distinguishing it from iwork_save_design_kit, iwork_extract_design_kit, and iwork_list_design_kits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ('Use only when the user asks to remove a saved kit') and names the alternative path for the adjacent intent ('To change a kit, save it again with overwrite=true instead'). This is a complete routing instruction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iwork_exportExport (PDF, Excel, Word, PowerPoint…)A
Destructive

Export to another format. Numbers: pdf | xlsx | csv. Pages: pdf | docx | epub | txt | rtf. Keynote: pdf | pptx | images | movie. Optional password (+hint) for pdf/xlsx/docx/pptx, image_quality (good|better|best), image_format for slide images (jpeg|png|tiff). Default output sits next to the source. The export is checked against the source with a second tool and the source is verified unchanged. Needs macOS + the app. Use to hand the result over in another format (PDF, Excel, Word, PowerPoint, images). Never export to docx/pptx/xlsx to edit and convert back: edit the iWork file directly.

ParametersJSON Schema
NameRequiredDescriptionDefault
outNoOutput path (a folder for images); omit to write next to the source.
pathYesPath to the .numbers, .key or .pages file (absolute, or starting with ~).
formatYesNumbers: pdf | xlsx | csv. Pages: pdf | docx | epub | txt | rtf. Keynote: pdf | pptx | images | movie.
passwordNoOptional password for pdf, xlsx, docx or pptx.
overwriteNotrue = replace an existing output (the old one is kept as a backup or returned). Default false.
image_formatNoSlide images only: jpeg | png | tiff.
image_qualityNogood | better | best.
password_hintNoOptional hint shown with the password prompt.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds genuinely new context: the export is verified against the source by a second tool, the source is confirmed unchanged, and output defaults next to the source. It does not discuss failure modes (e.g., what happens if the format is unsupported for that app) or the backup behavior on overwrite, which the schema covers instead.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose and format matrix, then moves to optional settings and caveats in a logical order. Slightly repetitive — the per-app format list duplicates the schema's format description and the title — but every remaining sentence (verification, macOS requirement, the edit-in-place warning) earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is correctly omitted, and annotations plus the full param schema cover the mechanics. The description supplies the platform requirement and the post-export verification step, which are not in structured fields. It stops short of covering error/unsupported-format handling, leaving a small gap for a mutation tool with destructive semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all eight parameters are already documented in the schema, including out, password, overwrite, image_format, and image_quality. The description restates the format options and mentions password/hint/image settings, but adds no syntax, constraints, or defaults beyond the structured data. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (export) and resource, and enumerates the exact format matrix per app (Numbers: pdf|xlsx|csv, Pages: pdf|docx|epub|txt|rtf, Keynote: pdf|pptx|images|movie). This lets an agent distinguish it from conversion-adjacent siblings like iwork_verify_format or iwork_create without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('Use to hand the result over in another format') plus a clear when-not with an alternative: 'Never export to docx/pptx/xlsx to edit and convert back: edit the iWork file directly.' Also names the platform prerequisite (macOS + the app). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iwork_extract_design_kitExtract design kitA
Idempotent

Make a design kit from the user's own deck or table: heading and body fonts (Latin and Arabic) and the title, body and brand colours. .numbers reads the table's header and body styles (no app); .key reads every slide's title and body (needs macOS + Keynote). Parts the file doesn't show come from the nearest preset and are listed in notes. save=true with a name keeps it for reuse by name (contrast must pass). The file is never changed. Use when the user has a deck or table that already has their brand look. If they give colours and fonts directly use iwork_save_design_kit instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName for the kit, e.g. "Resal" (required with save=true).
pathYesA .key deck or .numbers table that already has the look to capture.
saveNotrue = save it under name for reuse; contrast must pass.
sheetNoFor .numbers: the sheet holding the styled table.
tableNoFor .numbers: the styled table.
overwriteNotrue = replace a saved kit with the same name.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: the source file is never changed, .numbers parses styles without launching the app while .key needs macOS plus Keynote, unsupported elements fall back to the nearest preset and are disclosed in notes, and saving requires a name and a passing contrast check. These are real operational constraints the agent cannot derive from readOnlyHint/destructiveHint/idempotentHint alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the outcome, then platform behaviour, then side effects, then the routing rule – a sensible order. It is dense and the mid-section packs several clauses into long sentences, which costs a little readability, but nearly every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter extraction tool with an output schema, the description covers platform requirements, side effects, fallback behaviour and naming/reuse semantics. Return values are covered by the output schema, so nothing material is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining the save/name coupling ('save=true with a name keeps it for reuse by name') and the contrast gate, which the schema only mentions in passing. It stops short of clarifying sheet/table selection beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (extract a design kit from a deck or table) and enumerates exactly what is captured: heading/body fonts in Latin and Arabic plus title, body and brand colours. It also explicitly names the sibling it is not (iwork_save_design_kit), so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use condition ('the user has a deck or table that already has their brand look') and an explicit alternative with the selecting condition ('if they give colours and fonts directly use iwork_save_design_kit instead'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iwork_findFind iWork filesA
Read-only

Find Numbers / Keynote / Pages files (newest first). kind: numbers | keynote | pages; name: part of the file name. Searches folder, else the allowed folders, else Documents/Desktop/Downloads. Uses Spotlight on macOS. Use when the user names a file loosely ("my sales deck") or you don't know its path; then read it with iwork_read. Not needed when you already have the path.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNonumbers | keynote | pages; omit for all three.
nameNoPart of the file name to match (case-insensitive).
limitNoMaximum results (1–500).
folderNoFolder to search; omit to search the allowed folders, else Documents, Desktop and Downloads.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, non-destructive, closed-world behavior, and the description adds real context: the folder fallback chain (folder -> allowed folders -> Documents/Desktop/Downloads) and that it uses Spotlight on macOS. That is useful beyond the annotations, though it doesn't cover things like performance or result truncation behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the tool's identity and ordering, then parameters, then usage guidance. Dense semicolon-packed phrasing but each clause carries information; only minor tightening is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-shape explanation isn't needed. The description covers search scope, ordering, filtering, and the follow-up workflow, which is everything an agent needs to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents kind, name, limit, and folder. The description restates kind and name semantics rather than adding new meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Find) and resource (Numbers/Keynote/Pages files) with the result ordering (newest first). It is clearly distinguishable from siblings like iwork_read, iwork_metadata, and the list/verify tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use it when the user names a file loosely or the path is unknown, names the follow-up tool (iwork_read), and gives a when-not condition ('Not needed when you already have the path'). This is a complete routing rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iwork_list_backupsList backupsA
Read-only

List the versioned backups (newest first) every write left for this file, plus the Keynote write manifest. Use when the user wants to undo or compare versions: it lists the backups, then iwork_restore_backup restores one. Not needed after a failed tool call: failed writes never change the file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .numbers, .key or .pages file (absolute, or starting with ~).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that: newest-first ordering, inclusion of the Keynote write manifest, and the behavioral fact that failed writes leave no backup. It stops short of discussing pagination or output shape, but the output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with what it lists and the ordering, followed by when to use and the key negative case. Every sentence earns its place with no repetition of structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained, the annotation set covers the safety profile, and the description supplies the ordering, manifest inclusion, and failure semantics an agent needs. Nothing required 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, and the schema already documents the accepted formats (.numbers, .key, .pages; absolute or ~-prefixed). The description adds no further semantics about the path argument, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List), resource (versioned backups), and scope (every write left for this file, newest first), plus the Keynote write manifest. It is clearly distinguishable from the sibling iwork_restore_backup, which it names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the trigger (user wants to undo or compare versions), routes to the alternative (iwork_restore_backup restores one), and gives an explicit when-not (not needed after a failed tool call, since failed writes never change the file). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iwork_list_design_kitsList design kitsA
Read-only

Design kits for good-looking decks and tables: font pairs (Latin + Arabic, bundled with macOS), contrast-checked palettes and a type scale. Lists the presets and the kits you saved (saved: true). Use with keynote_build_deck(kit=…), keynote_apply_design, numbers_apply_design. Custom kits: pass {"fonts": {...}, "colors": {...}}. Use before any styling to pick a kit, and to see the user's saved brand kits. Pass the name as kit= to keynote_build_deck, keynote_apply_design or numbers_apply_design.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds minor context (presets vs. user-saved kits flagged as saved: true, fonts bundled with macOS), but the line 'Custom kits: pass {"fonts": {...}, "colors": {...}}' is confusing on a zero-parameter tool and reads like it belongs to the consuming tools.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what a design kit is before the usage instructions, which is good structure. It is somewhat dense and repeats the 'pass the name as kit= to keynote_build_deck, keynote_apply_design or numbers_apply_design' instruction already implied earlier, costing a little efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description need not explain the return shape, and it correctly focuses on purpose, content and integration with the styling tools. The only gap is the ambiguous 'Custom kits' sentence, which muddies rather than completes the picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. The mention of passing a kit name as kit= refers to sibling tools' parameters, not this tool's, so it neither helps nor harms semantic coverage here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Lists) and resource (design kits / presets / saved kits) and describes the contents of a kit (font pairs, palettes, type scale). This clearly distinguishes it from sibling list tools like iwork_list_templates and keynote_list_themes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit sequencing guidance ('Use before any styling to pick a kit') and names the downstream consumers (keynote_build_deck(kit=…), keynote_apply_design, numbers_apply_design), so the agent knows why to call it. It does not, however, state any when-not condition or a true alternative to pick instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iwork_list_templatesList templatesA
Read-onlyIdempotent

Built-in templates for Numbers or Pages, or themes for Keynote (app: numbers | pages | keynote). Needs macOS + the app. Use before iwork_create to get valid template or theme names. Not needed for iwork_create_from_template, which copies the user's own file.

ParametersJSON Schema
NameRequiredDescriptionDefault
appYesnumbers | pages | keynote.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description still adds a real environmental prerequisite ('Needs macOS + the app') plus the downstream purpose of the returned names, which annotations cannot express. It stops short of describing output shape or ordering, but the output schema covers that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the noun scope before prerequisites and routing. Minor redundancy in re-listing the app values already present in the schema, but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only enumeration tool with full annotation coverage and an output schema, everything an agent needs is present: what it lists, the required environment, and exactly which create-path to pair it with.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter's enum-like values are documented in the schema itself. The description's '(app: numbers | pages | keynote)' merely restates that, adding no syntax or constraint beyond it. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States precisely what is enumerated: built-in templates for Numbers/Pages and themes for Keynote, with the app discriminator named inline. It distinguishes itself from the lookalike sibling keynote_list_themes and from iwork_apply_design/iwork_create_from_template by scoping to built-in assets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit sequencing ('Use before iwork_create to get valid template or theme names') and an explicit exclusion ('Not needed for iwork_create_from_template, which copies the user's own file'). Both when-to-use and when-not-to-use are stated, with the alternative named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iwork_metadataFile detailsA
Read-only

What a file says about itself, without the app: kind, size, modified, template it was made from, app builds that saved it, file format version, slide count (Keynote), embedded media count. Use for file facts (template, app build, slide count) without reading content. For the content itself use iwork_read.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .numbers, .key or .pages file (absolute, or starting with ~).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real value by scoping what is disclosed (template, app build, slide counts) and framing it as non-content inspection. It stops short of stating edge behavior for non-iWork files, but the annotation coverage lowers the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both earning their place, with the capability listed first and the routing rule second. The mid-sentence enumeration is dense but each item is a concrete, useful fact, so it stays readable rather than padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and the annotations cover safety. The description is complete enough to invoke correctly; only minor gaps remain around behavior on unsupported or corrupt files, which the sibling/annotation context partially absorbs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single well-documented 'path' parameter (absolute or ~ paths), so the schema carries the parameter burden. The description adds no additional path syntax, accepted extensions, or format nuances beyond what the schema already states — baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (file metadata) and enumerates exactly what it reports: kind, size, modified, template, app builds, format version, slide count, embedded media count. It also explicitly distinguishes itself from the sibling iwork_read, so an agent can separate the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use ('use for file facts... without reading content') and names the alternative with its triggering condition ('For the content itself use iwork_read'). Nothing is left to inference for the read-vs-metadata decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iwork_readRead an iWork fileA
Read-only

Read a .numbers, .key or .pages file into JSON (.pages needs the Pages app and a GUI session). Use to see a file's content before editing it. Not for formatting details: use numbers_inspect_format (Numbers) or keynote_inspect_style (Keynote). For file facts only, iwork_metadata is cheaper.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .numbers, .key or .pages file (absolute, or starting with ~).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered structurally. The description adds a genuine operational constraint not present in annotations: .pages requires the Pages app and a GUI session. It does not describe return shape, but an output schema exists to carry that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, each carrying distinct information (what it does, the GUI prerequisite, when to use it, and the two alternatives). No filler and the core purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with a full output schema and read-only annotations, everything an agent needs is present: purpose, prerequisite for .pages, and explicit routing to sibling tools for formatting or metadata needs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single 'path' parameter is already documented in the schema with absolute/~ syntax. The description adds no path-format guidance beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Read) and resource (.numbers/.key/.pages file) plus the output form (JSON). It explicitly distinguishes itself from sibling tools that also touch iWork files, so an agent can separate it from iwork_metadata and the inspect_format tools without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the positive case ('see a file's content before editing it'), the negative case ('Not for formatting details'), and names the exact alternatives (numbers_inspect_format, keynote_inspect_style) plus a cheaper option for a narrower need (iwork_metadata). Routing is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iwork_restore_backupUndo: restore a backupA
Destructive

Undo: atomically restore a backup (a name from iwork_list_backups). The current version is backed up first. Use to undo a change, with a backup name from iwork_list_backups. The current version is backed up first, so a restore can itself be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .numbers, .key or .pages file (absolute, or starting with ~).
backupYesBackup name from iwork_list_backups.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, so the write/irreversibility profile is covered. The description adds meaningful context beyond that: the operation is atomic and the current version is backed up first, so the action is itself reversible. This rollback guarantee is real behavioral value, though it is stated twice.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key constraint is front-loaded, but the sentence 'The current version is backed up first' is repeated verbatim, making the description longer than needed. Structure is fine; redundancy costs it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and annotations cover the safety profile. The description supplies the essential prerequisites and side effect, though it could have used the freed space for something other than restatement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (path, backup) are already documented in the schema, including the backup-name source. The description reinforces that backup comes from iwork_list_backups but adds no format or syntax detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('atomically restore a backup'), and pins down the argument source ('a name from iwork_list_backups'). An agent can identify the operation and its input origin without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ('Use to undo a change') and names the prerequisite tool that supplies backup names. It stops short of stating when not to use it or naming alternatives, but the routing context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iwork_save_design_kitSave design kitA
Idempotent

Save a design kit by name for reuse anywhere a kit is accepted. kit = {"fonts": {...}, "colors": {...}, "theme": "...", "background": "#RRGGBB"} (missing parts come from the "executive" preset, or from "base": ""), or a preset name to copy. Contrast is checked (4.5:1). Never replaces a saved kit unless overwrite=true; can't reuse a preset's name. Use when the user gives brand colours and fonts directly. To capture them from an existing file use iwork_extract_design_kit.

ParametersJSON Schema
NameRequiredDescriptionDefault
kitYes{"fonts": {...}, "colors": {...}, "theme": "...", "background": "#RRGGBB", "base": "<preset>"} or a preset name to copy.
nameYesName to save under, e.g. "Resal" (letters, digits, spaces, - or _; not a preset name).
overwriteNotrue = replace a saved kit with the same name.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover write safety (readOnlyHint=false, destructiveHint=false, idempotentHint=true), and the description adds substantial context beyond them: contrast is validated at 4.5:1, missing kit parts fall back to the 'executive' preset, preset names cannot be reused, and saved kits are never replaced unless overwrite=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and routes the alternative last, with each sentence carrying distinct information. It is dense and slightly technical, but nothing is redundant and all content earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. The description covers the kit payload, defaults, validation, overwrite behavior, naming constraint, and the sibling alternative, leaving no gap for an agent invoking this write tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: that omitted kit fields default from the 'executive' preset, that a bare preset name is accepted to copy, and the cross-parameter rule that the name cannot collide with a preset name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Save a design kit by name for reuse'), and explicitly distinguishes itself from the sibling iwork_extract_design_kit. An agent can tell exactly what this does without reading the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use condition ('Use when the user gives brand colours and fonts directly') and names the alternative with its selecting condition ('To capture them from an existing file use iwork_extract_design_kit'). This is textbook routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iwork_thumbnailPreview imageA
Read-only

Extract the preview image stored in the file (first page/slide) to a JPEG and return its path — a quick look without opening the app. Reflects the app's last save. Use for a quick look at the stored first-page preview with no app. It reflects the last save in the app, not your latest edits: to see a slide as it renders now, use keynote_slide_image.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .numbers, .key or .pages file (absolute, or starting with ~).
out_dirNoFolder for the extracted JPEG; omit for a temporary folder.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds a genuinely useful behavioral caveat beyond the annotations: the image reflects the app's last save, not the user's latest edits, which sets correct expectations about staleness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core facts are front-loaded, but the draft is redundant: 'a quick look without opening the app' is restated as 'a quick look ... with no app', and the last-save caveat is stated twice. Tightening to two sentences would lose nothing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is unnecessary. The description covers the key behavioral nuance (stored vs current render) and the sibling alternative, leaving no decisions an agent must make unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (path, out_dir) are already documented in the schema. The description adds no extra semantics about path formats or the temp-folder default, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Extract) and resource (the stored preview image / first page/slide), the output format (JPEG) and the return (its path). It clearly distinguishes itself from the sibling keynote_slide_image by contrasting a stored preview with a live render.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it ('for a quick look at the stored first-page preview with no app') and names the alternative plus the condition that selects it ('to see a slide as it renders now, use keynote_slide_image'). The routing decision is fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iwork_verify_formatCheck rendered formattingA
Read-onlyIdempotent

Independent check of formatting: export a PDF through the app and confirm text is drawn with the given font (name contains), size (pt), color (#RRGGBB), bold, and page size (pt). Needs macOS + the app. Use to prove how a piece of text is drawn (font, size, colour, page size). To check text is merely present use iwork_verify_render.

ParametersJSON Schema
NameRequiredDescriptionDefault
boldNoExpected bold (true) or not bold (false).
fontNoExpected font; matches when the drawn font name contains it, e.g. "Avenir".
pathYesPath to the .numbers, .key or .pages file (absolute, or starting with ~).
sizeNoExpected size in points (±0.6).
textYesText that must appear in the rendered PDF; for Arabic, one word (multi-word RTL text is reordered).
colorNoExpected text colour "#RRGGBB".
page_widthNoExpected page width in points.
page_heightNoExpected page height in points.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely useful non-annotation context: the tool performs an actual PDF export through the app, requires macOS and the application installed, and that font matching is substring-based. It stops short of noting runtime cost or failure modes for a launch-and-export operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences, front-loaded with the mechanism, then usage, then the sibling disambiguation. Dense but every sentence earns its place; minor parenthetical clutter ('name contains', unit lists) slightly reduces readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter read-only verification tool with an output schema, the description covers mechanism, environment prerequisite, matching semantics, and sibling routing. Return-value detail is unnecessary given the output schema exists, so nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter's meaning and units (points, #RRGGBB, name-contains). The description reinforces the same matching semantics but adds no new parameter detail beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (verify formatting) and explains the mechanism precisely: export a PDF through the app and confirm `text` is drawn with a given font, size, color, bold, and page size. It explicitly names the sibling it is not (iwork_verify_render), so an agent can route correctly 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('Use to prove how a piece of text is drawn') and an explicit alternative with its selection condition ('To check text is merely present use iwork_verify_render'). It also states the prerequisite environment ('Needs macOS + the app'), leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iwork_verify_renderCheck text is renderedA
Read-onlyIdempotent

Export the file to PDF through its app and assert assert_text is visibly rendered. For Arabic, use one word. Use after an important write to prove the text really shows when rendered. To check font, size or colour use iwork_verify_format; to check a deck's whole design use keynote_review_deck.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .numbers, .key or .pages file (absolute, or starting with ~).
assert_textYesText that must be visibly rendered; for Arabic, one word.
expected_pagesNoExpected page (or slide) count; omit to skip that check.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnly, idempotent, non-destructive), yet the description adds the actual mechanism — it exports through the app to PDF — and the Arabic single-word constraint. It does not disclose failure behavior or where the intermediate PDF goes, so it stops short of full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: action first, constraint second, disambiguation last. No filler, and the most critical information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the return contract need not be explained, and annotations cover safety. The description covers the mechanism and routing well; only minor gaps remain around failure semantics when the text is not rendered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the Arabic-specific guidance in the description merely repeats what the assert_text schema already says. No additional syntax, format, or expected_pages semantics are added, so this sits at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: export to PDF and assert `assert_text` is visibly rendered. It also explicitly distinguishes itself from iwork_verify_format (font/size/colour) and keynote_review_deck (whole-deck design).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('after an important write to prove the text really shows when rendered') plus two named alternatives with the conditions that select them. An agent can route correctly without opening another schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_add_chartKeynote: add chartA
Destructive

Add a chart to a slide from data. rows = series names, columns = category names, data = one list of numbers per row (rows × columns). type: bar | stacked_bar | horizontal_bar | stacked_horizontal_bar | line | area | stacked_area | pie | scatter (or *_3d). group_by: row | column. Text and other charts are verified untouched. dry_run=true previews the change on a copy without touching the file. Use for a chart on an existing slide. In a new deck, put the chart in keynote_build_deck's outline instead; for exact numbers use keynote_add_table.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesOne list of numbers per row name, each as long as columns.
pathYesPath to the .key deck (absolute, or starting with ~).
rowsYesRow names, e.g. ["2025", "2026"] (series when group_by="row").
typeNobar | stacked_bar | horizontal_bar | stacked_horizontal_bar | line | area | stacked_area | pie | scatter (or a *_3d variant).bar
slideYesSlide number, 1-based (keynote_list_slides lists them).
columnsYesColumn names, e.g. ["Q1", "Q2", "Q3"].
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.
group_byNorow (each row is a series) | column.row

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false and non-idempotency; the description adds meaningful context beyond them by promising that text and other charts are 'verified untouched' and by explaining that dry_run=true previews on a throwaway copy and returns what would change. It still doesn't cover permissions or what happens on a malformed data shape, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and data model, then usage routing and safety notes; every sentence carries information. It is somewhat dense and repeats the full type enum already present in the schema, which is the only real waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation tool with a full output schema, the description covers the data shape, chart-type options, grouping semantics, the dry_run safety valve, verification of untouched content, and sibling alternatives. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description genuinely adds semantics: it clarifies that rows are series when group_by='row' and that data holds one list of numbers per row name, which is the relationship the schema only states piecewise. It also restates the type enum, which is mild redundancy rather than new information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Add a chart to a slide from data') and immediately defines the data model (rows = series, columns = categories, data = rows × columns), which is the crux of the operation. It explicitly distinguishes itself from keynote_build_deck and keynote_add_table, so an agent can route without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use condition ('Use for a chart on an existing slide') plus two named alternatives with the conditions that select them: keynote_build_deck for new decks and keynote_add_table for exact numbers. Nothing about selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_add_imageKeynote: add imageA
Destructive

Place an image file (png, jpg, heic, pdf…) on a slide; optional x/y position and width in points. All text verified untouched. dry_run=true previews the change on a copy without touching the file. Use to place a picture or logo on a slide. For data, use keynote_add_chart or keynote_add_table rather than a picture of a chart.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoLeft edge in points (give with y); omit to let Keynote place it.
yNoTop edge in points from the slide's top-left corner (give with x).
pathYesPath to the .key deck (absolute, or starting with ~).
imageYesImage file to place (png, jpg, heic, pdf…).
slideYesSlide number, 1-based (keynote_list_slides lists them).
widthNoImage width in points; height keeps the aspect ratio.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds real context: text is verified untouched, and dry_run previews changes on a throwaway copy without touching the file. This meaningfully supplements the safety profile, though it doesn't describe post-placement state or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action and key constraints, and every sentence carries routing or safety value. Slightly redundant in restating placement ('Place an image file...' then 'Use to place a picture or logo'), but overall tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and 100% param coverage, the description needn't explain return values, and it covers the dry_run safety path and sibling routing. Complete enough to invoke correctly, missing only edge-case behavior for a destructive placement tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all seven parameters are already documented (x/y pairing, width keeping aspect ratio, slide 1-based). The description mentions x/y/width briefly but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Place an image file ... on a slide') and explicitly names the sibling tools it is not (keynote_add_chart, keynote_add_table). An agent can distinguish it from keynote_slide_image and other siblings at a glance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('place a picture or logo on a slide') and when-not-to-use with named alternatives ('For data, use keynote_add_chart or keynote_add_table rather than a picture of a chart'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_add_slideKeynote: add slideA
Destructive

Insert a slide after slide number after (0 = first, omit = end). Every other slide is verified unchanged. dry_run=true previews the change on a copy without touching the file. Use for a new blank slide in an existing deck. To copy a slide use keynote_duplicate_slide; for a whole new deck use keynote_build_deck.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .key deck (absolute, or starting with ~).
afterNoInsert after this slide number; 0 = make it the first slide; omit = at the end.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, non-idempotent and destructive, so the safety profile is covered. The description adds genuinely non-structured context: that every other slide is verified unchanged, and that dry_run operates on a throwaway copy and returns what would change. It stops short of describing failure modes or when the verification can fail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, each earning its place: placement rule first, verification behavior second, dry_run semantics third, alternatives last. No filler and front-loaded with the action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-slide insertion with an output schema present, the description covers placement, preview mode, non-target-slide integrity, and sibling routing. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents `path`, `after`, and `dry_run` including defaults. The description restates the `after` and `dry_run` semantics rather than adding syntax or edge-case detail beyond them, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Insert a slide') plus the placement semantics ('after slide number `after`, 0 = first, omit = end'). It also explicitly distinguishes itself from `keynote_duplicate_slide` and `keynote_build_deck`, so an agent can pick the right tool without reading other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit use case ('Use for a new blank slide in an existing deck') and routes to named alternatives for adjacent cases (copy a slide, whole new deck). The dry_run guidance adds a concrete when-to-use rule for risky edits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_add_tableKeynote: add tableA
Destructive

Add a table to a slide (1-based). rows = [["Region", "Q1"], ["Riyadh", 1200], …]: text, numbers, or null; text starting with "=" is a formula. kit (iwork_list_design_kits name or your own) styles it: header band, fonts (Arabic-aware), banding, numbers right-aligned. Optional x, y (points from top-left) and width. Every cell, font and colour is read back; other slides and tables are checked untouched. At most 50 rows × 15 columns. dry_run=true previews the change on a copy without touching the file. Needs macOS + Keynote. Use for a table on an existing slide. In a new deck, put it in keynote_build_deck's outline; to show a trend use keynote_add_chart.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoLeft edge in points (give with y); omit to let Keynote place it.
yNoTop edge in points (give with x).
kitNoA design kit: a name from iwork_list_design_kits (preset or saved, e.g. "executive", "Resal") or your own {"fonts": {...}, "colors": {"title": "#RRGGBB", ...}}. Contrast is checked.
pathYesPath to the .key deck (absolute, or starting with ~).
rowsYesThe table, header first: [["Region", "Q1"], ["Riyadh", 1200]]; text, numbers or null; "=…" is a formula.
slideYesSlide number, 1-based (keynote_list_slides lists them).
widthNoTable width in points; omit for Keynote's default.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.
header_rowsNoHow many rows at the top are headers (styled and kept on top).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructive=true, non-idempotent, closed-world; the description goes well beyond them by disclosing verification behavior ('every cell, font and colour is read back; other slides and tables are checked untouched'), hard limits (50 rows × 15 columns), platform requirements, and dry_run semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and the rows format, and nearly every clause carries load-bearing detail. It is dense and slightly run-on, packing constraints, styling, verification and routing into long sentences, but there is little pure filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation. For a destructive multi-parameter mutation, the description covers safety (dry_run), limits, prerequisites, styling, and alternative tools — everything an agent needs to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: rows cell typing (text/numbers/null, '=' prefix means formula), kit styling effects (header band, Arabic-aware fonts, banding, right-aligned numbers), and the pairing constraint on x/y.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Add a table to a slide') with the indexing convention made explicit (1-based). It routes clearly against siblings by naming keynote_add_chart and keynote_build_deck as the alternatives for different intentions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('Use for a table on an existing slide') and when-not ('In a new deck, put it in keynote_build_deck's outline; to show a trend use keynote_add_chart'). Prerequisites (macOS + Keynote) and the dry_run workflow are also spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_apply_designKeynote: apply designA
Destructive

Make a deck look designed: the kit's theme (optional), then every slide's title and body fonts (Arabic-aware), sizes from a type scale, and colours from a contrast-checked palette. kit = a name from iwork_list_design_kits or your own {"fonts": {...}, "colors": {...}}. Text is verified unchanged. dry_run=true previews the change on a copy without touching the file. Use to restyle a whole deck from a kit. For one text item use keynote_format_text. Preview with dry_run, then run keynote_review_deck.

ParametersJSON Schema
NameRequiredDescriptionDefault
kitNoA design kit: a name from iwork_list_design_kits (preset or saved, e.g. "executive", "Resal") or your own {"fonts": {...}, "colors": {"title": "#RRGGBB", ...}}. Contrast is checked.executive
pathYesPath to the .key deck (absolute, or starting with ~).
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.
set_themeNotrue = also switch to the kit's theme first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (destructiveHint=true, idempotentHint=false), and the description adds real context beyond them: text is verified unchanged, contrast is checked, and dry_run runs on a throwaway copy without touching the file. It does not contradict the destructive annotation (content is preserved, formatting is replaced). It stops short of noting reversibility or backup behaviour, keeping it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause and every sentence carries information (kit format, verification, dry_run semantics, routing). The paragraph is dense and multi-idea, which slightly hurts scannability, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-effect mutation tool with an output schema already present, the description covers what changes, how to preview safely, what is preserved, and which sibling to use instead. 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: kit accepts a preset name from iwork_list_design_kits or a user-supplied fonts/colors object, and dry_run is characterized as a copy-based preview to show the user. It adds value but doesn't fully re-document every parameter's constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and scope ('restyle a whole deck from a kit') and enumerates exactly what gets changed: theme, title/body fonts, sizes, colours. It explicitly distinguishes itself from the sibling keynote_format_text ('For one text item use...'), so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('restyle a whole deck'), a named alternative with its own trigger condition ('For one text item use keynote_format_text'), and a workflow prescription ('Preview with dry_run, then run keynote_review_deck'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_build_deckKeynote: build deckA
Destructive

Build a new Keynote deck from an outline. slides = [{"title": "…", "body": ["bullet", "bullet"], "layout": "Title & Bullets", "notes": "…", "image": "/path/pic.png"}, …]; the first slide defaults to a title layout, the rest to Title & Bullets. theme from keynote_list_themes; optional transition for every slide (e.g. dissolve). Every slide is read back and checked; on any mismatch the new file is removed. Never overwrites. kit = a design kit (iwork_list_design_kits) for a designed deck in one call. Chart slides: add "chart": {"type": "bar", "rows": ["2025", "2026"], "columns": ["Q1", "Q2"], "data": [[1, 2], [3, 4]]} or {"type": "line", "from": "/path/report.numbers", "columns": ["Q1", "Q2"]} (header row → column names, first column → row names); chart slides default to Title Only. Table slides: "table": {"rows": [["Region", "Q1"], ["Riyadh", 1200]]} or {"from": "/path/report.numbers", "columns": ["Q1"], "max_rows": 8}; with a kit the table is styled too. Needs macOS + Keynote. Use for a new deck from an outline, including chart and table slides; then run keynote_review_deck. To change an existing deck use the slide and text tools instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
kitNoA design kit: a name from iwork_list_design_kits (preset or saved, e.g. "executive", "Resal") or your own {"fonts": {...}, "colors": {"title": "#RRGGBB", ...}}. Contrast is checked.
pathYesWhere to create the new .key deck; it must not exist yet.
themeNoTheme name from keynote_list_themes; the kit's theme is used when omitted.
slidesYesThe outline: [{"title": "…", "body": ["bullet", …], "notes": "…", "layout": "…", "image": "/path.png", "chart": {…}, "table": {…}}, …]; see the tool description for chart and table.
transitionNoTransition for every slide, e.g. "dissolve".

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: discloses the verification loop ("every slide is read back and checked"), the rollback behavior ("on any mismatch the new file is removed"), the never-overwrite guarantee, and the macOS+Keynote runtime requirement. This is exactly the context needed for a destructiveHint=true tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and safety, then examples. It is dense and semicolon-heavy, running a long way before the crucial routing sentence at the end, but almost every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 explanation is unnecessary, and the description covers safety, prerequisites, layout defaults, chart/table formats, kit usage, and next steps. 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.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description supplies the nested chart and table object syntax that the flat schema (additionalProperties: true) leaves undocumented, plus the layout defaults and theme/transition sourcing. This is value the structured fields do not carry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Build a new Keynote deck from an outline") and explicitly distinguishes itself from the slide/text mutation siblings, which operate on existing decks. An agent can select it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the follow-up tool (keynote_review_deck), the design-kit sibling (iwork_list_design_kits), the theme source (keynote_list_themes), and the alternative set for editing existing decks. When-to-use and when-not-to-use are both explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_delete_slideKeynote: delete slideA
Destructive

Delete slide number slide (1-based). Recoverable with iwork_restore_backup. dry_run=true previews the change on a copy without touching the file. Use to remove a slide for good (the last slide can't be deleted). To keep it but hide it in the slideshow use keynote_skip_slide.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .key deck (absolute, or starting with ~).
slideYesSlide number, 1-based (keynote_list_slides lists them).
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, but the description adds context annotations cannot express: the deletion is recoverable via iwork_restore_backup, the last slide cannot be deleted, and dry_run works on a throwaway copy 'without touching the file'. These are the concrete consequences and limits an agent needs before mutating a deck.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each load-bearing: the action, the recovery path, the preview mode, and the alternative tool. Nothing is padded and the destructive action plus its guardrail are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering the safety profile, a full schema, and an output schema handling return values, the description only needs to cover constraints and alternatives, which it does completely (recoverability, last-slide limit, dry_run, skip_slide escape hatch).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so path, slide, and dry_run are already documented in structured form; the description largely restates what the schema says (1-based numbering, dry_run semantics). Baseline 3 is appropriate since the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

It names a specific verb and resource ('Delete slide number `slide`') and immediately scopes it with 1-based indexing. It is cleanly distinguished from sibling tools by naming keynote_skip_slide as the non-destructive alternative, so an agent never confuses removal with hiding.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use and when-not-to-use guidance: use it 'to remove a slide for good', use keynote_skip_slide 'to keep it but hide it', and use iwork_restore_backup to recover. It also routes to dry_run for risky edits, which is exactly the decision an agent must make before calling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_duplicate_slideKeynote: duplicate slideA
Destructive

Duplicate slide number slide (1-based); the copy lands right after it. dry_run=true previews the change on a copy without touching the file. Use to copy an existing slide (layout and content). For a blank slide use keynote_add_slide.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .key deck (absolute, or starting with ~).
slideYesSlide number, 1-based (keynote_list_slides lists them).
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=false, so the mutating/non-idempotent profile is covered. The description adds the useful copy-placement behavior, but says nothing about permissions, what happens on an out-of-range slide number, or reversibility/undo. Adequate but not rich beyond what the annotations carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the core effect and immediate placement, followed by the dry_run caveat and the sibling redirect. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering safety and an output schema covering return values, the description need only explain the operation, placement, and sibling routing — all present. Minor gap: no guidance on invalid slide numbers or the effect of duplicating a skipped/hidden slide.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so path, slide (1-based), and dry_run semantics are all documented in the schema already; the description only restates the 1-based numbering and the dry_run preview. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('duplicate slide number `slide`') plus the exact effect ('the copy lands right after it'), and explicitly names the sibling it is not for ('For a blank slide use keynote_add_slide'). An agent can distinguish it from keynote_add_slide and keynote_move_slide without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('Use to copy an existing slide (layout and content)') and a named alternative with its selecting condition ('For a blank slide use keynote_add_slide'). It also advises the dry_run-first workflow, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_format_textKeynote: format textA
Destructive

Font (PostScript name, e.g. "HelveticaNeue-Bold"), size (pt) and/or colour ("#RRGGBB") of one text item on a slide — pick it by item index (from keynote_inspect_style) or by a unique piece of its text (match). Alignment and shape fill are not scriptable. dry_run=true previews the change on a copy without touching the file. Use for one text item's font, size or colour. To restyle the whole deck consistently use keynote_apply_design.

ParametersJSON Schema
NameRequiredDescriptionDefault
fontNoPostScript font name, e.g. "HelveticaNeue-Bold".
itemNoText item index on the slide (from keynote_inspect_style); or use match.
pathYesPath to the .key deck (absolute, or starting with ~).
sizeNoFont size in points.
colorNoText colour "#RRGGBB".
matchNoA unique piece of the item's text, to pick it instead of item.
slideYesSlide number, 1-based (keynote_list_slides lists them).
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and non-idempotent, so the mutation risk is covered structurally. The description adds that dry_run previews on a copy without touching the file, but that behavior is already fully spelled out in the dry_run schema entry, so the added value beyond structured fields is modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and parameters in the first clause, then terse notes on limits, dry_run, and the sibling alternative. Efficient overall, though the parenthetical e.g. examples make it dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations carrying the safety profile, the description covers the necessary ground for a single-item mutation tool. It names both target-selection methods and the preview escape hatch, leaving no blocking gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds a little meaning by explaining the item-vs-match selection relationship, but otherwise paraphrases the schema's font/colour examples rather than adding new semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: it sets font/size/colour of one text item on a slide, and immediately scopes it to a single item. It clearly distinguishes itself from keynote_apply_design, which restyles the whole deck, so an agent can route between them 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use for one text item's font, size or colour' and routes whole-deck work to keynote_apply_design. It also names exclusions ('Alignment and shape fill are not scriptable') and gives the safe-preview instruction for dry_run, which is real when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_inspect_styleKeynote: inspect styleA
Read-onlyIdempotent

A deck's styling: current theme, available slide layouts, and per slide its layout plus each text item's text, font, size and colour. Read this before theming. Use before formatting: theme, layouts, and each text item's font, size and colour. For slide text and notes use keynote_list_slides.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .key deck (absolute, or starting with ~).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is fully covered by structured data. The description adds the inspection scope and the 'read before theming' sequencing cue, but because an output schema exists, the enumerated return contents largely duplicate what structured fields provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The middle clause repeats the same field list twice ('theme, layouts, and each text item's font, size and colour' vs. the earlier enumeration), which is wasted text. The front-loaded scope statement is good, but the redundancy costs a point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering safety and an output schema covering return values, the description only needs to establish purpose, timing, and sibling routing — all of which it does. Minor gap: no note on cost or scale for large decks.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'path' parameter is fully documented in the schema. The description says nothing about the path argument, so it adds no meaning beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource and scope: a deck's theme, available slide layouts, and per-slide layout plus each text item's text/font/size/colour. It distinguishes itself from keynote_list_slides explicitly, though the opening fragment ('A deck's styling: ...') is grammatically loose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear directive ('Read this before theming') and a routing rule to a sibling ('For slide text and notes use keynote_list_slides'). It stops short of stating when this tool should NOT be used or its prerequisites other than sequencing before theming/formatting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_list_slidesKeynote: list slidesA
Read-onlyIdempotent

Every slide with its text, presenter notes and whether it is hidden (via Keynote). Use slide numbers from here for slide operations. Use before slide operations to see slide numbers, text, notes and hidden state. For fonts and layouts use keynote_inspect_style.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .key deck (absolute, or starting with ~).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so safety is covered. The description adds genuine behavioral value: it discloses exactly what is returned (text, notes, hidden flag) and establishes the dependency that slide numbers for later operations must come from this call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what is returned, then usage, then sibling routing. The second and third sentences restate the same 'see slide numbers/text/notes' idea twice, a small redundancy that keeps it from a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no elaboration, and the description still covers purpose, ordering dependency, and sibling routing. Only minor redundancy and no note on filtering (e.g. hidden slides) leave a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'path' parameter is fully documented in the schema (absolute or ~-prefixed .key deck). The description adds nothing about the parameter, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('list slides') and enumerates the returned payload (text, presenter notes, hidden state). It also explicitly distinguishes itself from keynote_inspect_style, so an agent can route 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear when-to-use ('Use before slide operations to see slide numbers...') and names an alternative for a neighboring need (fonts/layouts via keynote_inspect_style). No explicit when-not or exclusion conditions, 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.

keynote_list_themesKeynote: list themesA
Read-onlyIdempotent

Themes available in Keynote on this Mac (names to pass to keynote_set_theme). Use before keynote_set_theme or keynote_build_deck to get valid theme names.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds genuinely useful context beyond that: the list is machine-local ('on this Mac') and its values are the exact strings needed downstream. It does not discuss caching or refresh behavior, but the read-only annotation makes that low-stakes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The scoping constraint and the downstream tool names are front-loaded so the agent can act without reading further.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape need not be described, and annotations carry the safety profile. The description supplies exactly the missing piece — why to call it and where its output goes — making the definition complete for a zero-parameter enumerator.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so the baseline is 4. The description still characterizes the semantic payload of the enumeration (theme names passable to set_theme), which goes slightly beyond a bare listing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list) and resource (themes available in Keynote on this Mac), and scopes it to local availability. An agent can distinguish it from sibling listers like iwork_list_templates and iwork_list_design_kits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the downstream consumers ('Use before keynote_set_theme or keynote_build_deck') and states the purpose of calling it ('to get valid theme names'). This is a clear when-to-use directive with the alternatives identified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_move_slideKeynote: move slideA
Destructive

Move slide number slide so it ends up at position to (both 1-based). dry_run=true previews the change on a copy without touching the file. Use to reorder slides. To copy a slide to a new position, duplicate it first with keynote_duplicate_slide.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesWhere it should end up, 1-based.
pathYesPath to the .key deck (absolute, or starting with ~).
slideYesThe slide to move, 1-based.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered structurally. The description adds genuinely new behavioral context: dry_run runs on a throwaway copy, executes every check, and returns what would change without touching the file. It does not state whether a committed move is reversible or what the returned change payload contains, leaving a small gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the positional contract before the dry_run preview and the sibling redirect. Every sentence carries distinct, non-redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no exposition, and all four parameters are documented. The description covers mutation risk via dry_run and the sibling routing; the only shortfall is not noting reversibility or ordering side effects when the destination index is out of range.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the description earns above that by restating both slide and to as 1-based positions and by explaining dry_run's semantics beyond the schema's own wording. It adds orientation that helps prevent off-by-one index errors.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with a specific verb+resource (move slide) and defines both positional arguments including their indexing base. It clearly separates itself from the copy-oriented sibling by naming keynote_duplicate_slide as the tool for copying rather than moving.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states 'Use to reorder slides' and then names the alternative tool (keynote_duplicate_slide) for the adjacent use case of copying to a new position. The dry_run guidance ('Use it before broad or risky edits and show the user') gives concrete invocation advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_replace_textKeynote: replace textA
Destructive

Find/replace text across every slide of a .key deck (literal unless regex=true). Formatting and structure are verified unchanged. dry_run=true previews the change on a copy without touching the file. Use to change the same text everywhere in a deck (names, dates, numbers). To rewrite one slide's title or body use keynote_set_slide_text.

ParametersJSON Schema
NameRequiredDescriptionDefault
findYesText to find (literal unless regex=true).
pathYesPath to the .key deck (absolute, or starting with ~).
regexNotrue = treat find as a regular expression.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.
replaceYesReplacement text.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so safety is covered. The description adds real value beyond them: formatting/structure are verified unchanged, and dry_run previews on a copy without touching the file, which tells the agent how to de-risk a destructive edit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the core behavior and constraint, then the dry-run affordance, then the sibling routing. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. The description covers scope, safety-relevant behavior (verification, dry_run), and sibling differentiation, which is everything an agent needs to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already documented, including regex and dry_run semantics. The description's 'literal unless regex=true' largely restates the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (find/replace) plus resource and scope ('across every slide of a .key deck'), and it explicitly names the sibling it is not for one-slide edits. An agent can distinguish it from keynote_set_slide_text without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the exact use case ('change the same text everywhere in a deck (names, dates, numbers)') and routes the alternative case explicitly to keynote_set_slide_text. Both when-to-use and the alternative are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_review_deckKeynote: review deckA
Read-onlyIdempotent

Design review of a deck as Keynote actually draws it: renders to PDF and reports, per slide, text drawn off the slide or past the bottom of its box (errors), text boxes drawn on top of each other, text under 18 pt, and slides that are too dense (warnings). Run it after building or restyling a deck, fix the errors, then look at a flagged slide with keynote_slide_image. The file isn't changed. Needs macOS + Keynote. Use after building or restyling a deck, before saying it's done; fix every error. To look at a flagged slide use keynote_slide_image; to check one word renders use iwork_verify_render.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .key deck (absolute, or starting with ~).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds the environment prerequisite (macOS + Keynote), the error-vs-warning severity split, and the fact that the deck is rendered to PDF rather than inspected abstractly. 'The file isn't changed' largely restates readOnlyHint, so it falls short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and information-dense, but it repeats itself: 'Run it after building or restyling a deck, fix the errors' and 'Use after building or restyling a deck, before saying it's done; fix every error' say the same thing, and keynote_slide_image is named twice. Roughly a third of the text is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so return values need no explanation, and the description covers purpose, environment needs, severity semantics, and workflow placement. Slightly thin on whether the review is limited to text/geometry (no mention of images, charts, or theme issues), but otherwise complete for a single-param read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (path) with 100% schema description coverage, so the schema fully documents accepted path forms (absolute or ~). The description adds nothing about the path argument itself, which is the baseline-3 case when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Design review of a deck as Keynote actually draws it') and enumerates exactly what it reports: off-slide/overflow text, overlapping boxes, small type, density. This is clearly distinguishable from siblings like keynote_slide_image (viewport rendering) and iwork_verify_render (single-word render check).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('after building or restyling a deck, before saying it's done'), the follow-up action ('fix every error'), and two named alternatives with the conditions that select them (keynote_slide_image for a flagged slide, iwork_verify_render for a word).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_set_presenter_notesKeynote: set presenter notesA
Destructive

Set the presenter notes of slide number slide (1-based). Arabic-safe. dry_run=true previews the change on a copy without touching the file. Use for speaker notes on an existing slide. For a new deck, put notes in keynote_build_deck's outline instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .key deck (absolute, or starting with ~).
notesYesThe presenter notes text (replaces existing notes).
slideYesSlide number, 1-based (keynote_list_slides lists them).
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is partly covered. The description adds genuinely new behavior: notes REPLACE existing content, dry_run operates on a throwaway copy and runs every check, and 'Arabic-safe' signals text-handling guarantees. It doesn't cover permissions or whether Keynote must be running, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the action and the slide-indexing convention. The routing sentence and dry_run sentence each earn their place. Minor cost: 'Arabic-safe' is unexplained jargon that costs a clause without conveying actionable meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description covers the key decision points (existing slide, dry_run preview, build_deck alternative). It omits any prerequisite about the deck being open/an accessible file, which for a mutation tool with openWorldHint=false would be useful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the dry_run parameter already documents the copy/preview behavior, so the schema is doing the heavy lifting. The description's '1-based' and dry_run sentences largely restate schema content; 'Arabic-safe' adds a small note about encoding but no syntax detail for `notes`.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Set the presenter notes of slide number `slide`') and explicitly distinguishes itself from siblings: 'Use for speaker notes on an existing slide. For a new deck, put notes in keynote_build_deck's outline instead.' An agent can route between this and keynote_set_slide_text / keynote_build_deck 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names when to use it (existing slide, speaker notes) and when to use an alternative (new deck → keynote_build_deck outline). It also gives conditional guidance on dry_run ('before broad or risky edits'), covering both the when and the how.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_set_slide_layoutKeynote: set slide layoutA
Destructive

Change one slide's layout (master), e.g. "Title & Bullets". Other slides are verified untouched. dry_run=true previews the change on a copy without touching the file. Use to change one slide's layout (names from keynote_inspect_style). Not for text styling: use keynote_format_text.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .key deck (absolute, or starting with ~).
slideYesSlide number, 1-based (keynote_list_slides lists them).
layoutYesLayout (master slide) name from keynote_inspect_style.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds blast-radius context beyond them: "Other slides are verified untouched" and dry_run runs "on a throwaway copy" without touching the file. It still does not say whether content that no longer fits the new layout is lost, or how to undo the change.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and short overall, but the third sentence restates the first sentence's purpose ("Use to change one slide's layout") instead of only adding the exclusion, which is mild redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and the description covers scope, verification, naming source, alternatives, and safe-preview behavior. The only gap is recovery/undo guidance for a destructive, non-idempotent operation, though dry_run mitigates much of that risk.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: dry_run's preview semantics and the source of valid layout names. The "Title & Bullets" example also illustrates the layout parameter's expected value shape.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope ("Change one slide's layout (master)") and gives a concrete example layout name. It also implicitly separates itself from deck-level and text-level tools by calling out the singular slide and the master concept.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says where layout names come from ("names from keynote_inspect_style") and names the exclusion with its alternative ("Not for text styling: use keynote_format_text"). It also gives a usage recommendation for dry_run ("Use it before broad or risky edits and show the user").

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_set_slide_textKeynote: set slide textA
Destructive

Fill a slide's title and/or body box (body may be a list of bullet lines). The title box is the top-most text box, the body the largest other one. Other slides and text boxes are verified untouched. dry_run=true previews the change on a copy without touching the file. Use to fill or rewrite one slide's title and body. To change the same words across the deck use keynote_replace_text; for speaker notes use keynote_set_presenter_notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoNew body: a string, or a list of bullets; omit to leave it.
pathYesPath to the .key deck (absolute, or starting with ~).
slideYesSlide number, 1-based (keynote_list_slides lists them).
titleNoNew title text; omit to leave it.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false; the description adds useful context beyond them: only title/body boxes change, other slides and text boxes are verified untouched, and dry_run previews on a copy. It stops short of describing return shape or error conditions, but it meaningfully supplements the destructive-write profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then scoping, then safety/dry_run, then alternatives. Every sentence carries distinct information with no filler or repetition of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-slide text edit with an output schema present, the description covers scope limits, mutation impact, dry_run semantics, and sibling alternatives. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all five parameters (baseline 3). The description adds genuine meaning beyond the schema by defining what 'title' and 'body' boxes physically are (top-most text box / largest other one) and noting body accepts bullet lists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('fill/rewrite one slide's title and body') and clarifies the target semantics (title = top-most text box, body = largest other one). It explicitly distinguishes itself from keynote_replace_text and keynote_set_presenter_notes, so the agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('fill or rewrite one slide') and names two alternatives with the conditions that select them (same words across deck -> keynote_replace_text; speaker notes -> keynote_set_presenter_notes). Also advises when to use dry_run for risky edits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_set_themeKeynote: set themeA
Destructive

Apply a different Keynote theme to the whole deck. Rolled back if any slide loses text. dry_run=true previews the change on a copy without touching the file. Use to switch the deck's theme only. For a full designed look (fonts, sizes, colours) use keynote_apply_design, which can set the theme too.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .key deck (absolute, or starting with ~).
themeYesTheme name from keynote_list_themes.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, so the safety profile is partly covered. The description adds real value beyond that: the atomic rollback guarantee ('Rolled back if any slide loses text') and the dry-run-copy semantics, which are genuine behavioral traits not present in the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences that are mostly front-loaded and mostly earn their place: the scope constraint, the rollback guarantee, the dry-run behavior, and the sibling routing. Slightly verbose since the dry_run sentence partly restates the schema, but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values needn't be explained, and annotations carry the safety profile. Combined with the rollback guarantee, dry-run semantics, and sibling routing, the description covers everything an agent needs to call this mutation correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three parameters, including dry_run. The description reinforces dry_run preview semantics but adds no format or syntax detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Apply a different Keynote theme to the whole deck') with clear scope (whole deck). It explicitly distinguishes itself from the sibling keynote_apply_design, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('to switch the deck's theme only') and a named alternative with the condition that selects it ('For a full designed look ... use keynote_apply_design, which can set the theme too'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_set_transitionKeynote: set transitionA
Destructive

Transition into a slide: effect such as dissolve, push, wipe, magic move, cube, flip, move in, reveal, "none"; duration/delay in seconds; automatic=true advances on its own. Other slides verified untouched. dry_run=true previews the change on a copy without touching the file. Use for one slide's transition. For the same transition on every slide of a new deck, pass transition= to keynote_build_deck.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .key deck (absolute, or starting with ~).
delayNoDelay before it starts, in seconds.
slideYesSlide number, 1-based (keynote_list_slides lists them).
effectYesTransition effect, e.g. "dissolve", "push", "magic move", or "none".
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.
durationNoDuration in seconds.
automaticNotrue = advance to the next slide on its own.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and readOnlyHint=false; the description adds real behavioral context on top: dry_run previews on a throwaway copy without touching the file, and other slides are verified untouched. It does not address idempotentHint=false (repeat-call behavior), so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and the effect list, then appends the dry_run and sibling-routing notes. Semicolon-heavy and slightly packed, but every clause carries information and nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. With annotations covering the safety profile and 100% schema coverage, plus the description's dry_run and sibling guidance, an agent has everything needed to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds meaning the schema lacks: it enumerates effect values (compensating for zero enums) and clarifies the units and semantics of duration/delay ('in seconds') and automatic ('advances on its own').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Transition into a slide'), enumerates the effect values, and scopes itself to a single slide. It explicitly separates itself from keynote_build_deck, which handles deck-wide transitions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use for one slide's transition' plus the explicit alternative — 'For the same transition on every slide of a new deck, pass transition= to keynote_build_deck' — gives a clear when-to-use and when-not-to-use routing rule. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_skip_slideKeynote: skip slideA
Destructive

Hide (skipped=true) or show a slide in the slideshow. dry_run=true previews the change on a copy without touching the file. Use to hide or show a slide in the slideshow without deleting it. To remove it use keynote_delete_slide.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .key deck (absolute, or starting with ~).
slideYesSlide number, 1-based (keynote_list_slides lists them).
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.
skippedNotrue = hide the slide in the slideshow; false = show it again.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and readOnly=false, and the description adds context those flags cannot: that the operation is non-destructive to content (hide vs delete), and that dry_run runs on a throwaway copy so the original file is untouched. It does not cover reversibility/re-hide idempotency or permission needs, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action, followed by the safety mechanism and the sibling routing. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, annotations carry the safety profile, and the description covers intent, alternative routing, and the preview workflow. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents path, slide, dry_run and skipped thoroughly. The description restates the skipped=true/false mapping and the dry_run preview behavior, adding emphasis but little new meaning beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (hide/show), the resource (slide in the slideshow), and the crucial semantic that the slide is not deleted. It explicitly distinguishes itself from keynote_delete_slide, so an agent can separate the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives when-to-use ('hide or show a slide without deleting it'), names the alternative for the other intent ('To remove it use keynote_delete_slide'), and explains the dry_run preview workflow with a recommendation on when to apply it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_slide_imageKeynote: slide imageA
Read-onlyIdempotent

One slide as an image (JPEG, width px wide), exported by Keynote, so you can look at the design yourself. Skipped slides aren't exported. The file isn't changed. Needs macOS + Keynote. Use to look at a slide's real rendering, e.g. one keynote_review_deck flagged. For a quick preview without Keynote use iwork_thumbnail (first slide, last saved state).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .key deck (absolute, or starting with ~).
slideYesSlide number, 1-based (keynote_list_slides lists them).
widthNoImage width in pixels (320–2560).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds context beyond the annotations: skipped slides aren't exported, the file is untouched, and it requires macOS + Keynote. The 'file isn't changed' partly restates readOnlyHint, but the environment requirement and skip behavior are genuine additions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and the output format, followed by constraints and the alternative. Every clause earns its place, though it is fairly dense across multiple clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With read-only/idempotent annotations, no output schema, and full param coverage, the description supplies the remaining essentials: skip behavior, environment requirement, and the routing to iwork_thumbnail. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both `path` and `slide` are already documented. The description only echoes `width` px wide, adding no syntax or format detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: renders one slide as a JPEG image at a given width. It distinguishes itself from the sibling iwork_thumbnail by explaining that this is the real Keynote rendering versus a quick preview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ('to look at a slide's real rendering, e.g. one keynote_review_deck flagged') and names the alternative with its tradeoff ('For a quick preview without Keynote use iwork_thumbnail'). The condition selecting each is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keynote_slideshowKeynote: slideshowA
Read-onlyIdempotent

Present: action = start (needs path; from_slide 1-based) | stop | next | previous. Doesn't change the file. Needs macOS + Keynote. Use to present the deck live; it doesn't change the file. To share it instead use iwork_export.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoThe deck to present (needed for start).
actionYesstart | stop | next | previous.
from_slideNoSlide to start from, 1-based.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/destructive/idempotent flags, and the description reinforces non-mutation but also adds genuinely new context: the macOS + Keynote runtime requirement. The 'doesn't change the file' claim is repeated twice, which is redundant rather than additive, but the platform prerequisite is valuable beyond structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action modes, which is good, but the sentence 'Doesn't change the file' appears twice, wasting a slot in a very short description. Without that duplication it would be tight, but the redundancy is a clear structural flaw.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. The description covers action semantics, the platform prerequisite, and an alternative tool for a related task, making it largely sufficient. Pagination/state-persistence across sequential next/previous calls is unaddressed but minor for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so path, action, and from_slide are already documented in the schema. The description's notes ('needs path', 'from_slide 1-based') essentially restate what the schema properties already say, adding no new syntax or format detail beyond the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb (Present) and enumerates the exact action modes (start | stop | next | previous), so an agent knows precisely what the tool does. It also explicitly differentiates itself from the sibling iwork_export by use case ('To share it instead use iwork_export').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the intended context ('Use to present the deck live') and names an alternative tool for a neighboring need (sharing via iwork_export). It stops short of explicit when-not-to-use conditions, e.g. what happens if Keynote isn't installed beyond 'Needs macOS + Keynote'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_add_tableNumbers: add tableA
Destructive

Add a table with data to an existing sheet (sheet, default the first) or to a new sheet (new_sheet). Every existing table is verified unchanged. dry_run=true previews the change on a copy without touching the file. Use for a new, separate table on a sheet or a new sheet. To grow an existing table use numbers_insert.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .numbers file (absolute, or starting with ~).
rowsYesThe data, header first: [["Region", "Revenue"], ["Riyadh", 1200]].
sheetNoExisting sheet to add it to; omit for the first sheet.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.
new_sheetNoName of a new sheet to create for the table instead.
table_nameYesName of the new table (must not exist on that sheet).
header_rowsNoHow many rows at the top are headers (styled and kept on top).
header_columnsNoHow many columns on the left are headers.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag it as destructive and non-idempotent; the description adds genuinely new behavior with 'Every existing table is verified unchanged' and the guarantee that dry_run operates on a copy without touching the file. It stops short of naming what gets destroyed or any permission requirements, but the added context is substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the core action, then verification semantics, then the routing rule. Every sentence carries distinct information with no repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and the annotations cover the safety profile. The description closes the remaining gaps: placement targets, dry_run behavior, and the sibling boundary. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description echoes the sheet-vs-new_sheet choice and dry_run semantics but adds no syntax, format or constraint detail beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Add a table with data') plus the two placement targets, and explicitly routes the agent to the sibling 'numbers_insert' for the adjacent operation. An agent can distinguish it from numbers_insert without reading either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('a new, separate table on a sheet or a new sheet') and when-not ('To grow an existing table use numbers_insert'), and also tells the agent when to reach for dry_run. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_apply_designNumbers: apply designA
Destructive

Style a whole table from a design kit: header band (fill, bold, contrast-checked text), body font and colour (Arabic cells get the Arabic font), alternate-row banding, number columns right-aligned. Values never change; every other table is verified untouched. No app needed. dry_run=true previews the change on a copy without touching the file. Use to make a whole table look designed in one call (header band, fonts, banding, aligned numbers). For a few cells use numbers_set_cell_style. Preview with dry_run.

ParametersJSON Schema
NameRequiredDescriptionDefault
kitNoA design kit: a name from iwork_list_design_kits (preset or saved, e.g. "executive", "Resal") or your own {"fonts": {...}, "colors": {"title": "#RRGGBB", ...}}. Contrast is checked.executive
pathYesPath to the .numbers file (absolute, or starting with ~).
sheetNoSheet name. Omit when the file has one sheet (iwork_read lists sheets and tables).
tableNoTable name on that sheet. Omit when the sheet has one table.
bandingNotrue = tint alternate body rows.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds substantive context the annotations cannot: values are never modified, sibling tables are verified untouched, no host app is required, and dry_run runs all checks on a throwaway copy. It does not explain reversibility or what happens to pre-existing formatting that conflicts with the kit, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core content is front-loaded, but the final two sentences restate earlier material: the parenthetical '(header band, fonts, banding, aligned numbers)' repeats the opening list, and 'Preview with dry_run' repeats the dry_run sentence verbatim in substance. Roughly a third of the text is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description covers the operation, content preservation, collateral-table safety, the sibling alternative, and the dry_run preview. It stops short of describing what happens when the kit conflicts with existing formatting or whether the operation is repeatable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (kit, path, sheet, table, banding, dry_run) is already documented in the schema, including the kit's shape and the sheet/table omission rule. The description only restates kit, banding and dry_run at a high level, adding no syntax or format detail beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (style) and resource (a whole table) and enumerates the exact transformations applied: header band, body font/colour, banding, right-aligned numbers. It explicitly contrasts scope with numbers_set_cell_style, so an agent can distinguish whole-table styling from cell-level styling without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when to use it ('to make a whole table look designed in one call') and names the alternative for the opposite case ('For a few cells use numbers_set_cell_style'), plus a preview pathway ('Preview with dry_run'). Both the selection condition and the exclusion are explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_createNumbers: createA
Destructive

Create a new .numbers file from data. sheets = [{"name": "Sales", "tables": [{"name": "Q1", "rows": [["Region", "Revenue"], ["Riyadh", 1200]], "header_rows": 1}]}]. Numbers stay numbers, text stays text exactly (Arabic included). Refuses to overwrite. No app needed. Use to make a new Numbers file when you have the rows. From a CSV file use numbers_import_csv; to add a table to an existing file use numbers_add_table.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesWhere to create the new .numbers file; it must not exist yet.
sheetsYesSheets with their tables: [{"name": "Sales", "tables": [{"name": "Q1", "rows": [["Region", "Revenue"], ["Riyadh", 1200]], "header_rows": 1}]}].

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, but the description adds non-obvious behavior: it refuses to overwrite, needs no app running, and preserves value types exactly (including Arabic text). The overwrite refusal is genuinely useful given the destructive annotation. It does not, however, say what happens on a path collision beyond refusal or whether partial writes can occur.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and constraints, and the routing sentence comes last where it belongs. The embedded JSON example consumes a large share of the text and duplicates the schema, which is mild redundancy rather than confusion.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. The description covers creation, type fidelity, overwrite refusal, and sibling routing, leaving only edge-case failure behavior unstated. Adequate for a two-parameter create tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema, and the description's inline JSON example largely repeats the schema's own sheets description. Baseline 3 is appropriate since the schema does the heavy lifting and the description adds no syntax or constraint beyond what is already there.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a new .numbers file from data') and immediately scopes it against siblings by naming numbers_import_csv and numbers_add_table as the tools for adjacent tasks. An agent can distinguish this from the other create paths without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ('when you have the rows') and routes two adjacent cases to alternatives: CSV input to numbers_import_csv, adding a table to an existing file to numbers_add_table. This is the when/when-not/alternatives pattern at full strength.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_deleteNumbers: deleteA
Destructive

Delete count rows or columns (what = rows | columns) starting at 1-based position at. Remaining cells are verified. Refused in tables with formulas or merged cells. Undo with iwork_restore_backup. dry_run=true previews the change on a copy without touching the file. Use to remove rows or columns. Not for clearing values (use numbers_edit_cell with null). Refused in tables with formulas or merges; undo with iwork_restore_backup.

ParametersJSON Schema
NameRequiredDescriptionDefault
atYes1-based position of the first one to delete.
pathYesPath to the .numbers file (absolute, or starting with ~).
whatYesrows | columns.
countNoHow many to delete.
sheetNoSheet name. Omit when the file has one sheet (iwork_read lists sheets and tables).
tableNoTable name on that sheet. Omit when the sheet has one table.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, readOnlyHint=false, and idempotentHint=false, and the description adds context the annotations cannot: remaining cells are verified, the operation is refused on tables with formulas or merged cells, undo is available via iwork_restore_backup, and dry_run acts on a throwaway copy. This is rich behavioral disclosure beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and mostly tight, but the tail is wasted: 'Refused in tables with formulas or merged cells. Undo with iwork_restore_backup.' is stated twice (once mid-sentence, once at the end). Duplicated content costs it a point or two.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description covers everything else an agent needs: scope, refusal conditions, reversibility, and dry-run workflow. Nothing material is missing for a destructive single-operation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all seven parameters are already documented; the description repeats at/what/count/dry_run rather than adding new semantics like edge-case behavior for out-of-range positions or count defaults. Baseline 3 is correct when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (delete) plus resource (rows/columns) and the exact scoping parameters (count, what, 1-based at). It clearly separates itself from the sibling numbers_edit_cell by naming it as the tool for clearing values instead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives when-not-to-use ('Not for clearing values (use numbers_edit_cell with null)') and when-to-verify ('dry_run=true previews the change... Use before broad or risky edits'). The alternative for clearing is named with the exact tool and parameter (null).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_edit_cellNumbers: edit cellA
Destructive

Set one cell (e.g. ref "B2") in a .numbers file. Backed up, verified, atomic; every other cell is checked unchanged. dry_run=true previews the change on a copy without touching the file. Use to set one value. For a formula use numbers_set_formula; to add whole rows use numbers_insert with values; for how a number displays use numbers_set_number_format.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesOne cell in A1 notation, e.g. "B2".
pathYesPath to the .numbers file (absolute, or starting with ~).
sheetNoSheet name. Omit when the file has one sheet (iwork_read lists sheets and tables).
tableNoTable name on that sheet. Omit when the sheet has one table.
valueYesNew value: a number stays a number, text stays text exactly (Arabic too); null clears. For a formula use numbers_set_formula.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=true and idempotentHint=false; the description goes well beyond by disclosing backup, verification, atomicity, and that every other cell is checked unchanged, plus dry_run previewing on a throwaway copy. This is exactly the mutation-safety context an agent needs and does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then safety guarantees, then routing alternatives in a tight sequence. No sentence is wasted and the ordering matches how an agent evaluates the call.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers mutation semantics, safety guarantees, dry-run preview, and sibling routing; an output schema exists so return values need no explanation. Nothing needed to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters including ref, value coercion, and dry_run semantics. The description largely echoes that content, so it meets the baseline without adding much beyond schema-provided meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Set one cell (e.g. ref "B2") in a .numbers file") and explicitly names the sibling tools it is not, so an agent can distinguish it from numbers_set_formula, numbers_insert, and numbers_set_number_format 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a direct usage rule ("Use to set one value") and three explicit when-to-use alternatives with the condition that selects each (formula, whole rows, display formatting). Routing is fully specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_import_csvNumbers: import csvA
Destructive

Turn a CSV/TSV into a new .numbers file (UTF-8, delimiter auto-detected). Plain numbers become numbers (numbers=false keeps everything as text); dates, "$1,234" and Arabic-Indic digits stay text exactly as written. Refuses to overwrite. Use when the data is in a CSV/TSV file. When you already have the rows use numbers_create.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesWhere to create the new .numbers file; it must not exist yet.
sheetNoName for the new sheet.Sheet 1
tableNoName for the new table.Table 1
numbersNotrue = plain numbers become numbers; false = keep every cell as text.
csv_pathYesThe CSV or TSV file to read (UTF-8).
delimiterNoColumn separator, e.g. "," or "\t"; omit to detect it.
header_rowsNoHow many rows at the top are headers (styled and kept on top).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by spelling out value-conversion semantics (plain numbers become numbers, dates / "$1,234" / Arabic-Indic digits stay text) and the no-overwrite guarantee. This is unusually rich for a write tool and useful for predicting results, though it doesn't cover failure modes such as malformed CSV handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four compact sentences, each carrying distinct information, with the core action and its safety constraint front-loaded before the routing advice. No filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, annotations supplied, and 100% parameter coverage, the description only needs to add conversion and overwrite context, which it does. The remaining gap is minor: no mention of what happens on an invalid or non-UTF-8 source file.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it clarifies the numbers=true/false contract and that the target path must not already exist ("Refuses to overwrite"). It does not explain header_rows or delimiter behavior beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ("Turn a CSV/TSV into a new .numbers file") and immediately scopes it with encoding and detection behavior. It also distinguishes itself from the sibling numbers_create by routing row-based input there, so an agent can pick between the two without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the trigger condition explicitly ("Use when the data is in a CSV/TSV file") and names the alternative with its own condition ("When you already have the rows use numbers_create"). The overwrite exclusion is also stated as a rule rather than left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_insertNumbers: insertA
Destructive

Insert rows or columns (what = rows | columns) before 1-based position at; omit at to append. Optional values: one list per new row (or column). Every existing cell is verified at its new position. In tables with formulas, only appending is allowed (shifting would break references). dry_run=true previews the change on a copy without touching the file. Use to add rows or columns to an existing table (optionally filled). For a separate table use numbers_add_table. In tables with formulas only appending works; do mid-table inserts in Numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo1-based position to insert before; omit to append at the end.
pathYesPath to the .numbers file (absolute, or starting with ~).
whatYesrows | columns.
countNoHow many to insert.
sheetNoSheet name. Omit when the file has one sheet (iwork_read lists sheets and tables).
tableNoTable name on that sheet. Omit when the sheet has one table.
valuesNoOptional contents: one list per new row (or column), e.g. [["Riyadh", 1200]].
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavioral context beyond the annotations: every existing cell is verified at its new position, formula-bearing tables permit only appending, and dry_run previews on a throwaway copy without touching the file. Annotations cover the destructive/non-idempotent profile, and the description does not contradict them; it stops short of stating permission/auth needs or what the returned check report contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and semantics, and most sentences earn their place. However, the formula-table restriction is stated twice ('only appending is allowed' and 'In tables with formulas only appending works'), which is redundant padding in an otherwise tight description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return details need not be described. Combined with the 100%-covered input schema, annotations, and sibling names, the description covers the mutation constraints, the preview mechanism, and the correct alternative tool – 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description still adds value: it glosses `what` (rows | columns), `at` as 1-based with omit-to-append, and gives the nested `values` shape (one list per new row/column, e.g. [["Riyadh", 1200]]). It leaves `count` and the empty-argument cases to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Insert rows or columns ... before 1-based position `at`') with clear scope and an explicit routing contrast to numbers_add_table. An agent can distinguish it from siblings like numbers_add_table and numbers_create 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names when to use it ('add rows or columns to an existing table, optionally filled') and when not to ('For a separate table use numbers_add_table'), plus the formula-table fallback ('do mid-table inserts in Numbers'). Alternatives and the excluding condition are both stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_inspect_formatNumbers: inspect formatA
Read-only

Current formatting of a Numbers table: column widths, row heights, header rows/cols, merges, and per-cell font/colour/fill/alignment, number format (shown_as) and borders. Read this before formatting. Use before formatting to see current styles, number formats, sizes, headers and merges. For values use iwork_read.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .numbers file (absolute, or starting with ~).
sheetNoSheet name. Omit when the file has one sheet (iwork_read lists sheets and tables).
tableNoTable name on that sheet. Omit when the sheet has one table.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so safety is covered by structured data. The description adds genuine context beyond that: it is a prerequisite read step and it enumerates the specific style attributes returned, which helps the agent understand the output scope. No output format detail is given, but an output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the returned attribute list, which is efficient. The 'Read this before formatting' and 'Use before formatting to see current styles...' sentences restate the same instruction, a mild redundancy that costs a point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained; within that constraint the description covers what the tool returns, when to call it, and where to go for values instead. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already documents path, sheet, and table. The description adds no additional parameter-level meaning (no format, defaults, or selection semantics beyond what the schema states), so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (inspect) and resource (formatting of a Numbers table), then enumerates exactly what is returned: column widths, row heights, headers, merges, per-cell font/colour/fill/alignment, number format, borders. This clearly distinguishes it from the numbers_set_* sibling writers and from iwork_read.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to read this before formatting, describes the condition that selects it (need current styles/sizes/headers/merges), and names an alternative for a different need ('For values use iwork_read'). When-to-use and sibling routing are both present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_merge_cellsNumbers: merge cellsA
Destructive

Merge a rectangular range ("A1:C1"). Refused if any cell other than the top-left holds data (it would be hidden) or the range crosses the header edge. dry_run=true previews the change on a copy without touching the file. Use to merge a range, e.g. a title across columns. Refused if it would hide values; avoid merging inside data you will sort.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .numbers file (absolute, or starting with ~).
cellsYesThe range to merge, e.g. "A1:C1". Refused if it would hide values.
sheetNoSheet name. Omit when the file has one sheet (iwork_read lists sheets and tables).
tableNoTable name on that sheet. Omit when the sheet has one table.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and non-idempotent, and the description adds genuinely new behavioral detail: the top-left-only data refusal rule, the header-edge refusal, and that dry_run operates on a copy without touching the file. It does not, however, describe reversibility or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core operation, but the refusal condition is stated twice ("Refused if any cell other than the top-left holds data" and "Refused if it would hide values") and "Use to merge a range" restates the opening. Several sentences do not fully earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and annotations carry the safety profile. The description covers the destructive-refusal rules and the dry_run workflow, leaving only minor gaps such as what happens to the merged range's formatting.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description slightly exceeds the schema by explaining the underlying rule for the cells parameter (only the top-left may hold data, otherwise refused because values would be hidden) and reinforcing dry_run's copy-based preview semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource (merge a rectangular range) with a concrete example ("A1:C1"), which is enough to distinguish it from siblings like numbers_set_borders or numbers_set_headers. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when to use it (merging a title across columns) and two explicit avoid/reject conditions (hiding values, crossing the header edge, merging inside sortable data). There is no named alternative tool, but no obvious sibling competes for this job, so the guidance is clear context without exclusions of a real alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_recalculateNumbers: recalculateA
Destructive

Make Numbers recompute every formula from the current values. Numbers keeps showing a formula's old result after edits made without it (numbers_edit_cell, numbers_insert…), so run this after those when the file has formulas — their result says so (formulas_need_recalc). Formulas and inputs are verified unchanged. Needs macOS + Numbers, file closed. dry_run=true previews the change on a copy without touching the file. Use only after a no-app edit returned formulas_need_recalc, so totals are current. Not needed after numbers_set_formula, which recalculates itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .numbers file (absolute, or starting with ~).
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only flag it as non-read-only and destructive; the description adds that outputs are verified unchanged, that it requires macOS + Numbers with the file closed, and that dry_run operates on a throwaway copy. That is meaningful context beyond the annotation block.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and tightly packed with prerequisite and routing information, though the parenthetical sibling list and the dry_run sentence add length that slightly dilutes the opening.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained. The description nonetheless covers the trigger signal, the platform/file-state prerequisites, and the dry-run escape hatch, leaving nothing an agent needs missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents both path and dry_run, including the throwaway-copy behavior. The description largely restates dry_run's contract rather than adding syntax, defaults, or edge cases the schema lacks, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action and resource: recompute every formula in a Numbers file from current values. It immediately distinguishes itself from write-oriented siblings by naming numbers_edit_cell and numbers_insert as the operations that leave stale results behind.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit trigger condition (run only after a no-app edit returned formulas_need_recalc), an explicit exclusion (not needed after numbers_set_formula, which recalculates itself), and a preview path via dry_run. An agent can decide whether to call this without guessing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_set_bordersNumbers: set bordersA
Destructive

Cell borders on a range: sides = all | outline | inner | top | right | bottom | left; width in points; color "#RRGGBB"; style = solid | dashes | dots | none. dry_run=true previews the change on a copy without touching the file. Use for lines around or inside a range. For fills and fonts use numbers_set_cell_style.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .numbers file (absolute, or starting with ~).
cellsYesA cell or range in A1 notation, e.g. "B2" or "A1:D1".
colorNoLine colour "#RRGGBB".#000000
sheetNoSheet name. Omit when the file has one sheet (iwork_read lists sheets and tables).
sidesNoall | outline | inner | top | right | bottom | left.all
styleNosolid | dashes | dots | none (none removes the border).solid
tableNoTable name on that sheet. Omit when the sheet has one table.
widthNoLine width in points.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=false, so the safety profile is covered. The description adds real value beyond them by explaining that dry_run previews on a throwaway copy and returns what would change without touching the file — a meaningful behavioral contract for a mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Terse and front-loaded: option values, then the dry_run safety note, then the routing hint. Dense but every clause carries information; the semicolon list is compact rather than rambling.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering the mutation profile, the description supplies the remaining pieces an agent needs: option vocabularies, dry-run preview semantics, and sibling routing. A brief note on permissions or reversibility would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented, including the sides/style enumerations which the description merely restates. The description adds no syntax, constraint, or default behavior beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource ('cell borders on a range') and immediately scopes the alternatives that distinguish it from siblings (fills/fonts → numbers_set_cell_style). An agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the when ('use for lines around or inside a range') plus a named alternative for adjacent tasks, and explains when to use dry_run ('before broad or risky edits, show the user'). No explicit when-not condition is stated, so it stops short of the top mark.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_set_cell_styleNumbers: set cell styleA
Destructive

Style a range ("A1:D1"): font_name, font_size, bold, italic, underline, strikethrough, font_color / fill_color as "#RRGGBB", align (left|center|right|justify|auto), valign (top|middle|bottom), wrap. Only the attributes you pass change; every other cell is verified untouched. dry_run=true previews the change on a copy without touching the file. Use for fonts, colours, fill or alignment on a few cells. For a whole table that should look designed use numbers_apply_design; for how numbers display use numbers_set_number_format.

ParametersJSON Schema
NameRequiredDescriptionDefault
boldNotrue/false; omit to leave as is.
pathYesPath to the .numbers file (absolute, or starting with ~).
wrapNotrue = wrap text in the cell.
alignNoHorizontal: left | center | right | justify | auto.
cellsYesA cell or range in A1 notation, e.g. "B2" or "A1:D1".
sheetNoSheet name. Omit when the file has one sheet (iwork_read lists sheets and tables).
tableNoTable name on that sheet. Omit when the sheet has one table.
italicNotrue/false; omit to leave as is.
valignNoVertical: top | middle | bottom.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.
font_nameNoFont family, e.g. "Helvetica Neue" or "Geeza Pro".
font_sizeNoFont size in points.
underlineNotrue/false; omit to leave as is.
fill_colorNoCell fill "#RRGGBB".
font_colorNoText colour "#RRGGBB".
strikethroughNotrue/false; omit to leave as is.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by disclosing partial-update semantics ("Only the attributes you pass change; every other cell is verified untouched") and the copy-based preview behavior of dry_run. It does not explain reversibility or that the write to the target file is destructive, but the annotation already flags destructiveHint=true, so the remaining gap is minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the range example and the mutation semantics, then the routing guidance, so the most decision-relevant content comes first. The mid-sentence attribute list is dense and partially redundant with the schema, but each clause carries real information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter mutation tool it covers the essentials an agent needs: scope, partial-application behavior, a safe preview mode, and routing to the two nearest siblings. Return values are handled by the output schema and safety by annotations, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every one of the 16 parameters (including units like points and #RRGGBB colours) is already documented in the schema. The description's inline enumeration of attributes and allowed values largely repeats that structured data rather than adding new semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (style a range in a Numbers file) plus the exact attribute surface, and explicitly distinguishes itself from numbers_apply_design and numbers_set_number_format. An agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit scope rule ("a few cells") and names two alternatives with the condition that selects each: numbers_apply_design for a whole designed table, numbers_set_number_format for display formatting. It also advises dry_run pre-flight before risky edits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_set_dimensionsNumbers: set dimensionsA
Destructive

Set column widths and/or row heights in points, e.g. columns={"A": 160, "C": 90}, rows={"1": 32} (rows are 1-based). Nothing else changes. dry_run=true previews the change on a copy without touching the file. Use for column widths and row heights. To change which rows count as headers use numbers_set_headers.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .numbers file (absolute, or starting with ~).
rowsNoRow heights in points by 1-based row number, e.g. {"1": 32}.
sheetNoSheet name. Omit when the file has one sheet (iwork_read lists sheets and tables).
tableNoTable name on that sheet. Omit when the sheet has one table.
columnsNoColumn widths in points by letter, e.g. {"A": 160, "C": 90}.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation profile is covered. The description adds real behavioral context beyond that: 'Nothing else changes' bounds the blast radius, and it explains dry_run previews on a copy without touching the file. It omits permission/auth requirements, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loads the core action with examples before the dry_run and sibling routing. The sentence 'Use for column widths and row heights' partially echoes the opening clause, a minor redundancy, but nothing is bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the dry_run behavior is described. The safety profile is carried by annotations and the effect scope by 'Nothing else changes.' Nearly complete for a 6-param mutation tool, with only permission context missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters, including 1-based rows and units. The description restates the column/row examples rather than adding syntax or constraints the schema lacks, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (set column widths and/or row heights), defines the unit (points), and gives concrete examples. It also distinguishes itself from the sibling numbers_set_headers by naming that tool, so an agent can route correctly without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states its purpose ('Use for column widths and row heights') and names the alternative for a nearby task ('To change which rows count as headers use numbers_set_headers'). It gives clear context but no explicit when-not-to-use or dependency conditions beyond that redirect.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_set_formulaNumbers: set formulaA
Destructive

Put a formula in one cell, e.g. ref "D10", formula "=SUM(D2:D9)"; Numbers computes it and the result is returned. Every other cell's input is verified unchanged. Needs macOS + Numbers, file closed. dry_run=true previews the change on a copy without touching the file. Use for a cell that calculates (=SUM…); Numbers computes the result. For a plain value use numbers_edit_cell. Needs the Numbers app.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesOne cell in A1 notation, e.g. "B2".
pathYesPath to the .numbers file (absolute, or starting with ~).
sheetNoSheet name. Omit when the file has one sheet (iwork_read lists sheets and tables).
tableNoTable name on that sheet. Omit when the sheet has one table.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.
formulaYesThe formula, starting with "=", e.g. "=SUM(B2:B9)".

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotent=false, so the mutation profile is known; the description adds real context beyond that — the result is returned, every other cell is verified unchanged, the file must be closed and macOS+Numbers present, and dry_run previews on a copy. It does not state reversibility (e.g. no undo/backup mention), which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Content is front-loaded with the example, but it repeats itself: 'Numbers computes it and the result is returned' recurs as 'Numbers computes the result', and the Numbers-app requirement appears twice ('Needs macOS + Numbers' and 'Needs the Numbers app'). Two sentences could be cut without information loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is unnecessary, and prerequisites (closed file, macOS+Numbers) plus dry_run semantics are covered. Minor gap: no note on what happens if the ref is invalid or already contains a value, but the essentials for correct invocation are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters are documented in the schema itself. The description revisits ref and formula with examples but adds no semantics the schema lacks (sheet/table omission rules, dry_run behavior are all in the schema). Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Put a formula in one cell') with a concrete example, and explicitly contrasts itself with the sibling numbers_edit_cell for plain values. An agent can distinguish this from numbers_edit_cell and numbers_recalculate without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the when ('a cell that calculates (=SUM…)'), the when-not ('For a plain value use numbers_edit_cell'), and a conditional path for dry_run previews before risky edits. The routing to the alternative is explicit rather than implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_set_headersNumbers: set headersA
Destructive

Set how many header rows / header columns a table has (0–5). dry_run=true previews the change on a copy without touching the file. Use when the user wants a different number of header rows or columns, e.g. to freeze a title row on top for sorting and styling. Not for sizes (numbers_set_dimensions) or header colours (numbers_set_cell_style or numbers_apply_design).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .numbers file (absolute, or starting with ~).
sheetNoSheet name. Omit when the file has one sheet (iwork_read lists sheets and tables).
tableNoTable name on that sheet. Omit when the sheet has one table.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.
header_rowsNoNumber of header rows (0 for none).
header_columnsNoNumber of header columns (0 for none).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, so the safety profile is known. The description adds the dry_run preview semantics, but it does not say what is lost when header counts are changed (existing header formatting, merges, or content promotion), leaving the destructive behaviour under-explained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences: capability first, then the preview option, then usage and exclusions. Front-loaded and mostly waste-free, though the dry_run sentence duplicates schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and the description covers scope, range, preview mode, and sibling routing. The remaining gap is the consequence of changing header counts on existing table data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The one genuine addition is the 0–5 bound, which the schema's '0 for none' does not state; the dry_run explanation largely restates the schema's own dry_run description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (set) plus resource (header rows / header columns on a table), with the numeric range stated. It explicitly distinguishes itself from numbers_set_dimensions and the styling tools, so an agent can route without opening sibling schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the triggering user intent ('wants a different number of header rows or columns'), a concrete example use case, and explicit exclusions naming the correct alternatives for sizes and header colours. Both when-to-use and when-not-to-use are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_set_number_formatNumbers: set number formatA
Destructive

How numbers display in a range ("B2:B9"): format = number | currency | percentage | scientific | fraction | datetime | text. Options: decimal_places, thousands_separator, negative_style (minus|red|parentheses|red_parentheses), currency_code (ISO, e.g. SAR, USD), accounting, date_format (e.g. "d MMM yyyy"). Values are not changed; the result shows how each cell now displays. dry_run=true previews the change on a copy without touching the file. Use for how numbers display (currency, %, dates, decimals); the values don't change. For fonts and colours use numbers_set_cell_style.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .numbers file (absolute, or starting with ~).
cellsYesA cell or range in A1 notation, e.g. "B2" or "A1:D1".
sheetNoSheet name. Omit when the file has one sheet (iwork_read lists sheets and tables).
tableNoTable name on that sheet. Omit when the sheet has one table.
formatYesnumber | currency | percentage | scientific | fraction | datetime | text.
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.
accountingNotrue = accounting style (symbol aligned left) for currency.
date_formatNoDate pattern for format=datetime, e.g. "d MMM yyyy".
currency_codeNoISO currency code for format=currency, e.g. "SAR" or "USD".
decimal_placesNoDigits after the decimal point.
negative_styleNominus | red | parentheses | red_parentheses.
thousands_separatorNotrue = group thousands (1,234).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and idempotentHint=false, and the description meaningfully adds that 'values are not changed; the result shows how each cell now displays,' plus the dry_run copy-preview semantics. That explains the nature of the destructive change in a way annotations cannot. It doesn't cover permission or file-write prerequisites, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The main action and the non-mutating-value clarification are front-loaded, and the final sentence efficiently routes to the style sibling. It does spend a sentence duplicating enum options already in the schema, costing some density.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and the description covers the display-vs-value distinction, the dry_run option, and format choices. It is complete enough for a 12-param mutation tool, missing only prerequisite/permission context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 12 parameters. The description restates the format enum and negative_style options, which adds little beyond the schema text; it is adequate but does not deepen parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource (set the display number format for a cell range) and names the sibling it must not be confused with: 'For fonts and colours use numbers_set_cell_style.' An agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context ('Use for how numbers display (currency, %, dates, decimals)') and names an alternative tool for the adjacent styling case. It stops short of saying when NOT to use it relative to numbers_inspect_format or numbers_edit_cell, but the core routing guidance is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

numbers_sortNumbers: sortA
Destructive

Sort a table's body rows by a column letter (header rows stay on top). Verified as a pure reorder. A table whose formulas read other rows (e.g. =B2*0.1 below a base-figure row) is refused, because Numbers' sort would break them; for it, to_new_table=true leaves the table, its formulas and its charts as they are and puts a sorted copy of its values (no formulas) in a new table on the same sheet (named new_table_name, default " sorted"). Chart the copy with keynote_build_deck. Needs macOS + Numbers, file closed. dry_run=true previews the change on a copy without touching the file. Use to reorder body rows by one column; header rows stay on top. If it refuses because formulas read other rows, call it again with to_new_table=true for a sorted copy; never rewrite the formulas to force it. Needs the Numbers app.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .numbers file (absolute, or starting with ~).
sheetNoSheet name. Omit when the file has one sheet (iwork_read lists sheets and tables).
tableNoTable name on that sheet. Omit when the sheet has one table.
columnYesColumn letter to sort by, e.g. "C".
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.
descendingNotrue = largest/last first.
to_new_tableNotrue = leave the table as it is and put a sorted copy of its values (no formulas) in a new table on the same sheet. Use it when the table's formulas read other rows.
new_table_nameNoName for the new table (with to_new_table); default "<table> sorted".

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give destructiveHint=false and idempotentHint=false; the description adds the refusal condition (formulas that read other rows), what to_new_table preserves (table, formulas, charts) versus omits (formulas in the copy), the default copy name, environmental prerequisites (macOS + Numbers, file closed), and what dry_run actually does (runs on a throwaway copy). This is substantial context the structured fields do not carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and dense, but it repeats itself: 'header rows stay on top' appears in both the opening and again in 'Use to reorder body rows by one column; header rows stay on top,' and the keynote_build_deck plug is tangential. A tighter version would preserve all the guidance without the duplication.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and the description covers the risky edge case, the recovery path, prerequisites, and the dry-run preview. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds rationale the schema lacks: why to_new_table exists, that the copy contains values with no formulas, the default naming pattern, and that dry_run previews without touching the file. It reinforces rather than merely repeats the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a precise verb and resource: 'Sort a table's body rows by a column letter (header rows stay on top).' No sibling tool performs row reordering, and the scope (body rows only, headers fixed) is stated up front.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use it to reorder body rows by one column, names the fallback path (to_new_table=true) when the tool refuses, and adds a prohibition ('never rewrite the formulas to force it'). The when/when-not/alternative matrix is complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pages_fill_placeholdersPages: fill placeholdersA
Destructive

Fill template placeholders by tag, e.g. {"Name": "Sara", "Date": "3 October"}. Formatting is kept; the body is verified to change only there. Needs macOS + Pages. dry_run=true previews the change on a copy without touching the file. Use for template fields (Name, Date). It's the only write for page-layout documents like letters and flyers, which have no body text.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .pages document (absolute, or starting with ~).
valuesYesPlaceholder tag → text, e.g. {"Name": "Sara", "Date": "3 October"} (tags from pages_list_placeholders).
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds meaningful behavior beyond the annotations: formatting is preserved, the body is verified to change only at placeholders, macOS + Pages is required, and dry_run previews on a throwaway copy. The destructiveHint=true annotation is consistent with a write tool, and the description reinforces the safe-preview path rather than contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and its example, then layered with verification, platform, dry-run, and use-case notes. Every sentence carries information, though the example values could be trimmed since it duplicates the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return details need not be explained, and the description covers the remaining essentials: platform requirement, verification guarantee, dry-run semantics, and the document class it targets. Complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameter baseline is 3. The description's example values object and dry_run explanation largely restate what the schema already documents, so it adds little parameter-level meaning beyond the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Fill template placeholders by tag') and immediately differentiates from siblings by noting it is 'the only write for page-layout documents like letters and flyers, which have no body text.' The agent can distinguish it from pages_set_body and pages_replace_all 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear when-to-use context ('Use for template fields (Name, Date)') and a useful scoping contrast against body-text edits. It also explains the dry_run workflow. It stops short of naming specific alternative tools (e.g. pages_replace_all) for related edits, so it is strong context rather than explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pages_list_placeholdersPages: list placeholdersA
Read-onlyIdempotent

Template placeholders in a .pages document (tag + current text), e.g. a letter's "Name" or "Date" fields. Needs macOS + Pages. Use before pages_fill_placeholders to see the template's field tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .pages document (absolute, or starting with ~).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds the environment dependency ("Needs macOS + Pages") and the returned content shape, which is real context beyond the structured fields, though pagination or failure/error behavior is not mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each doing work: what it returns, the environment requirement, and the sequencing with its sibling. Front-loaded with the resource and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values needn't be re-explained, and annotations carry the safety profile. The description covers the remaining gaps an agent needs: environment prerequisite, content shape, and when to call it relative to pages_fill_placeholders.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema description coverage is 100%, so the schema fully documents `path` (absolute or ~-prefixed). The description adds nothing about the parameter, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (list) plus resource (template placeholders in a .pages document), and it even says what each entry contains (tag + current text) with a concrete example of a letter's "Name"/"Date" fields. This separates it cleanly from pages_fill_placeholders, the write-side sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: "Use before pages_fill_placeholders to see the template's field tags," which tells the agent the ordering and the alternative. It lacks any when-not condition (e.g. what to do if the document has no placeholders), so it falls just 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.

pages_preflightPages: check it can answerA
Read-onlyIdempotent

Check Pages can answer AppleEvents. Run once before any Pages op; never loop on failure. Call once before other Pages tools. A -1712 error means a dialog in Pages needs a human; don't retry until it's dismissed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description goes further by decoding the -1712 error as a blocking human dialog and prescribing a no-retry policy, which is operational behavior neither the annotations nor the schema could convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: the probe action, the once-per-session sequencing rule, and the error-handling exception. The most important instruction (call once before other Pages tools) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value details are not required here. Given the tool's role as a gate before other Pages calls, the description covers the prerequisite timing, the failure signature, and the retry policy - everything an agent needs to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-parameter tool applies. Schema coverage is 100% and empty, so no compensation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Check Pages can answer AppleEvents', which is a health/liveness probe. This is clearly distinguishable from the sibling editing and creation tools, so an agent knows this is a precondition check rather than a document operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Run once before any Pages op' and 'Call once before other Pages tools', giving both the trigger and the sequencing. It also states the negative case clearly: 'never loop on failure' and 'don't retry until it's dismissed'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pages_read_tablesPages: read tablesA
Read-onlyIdempotent

Every table in a .pages document: name, size, and each cell's value, shown text and formula. Needs macOS + Pages. Use before pages_set_table_cells to see the tables, their names and cell references.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .pages document (absolute, or starting with ~).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds the meaningful non-annotation context: the macOS/Pages runtime dependency and the fact that formula and displayed text are both returned. It does not discuss behavior on documents with no tables, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the return content, followed by the prerequisite and the alternative/sequencing hint. No filler and no redundancy with the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return formatting, and it covers purpose, prerequisite, and sibling sequencing. Only edge behavior (empty documents, missing tables, error modes) is unspecified, which is a minor gap rather than a blocking one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single 'path' parameter, which already documents absolute or ~-prefixed paths. The description adds nothing about the path argument, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Every table in a .pages document') and enumerates exactly what is returned: name, size, per-cell value, shown text and formula. This is clearly distinguishable from write-oriented siblings like pages_set_table_cells.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit prerequisite ('Needs macOS + Pages') and an explicit sequencing rule: 'Use before pages_set_table_cells to see the tables, their names and cell references.' The agent knows both when to call it and which sibling it feeds into.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pages_replace_allPages: replace allA
Destructive

Replace every occurrence of find in a .pages body (needs Pages + GUI session). Rolled back if the readback disagrees. dry_run=true previews the change on a copy without touching the file. Use to change text everywhere while keeping formatting. To replace the whole body use pages_set_body; for template fields use pages_fill_placeholders.

ParametersJSON Schema
NameRequiredDescriptionDefault
findYesText to find, exactly.
pathYesPath to the .pages document (absolute, or starting with ~).
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.
replaceYesReplacement text.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (destructiveHint=true, idempotentHint=false), the description discloses two traits not present in structured fields: the Pages + GUI session prerequisite and the readback-based rollback on disagreement. The dry_run sentence largely restates the schema's dry_run description, so it doesn't add much incremental value, keeping this at 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences with zero filler; the core behavior and prerequisite come first, then the safety mechanism, then routing to alternatives. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema, full schema description coverage, and annotations covering the safety profile, the description supplies everything else an agent needs: environment prerequisite, rollback guarantee, preview mode, and sibling routing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so find, path, replace, and dry_run are already fully documented. The description only adds that matching is body-scoped and that find is matched "exactly", which is marginal additional meaning over the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and scope ("replace every occurrence of `find` in a .pages body") along with the required environment, and explicitly names the two sibling tools it is not (pages_set_body, pages_fill_placeholders). An agent can distinguish this from all other Pages tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives positive guidance ("use to change text everywhere while keeping formatting"), names the alternative for whole-body replacement, and names the alternative for template fields. It even routes risky usage to the dry_run flow, so the when-to-use decision is fully covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pages_set_bodyPages: set bodyA
Destructive

Replace the entire body text of a .pages document (needs Pages + GUI session). Body formatting is reset. dry_run=true previews the change on a copy without touching the file. Use only to replace the entire body text; it resets body formatting, so warn the user. Prefer pages_replace_all or pages_fill_placeholders.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe new body text; paragraphs separated by newlines. Resets body formatting.
pathYesPath to the .pages document (absolute, or starting with ~).
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation profile is known. The description adds genuine context beyond that: the GUI-session/Pages prerequisite, the specific loss ('Body formatting is reset'), and the dry_run preview semantics. It stops short of stating reversibility or backup behavior, which keeps it at 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The destructive warning is front-loaded, which is good, but the same fact is stated three times ('Body formatting is reset', 'it resets body formatting', schema-level 'Resets body formatting') and the opening sentence is restated by 'Use only to replace the entire body text'. Meaningful trimming is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema and full schema coverage, so return values and params need no prose. The description supplies the environment prerequisite, the destructive consequence, and the safe-preview route, which is close to sufficient. Minor gaps remain around backup/restore availability (siblings exist for it) and confirmation expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so path, body, and dry_run are all documented in the schema itself. The description's remarks about body formatting and dry_run largely repeat the schema text rather than adding syntax or constraints. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Replace the entire body text of a .pages document') with explicit scope ('entire body'). It also names the two sibling tools it is not (pages_replace_all, pages_fill_placeholders), so an agent can distinguish it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('Use only to replace the entire body text'), when-not (implies partial edits, routed elsewhere), and named alternatives ('Prefer pages_replace_all or pages_fill_placeholders'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pages_set_table_cellsPages: set table cellsA
Destructive

Write cells of an existing table in a .pages document. table = its name or number (from pages_read_tables); cells = {"B2": 1200, "C3": "تم", "D9": "=SUM(D2:D8)"} — numbers stay numbers, "=…" makes a formula, null clears. Every other cell and the body text are verified unchanged. New tables can't be created (Pages 15 doesn't script it). Needs macOS + Pages, document closed. dry_run=true previews the change on a copy without touching the file. Use to write into an existing Pages table. New tables can't be created in Pages; for text outside tables use pages_replace_all.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the .pages document (absolute, or starting with ~).
cellsYes{"B2": 1200, "C3": "تم", "D9": "=SUM(D2:D8)"}: numbers stay numbers, "=…" is a formula, null clears.
tableYesThe table's name or number (from pages_read_tables).
dry_runNotrue = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a destructive, non-idempotent write, and the description adds real context beyond them: every other cell and the body text are verified unchanged, macOS + Pages are required, the document must be closed, and dry_run previews on a copy without touching the file. These are exactly the side-effect and precondition details 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and the cells payload, but the 'new tables can't be created' constraint appears twice and 'Use to write into an existing Pages table' restates the opening sentence. Mostly efficient with minor redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, annotations covering safety, and 100% schema coverage, the description still supplies the environment prerequisites, the non-target verification guarantee, and the dry_run workflow. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description's cell semantics (numbers stay numbers, '=…' is a formula, null clears) duplicate what the schema's cells description already says, as does the table provenance note. It adds the concrete example mapping but no syntax or format detail beyond the structured fields, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Write cells of an existing table in a .pages document') and immediately bounds the scope to existing tables, distinguishing it from table-creation and text-editing tools. An agent can tell what it does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: 'Use to write into an existing Pages table' and 'for text outside tables use pages_replace_all', plus the negative case that new tables can't be created. It also tells the agent when to reach for dry_run (before broad or risky edits).

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.

  1. 1 tool updatev2.6.0
    • Changednumbers_sort2 fields changed
      • addedInput schema / properties / new_table_name
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Name for the new table (with to_new_table); default \"<table> sorted\".",
        +  "title": "New Table Name"
        +}
      • addedInput schema / properties / to_new_table
        Added value: +{
        +  "default": false,
        +  "description": "true = leave the table as it is and put a sorted copy of its values (no formulas) in a new table on the same sheet. Use it when the table's formulas read other rows.",
        +  "title": "To New Table",
        +  "type": "boolean"
        +}
  2. 60 tool updatesv2.4.1
    • Changediwork_create2 fields changed
      • addedInput schema / properties / path / description
        Added value: +"Where to create the new file (.numbers, .key or .pages); it must not exist yet."
      • addedInput schema / properties / template / description
        Added value: +"Template or theme name from iwork_list_templates; omit for Blank / Basic White."
    • Changediwork_create_from_template2 fields changed
      • addedInput schema / properties / path / description
        Added value: +"Where to create the new file; it must not exist yet."
      • addedInput schema / properties / template / description
        Added value: +"The user's own .numbers, .key or .pages file to copy."
    • Changediwork_delete_design_kit1 field changed
      • addedInput schema / properties / name / description
        Added value: +"Name of the saved kit to delete (presets can't be deleted)."
    • Changediwork_export8 fields changed
      • addedInput schema / properties / format / description
        Added value: +"Numbers: pdf | xlsx | csv. Pages: pdf | docx | epub | txt | rtf. Keynote: pdf | pptx | images | movie."
      • addedInput schema / properties / image_format / description
        Added value: +"Slide images only: jpeg | png | tiff."
      • addedInput schema / properties / image_quality / description
        Added value: +"good | better | best."
      • addedInput schema / properties / out / description
        Added value: +"Output path (a folder for images); omit to write next to the source."
      • addedInput schema / properties / overwrite / description
        Added value: +"true = replace an existing output (the old one is kept as a backup or returned). Default false."
      • addedInput schema / properties / password / description
        Added value: +"Optional password for pdf, xlsx, docx or pptx."
      • addedInput schema / properties / password_hint / description
        Added value: +"Optional hint shown with the password prompt."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers, .key or .pages file (absolute, or starting with ~)."
    • Changediwork_extract_design_kit6 fields changed
      • addedInput schema / properties / name / description
        Added value: +"Name for the kit, e.g. \"Resal\" (required with save=true)."
      • addedInput schema / properties / overwrite / description
        Added value: +"true = replace a saved kit with the same name."
      • addedInput schema / properties / path / description
        Added value: +"A .key deck or .numbers table that already has the look to capture."
      • addedInput schema / properties / save / description
        Added value: +"true = save it under name for reuse; contrast must pass."
      • addedInput schema / properties / sheet / description
        Added value: +"For .numbers: the sheet holding the styled table."
      • addedInput schema / properties / table / description
        Added value: +"For .numbers: the styled table."
    • Changediwork_find4 fields changed
      • addedInput schema / properties / folder / description
        Added value: +"Folder to search; omit to search the allowed folders, else Documents, Desktop and Downloads."
      • addedInput schema / properties / kind / description
        Added value: +"numbers | keynote | pages; omit for all three."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum results (1–500)."
      • addedInput schema / properties / name / description
        Added value: +"Part of the file name to match (case-insensitive)."
    • Changediwork_list_backups1 field changed
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers, .key or .pages file (absolute, or starting with ~)."
    • Changediwork_list_templates1 field changed
      • addedInput schema / properties / app / description
        Added value: +"numbers | pages | keynote."
    • Changediwork_metadata1 field changed
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers, .key or .pages file (absolute, or starting with ~)."
    • Changediwork_read1 field changed
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers, .key or .pages file (absolute, or starting with ~)."
    • Changediwork_restore_backup2 fields changed
      • addedInput schema / properties / backup / description
        Added value: +"Backup name from iwork_list_backups."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers, .key or .pages file (absolute, or starting with ~)."
    • Changediwork_save_design_kit3 fields changed
      • addedInput schema / properties / kit / description
        Added value: +"{\"fonts\": {...}, \"colors\": {...}, \"theme\": \"...\", \"background\": \"#RRGGBB\", \"base\": \"<preset>\"} or a preset name to copy."
      • addedInput schema / properties / name / description
        Added value: +"Name to save under, e.g. \"Resal\" (letters, digits, spaces, - or _; not a preset name)."
      • addedInput schema / properties / overwrite / description
        Added value: +"true = replace a saved kit with the same name."
    • Changediwork_thumbnail2 fields changed
      • addedInput schema / properties / out_dir / description
        Added value: +"Folder for the extracted JPEG; omit for a temporary folder."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers, .key or .pages file (absolute, or starting with ~)."
    • Changediwork_verify_format8 fields changed
      • addedInput schema / properties / bold / description
        Added value: +"Expected bold (true) or not bold (false)."
      • addedInput schema / properties / color / description
        Added value: +"Expected text colour \"#RRGGBB\"."
      • addedInput schema / properties / font / description
        Added value: +"Expected font; matches when the drawn font name contains it, e.g. \"Avenir\"."
      • addedInput schema / properties / page_height / description
        Added value: +"Expected page height in points."
      • addedInput schema / properties / page_width / description
        Added value: +"Expected page width in points."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers, .key or .pages file (absolute, or starting with ~)."
      • addedInput schema / properties / size / description
        Added value: +"Expected size in points (±0.6)."
      • addedInput schema / properties / text / description
        Added value: +"Text that must appear in the rendered PDF; for Arabic, one word (multi-word RTL text is reordered)."
    • Changediwork_verify_render3 fields changed
      • addedInput schema / properties / assert_text / description
        Added value: +"Text that must be visibly rendered; for Arabic, one word."
      • addedInput schema / properties / expected_pages / description
        Added value: +"Expected page (or slide) count; omit to skip that check."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers, .key or .pages file (absolute, or starting with ~)."
    • Changedkeynote_add_chart8 fields changed
      • addedInput schema / properties / columns / description
        Added value: +"Column names, e.g. [\"Q1\", \"Q2\", \"Q3\"]."
      • addedInput schema / properties / data / description
        Added value: +"One list of numbers per row name, each as long as columns."
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / group_by / description
        Added value: +"row (each row is a series) | column."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
      • addedInput schema / properties / rows / description
        Added value: +"Row names, e.g. [\"2025\", \"2026\"] (series when group_by=\"row\")."
      • addedInput schema / properties / slide / description
        Added value: +"Slide number, 1-based (keynote_list_slides lists them)."
      • addedInput schema / properties / type / description
        Added value: +"bar | stacked_bar | horizontal_bar | stacked_horizontal_bar | line | area | stacked_area | pie | scatter (or a *_3d variant)."
    • Changedkeynote_add_image7 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / image / description
        Added value: +"Image file to place (png, jpg, heic, pdf…)."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
      • addedInput schema / properties / slide / description
        Added value: +"Slide number, 1-based (keynote_list_slides lists them)."
      • addedInput schema / properties / width / description
        Added value: +"Image width in points; height keeps the aspect ratio."
      • addedInput schema / properties / x / description
        Added value: +"Left edge in points (give with y); omit to let Keynote place it."
      • addedInput schema / properties / y / description
        Added value: +"Top edge in points from the slide's top-left corner (give with x)."
    • Changedkeynote_add_slide3 fields changed
      • addedInput schema / properties / after / description
        Added value: +"Insert after this slide number; 0 = make it the first slide; omit = at the end."
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
    • Changedkeynote_add_table9 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / header_rows / description
        Added value: +"How many rows at the top are headers (styled and kept on top)."
      • addedInput schema / properties / kit / description
        Added value: +"A design kit: a name from iwork_list_design_kits (preset or saved, e.g. \"executive\", \"Resal\") or your own {\"fonts\": {...}, \"colors\": {\"title\": \"#RRGGBB\", ...}}. Contrast is checked."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
      • addedInput schema / properties / rows / description
        Added value: +"The table, header first: [[\"Region\", \"Q1\"], [\"Riyadh\", 1200]]; text, numbers or null; \"=…\" is a formula."
      • addedInput schema / properties / slide / description
        Added value: +"Slide number, 1-based (keynote_list_slides lists them)."
      • addedInput schema / properties / width / description
        Added value: +"Table width in points; omit for Keynote's default."
      • addedInput schema / properties / x / description
        Added value: +"Left edge in points (give with y); omit to let Keynote place it."
      • addedInput schema / properties / y / description
        Added value: +"Top edge in points (give with x)."
    • Changedkeynote_apply_design4 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / kit / description
        Added value: +"A design kit: a name from iwork_list_design_kits (preset or saved, e.g. \"executive\", \"Resal\") or your own {\"fonts\": {...}, \"colors\": {\"title\": \"#RRGGBB\", ...}}. Contrast is checked."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
      • addedInput schema / properties / set_theme / description
        Added value: +"true = also switch to the kit's theme first."
    • Changedkeynote_build_deck5 fields changed
      • addedInput schema / properties / kit / description
        Added value: +"A design kit: a name from iwork_list_design_kits (preset or saved, e.g. \"executive\", \"Resal\") or your own {\"fonts\": {...}, \"colors\": {\"title\": \"#RRGGBB\", ...}}. Contrast is checked."
      • addedInput schema / properties / path / description
        Added value: +"Where to create the new .key deck; it must not exist yet."
      • addedInput schema / properties / slides / description
        Added value: +"The outline: [{\"title\": \"…\", \"body\": [\"bullet\", …], \"notes\": \"…\", \"layout\": \"…\", \"image\": \"/path.png\", \"chart\": {…}, \"table\": {…}}, …]; see the tool description for chart and table."
      • addedInput schema / properties / theme / description
        Added value: +"Theme name from keynote_list_themes; the kit's theme is used when omitted."
      • addedInput schema / properties / transition / description
        Added value: +"Transition for every slide, e.g. \"dissolve\"."
    • Changedkeynote_delete_slide3 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
      • addedInput schema / properties / slide / description
        Added value: +"Slide number, 1-based (keynote_list_slides lists them)."
    • Changedkeynote_duplicate_slide3 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
      • addedInput schema / properties / slide / description
        Added value: +"Slide number, 1-based (keynote_list_slides lists them)."
    • Changedkeynote_format_text8 fields changed
      • addedInput schema / properties / color / description
        Added value: +"Text colour \"#RRGGBB\"."
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / font / description
        Added value: +"PostScript font name, e.g. \"HelveticaNeue-Bold\"."
      • addedInput schema / properties / item / description
        Added value: +"Text item index on the slide (from keynote_inspect_style); or use match."
      • addedInput schema / properties / match / description
        Added value: +"A unique piece of the item's text, to pick it instead of item."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
      • addedInput schema / properties / size / description
        Added value: +"Font size in points."
      • addedInput schema / properties / slide / description
        Added value: +"Slide number, 1-based (keynote_list_slides lists them)."
    • Changedkeynote_inspect_style1 field changed
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
    • Changedkeynote_list_slides1 field changed
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
    • Changedkeynote_move_slide4 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
      • addedInput schema / properties / slide / description
        Added value: +"The slide to move, 1-based."
      • addedInput schema / properties / to / description
        Added value: +"Where it should end up, 1-based."
    • Changedkeynote_replace_text5 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / find / description
        Added value: +"Text to find (literal unless regex=true)."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
      • addedInput schema / properties / regex / description
        Added value: +"true = treat find as a regular expression."
      • addedInput schema / properties / replace / description
        Added value: +"Replacement text."
    • Changedkeynote_review_deck1 field changed
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
    • Changedkeynote_set_presenter_notes4 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / notes / description
        Added value: +"The presenter notes text (replaces existing notes)."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
      • addedInput schema / properties / slide / description
        Added value: +"Slide number, 1-based (keynote_list_slides lists them)."
    • Changedkeynote_set_slide_layout4 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / layout / description
        Added value: +"Layout (master slide) name from keynote_inspect_style."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
      • addedInput schema / properties / slide / description
        Added value: +"Slide number, 1-based (keynote_list_slides lists them)."
    • Changedkeynote_set_slide_text5 fields changed
      • addedInput schema / properties / body / description
        Added value: +"New body: a string, or a list of bullets; omit to leave it."
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
      • addedInput schema / properties / slide / description
        Added value: +"Slide number, 1-based (keynote_list_slides lists them)."
      • addedInput schema / properties / title / description
        Added value: +"New title text; omit to leave it."
    • Changedkeynote_set_theme3 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
      • addedInput schema / properties / theme / description
        Added value: +"Theme name from keynote_list_themes."
    • Changedkeynote_set_transition7 fields changed
      • addedInput schema / properties / automatic / description
        Added value: +"true = advance to the next slide on its own."
      • addedInput schema / properties / delay / description
        Added value: +"Delay before it starts, in seconds."
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / duration / description
        Added value: +"Duration in seconds."
      • addedInput schema / properties / effect / description
        Added value: +"Transition effect, e.g. \"dissolve\", \"push\", \"magic move\", or \"none\"."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
      • addedInput schema / properties / slide / description
        Added value: +"Slide number, 1-based (keynote_list_slides lists them)."
    • Changedkeynote_skip_slide4 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
      • addedInput schema / properties / skipped / description
        Added value: +"true = hide the slide in the slideshow; false = show it again."
      • addedInput schema / properties / slide / description
        Added value: +"Slide number, 1-based (keynote_list_slides lists them)."
    • Changedkeynote_slide_image3 fields changed
      • addedInput schema / properties / path / description
        Added value: +"Path to the .key deck (absolute, or starting with ~)."
      • addedInput schema / properties / slide / description
        Added value: +"Slide number, 1-based (keynote_list_slides lists them)."
      • addedInput schema / properties / width / description
        Added value: +"Image width in pixels (320–2560)."
    • Changedkeynote_slideshow3 fields changed
      • addedInput schema / properties / action / description
        Added value: +"start | stop | next | previous."
      • addedInput schema / properties / from_slide / description
        Added value: +"Slide to start from, 1-based."
      • addedInput schema / properties / path / description
        Added value: +"The deck to present (needed for start)."
    • Changednumbers_add_table8 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / header_columns / description
        Added value: +"How many columns on the left are headers."
      • addedInput schema / properties / header_rows / description
        Added value: +"How many rows at the top are headers (styled and kept on top)."
      • addedInput schema / properties / new_sheet / description
        Added value: +"Name of a new sheet to create for the table instead."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers file (absolute, or starting with ~)."
      • addedInput schema / properties / rows / description
        Added value: +"The data, header first: [[\"Region\", \"Revenue\"], [\"Riyadh\", 1200]]."
      • addedInput schema / properties / sheet / description
        Added value: +"Existing sheet to add it to; omit for the first sheet."
      • addedInput schema / properties / table_name / description
        Added value: +"Name of the new table (must not exist on that sheet)."
    • Changednumbers_apply_design6 fields changed
      • addedInput schema / properties / banding / description
        Added value: +"true = tint alternate body rows."
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / kit / description
        Added value: +"A design kit: a name from iwork_list_design_kits (preset or saved, e.g. \"executive\", \"Resal\") or your own {\"fonts\": {...}, \"colors\": {\"title\": \"#RRGGBB\", ...}}. Contrast is checked."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers file (absolute, or starting with ~)."
      • addedInput schema / properties / sheet / description
        Added value: +"Sheet name. Omit when the file has one sheet (iwork_read lists sheets and tables)."
      • addedInput schema / properties / table / description
        Added value: +"Table name on that sheet. Omit when the sheet has one table."
    • Changednumbers_create2 fields changed
      • addedInput schema / properties / path / description
        Added value: +"Where to create the new .numbers file; it must not exist yet."
      • addedInput schema / properties / sheets / description
        Added value: +"Sheets with their tables: [{\"name\": \"Sales\", \"tables\": [{\"name\": \"Q1\", \"rows\": [[\"Region\", \"Revenue\"], [\"Riyadh\", 1200]], \"header_rows\": 1}]}]."
    • Changednumbers_delete7 fields changed
      • addedInput schema / properties / at / description
        Added value: +"1-based position of the first one to delete."
      • addedInput schema / properties / count / description
        Added value: +"How many to delete."
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers file (absolute, or starting with ~)."
      • addedInput schema / properties / sheet / description
        Added value: +"Sheet name. Omit when the file has one sheet (iwork_read lists sheets and tables)."
      • addedInput schema / properties / table / description
        Added value: +"Table name on that sheet. Omit when the sheet has one table."
      • addedInput schema / properties / what / description
        Added value: +"rows | columns."
    • Changednumbers_edit_cell6 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers file (absolute, or starting with ~)."
      • addedInput schema / properties / ref / description
        Added value: +"One cell in A1 notation, e.g. \"B2\"."
      • addedInput schema / properties / sheet / description
        Added value: +"Sheet name. Omit when the file has one sheet (iwork_read lists sheets and tables)."
      • addedInput schema / properties / table / description
        Added value: +"Table name on that sheet. Omit when the sheet has one table."
      • addedInput schema / properties / value / description
        Added value: +"New value: a number stays a number, text stays text exactly (Arabic too); null clears. For a formula use numbers_set_formula."
    • Changednumbers_import_csv7 fields changed
      • addedInput schema / properties / csv_path / description
        Added value: +"The CSV or TSV file to read (UTF-8)."
      • addedInput schema / properties / delimiter / description
        Added value: +"Column separator, e.g. \",\" or \"\\t\"; omit to detect it."
      • addedInput schema / properties / header_rows / description
        Added value: +"How many rows at the top are headers (styled and kept on top)."
      • addedInput schema / properties / numbers / description
        Added value: +"true = plain numbers become numbers; false = keep every cell as text."
      • addedInput schema / properties / path / description
        Added value: +"Where to create the new .numbers file; it must not exist yet."
      • addedInput schema / properties / sheet / description
        Added value: +"Name for the new sheet."
      • addedInput schema / properties / table / description
        Added value: +"Name for the new table."
    • Changednumbers_insert8 fields changed
      • addedInput schema / properties / at / description
        Added value: +"1-based position to insert before; omit to append at the end."
      • addedInput schema / properties / count / description
        Added value: +"How many to insert."
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers file (absolute, or starting with ~)."
      • addedInput schema / properties / sheet / description
        Added value: +"Sheet name. Omit when the file has one sheet (iwork_read lists sheets and tables)."
      • addedInput schema / properties / table / description
        Added value: +"Table name on that sheet. Omit when the sheet has one table."
      • addedInput schema / properties / values / description
        Added value: +"Optional contents: one list per new row (or column), e.g. [[\"Riyadh\", 1200]]."
      • addedInput schema / properties / what / description
        Added value: +"rows | columns."
    • Changednumbers_inspect_format3 fields changed
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers file (absolute, or starting with ~)."
      • addedInput schema / properties / sheet / description
        Added value: +"Sheet name. Omit when the file has one sheet (iwork_read lists sheets and tables)."
      • addedInput schema / properties / table / description
        Added value: +"Table name on that sheet. Omit when the sheet has one table."
    • Changednumbers_merge_cells5 fields changed
      • addedInput schema / properties / cells / description
        Added value: +"The range to merge, e.g. \"A1:C1\". Refused if it would hide values."
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers file (absolute, or starting with ~)."
      • addedInput schema / properties / sheet / description
        Added value: +"Sheet name. Omit when the file has one sheet (iwork_read lists sheets and tables)."
      • addedInput schema / properties / table / description
        Added value: +"Table name on that sheet. Omit when the sheet has one table."
    • Changednumbers_recalculate2 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers file (absolute, or starting with ~)."
    • Changednumbers_set_borders9 fields changed
      • addedInput schema / properties / cells / description
        Added value: +"A cell or range in A1 notation, e.g. \"B2\" or \"A1:D1\"."
      • addedInput schema / properties / color / description
        Added value: +"Line colour \"#RRGGBB\"."
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers file (absolute, or starting with ~)."
      • addedInput schema / properties / sheet / description
        Added value: +"Sheet name. Omit when the file has one sheet (iwork_read lists sheets and tables)."
      • addedInput schema / properties / sides / description
        Added value: +"all | outline | inner | top | right | bottom | left."
      • addedInput schema / properties / style / description
        Added value: +"solid | dashes | dots | none (none removes the border)."
      • addedInput schema / properties / table / description
        Added value: +"Table name on that sheet. Omit when the sheet has one table."
      • addedInput schema / properties / width / description
        Added value: +"Line width in points."
    • Changednumbers_set_cell_style16 fields changed
      • addedInput schema / properties / align / description
        Added value: +"Horizontal: left | center | right | justify | auto."
      • addedInput schema / properties / bold / description
        Added value: +"true/false; omit to leave as is."
      • addedInput schema / properties / cells / description
        Added value: +"A cell or range in A1 notation, e.g. \"B2\" or \"A1:D1\"."
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / fill_color / description
        Added value: +"Cell fill \"#RRGGBB\"."
      • addedInput schema / properties / font_color / description
        Added value: +"Text colour \"#RRGGBB\"."
      • addedInput schema / properties / font_name / description
        Added value: +"Font family, e.g. \"Helvetica Neue\" or \"Geeza Pro\"."
      • addedInput schema / properties / font_size / description
        Added value: +"Font size in points."
      • addedInput schema / properties / italic / description
        Added value: +"true/false; omit to leave as is."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers file (absolute, or starting with ~)."
      • addedInput schema / properties / sheet / description
        Added value: +"Sheet name. Omit when the file has one sheet (iwork_read lists sheets and tables)."
      • addedInput schema / properties / strikethrough / description
        Added value: +"true/false; omit to leave as is."
      • addedInput schema / properties / table / description
        Added value: +"Table name on that sheet. Omit when the sheet has one table."
      • addedInput schema / properties / underline / description
        Added value: +"true/false; omit to leave as is."
      • addedInput schema / properties / valign / description
        Added value: +"Vertical: top | middle | bottom."
      • addedInput schema / properties / wrap / description
        Added value: +"true = wrap text in the cell."
    • Changednumbers_set_dimensions6 fields changed
      • addedInput schema / properties / columns / description
        Added value: +"Column widths in points by letter, e.g. {\"A\": 160, \"C\": 90}."
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers file (absolute, or starting with ~)."
      • addedInput schema / properties / rows / description
        Added value: +"Row heights in points by 1-based row number, e.g. {\"1\": 32}."
      • addedInput schema / properties / sheet / description
        Added value: +"Sheet name. Omit when the file has one sheet (iwork_read lists sheets and tables)."
      • addedInput schema / properties / table / description
        Added value: +"Table name on that sheet. Omit when the sheet has one table."
    • Changednumbers_set_formula6 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / formula / description
        Added value: +"The formula, starting with \"=\", e.g. \"=SUM(B2:B9)\"."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers file (absolute, or starting with ~)."
      • addedInput schema / properties / ref / description
        Added value: +"One cell in A1 notation, e.g. \"B2\"."
      • addedInput schema / properties / sheet / description
        Added value: +"Sheet name. Omit when the file has one sheet (iwork_read lists sheets and tables)."
      • addedInput schema / properties / table / description
        Added value: +"Table name on that sheet. Omit when the sheet has one table."
    • Changednumbers_set_headers6 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / header_columns / description
        Added value: +"Number of header columns (0 for none)."
      • addedInput schema / properties / header_rows / description
        Added value: +"Number of header rows (0 for none)."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers file (absolute, or starting with ~)."
      • addedInput schema / properties / sheet / description
        Added value: +"Sheet name. Omit when the file has one sheet (iwork_read lists sheets and tables)."
      • addedInput schema / properties / table / description
        Added value: +"Table name on that sheet. Omit when the sheet has one table."
    • Changednumbers_set_number_format12 fields changed
      • addedInput schema / properties / accounting / description
        Added value: +"true = accounting style (symbol aligned left) for currency."
      • addedInput schema / properties / cells / description
        Added value: +"A cell or range in A1 notation, e.g. \"B2\" or \"A1:D1\"."
      • addedInput schema / properties / currency_code / description
        Added value: +"ISO currency code for format=currency, e.g. \"SAR\" or \"USD\"."
      • addedInput schema / properties / date_format / description
        Added value: +"Date pattern for format=datetime, e.g. \"d MMM yyyy\"."
      • addedInput schema / properties / decimal_places / description
        Added value: +"Digits after the decimal point."
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / format / description
        Added value: +"number | currency | percentage | scientific | fraction | datetime | text."
      • addedInput schema / properties / negative_style / description
        Added value: +"minus | red | parentheses | red_parentheses."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers file (absolute, or starting with ~)."
      • addedInput schema / properties / sheet / description
        Added value: +"Sheet name. Omit when the file has one sheet (iwork_read lists sheets and tables)."
      • addedInput schema / properties / table / description
        Added value: +"Table name on that sheet. Omit when the sheet has one table."
      • addedInput schema / properties / thousands_separator / description
        Added value: +"true = group thousands (1,234)."
    • Changednumbers_sort6 fields changed
      • addedInput schema / properties / column / description
        Added value: +"Column letter to sort by, e.g. \"C\"."
      • addedInput schema / properties / descending / description
        Added value: +"true = largest/last first."
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .numbers file (absolute, or starting with ~)."
      • addedInput schema / properties / sheet / description
        Added value: +"Sheet name. Omit when the file has one sheet (iwork_read lists sheets and tables)."
      • addedInput schema / properties / table / description
        Added value: +"Table name on that sheet. Omit when the sheet has one table."
    • Changedpages_fill_placeholders3 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .pages document (absolute, or starting with ~)."
      • addedInput schema / properties / values / description
        Added value: +"Placeholder tag → text, e.g. {\"Name\": \"Sara\", \"Date\": \"3 October\"} (tags from pages_list_placeholders)."
    • Changedpages_list_placeholders1 field changed
      • addedInput schema / properties / path / description
        Added value: +"Path to the .pages document (absolute, or starting with ~)."
    • Changedpages_read_tables1 field changed
      • addedInput schema / properties / path / description
        Added value: +"Path to the .pages document (absolute, or starting with ~)."
    • Changedpages_replace_all4 fields changed
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / find / description
        Added value: +"Text to find, exactly."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .pages document (absolute, or starting with ~)."
      • addedInput schema / properties / replace / description
        Added value: +"Replacement text."
    • Changedpages_set_body3 fields changed
      • addedInput schema / properties / body / description
        Added value: +"The new body text; paragraphs separated by newlines. Resets body formatting."
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .pages document (absolute, or starting with ~)."
    • Changedpages_set_table_cells4 fields changed
      • addedInput schema / properties / cells / description
        Added value: +"{\"B2\": 1200, \"C3\": \"تم\", \"D9\": \"=SUM(D2:D8)\"}: numbers stay numbers, \"=…\" is a formula, null clears."
      • addedInput schema / properties / dry_run / description
        Added value: +"true = make the change on a throwaway copy, run every check, and return what would change; the file itself is not touched. Use it before broad or risky edits and show the user."
      • addedInput schema / properties / path / description
        Added value: +"Path to the .pages document (absolute, or starting with ~)."
      • addedInput schema / properties / table / description
        Added value: +"The table's name or number (from pages_read_tables)."
  3. 64 tool updatesv2.4.0
    • First observediwork_capabilities
    • First observediwork_create
    • First observediwork_create_from_template
    • First observediwork_delete_design_kit
    • First observediwork_export
    • First observediwork_extract_design_kit
    • First observediwork_find
    • First observediwork_list_backups
    • First observediwork_list_design_kits
    • First observediwork_list_templates
    • First observediwork_metadata
    • First observediwork_read
    • First observediwork_restore_backup
    • First observediwork_save_design_kit
    • First observediwork_thumbnail
    • First observediwork_verify_format
    • First observediwork_verify_render
    • First observedkeynote_add_chart
    • First observedkeynote_add_image
    • First observedkeynote_add_slide
    • First observedkeynote_add_table
    • First observedkeynote_apply_design
    • First observedkeynote_build_deck
    • First observedkeynote_delete_slide
    • First observedkeynote_duplicate_slide
    • First observedkeynote_format_text
    • First observedkeynote_inspect_style
    • First observedkeynote_list_slides
    • First observedkeynote_list_themes
    • First observedkeynote_move_slide
    • First observedkeynote_replace_text
    • First observedkeynote_review_deck
    • First observedkeynote_set_presenter_notes
    • First observedkeynote_set_slide_layout
    • First observedkeynote_set_slide_text
    • First observedkeynote_set_theme
    • First observedkeynote_set_transition
    • First observedkeynote_skip_slide
    • First observedkeynote_slide_image
    • First observedkeynote_slideshow
    • First observednumbers_add_table
    • First observednumbers_apply_design
    • First observednumbers_create
    • First observednumbers_delete
    • First observednumbers_edit_cell
    • First observednumbers_import_csv
    • First observednumbers_insert
    • First observednumbers_inspect_format
    • First observednumbers_merge_cells
    • First observednumbers_recalculate
    • First observednumbers_set_borders
    • First observednumbers_set_cell_style
    • First observednumbers_set_dimensions
    • First observednumbers_set_formula
    • First observednumbers_set_headers
    • First observednumbers_set_number_format
    • First observednumbers_sort
    • First observedpages_fill_placeholders
    • First observedpages_list_placeholders
    • First observedpages_preflight
    • First observedpages_read_tables
    • First observedpages_replace_all
    • First observedpages_set_body
    • First observedpages_set_table_cells

TDQS

A4.1/5.0

Scored across 64 tools

Disambiguation4/5

Tools are extensively documented with cross-references and explicit 'use X instead' guidance, but the sheer number (64) and overlapping categories (e.g., multiple create, verify, and design tools) create some risk of misselection. Most tools have distinct purposes, but a few pairs (e.g., iwork_verify_format vs iwork_verify_render, numbers_apply_design vs numbers_set_cell_style) require careful reading to distinguish.

Naming Consistency5/5

Consistent snake_case with clear app prefixes (iwork_, numbers_, pages_, keynote_) and mostly verb_noun patterns (list_*, set_*, add_*, delete_*). No mixing of conventions. Minor deviations like iwork_capabilities (noun) are acceptable given its special role.

Tool Count2/5

64 tools is excessive for a single MCP server. While the domain (three iWork apps plus design, backup, and verification) is broad, many highly specific tools (e.g., numbers_set_borders, numbers_merge_cells) could be consolidated with parameters, making the set unwieldy for an agent. This exceeds the 25+ threshold for 'too many'.

Completeness5/5

The surface is remarkably complete for iWork automation: CRUD for Numbers/Keynote/Pages, formatting, verification, backup/restore, design kit management, and export. Minor gaps (e.g., no Numbers chart creation, no Pages image insertion) are either app limitations or out of scope, but core workflows are fully covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    An MCP server that provides 113 tools for automating Apple iWork apps (Numbers, Pages, Keynote) via JavaScript for Automation, enabling AI assistants to create, edit, and export documents, spreadsheets, and presentations.
    1
    65 npm
    37
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Enables complete Office document lifecycle management for AI agents, including creation, editing, conversion, and templating of DOCX, XLSX, PPTX, PDF, and EML files.
    40
    29 PyPI
    MIT