slideshot-mcp
# slideshot
<!-- mcp-name: io.github.06ketan/slideshot -->
[](https://www.npmjs.com/package/slideshot)
[](https://www.npmjs.com/package/slideshot)
[](https://www.npmjs.com/package/slideshot-mcp)
[](https://github.com/06ketan/slideshot)
[](LICENSE)
[](https://modelcontextprotocol.io)
[](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.06ketan/slideshot)
[](https://github.com/06ketan/slideshot/releases/latest)
[](https://glama.ai/mcp/servers/06ketan/slideshot)
[](https://lobehub.com/mcp/06ketan-slideshot)
<a href="https://glama.ai/mcp/servers/06ketan/slideshot">
<img width="380" height="200" src="https://glama.ai/mcp/servers/06ketan/slideshot/badges/card.svg" alt="slideshot MCP server card on Glama" />
</a>
Convert AI-generated HTML carousels into high-res PNG, WebP, PDF, and PPTX — via **CLI**, **Web App**, **MCP Server** (Cursor MCP, Claude MCP, OpenCode MCP), or **REST API**.
**[Web App](https://slideshot.vercel.app)** · **[npm CLI](https://www.npmjs.com/package/slideshot)** · **[npm MCP](https://www.npmjs.com/package/slideshot-mcp)** · **[API Spec](https://slideshot.vercel.app/api/openapi.json)**
### Wrong install?
The MCP package name is **`slideshot-mcp`** on npm ([canonical Glama listing](https://glama.ai/mcp/servers/06ketan/slideshot)). Use `npx -y slideshot-mcp` — not unrelated `html-to-slides` or third-party scoped copies from generic searches.
## Works with (MCP)
Discovery-oriented table — **verify each host’s current MCP docs** before upgrading.
### Open source–oriented hosts
| Host | Documentation | Typical wire-up |
|------|---------------|-----------------|
| **OpenCode** | [OpenCode MCP servers](https://open-code.ai/en/docs/mcp-servers) | See [OpenCode](#opencode) below |
| **Continue** | [Continue](https://docs.continue.dev) | Add stdio MCP pointing at `npx` / `slideshot-mcp` per Continue docs |
| **Zed** | [Zed](https://zed.dev/docs) | Stdio MCP per Zed |
| **Cline** | [Cline](https://github.com/cline/cline) | Extension MCP docs |
| **Goose** | [Goose](https://block.github.io/goose/) | MCP extensions per Goose |
### Large commercial stacks
| Host | Documentation | Typical wire-up |
|------|---------------|-----------------|
| **Cursor** | [Cursor MCP](https://docs.cursor.com/context/model-context-protocol) | `.cursor/mcp.json` — see [MCP Server](#mcp-server) |
| **Claude** (Desktop / Code) | [Claude Desktop](https://support.anthropic.com/en/articles/10065433-installing-claude-for-desktop), [Claude Code](https://docs.claude.com/en/docs/claude-code) | Claude Desktop JSON or `claude mcp add` |
| **GitHub Copilot** | [Copilot](https://docs.github.com/en/copilot) | MCP in VS Code where enabled |
| **ChatGPT** | [OpenAI](https://platform.openai.com/docs) | Prefer REST (`/api/openapi.json`) where MCP is unavailable |
| **Google Gemini** | [Gemini](https://ai.google.dev/docs) | Gemini IDE / CLI MCP when supported — else REST |
## Architecture
```
slideshot/
packages/
cli/ ← Core Puppeteer rendering engine + CLI
mcp-server/ ← MCP stdio server for AI tools
webapp/ ← Next.js web app with live preview
prompts/
generic.md ← Clean minimal
branded.md ← Ketan Slides design system
instagram-carousel.md ← Bold vibrant IG style
infographic.md ← Data-heavy charts
pitch-deck.md ← Professional presentations
dark-modern.md ← Neon glassmorphism
editorial.md ← Magazine serif
```
## Quick Start
### CLI
```bash
npx slideshot ./my-carousel.html --formats png,webp,pdf --scale 4
```
**Options:**
| Flag | Default | Description |
|------|---------|-------------|
| `-s, --selector` | `.slide` | CSS selector for slide elements |
| `-W, --width` | `540` | Slide width (CSS px) |
| `-H, --height` | `675` | Slide height (CSS px) |
| `--scale` | `4` | Device scale (4x = 2160x2700) |
| `-f, --formats` | `png,webp,pdf` | Output formats (png, webp, pdf, pptx) |
| `-q, --quality` | `95` | WebP quality (0-100) |
| `-o, --out` | `./slides` | Output directory |
### Web App
**Live:** [slideshot.vercel.app](https://slideshot.vercel.app)
Or run locally:
```bash
cd packages/webapp && npm install && npm run dev
```
Open `http://localhost:3000` — paste HTML, preview, export.
### MCP Server
Add to Cursor, Claude Desktop, Claude Code, or any stdio MCP host. Published as **[slideshot-mcp](https://www.npmjs.com/package/slideshot-mcp)** on npm.
**Cursor / Claude Desktop** (`mcpServers`):
```json
{
"mcpServers": {
"slideshot": {
"command": "npx",
"args": ["-y", "slideshot-mcp"]
}
}
}
```
Optional pin: `"args": ["-y", "slideshot-mcp@4.4.0"]` (replace with current npm version).
#### OpenCode
`~/.config/opencode/opencode.json`:
```json
{
"mcp": {
"slideshot": {
"type": "local",
"command": ["npx", "-y", "slideshot-mcp"],
"enabled": true
}
}
}
```
**Tools:**
- `create_slides` — guided creation workflow with 7 themes and output presets
- `render_html_to_images` — render HTML to PNG/WebP/PDF/PPTX
- `get_slide_prompt` — get AI prompt template for any theme variant
- `health_check` — verify Puppeteer/Chromium availability
**Prompts (7 themes):**
- `generic-slides` — clean minimal
- `branded-slides` — Ketan Slides design system
- `instagram-carousel-slides` — bold vibrant IG style
- `infographic-slides` — data-heavy charts and stats
- `pitch-deck-slides` — professional presentations
- `dark-modern-slides` — neon glassmorphism
- `editorial-slides` — magazine serif with gold accents
### REST API (ChatGPT Actions / OpenWebUI)
The web app exposes an OpenAPI-compatible REST API at `https://slideshot.vercel.app`.
**Endpoints:**
| Method | Path | Description |
|--------|------|-------------|
| `POST` | `/api/render` | Render HTML slides to PNG/WebP/PDF (returns ZIP) |
| `GET` | `/api/prompt?variant=generic` | Get AI prompt template |
| `GET` | `/api/openapi.json` | OpenAPI 3.1.0 spec |
**Platform support:**
| Platform | Method | Setup |
|----------|--------|-------|
| Cursor | MCP | `npx slideshot-mcp` in `.cursor/mcp.json` |
| Claude Desktop | MCP | `npx slideshot-mcp` in config |
| OpenCode | MCP | `opencode.json` `mcp.slideshot` → `["npx","-y","slideshot-mcp"]` |
| Continue | MCP | stdio → `npx` / `slideshot-mcp` per Continue docs |
| ChatGPT | OpenAPI Action | Import `/api/openapi.json` |
| OpenWebUI | OpenAPI Tool | Import `/api/openapi.json` |
## AI Prompt Templates
7 prompt variants in `prompts/` — copy-paste or use via `get_slide_prompt` tool:
| Variant | File | Style |
|---------|------|-------|
| Generic | `prompts/generic.md` | Clean minimal, Inter font |
| Branded | `prompts/branded.md` | Space Mono, teal/coral accents |
| Instagram | `prompts/instagram-carousel.md` | Bold gradients, Poppins |
| Infographic | `prompts/infographic.md` | DM Sans, stat cards |
| Pitch Deck | `prompts/pitch-deck.md` | Professional, KPI cards |
| Dark Modern | `prompts/dark-modern.md` | Neon, glassmorphism |
| Editorial | `prompts/editorial.md` | Playfair Display, gold |
## Build All
```bash
npm install # from root — installs all workspaces
npm run build # builds cli → mcp-server
cd packages/webapp && npm run build # builds webapp separately
```
## Links
| Surface | URL |
|---------|-----|
| Web App | [slideshot.vercel.app](https://slideshot.vercel.app) |
| npm CLI | [npmjs.com/package/slideshot](https://www.npmjs.com/package/slideshot) |
| npm MCP | [npmjs.com/package/slideshot-mcp](https://www.npmjs.com/package/slideshot-mcp) |
| GitHub | [github.com/06ketan/slideshot](https://github.com/06ketan/slideshot) |
| API Spec | [slideshot.vercel.app/api/openapi.json](https://slideshot.vercel.app/api/openapi.json) |
## Related MCPs
- **[medium-ops](https://github.com/06ketan/medium-ops)** — Medium CLI + MCP (PyPI).
- **[substack-ops](https://github.com/06ketan/substack-ops)** — Substack CLI + MCP (PyPI).
## License
TDQS
Scored across 6 tools
All tools have distinct responsibilities, but discover_themes and list_themes both surface the theme catalog and could be confused if an agent only glances at names; the descriptions do clarify that one is a mandatory workflow bootstrap and the other is a read-only listing. create_slides, edit_slides, and render_slides are otherwise cleanly separated by operation.
Most names follow the verb_noun snake_case pattern consistently: discover_themes, create_slides, render_slides, list_themes, edit_slides. health_check breaks the pattern slightly by being a noun phrase rather than a verb-first command, though it remains simple and readable.
Six tools is a well-scoped count for a slide-generation and rendering server: health check, theme discovery, theme listing, create, render, and edit. Each tool has a clear role, and none feels like unnecessary surface area.
The core lifecycle is covered: discover themes, create slides, render to output formats, and apply token-efficient partial edits. Minor gaps exist, like no explicit slide deletion or no tool to inspect a previously generated deck's structure, but most workflows can be completed without them.