Atlas / MCP servers / xdarkzx / OBS_MCP

OBS_MCPBLOCK

mcp/xdarkzx/obs-mcp

AI-powered stream and recording control for OBS Studio via MCP — 148 tools for scenes, audio mixer, filters, streaming, recording, and stream health diagnostics.

Verdict
BLOCK
Grade
D
Trust score
67 /100
Exposed tools
148 74r · 69w · 5d
Transport
—
License
Apache-2.0
Stars
9
01

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

Read from source at commit 0c32caf4a60dOBSERVED · 2026-10-14
02

Connect

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-code
claude mcp add obs-mcp --env OBS_PASSWORD=${OBS_PASSWORD} -- uvx obs-mcp
claude-desktop
{
  "mcpServers": {
    "obs-mcp": {
      "command": "uvx",
      "args": [
        "obs-mcp"
      ],
      "env": {
        "OBS_PASSWORD": "${OBS_PASSWORD}"
      }
    }
  }
}
03

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.

ToolRiskDescription
broadcast_custom_eventreadBroadcast a CustomEvent to all subscribed obs-websocket clients.
call_vendor_requestreadCall a request registered by a third-party OBS plugin/script vendor.
clean_audio_inputwriteSet up a standard mic-cleanup filter chain in one call: Noise Gate
create_inputwriteCreate a new input and add it as a scene item to a scene.
create_profilewriteCreate a new profile and switch to it.
create_record_chapterwriteAdd a chapter marker to the file currently being recorded. Only
create_scenewriteCreate a new, empty scene.
create_scene_collectionwriteCreate a new scene collection and switch to it.
create_scene_itemwriteAdd an existing source to a scene as a new scene item.
create_source_filterwriteAdd a new filter to a source.
diagnose_av_healthreadDiagnose why a stream/recording might be dropping frames or stuttering
duplicate_scene_itemreadDuplicate a scene item, copying its transform/crop, optionally into
get_canvas_listreadList all canvases in OBS (multi-canvas is a newer OBS feature; most
get_current_preview_scenereadThe scene currently loaded in Preview. Only meaningful in studio mode.
get_current_program_scenereadThe scene currently live on Program (what viewers see).
get_current_scene_transitionreadFull detail on the current transition: kind, duration, whether it
get_current_scene_transition_cursorreadCurrent transition progress, 0.0-1.0. Returns 1.0 when no transition is active.
get_group_listreadList all groups (OBS treats groups as a special kind of scene).
get_group_scene_item_listreadLike get_scene_item_list, but for a group (OBS groups are broken
get_hotkey_listreadList all hotkey names in OBS. Best-effort — hotkey requests are less
get_input_audio_balancereadGet an input
get_input_audio_monitor_typereadGet an input
get_input_audio_sync_offsetwriteGet an input
get_input_audio_tracksreadGet which of the 6 audio mixer tracks this input is routed to.
get_input_default_settingsreadDefault settings object for an input kind — overlay get_input_settings
get_input_deinterlace_field_orderwriteGet an input
get_input_deinterlace_modereadGet an input
get_input_kind_listwriteList every input kind (source type) this OBS install can create.
get_input_listreadList all inputs (sources like mic, capture card, browser source, etc).
get_input_mutereadGet an input
get_input_properties_list_property_itemsreadGet the items of a dynamic list property on an input — e.g. the
get_input_settingsreadCurrent (non-default) settings of an input, plus its kind.
get_input_volumereadGet an input
get_last_replay_buffer_replaywriteFile path of the last replay buffer save.
get_media_input_statusreadPlayback state (playing/paused/stopped/buffering/ended/error),
get_monitor_listreadList connected monitors (for opening a projector on one).
get_output_listreadList every registered OBS output (stream, record, virtualcam,
get_output_settingsreadGet a named output
get_output_statusreadDetailed status of a named output: active/reconnecting, timecode,
get_persistent_datareadGet a value from an OBS persistent-data
get_profile_listreadList all profiles and the currently active one.
get_profile_parameterreadRead a raw parameter from the current profile
get_record_directoryreadCurrent output directory for recordings.
get_record_statusreadRecord output status: active, paused, timecode, duration, bytes written.
get_replay_buffer_statusreadWhether the replay buffer is active.
get_scene_collection_listreadList all scene collections and the currently active one.
get_scene_item_blend_modereadGet a scene item
get_scene_item_enabledreadGet whether a scene item is currently visible (shown/hidden, not mute).
get_scene_item_idreadFind a scene item
get_scene_item_indexreadGet a scene item
get_scene_item_listreadList every scene item (placed source) in a scene.
get_scene_item_lockedreadGet a scene item
get_scene_item_sourcereadGet the source name/UUID a scene item references.
get_scene_item_transformreadGet a scene item
get_scene_listreadList every scene, plus the current program and preview scene names.
get_scene_transition_listreadList every configured transition and which one is current.
get_scene_transition_overridereadGet the transition overridden for a specific scene, if any.
get_source_activereadCheck whether a source (input or scene) is currently showing in
get_source_filterreadGet a filter
get_source_filter_default_settingsreadDefault settings object for a filter kind.
get_source_filter_kind_listwriteList every filter kind this OBS install supports (noise_suppress_filter,
get_source_filter_listwriteList all filters on a source (input or scene), in chain order.
get_source_screenshotreadGet a Base64-encoded screenshot of a source (input or scene) — use
get_special_inputsreadNames of the built-in special audio inputs: Desktop Audio 1/2,
get_statsreadLive perf stats: CPU/memory usage, active FPS, render/output skipped
get_stream_service_settingsreadCurrent stream destination service type and settings (server/key etc).
get_stream_statusreadStream output status: active/reconnecting, timecode, duration,
get_studio_mode_enabledreadWhether studio mode (separate Preview/Program) is enabled.
get_transition_kind_listwriteList every transition kind this OBS install supports (Cut, Fade, Stinger, etc).
get_versionreadOBS/obs-websocket version info, platform, and the full list of requests
get_video_settingsreadCurrent canvas/output resolution and FPS (as a fraction — divide
get_virtual_cam_statusreadWhether the virtual camera output is active.
offset_media_input_cursorreadSeek a media source relative to its current position. No bounds checking.
open_input_filters_dialogreadOpen an input
open_input_interact_dialogreadOpen an input
open_input_properties_dialogreadOpen an input
open_source_projectorreadOpen a fullscreen or windowed projector for a specific source.
open_video_mix_projectorreadOpen a fullscreen or windowed projector for Preview/Program/Multiview.
pause_recordreadPause the active recording.
press_input_properties_buttonreadPress a button in an input
remove_inputdestructiveDelete an input. Removes all its scene items too.
remove_profiledestructiveRemove a profile. If it
remove_scenedestructiveDelete a scene.
remove_scene_itemdestructiveRemove a scene item from a scene (does not delete the underlying source).
remove_source_filterdestructiveRemove a filter from a source.
resume_recordreadResume a paused recording.
save_replay_bufferwriteSave the last N seconds from the replay buffer to disk — the
save_source_screenshotwriteSave a screenshot of a source (input or scene) directly to disk.
send_stream_captionwriteSend CEA-608 caption text over the live stream output.
set_current_preview_scenewriteLoad a scene into Preview (studio mode only) — stage it before
set_current_profilewriteSwitch to a profile by name.
set_current_program_scenewriteSwitch the live Program scene — the core
set_current_scene_collectionwriteSwitch to a scene collection by name. Blocks until the switch completes.
set_current_scene_transitionwriteMake a transition the active one for the next scene switch.
set_current_scene_transition_durationwriteSet the duration of the current transition, if it isn
set_current_scene_transition_settingswriteConfigure the current transition (e.g. a Stinger
set_input_audio_balancewriteSet an input
set_input_audio_monitor_typewriteSet an input
set_input_audio_sync_offsetwriteSet an input
set_input_audio_trackswriteSet which audio mixer tracks an input is routed to.
set_input_deinterlace_field_orderwriteSet an input
set_input_deinterlace_modewriteSet an input
set_input_mutewriteMute or unmute an input.
set_input_namewriteRename an input.
set_input_settingswriteSet an input
set_input_volumewriteSet an input
set_media_input_cursorwriteSeek a media source to an absolute position. No bounds checking.
set_output_settingswriteSet a named output
set_persistent_datawriteSet a value in an OBS persistent-data
set_profile_parameterwriteWrite a raw parameter into the current profile
set_record_directorywriteSet the output directory recordings are written to.
set_scene_item_blend_modewriteSet a scene item
set_scene_item_enabledwriteShow or hide a scene item.
set_scene_item_indexwriteReorder a scene item
set_scene_item_lockedwriteLock or unlock a scene item.
set_scene_item_transformwriteSet a scene item
set_scene_namewriteRename a scene.
set_scene_transition_overridewriteOverride which transition (and/or duration) is used when switching
set_source_filter_enabledwriteEnable or disable a filter without removing it.
set_source_filter_indexwriteReorder a filter within a source
set_source_filter_namewriteRename a filter.
set_source_filter_settingswriteConfigure a filter
set_stream_service_settingswriteSet the stream destination. For a plain custom RTMP target, use
set_studio_mode_enabledwriteEnable or disable studio mode.
set_tbar_positionwriteSet the T-bar position for manual transition scrubbing.
set_video_settingswriteChange canvas/output resolution and/or FPS. Width/height fields must
split_record_filereadSplit the current recording into a new file right now — useful for
start_outputwriteStart a named output.
start_recordwriteStart recording to disk (see config_tools.get/set_record_directory
start_replay_bufferwriteStart the replay buffer.
start_streamwriteGo live. Requires stream service settings to already be configured
start_virtual_camwriteStart the virtual camera.
stop_outputwriteStop a named output.
stop_recordwriteStop recording. Returns the saved file
stop_replay_bufferwriteStop the replay buffer.
stop_streamwriteEnd the stream.
stop_virtual_camwriteStop the virtual camera.
toggle_input_mutereadToggle an input
toggle_outputreadToggle a named output on/off.
toggle_recordreadToggle recording on/off.
toggle_record_pausereadToggle pause on the active recording.
toggle_replay_bufferreadToggle the replay buffer on/off.
toggle_streamreadToggle the stream on/off.
toggle_virtual_camreadToggle the virtual camera on/off.
trigger_hotkey_by_key_sequencewriteTrigger a hotkey by simulating a key press + modifiers.
trigger_hotkey_by_namewriteTrigger a hotkey by its name (see get_hotkey_list).
trigger_media_input_actionwriteTrigger a transport action on a media source.
trigger_studio_mode_transitionwriteTrigger the current transition — same as clicking the Transition
04

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.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (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)

HIGHPrivilege escalation / persistence · priv.escalate · CWE-269, CWE-250
install.sh:54
sudo apt update && sudo apt install -y python3 python3-pip
Why it matters. asks for elevated privileges
HIGHPrivilege escalation / persistence · priv.escalate · CWE-269, CWE-250
install.sh:57
sudo dnf install -y python3 python3-pip
Why it matters. asks for elevated privileges
HIGHPrivilege escalation / persistence · priv.escalate · CWE-269, CWE-250
install.sh:60
sudo pacman -S --noconfirm python python-pip
Why it matters. asks for elevated privileges
HIGHPrivilege escalation / persistence · priv.escalate · CWE-269, CWE-250
install.sh:84
echo "   Ubuntu: sudo apt install python3 python3-pip"
Why it matters. asks for elevated privileges
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
obs_mcp/tool_registry.py:30
module = importlib.import_module(f"obs_mcp.tools.{name}")
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
remove_input, remove_profile, remove_scene, remove_scene_item, remove_source_filter
Why it matters. 5 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/test_tool_registry.py:21
module = __import__(f"obs_mcp.tools.{name}", fromlist=["register"])
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/test_tool_registry.py:58
module = __import__(f"obs_mcp.tools.{name}", fromlist=["register"])
INFOPrompt injection · scope.undeclared_system · CWE-94, CWE-1427
<declared scope>
system use found in code, not declared in the description
Why it matters. the description does not admit a capability the code has
Fix. declare system use in the description, or remove it

Gates applied: no_behavioural_pass.

Audited 2026-10-14 · audit v0.4.1 · source sha 0c32caf4a60dfull audit observations/trust-audit/mcp-server/xdarkzx__obs_mcp.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-140c32caf4a60dBLOCKD67first audit
06

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.

Advertisement