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 開工)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions