Skip to main content
Glama

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.

Three moments from gallery walkthroughs: code changing from one version to the next, a dot travelling along a diagram's edges, and the pointer stepping through a bar chart as the narration names each bar

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_walkthrough draws every slide to find them. The agent can also look at pictures of its slides with preview_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 mcp

The 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

SHOWNTELL_BROWSER=off: never fetched or started; finish skips the layout check, MP4 export is off

Browsers provisioned some other way

PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1, with PLAYWRIGHT_BROWSERS_PATH where they are: used if there, never fetched

Linux without Chromium's libraries

doctor says so and prints the fix: uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 playwright install-deps chromium, which asks for sudo

Fetch it now

uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 playwright install --only-shell chromium

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

  1. 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 mcp
  2. Start a new claude session and run /mcp; showntell should be listed as connected.

  3. Ask for a walkthrough, or use a built-in prompt: /mcp__showntell__diff HEAD~1..HEAD, /mcp__showntell__file src/app.py or /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@showntell

Claude 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

  1. Add the server (this writes ~/.codex/config.toml):

    codex mcp add showntell -- uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell mcp
  2. Check it with codex mcp list, or run /mcp inside a codex session.

  3. Start codex in 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)

  1. Add the server (this writes ~/.gemini/config/mcp_config.json, which the Antigravity IDE shares). Flags go before the name, and the -- keeps --from from being read as an agy flag:

    agy mcp add showntell -- uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell mcp
  2. Check it with agy mcp list.

  3. Start agy in 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

  1. 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/showntell
  2. Check it with gemini extensions list, or run /mcp inside a gemini session.

  3. Start gemini in your project and ask for a walkthrough. Update later with gemini extensions update showntell.

Pi

Recent Pi (checked with 1.3.0) has MCP built in.

  1. Add the server (this writes ~/.pi/agent/mcp.json; add -l to write .pi/mcp.json in the current project instead):

    pi mcp add showntell -- uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell mcp
  2. Check it with pi mcp list. It should say showntell: connected, 7 tools.

  3. Start pi in 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 showntell under 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, then copilot plugin install showntell@showntell.

  • Cursor, Claude Desktop and others: add a stdio server with command uvx and arguments --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell mcp. Most use the same mcpServers JSON as the older-Pi example.

  • Over HTTP: run uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell serve and connect the client to http://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 file

Part

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 path

Size

kept within 16 MB, WhatsApp's video limit, by lowering the audio bitrate and then the picture to 720p; the agent passes max_mb for other apps (Telegram bots 50, Signal 100). Narration is most of the size: a 3.5-minute walkthrough is about 4 MB

Frame

the agent is told you are likely on a phone, so it picks portrait or square unless the code is wide

Checks

showntell doctor says whether ffmpeg and Chromium are there

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 mcp starts 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 stop stops it, and the next client starts its own.

  • Checking the setup: uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell doctor checks 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 in daemon.log.1.

  • Faster mornings on a Mac: uvx --from git+https://github.com/rahimnathwani/showntell@v0.2.4 showntell autostart on starts 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| R
  1. Opening 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.

  2. 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.

  3. 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 file=path lines=10-24 to read it from disk; scroll for long code; step blocks for code that evolves

Diff

old and new blocks, a unified diff block, or diff file=path rev=HEAD~1

Diagram

a mermaid block, any diagram type

Drawing

an svg block, or svg file=path for an SVG from draw.io, Excalidraw or Inkscape; cues point at elements by id

draw.io diagram

drawio file=docs/arch.drawio, drawn by the bundled draw.io viewer offline; cues point at cells by id or label

Formula

a math block or $$ … $$, rendered with KaTeX

Table

a pipe table

List, steps, cards, timeline

- or 1. items; .cards on the heading for cards, .timeline for dated events

Image

![alt](path) from the project, optionally {frame=browser}; cues can point at a region

Chart

chart bar, chart hbar or chart line with label: value lines

Terminal session

a terminal block: $ commands and their output

File tree

a tree block, indented or pasted from tree

Numbers

a stat block: p95: 420 ms -> 180 ms counts down as it is named

Exchange

a chat block: user: and assistant: messages

Chapter

## Part title {.chapter}

Layouts

{.side} puts > takeaways beside the visual, {.pair} shows two visuals, {.full} one edge to edge; a slide with only a > sentence is a statement

Icons

Lucide names: - :database: **Postgres**, > :zap: takeaway, {icon=rocket} on a heading, <use href="icon:cloud"/> in a drawing

.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

showntell mcp

stdio MCP server; starts or reuses the daemon. --deliver file has the agent send an MP4 instead of a link

showntell serve

the daemon in the foreground: MCP over HTTP at /mcp, the player, and the list of walkthroughs at /

showntell play FILE.md

voice a Markdown walkthrough and open it

showntell export ID|LINK|FILE.md OUT.html

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

showntell export ID|LINK|FILE.md OUT [--mp3]

a static folder that plays from any web server, with WebVTT captions and a poster.png

showntell export ID|LINK|FILE.md OUT.mp4

an MP4 video; --fps, --workers, --burn-captions, --motion, --max-mb to shrink it to fit

showntell list

recent walkthroughs

showntell doctor

check models, speech speed, port and daemon

showntell prune --older-than 60d

delete walkthroughs unchanged for that long and cached audio nothing uses; --dry-run lists them first

showntell stop

stop the daemon; the next client starts one from its own copy

showntell autostart on|off|status

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.mp4

The first export fetches the browser, about 100 MB, if the daemon has not already.

Part

What you get

Picture

H.264, 30 fps (--fps), 1920x1080 for landscape, 1080x1080 square, 1080x1920 portrait; only the slide, no player controls

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; --burn-captions also draws them into the picture

Speed

--workers browsers render frame ranges in parallel (default: up to 4); unchanged frames reuse the last screenshot

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 --motion keeps it at the cost of a screenshot per frame

Size

--max-mb 16 lowers the audio bitrate, then the picture to 720p, until the file fits, or fails

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.md

In the player

Feature

How

Start part-way

?at=90 starts 90 s in

Play a range

?from=slide-id&to=slide-id plays those slides and stops; revise_slide replies with such a link for the changed slide

Present it yourself

the menu's "Present with notes", or ?present=1: no voice, Space or → for the next step, narration as notes, and an audience window that follows

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 ?theme=light

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

SHOWNTELL_PORT

4747

daemon port; the next free one is used if taken

SHOWNTELL_HOST

127.0.0.1

interface; anything else requires an access token, which is generated and added to links

SHOWNTELL_DATA

~/.local/share/showntell

walkthroughs, audio cache, models, lockfile and log

SHOWNTELL_VOICE

af_heart

default voice; any English Kokoro voice, such as am_michael or bf_emma

SHOWNTELL_SPEECH

auto

mlx on Apple silicon (onnx if MLX fails to load), onnx elsewhere, or fake for tests

SHOWNTELL_PUBLIC_URL

base URL for links when viewing from another device, such as a Tailscale name; links then carry an access token

SHOWNTELL_ONNX_MODEL

model_quantized

ONNX variant; model (fp32) can be faster on CPUs without AVX2

SHOWNTELL_THREADS

up to 6

CPU threads for ONNX speech

SHOWNTELL_DELIVER

link

file: the agent sends an exported MP4 instead of the player's link, for agents in a sandbox or behind a chat app

SHOWNTELL_FINISH_CHECK

1

0 skips drawing every slide headless at finish_walkthrough

SHOWNTELL_BROWSER

auto

off never fetches or starts the headless browser: no layout check at finish, previews, posters or MP4 export

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 model

See 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 tools
add_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 alt, chart bar|hbar|line, terminal session, tree of files, stat numbers, chat exchange, svg drawing (consecutive svg 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: scroll for 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 then python new blocks; diff with -/+ lines, one hunk per slide; or diff 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).

NameRequiredDescriptionDefault
handleYesHandle from start_walkthrough.
markdownYesSlides 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

A4.6/5.0
Behavior5/5

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.

Conciseness3/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines5/5

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.

NameRequiredDescriptionDefault
pathNoWhere 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.
formatNomp4 (default): a video for chat apps, email and phones. html: one page that plays offline in a browser.mp4
handleYesHandle from start_walkthrough or list_walkthroughs.
max_mbNoSize 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

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

NameRequiredDescriptionDefault
handleYesHandle from start_walkthrough.
questionsNoTwo 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

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 walkthroughsA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 slidesA
Read-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.

NameRequiredDescriptionDefault
handleYesHandle from start_walkthrough or list_walkthroughs.
slidesNoSlide ids to show. Omit for all slides, up to twelve; with more, the last twelve.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

NameRequiredDescriptionDefault
slideYesId of the slide to replace: its {#id}, or the id generated from its title as named in replies.
handleYesHandle from start_walkthrough or list_walkthroughs.
markdownYesThe complete new slide: heading (optional), visual, shown text and narration. One slide only.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
frameNoSlide shape: landscape (default, 1280×720), square (960×960) or portrait (720×1280, for phones).landscape
speedNoSpeech rate from 0.8 to 1.3; 1.0 is normal.
themeNoColour 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.
titleYesWalkthrough title, shown on the title slide and in the player. Lead with the subject's keywords; under about 50 characters fits the title slide.
voiceNoEnglish 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.
openingNoThe 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.
descriptionNoOne 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_dirNoAbsolute 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

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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. 1 tool updatev0.1.6
    • Changedstart_walkthrough2 fields changed
      • addedInput schema / properties / description
        Added 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"
        +}
      • changedInput schema / properties / title / description
        Previous 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."
  2. 1 tool updatev0.1.5
    • Changedstart_walkthrough2 fields changed
      • changedInput schema / properties / theme / description
        Previous 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."
      • changedInput schema / properties / theme / enum
        Previous value: -[
        -  "",
        -  "dark",
        -  "light",
        -  "paper",
        -  "contrast"
        -]New value: +[
        +  "",
        +  "dark",
        +  "light",
        +  "paper",
        +  "contrast",
        +  "night",
        +  "ocean",
        +  "studio"
        +]
  3. 3 tool updatesv0.1.4
    • Addedexport_walkthrough
    • Addedpreview_slides
    • Changedstart_walkthrough1 field changed
      • addedInput schema / properties / theme
        Added 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"
        +}
  4. 5 tool updatesv0.1.0
    • First observedadd_slides
    • First observedfinish_walkthrough
    • First observedlist_walkthroughs
    • First observedrevise_slide
    • First observedstart_walkthrough

TDQS

A4.6/5.0

Scored across 7 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityNo data
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to present interactive code walkthroughs with voice narration, opening files, highlighting code, and showing inline explanations with synchronized text-to-speech.
    5
    20 npm
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Turn 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
    -
  • A
    license
    A
    quality
    B
    maintenance
    Enables 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.
    7
    MIT