Apple Keynote MCP Server — drives Keynote via in-process NSAppleScript. v1 covers presentation lifecycle, slide CRUD, text content, images, presenter notes, PDF/image export, and playback.
Server has 25 tools with complete input schemas and descriptions in Traditional Chinese. Naming follows verb_noun pattern consistently (create_presentation, set_slide_title, etc.). Descriptions are detailed and contextual (avg ~120 chars), exceeding the 10-char minimum. However, output schemas are not documented, tool responses are inferred from code (e.g., ToolResponse.ok(["slide_index": i, "title": t])) rather than formally declared. Parameter descriptions are present but lack explicit constraints (enums, ranges, formats). Error handling is basic (missing parameter checks) with no recovery guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications in the spec. Composition is sound, each tool has one responsibility, and tool chains are feasible (e.g., create_presentation → add_slide → set_slide_title). Security: no secrets in parameters, but no audit logging or permission gates visible.
在投影片插入本機圖片檔(路徑先驗證存在才組腳本)。回傳投影片目前的 image 數。
新增投影片(可選 layout 名稱,如 Title & Content;省略用預設 layout)。回傳 slide_index。
在投影片新增獨立文字框。回傳投影片目前的 text item 數。
關閉簡報。discard_changes: true 時不儲存直接關閉(預設會儲存)。
建立新 Keynote 簡報(可選 theme 名稱,如 White/Black/Gradient)。回傳 document_name 供後續操作。
刪除指定投影片(1-based index)。
複製指定投影片,回傳新投影片編號。
Output schemas not formally documented. Tool responses are inferred from code (ToolResponse.ok([...])) rather than declared in tool definitions. LLMs cannot predict return structure without explicit schema documentation.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications in spec (READ_ONLY, WRITE, DESTRUCTIVE, REVERSIBLE). Agents cannot distinguish safe from dangerous operations without explicit hints.
Parameter constraints not formalized. 'layout' and 'theme' accept free-form strings with no enum or pattern validation. LLMs may hallucinate invalid theme names (e.g., 'Rainbow', 'Neon') instead of valid ones (White, Black, Gradient).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
匯出簡報為圖片序列(PNG)到指定資料夾。可選 slide_index 只匯出單張(同 export_pdf 的 skipped-toggle 機制)。
匯出簡報為 PDF。可選 slide_index 只匯出單張——底層以 skipped 屬性 toggle 其他投影片再匯出,完成後還原原始 skipped 狀態(Keynote 無原生單張匯出 API)。
取得簡報資訊:名稱、投影片數、theme 名稱。
讀取投影片的 presenter notes。
取得單張投影片資訊:編號、layout、skipped、標題、text item 數、image 數。
列出目前在 Keynote 開啟的所有簡報名稱。
列出全部投影片(編號、skipped 狀態、標題)。大簡報自動批次查詢(20 張/批),非逐張 AppleEvent。
列出投影片上所有 text item 的文字內容(依 item index 順序)。
移動投影片到指定位置之前。
開啟既有 .key 簡報檔。回傳 document_name。
儲存簡報。首次儲存新簡報必須給 path(.key);已有檔案的簡報省略 path 原地儲存。
設定投影片的 presenter notes(簡報者備忘稿)。
設定投影片內文(default body item;layout 需含 body)。v1 邊界:shape 填色、slide 背景色、equation、hyperlink 插入為 AppleScript dictionary 缺口,本工具組不提供(見 docs/applescript-boundary.md)。
設定投影片 skipped(略過播放/匯出)狀態。單張匯出的底層機制也用此屬性。
設定投影片標題(default title item)。v1 邊界:shape 填色、slide 背景色、equation、hyperlink 插入為 AppleScript dictionary 缺口,本工具組不提供(見 docs/applescript-boundary.md)。
改寫投影片上指定 text item 的文字(1-based item index,順序見 list_text_items)。
從第一張開始播放簡報。
停止目前播放中的簡報。
Error handling lacks recovery guidance. Code shows basic 'missing parameter' checks (e.g., 'missing parameter: document_name / slide_index / title') but no actionable next steps or error classification (retryable vs. fatal).
No pagination support for list_slides and list_presentations. Large presentations (100+ slides) will return all results in one response, risking context window exhaustion. No limit or offset parameters.