Skip to main content
Streamloop runs a hosted Model Context Protocol (MCP) server. An AI agent connected to it can do what you do in the dashboard: upload media, fill playlists, connect destinations, start and schedule 24/7 streams, and build and run scenes. It signs in with OAuth as you, so it sees only the workspaces you belong to. For a step-by-step setup in Claude, ChatGPT, Cursor or Claude Code, see Use Streamloop with AI.

Endpoint

Registry listings

Find the hosted Streamloop server in these registries: These listings point to the hosted endpoint above. The Official MCP Registry entry links back to this documentation.

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.
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:
  1. The workspace it chose with select_workspace in this connection, if any.
  2. Otherwise the workspace your client sends in an X-Workspace-Id header, if you configured one.
  3. 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 without confirm: true, they change nothing and answer Error [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_scene and revert_scene on a scene that a running stream plays need confirm: true, because viewers see the change at once. Without it they answer CONFIRM_REQUIRED and name the streams. confirm always 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. destructiveHint is 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), plus scene_remove and discard_scene_draft. The scene, stream, playlist and smart order tools also publish an outputSchema (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 dryrun never runs a real publish.

Errors

A failed tool call returns isError: true, one line of text with a stable code in brackets, and the same as structuredContent:
Act on 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.
A scene (id 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.
While it runs, 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.