AI-agent-native PPT generation server. Korean-language-first. MCP-ready.
한국어 README · Built on ppt-master by Hugo He (MIT)
edit2ppt is an AI-agent-native PPTX engine: generate decks from a one-line
intent, chat-edit existing files slide by slide, render previews, and patch
text deterministically — all producing real, natively editable PowerPoint.
Use it four ways (same engine, pick your surface):
pip install edit2ppt # library + agent tools + local MCP
pip install "edit2ppt[server]" # + the hosted multi-tenant servicefrom edit2ppt import generate_pptx, edit_pptx, preview_pptx, set_pptx_text, analyze_pptx
generate_pptx("Q3 영업 결과 임원 보고", output="deck.pptx") # intent → deck
r = edit_pptx("deck.pptx", "3번 슬라이드 제목을 'Q3 요약'으로 바꿔줘") # one chat turn
svgs = preview_pptx(r.path) # slides → SVG
info = analyze_pptx(r.path) # text outline + addresses
set_pptx_text(r.path, [{"slide": 0, "shape_id": 2, "para": 0,
"new_text": "새 제목"}]) # no-LLM, instantBYOK: api_key=... or ANTHROPIC_API_KEY. preview/set_text/analyze need no key.
from edit2ppt.agent_tools import ANTHROPIC_TOOLS, run_tool
msg = client.messages.create(model="claude-opus-4-7", tools=ANTHROPIC_TOOLS, ...)
for block in msg.content:
if block.type == "tool_use":
result = run_tool(block.name, block.input)Five tools over local files: generate_pptx, edit_pptx, preview_pptx,
set_pptx_text, analyze_pptx. No database, no storage, no server.
edit2ppt serve runs the FastAPI service (REST + SSE jobs + hosted MCP) that
powers the web studio — multi-tenant assets,
job queue, S3-compatible storage.
Two things make it different from ppt-master:
- Agent-native at every layer. The same stateless tool functions back the library, the function-calling schemas, both MCP servers and the hosted API.
- Korean-native. Hangul text width, Korean fonts, OOXML
lang="ko-KR", bilingual error messages, and Korean layout templates ship out of the box.
Upload any .pptx via POST /v1/assets (or the MCP upload_source tool) and
pass its id as template_asset_id on generate-deck:
deck_mode: "template_restyle"— a fresh deck built inside your package: your slide masters, layouts, theme colors and fonts are preserved (background chrome / logos render behind every generated slide); the original slides are removed. The Strategist receives a deterministic analysis of your theme (colors / fonts / canvas / tone samples) and designs to match it.deck_mode: "template_extend"— the generated slides (native DrawingML shapes, charts, icons and SVG-derived graphics) are appended after your existing slides, so the deck grows in place.
16:9 and 4:3 templates are supported; generated coordinates are rescaled to the host deck's exact slide dimensions.
Two endpoints power the web studio's "PPT 같이 만들기" (and are exposed over
MCP as edit_deck):
POST /v1/preview— deterministic, synchronous: every slide rendered to a self-contained SVG (masters/layouts inlined, images base64-embedded) for browser display.POST /v1/jobs/edit-deck— one chat turn: an LLM planner turns the instruction + deck outline into slide-level operations (edit / add / delete), one LLM call per touched slide rewrites its SVG, then a deterministic recompose splices the result back into the package. Untouched slides keep their identity (ids, notes, animations). Each turn produces a new pptx asset; the prior revision is preserved. Question-only turns answer in chat without changing the deck.
External Agent (Claude / Cursor / your bot)
│ MCP (HTTP+SSE)
▼
┌─────────────────────────────────────────────────┐
│ edit2ppt server │
│ MCP routes ─┐ │
│ REST routes ─┤── Job queue (arq + Redis) ──┐ │
│ │ │ │
│ ▼ ▼ │
│ Tool functions (Python) Workers │
│ │ │ │
│ ▼ ▼ │
│ Core engine (ppt-master fork + Korean patches) │
│ │
│ PostgreSQL · Object storage (S3) · Redis │
└─────────────────────────────────────────────────┘
See ppt-master-analysis/ for the full design dossier
(philosophy, pipeline, gap analysis, integration plan, roadmap, conventions).
| Milestone | What works | What's coming |
|---|---|---|
| M0 | Package skeleton, i18n catalog, FastAPI scaffold, health endpoint, ASCII-paths lint | — |
| M1 | Core engine in src/edit2ppt/core/, Chinese assets renamed to English, G1/G2/G3 Korean Critical patches + 66 unit tests pass |
— |
| M2 | Layer 2 Tool functions (convert/strategize/execute/quality/export/audio) + Anthropic SDK BYOK + 1-shot generate_deck orchestrator + 77 tests |
— |
| M3 | docker-compose.yml + Postgres/Redis/MinIO + SQLAlchemy + Alembic + S3 storage + Korean filename roundtrip + Asset/Job/SSE endpoints + 119 tests |
— |
| M4 | MCP server (stdio + HTTP+SSE + Streamable HTTP) with list_templates, list_voices, upload_source, get_asset, download_url, generate_deck (with progress notifications) + Claude Desktop / Cursor guide + 149 tests |
— |
| M5 | — | Korean prompts/templates (*.ko.md) |
| M6 | — | Auth / multi-tenant / observability |
| M7 | — | Korean layout templates + branding |
Two tracks, strictly separated:
| Track | Where | Language |
|---|---|---|
| A | filesystem, code identifiers, DB schema, API path, storage keys | English ASCII only |
| B | UI text, error messages, MCP tool descriptions | Korean + English, paired |
| C | user content, slide text, speaker notes, TTS | user's language, preserved |
Enforced by a pre-commit ASCII lint and a unit test. See
ppt-master-analysis/06-bilingual-conventions.md.
Once docker compose up -d is running and the dev server is up, agents
(Claude Desktop, Cursor, etc.) can connect over either transport.
Local stdio — agent launches edit2ppt as a subprocess:
{
"mcpServers": {
"edit2ppt": {
"command": "/path/to/edit2ppt/.venv/bin/python",
"args": ["-m", "edit2ppt.mcp.stdio_main"]
}
}
}Remote HTTP — agent calls https://your-host/mcp (Streamable HTTP) or
/mcp-sse/sse (legacy SSE). See docs/mcp-clients.md
for full configuration including BYOK + auth headers.
Requires Python 3.11+. Use uv for fast
dependency management.
# Create env + install deps
uv venv .venv
uv pip install --python .venv/bin/python -e .[dev]
# Run tests
.venv/bin/python -m pytest
# ASCII path lint
.venv/bin/python scripts/lint_ascii_paths.py
# Run dev server (once dependencies are installed)
.venv/bin/python -m edit2ppt.cli serve --reload
# → http://localhost:8000/health
# → http://localhost:8000/v1/messages/sample (with Accept-Language: ko-KR)MIT. Built on top of ppt-master by Hugo He, also MIT-licensed. Attribution preserved.
- ppt-master — the SVG-to-OOXML conversion engine that powers our Layer 1.
- SVG Repo · Tabler Icons · Simple Icons · Phosphor Icons — icon libraries inherited from ppt-master.