obs-showrunner-mcp
# OBS ShowRunner MCP Server
**AI Director in the Loop** - MCP server enabling LLMs to control OBS Studio through high-level "show" and "effect" APIs.
[](https://www.npmjs.com/package/obs-showrunner-mcp)
[](https://www.typescriptlang.org/)
[](https://opensource.org/licenses/MIT)
## Overview
OBS ShowRunner transforms your LLM (Claude, ChatGPT, etc.) into an AI Director that can:
- π¬ **Control show flow** - Start/end shows, switch segments with pre-configured scenes
- π¨ **Trigger effects** - Visual effects, overlays, and celebratory animations
- π΅ **Manage audio** - Switch between mood-based audio profiles (talk, hype, cinema)
- π· **See the stream** - Take screenshots for visual decision-making
- βοΈ **Update content** - Dynamically change text, browser sources, and images
- π **Safe by default** - Dangerous operations are blocked in strict mode
## Quick Start
### Prerequisites
- OBS Studio 31+ with WebSocket enabled (default port: 4455)
- Node.js 18+
### Installation
```bash
# Install globally via npm
npm install -g obs-showrunner-mcp
# Or use npx directly (no installation required)
npx obs-showrunner-mcp
```
### Configure Claude Desktop
Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json`):
```json
{
"mcpServers": {
"obs-showrunner": {
"command": "npx",
"args": ["-y", "obs-showrunner-mcp"],
"env": {
"OBS_WEBSOCKET_URL": "ws://localhost:4455",
"OBS_WEBSOCKET_PASSWORD": "your_password"
}
}
}
}
```
Or if installed globally:
```json
{
"mcpServers": {
"obs-showrunner": {
"command": "obs-showrunner-mcp",
"env": {
"OBS_WEBSOCKET_URL": "ws://localhost:4455",
"OBS_WEBSOCKET_PASSWORD": "your_password"
}
}
}
}
```
### Usage
Once configured, you can ask Claude things like:
- "Start the show and switch to the gaming segment"
- "Take a screenshot of the current stream"
- "Switch audio to hype mode"
- "Show the title overlay with text 'Welcome!'"
- "Mark this moment as a highlight"
## Available Tools
### Scene Control
| Tool | Description |
|------|-------------|
| `get_scene_list` | Get list of available scenes |
| `set_scene` | Switch to a specific scene |
### Show Control
| Tool | Description |
|------|-------------|
| `start_show` | Start a show from a template |
| `end_show` | End the current show |
| `switch_segment` | Switch to a different segment |
| `extend_segment` | Extend current segment timer |
| `get_current_show_state` | Get current show state |
### Audio & Effects
| Tool | Description |
|------|-------------|
| `set_audio_mood` | Apply audio mood profile (talk, hype, cinema, etc.) |
| `trigger_effect` | Trigger visual effects |
| `show_overlay` | Show an overlay |
| `hide_overlay` | Hide an overlay |
| `mark_highlight` | Mark a highlight timestamp |
### Vision & Content
| Tool | Description |
|------|-------------|
| `take_stream_snapshot` | Capture screenshot (Vision) |
| `update_source_content` | Update text/browser/image sources |
### Admin
| Tool | Description |
|------|-------------|
| `get_obs_health` | Check OBS connection status |
| `reconnect_obs` | Reconnect to OBS WebSocket |
| `set_safety_mode` | Change safety mode |
| `get_debug_config` | Get debug configuration |
## Resources
| URI | Description |
|-----|-------------|
| `obs://state/current` | Current show state (JSON) |
## Configuration
Environment variables:
| Variable | Default | Description |
|----------|---------|-------------|
| `OBS_WEBSOCKET_URL` | `ws://localhost:4455` | OBS WebSocket URL |
| `OBS_WEBSOCKET_PASSWORD` | - | OBS WebSocket password |
| `SAFETY_MODE` | `strict` | Safety mode (strict/normal/debug) |
| `ALLOW_STOP_STREAMING` | `false` | Allow stopping stream |
| `ALLOW_STOP_RECORDING` | `false` | Allow stopping recording |
| `OBS_MIC_INPUT_NAME` | `Mic/Aux` | Microphone source name |
| `OBS_BGM_INPUT_NAME` | `BGM` | BGM source name |
| `OBS_GAME_INPUT_NAME` | `Game Audio` | Game audio source name |
| `OBS_SE_INPUT_NAME` | `Sound Effects` | Sound effects source name |
## Development
```bash
# Clone the repository
git clone https://github.com/takurot/obs-showrunner-mcp.git
cd obs-showrunner-mcp
# Install dependencies
npm install
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
# Development mode
npm run dev
# Build
npm run build
```
## Safety Modes
- **strict** (default): Blocks all dangerous operations
- **normal**: Allows configured operations only
- **debug**: Dry-run mode, operations are logged but not executed
## Architecture
```
βββββββββββββββ ββββββββββββββββββββββββ βββββββββββββββ
β Claude ββββββΆβ MCP Server ββββββΆβ OBS Studio β
β Desktop βββββββ (obs-showrunner-mcp) βββββββ WebSocket β
βββββββββββββββ ββββββββββββββββββββββββ βββββββββββββββ
β
βββββββββββ΄ββββββββββ
β β
βββββββΌββββββ βββββββββΌββββββββ
β Show β β Safety β
β State β β Guard β
βββββββββββββ βββββββββββββββββ
```
## License
MIT
TDQS
Scored across 18 tools
Most tools are clearly distinct by resource and action: start_show/end_show/switch_segment handle show flow, while set_scene/get_scene_list handle scenes, and show_overlay/hide_overlay handle overlays. The only mild ambiguity is between switch_segment and set_scene, and between trigger_effect and update_source_content, but the descriptions clarify their different purposes. Overall boundaries are distinct.
The naming is highly consistent: nearly all tools use a clear verb_noun pattern (start_show, end_show, switch_segment, show_overlay, hide_overlay, get_scene_list, set_scene). All use snake_case with imperative verbs. The style is uniform and predictable throughout.
18 tools for a show-runner MCP server feels appropriate given the breadth of capabilities it needs to cover: show lifecycle, OBS scene management, overlays, effects, health monitoring, and audio. Each tool serves a distinct function and none feel extraneous for the apparent scope of running live shows via OBS.
The tool set covers show lifecycle (start/end/segment), OBS scene control, overlays, audio, effects, and health/connection diagnostics. Gaps exist: no segment rollback or scene visibility controls, and no realtime state subscription mechanism, but the core show-running operations and OBS basics are covered. The inclusion of debugging utilities (get_debug_config, reconnect_obs) is a thoughtful addition, though there's no explicit 'stop' for effects or a way to revert sources.