OBS_MCPBLOCK
AI-powered stream and recording control for OBS Studio via MCP — 148 tools for scenes, audio mixer, filters, streaming, recording, and stream health diagnostics.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
OBS-MCP
AI-powered stream and recording control for OBS Studio through the Model Context Protocol
Quick Start • New Here? • Why OBS-MCP? • Features • Tools Reference • Architecture • Troubleshooting
OBS-MCP connects any MCP-compatible AI assistant to OBS Studio, giving it full control over your stream and recordings. Say "clean up my mic" or "switch to my starting soon scene" and it just happens — no clicking through menus yourself.
148 tools cover the ent
0c32caf4a60dOBSERVED · 2026-10-14Connect
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_PASSWORD=${OBS_PASSWORD} -- uvx obs-mcp{
"mcpServers": {
"obs-mcp": {
"command": "uvx",
"args": [
"obs-mcp"
],
"env": {
"OBS_PASSWORD": "${OBS_PASSWORD}"
}
}
}
}Exposed tools (148)
74 read · 69 write · 5 destructive. Blast radius: 5 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 | Broadcast a CustomEvent to all subscribed obs-websocket clients. |
call_vendor_request | read | Call a request registered by a third-party OBS plugin/script vendor. |
clean_audio_input | write | Set up a standard mic-cleanup filter chain in one call: Noise Gate |
create_input | write | Create a new input and add it as a scene item to a scene. |
create_profile | write | Create a new profile and switch to it. |
create_record_chapter | write | Add a chapter marker to the file currently being recorded. Only |
create_scene | write | Create a new, empty scene. |
create_scene_collection | write | Create a new scene collection and switch to it. |
create_scene_item | write | Add an existing source to a scene as a new scene item. |
create_source_filter | write | Add a new filter to a source. |
diagnose_av_health | read | Diagnose why a stream/recording might be dropping frames or stuttering |
duplicate_scene_item | read | Duplicate a scene item, copying its transform/crop, optionally into |
get_canvas_list | read | List all canvases in OBS (multi-canvas is a newer OBS feature; most |
get_current_preview_scene | read | The scene currently loaded in Preview. Only meaningful in studio mode. |
get_current_program_scene | read | The scene currently live on Program (what viewers see). |
get_current_scene_transition | read | Full detail on the current transition: kind, duration, whether it |
get_current_scene_transition_cursor | read | Current transition progress, 0.0-1.0. Returns 1.0 when no transition is active. |
get_group_list | read | List all groups (OBS treats groups as a special kind of scene). |
get_group_scene_item_list | read | Like get_scene_item_list, but for a group (OBS groups are broken |
get_hotkey_list | read | List all hotkey names in OBS. Best-effort — hotkey requests are less |
get_input_audio_balance | read | Get an input |
get_input_audio_monitor_type | read | Get an input |
get_input_audio_sync_offset | write | Get an input |
get_input_audio_tracks | read | Get which of the 6 audio mixer tracks this input is routed to. |
get_input_default_settings | read | Default settings object for an input kind — overlay get_input_settings |
get_input_deinterlace_field_order | write | Get an input |
get_input_deinterlace_mode | read | Get an input |
get_input_kind_list | write | List every input kind (source type) this OBS install can create. |
get_input_list | read | List all inputs (sources like mic, capture card, browser source, etc). |
get_input_mute | read | Get an input |
get_input_properties_list_property_items | read | Get the items of a dynamic list property on an input — e.g. the |
get_input_settings | read | Current (non-default) settings of an input, plus its kind. |
get_input_volume | read | Get an input |
get_last_replay_buffer_replay | write | File path of the last replay buffer save. |
get_media_input_status | read | Playback state (playing/paused/stopped/buffering/ended/error), |
get_monitor_list | read | List connected monitors (for opening a projector on one). |
get_output_list | read | List every registered OBS output (stream, record, virtualcam, |
get_output_settings | read | Get a named output |
get_output_status | read | Detailed status of a named output: active/reconnecting, timecode, |
get_persistent_data | read | Get a value from an OBS persistent-data |
get_profile_list | read | List all profiles and the currently active one. |
get_profile_parameter | read | Read a raw parameter from the current profile |
get_record_directory | read | Current output directory for recordings. |
get_record_status | read | Record output status: active, paused, timecode, duration, bytes written. |
get_replay_buffer_status | read | Whether the replay buffer is active. |
get_scene_collection_list | read | List all scene collections and the currently active one. |
get_scene_item_blend_mode | read | Get a scene item |
get_scene_item_enabled | read | Get whether a scene item is currently visible (shown/hidden, not mute). |
get_scene_item_id | read | Find a scene item |
get_scene_item_index | read | Get a scene item |
get_scene_item_list | read | List every scene item (placed source) in a scene. |
get_scene_item_locked | read | Get a scene item |
get_scene_item_source | read | Get the source name/UUID a scene item references. |
get_scene_item_transform | read | Get a scene item |
get_scene_list | read | List every scene, plus the current program and preview scene names. |
get_scene_transition_list | read | List every configured transition and which one is current. |
get_scene_transition_override | read | Get the transition overridden for a specific scene, if any. |
get_source_active | read | Check whether a source (input or scene) is currently showing in |
get_source_filter | read | Get a filter |
get_source_filter_default_settings | read | Default settings object for a filter kind. |
get_source_filter_kind_list | write | List every filter kind this OBS install supports (noise_suppress_filter, |
get_source_filter_list | write | List all filters on a source (input or scene), in chain order. |
get_source_screenshot | read | Get a Base64-encoded screenshot of a source (input or scene) — use |
get_special_inputs | read | Names of the built-in special audio inputs: Desktop Audio 1/2, |
get_stats | read | Live perf stats: CPU/memory usage, active FPS, render/output skipped |
get_stream_service_settings | read | Current stream destination service type and settings (server/key etc). |
get_stream_status | read | Stream output status: active/reconnecting, timecode, duration, |
get_studio_mode_enabled | read | Whether studio mode (separate Preview/Program) is enabled. |
get_transition_kind_list | write | List every transition kind this OBS install supports (Cut, Fade, Stinger, etc). |
get_version | read | OBS/obs-websocket version info, platform, and the full list of requests |
get_video_settings | read | Current canvas/output resolution and FPS (as a fraction — divide |
get_virtual_cam_status | read | Whether the virtual camera output is active. |
offset_media_input_cursor | read | Seek a media source relative to its current position. No bounds checking. |
open_input_filters_dialog | read | Open an input |
open_input_interact_dialog | read | Open an input |
open_input_properties_dialog | read | Open an input |
open_source_projector | read | Open a fullscreen or windowed projector for a specific source. |
open_video_mix_projector | read | Open a fullscreen or windowed projector for Preview/Program/Multiview. |
pause_record | read | Pause the active recording. |
press_input_properties_button | read | Press a button in an input |
remove_input | destructive | Delete an input. Removes all its scene items too. |
remove_profile | destructive | Remove a profile. If it |
remove_scene | destructive | Delete a scene. |
remove_scene_item | destructive | Remove a scene item from a scene (does not delete the underlying source). |
remove_source_filter | destructive | Remove a filter from a source. |
resume_record | read | Resume a paused recording. |
save_replay_buffer | write | Save the last N seconds from the replay buffer to disk — the |
save_source_screenshot | write | Save a screenshot of a source (input or scene) directly to disk. |
send_stream_caption | write | Send CEA-608 caption text over the live stream output. |
set_current_preview_scene | write | Load a scene into Preview (studio mode only) — stage it before |
set_current_profile | write | Switch to a profile by name. |
set_current_program_scene | write | Switch the live Program scene — the core |
set_current_scene_collection | write | Switch to a scene collection by name. Blocks until the switch completes. |
set_current_scene_transition | write | Make a transition the active one for the next scene switch. |
set_current_scene_transition_duration | write | Set the duration of the current transition, if it isn |
set_current_scene_transition_settings | write | Configure the current transition (e.g. a Stinger |
set_input_audio_balance | write | Set an input |
set_input_audio_monitor_type | write | Set an input |
set_input_audio_sync_offset | write | Set an input |
set_input_audio_tracks | write | Set which audio mixer tracks an input is routed to. |
set_input_deinterlace_field_order | write | Set an input |
set_input_deinterlace_mode | write | Set an input |
set_input_mute | write | Mute or unmute an input. |
set_input_name | write | Rename an input. |
set_input_settings | write | Set an input |
set_input_volume | write | Set an input |
set_media_input_cursor | write | Seek a media source to an absolute position. No bounds checking. |
set_output_settings | write | Set a named output |
set_persistent_data | write | Set a value in an OBS persistent-data |
set_profile_parameter | write | Write a raw parameter into the current profile |
set_record_directory | write | Set the output directory recordings are written to. |
set_scene_item_blend_mode | write | Set a scene item |
set_scene_item_enabled | write | Show or hide a scene item. |
set_scene_item_index | write | Reorder a scene item |
set_scene_item_locked | write | Lock or unlock a scene item. |
set_scene_item_transform | write | Set a scene item |
set_scene_name | write | Rename a scene. |
set_scene_transition_override | write | Override which transition (and/or duration) is used when switching |
set_source_filter_enabled | write | Enable or disable a filter without removing it. |
set_source_filter_index | write | Reorder a filter within a source |
set_source_filter_name | write | Rename a filter. |
set_source_filter_settings | write | Configure a filter |
set_stream_service_settings | write | Set the stream destination. For a plain custom RTMP target, use |
set_studio_mode_enabled | write | Enable or disable studio mode. |
set_tbar_position | write | Set the T-bar position for manual transition scrubbing. |
set_video_settings | write | Change canvas/output resolution and/or FPS. Width/height fields must |
split_record_file | read | Split the current recording into a new file right now — useful for |
start_output | write | Start a named output. |
start_record | write | Start recording to disk (see config_tools.get/set_record_directory |
start_replay_buffer | write | Start the replay buffer. |
start_stream | write | Go live. Requires stream service settings to already be configured |
start_virtual_cam | write | Start the virtual camera. |
stop_output | write | Stop a named output. |
stop_record | write | Stop recording. Returns the saved file |
stop_replay_buffer | write | Stop the replay buffer. |
stop_stream | write | End the stream. |
stop_virtual_cam | write | Stop the virtual camera. |
toggle_input_mute | read | Toggle an input |
toggle_output | read | Toggle a named output on/off. |
toggle_record | read | Toggle recording on/off. |
toggle_record_pause | read | Toggle pause on the active recording. |
toggle_replay_buffer | read | Toggle the replay buffer on/off. |
toggle_stream | read | Toggle the stream on/off. |
toggle_virtual_cam | read | Toggle the virtual camera on/off. |
trigger_hotkey_by_key_sequence | write | Trigger a hotkey by simulating a key press + modifiers. |
trigger_hotkey_by_name | write | Trigger a hotkey by its name (see get_hotkey_list). |
trigger_media_input_action | write | Trigger a transport action on a media source. |
trigger_studio_mode_transition | write | Trigger the current transition — same as clicking the Transition |
Trust audit
BLOCKgrade D · trust 67/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 | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- declared (6 observation(s))
- Shell
- declared (1 observation(s))
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (9)
sudo apt update && sudo apt install -y python3 python3-pip
sudo dnf install -y python3 python3-pip
sudo pacman -S --noconfirm python python-pip
echo " Ubuntu: sudo apt install python3 python3-pip"
module = importlib.import_module(f"obs_mcp.tools.{name}")remove_input, remove_profile, remove_scene, remove_scene_item, remove_source_filter
module = __import__(f"obs_mcp.tools.{name}", fromlist=["register"])module = __import__(f"obs_mcp.tools.{name}", fromlist=["register"])system use found in code, not declared in the description
Gates applied: no_behavioural_pass.
0c32caf4a60dfull audit observations/trust-audit/mcp-server/xdarkzx__obs_mcp.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-14 | 0c32caf4a60d | BLOCK | D | 67 | first audit |
Questions
What is the OBS_MCP MCP server?
AI-powered stream and recording control for OBS Studio via MCP — 148 tools for scenes, audio mixer, filters, streaming, recording, and stream health diagnostics.
What tools does OBS_MCP expose?
148 in total: 74 read-only, 69 that write, and 5 that can delete or overwrite (remove_input, remove_profile, remove_scene, remove_scene_item, remove_source_filter). Every one is listed on this page with its risk.
Is OBS_MCP safe to connect to an agent?
No — not without reading the findings first. The audit graded it D (67/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: 5 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does OBS_MCP need?
It reads OBS_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 current is this page?
The grade is for one exact copy of the source (0c32caf4a60d), read on 2026-10-14. The repository is watched and re-audited when it changes.