An AI-optimized toolkit for reading, modifying, and generating slide decks across multiple presentation formats.
slidekit provides deterministic CLI and MCP (Model Context Protocol) interfaces for AI assistants, backed by reusable Go libraries. It enables programmatic control over presentations with a canonical data model that works across formats.
- π¦ Canonical data model - Unified representation for slides, sections, blocks, and audio metadata
- π Multi-format support - Marp Markdown (implemented), Google Slides, Reveal.js (planned)
- β‘ TOON output - Token-Optimized Object Notation for efficient AI consumption (~8x smaller than JSON)
- π Lossless round-tripping - Parse and regenerate without data loss
- π€ Speaker notes - Full support for presenter notes with SSML markers
- π LMS integration - Section-based structure for educational platform export (Udemy, Teachable)
- β Plan/Apply workflow - Safe, reviewable changes before mutation
go install github.com/grokify/slidekit/cli/cmd/slidekit@latestOr add as a dependency:
go get github.com/grokify/slidekit# Read a presentation (TOON format, optimized for AI)
slidekit read presentation.md
# Read with JSON output
slidekit read presentation.md --format json
# Plan changes (show diff)
slidekit plan presentation.md --desired updated.json
# Apply changes (requires confirmation)
slidekit apply presentation.md --diff changes.json --confirm
# Create a new presentation from JSON
echo '{"title": "My Deck", "sections": [...]}' | slidekit create new.md
# Start MCP server for AI assistant integration
slidekit serveConfigure Claude Code to use slidekit as an MCP server:
{
"mcpServers": {
"slidekit": {
"command": "/path/to/slidekit",
"args": ["serve"]
}
}
}Available MCP tools:
| Tool | Description |
|---|---|
read_deck |
Read presentation in TOON/JSON format |
list_slides |
List slide IDs and titles |
get_slide |
Get single slide by ID |
plan_changes |
Compute diff between states |
apply_changes |
Apply diff (requires confirm=true) |
create_deck |
Create new presentation |
update_slide |
Update single slide (requires confirm=true) |
package main
import (
"fmt"
"github.com/grokify/slidekit/backends/marp"
"github.com/grokify/slidekit/format"
)
func main() {
// Parse a Marp Markdown file
reader := marp.NewReader()
deck, err := reader.ReadFile("presentation.md")
if err != nil {
panic(err)
}
fmt.Printf("Title: %s\n", deck.Title)
fmt.Printf("Sections: %d\n", len(deck.Sections))
fmt.Printf("Total slides: %d\n", deck.SlideCount())
// Output in TOON format (token-optimized)
encoder := format.NewTOONEncoder()
output := encoder.EncodeDeck(deck)
fmt.Println(output)
}writer := marp.NewWriter()
err := writer.WriteFile(deck, "output.md")import "context"
backend := marp.NewBackend()
ctx := context.Background()
// Read
ref := model.Ref{Backend: "marp", Path: "deck.md"}
deck, err := backend.Read(ctx, ref)
// Plan changes
diff, err := backend.Plan(ctx, ref, modifiedDeck)
// Apply changes
err = backend.Apply(ctx, ref, diff)| Type | Description |
|---|---|
Deck |
Complete presentation with metadata, sections, and theme |
Section |
Groups slides (maps to LMS chapters) |
Slide |
Individual slide with layout, content, and notes |
Block |
Content unit (paragraph, bullet, code, image, quote, heading) |
Audio |
Audio attachment for TTS/video generation |
Diff |
Change tracking between deck states |
title- Title slidetitle_body- Title with body contenttitle_two_col- Title with two columnssection- Section dividerblank- No predefined structureimage- Full-bleed imagecomparison- Side-by-side comparison
paragraph- Plain textbullet- Bulleted list itemnumbered- Numbered list itemcode- Code block with languageimage- Image with URL and alt textquote- Block quoteheading- Subheading (levels 2-6)
TOON (Token-Optimized Object Notation) provides a compact, human-readable format optimized for AI token efficiency:
deck AI & Dev Productivity
meta author John Wang
meta date 2026-01-22
section intro
slide s1 title
title AI & Dev Productivity
subtitle Best Practices for 2026
section fundamentals
slide s2 title_body
title Why AI Matters
bullet Faster iteration
bullet Lower cognitive load
note Emphasize the productivity gains
- Phase 1: Marp Markdown reader/writer, TOON format, canonical model
- Phase 1.5: CLI and MCP server for AI assistant integration
- Phase 2: Google Slides integration (read/write/sync)
- Phase 3: Reveal.js HTML generation
- Phase 4: LMS/Video integration (Udemy export, audio assignment)
- Go 1.23 or later
go build ./...go test -v ./...golangci-lint runMIT License - see LICENSE for details.
Contributions are welcome. Please ensure:
- All tests pass (
go test -v ./...) - Linting passes (
golangci-lint run) - New code includes appropriate tests
- Commit messages follow Conventional Commits
- Marp - Markdown presentation ecosystem
- Google Slides API
- Reveal.js - HTML presentation framework
- PRD - Full product requirements document