MCP server for terminal commands, file operations, and process management
iWork Studio is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Create, edit, design and export Apple Numbers, Keynote and Pages files. Verified and Arabic-safe.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user iwork-studio-mcp '--' uvx --from iwork-studio iwork-studio-mcp
# 2 — ask your agent for something these tools do
# iwork_capabilities, iwork_read, iwork_list_backups and 62 more
iWork Studio costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts iWork Studio as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need uv (docs.astral.sh/uv): uvx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user iwork-studio-mcp '--' uvx --from iwork-studio iwork-studio-mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
Nothing is required, but it can take IWORK_STUDIO_ROOTS (Folders the server may touch, separated by ':' (recommended)), IWORK_STUDIO_TOOLSETS (Load only some tools: comma-separated files, numbers, keynote, pages, design (default all)) if you want to set them.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
65 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
What this machine can do right now: routes, GUI session, installed apps, Keynote slide-op status. Call first when unsure.
No parameter schema on file.
Read a .numbers, .key or .pages file into JSON (.pages needs the Pages app and a GUI session).
No parameter schema on file.
List the versioned backups (newest first) every write left for this file, plus the Keynote write manifest.
No parameter schema on file.
Check Pages can answer AppleEvents. Run once before any Pages op; never loop on failure.
No parameter schema on file.
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.
No parameter schema on file.
Export the file to PDF through its app and assert assert_text is visibly rendered. For Arabic, use one word.
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
No parameter schema on file.
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…
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
Undo: atomically restore a backup (a name from iwork_list_backups). The current version is backed up first.
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
Delete slide number slide (1-based). Recoverable with iwork_restore_backup. dry_run=true previews the change on a copy without touching the file.
No parameter schema on file.
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.
No parameter schema on file.
Hide (skipped=true) or show a slide in the slideshow. dry_run=true previews the change on a copy without touching the file.
No parameter schema on file.
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.
No parameter schema on file.
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
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…
No parameter schema on file.
No parameter schema on file.
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": "<preset>"), or a preset name to copy. Contrast is checked (4.5:1). Never replaces a…
No parameter schema on file.
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.
No parameter schema on file.
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…
No parameter schema on file.
Built-in templates for Numbers or Pages, or themes for Keynote (app: numbers | pages | keynote). Needs macOS + the app.
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
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).…
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
No parameter schema on file.
No parameter schema on file.
Template placeholders in a .pages document (tag + current text), e.g. a letter's "Name" or "Date" fields. Needs macOS + Pages.
No parameter schema on file.
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.
No parameter schema on file.
Every table in a .pages document: name, size, and each cell's value, shown text and formula. Needs macOS + Pages.
No parameter schema on file.
No parameter schema on file.
Present: action = start (needs path; from_slide 1-based) | stop | next | previous. Doesn't change the file. Needs macOS + Keynote.
No parameter schema on file.
Every slide with its text, presenter notes and whether it is hidden (via Keynote). Use slide numbers from here for slide operations.
No parameter schema on file.
Themes available in Keynote on this Mac (names to pass to keynote_set_theme).
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
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.
No parameter schema on file.
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…
No parameter schema on file.
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.
No parameter schema on file.
No parameter schema on file.
No parameter schema on file.
No parameter schema on file.
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.
No parameter schema on file.
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.…
No parameter schema on file.
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.
No parameter schema on file.
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…
No parameter schema on file.
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.
No parameter schema on file.
No parameter schema on file.
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install iWork Studio or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | high | capability blast radius (high) — client exposure if the model is manipulated | −6 |
| verification-discount | repo | publisher verification (public source) — no provenance, but the source is public and inspectable | −1 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
Tools were statically extracted from the published source (65 recovered), not enumerated from a running server. Tool-poisoning, Unicode-smuggling, capability and toxic-flow analysis ran on this inferred surface, but a mis-parsed registration could be missed or mis-attributed, so tool-derived findings are capped below “confirmed”. To grade the real runtime surface, scan the running server: --command "npx -y <package>".
1 of the 65 recovered tools are registered only when _slide_tool("add") holds (src/iwork_studio/mcp_server.py:558) — typically when a key or option is configured. They are part of the server's surface and were analysed; a server started without that configuration exposes only the other 44.
1 of the 65 recovered tools are registered only when _slide_tool("duplicate") holds (src/iwork_studio/mcp_server.py:566) — typically when a key or option is configured. They are part of the server's surface and were analysed; a server started without that configuration exposes only the other 44.
1 of the 65 recovered tools are registered only when _slide_tool("delete") holds (src/iwork_studio/mcp_server.py:574) — typically when a key or option is configured. They are part of the server's surface and were analysed; a server started without that configuration exposes only the other 44.
1 of the 65 recovered tools are registered only when _slide_tool("move") holds (src/iwork_studio/mcp_server.py:582) — typically when a key or option is configured. They are part of the server's surface and were analysed; a server started without that configuration exposes only the other 44.
1 of the 65 recovered tools are registered only when _slide_tool("skip") holds (src/iwork_studio/mcp_server.py:590) — typically when a key or option is configured. They are part of the server's surface and were analysed; a server started without that configuration exposes only the other 44.
1 of the 65 recovered tools are registered only when _slide_tool("notes") holds (src/iwork_studio/mcp_server.py:598) — typically when a key or option is configured. They are part of the server's surface and were analysed; a server started without that configuration exposes only the other 44.
15 of the 65 recovered tools are registered only when keynote_slides.slide_ops_enabled() holds (src/iwork_studio/mcp_server.py:868) — typically when a key or option is configured. They are part of the server's surface and were analysed; a server started without that configuration exposes only the other 44.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. high is the level these add up to.
44 tools are registered unconditionally · (1) 1 more only when _slide_tool("add") holds (src/iwork_studio/mcp_server.py:558) · (2) 1 more only when _slide_tool("duplicate") holds (src/iwork_studio/mcp_server.py:566) · (3) 1 more only when _slide_tool("delete") holds (src/iwork_studio/mcp_server.py:574) · (4) 1 more only when _slide_tool("move") holds (src/iwork_studio/mcp_server.py:582) · (5) 1 more only when _slide_tool("skip") holds (src/iwork_studio/mcp_server.py:590) · (6) 1 more only when _slide_tool("notes") holds (src/iwork_studio/mcp_server.py:598) · (7) 15 more only when keynote_slides.slide_ops_enabled() holds (src/iwork_studio/mcp_server.py:868) — typically when a key or option is configured. All 65 are in the table below and were analysed; the conditional ones are marked.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| iwork_capabilities | no tags | |
| iwork_samples | no tags | |
| iwork_read | no tags | |
| iwork_list_backups | no tags | |
| pages_preflight | no tags | |
| iwork_verify_format | no tags | |
| iwork_verify_render | no tags | |
| numbers_edit_cell | no tags | |
| numbers_inspect_format | no tags | |
| numbers_set_dimensions | no tags | |
| numbers_set_number_format | no tags | |
| numbers_set_cell_style | no tags | |
| numbers_set_borders | no tags | |
| numbers_set_headers | no tags | |
| numbers_merge_cells | no tags | |
| keynote_replace_text | no tags | |
| pages_replace_all | no tags | |
| pages_set_body | no tags | |
| iwork_restore_backup | no tags | |
| keynote_add_slide conditional (1) | no tags | |
| keynote_duplicate_slide conditional (2) | no tags | |
| keynote_delete_slide conditional (3) | no tags | |
| keynote_move_slide conditional (4) | no tags | |
| keynote_skip_slide conditional (5) | no tags | |
| keynote_set_presenter_notes conditional (6) | no tags | |
| iwork_export | no tags | |
| iwork_metadata | no tags | |
| iwork_thumbnail | no tags | |
| iwork_find | no tags | |
| iwork_list_design_kits | no tags | |
| iwork_extract_design_kit | no tags | |
| iwork_save_design_kit | no tags | |
| iwork_delete_design_kit | no tags | |
| numbers_apply_design | no tags | |
| iwork_list_templates | no tags | |
| numbers_create | no tags | |
| numbers_import_csv | no tags | |
| numbers_insert | no tags | |
| numbers_delete | no tags | |
| numbers_add_table | no tags | |
| iwork_create_from_template | no tags | |
| iwork_create | no tags | |
| numbers_set_formula | no tags | |
| numbers_recalculate | no tags | |
| numbers_sort | no tags | |
| pages_list_placeholders | no tags | |
| pages_fill_placeholders | no tags | |
| pages_read_tables | no tags | |
| pages_set_table_cells | no tags | |
| keynote_slideshow | no tags | |
| keynote_list_slides conditional (7) | no tags | |
| keynote_list_themes conditional (7) | no tags | |
| keynote_inspect_style conditional (7) | no tags | |
| keynote_set_theme conditional (7) | no tags | |
| keynote_set_slide_layout conditional (7) | no tags | |
| keynote_format_text conditional (7) | no tags | |
| keynote_set_transition conditional (7) | no tags | |
| keynote_build_deck conditional (7) | no tags | |
| keynote_add_table conditional (7) | no tags | |
| keynote_review_deck conditional (7) | no tags | |
| keynote_slide_image conditional (7) | no tags | |
| keynote_apply_design conditional (7) | no tags | |
| keynote_set_slide_text conditional (7) | no tags | |
| keynote_add_chart conditional (7) | no tags | |
| keynote_add_image conditional (7) | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 2.6.1. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
- The version this listing was on when mcprush began following its releases. The registry was not asked when it shipped, so this row carries no date.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish iWork Studio can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.