Endpoint
Registry listings
Find the hosted Streamloop server in these registries:- Official MCP Registry:
io.github.streamloop/mcp, published under the Streamloop GitHub organization. - Smithery:
streamloop/mcp. - Glama:
io.github.streamloop/mcp.
Connect an agent
Add the server URL to any MCP-capable client. On first use the client opens Streamloop’s sign-in page. You sign in, approve the scopes, and the client gets a token. There’s no API key to copy.- Claude
- ChatGPT
- Claude Code
- Custom client
In Claude, open Settings → Connectors, choose Add custom connector, and enter
https://mcp.streamloop.app/mcp. Then complete the sign-in prompt.Permissions
The agent gets only the scopes you approve. Each scope includes the ones above it:
A tool the token’s scopes don’t cover answers
Error [INSUFFICIENT_SCOPE] and names the scope it needs.
No MCP tool can spend money. The agent can read your credit balance and usage, but buying credits happens in the dashboard.
Workspaces
Everything (streams, media, playlists, destinations, scenes and credits) belongs to one workspace. The agent works in one workspace at a time:- The workspace it chose with
select_workspacein this connection, if any. - Otherwise the workspace your client sends in an
X-Workspace-Idheader, if you configured one. - Otherwise your default workspace from sign-in.
get_selected_workspace says which one is in use and why. An empty list is often the wrong workspace, not an empty account.
Safety
- Irreversible tools need
confirm: true. Five tools delete or revoke something for good (marked Yes, confirm on the Tools page). Called withoutconfirm: true, they change nothing and answerError [CONFIRM_REQUIRED], saying exactly what would go. A well-behaved agent then tells you and asks before it calls again. - Changes on air ask first.
publish_sceneandrevert_sceneon a scene that a running stream plays needconfirm: true, because viewers see the change at once. Without it they answerCONFIRM_REQUIREDand name the streams.confirmalways means “I accept what the refusal named”. - Tool hints. Every tool declares the standard MCP annotations (
readOnlyHint,destructiveHint,idempotentHint,openWorldHint), so clients can auto-approve reads and ask you before writes.destructiveHintis set on the tools that can’t be undone and on those that change what viewers see (stop_stream,swap_live_playlist,set_stream_destination_enabled,assign_playlist_order,publish_scene,revert_scene,control_scene), plusscene_removeanddiscard_scene_draft. The scene, stream, playlist and smart order tools also publish anoutputSchema(the answer or an error,anyOf); MCP tools lists the ones that don’t. - Unknown arguments are refused, with the nearest valid field name, so a typo like
dryrunnever runs a real publish.
Errors
A failed tool call returnsisError: true, one line of text with a stable code in brackets, and the same as structuredContent:
code, not the wording. structuredContent also carries what the refusal names: errors (each problem), currentRevision, or publishedVersion and reverted for STALE_PUBLISH. The codes are the REST API’s: one code per meaning. If Streamloop’s API doesn’t answer, the code is UNAVAILABLE: try again. Common codes:
A failed sign-in reads
Authorization failed [CODE]: …. Reconnect the server to get a new token.
Scenes
Scenes are in private beta. See Scenes to request access.
scn_…) is a live, designed stream: frames of text, pictures, video, web pages, tables of data and tickers, the sources they read, and a script. Agents edit a scene the same way the studio’s own AI assistant does, with four tools that act on paths:
The main paths:
Revisions. Every answer carries a
revision for what it read and a draftRevision for the whole draft. Send the revision back to scene_set or scene_remove, and the change is refused with CONFLICT (and the currentRevision) if someone edited it in between. Over the MCP it’s required for anything that exists: without it the answer is REVISION_REQUIRED, and "*" replaces or removes whatever is there, on purpose. Studios open on the scene show the agent’s edits live.
Publishing. Edits change the draft only. Nothing reaches viewers until you publish:
1
Check
publish_scene with dryRun: true checks the whole scene and lists what would change, publishing nothing.2
Publish
publish_scene with the draftRevision of your last answer publishes exactly the draft you saw. If a running stream plays the scene, it also needs confirm: true. An unchanged draft makes no new version.3
Put it on a stream
set_stream_scene while the stream is stopped, then start_stream. The stream opens on the scene’s first frame.control_scene takes frames to air (goFrame), cues the next one (next), sets controls and replaces a table’s rows, and get_scene_state says what’s on air (frame, under onAir). list_scene_versions and revert_scene go back to an earlier version; discard_scene_draft throws the draft away.