showntell
showntell is an MCP server that lets a coding agent create, edit, finish, preview, list, and export locally narrated Markdown slide walkthroughs.
Start a walkthrough with a title and optional opening; returns a playable link once the opening is voiced, plus options for voice, theme, frame shape, speed, and project directory.
Append one to three Markdown slides at a time, supporting code, diffs, Mermaid diagrams, formulas, tables, lists, images, charts, terminal sessions, file trees, stat blocks, chat exchanges, SVG/draw.io drawings, layouts, icons, and cues.
Revise a single slide by id; only changed narration is re-voiced, and the reply can include a link that plays just that slide.
Finish a walkthrough, optionally record follow-up questions, and get a summary with remaining problems, timing, look-alike slide warnings, and render/layout checks when Playwright is available.
Preview slides as images with layout-problem reports.
Export a walkthrough as a self-contained offline HTML page or an MP4 video, with size limits and automatic shrinking for sharing.
List recent walkthroughs to retrieve handles for later revision.
Reads code and diffs from local Git repositories, including specific revisions and working tree changes, to generate grounded walkthrough slides with real line numbers.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@showntellshow me how a request gets retried in this codebase"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
showntell
Narrated slide walkthroughs for coding agents, voiced on your machine.
Ask your agent to walk you through a pull request, a module or a concept. It writes slides and narration in Markdown; showntell voices them locally with Kokoro and hands back a link that starts playing in about a second, while the rest is still being written. A pointer follows the narration through code, diagrams and lists, word by word.

Watch the gallery: ten walkthroughs written by Claude (Opus and Sonnet) and voiced on a laptop, unedited: a tour of this repository, one call's path through it, a refactor step by step, a code review, contributor setup, a speed-up told with a chart, the messages of an MCP tool call, the TLS 1.3 handshake, scaled dot-product attention, and git rebase versus merge on a phone-shaped frame.
Local: speech runs on your Mac or PC. No API keys, no hosted service, no telemetry. Code never leaves your machine except to the model you already use.
Fast: the link is playable about 0.3 s after the agent sends its opening, so you start watching while the agent keeps writing.
Grounded: code slides are read straight from your files and git history, with real line numbers. The agent never retypes code, and the pointer lands on the right line.
Checked: every call returns coded findings to the agent: a cue pointing at a missing line, code too big for the frame, narration that reads the screen aloud, a slide that holds still too long, and, from the player, diagrams that failed to render or text shrunk too small to read; with Playwright installed,
finish_walkthroughdraws every slide to find them. The agent can also look at pictures of its slides withpreview_slides.Shareable: export a walkthrough as one HTML file that plays offline (send it in Slack or by email), a static folder with captions, or an MP4; embed it with
<showntell-player>, link to a range of slides, or present it yourself with speaker notes. An agent in a sandbox or behind WhatsApp sends you the MP4 itself.
How it compares with a screen recording, a written PR description and a rendered MP4 explainer, including where those win: docs/comparison.md.
Install
You need uv. It installs Python 3.12 or newer for you if needed.
Every agent runs the same command, which starts showntell as a stdio MCP server:
uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell mcpThe tag after @ installs that release; leave it off for the latest commit. Once showntell is on PyPI this shortens to uvx showntell mcp. Pick your agent below, then ask it something like "walk me through how a request gets retried in this codebase". The agent replies with a link; open it and press play.
The first run downloads the voice model (about 330 MB on Apple silicon, 92 MB elsewhere) and a 12 MB English language model. The first walkthrough takes a few seconds longer while they load. After that, everything works offline.
Once the voice is ready and the first link is out, the daemon fetches the browser that draws slides in the background: Playwright's Chromium headless shell, about 100 MB, once. With it, finish_walkthrough checks every slide's layout and shows the agent pictures of slides that look alike, each walkthrough gets a poster in the gallery, and MP4 export works. Until it is ready, finish tells the agent the slides were not drawn and everything else works. showntell doctor reports its state.
Machine | What to do |
Locked down, no browser wanted |
|
Browsers provisioned some other way |
|
Linux without Chromium's libraries | doctor says so and prints the fix: |
Fetch it now |
|
Or paste this into your agent and let it set itself up:
Install showntell, an MCP server that turns Markdown into narrated slide walkthroughs voiced on this machine: https://github.com/rahimnathwani/showntell
1. If `uv` is missing, install it: curl -LsSf https://astral.sh/uv/install.sh | sh
2. Add a stdio MCP server named showntell to your own MCP configuration, for all my projects, with this command:
uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell mcp
3. Run `uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell doctor` and fix anything it marks with ✗. The first run downloads the voice model, a few hundred MB.
4. Tell me whether I need to restart you or reload MCP servers before the tools appear. Once they do, make a three-slide walkthrough of this project and send me the link.Claude Code
Add the server for all your projects:
claude mcp add --scope user showntell -- uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell mcpStart a new
claudesession and run/mcp;showntellshould be listed as connected.Ask for a walkthrough, or use a built-in prompt:
/mcp__showntell__diff HEAD~1..HEAD,/mcp__showntell__file src/app.pyor/mcp__showntell__topic how TLS works.
Or install the plugin instead of step 1. You get the MCP server plus a skill: guidance on when a walkthrough beats a written answer, and how to pace one:
claude plugin marketplace add rahimnathwani/showntell
claude plugin install showntell@showntellClaude Code 2.1.275 or later does both in one step: claude plugin install showntell --marketplace rahimnathwani/showntell. Check it with claude plugin list. A new release arrives with claude plugin marketplace update showntell and then claude plugin update showntell@showntell. Use the plugin or claude mcp add, not both, or Claude sees two copies of the tools.
Codex CLI
Add the server (this writes
~/.codex/config.toml):codex mcp add showntell -- uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell mcpCheck it with
codex mcp list, or run/mcpinside acodexsession.Start
codexin your project and ask for a walkthrough.
If you prefer to edit the config file yourself, add:
[mcp_servers.showntell]
command = "uvx"
args = ["--from", "git+https://github.com/rahimnathwani/showntell@v0.2.4", "showntell", "mcp"]Antigravity CLI (agy)
Add the server (this writes
~/.gemini/config/mcp_config.json, which the Antigravity IDE shares). Flags go before the name, and the--keeps--fromfrom being read as an agy flag:agy mcp add showntell -- uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell mcpCheck it with
agy mcp list.Start
agyin your project and ask for a walkthrough. MCP tools ask for approval by default, so allow showntell's tools when prompted. In print mode there is no prompt, so the calls may be refused.
Gemini CLI
Install the extension. It adds the server and a context file with the same guidance as the Claude Code skill:
gemini extensions install https://github.com/rahimnathwani/showntellCheck it with
gemini extensions list, or run/mcpinside ageminisession.Start
geminiin your project and ask for a walkthrough. Update later withgemini extensions update showntell.
Pi
Recent Pi (checked with 1.3.0) has MCP built in.
Add the server (this writes
~/.pi/agent/mcp.json; add-lto write.pi/mcp.jsonin the current project instead):pi mcp add showntell -- uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell mcpCheck it with
pi mcp list. It should sayshowntell: connected, 7 tools.Start
piin your project and ask for a walkthrough.
Older Pi without pi mcp needs the pi-mcp-adapter extension instead. Run pi install npm:pi-mcp-adapter, then put this in ~/.config/mcp/mcp.json:
{
"mcpServers": {
"showntell": {
"command": "uvx",
"args": ["--from", "git+https://github.com/rahimnathwani/showntell@v0.2.4", "showntell", "mcp"]
}
}
}Other clients
VS Code: add the server to your user profile from a terminal, then pick
showntellunder MCP: List Servers:code --add-mcp '{"name":"showntell","command":"uvx","args":["--from","git+https://github.com/rahimnathwani/showntell@v0.2.4","showntell","mcp"]}'GitHub Copilot CLI: its plugin system reads the same marketplace file as Claude Code:
copilot plugin marketplace add rahimnathwani/showntell, thencopilot plugin install showntell@showntell.Cursor, Claude Desktop and others: add a stdio server with command
uvxand arguments--from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell mcp. Most use the samemcpServersJSON as the older-Pi example.Over HTTP: run
uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell serveand connect the client tohttp://localhost:4747/mcp.
Agents in a sandbox or a chat app
When the agent runs in a sandbox, or you talk to it through WhatsApp, Telegram or similar, a localhost link is no use to you. Run the server with --deliver file: the agent then writes the whole walkthrough, calls export_walkthrough, and sends you the MP4 instead of a link.
# inside the sandbox image, once (Debian or Ubuntu)
apt-get install -y ffmpeg
uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 playwright install --with-deps --only-shell chromium
# the MCP server the agent runs
uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell mcp --deliver filePart | What happens |
Where it runs | inside the sandbox, beside the agent, so the file lands where the agent can attach it; a server on the host would write outside the agent's reach |
File | an MP4 named after the title in the project folder, or |
Size | kept within 16 MB, WhatsApp's video limit, by lowering the audio bitrate and then the picture to 720p; the agent passes |
Frame | the agent is told you are likely on a phone, so it picks portrait or square unless the code is wide |
Checks |
|
To set it up, paste this into the agent:
Install showntell, an MCP server that turns Markdown into narrated slide walkthroughs: https://github.com/rahimnathwani/showntell
I can't open links on your machine, so you'll send me walkthroughs as MP4 files.
1. Install what's missing in your environment: uv (curl -LsSf https://astral.sh/uv/install.sh | sh) and ffmpeg with ffprobe (apt-get install -y ffmpeg, your package manager, or a static build on PATH).
2. Install Chromium for video rendering, so the first video needs no download:
uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 playwright install --with-deps --only-shell chromium
If you can't install system packages, drop --with-deps and tell me if Chromium fails to start.
3. Add a stdio MCP server named showntell to your own MCP configuration, running inside this environment, not on a host outside it:
uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell mcp --deliver file
4. Run `uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell doctor` and fix anything marked ✗, or about the browser or video export. The first run downloads the voice model, about 100 MB.
5. If this environment is rebuilt between sessions, add steps 1 to 3 to whatever sets it up, so they persist.
6. Once the tools appear (restart or reload MCP servers if you must), make a three-slide walkthrough on any topic, export it with export_walkthrough, and send me the MP4 as an attachment. If you have no way to attach files, tell me so instead of sending a path.SHOWNTELL_DELIVER=file does the same as the flag. In link mode the agent can still call export_walkthrough whenever you want an MP4 or a page to forward. To watch live links from your phone instead, serve over a private network such as Tailscale (or self-hosted Headscale) with SHOWNTELL_PUBLIC_URL.
Good to know
One shared daemon: the first
showntell mcpstarts a background daemon, and later ones reuse it. The voice model stays loaded and every agent shares one port. A newer copy of showntell replaces an idle daemon running older code; an older copy uses the newer daemon as it is.showntell stopstops it, and the next client starts its own.Checking the setup:
uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell doctorchecks the models, speech speed, port and daemon.Your walkthroughs: http://localhost:4747/ lists them. They and their audio stay until you delete them, or run
showntell prune --older-than 60d. The daemon log is~/.local/share/showntell/daemon.log, kept under 5 MB with the part before indaemon.log.1.Faster mornings on a Mac:
uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell autostart onstarts the daemon at login, so even the first walkthrough of the day comes back as fast as the rest.
Related MCP server: MCP Walkthrough
How it works
graph TB
subgraph agent [Your coding agent]
S[start_walkthrough with the opening] --> L[shares the link with you]
L --> M[add_slides one to three slides at a time]
M --> F[finish_walkthrough]
end
subgraph daemon [showntell daemon]
P[Markdown parser] --> B[Slide builder and checks]
B --> Q[Speech queue]
Q --> K[Kokoro on MLX or ONNX]
end
subgraph browser [Your browser]
R[Player driven by narration time]
end
S --> P
M --> P
K --> R
B -->|changed slides over SSE| ROpening first. The agent's first call starts the walkthrough with only the title slide and a sentence or two. It returns as soon as that audio exists, about 0.3 s later, and tells the agent to send you the link.
Voiced in the background. Later slides are parsed, checked and voiced while you watch. The player waits with a notice if it ever catches up with the writer.
Timed to the word. Kokoro reports when each word is spoken. Each cue in the narration, a Markdown link like
[the retry limit](#L48), moves the pointer as its first word is heard.
The format
A walkthrough is Markdown. Headings start slides, fenced blocks and lists are what you see, plain paragraphs are what you hear.
# How the retry loop works
> Backoff in the HTTP client
A failed request can be sent up to four times. Let's follow one.
## Giving up {#give-up .build}
```python file=src/http/retry.py lines=40-56
```
Each pass through [the loop](#L42 "for attempt in range") sends the request once.
After [the final attempt](#L55) the error goes back to the caller.Visual | Markdown |
Code | a fenced block, or |
Diff |
|
Diagram | a |
Drawing | an |
draw.io diagram |
|
Formula | a |
Table | a pipe table |
List, steps, cards, timeline |
|
Image |
|
Chart |
|
Terminal session | a |
File tree | a |
Numbers | a |
Exchange | a |
Chapter |
|
Layouts |
|
Icons | Lucide names: |
.build on a heading reveals parts as the narration reaches them. A cue can send a dot along diagram edges (#client->api->db), and a style after it changes the pointer: {.circle}, {.underline}, {.arrow}, {.highlight}, {.zoom} to move the camera in, or {.decode} to keep a label scrambled until its cue. Seven themes (dark, light, paper, night, ocean, studio, high contrast) are chosen with theme, in front matter or in the project's showntell.theme.json, and viewers can switch. The full reference is docs/format.md. You can also write a walkthrough by hand and play it with showntell play talk.md.
Commands
Command | What it does |
| stdio MCP server; starts or reuses the daemon. |
| the daemon in the foreground: MCP over HTTP at |
| voice a Markdown walkthrough and open it |
| one self-contained page: player, slides, MP3 narration and only the libraries its slides use; plays offline from a double-click and makes no network requests |
| a static folder that plays from any web server, with WebVTT captions and a |
| an MP4 video; |
| recent walkthroughs |
| check models, speech speed, port and daemon |
| delete walkthroughs unchanged for that long and cached audio nothing uses; |
| stop the daemon; the next client starts one from its own copy |
| macOS: keep the daemon running from login |
Video export
An output path ending in .mp4 renders a video. Each frame is captured by seeking the player in headless Chromium, so rendering runs faster than real time and never drops a frame: a 4.4-minute walkthrough renders in 16 to 20 s on an M-series Mac.
uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell export <id> talk.mp4The first export fetches the browser, about 100 MB, if the daemon has not already.
Part | What you get |
Picture | H.264, 30 fps ( |
Sound | AAC, built from the narration clips at their places on the timeline, levelled to -16 LUFS with true peaks under -1.5 dBTP |
Captions | a mov_text subtitle track; |
Speed |
|
Motion | camera moves, entrances and reveals as in the player; the idle motion (a drawing breathing, a held close-up creeping in) is left out so held frames repeat, and |
Size |
|
Checks | the file's duration must match the timeline within 0.2 s, or the export fails |
Needs FFmpeg on PATH and the video extra (Playwright). Without Playwright, folder exports still work and skip poster.png.
In pull requests
The repository is also a GitHub Action: it voices a walkthrough's Markdown on the runner, with no API key, and posts the outline, the transcript and a download link on the pull request. See docs/github-action.md.
- uses: rahimnathwani/showntell@v0.1.7
with:
markdown: .showntell/pr.mdIn the player
Feature | How |
Start part-way |
|
Play a range |
|
Present it yourself | the menu's "Present with notes", or |
Pause at each step | the menu: stops after each paragraph that revealed a part |
Ask for a change | the menu copies a request naming the slide, the time and what the narration says, to paste to your agent |
Theme | the menu, or |
Keyboard | Space, ←/→ 5 s, Shift ←/→ slides, C captions, T transcript; lists are one tab stop with arrow keys |
Embedding
<script src="https://your.host/static/embed.js"></script>
<showntell-player src="https://your.host/my-walkthrough/" poster="https://your.host/my-walkthrough/poster.png"></showntell-player>The element plays an exported folder or a live link in an iframe, forwards ready, slidechange, timeupdate, durationchange, waiting, play, pause and ended events, and has play(), pause() and seek(seconds). With poster, the player loads on the first click. Browsers block public pages from loading a link on your own machine, so embed exported folders, not localhost links.
Settings
Environment variables, also listed in .env.example. Command-line flags override them.
Variable | Default | Meaning |
| 4747 | daemon port; the next free one is used if taken |
| 127.0.0.1 | interface; anything else requires an access token, which is generated and added to links |
|
| walkthroughs, audio cache, models, lockfile and log |
|
| default voice; any English Kokoro voice, such as |
|
|
|
| base URL for links when viewing from another device, such as a Tailscale name; links then carry an access token | |
|
| ONNX variant; |
| up to 6 | CPU threads for ONNX speech |
|
|
|
| 1 |
|
|
|
|
Pronunciations: put word = spoken form lines in ~/.local/share/showntell/lexicon.txt. A lowercase word matches any capitalisation, and the spoken form may be misaki phonemes between slashes (kubectl = /kjˈubkˌʌtəl/). showntell already knows several hundred technical terms.
Privacy and security
Network: showntell listens on localhost only, checks the Host and Origin of every request, and accepts only JSON POSTs.
Links: walkthrough ids are 128-bit random values; writing needs a separate key, which the agent gets and any MCP client on this machine can list.
Files: code and images are read only from the project folder. When the MCP client shares its folders, the project folder must be inside one of them, so an agent cannot show files from elsewhere on the machine. Git runs only plumbing commands with repository hooks and diff drivers disabled.
Downloads: the only network traffic is the first-run model download (and the ONNX model, if MLX ever fails on Apple silicon), then the headless browser from Playwright's CDN, once, unless
SHOWNTELL_BROWSER=off.
See SECURITY.md to report a problem.
Platforms
Platform | Speech | Status |
macOS, Apple silicon | Kokoro on MLX; ONNX Runtime if MLX fails to load | primary |
Linux, Intel Mac | Kokoro on ONNX Runtime (CPU) | supported |
Windows | Kokoro on ONNX Runtime (CPU) | untested, best effort; reports welcome |
English voices only for now. Kokoro's other languages are on the roadmap.
Development
uv sync
uv run pytest -m "not slow and not browser and not mlx and not onnx" # fast tests, no models or browser
uv run showntell serve --speech fake # run without a voice modelSee CONTRIBUTING.md, docs/spec.md and docs/architecture.md. To run one server for a whole company, with sign-in through Google or Entra, see docs/self-hosting.md. Sign-in has been tried with Entra from Claude Code; Google and claude.ai connectors have passed only tests against a fake provider.
Who uses it
Using showntell on a team or project? Add a line to ADOPTERS.md.
Licence
MIT. Bundled libraries and downloaded models keep their own licences; see THIRD_PARTY_NOTICES.md.
Available Tools
7 toolsadd_slidesAdd slidesA
Append slides to a walkthrough, written in Markdown.
Calls:
Opening: normally sent in start_walkthrough's
opening(see its example). Only if it was not sent there, the first call carries it and nothing more: the title slide and one or two short spoken sentences. That call returns when the link is playable, with the full guide; send the link to the user then, before anything else.All other calls: first one short slide alone, then one to three whole slides. Never resend earlier Markdown. Never split a slide or its code block across calls.
Replies list problems, each ending in a code; errors come first. Fix errors in sent slides now with revise_slide; fix warnings in later slides.
Format:
Slide: each #, ## or ### heading starts one. Optional attributes:
## Title {#id .build}; .build reveals parts as cues reach them.Narration: every plain paragraph is spoken, labels included, each voiced separately: never start one with "Narration:" or "Slide 3:". Put identifiers in
backticks;[text]{say="spoken"}fixes pronunciation.Shown text:
>lines are shown, never spoken; under the first heading, one is the subtitle.Layout:
>under a heading is its takeaway; {.side} puts one to three>lines beside the visual, {.pair} shows two visuals side by side, {.full} the visual edge to edge; a slide with only a>sentence is a statement. {icon=name} on a heading, and:name:before a list item, stat label or>line, add a Lucide icon. Vary the look from slide to slide.Visual: at most one per slide: fenced code, diff,
mermaid diagram,math formula, pipe table, list, image,
chart bar|hbar|line,terminal session,tree of files,stat numbers,chat exchange,svg drawing (consecutivesvg step blocks are versions that glide into each other;svg sketch looks hand-drawn) or ```drawio file=path, a draw.io diagram the project already has. Syntax and examples: resource showntell://slide-kinds.Choose the visual by the idea's shape: a change → diff, not the new code alone; flow, steps, causes and effects →
mermaid; numbers → chart or stat; something physical or spatial →svg drawing; commands → ```terminal; dated events → .timeline list. Lists and tables only for words with no shape, never three in a row.Code options:
scrollfor long code; consecutive ```lang step blocks are versions of one code slide.Code from disk, with an empty body and the file's own line numbers in the gutter:
Inline code may set start=10.
Diff:
python old thenpython new blocks;diff with -/+ lines, one hunk per slide; ordiff file=path rev=A (against the working tree), rev=A..B (two commits) or rev=A...B (B against the commit where it branched off A: what a pull request shows).List:
- **Title**: text {#id}; without {#id}, the id is the title, lowercased and hyphenated.1.items are steps; .cards on the heading shows cards; .timeline puts dates, the bold titles, on a line; .quiz makes two to four- [ ]items with one- [x]a multiple-choice question, choices #a to #d, the answer shown when a cue points at it.Cues are links in narration around the words that name the target. The pointer lands as the label's first word is spoken, within the current slide only. label line 12 | #L12-18 a range | label only that text on line 12 | #-L5 old side, #+L7 new side of a diff | #id a list item, card, Mermaid node, chart bar or series, tree entry, drawing element (also by its or text as a slug) or draw.io cell (also by a unique label) | #row-2 the second table row, or a {#id} ending its last cell | # the whole visual; label finds that text in it. Also #step-2 (only with step blocks), #a->b->c flowchart edge path, #Sender->>Receiver a sequence-diagram message, #@l,t,w,h image, drawing or draw.io region; {.circle}, {.arrow}, {.zoom} etc. after a cue (see showntell://slide-kinds).
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Handle from start_walkthrough. | |
| markdown | Yes | Slides in Markdown: one to three whole slides, nothing already sent. Only when the opening was not sent with start_walkthrough: the first call carries just the title slide and one or two spoken sentences. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it is a non-idempotent, non-destructive write; the description goes well beyond that by disclosing the blocking return condition ('returns when the link is playable, with the full guide'), the reply shape (problems with codes, errors before warnings), and hard invariants (never resend earlier Markdown, never split a slide or code block across calls). That is exactly the context an agent needs before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded and organized under Calls/Format headings, but it is very large for a two-parameter tool and reproduces reference material that it also points to (showntell://slide-kinds) for visual syntax, icons and cue modifiers. Several bullets (chart/terminal/tree/chat/svg enumeration, draw.io cell addressing) read as documentation to be consulted rather than selection guidance, inflating the always-loaded description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description covers the return contract (problems with codes, ordering) and the full authoring grammar needed to produce valid input. Given the complexity of the Markdown dialect and the absence of an output schema, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description substantially enriches `markdown`: heading-based slide boundaries, attribute syntax, narration vs shown-text rules, one-visual-per-slide constraint, file/line/diff sourcing, and cue-link semantics. It adds meaning the schema's one-line description cannot carry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: append slides to a walkthrough, authored in Markdown. It also implicitly separates itself from start_walkthrough (which carries the opening) and revise_slide (which fixes already-sent slides). The only gap is that the deck/walkthrough concept itself is never characterized, but the action is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to send the opening here versus in start_walkthrough's `opening` field, what the first call must contain and return, how later calls should be batched (one short slide, then one to three whole slides), and routes error remediation to revise_slide while deferring warnings to later slides. Real when/when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_walkthroughExport walkthroughA
Save a walkthrough as one file the user can keep or forward: an MP4 video (H.264 and AAC, with a subtitle track) or a self-contained HTML page that plays offline in a browser. Call it after finish_walkthrough and the fixes its reply names. It waits up to five minutes for narration still being voiced, then renders; an MP4 takes about a tenth of its length plus a few seconds. Use it when the user asks for a video, or for a file to share, send or attach. MP4 needs ffmpeg and Playwright Chromium, HTML neither; the error says what is missing.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Where to write. Empty: a file named after the title in the project folder. Relative: inside the project folder. Absolute: that path, inside a folder the client shares. Must end in .mp4 or .html to match `format`. An existing file is overwritten. | |
| format | No | mp4 (default): a video for chat apps, email and phones. html: one page that plays offline in a browser. | mp4 |
| handle | Yes | Handle from start_walkthrough or list_walkthroughs. | |
| max_mb | No | Size limit in MB. An MP4 over it is shrunk, first lower audio bitrate, then 720p; if it still does not fit, the call fails: split the walkthrough or raise the limit. An HTML page over it fails. 0: no limit. Omit for the server default: 16 (WhatsApp's video limit) when the user receives files, otherwise none. Other channels: Telegram bots 50, Signal 100, email often 25. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses a five-minute wait for narration still being voiced, an MP4 render cost of roughly a tenth of the length plus a few seconds, format-specific runtime dependencies (ffmpeg and Playwright Chromium for MP4, neither for HTML), and that the error message names what is missing. It does not contradict the write/non-idempotent annotation profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the outcome and the format choice, then the trigger, then the timing and dependency caveats. Every sentence carries information, though the dependency sentence is compressed into a single dense clause that is slightly harder to parse than the rest.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description covers what an agent needs: sequencing after finish_walkthrough, the wait/render timing so it does not time out prematurely, the failure/dependency story, and the format tradeoff. File placement and size handling are covered by the schema, so nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so path, format, handle and max_mb are already fully documented in the schema, including overwrite behavior and per-channel size limits. The description adds only a general note that MP4 needs extra runtimes, which is behavioral rather than parameter-level. Baseline 3 is correct when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Save a walkthrough as one file') and immediately names the two output forms with their technical profiles (MP4 H.264/AAC with subtitle track; self-contained offline HTML). This is clearly distinguishable from finish_walkthrough, preview_slides and the other siblings, which produce the walkthrough rather than exporting it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit sequencing ('Call it after finish_walkthrough and the fixes its reply names') and an explicit triggering condition ('Use it when the user asks for a video, or for a file to share, send or attach'). An agent knows both when to call it and when it is premature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finish_walkthroughFinish walkthroughA
Close the walkthrough after its last slide. Records the end questions and returns a summary: remaining problems, each slide's start time and look (kind, layout, takeaway, icons) and what could not be checked. It names runs of slides that look alike, with pictures of them; revise one in each run into a different look before telling the user. With Playwright installed it first draws every slide, so the summary already reports render and layout problems (render errors, text_too_small, overflow, drawing_overlap); fix them with revise_slide. Call preview_slides only for slides it names, a drawing or diagram you want to see, or when the user asks. Then tell the user it is finished and give the link; if they want a video or a file to send, call export_walkthrough.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Handle from start_walkthrough. | |
| questions | No | Two or three short follow-up questions the viewer might ask next, as a list of strings. Offered at the end of the walkthrough. Optional when the Markdown already lists them under a `.questions` heading; questions passed here replace those. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it is not read-only, not idempotent, and not destructive, so the safety bar is lower. The description adds substantial behavioral context: it records end questions, may render slides via Playwright, returns a structured summary, flags render and layout issues, and gives post-finish instructions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, and most of the long paragraph earns its place by specifying follow-up routing. It is dense but appropriate for a complex closing operation, though a slight structural break would improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description explains the returned summary contents: remaining problems, slide timing and look, uncheckable items, and grouped similar-slide runs with pictures. It also covers rendering behavior and what to do after finishing, making the definition complete enough for an agent to act correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both handle and questions thoroughly. The description mentions end questions being recorded, but it does not add syntax or semantics beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: closing the walkthrough after its last slide. It distinguishes itself from siblings by assigning preview_slides, revise_slide, and export_walkthrough to specific follow-up situations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to call this tool, when to call preview_slides only, when to use revise_slide, and when to use export_walkthrough. The routing is detailed enough that an agent can choose among siblings without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_walkthroughsList walkthroughsARead-only
List recent walkthroughs with their handles, titles and links. Use it to find the handle of a walkthrough to revise later, including one from an earlier session. Its Markdown source is the resource showntell://walkthroughs/{id}, where id is the part of the handle before the dot.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real context beyond them: what the list returns, that it reaches across sessions, and the resource URI (showntell://walkthroughs/{id}) whose id is derived from the handle before the dot. It does not state how many 'recent' items are returned or any paging behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what it returns, then the use case, then the resource linkage. Every sentence carries information an agent needs and none repeats the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the returned fields and the resource template for retrieving content. For a no-parameter read-only list tool, nothing needed to call or consume it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description instead explains how the returned handle relates to the downstream resource id, which is the only semantic an agent needs to consume the result.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list walkthroughs) and enumerates the returned fields (handles, titles, links). It is clearly distinguishable from the sibling mutators add_slides, start_walkthrough, revise_slide and finish_walkthrough, which act on a single walkthrough rather than enumerating them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it: to find the handle needed to revise a walkthrough later, even one from an earlier session, which links directly to revise_slide. There are no competing list siblings to exclude, so no when-not guidance is needed, but the positive use case is stated clearly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_slidesPreview slidesARead-only
Look at slides as the viewer sees them: returns a small picture of each, fully revealed, plus any layout problems the player found while drawing them. Use it for chosen slides (one a reply named, a drawing or diagram, a revised slide) to check that code is readable, diagrams fit and nothing overlaps; finish_walkthrough already draws every slide and reports these problems, so a full preview after it is rarely needed. Needs Playwright on the machine running showntell; the reply says how to install it if missing.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Handle from start_walkthrough or list_walkthroughs. | |
| slides | No | Slide ids to show. Omit for all slides, up to twelve; with more, the last twelve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, and the description goes further by disclosing the Playwright runtime dependency and that the reply explains how to install it if missing. That is real operational context an agent can act on. It stops short of describing image format/size or timing costs, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core behavior before the usage guidance, and the example list is compact. The final sentence about Playwright installation is a slight digression but earns its place by preventing a failed call, so the length is close to justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so ('a small picture of each, fully revealed, plus any layout problems'). Combined with the dependency note and sibling routing, an agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the twelve-slide cap and the omit-for-all default, so the schema carries the parameter meaning. The description reinforces intent with examples ('chosen slides', 'a revised slide') but adds no syntax or format detail beyond what the schema already provides, making the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('look at slides as the viewer sees them') and specifies the return: a small picture of each slide plus layout problems the player found. It also implicitly contrasts with finish_walkthrough, which draws every slide rather than a selected subset, so an agent can tell them apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use list (slides a reply named, a drawing/diagram, a revised slide) and an explicit when-not: 'finish_walkthrough already draws every slide and reports these problems, so a full preview after it is rarely needed.' The alternative tool is named directly, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revise_slideRevise slideA
Replace one slide, found by its id, with new Markdown. Only narration whose text changed is voiced again; the rest keeps its audio. Omit the heading to keep the slide's title, classes and attributes. Use it for a slide a reply reported as broken, or to rework a finished walkthrough: find its handle with list_walkthroughs and read its Markdown from the resource showntell://walkthroughs/{id}. The reply's slide_url plays only the revised slide; share it when the user asked for the change.
| Name | Required | Description | Default |
|---|---|---|---|
| slide | Yes | Id of the slide to replace: its {#id}, or the id generated from its title as named in replies. | |
| handle | Yes | Handle from start_walkthrough or list_walkthroughs. | |
| markdown | Yes | The complete new slide: heading (optional), visual, shown text and narration. One slide only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that only narration whose text changed is re-voiced while the rest keeps its audio, that omitting the heading preserves title/classes/attributes, and that the reply's slide_url plays only the revised slide. These are exactly the side-effect details an agent needs for a non-idempotent mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and keeps every clause functional (side effects, prerequisites, return behavior). Slightly dense with several packed sentences, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by explaining what the reply returns (slide_url) and how to use it, and it covers prerequisites and mutation semantics. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: the slide id may be a {#id} or a title-derived id, and the markdown param has an optional-heading semantic that preserves existing slide metadata. That is genuine value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Replace one slide ... with new Markdown') and scopes it to a single slide, which cleanly separates it from add_slides and start_walkthrough. The identification key ('found by its id') is included up front.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete triggering conditions ('a slide a reply reported as broken, or to rework a finished walkthrough') plus the prerequisite workflow (find the handle via list_walkthroughs, read Markdown from the resource URI). It stops short of naming an explicit alternative tool or a when-not condition, so it is clear context rather than full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_walkthroughStart walkthroughA
Create a narrated walkthrough. Pass its opening in opening: the reply then comes once that is voiced, with the handle, the playable link and the full authoring guide. Send the link to the user at once, in a message, before your next tool call; they watch while you add the body with add_slides. Without opening, the reply is short and your first add_slides call must carry the opening instead.
| Name | Required | Description | Default |
|---|---|---|---|
| frame | No | Slide shape: landscape (default, 1280×720), square (960×960) or portrait (720×1280, for phones). | landscape |
| speed | No | Speech rate from 0.8 to 1.3; 1.0 is normal. | |
| theme | No | Colour theme: dark (default), light, paper (warm light), night (indigo and pink), ocean (teal and coral), studio (bright, violet) or contrast (high contrast). Pick one that suits the subject. Omit to use the project's showntell.theme.json or the default. Viewers can switch it. | |
| title | Yes | Walkthrough title, shown on the title slide and in the player. Lead with the subject's keywords; under about 50 characters fits the title slide. | |
| voice | No | English Kokoro voice id. Omit for the default. Voices: af_heart, af_bella, af_nicole, af_aoede, af_kore, af_sarah, af_nova, af_sky, af_alloy, af_jessica, af_river, am_michael, am_fenrir, am_puck, am_echo, am_eric, am_liam, am_onyx, am_adam, bf_emma, bf_isabella, bf_alice, bf_lily, bm_george, bm_fable, bm_lewis, bm_daniel. | |
| opening | No | The opening in Markdown, voiced before this call returns: a `#` title heading, an optional `>` subtitle line, then one or two short spoken sentences as a plain paragraph. Nothing more; the body goes in add_slides. Example: # How the retry loop works > Backoff in the HTTP client A failed request can be sent up to four times. We'll follow one through the client. | |
| description | No | One or two sentences on what the walkthrough covers and for whom, up to 200 characters. Shown in the list and gallery and written into exported files as metadata; never spoken or shown on a slide. | |
| project_dir | No | Absolute path of the project. Code blocks with file= and image paths are read from it and must stay inside it. Defaults to the client's root, then the server's working directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already say readOnly=false, destructive=false, idempotent=false, but the description adds behavior annotations cannot express: the call blocks until the opening is voiced, and the reply contains the handle, playable link and authoring guide — and the result differs depending on whether `opening` was supplied. That latency and reply-shape disclosure materially changes how an agent sequences its calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and no wasted sentences — every clause conveys a constraint. It is dense, however: the ordering rule, reply contents and the omitted-`opening` fallback are packed into two long sentences that could be split for faster parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-value burden and does: handle, playable link, full authoring guide, plus the shorter reply when `opening` is omitted. Combined with the sequencing rule, an agent has everything needed to call this and know what comes back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already documents every parameter in detail — including frame geometry, theme options, voice ids and the Markdown structure of `opening`. The description's only added parameter meaning is the consequence of supplying vs. omitting `opening`, which is close to what the schema field already says, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence is a specific verb plus resource — 'Create a narrated walkthrough' — and the rest immediately distinguishes it from its sibling by naming add_slides as the way the body is added. An agent knows this is the entry point of a multi-step authoring flow, not the slide editor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states both branches explicitly: pass `opening` here, or omit it and let the first add_slides call carry it. It also gives a hard ordering rule — send the link to the user immediately, before the next tool call — which is exactly the when/when-not guidance an agent needs in a multi-tool flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.1.6- Changed
start_walkthrough2 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "default": "", + "description": "One or two sentences on what the walkthrough covers and for whom, up to 200 characters. Shown in the list and gallery and written into exported files as metadata; never spoken or shown on a slide.", + "title": "Description", + "type": "string" +} - changed
Input schema / properties / title / descriptionPrevious value: -"Walkthrough title, shown on the title slide and in the player."New value: +"Walkthrough title, shown on the title slide and in the player. Lead with the subject's keywords; under about 50 characters fits the title slide."
1 tool update
v0.1.5- Changed
start_walkthrough2 fields changed- changed
Input schema / properties / theme / descriptionPrevious value: -"Colour theme: dark (default), light, paper (warm light) or contrast (high contrast). Omit to use the project's showntell.theme.json or the default. Viewers can switch it."New value: +"Colour theme: dark (default), light, paper (warm light), night (indigo and pink), ocean (teal and coral), studio (bright, violet) or contrast (high contrast). Pick one that suits the subject. Omit to use the project's showntell.theme.json or the default. Viewers can switch it." - changed
Input schema / properties / theme / enumPrevious value: -[ - "", - "dark", - "light", - "paper", - "contrast" -]New value: +[ + "", + "dark", + "light", + "paper", + "contrast", + "night", + "ocean", + "studio" +]
3 tool updates
v0.1.4- Added
export_walkthrough - Added
preview_slides - Changed
start_walkthrough1 field changed- added
Input schema / properties / themeAdded value: +{ + "default": "", + "description": "Colour theme: dark (default), light, paper (warm light) or contrast (high contrast). Omit to use the project's showntell.theme.json or the default. Viewers can switch it.", + "enum": [ + "", + "dark", + "light", + "paper", + "contrast" + ], + "title": "Theme", + "type": "string" +}
5 tool updates
v0.1.0- First observed
add_slides - First observed
finish_walkthrough - First observed
list_walkthroughs - First observed
revise_slide - First observed
start_walkthrough
TDQS
Scored across 7 tools
Each tool maps to a distinct stage of the walkthrough lifecycle: start, append, list, revise, preview, finish, export. The only potential overlap—preview_slides and finish_walkthrough both surface layout problems—is explicitly resolved in finish_walkthrough's description, which says finish draws every slide and full preview is rarely needed.
All names follow a snake_case verb_noun convention (start_walkthrough, add_slides, revise_slide, preview_slides, finish_walkthrough, export_walkthrough, list_walkthroughs). Singular/plural variation is natural and predictable.
Seven tools is well matched to a focused authoring workflow; each has a clear lifecycle role and none feels redundant or missing for the core create-edit-preview-finish-export flow.
The server covers the full authoring lifecycle from creation through slide addition, revision, preview, completion, export, and listing. Minor gaps such as slide deletion/reordering or a dedicated get-walkthrough tool are not obvious blockers because list_walkthroughs plus the walkthrough resource source provide read access.
Maintenance
Related MCP Connectors
Make narrated, on-brand product videos of your real app from your coding agent or AI assistant.
Turn a slide deck into a talk you rehearse out loud: voice-following script, slides, private Q&A.
Agent-Native Google Slides - generate and edit React presentations
Turn URLs, recordings, docs, assets, or ideas into launch films, demo recordings, and decks.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceGenerates narrated video walkthroughs of git commits, staged/unstaged changes, or entire codebases with AI-powered analysis, syntax-highlighted code visualization, and text-to-speech narration.-
- AlicenseAqualityCmaintenanceEnables AI agents to present interactive code walkthroughs with voice narration, opening files, highlighting code, and showing inline explanations with synchronized text-to-speech.520 npmMIT

Flowcastofficial
FlicenseNot gradedqualityDmaintenanceTurn your AI coding agent into a producer of interactive, narrated walkthroughs — code, whiteboard, and 3D casts, each a single self-contained HTML file that opens in any browser. Runs locally over npx.1-- AlicenseAqualityBmaintenanceEnables LLMs to create animated, narrated tours of GitHub pull requests, with a local browser viewer showing diffs and code highlights while speaking the narration aloud.7MIT