Agent-first slide deck rendering engine. Agents author each slide as HTML/CSS/JS; Deckpipe renders it inside a sandboxed 1920×1080 shadow root, themes it via deck-level CSS variables, gives every deck a shareable viewer URL, and supports threaded commenting from collaborators.
- Hosted: deckpipe.dev
- Remote MCP:
https://deckpipe.dev/mcp(Streamable HTTP) - Stdio MCP:
npx deckpipe-mcp
An agent calls create_deck with HTML, CSS, and (optionally) JS for each slide:
{
"title": "Q2 Launch",
"heading_font": "Fraunces",
"stylesheet": ".hero { font-family: var(--dp-font-heading); font-size: 96px; color: #0f172a; }",
"slides": [
{
"layout": "canvas",
"content": {
"html": "<h1 class=\"hero\" data-dp-anchor=\"title\">Q2 launch</h1>",
"js": "slide.querySelector('h1').animate([{opacity:0},{opacity:1}], 600);"
}
}
]
}Each slide mounts in an open shadow root, so CSS is auto-scoped — no BEM, no class prefixes. Deck-level stylesheet is adopted by every slide, so a design system written once shows up everywhere. CSS custom properties (--dp-font-heading, --dp-font-body) are forwarded into every slide so font choices stay consistent.
Reviewers open the viewer URL and can comment on any DOM element (auto-anchored via data-dp-anchor for stability across edits). The agent reads those comments via MCP, edits the deck, and replies — full collaborative loop without humans touching JSON.
The hosted instance at deckpipe.dev is free and unauthenticated — decks are addressed by unguessable IDs. You can also self-host the whole stack.
Add https://deckpipe.dev/mcp as a custom remote MCP server. No auth.
claude mcp add deckpipe -- npx deckpipe-mcp{
"mcpServers": {
"deckpipe": {
"command": "npx",
"args": ["-y", "deckpipe-mcp"]
}
}
}Then ask the agent to "build a deck about X". The agent gets back a viewer URL you can open and comment on.
git clone https://github.com/bjoern2000/deckpipe
cd deckpipe
npm install
cp .env.example .env # set DATABASE_URL, PORT, IMAGE_STORAGE_PATH, etc.
npm run db:migrate # apply SQL migrations (local Postgres)
npm run dev # API on :3010, viewer on :5173
npm run build # production builds for all packagesPoint your MCP client at http://localhost:3010/mcp, or run the stdio shim with DECKPIPE_API_URL=http://localhost:3010 npx deckpipe-mcp.
This is a single Node.js / TypeScript monorepo (npm workspaces). Five packages:
| Package | What |
|---|---|
packages/shared |
Zod schemas, types, ID generators. Source of truth for the data model. |
packages/mcp-core |
MCP tool definitions (registerTools, INSTRUCTIONS). Imported by both MCP transports — single source of truth. |
packages/api |
Express REST API on /v1/* plus the remote MCP transport at /mcp. PostgreSQL with JSONB. |
packages/viewer |
Lit web components. Renders canvas slides into shadow roots, handles edit mode, comment overlay, presenter/print modes. |
packages/mcp |
Standalone npm package deckpipe-mcp — stdio + HTTP transports for local agents. Pure transport plumbing, calls into mcp-core. |
Tools (MCP):
| Tool | Description |
|---|---|
create_deck |
Create a new deck, get a shareable viewer URL. |
get_deck |
Read deck state including open comments. |
update_deck |
Edit slide content, restructure slides, change theme. |
delete_deck |
Permanently delete a deck. |
upload_image |
Upload base64 PNG/JPG/WebP, get a hosted URL. |
search_images |
Unsplash search with automatic attribution + download tracking. |
preview_slide |
Render a transient slide (no persistence) and return a screenshot + render report. |
get_slide_screenshot |
Render a specific slide of an existing deck. Cached on updated_at. |
list_layouts |
Describe the canvas layout and deck-level theming options. |
list_comments |
List comments on a deck (filter by status, slide, since-timestamp). |
reply_to_comment |
Reply to a comment thread. |
resolve_comment |
Mark a comment as resolved. |
A note on layouts: Deckpipe 0.2 had 25 templated layouts (title_and_bullets, stats, swot, etc.). They're now deprecated for new content — canvas is the only layout the MCP advertises. Existing decks using templated layouts still render unchanged, and the schema still accepts them. See CLAUDE.md → "Resurrecting deprecated layouts" for the steps to re-enable them on the MCP surface.
Issues and pull requests welcome. Before sending substantial changes, please open an issue to discuss the approach.
This project will eventually require a Contributor License Agreement (CLA) so contributions can be relicensed alongside the auto-conversion to Apache 2.0 in 2030. For now, every PR is reviewed by hand and small contributions are accepted under the file's existing license.
FSL-1.1-Apache-2.0 — Functional Source License, Version 1.1, Apache 2.0 Future License.
Free for: self-hosting, internal use, education, research, and any non-competing use. Prohibited until 2030-05-11: offering Deckpipe (or a substantially-similar service) as a commercial hosted product to third parties. After the change date the entire repository auto-converts to Apache 2.0.
"Deckpipe" is a trademark held separately. Forks must rename.
Copyright © 2026 Björn Schefzyk.