OBS Control MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OBS_MCP_CONFIG | No | Path to a TOML configuration file. If not set, the server reads `config.toml` from the same directory as `server.mjs`. This file can contain `url`, `password`, `connect_timeout_ms`, and `request_timeout_ms` under the `[obs]` section. | |
| OBS_WEBSOCKET_URL | No | WebSocket URL of the OBS WebSocket server (v5), e.g. `ws://127.0.0.1:4455`. Overrides the `url` value from the config file. | |
| OBS_WEBSOCKET_PASSWORD | No | Password for the OBS WebSocket server. Overrides the `password` value from the config file. Can be empty if authentication is disabled. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| obs_statusA | Connect to OBS and return OBS/obs-websocket versions plus active range playbacks. |
| scene_listA | List OBS scenes and identify the current program/preview scenes. |
| scene_createA | Create a new OBS scene. |
| scene_deleteA | Delete an OBS scene by UUID or name. |
| scene_set_currentA | Switch the current program scene by UUID or name. |
| scene_item_listB | List every source/item in a scene. |
| scene_item_removeA | Remove one scene item without deleting the underlying input. |
| scene_item_transform_getA | Get position, size, scale, crop, rotation, and bounds for a scene item. |
| scene_item_transform_setB | Set position/size/scale/rotation/crop of a scene item. width+height use OBS bounds; fit=contain preserves the full image, cover fills the box, stretch ignores aspect ratio. |
| scene_item_enabled_setC | Enable or disable a scene item. |
| scene_item_index_setA | Set scene item z-order. OBS index 0 is the bottom. |
| input_listA | List OBS inputs, optionally restricted to one input kind. |
| input_settings_getA | Get an OBS input kind and its current settings. |
| input_settings_setA | Apply settings to an OBS input. overlay=true preserves unspecified settings. |
| input_audio_getA | Get mute and volume state for an OBS input. |
| input_audio_setB | Set mute and/or volume for an OBS input. |
| audio_mixer_listA | List all OBS inputs that support audio, including volume, mute, balance, sync offset, monitoring mode, and track routing. |
| audio_mixer_getA | Get the complete OBS mixer state for one audio-capable input. |
| audio_mixer_setB | Change one or more OBS mixer properties: volume, mute, stereo balance, sync offset, monitoring mode, and output track routing. |
| audio_mixer_mute_toggleA | Toggle mute for one OBS audio input and return its complete mixer state. |
| media_listB | List Media Source (ffmpeg_source) inputs. mediaId is the persistent OBS input UUID. |
| media_addA | Create an OBS Media Source in a scene. Supports local files and network inputs and can position/size the new scene item immediately. |
| media_removeA | Delete a Media Source input and all of its scene items. |
| media_statusA | Get media playback state, duration, cursor, and active range-playback metadata. |
| media_infoA | Get consolidated Media Source information: source path/URL, source mode, settings, playback status, speed, audio, visibility, and every scene placement/transform. |
| media_playA | Start normal playback. Optionally change playback speed and/or seek to startMs before playing. |
| media_speed_setA | Set Media Source playback speed in percent (1-200). OBS restarts/reinitializes the media when this setting changes. |
| media_controlB | Play, pause, stop, or restart a Media Source. |
| media_seekB | Seek a Media Source to an absolute millisecond cursor or offset it relative to the current cursor. |
| media_play_rangeA | Play only a specified [startMs,endMs] range. Returns immediately while the server watches the real OBS media cursor; at end it pauses on the exact end frame by default or stops. |
| media_range_cancelA | Cancel active range enforcement for a Media Source, optionally pausing it immediately. |
| screenshotA | Capture a scene or input with OBS GetSourceScreenshot and return it directly as MCP image content for AI vision. If no source is specified, captures the current program scene. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 32 tools
Each tool has a distinct purpose within its domain (scene, scene item, input, audio, media, etc.). While some overlap exists between media_play and media_control, the descriptions clearly differentiate them (media_play for starting with options, media_control for generic play/pause/stop). No two tools appear to do the same thing.
Tool names follow a consistent snake_case verb_noun pattern, grouped by resource (scene_, scene_item_, input_, audio_mixer_, media_). Verbs like list, get, set, create, delete are used uniformly, making the API predictable and easy to navigate.
With 32 tools, the server is extensive but justifiable for a comprehensive OBS control surface covering scenes, inputs, audio, and media. While above the typical 'heavy' range, each tool serves a specific need and the count is appropriate for the broad functionality offered.
The toolset covers the full lifecycle for scenes, scene items, inputs, audio, and media, including list, create, get, set, and delete operations. Minor gaps exist (e.g., renaming inputs, recording controls) but they fall outside the apparent scope and can be worked around via settings.