iWorkSAFE
MCP server for Apple iWork automation — 113 tools for Numbers, Pages, and Keynote. Template discovery, Creator Studio AI tools, compound batch operations. One line to install.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
MCP server for Apple iWork automation — 117 tools for Numbers, Pages, and Keynote.
One line to install. Works with Claude Desktop, Claude Code, Codex, and any MCP client.
What it does
Ask Claude to build spreadsheets, write documents, and create presentations — it controls the real iWork apps on your Mac through Apple's JavaScript for Automation (JXA) scripting bridge.
Numbers — Browse built-in templates (budget, invoice, schedule, etc.) or create from scratch, read/write cells and ranges, set formulas (including cross-sheet references like SUMIFS), sort rows, merge cells, format cells (fonts, colors, backgrounds, alignment, number formats like percent and currency), manage sheets and tables, set column widths and row heights, bulk-create sheets with data and formatting in one call, export to PDF/Excel/CSV.
Pages — Browse built-in templates (resume, report, letter, flyer, newsletter, etc.) or create from scratch, create documents with formatted content in one call, read and insert text at any position, find and replace (preserves formatting), format paragraphs (font, size, color), insert images and tables, export to PDF/Word/EPUB.
Keynote — Browse available themes or create with a specific theme, create presentations with multiple fully-configured slides in one call (layouts, titles, body, notes, transitions), add/delete/duplicate/reorder/skip slides, choose slide layouts from master slides, read slide content, set titles and bullet points, add images and shapes, start/stop slideshows, export to PDF/PowerPoint/HTML.
More examples
![2026
b9425d10152fOBSERVED · 2026-10-08Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.
claude mcp add iwork-mcp -- npx -y [email protected]
{
"mcpServers": {
"iwork-mcp": {
"command": "npx",
"args": [
"-y",
"[email protected]"
]
}
}
}Exposed tools (118)
53 read · 55 write · 10 destructive. Blast radius: 10 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
iwork_status | read | Check iwork-mcp availability on this platform |
keynote_add_image_to_slide | write | Add an image to a slide |
keynote_add_line | write | Add a line to a slide between two points |
keynote_add_shape | write | Add a shape with text to a slide |
keynote_add_slide | write | Add a new slide to the presentation |
keynote_add_table_to_slide | write | Add a table to a slide with optional data |
keynote_align_items | read | Align two or more items on a slide along an edge or center |
keynote_clean_up_slide | read | Auto-adjust a slide |
keynote_close_presentation | read | Close a Keynote presentation |
keynote_create_presentation | write | Create a new Keynote presentation (optionally with a theme — use keynote_list_themes to see available themes) |
keynote_create_presentation_with_slides | write | Create a Keynote presentation with multiple fully-configured slides in one call (theme, layout, title, body, notes, transitions) |
keynote_delete_slide | destructive | Delete a slide from the presentation |
keynote_distribute_items | read | Evenly space three or more items on a slide horizontally or vertically |
keynote_duplicate_slide | read | Duplicate an existing slide |
keynote_export_presentation | read | Export a Keynote presentation to a different format: PDF, PowerPoint (.pptx), HTML, or images (not .key — use keynote_save_presentation for that) |
keynote_format_shape | write | Set shape properties: opacity, rotation, and text formatting (font, size, color, alignment). Note: fill and border colors are not accessible via scripting. |
keynote_format_slide_table | read | Format cells in a table on a slide (text color, number format) |
keynote_get_shape_info | read | Read shape properties: position, size, text, opacity, rotation, and text formatting |
keynote_get_slide_content | read | Read all content from a slide: title, body, presenter notes, and list of items |
keynote_get_theme | read | Get the current theme of a Keynote presentation |
keynote_list_master_slides | read | List all available master slide layouts in the current theme |
keynote_list_presentations | read | List all open Keynote presentations |
keynote_list_slide_items | read | List all items on a slide with their types, positions, and sizes |
keynote_list_slides | read | List all slides in a presentation with their titles |
keynote_list_themes | read | List all available Keynote themes (e.g. White, Black, Gradient) |
keynote_open_presentation | read | Open a .key file from disk |
keynote_position_item | write | Move and/or resize an item (shape, image, or textItem) on a slide by type and index |
keynote_read_slide_table | read | Read all data from a table on a slide as a 2D array |
keynote_remove_background | destructive | Remove the background from an image on a slide using AI (Creator Studio only). |
keynote_reorder_slide | write | Move a slide from one position to another |
keynote_save_presentation | write | Save a Keynote presentation as .key (use this to save to disk — use keynote_export_presentation for PDF/PowerPoint/HTML) |
keynote_set_presenter_notes | write | Set presenter notes for a slide |
keynote_set_slide_body | write | Set the body text of a slide (bullet points separated by newlines) |
keynote_set_slide_layout | write | Change the master slide layout of an existing slide (use keynote_list_master_slides to see available layouts) |
keynote_set_slide_title | write | Set the title text of a slide |
keynote_set_theme | write | Change the theme of an existing Keynote presentation (use keynote_list_themes to see available themes) |
keynote_set_transition | write | Set a transition effect on a slide |
keynote_skip_slide | read | Mark a slide as skipped (hidden) or unskipped |
keynote_start_slideshow | write | Start playing the presentation slideshow |
keynote_stop_slideshow | write | Stop a running slideshow |
keynote_super_resolution | read | Upscale an image on a slide using AI Super Resolution (Creator Studio only). Increases resolution while preserving quality. |
keynote_write_slide_table | write | Write data to cells of an existing table on a slide |
numbers_add_chart | write | Create a chart from table data. Selects the specified data range and creates a chart on the same sheet. Chart type can be set after creation. |
numbers_add_column | write | Add a column to a table |
numbers_add_image | write | Add an image to a sheet from a file path |
numbers_add_row | write | Add one or more rows at the end of a table, optionally with data |
numbers_add_sheet | write | Add a new sheet to a Numbers document. By default, deletes the empty |
numbers_add_table | write | Create a new table in a sheet |
numbers_auto_format | read | Scan a cell range, detect formats from string values (currency, percent, numbers with commas), convert to numeric values and apply native formatting. For example: |
numbers_clear_cells | destructive | Clear the contents of a cell or range |
numbers_close_document | read | Close a Numbers document |
numbers_copy_range | read | Copy values from one document/sheet/table range to another. Both documents must be open. Copies values only (not formulas or formatting). |
numbers_create_document | write | Create a new Numbers document (optionally from a template — use numbers_list_templates to see available templates) |
numbers_create_sheet_with_table | write | Create a complete sheet with a named table, data, and formatting in ONE operation. Much faster than calling individual tools. Use this for bulk setup like calendars, reports, dashboards. |
numbers_delete_column | destructive | Delete one or more columns from a table |
numbers_delete_row | destructive | Delete one or more rows from a table |
numbers_delete_sheet | destructive | Delete a sheet from a Numbers document |
numbers_delete_table | destructive | Delete a table from a sheet |
numbers_export_document | read | Export a Numbers document to a different format: PDF, Excel (.xlsx), or CSV (not .numbers — use numbers_save_document for that) |
numbers_format_cells | write | Set formatting on a cell or range: font, size, color, alignment, background color, bold, italic |
numbers_format_range | write | Apply multiple formatting rules to different cell ranges in one call. More efficient than calling numbers_format_cells repeatedly. |
numbers_get_cell_format | read | Read the number format and alignment of a cell (e.g. percent, currency, number, automatic) |
numbers_get_table_info | read | Get table metadata: row/column counts, header info, table name, and position |
numbers_insert_column_at | write | Insert one or more columns at a specific position in a table, shifting existing columns right |
numbers_insert_row_at | write | Insert one or more rows at a specific position in a table, shifting existing rows down |
numbers_list_documents | read | List all open Numbers documents |
numbers_list_images | read | List all images on a sheet with their positions and sizes |
numbers_list_sheets | read | List all sheets in a Numbers document |
numbers_list_tables | read | List all tables in a sheet with their dimensions |
numbers_list_templates | read | List all available Numbers templates (e.g. Personal Budget, Invoice, Checklist) |
numbers_magic_fill | read | Use AI to fill cells based on a pattern (Creator Studio only). Provide example values in the first rows of a column, then specify the range of empty cells to fill. Magic Fill detects the pattern and fills the remaining cells automatically. |
numbers_merge_cells | write | Merge a range of cells |
numbers_move_table | write | Move a table to a new position on the sheet |
numbers_open_document | read | Open a .numbers file from disk |
numbers_read_cell | read | Read a single cell |
numbers_read_range | read | Read a specific cell range (e.g. |
numbers_read_table | read | Read all data from a table as a 2D array. Returns rows of cell values. |
numbers_remove_background | destructive | Remove the background from an image using AI (Creator Studio only). Opens background removal mode. |
numbers_rename_sheet | write | Rename a sheet in a Numbers document |
numbers_rename_table | write | Rename a table in a Numbers document |
numbers_save_document | write | Save a Numbers document as .numbers (use this to save to disk — use numbers_export_document for PDF/Excel/CSV) |
numbers_set_column_width | write | Set the width of a column |
numbers_set_formula | write | Set a formula on a cell (e.g. |
numbers_set_header_columns | write | Set the number of header columns on a table. Header columns get special styling. Set to 0 to remove header column styling. |
numbers_set_header_rows | write | Set the number of header rows on a table. Header rows get special styling (bold text, grey background). Set to 0 to remove header styling entirely. |
numbers_set_row_height | write | Set the height of a row |
numbers_sort_rows | read | Sort table rows by a column |
numbers_super_resolution | read | Upscale an image using AI Super Resolution (Creator Studio only). Increases resolution while preserving quality. |
numbers_unmerge_cells | read | Unmerge a previously merged cell range |
numbers_write_cell | write | Write a value to a cell |
numbers_write_cells | write | Batch write multiple cell values in a single operation |
numbers_write_table | write | Bulk write an entire table of data in a single operation. Much faster than writing cells individually. Resizes the table to fit the data automatically. |
pages_add_image | write | Insert an image into the document |
pages_add_table | write | Insert a table into the document |
pages_add_text | write | Append text to the end of the document body (preserves existing formatting). Include a trailing newline to start a new paragraph. |
pages_close_document | read | Close a Pages document |
pages_create_document | write | Create a new Pages document (optionally from a template — use pages_list_templates to see available templates) |
pages_create_document_with_content | write | Create a Pages document with multiple formatted paragraphs in one call (much faster than adding paragraphs individually). For bold/italic, use PostScript font names like |
pages_delete_text | destructive | Delete a paragraph by index (preserves formatting on other paragraphs) |
pages_export_document | read | Export a Pages document to a different format: PDF, Word (.docx), EPUB, or plain text (not .pages — use pages_save_document for that) |
pages_format_text | write | Set formatting on a paragraph: font (PostScript name), size, color. For bold use a bold font name like |
pages_get_body_text | read | Read all body text from a Pages document |
pages_get_document_info | read | Get document metadata: word count, character count, page count, modified status |
pages_get_paragraphs | read | Get all paragraphs from a Pages document with their text, font, size, and color |
pages_insert_page_break | write | Insert a page break after a specific paragraph. Creates a visual page break in the document. |
pages_insert_text_at | write | Insert text at a specific paragraph index (preserves formatting on other paragraphs) |
pages_list_documents | read | List all open Pages documents |
pages_list_images | read | List all images in a Pages document with their positions and sizes |
pages_list_tables | read | List all tables in a Pages document with their name, size, and header configuration |
pages_list_templates | read | List all available Pages templates (e.g. Resume, Report, Letter, Flyer) |
pages_open_document | read | Open a .pages file from disk |
pages_read_table | read | Read all cell values and formulas from a table in a Pages document (1-based table index; use pages_list_tables to see available tables) |
pages_remove_background | destructive | Remove the background from an image in a document using AI (Creator Studio only). |
pages_replace_text | read | Find and replace text in a Pages document (preserves formatting) |
pages_resize_table | read | Change the row and/or column count of a table in a Pages document. Shrinking deletes the content of removed rows/columns. |
pages_save_document | write | Save a Pages document as .pages (use this to save to disk — use pages_export_document for PDF/Word/EPUB) |
pages_super_resolution | read | Upscale an image in a document using AI Super Resolution (Creator Studio only). Increases resolution while preserving quality. |
pages_write_table_cells | write | Write values into table cells in a Pages document (1-based row/column). Strings starting with |
Trust audit
SAFEgrade B · trust 87/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (13)
keynote_delete_slide, keynote_remove_background, numbers_clear_cells, numbers_delete_column, numbers_delete_row, numbers_delete_sheet, numbers_delete_table, numbers_remove_background, pages_delete_tex
Apple Q1 FY2026 Earnings.numbers
sample.key
sample.numbers
sample.pages
assert.doesNotThrow(() => new Function(result));
import { resolveAppName } from "../../src/jxa.js";import { registerNumbersTools } from "../../src/tools/numbers.js";import { registerPagesTools } from "../../src/tools/pages.js";import { registerKeynoteTools } from "../../src/tools/keynote.js";import { INSTRUCTIONS } from "../../src/instructions.js";@modelcontextprotocol/sdk, zod, @types/node, tsx, typescript
Gates applied: no_behavioural_pass, no_license.
b9425d10152ffull audit observations/trust-audit/mcp-server/reichenbach__iwork.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-08 | b9425d10152f | SAFE | B | 87 | first audit |
Questions
What is the iWork MCP server?
MCP server for Apple iWork automation — 113 tools for Numbers, Pages, and Keynote. Template discovery, Creator Studio AI tools, compound batch operations. One line to install.
What tools does iWork expose?
118 in total: 53 read-only, 55 that write, and 10 that can delete or overwrite (keynote_delete_slide, keynote_remove_background, numbers_clear_cells, numbers_delete_column, numbers_delete_row). Every one is listed on this page with its risk.
Is iWork safe to connect to an agent?
The audit found nothing in the source that contradicts what it says it does, and graded it B (87/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B. Separately from the audit: 10 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does iWork need?
No credential environment variables were found in its source, so it appears to need none.
How does iWork run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as iwork-mcp at 0.8.8.
How current is this page?
The grade is for one exact copy of the source (b9425d10152f), read on 2026-10-08. The repository is watched and re-audited when it changes.