@getnarro/mcp-server
v0.6.1
Published
MCP (Model Context Protocol) server for AI-assisted Narro presentation creation
Downloads
1,041
Maintainers
Readme
@getnarro/mcp-server
MCP (Model Context Protocol) server for AI-assisted Narro presentation creation
getnarro.com · Documentation · Ecosystem
The tools act on the filesystem: they scaffold projects, rewrite deck files, and run builds. Point the server at a directory you are willing to have written to.
Already using a coding agent with a terminal? You probably do not need this. Claude Code, Cursor's agent, and anything else with shell access can use the
narroCLI directly — what they need is the documentation, and https://getnarro.com/llms.txt (ornpm i -D @getnarro/docs) gives them that. This server is for assistants that cannot run commands themselves.
Setup
Claude Code
claude mcp add narro -- npx -y @getnarro/mcp-serverClaude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or
%APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"narro": {
"command": "npx",
"args": ["-y", "@getnarro/mcp-server"]
}
}
}Cursor, Cline, Continue
The same object, under whatever key the client uses for MCP servers — for Cline
that is cline.mcpServers in VS Code settings.
Then ask: "Create a Narro deck about our Q3 results and make sure it builds."
Tools
| Tool | What it does |
| --- | --- |
| create_presentation | Scaffolds a project, returns the path to the deck file |
| list_slides | Structured slide list: index, id, title, layout, preview |
| add_slide | Inserts a slide and writes the file |
| update_slide | Rewrites one slide, preserving frontmatter it was not asked to change |
| delete_slide | Removes a slide, returning its content so it can be restored |
| apply_theme | Sets the deck's theme |
| check_presentation | Validates layout, slot, and theme names without building — fast enough to run after each edit |
| build_presentation | Builds, and returns the compiler output on failure |
| export_presentation | PPTX, PDF, Google Slides, or a static site |
| bundle_presentation | One self-contained HTML file |
| import_presentation | From PowerPoint or Google Slides |
| get_presentation_info | Documentation, and per-component prop types |
| manage_comments | Slide comments |
Video
The same loop for @getnarro/video, whose timeline is derived from the narration rather than
authored — so every step below is an edit to sentences, and an assistant can run all of it.
Each tool is narro-video <command> in a project directory, and each returns the command's
output and the files it wrote.
| Tool | Does |
| --- | --- |
| video_script | The brief a model answers with the first draft of the narration, then that answer as script.ts |
| video_render | The masters, reusing every scene whose inputs have not changed |
| video_check | Text that leaves the frame, every citation against its source, the script against the brand policy |
| video_review | The director's pass: frozen holds, dead air, pace, legibility, safe zones, late entrances, an empty poster |
| video_apply | A feedback export — the studio's, or a review — as a patch to script.ts |
| video_brief | The brief for a translation or a channel cut |
| video_cover | The brief for a cover image, and the image from the answer |
| video_retention | A platform's retention export mapped onto the sentences that cost the most audience |
| video_record | Scripted product footage, captured on virtual time; check says whether the product changed |
| video_stale | Which cited sources have moved since the last render |
| video_approve | The one document a person approves |
Terminal demos
@getnarro/terminal holds a terminal session as text. These five are narro-terminal
<command> against a playbook file, and each returns the command's output.
| Tool | Does |
| --- | --- |
| terminal_render | The playbook as an animated GIF, or an SVG with svg |
| terminal_still | One frame as a PNG — at a mark, a second or a frame |
| terminal_check | What will be wrong before anything renders: unimplemented sequences, lines wider than the grid, a mask that matches nothing, timing that will read badly |
| terminal_import | An asciicast, a VHS .tape or a ttyrec, read into a playbook |
| terminal_export | A playbook written back out as an asciicast |
There is no terminal_record tool, deliberately. Every tool above draws text; record runs
the playbook's commands in a real shell, and the CLI guards it by printing the commands and
asking a person. A tool would route around exactly that gate, so an assistant authors, renders
and checks a demo — and a person runs it. Nor is there a terminal_tape: narro-terminal tape
opens a shell for a person to perform the demo in, and there is no person at the other end of a
tool call. What it writes — a tape, a playbook and a capture — every tool above reads.
Recordings
@getnarro/replay records a web app as real DOM. Recording is a person's job — it drives a
browser through a flow — so there is one tool, and it reads.
| Tool | Does |
| --- | --- |
| replay_info | A cast's viewport, duration, size and chapter names |
| replay_review | What is wrong with the recording, and what to do about each one |
Call replay_info before writing <Replay chapter="…"> or <narro-replay start="…">.
Those name a chapter as a string, and a name the cast does not have is not an error: seek
falls back to the beginning, so the demo plays from the top and reads as a timing bug rather
than a typo.
Call replay_review before publishing one. A cast is text that travels, and an email
address or an API token typed into a form during the recording is in that text. The rest of the
pass — a click that changed nothing, dead air, a scroll nobody could read, type that will be six
pixels tall on a page — is about whether the demo is worth showing.
There is no replay_apply, deliberately. video_apply exists because rewriting narration in
a video moves every cue after it, so the patch has to be computed. A recording has no such
coupling: a finding asks either for a re-record, which is a person driving a browser, or for an
edit to the .notes.md track — an ordinary markdown file an assistant edits directly and bakes
in with narro annotate.
build_presentation is the one to remember. A generated deck that looks right
can still be broken; without a pass/fail signal there is nothing to correct
from.
Editing decks
add_slide, update_slide, and delete_slide edit markdown decks. Slides
are addressed by id where one exists, because an index shifts the moment
something is inserted above it — and a tool that silently edits the wrong slide
is worse than one that fails.
React decks are read-only to these tools: list_slides works, but slides there
are React components and the file should be edited directly.
Resources
The documentation is exposed as resources at narro://docs/{slug}, which a
client can read and cache without spending a tool call. get_presentation_info
serves the same pages for clients that do not support resources.
Both read @getnarro/docs,
whose component reference is generated from the TypeScript source — so prop
types describe the shipping API rather than a hand-maintained copy of it.
The Narro ecosystem
| Package | What it is |
| --- | --- |
| @getnarro/annotate | Feedback on a Narro recording — typed notes anchored to a moment, staleness against the cast they were written about, and a briefing a coding agent can act on |
| @getnarro/atlas | A spatial canvas for Narro — a camera path as text, one pure camera function over it, and scene providers a deck, a video and a web page all render the same way |
| @getnarro/cli | CLI tools for creating and managing Narro presentations |
| @getnarro/core | The React runtime for Narro presentations — Presentation, Slide, navigation, transitions, and speaker notes |
| @getnarro/docs | Narro's documentation as data — markdown pages, a generated component API reference, and llms.txt |
| @getnarro/docspack | Narro's documentation as a docspack — version-locked chunks an agent installs once and searches offline |
| @getnarro/markdown | Markdown & MDX authoring for Narro presentations |
| @getnarro/marketplace | Themes, colour schemes, and templates for Narro presentations |
| @getnarro/mcp-server | MCP (Model Context Protocol) server for AI-assisted Narro presentation creation ← you are here |
| @getnarro/replay | Record a web app once and replay it as real DOM — a portable cast format, an embeddable player, and a self-contained HTML page |
| @getnarro/shared-ui | Slide components for Narro presentations — headings, text, lists, code, media, charts, and layouts |
| @getnarro/terminal | Terminal playbooks for Narro — a text format for a terminal session, a screen that is a pure function of the frame number, and a renderer that draws it on a grid |
| @getnarro/video | Frame-deterministic video framework for Narro — a brand system, a React timeline runtime, narration-derived timing, a headless-Chrome renderer, and a scrub studio |
| @getnarro/video-marketing | Marketing scene components for @getnarro/video — lower thirds, stat counters, feature grids, pull quotes, device frames, callouts and end cards, all brand-driven and frame-deterministic |
| create-narro | Scaffold a new Narro presentation |
All fifteen ship from one repository and release together.
The npm package named
narrois unrelated to this project. Narro's packages are all under the@getnarro/scope; the CLI binarynarrocomes from@getnarro/cli.
Website · Documentation · llms.txt · GitHub · Issues · Changelog
Released under the MIT License.
