Skip to content

feature: che-keynote-mcp — Swift-native Keynote MCP server(NSAppleScript 路線;references 先行) #140

Description

@kiki830621

Problem

Original text:
「我想要做che-keynote-mcp ,你可以先派sonnet deep search目前有的mcp,下載進che-keynote-mcp的references之後再來做」
— Source: 使用者 session 指示(2026-07-18)

che-mcps 家族已覆蓋 Word(che-word-mcp 245 tools)、PPTX(che-pptx-mcp)、PDF(che-pdf-mcp),缺 Apple Keynote surface。目標:建立 Swift-native 的 che-keynote-mcp,讓 Claude 能建立/編輯/匯出 Keynote 簡報。前置:先完成現有生態 deep search(已完成,見下)並把參考 repo 下載進新 repo 的 references/ 再開工。

Type

feature

Expected

  1. 新 repo PsychQuant/che-keynote-mcp:Swift binary MCP server,走 che-mcps 標準 pipeline(Developer ID sign + notarize、mcpb、macdoc marketplace 發布)
  2. references/ 含 deep search 選定的參考 repo(clone-on-demand、僅 README 入版控——沿 macdoc reference/ 慣例)
  3. v1 tool surface:AppleScript 能力邊界內的 Keynote 驅動(簡報/slide CRUD、文字、圖片、匯出 PDF/images)

Research Summary(sonnet deep search,2026-07-18;完整報告見附件)

Top-5 reference 候選

# Repo Verdict
1 PsychQuant/che-logic-pro-mcp 家族內先例、最佳起手骨架——已驗證 NSAppleScript(in-process)+ actor 架構 + Developer ID 簽章
2 obriensp/iWorkFileFormat .key/IWA/Protobuf 格式逆向文件,理解 iWork 檔案結構的第一手資料
3 psobot/keynote-parser 最成熟的 .key round-trip 實作(Python/MIT/206★);「從本機 Keynote.app 動態萃取 Protobuf schema」方法論值得參考
4 6over3/WorkKit 唯一 Swift-native iWork parser(visitor pattern 可讀)——⚠️ AGPL-3.0 與封閉發布衝突,只讀不依賴
5 josephyooo/keynote-cli AppleScript 能力邊界踩坑清單(shape fill/equation/hyperlink 打不到、並發不安全)——risk register 比程式碼更值得抄進設計

技術路線建議(研究報告結論):

驅動 Keynote 採 NSAppleScript(in-process,com.apple.security.automation.apple-events entitlement + NSAppleEventsUsageDescription)而非社群常見的 shell-out osascript——Apple DTS 官方建議路徑(TCC 歸因正確),且 che-logic-pro-mcp 已在 che-mcps 簽章/公證 pipeline 下驗證可行。che-keynote-mcp 會是生態系中第一個 Swift-native、走此路徑的 Keynote MCP(現有 Keynote MCP 全是 Python/TS 包裝 osascript)。.key 直接解析(IWA/Protobuf)列 v2+ 評估項而非 v1 主幹——Apple 不定期改 schema,版本相容性是結構性負擔。

實作路線 sketch(由後續 /idd-diagnose 正式化)

  1. 建 repo + scaffold:以 che-logic-pro-mcp 為骨架(NSAppleScript in-process + actor;Entitlements 加 apple-events;sign pipeline 用 che-mcps-notary profile)
  2. references/ 下載上表 2/3/5(WorkKit 因 AGPL 只在報告中引用結論,不 clone 進發布 repo)+ README-only tracked
  3. v1 tool surface 依 keynote-cli 的能力邊界清單界定(明確列「AppleScript 打不到」的誠實邊界進 tool descriptions)
  4. macOS 26 TCC:AppleEvents 是 TCC-protected —— ad-hoc 簽章不可行,first release 前跑 ./scripts/audit-security.sh(common-release-flow 新 repo gate)

Impact

  • 新 repo PsychQuant/che-keynote-mcp(Swift Package + mcpb)
  • macdoc marketplace:新 plugin entry(plugins/che-keynote-mcp/ shell + marketplace.json)
  • 無既有程式碼變更

Attachments

Clarity Surface(idd-clarify run 2026-07-18T14:38:28Z)

Type Source Suggested canonical Status
ambiguity "v1 tool surface:AppleScript 能力邊界內的 Keynote 驅動(簡報/slide CRUD、文字、圖片、匯出 PDF/images)" v1 具體 tool 清單未列舉——CRUD 覆蓋哪些操作(new/delete/reorder slide?master/theme 選擇?speaker notes?)、匯出格式範圍(PDF/PNG/QuickTime?)需在 diagnose 界定 resolved @ 2026-07-18T22:24:36Z (reason: user 拍板——由 diagnose 依研究報告(keynote-cli 能力邊界 + AppleScript dictionary)界定 v1 清單,寫進 Strategy)
missing-context "AppleScript 能力邊界內" 目標 baseline 未指定:支援的 macOS/Keynote 最低版本(AppleScript dictionary 隨版本變動,keynote-cli 的踩坑清單對應的版本也需對齊) resolved @ 2026-07-18T22:24:36Z (reason: user 拍板——baseline = macOS 26 + 當前 Mac App Store Keynote,以維護者機實測為準;舊版不保證)

Current Status

  • Phase: diagnosed(2026-07-19;https://github.com/PsychQuant/macdoc/issues/140#issuecomment-5013162485)
  • Complexity: Spectra(Layer 2:新 published MCP tool surface ~22 tools;Layer 3:NSAppleScript 架構選型 + v1/v2 邊界為長期結構決策)
  • Clarity: 2 rows resolved(v1 清單由 diagnose 界定;baseline = macOS 26 + 當前 Keynote)
  • Conflict Class: A_parallel_safe(新 repo;僅 ship 段觸 macdoc marketplace.json)
  • Spectra change: che-keynote-mcp(proposal/design/spec/tasks 完成並 parked,2026-07-19;/spectra-apply che-keynote-mcp 開工)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions