OBS Studio MCP from https://github.com/royshil/obs-mcp
50
Control OBS Studio from an AI agent using the Model Context Protocol (MCP). This image packages royshil/obs-mcp and exposes tools for scenes, sources, webcam layouts, audio, streaming, recording, and more through OBS WebSocket.
| Property | Value |
|---|---|
| Image | raveendiranrr/obs_studio_mcp:V1 |
| Docker Hub | raveendiranrr/obs_studio_mcp |
| MCP transport | Standard input/output (stdio) |
| Published V1 platform | linux/arm64 |
| Upstream server version | 1.0.1 |
This image runs the MCP connector, not OBS Studio. Install and run OBS separately, either on your computer or in another container. The image does not provide an OBS desktop or an HTTP MCP endpoint.
Use an MCP-compatible agent to automate OBS production tasks:
The agent translates your request into tool calls. OBS performs the actual capture, rendering, recording, and streaming on the machine where OBS runs.
docker available to your IDE.stdio.V1 is ARM64, suitable for Apple Silicon and other ARM64 Docker hosts. It is not a multi-platform release. For native AMD64 support, build an AMD64 image from this repository.
4455, unless you need another port.On macOS, grant OBS the camera, microphone, and screen recording permissions required by your sources. Connect your camera and enable the display you want to capture. A laptop's built-in display may be unavailable while its lid is closed.
See the official OBS WebSocket documentation.
docker pull raveendiranrr/obs_studio_mcp:V1
The tag is case-sensitive: use V1.
The repository includes docker-mcp.yaml, configured to use the published image. From the repository directory, run these commands in a macOS or Linux shell:
mkdir -p ~/.docker/mcp/catalogs
cp docker-mcp.yaml ~/.docker/mcp/catalogs/obs-mcp.yaml
docker mcp profile server add default --server file://obs-mcp.yaml
If you only have the image, create obs-mcp.yaml in ~/.docker/mcp/catalogs/ with the following content, then run the registration command above:
name: obs-mcp
title: OBS Studio
type: server
image: raveendiranrr/obs_studio_mcp:V1
description: Control OBS Studio through OBS WebSocket using MCP.
allowHosts:
- host.docker.internal:4455
env:
- name: OBS_WEBSOCKET_URL
value: "{{obs-mcp.websocket_url}}"
- name: OBS_WEBSOCKET_PASSWORD
value: "{{obs-mcp.websocket_password}}"
config:
- name: obs-mcp
description: OBS WebSocket connection settings.
type: object
properties:
websocket_url:
type: string
default: ws://host.docker.internal:4455
websocket_password:
type: string
default: ""
These examples assume a profile ID of default. Check with docker mcp profile list. If that ID does not exist, create it with docker mcp profile create --name default, or substitute an existing ID throughout the examples.
For OBS on the same computer as Docker Desktop:
docker mcp profile config default --set obs-mcp.websocket_url=ws://host.docker.internal:4455
docker mcp profile config default --set 'obs-mcp.websocket_password="REPLACE_WITH_OBS_PASSWORD"'
Replace the password locally. The inner double quotes encode a JSON string; the outer single quotes protect it from the shell. Keep this structure even for numeric passwords, which Docker otherwise interprets as numbers. Passwords containing double quotes or backslashes require JSON escaping. Do not publish credentials or commit configured passwords.
If OBS authentication is disabled, set an explicit empty string:
docker mcp profile config default --set 'obs-mcp.websocket_password=""'
The profile stores configuration, including the password. Treat it as sensitive and prefer password-protected OBS access for normal use.
docker mcp profile server ls --filter profile=default
docker mcp tools ls --gateway-arg=--profile --gateway-arg=default
docker mcp tools call --gateway-arg=--profile --gateway-arg=default obs-get-status
docker mcp tools call --gateway-arg=--profile --gateway-arg=default obs-test-connection
Tool discovery confirms that the MCP server starts, not that OBS is connected. Check that obs-get-status reports connected: true and identified: true. A successful test reports Connection test successful - OBS is responding.
For clients using the mcpServers JSON format:
{
"mcpServers": {
"docker-mcp": {
"command": "docker",
"args": ["mcp", "gateway", "run", "--profile", "default"]
}
}
}
For VS Code's .vscode/mcp.json format, use a top-level servers object instead and add "type": "stdio" to the entry. The gateway exposes the servers enabled in that profile, not just OBS.
Your IDE launches the gateway; a separate terminal gateway is unnecessary for this setup. Restart or reconnect the MCP server in your IDE after changing settings.
See Docker's MCP Toolkit CLI guide for profile and gateway commands.
This option does not require Docker MCP Toolkit.
Create obs-mcp.env outside your repository:
OBS_WEBSOCKET_URL=ws://host.docker.internal:4455
OBS_WEBSOCKET_PASSWORD=REPLACE_WITH_OBS_PASSWORD
Replace the password with the one from OBS. Docker's --env-file passes values literally: do not surround the password with quotation marks. If authentication is disabled, leave the value after = empty. Keep the file out of version control. On macOS/Linux, restrict access with chmod 600 /absolute/path/obs-mcp.env.
In Cursor, use .cursor/mcp.json for a project or ~/.cursor/mcp.json for your user. Other clients using mcpServers, such as Claude Desktop, can use the same entry in their own MCP configuration file:
{
"mcpServers": {
"obs-studio": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"--env-file",
"/absolute/path/obs-mcp.env",
"raveendiranrr/obs_studio_mcp:V1"
]
}
}
}
Replace the file path with a real absolute path. On Windows, a JSON path might be C:\\Users\\YourName\\obs-mcp.env.
For VS Code's .vscode/mcp.json format:
{
"servers": {
"obs-studio": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"--env-file",
"/absolute/path/obs-mcp.env",
"raveendiranrr/obs_studio_mcp:V1"
]
}
}
}
Start the server using VS Code's MCP controls and enable its tools in your agent session. VS Code also supports portable .mcp.json files with a top-level mcpServers object; use the preceding generic example for that format.
For any client supporting local MCP servers, configure:
| Field | Value |
|---|---|
| Transport | stdio |
| Command | docker |
| Arguments | run --rm -i --env-file /absolute/path/obs-mcp.env raveendiranrr/obs_studio_mcp:V1 |
Enter arguments as separate array entries when required. Keep -i to preserve standard input; do not add -t or -d. No MCP port mapping is needed because communication uses stdio. If your IDE runs remotely or inside a development container, Docker access, the file path, and the OBS address must be valid in that environment.
After connecting, ask the agent to test its OBS connection before making changes. See the Cursor MCP guide and VS Code MCP guide for client details.
| Where OBS runs | Connection |
|---|---|
| Docker Desktop host | ws://host.docker.internal:4455 |
| Another computer | ws://<OBS-computer-IP>:4455; allow access through its firewall |
| Another container, published port | Publish that OBS container's WebSocket port; use ws://host.docker.internal:<published-port> with Docker Desktop |
| Same user-defined Docker network | Use ws://<OBS-container-name>:4455; in direct Docker setup, add --network <network-name> before the image |
| Native Linux Docker host | In direct setup, add --add-host host.docker.internal:host-gateway before the image, or use a reachable host IP |
localhost inside the MCP container refers to that container, not your computer. If Toolkit network blocking is enabled, update the catalog's allowHosts to match a custom OBS host and port. An OBS container needs its own camera, audio, and display capture setup.
Media paths, recording directories, and screenshot save paths refer to the filesystem where OBS runs, not the MCP container or IDE. Mount media into the OBS container if OBS itself is containerized.
V1 registers 127 tools across 13 categories. Support depends on your OBS version, plugins, platform, and devices. See OBS_MCP_TOOLS.md for the complete names. Your client discovers each tool's description and argument schema through MCP.
| Category | Count | Examples |
|---|---|---|
| General and connection | 10 | obs-get-status, obs-test-connection, obs-get-version, obs-get-stats, hotkeys |
| Scenes | 8 | obs-create-scene, obs-get-scene-list, obs-set-current-scene, preview scenes |
| Scene items | 7 | obs-create-scene-item, obs-set-scene-item-transform, visibility, cropping, positioning |
| Inputs and audio | 20 | obs-create-input, obs-set-input-settings, volume, mute, balance, monitoring |
| Sources and screenshots | 3 | obs-get-source-active, obs-get-source-screenshot, obs-save-source-screenshot |
| Filters | 10 | Create, remove, rename, reorder, enable, and configure source filters |
| Streaming | 5 | obs-start-stream, obs-stop-stream, obs-get-stream-status, captions |
| Recording | 9 | Start, stop, pause, resume, split recording files, chapter markers |
| Outputs | 17 | Virtual camera, replay buffer, generic output status and settings |
| Transitions | 9 | Transition selection, duration, settings, and triggering |
| Media inputs | 4 | Playback status, cursor position, and media actions |
| Profiles and configuration | 17 | Scene collections, profiles, video settings, stream settings, recording directory |
| Studio UI | 8 | Studio mode, monitor list, source property dialogs, projectors |
For individual schemas in Toolkit:
docker mcp tools inspect --gateway-arg=--profile --gateway-arg=default obs-create-scene
Device and source names must match what OBS exposes. Creating a scene does not guarantee that devices are connected or capture permissions are granted.
| Symptom | Check |
|---|---|
| Tools appear but OBS is disconnected | OBS must be running; enable WebSocket, verify host/port and authentication, then reconnect MCP |
| Authentication fails | Use the exact password; check for extra quotes or spaces, especially in Docker env files |
| Toolkit requires a string password | Use the JSON-string quoting above, including for numeric passwords |
| Toolkit initialization returns EOF | Run docker mcp gateway run --profile default --dry-run and inspect startup errors |
| IDE cannot find Docker | Use the absolute Docker executable path or fix the IDE environment |
| No matching manifest for AMD64 | V1 is ARM64; build a native AMD64 image from source |
| Camera or screen capture is black | Check OBS permissions, device selection, source visibility, and whether the device/display is active |
| Unsupported request or OBS crash | Check OBS/plugin versions and logs; avoid repeating the failing request until its cause is resolved |
A manually started container may appear idle while waiting for MCP messages. The IDE normally starts and manages it; it is not a browser-accessible service.
From this repository directory:
docker build -t obs-mcp:local .
For an AMD64 image:
docker buildx build --platform linux/amd64 --load -t obs-mcp:local .
Use obs-mcp:local in your IDE configuration or catalog when using a local build. The Dockerfile compiles TypeScript and runs the server as the non-root node user.
| Variable | Image default | Purpose |
|---|---|---|
OBS_WEBSOCKET_URL | ws://host.docker.internal:4455 | OBS address reachable from the container |
OBS_WEBSOCKET_PASSWORD | Not set | Password when OBS authentication is enabled |
Outside this image, the upstream server defaults to ws://localhost:4455. The image overrides that default for Docker Desktop host access.
This image packages royshil/obs-mcp. Credit for the upstream MCP server belongs to its author and contributors. V1 is the Docker image release tag, separate from the upstream server version.
The repository includes the GNU General Public License, version 2. See LICENSE for full terms. Third-party components retain their respective licenses. Preserve the license and attribution when redistributing this project.
This is an independent community image. It is not affiliated with, endorsed by, or officially supported by the OBS Project, Docker, or any IDE or AI provider. Product names and trademarks belong to their respective owners.
The software is provided as is, without warranty, subject to the included license. Availability and behavior depend on OBS, its plugins, your devices, your MCP client, and network connectivity.
An agent with these tools can start or stop live broadcasts and recordings, change scenes, remove sources, alter audio, and capture screen or camera content. Review agent actions before granting approval, back up important OBS profiles and scene collections, and test workflows before live production. The connector does not add a per-action approval layer; approval behavior comes from your MCP client.
Keep WebSocket authentication enabled, protect credentials, and restrict access to trusted clients and networks. You are responsible for captured or broadcast content and for obtaining necessary permissions or consent. To the extent allowed by applicable law and the license, authors and distributors disclaim liability for loss, unintended broadcasts, recording failures, or other consequences of use.
Content type
Image
Digest
sha256:62adbf4ae…
Size
48.3 MB
Last updated
5 days ago
docker pull raveendiranrr/obs_studio_mcp:V1