sideshow

A browser viewer where a coding agent posts diagrams, diffs and sketches and reads your comments on them

By Modem TypeScript Local · stdio, Streamable HTTP Developer toolsDesign

61 popularity score ★ 633 ↓ 550/wk

Connect your client

Local (once it is running)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add --transport http sideshow http://localhost:8228/mcp
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "sideshow": {
      "url": "http://localhost:8228/mcp"
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "sideshow": {
      "type": "http",
      "url": "http://localhost:8228/mcp"
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.sideshow]
url = "http://localhost:8228/mcp"
Gemini CLITerminal
gemini mcp add --scope user --transport http sideshow http://localhost:8228/mcp
Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add sideshow -- npx -y sideshow mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "sideshow": {
      "command": "npx",
      "args": [
        "-y",
        "sideshow",
        "mcp"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "sideshow": {
      "command": "npx",
      "args": [
        "-y",
        "sideshow",
        "mcp"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "sideshow": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "sideshow",
        "mcp"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.sideshow]
command = "npx"
args = ["-y", "sideshow", "mcp"]
Gemini CLITerminal
gemini mcp add --scope user sideshow npx -- -y sideshow mcp

Settings 6

SIDESHOW_URL Optional: Address of the sideshow viewer the MCP server talks to; http://localhost:8228 by default.
SIDESHOW_TOKEN Optional: Shared token, sent as a bearer token, for a viewer that requires one (such as a deployed instance).
SIDESHOW_AGENT Optional: Agent name shown on sessions; claude-code by default.
SIDESHOW_SESSION Optional: Existing session id to post into, instead of creating a new session.
SIDESHOW_HOST Optional: Viewer server: address to listen on; every interface when unset.
PORT Optional: Viewer server: port to listen on; 8228 by default.

What it does

sideshow is a small Node web app with an MCP server attached. A coding agent working in a terminal publishes posts to it, and you watch them appear in a browser tab. Each post is made of one or more parts: sandboxed HTML the agent writes, markdown, a unified or split diff, ANSI terminal output, a step timeline of an agent run, an uploaded image, a mermaid diagram, a collapsible JSON tree, or highlighted source code. The viewer supplies the styling, so the agent sends only the content. That is the project's case for spending fewer output tokens than a hand-built HTML page would.

You can comment under any post in the browser. The agent picks those comments up with wait_for_feedback, then answers in the thread or revises the post. Posts from one agent conversation are grouped into a session.

The MCP server (`sideshow mcp`, over stdio) does no rendering itself. Every tool call is an HTTP request to a running sideshow viewer, which is http://localhost:8228 unless SIDESHOW_URL points somewhere else, such as a Cloudflare Workers deployment. The viewer also serves MCP over HTTP at /mcp. The same package gives you a CLI, a Pi extension and a Claude Code plugin.

The docs name eight MCP tools. The v0.14.0 stdio server (mcp/server.ts) registers 18: the eight named, deprecated aliases (publish_surface, update_surface, list_surfaces, publish_snippet, update_snippet), and send_test_post, add_surface, edit_surface, remove_surface and reorder_surfaces for changing single parts of a post. In that file, wait_for_feedback waits 120 seconds by default.

What it needs

RuntimeNode.js 22+

Node 22.18 or newer. The sideshow viewer has to be running before the MCP server is useful: start it with `npx sideshow serve` (port 8228 by default, set by PORT), or deploy it to Cloudflare Workers and set SIDESHOW_URL. Rendering a post as a PNG needs a Workers deployment with Cloudflare's Browser Rendering binding. The Claude Code plugin needs Claude Code 2.1.105 or newer.

Limits

If no viewer is reachable at SIDESHOW_URL, every tool returns an error asking the user to start one. The 'open as image' (PNG) action is disabled on the local Node server because it needs Cloudflare Browser Rendering. publish_surface, update_surface, list_surfaces and the html-only snippet tools are deprecated aliases. The terminal (TUI) viewer, sideshow-term, is alpha and its makers call its APIs unstable. The share-as-markdown export links to html parts instead of including their markup.

Who it suits

It suits developers who run Claude Code, Codex, opencode or Pi in a terminal and want the agent to show architecture diagrams, UI mockups or diffs in a browser, then comment on them. It is a display and feedback channel only: it does not read your code, run commands or open web pages. If you want an agent to drive a browser or test pages, use a browser-automation server instead. It runs on your own machine unless you deploy the viewer to Cloudflare yourself.

Tools 18

publish_post
Creates a new post from one or more parts in the current session and returns its viewer link
update_post
Replaces the parts or title of an existing post
list_posts
Lists the posts in this conversation's session
get_post
Fetches one post with its parts
wait_for_feedback
Waits for new comments from the user (120 seconds by default)
reply_to_user
Posts the agent's reply in a post's comment thread
upload_asset
Uploads an image or other file to use in a post
get_design_guide
Returns the viewer's design guide for writing parts
send_test_post
Publishes a sample post to check that the connection works
add_surface
Adds one part to an existing post
edit_surface
Changes one part of an existing post
remove_surface
Deletes one part from a post
reorder_surfaces
Changes the order of a post's parts
publish_surface
Deprecated alias for publishing a post
update_surface
Deprecated alias for updating a post
list_surfaces
Deprecated alias for listing the session's posts
publish_snippet
Deprecated: publishes a post with a single HTML part
update_snippet
Deprecated: replaces a post's single HTML part

Similar servers