ObsBLOCK
An MCP server for OBS
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
An MCP server for OBS Studio that provides tools to control OBS via the OBS WebSocket protocol.
Features
- Connect to OBS WebSocket server
- Control OBS via MCP tools
- Provides tools for:
- General operations
- Scene management
- Source control
- Scene item manipulation
- Streaming and recording
- Transitions
Usage
- Make sure OBS Studio is running with WebSocket server enabled (Tools > WebSocket Server Settings). Note the password for the WS.
- Set the WebSocket password in environment variable (if needed):
export OBS_WEBSOCKET_PASSWORD="your_password_here"
- Add the MCP server to Claude desktop with the MCP server settings:
{
"mcpServers": {
"obs": {
"command": "npx",
"args": ["-y", "obs-mcp@latest"],
"env": {
"OBS_WEBSOCKET_PASSWORD": ""
}
}
}
}- Use Claude to control your OBS!
Development
If you want to run the server locally using the code in this git repo, you can do the following:
npm run build npm run start
Then configure Claude desktop:
{
"mcpServers": {
"obs": {
"command": "node",
"args": [
"/build/index.js"
],
"env": {
"OBS_WEBSOCKET_PASSWORD": ""
}
}
}
}Available Tools
The server provides tools organized by category:
- General tools: Version info, stats, hotkeys, studio mode
- Scene tools: List scenes, switch scenes, create/remove scenes
- Source tools: Manage sources, settings, audio levels, mute/unmute
- Scene item tools: Manage items in scenes (position, visibility, etc.)
- Streaming tools: Start/stop streaming, recording, virtual camera
- Transition tools: Set transitions, durations, trigger transitions
Environment Variables
OBS_WEBSOCKET_URL: WebSocket URL (default: ws://localhost:4455)OBS_WEBSOCKET_PASSWORD: Password for authenticating with OBS WebSocket (if required)
#
c31871027fbdOBSERVED · 2026-10-07Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add obs-mcp --env OBS_WEBSOCKET_PASSWORD=${OBS_WEBSOCKET_PASSWORD} --env OBS_WS_PASSWORD=${OBS_WS_PASSWORD} -- npx -y [email protected]{
"mcpServers": {
"obs-mcp": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"OBS_WEBSOCKET_PASSWORD": "${OBS_WEBSOCKET_PASSWORD}",
"OBS_WS_PASSWORD": "${OBS_WS_PASSWORD}"
}
}
}
}Exposed tools (200)
106 read · 87 write · 7 destructive. Blast radius: 7 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
broadcast_custom_event | read | |
call_vendor_request | read | |
create_scene | write | |
create_scene_item | write | |
create_source_filter | write | |
duplicate_scene_item | read | |
get_current_preview_scene | read | |
get_current_program_scene | read | |
get_current_scene_transition | read | |
get_group_item_list | read | |
get_group_list | read | |
get_hot_key_list | read | |
get_last_replay_buffer_replay | read | |
get_record_status | read | |
get_replay_buffer_status | read | |
get_scene_item_blend_mode | read | |
get_scene_item_enabled | read | |
get_scene_item_id | read | |
get_scene_item_index | read | |
get_scene_item_list | read | |
get_scene_item_locked | read | |
get_scene_item_transform | read | |
get_scene_list | read | |
get_scene_scene_transition_override | read | |
get_scene_transition_list | read | |
get_scene_transition_override | read | |
get_source_active | read | |
get_source_filter_default_settings | read | |
get_source_filter_list | read | |
get_source_screenshot | read | |
get_stats | read | |
get_stream_status | read | |
get_transition_kind_list | read | |
get_version | read | |
get_virtual_cam_status | read | |
obs-broadcast-custom-event | read | Broadcasts a CustomEvent to all WebSocket clients |
obs-call-vendor-request | read | Call a request registered to a vendor |
obs-create-input | write | Creates a new input, adding it as a scene item to the specified scene |
obs-create-profile | write | Creates a new profile, switching to it in the process |
obs-create-record-chapter | write | Adds a new chapter marker to the file currently being recorded |
obs-create-scene | write | Create a new scene in OBS |
obs-create-scene-collection | write | Creates a new scene collection, switching to it in the process |
obs-create-scene-item | write | Create a scene item for a source in a scene |
obs-create-source-filter | write | Creates a new filter, adding it to the specified source |
obs-get-current-scene | read | Get the current active scene in OBS |
obs-get-current-transition | read | Get the name of the currently active transition |
obs-get-filter-default-settings | read | Gets the default settings for a filter kind |
obs-get-filter-kind-list | read | Gets an array of all available source filter kinds |
obs-get-hotkey-list | read | Gets an array of all hotkey names in OBS |
obs-get-input-audio-balance | read | Gets the audio balance of an input |
obs-get-input-audio-monitor-type | read | Gets the audio monitor type of an input |
obs-get-input-audio-sync-offset | write | Gets the audio sync offset of an input |
obs-get-input-default-settings | read | Gets the default settings for an input kind |
obs-get-input-kind-list | read | Gets an array of all available input kinds in OBS |
obs-get-input-list | read | Gets an array of all inputs in OBS |
obs-get-input-mute | read | Gets the audio mute state of an input |
obs-get-input-settings | read | Gets the settings of an input |
obs-get-input-volume | read | Gets the current volume setting of an input |
obs-get-last-replay-buffer-replay | write | Gets the filename of the last replay buffer save file |
obs-get-media-input-status | read | Gets the status of a media input |
obs-get-monitor-list | read | Gets a list of connected monitors and information about them |
obs-get-output-list | read | Gets the list of available outputs |
obs-get-output-settings | read | Gets the settings of an output |
obs-get-output-status | read | Gets the status of an output |
obs-get-persistent-data | read | Gets the value of a slot from the selected persistent data realm |
obs-get-preview-scene | read | Get the current preview scene in OBS Studio Mode |
obs-get-profile-list | read | Gets an array of all profiles |
obs-get-profile-parameter | read | Gets a parameter from the current profile |
obs-get-record-directory | write | Gets the current directory that the record output is set to |
obs-get-record-status | read | Gets the status of the record output |
obs-get-replay-buffer-status | read | Gets the status of the replay buffer output |
obs-get-scene-collection-list | read | Gets an array of all scene collections |
obs-get-scene-item-id | read | Get the ID of a scene item by its source name |
obs-get-scene-item-transform | read | Get the position, rotation, scale, or crop of a scene item |
obs-get-scene-items | read | Get a list of all scene items in a scene |
obs-get-scene-list | read | Get a list of scenes in OBS |
obs-get-source-active | read | Gets the active and show state of a source |
obs-get-source-filter | read | Gets the info for a specific source filter |
obs-get-source-filter-list | read | Gets an array of all of a source |
obs-get-source-screenshot | read | Gets a Base64-encoded screenshot of a source |
obs-get-special-inputs | read | Gets the names of all special inputs |
obs-get-stats | read | Gets statistics about OBS, obs-websocket, and the current session |
obs-get-status | read | Get the current status of the OBS MCP server and OBS connection |
obs-get-stream-service-settings | read | Gets the current stream service settings |
obs-get-stream-status | read | Get the current streaming status |
obs-get-studio-mode | read | Gets whether studio mode is enabled |
obs-get-transition-duration | read | Get the duration of the current transition in milliseconds |
obs-get-transition-kind | read | Get the kind/type of the current transition |
obs-get-transition-list | read | Get a list of available transitions in OBS |
obs-get-transition-settings | read | Get the settings of the current transition |
obs-get-version | read | Get OBS Studio version information |
obs-get-video-settings | read | Gets the current video settings |
obs-get-virtual-cam-status | read | Gets the status of the virtualcam output |
obs-offset-media-input-cursor | read | Offsets the current cursor position of a media input |
obs-open-input-filters | read | Opens the filters dialog of an input |
obs-open-input-interact | read | Opens the interact dialog of an input |
obs-open-input-properties | read | Opens the properties dialog of an input |
obs-open-source-projector | read | Opens a projector for a source |
obs-open-video-mix-projector | read | Opens a projector for a specific output video mix |
obs-pause-record | read | Pauses the record output |
obs-remove-input | destructive | Removes an existing input |
obs-remove-profile | destructive | Removes a profile. If the current profile is chosen, it will change to a different profile first |
obs-remove-scene | destructive | Remove a scene from OBS |
obs-remove-scene-item | destructive | Remove a scene item from a scene |
obs-remove-source-filter | destructive | Removes a filter from a source |
obs-resume-record | read | Resumes the record output |
obs-save-replay-buffer | write | Saves the contents of the replay buffer output |
obs-save-source-screenshot | write | Saves a screenshot of a source to the filesystem |
obs-send-stream-caption | write | Sends CEA-608 caption text over the stream output |
obs-set-current-profile | write | Switches to a profile |
obs-set-current-scene | write | Set the current active scene in OBS |
obs-set-current-scene-collection | write | Switches to a scene collection |
obs-set-current-transition | write | Set the current transition in OBS |
obs-set-input-audio-balance | write | Sets the audio balance of an input |
obs-set-input-audio-monitor-type | write | Sets the audio monitor type of an input |
obs-set-input-audio-sync-offset | write | Sets the audio sync offset of an input |
obs-set-input-mute | write | Sets the audio mute state of an input |
obs-set-input-name | write | Sets the name of an input (rename) |
obs-set-input-settings | write | Sets the settings of an input |
obs-set-input-volume | write | Sets the volume setting of an input |
obs-set-media-input-cursor | write | Sets the cursor position of a media input |
obs-set-output-settings | write | Sets the settings of an output |
obs-set-persistent-data | write | Sets the value of a slot from the selected persistent data realm |
obs-set-preview-scene | write | Set the current preview scene in OBS Studio Mode |
obs-set-profile-parameter | write | Sets the value of a parameter in the current profile |
obs-set-record-directory | write | Sets the current directory that the record output writes files to |
obs-set-scene-item-enabled | write | Show or hide a scene item |
obs-set-scene-item-transform | write | Set the position, rotation, scale, or crop of a scene item |
obs-set-source-filter-enabled | write | Sets the enable state of a source filter |
obs-set-source-filter-index | write | Sets the index position of a filter on a source |
obs-set-source-filter-name | write | Sets the name of a source filter (rename) |
obs-set-source-filter-settings | write | Sets the settings of a source filter |
obs-set-stream-service-settings | write | Sets the current stream service settings |
obs-set-studio-mode | write | Enables or disables studio mode |
obs-set-transition-duration | write | Set the duration of the current transition in milliseconds |
obs-set-transition-settings | write | Set the settings of the current transition |
obs-set-video-settings | write | Sets the current video settings |
obs-sleep | read | Sleeps for a time duration or number of frames |
obs-split-record-file | read | Splits the current file being recorded into a new file |
obs-start-output | write | Starts an output |
obs-start-record | write | Starts the record output |
obs-start-replay-buffer | write | Starts the replay buffer output |
obs-start-stream | write | Start streaming in OBS |
obs-start-virtual-cam | write | Starts the virtualcam output |
obs-stop-output | write | Stops an output |
obs-stop-record | write | Stops the record output |
obs-stop-replay-buffer | write | Stops the replay buffer output |
obs-stop-stream | write | Stop streaming in OBS |
obs-stop-virtual-cam | write | Stops the virtualcam output |
obs-test-connection | read | Test the connection to OBS WebSocket |
obs-toggle-input-mute | read | Toggles the audio mute state of an input |
obs-toggle-output | read | Toggles the status of an output |
obs-toggle-record | read | Toggles the status of the record output |
obs-toggle-record-pause | read | Toggles pause on the record output |
obs-toggle-replay-buffer | read | Toggles the state of the replay buffer output |
obs-toggle-stream | read | Toggle the streaming state in OBS |
obs-toggle-virtual-cam | read | Toggles the state of the virtualcam output |
obs-trigger-hotkey-by-key-sequence | write | Triggers a hotkey using a sequence of keys |
obs-trigger-hotkey-by-name | write | Triggers a hotkey using its name |
obs-trigger-media-input-action | write | Triggers an action on a media input |
obs-trigger-studio-transition | write | Trigger a transition from preview to program scene in Studio Mode |
obs-trigger-transition | write | Trigger a scene transition in OBS (Studio Mode must be enabled) |
pause_record | read | |
remove_scene | destructive | |
remove_scene_item | destructive | |
resume_record | read | |
save_replay_buffer | write | |
save_source_screenshot | write | |
send_stream_caption | write | |
set_current_preview_scene | write | |
set_current_program_scene | write | |
set_current_scene_transition | write | |
set_current_scene_transition_duration | write | |
set_current_scene_transition_settings | write | |
set_scene_item_blend_mode | write | |
set_scene_item_enabled | write | |
set_scene_item_index | write | |
set_scene_item_locked | write | |
set_scene_item_transform | write | |
set_scene_name | write | |
set_scene_scene_transition_override | write | |
set_scene_transition_override | write | |
set_tbar_position | write | |
sleep | read | |
start_record | write | |
start_replay_buffer | write | |
start_stream | write | |
start_virtual_cam | write | |
stop_record | write | |
stop_replay_buffer | write | |
stop_stream | write | |
stop_virtual_cam | write | |
toggle_record | read | |
toggle_record_pause | read | |
toggle_replay_buffer | read | |
toggle_stream | read | |
toggle_virtual_cam | read | |
trigger_hotkey_by_key_sequence | write | |
trigger_hotkey_by_name | write | |
trigger_studio_mode_transition | write |
Trust audit
BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | FAIL |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- declared (5 observation(s))
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (8)
obs-remove-input, obs-remove-profile, obs-remove-scene, obs-remove-scene-item, obs-remove-source-filter, remove_scene, remove_scene_item
@modelcontextprotocol/sdk, crypto-js, ws, zod, @types/crypto-js, @types/node, @types/ws, typescript
- At any time after a client has been identified, it may send an [OpCode 3 `Reidentify`](#reidentify-opcode-3) message to update certain allowed session parameters. The server will respond in the same
obs-websocket uses SHA256 to transmit authentication credentials. The server starts by sending an object in the `authentication` field of its `Hello` message data. The client processes the authenticat
Gates applied: no_behavioural_pass.
c31871027fbdfull audit observations/trust-audit/mcp-server/royshil__obs.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-07 | c31871027fbd | BLOCK | D | 69 | first audit |
Questions
What is the Obs MCP server?
An MCP server for OBS
What tools does Obs expose?
200 in total: 106 read-only, 87 that write, and 7 that can delete or overwrite (obs-remove-input, obs-remove-profile, obs-remove-scene, obs-remove-scene-item, obs-remove-source-filter). Every one is listed on this page with its risk.
Is Obs safe to connect to an agent?
No — not without reading the findings first. The audit graded it D (69/100) and found 4 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 7 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does Obs need?
It reads OBS_WEBSOCKET_PASSWORD and OBS_WS_PASSWORD from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does Obs run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as obs-mcp at 1.0.1.
How current is this page?
The grade is for one exact copy of the source (c31871027fbd), read on 2026-10-07. The repository is watched and re-audited when it changes.