Skip to main content
Glama
death-joke

slidev-orchestrator-mcp

by death-joke
README.md
# slidev-orchestrator-mcp

MCP (TypeScript) server to orchestrate multiple [Slidev](https://sli.dev) presentations:

- list the presentations under a root folder (`mainfolder/presentation1`, `mainfolder/presentation2`, ...)
- create a new presentation (scaffold + `npm install`)
- start / stop / list Slidev dev servers (automatic port allocation)
- **target** a presentation: the server connects to that presentation's official Slidev MCP
  (`slidev mcp slides.md`) and dynamically re-exposes its tools (prefixed `slidev_*`) via
  `tools/list_changed`.

## Expected structure

```
mainfolder/
├── presentation1/
│   ├── slides.md        <- required (this is what identifies a presentation)
│   └── package.json     <- @slidev/cli as a local dependency (recommended)
└── presentation2/
    └── slides.md
```

## Installation

The package is published on npm as [`slidev-orchestrator-mcp`](https://www.npmjs.com/package/slidev-orchestrator-mcp),
so no local clone or build is required — just run it with `npx`.

## Root folder configuration

Priority order:

1. CLI argument: `--dir /path/to/mainfolder` (or `-d`, or the first positional argument)
2. Environment variable: `SLIDEV_PRESENTATIONS_DIR`

Optional: `SLIDEV_BASE_PORT` (default `3030`) — first port tried for dev servers.

## Integration

### Claude Code

```bash
claude mcp add slidev-orchestrator -- npx -y slidev-orchestrator-mcp --dir /path/to/mainfolder
```

or with the environment variable:

```bash
claude mcp add slidev-orchestrator -e SLIDEV_PRESENTATIONS_DIR=/path/to/mainfolder -- npx -y slidev-orchestrator-mcp
```

### OpenCode (`opencode.json`)

```json
{
  "mcp": {
    "slidev-orchestrator": {
      "type": "local",
      "command": ["npx", "-y", "slidev-orchestrator-mcp"],
      "environment": { "SLIDEV_PRESENTATIONS_DIR": "/path/to/mainfolder" }
    }
  }
}
```

### Claude Desktop (`claude_desktop_config.json`)

```json
{
  "mcpServers": {
    "slidev-orchestrator": {
      "command": "npx",
      "args": ["-y", "slidev-orchestrator-mcp", "--dir", "/path/to/mainfolder"]
    }
  }
}
```

## Exposed tools

| Tool                  | Description                                                                                                              |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| `list_presentations`  | List presentations (title/theme read from frontmatter, dev server status, current target)                                |
| `create_presentation` | Scaffold `slides.md` + `package.json` + install (`name`, `title?`, `theme?`, `install?`)                                 |
| `start_server`        | Start `slidev --port N` for a presentation, returns the URL                                                              |
| `stop_server`         | Stop a presentation's dev server                                                                                         |
| `server_status`       | List running dev servers                                                                                                 |
| `select_presentation` | Target a presentation → spawns `slidev mcp slides.md`, re-exposes its tools as `slidev_*` and sends `tools/list_changed` |
| `call_slidev_tool`    | Generic passthrough to the targeted Slidev MCP (fallback for clients that ignore `list_changed`, e.g. Claude Desktop)    |

## Notes

- Claude Code (>= 2.1.0) and OpenCode support `tools/list_changed`: after `select_presentation`,
  the `slidev_*` tools appear directly. Claude Desktop ignores it: use `call_slidev_tool` instead.
- The presentation's local Slidev binary (`node_modules/.bin/slidev`) is preferred; falls back to
  `npx -y @slidev/cli` (the package is named `@slidev/cli`, not `slidev`).
- All child processes (dev servers + Slidev MCP) are cleanly killed on shutdown.

## Development

To work on the server itself (not just use it):

```bash
git clone https://github.com/death-joke/slidev-orchestrator-mcp.git
cd slidev-orchestrator-mcp
npm install
npm run build
node dist/index.js --dir /path/to/mainfolder
```

See `CLAUDE.md` for the full architecture overview and contribution guidelines.

TDQS

A4/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct action: listing presentations, creating presentations, starting/stopping servers, checking server status, selecting a presentation, and calling a slidev tool. No two tools have overlapping purposes.

Naming Consistency4/5

Most tools follow a clear verb_noun pattern (list_presentations, create_presentation, start_server, stop_server, select_presentation, call_slidev_tool). The exception is server_status, which is noun_noun; renaming it to get_server_status or list_servers would make the naming fully consistent.

Tool Count5/5

With 7 tools, the server is well-scoped for its purpose of orchestrating Slidev presentations and their dev servers. Each tool earns its place and the count is not overwhelming.

Completeness5/5

The server covers the full lifecycle of presentation scaffolding and server management (create, list, start, stop, status), and provides access to the official Slidev MCP for editing slides. No major gaps are apparent for the stated purpose.

Maintenance

ActivityStale
ResponsivenessNo issues