Problem
Original request:
「可以再 macdoc 裡面提議可以做 che-pptx-mcp 與 swift 腳本的使用方式嗎?現在用 python 是不是其實難控制,但可以再那裡的 references 參考 python 套件」
— Source: 使用者對話(建構 gukai 專案 spondylodiscitis_taoyuan_6min.pptx 過程中觀察到的痛點)
Type
feature / docs(提案文件;實作工具留給後續 issue 拆分)
Motivation
實際痛點來自最近用 python-pptx 建一份 8 張投影片的醫院模板簡報(顧凱鈞 spondylodiscitis 報告):
- 字級、圖片 box、placeholder 座標改一輪就要 rebuild → 開 Keynote → export PDF → 讀圖確認,iteration 成本高
- python-pptx 的 placeholder API 是「讀到的 XML 原封不動」,沒有 model layer;要調圖片 aspect / box 得自己算 EMU
- Python 跟 Keynote 的字體渲染不一致(macOS 只能靠 Keynote / PowerPoint export 才能看到真實結果)
- 與此對照,
che-word-mcp (146 tools, v1.17) 在 docx 上的體驗是「tool call 即改即生效、可直接在 session 內 finalize」
che-pptx-mcp 目前是 v0.1.0、約 45 tools(見 mcp/che-pptx-mcp/Sources/ChePPTXMCP/Server.swift),底下的 packages/pptx-swift 已經有 Models / IO / Errors 結構,距離「pptx 版的 che-word-mcp」只差工具覆蓋度與高層 API。
Proposal
1. 擴充 che-pptx-mcp 往 che-word-mcp 的成熟度靠攏
照 che-word-mcp 的 Dual-Mode(source_path direct / doc_id session)同一條路走,重點補齊以下工具族:
Layout / Geometry(最痛的一塊)
- `set_placeholder_geometry(doc_id, slide_idx, ph_idx, left_cm, top_cm, width_cm, height_cm)` — 用 cm 不用 EMU
- `place_picture_at(doc_id, slide_idx, img_path, left_cm, top_cm, width_cm, height_cm, fit: "contain"|"cover"|"stretch")` — 預設 contain + aspect-match
- `fit_picture_to_native_aspect(doc_id, slide_idx, img_path, anchor: "left"|"right"|"center", max_width_cm, max_height_cm)` — 自動照原生 aspect 算 box(Python 版現在得自己寫)
Text runs(bullet 加粗/變色/改字級)
- `add_rich_bullet(doc_id, slide_idx, ph_idx, segments: [(text, bold?, color?, size?)])`
- `set_run_style(doc_id, slide_idx, shape_id, run_idx, ...)`
Template handling
- `list_slide_masters` / `list_slide_layouts` / `add_slide_from_layout(master_idx, layout_idx)`
- `delete_all_slides_preserve_masters` — 從模板只保留版型常用操作
- `copy_slide_from(source_path, slide_idx)`
Notes / presenter
- `set_notes(doc_id, slide_idx, text)` / `get_notes(...)`
- `export_notes_markdown(source_path)` — 對照 che-word-mcp 的 `export_markdown`
Export / preview
- `export_pdf(doc_id, output_path)` — 透過 Keynote AppleScript 或 LibreOffice
- `render_slide_png(doc_id, slide_idx, output_path, dpi)` — 給 LLM 回饋 loop
2. Swift 腳本 (macdoc/scripts/) 的使用方式文件化
提議在 `scripts/` 下加 `pptx/` 子目錄,放常見 workflow 的範例腳本:
- `build-from-template.swift` — 從模板建簡報的樣板(對標 gukai 用的 `build_taoyuan_slides.py`)
- `figures-to-aspect-boxes.swift` — 讀圖片算出每張投影片的最佳 box 尺寸
- `sync-notes-from-markdown.swift` — 從 .md 講稿批次寫入備忘稿
並在 `CONVERSIONS.md` 或新建 `PPTX.md` 文件記錄:
- 何時用 MCP tool / 何時用腳本
- 字體 / 尺寸單位 (cm vs EMU vs Pt) 的 convention
3. references/ 放 python-pptx 當參考實作
macdoc 的 `references/` 目前只有 `swift-argument-parser` 跟 `textutil-manpage.txt`。提議加入:
- `references/python-pptx/` — clone scanny/python-pptx 作為 API design 對照(不是 runtime 依賴,純看它的 Model 抽象、placeholder 操作、圖片插入等處理方式)
- `references/python-docx/` — 同上,跟 che-word-mcp 對照
動機:Swift-native 版本要決定哪些 API 要抽高、哪些要攤平,成熟的 Python 套件是現成的 reference design。
Expected
- `che-pptx-mcp` 工具數接近 `che-word-mcp`(目標 80+ tools,涵蓋 geometry / text / template / notes / export)
- Swift 腳本有明確 entry point 與範例,跟 MCP tool 的使用界線清楚
- `references/python-pptx` 作為設計決策的對照資料
Actual (現況)
- `che-pptx-mcp` v0.1.0,~45 tools,缺 geometry-by-cm / rich runs / export 等高頻需求
- `scripts/` 只有 `build-metallib.sh`,沒有 pptx workflow 範例
- `references/` 沒有 python-pptx 可對照
Impact
- 免去「改字級 → rebuild → Keynote export → 讀 PDF」的 Python iteration 成本
- 讓 gukai 類型的「論文 → 醫院模板簡報」這種 workflow 在 macdoc 生態內一站解決
- che-pptx-mcp 朝著跟 che-word-mcp 一樣成熟的方向演進,兩個 MCP 的 API 風格對齊更好維護
Priority
P2(排程 / 本季內規劃)— 現況 Python 能 work-around,但痛點真實;建議按工具族拆成多個子 issues 逐步推進。
Next Steps Suggested
此 issue 作為 umbrella proposal。實作時建議拆成:
- 補 geometry 工具族
- 補 text runs / rich bullets
- 補 notes / export
- Swift scripts + 文件
- references/ 加入 python-pptx
每一個各開子 issue 再跑 idd-diagnose / idd-implement。
Current Status
Phase: verified
Last updated: 2026-04-22 by idd-diagnose (batch)
Current Status
Phase: diagnosed
Last updated: 2026-06-01 by /idd-diagnose --rediagnose (sister-sweep from #92 errata)
Key Decisions
Scope Changes
Blocking
Commits
- (none for this issue yet)
Problem
Type
feature / docs(提案文件;實作工具留給後續 issue 拆分)
Motivation
實際痛點來自最近用 python-pptx 建一份 8 張投影片的醫院模板簡報(顧凱鈞 spondylodiscitis 報告):
che-word-mcp(146 tools, v1.17) 在 docx 上的體驗是「tool call 即改即生效、可直接在 session 內 finalize」che-pptx-mcp目前是 v0.1.0、約 45 tools(見mcp/che-pptx-mcp/Sources/ChePPTXMCP/Server.swift),底下的packages/pptx-swift已經有 Models / IO / Errors 結構,距離「pptx 版的 che-word-mcp」只差工具覆蓋度與高層 API。Proposal
1. 擴充 che-pptx-mcp 往 che-word-mcp 的成熟度靠攏
照
che-word-mcp的 Dual-Mode(source_pathdirect /doc_idsession)同一條路走,重點補齊以下工具族:Layout / Geometry(最痛的一塊)
Text runs(bullet 加粗/變色/改字級)
Template handling
Notes / presenter
Export / preview
2. Swift 腳本 (macdoc/scripts/) 的使用方式文件化
提議在 `scripts/` 下加 `pptx/` 子目錄,放常見 workflow 的範例腳本:
並在 `CONVERSIONS.md` 或新建 `PPTX.md` 文件記錄:
3. references/ 放 python-pptx 當參考實作
macdoc 的 `references/` 目前只有 `swift-argument-parser` 跟 `textutil-manpage.txt`。提議加入:
動機:Swift-native 版本要決定哪些 API 要抽高、哪些要攤平,成熟的 Python 套件是現成的 reference design。
Expected
Actual (現況)
Impact
Priority
P2(排程 / 本季內規劃)— 現況 Python 能 work-around,但痛點真實;建議按工具族拆成多個子 issues 逐步推進。
Next Steps Suggested
此 issue 作為 umbrella proposal。實作時建議拆成:
每一個各開子 issue 再跑 idd-diagnose / idd-implement。
Current Status
Phase: verified
Last updated: 2026-04-22 by idd-diagnose (batch)
Current Status
Phase: diagnosed
Last updated: 2026-06-01 by /idd-diagnose --rediagnose (sister-sweep from #92 errata)
Key Decisions
Scope Changes
pptx-edit-isomorphism-foundation→ geometry-tools → manifest-CLI.Blocking
/spectra-discussto partition scope.PR Propose che-pptx geometry tools #95 review/merge— superseded (closed without merge 2026-05-25).Commits