Skip to main content
Glama
README.md
# obs-mcp-server

An MCP (Model Context Protocol) server for controlling [OBS Studio](https://obsproject.com/) via the built-in obs-websocket plugin. Lets Claude control your scenes, recording, streaming, audio, and more.

## Requirements

- [OBS Studio](https://obsproject.com/) 28 or later (obs-websocket is built in)
- Node.js 18 or later

## OBS Setup

1. Open OBS Studio
2. Go to **Tools → WebSocket Server Settings**
3. Check **Enable WebSocket server**
4. Set a password (recommended)
5. Note the port (default: `4455`)

## Installation

```bash
npm install
```

Create a `.env` file in the project root:

```env
OBS_WS_URL=ws://localhost:4455
OBS_WS_PASSWORD=your_password_here
```

## Claude Desktop Config

Add the following to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "obs": {
      "command": "node",
      "args": ["C:\\path\\to\\obs-mcp-server\\obs-mcp-server.js"]
    }
  }
}
```

Or use `npx` (no cloning required):

```json
{
  "mcpServers": {
    "obs": {
      "command": "npx",
      "args": ["-y", "obs-mcp-server"],
      "env": {
        "OBS_WS_PASSWORD": "your_password_here"
      }
    }
  }
}
```

## Available Tools

### Status & Scenes
| Tool | Description |
|------|-------------|
| `get_status` | Current scene, streaming state, recording state + timecodes |
| `list_scenes` | List all scenes in the active collection |
| `set_scene` | Switch to a named scene |

### Recording & Streaming
| Tool | Description |
|------|-------------|
| `start_recording` | Start recording |
| `stop_recording` | Stop recording (returns output file path) |
| `toggle_recording` | Toggle recording on/off |
| `start_streaming` | Start streaming |
| `stop_streaming` | Stop streaming |

### Sources
| Tool | Description |
|------|-------------|
| `list_sources` | List all sources in a scene |
| `set_source_visibility` | Show or hide a source |

### Audio
| Tool | Description |
|------|-------------|
| `list_audio_inputs` | List all audio inputs with mute/volume state |
| `set_mute` | Mute or unmute an audio input |
| `toggle_mute` | Toggle mute on an audio input |
| `set_volume` | Set volume (0.0–1.0) on an audio input |

### Canvas
| Tool | Description |
|------|-------------|
| `set_canvas_resolution` | Set base/output resolution and FPS (global per collection) |

### Scene Management
| Tool | Description |
|------|-------------|
| `create_scene` | Create a new empty scene |
| `remove_scene` | Delete a scene |
| `rename_scene` | Rename a scene |

### Scene Collections
| Tool | Description |
|------|-------------|
| `list_scene_collections` | List all collections, show active |
| `set_scene_collection` | Switch to a different collection |
| `create_scene_collection` | Create a new scene collection |

### Profiles
| Tool | Description |
|------|-------------|
| `list_profiles` | List all profiles, show active |
| `set_profile` | Switch to a different profile |
| `create_profile` | Create a new profile |
| `remove_profile` | Delete a profile |

### Misc
| Tool | Description |
|------|-------------|
| `save_screenshot` | Save a screenshot of the current output to disk |

## Notes

- **Canvas resolution** is a global OBS setting — it applies to all scenes in the current collection. Use separate scene collections for different aspect ratios (e.g. 16:9 vs 9:16 for YouTube Shorts).
- **Audio input kinds** default to Windows (`wasapi_*`). On macOS, update the `list_audio_inputs` handler to use `coreaudio_input_capture` / `coreaudio_output_capture`.

## License

MIT

TDQS

A3.5/5.0

Scored across 26 tools

Disambiguation4/5

Most tools have clear distinct purposes, but there is some overlap: 'set_mute' and 'toggle_mute' both handle audio muting, and 'start_recording'/'stop_recording' overlap with 'toggle_recording'. However, the descriptions help clarify the differences, and other tools like scene management and audio controls are well-separated.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, such as 'create_profile', 'list_scenes', 'set_volume', and 'start_streaming'. This uniformity makes the tool set predictable and easy to navigate, with no deviations in naming conventions.

Tool Count3/5

With 26 tools, the count is borderline high for an OBS control server, as it includes many specific operations like separate start/stop and toggle functions. While comprehensive, it might feel heavy compared to a more streamlined set, but it still covers the domain thoroughly without being extreme.

Completeness5/5

The tool set provides complete coverage for OBS management, including CRUD operations for profiles, scenes, and scene collections, audio control, streaming/recording lifecycle, and status monitoring. There are no obvious gaps, and agents can perform all core workflows without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues