LiveReacting
Server Details
Run a 24/7 live stream of pre-recorded videos, or live stream a recorded video at a set time.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- LiveReacting/livereacting-mcp
- GitHub Stars
- 1
- Server Listing
- LiveReacting MCP server
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 30 tools
Most tools map to a single distinct resource+action (projects, scenes, layers, playlists, media, streaming, schedules, analytics), and the descriptions explicitly cross-reference siblings to steer selection. A few pairs still require reading carefully to separate: livereacting_import_media vs livereacting_import_from_url, livereacting_manage_scene (create) vs livereacting_create_scene_with_playlist vs livereacting_add_layer, and livereacting_add_layer vs livereacting_set_playlist. The 'which tool for which source' guidance largely resolves these, so overlap is minor rather than confusing.
All names are snake_case with a uniform livereacting_ prefix and a verb_noun shape (list_projects, get_scenes, create_project, update_project, activate_scene). Minor deviations: manage_scene bundles create/update/delete behind an action argument while every other resource uses separate verbs, and add_layer/set_playlist use different verbs for closely related layer writes. Still highly predictable overall.
30 tools is at the heavy end, but the domain is genuinely broad — projects, scenes, layers, playlists, media ingestion, encoding, streaming, scheduling, analytics, destinations — and each tool maps to a real lifecycle step. A few could reasonably merge (get_encode_status/get_import_status are separate polling endpoints with the same shape), so the surface feels slightly larger than strictly necessary.
Streaming and media workflows are covered in impressive depth (start/stop/schedule/cancel/sync/status/analytics, upload/import/encode/poll), with no dead ends for the main path. However, destructive lifecycle operations are missing: there is no delete_project, no delete/remove layer, and no media file deletion, and layers can only be added or had their playlist replaced, never repositioned or removed. These are notable gaps an agent will hit when customers ask to clean up or rearrange content.
Publisher details
- Operator
- LiveReacting · Publisher source
- Operator website
- https://www.livereacting.com
- Vendor relationship
- First-party
- Documentation
- https://developers.livereacting.com/mcp/
- Trust center
- Not available
- Restrictions
- Requires a LiveReacting paid plan; API access is included with every paid plan. Clients connect with a LiveReacting API key (Authorization: Bearer header); ChatGPT and Claude can sign in with OAuth instead. · Publisher source
Available Tools
30 toolslivereacting_activate_sceneMake a scene the active oneADestructiveIdempotentInspect
Make one scene the active scene, so its content is what goes out on air. Exactly one scene is active at a time, and activating a scene deactivates the previous one. Calling it again for the same scene changes nothing, so it is safe to repeat. If the project is streaming and autoSynch is on, the switch reaches the live stream immediately; the response says whether it did with the synced field. Scene ids come from livereacting_get_scenes.
Inputs: sceneId (required), projectId (required).
livereacting_add_layerAdd a layer to an existing sceneADestructiveInspect
Add one layer to a scene that already exists. Three types can be created: "videoPlaylist" and "audioPlaylist", which hold a list of files, and "video", which holds a single file. Text, image and interactive layers are readable with livereacting_get_layer but can only be created in the LiveReacting Studio. Use this to put a playlist into a scene that has none -- for example a scene made by livereacting_manage_scene, or a background music track alongside a video playlist. For a NEW scene and its playlist together use livereacting_create_scene_with_playlist instead; that tool also wires the auto-switch that chains a 24/7 channel. For a video or audio playlist, loop defaults to true; pass loop: false for a clip that must play once. The settings are read strictly by type, and the wrong ones are dropped without an error: a "video" layer ignores files, and a playlist layer ignores fileId. settings.files is optional, so a playlist created without it is created empty; send the files here, or fill the layer afterwards with livereacting_set_playlist. If autoSynch is on and the project is streaming, this copies the full saved project configuration to the running stream. It can overwrite changes made only to the live stream, including settings of existing layers. This is NOT idempotent: calling it twice adds two layers. After a timeout, read the scene with livereacting_get_scenes to see whether the layer arrived, rather than calling again. To change a playlist afterwards use livereacting_set_playlist.
Inputs: type (required), sceneId (required), projectId (required), name, +1 more.
livereacting_cancel_schedulesCancel scheduled streamsADestructiveIdempotentInspect
Cancel scheduled streams. Give a liveId to cancel that one schedule, or give only a projectId to cancel every schedule on that project. Cancelling cannot be undone; the schedule has to be created again with livereacting_schedule_stream.
This only ever touches SCHEDULED streams. It cannot stop a running one -- use livereacting_stop_stream for that. Call this before livereacting_schedule_stream when a project already has schedules, because scheduling refuses to run alongside them.
Inputs: liveId, projectId.
livereacting_complete_uploadFinish a direct file uploadAIdempotentInspect
Finish an upload started with livereacting_upload_file, after every part has been sent. The file then appears in the media library and this returns it. If a part is missing or has the wrong size, the answer is UPLOAD_INCOMPLETE and names the parts: send them again and call this tool again with the same token. A video goes through the same checks and encoding as a Studio upload; when issues.errors is not empty the file needs livereacting_encode_media or a running encode before it can go in a playlist.
Inputs: uploadToken (required).
livereacting_create_projectCreate a projectAInspect
Create an empty LiveReacting project. This is the first step of building a stream, and the project starts with no scenes and no content: call livereacting_create_scene_with_playlist next to put video in it, then livereacting_start_stream or livereacting_schedule_stream. For a 24/7 looping channel pass duration { manual: true } and autoSynch true here; livereacting_create_scene_with_playlist then loops the playlist by default, so there is nothing else to set. For a stream that must stop on its own pass duration { manual: false, planned: }. Always send duration: a project created without it gets a fixed duration of one hour and the stream stops after an hour. Destination ids come from livereacting_list_destinations and cannot be created here. Two limits worth knowing: 1080p formats need a 1080p plan or better and 4K formats need a 4K plan, and a Facebook-only stream is capped at 8 hours whatever duration you ask for. Privacy settings and advanced YouTube options can only be set in the LiveReacting Studio.
Inputs: name (required), title, format, duration, +4 more.
livereacting_create_scene_with_playlistAdd a scene that plays a video playlistADestructiveInspect
Add a scene to a project and fill it with a video playlist in one call. This is the normal way to put content into a project, because a new project is created empty. It behaves differently depending on what the project already holds, and you do not have to choose: on a project with no scenes it creates the first scene and makes it active, which a stream needs in order to play anything; on a project that already has a scene it also wires the previous scene to switch automatically into this new one when its playlist ends, which is how a 24/7 channel is chained day by day. In that second case the previous scene must already contain a video playlist layer, otherwise the call is refused. File ids come from livereacting_list_media or livereacting_import_media, and every file has to have finished importing and encoding. To change the playlist afterwards use livereacting_set_playlist. This builds a video playlist. For an audio playlist use livereacting_add_layer. Text, image and interactive overlays are readable but can only be created in the LiveReacting Studio. Sending audio files here produces a video playlist holding audio, which is not what the customer wants and is not reported as an error.
Inputs: files (required), projectId (required), sceneName (required), loop, +4 more.
livereacting_encode_mediaQueue files for encodingADestructiveInspect
Queue video files for encoding so they can be streamed. A file whose resolution or frame rate is above the account limit has to be encoded before it will play in a stream; livereacting_get_media_file with includeMetadata tells you which ones. Encoding runs in the background: this returns immediately with the files it queued and the ones it skipped (not found, not a video, or already queued or encoding). Poll livereacting_get_encode_status to find out when they are ready. A file that has already finished encoding is encoded again if you send it, so send only files that still need it, and after a timeout check livereacting_get_encode_status before you call this again.
Inputs: fileIds (required).
livereacting_get_encode_statusCheck encoding progressARead-onlyIdempotentInspect
List every file in this account that is queued for encoding or being encoded right now, with its progress. Returns pollAfterSeconds, the number of seconds to wait before asking again. Poll no more often than once every 15 seconds: the account is limited to 150 requests per minute in total, and encoding a long video takes minutes, not seconds. When the list is empty there is nothing left to wait for.
Inputs: limit, offset.
livereacting_get_import_statusCheck import progressARead-onlyIdempotentInspect
Check how far an import started by livereacting_import_media or livereacting_import_from_url has got. Returns the status, a progress percentage and pollAfterSeconds, the number of seconds to wait before asking again. Poll no more often than once every 10 seconds: the account is limited to 150 requests per minute in total, and a tight loop spends that budget on nothing.
done only means the transfer finished. It does not mean the file can be used: an imported video very often still needs encoding, and a playlist built with it is refused until that is done. Read usable, which is true only when the file can go straight into a playlist, and nextStep, which names the tool to call when it cannot.
A YouTube playlist import answers for the whole group: isFolder is true and files lists each video with its own status. The fileId keeps working after the import finishes and can be polled again at any time. The files list reflects the videos that exist now, so it shrinks if one is deleted later. It names the videos but not their ids; call livereacting_list_media to get those.
Inputs: fileId (required).
livereacting_get_layerRead a layer and its playlistARead-onlyIdempotentInspect
Read one layer in full: its type, name, position, settings, and — for a playlist layer — its items and which one is playing. Layer ids come from livereacting_get_scenes. A playlist can hold up to 600 videos, so the items are returned 50 at a time: itemTotal is the real length and nextOffset pages through the rest. Read every page before you decide what a full playlist contains. Every layer type is readable here, including the text, image and interactive layers that can only be edited in the LiveReacting Studio.
Inputs: layerId (required), projectId (required), offset.
livereacting_get_media_fileGet one media fileARead-onlyIdempotentInspect
Read one file from the media library by id: its name, type, duration, size, folder and encoding state. Ask for metadata when you need the technical detail -- resolution, frame rate, codecs -- for example to decide whether the file needs livereacting_encode_media before it can be streamed.
Inputs: fileId (required), includeMetadata.
livereacting_get_projectGet one projectARead-onlyIdempotentInspect
Read one project in full: its name, video format, audio quality, planned duration, connected destinations, current stream status and how many schedules are pending. Use this to check a project is set up the way the customer expects before starting a stream. Scenes are left out by default because they can be long; pass includeScenes only when you actually need them, or use livereacting_get_scenes, which pages properly.
Inputs: projectId (required), includeScenes, includeScheduledLives.
livereacting_get_scenesList or read scenesARead-onlyIdempotentInspect
Read the scenes of a project, with a summary of the layers in each one. A scene is one arrangement of content; exactly one scene is active at a time and the active scene is what goes out on air. Give a sceneId to read a single scene, or leave it out to list them all. Use this to find the layer id of a playlist before calling livereacting_get_layer or livereacting_set_playlist, and to find the scene id before livereacting_activate_scene. Returns 20 scenes at a time and at most 50 layer summaries per scene.
Inputs: projectId (required), limit, offset, sceneId.
livereacting_get_stream_analyticsRead analytics for a finished broadcastARead-onlyIdempotentInspect
Read the analytics of one broadcast. Get the broadcast id from livereacting_list_broadcasts.
type: "youtube" is included with every paid plan. type: "playlists" is available on request rather than on every plan, so it can return FEATURE_NOT_AVAILABLE for an account that is otherwise working normally. Tell the customer to email hello@livereacting.com to ask for access to it.
type: "youtube" returns what YouTube reports for the broadcast -- views, watch time, likes, peak and average concurrent viewers, revenue where it is available, plus traffic sources, daily trend, age and gender split, devices and geography. The channel must also have granted analytics access.
type: "playlists" returns what LiveReacting itself recorded: one row per recorded playback action, naming the file, the action, its timestamp and how many people were watching at that moment.
The row-shaped YouTube sections are only returned when you name them in sections, 50 rows at a time. There is no CSV export here; use the REST API for that.
Inputs: type (required), liveId (required), limit, offset, +4 more.
livereacting_get_stream_statusRead the live state of a streamARead-onlyIdempotentInspect
Read what a project's stream is doing right now: the overall status (LIVE, PREPARING, SCHEDULED or OFFLINE), the active live id, how long it has been running, and per destination the status, viewer count, peak viewers, start and stop times, duration and any error.
When a destination is failing, read its error field first. error: "AUTH_ERROR" means the customer's connection to that platform is expired or invalid, and nobody can fix it through this API: tell them to reconnect that destination in the LiveReacting Studio. The response also sets destinationsNeedingReconnect and a notice when this happens.
tokenExpired appears only when a platform positively reports an expired session, which in practice only Instagram does. Its absence means we have no signal, NOT that the connection is healthy. Custom RTMP, HLS and SRT destinations have no login at all, so they never report it; when one of those fails the cause is usually a wrong server URL or stream key, or the receiving end rejecting the connection.
Poll no more often than every 5 seconds. A stream needs tens of seconds to reach LIVE, and the account is limited to 150 requests per minute across all tools, so tight polling rate-limits the customer's other work.
This reports only what the platform has recorded. It is not an encoder health check, and a status of LIVE is not by itself proof that video is reaching viewers.
Inputs: projectId (required).
livereacting_import_from_urlImport media from a direct linkAInspect
Bring a file into the media library from a direct http or https link to a video, audio or image file on any public host, for example a CDN or storage bucket URL. The link must return the file itself, not a web page: the content type decides the media type, and it must match type. Links that point to a private or internal address are refused with URL_NOT_ALLOWED. The file must fit the plan's max file size; a video counts against the storage quota. Google Drive, Dropbox and YouTube links go to livereacting_import_media instead. The import runs in the background. This returns a fileId straight away; poll livereacting_get_import_status with it to find out when the file is ready. Only one import can run at a time per account.
Inputs: url (required), type (required), folderId.
livereacting_import_mediaImport media from a URLAInspect
Bring a file into the media library from a Google Drive, Dropbox or YouTube URL. For a direct link to a media file on any other host, use livereacting_import_from_url; for a file on the customer's own computer, use livereacting_upload_file. The import runs in the background. This returns a fileId straight away; poll livereacting_get_import_status with it to find out when the file is ready. Only one import can run at a time per account. Only a single YouTube video imports here: a YouTube playlist page or channel URL is refused with VALIDATION_ERROR, so do not promise a customer that a playlist can be imported through this tool. Pass one video URL at a time.
Inputs: url (required), type (required), folderId.
livereacting_list_broadcastsList past broadcastsARead-onlyIdempotentInspect
List a project's finished broadcasts, newest first: the live id, when each started and ended, how long it ran, peak viewers and any error, per destination. Use a live id from here with livereacting_get_stream_analytics. Only finished broadcasts appear; read a running one with livereacting_get_stream_status.
Inputs: projectId (required), limit, offset.
livereacting_list_destinationsList streaming destinationsARead-onlyIdempotentInspect
List the YouTube, Facebook, Twitch, LinkedIn, X and custom RTMP destinations connected to this LiveReacting account. Use the returned ids when creating a project. A destination has to be connected in the LiveReacting Studio first; you cannot add one from here.
Inputs: limit, offset.
livereacting_list_mediaList media files and foldersARead-onlyIdempotentInspect
List the video, audio and image files in this LiveReacting account's media library, and optionally the folders they are organised into. Use the returned file ids when building a playlist. A file whose issues.errors is not empty cannot go in a playlist until the problem is fixed, which usually means encoding it with livereacting_encode_media first. Files and folders are paginated separately: offset pages the files, folderOffset pages the folders. Set includeFolders: true to get folders as well, which also requires type. To add a file, use livereacting_upload_file for a file on the customer's machine, livereacting_import_from_url for a direct link to a media file, or livereacting_import_media for a Google Drive, Dropbox or YouTube link.
Inputs: type, limit, offset, search, +4 more.
livereacting_list_projectsList projectsARead-onlyIdempotentInspect
List the LiveReacting projects on this account, newest first. A project is the reusable template for a stream: its video format, its destinations, and the scenes that hold the content. Start here when the customer names a stream but you do not have its id. Each entry carries the project id, its name, whether it is live right now, and how many future schedules it has. Use livereacting_get_project for the detail of one of them. Returns 20 projects at a time.
Inputs: limit, offset, status.
livereacting_manage_sceneCreate, rename or delete a sceneADestructiveInspect
Create, rename or delete a scene, chosen with the action argument. action "create" adds an empty scene — it holds no content until you add a layer, so prefer livereacting_create_scene_with_playlist when the scene is meant to play video. action "update" renames a scene and changes nothing else. action "delete" PERMANENTLY REMOVES the scene and every non-pinned layer inside it, including its playlist. There is no undo. Any other layer set to auto-switch into the deleted scene has that link cleared, which silently breaks a 24/7 chain, so the response lists the layers it changed — read it. The last remaining scene cannot be deleted, and deleting the active scene makes the first remaining scene active. Confirm with the customer before deleting anything.
Inputs: action (required), projectId (required), name, sceneId, +1 more.
livereacting_schedule_streamSchedule a stream for laterADestructiveInspect
Schedule a project to go live at one or more future times. Nothing starts now.
Four rules the API will otherwise only teach you by refusing the call:
A project can hold one set of schedules. If it already has any, this fails with ACTIVE_SCHEDULES_EXIST. Call livereacting_cancel_schedules first, then schedule again. Scheduling does not replace existing schedules.
Every date must be at least 3 minutes and at most 28 days in the future.
More than one date requires a fixed duration on the project. A manual duration accepts a single date only, because the platform cannot tell when the runs would overlap. Set a duration with livereacting_update_project, or schedule one date at a time.
With a fixed duration, one run must end at least 3 minutes before the next one starts. A shorter gap is refused, and the message names the earliest time the later run can take.
Every run stops at the plan's maximum stream length, and a Facebook-only stream stops after 8 hours, whatever you schedule.
Inputs: dates (required), projectId (required).
livereacting_set_playlistReplace a playlistADestructiveInspect
Replace the entire contents of a video or audio playlist layer. The files you send become the whole playlist: anything already in it that you do not send again is removed, and playback restarts from the first item. There is no way to append with this tool. So to add, remove or reorder a video, first call livereacting_get_layer and page through every item until nextOffset is null, apply your change to that complete list, and send the complete list back. Sending only the new video deletes everything else. The response reports removedItemCount and warns whenever the playlist got shorter — check it before telling the customer the change worked. Writes are not merged. If two callers write the same playlist at once, the later write replaces the earlier one and both report success, so do not run parallel edits against one playlist. If the customer may be editing it in the LiveReacting Studio at the same moment, read the list again immediately before writing, and tell them not to edit while you work. Files must have finished importing and encoding. A playlist holds at most 600 items. This tool works on videoPlaylist and audioPlaylist layers only. adPlaceholder sets the video that plays during ad breaks (video playlists only; refused for an audio playlist). It is written together with the full playlist in the same call, so send the complete list with it; leave adPlaceholder out to keep the current one. This is NOT idempotent: sending the same list twice produces the same contents, but each call regenerates every playlistItemId and restarts playback. After a timeout, read the layer with livereacting_get_layer rather than calling again.
Inputs: files (required), layerId (required), projectId (required), loop, +3 more.
livereacting_start_streamStart a stream nowADestructiveInspect
Start streaming a project to its destinations immediately. Works on any project: a 24/7 looping playlist, a one-off pre-recorded broadcast, a simulcast to several destinations, or a stream whose overlays were built in the LiveReacting Studio.
This call is NOT idempotent. If it times out, call livereacting_get_stream_status and read the status. PREPARING or LIVE means the start succeeded. OFFLINE means it did not, and only then may you call this tool again. Do not retry on a timeout: a second start can create a duplicate broadcast attempt.
If the project is already running or already scheduled, this returns the existing live id instead of starting anything.
Honest limits, so you do not promise the customer something the platform will not do:
Every plan has a maximum stream length, and the stream stops when it is reached, even with a manual duration. A 24/7 channel needs a plan without a length limit, such as the 24/7 plan.
A Facebook-only stream stops after a maximum of 8 hours. A 24/7 Facebook-only channel is not possible. Add another destination for longer runs.
Thumbnails and live announcements are not supported through the API.
Inputs: projectId (required).
livereacting_stop_streamStop the running streamADestructiveInspect
End the stream that is currently running for a project. Every viewer stops watching immediately and the broadcast cannot be resumed; a later start creates a new broadcast. Confirm with the customer before calling this on a stream you did not start.
This does not cancel scheduled streams. Use livereacting_cancel_schedules for those. Like starting, stopping is not idempotent: on a timeout call livereacting_get_stream_status rather than calling this again.
Inputs: projectId (required).
livereacting_sync_streamPush project edits to the running streamADestructiveIdempotentInspect
Push the project's current setup to the stream that is running now. A running stream uses the copy of the project it was started with, so edits made while it runs are invisible to viewers until they are synced.
Only needed when the project has autoSynch off; with autoSynch on, edits reach the stream by themselves. Safe to call more than once -- syncing twice has the same effect as once. Fails with NO_ACTIVE_LIVE when nothing is running.
Inputs: projectId (required).
livereacting_update_projectUpdate a projectADestructiveIdempotentInspect
Change the settings of an existing project. Only the fields you send are changed. Five fields are refused while the project is LIVE, PREPARING or SCHEDULED — not only while it is on air: format, duration, audioQuality, destinationIds and youtubeAdvancedSettings. To change any of those, stop the stream with livereacting_stop_stream or cancel the schedule with livereacting_cancel_schedules first. name, title, description and autoSynch can be changed at any time. Changes to title or description can also update the broadcast on its destination platforms, including a scheduled broadcast. To change the playlist use livereacting_set_playlist instead.
Inputs: projectId (required), name, title, format, +5 more.
livereacting_upload_fileStart a direct file uploadAInspect
Start uploading a file from the machine you run on (or the customer's) into the media library. This server cannot read local files, so the upload has three steps: (1) call this tool with the file name, type and exact size in bytes; (2) send each part with an HTTP PUT to its URL, for example by running each returned command with FILE set to the local path (each prints the part's HTTP status) -- a part must be exactly its size in bytes, or storage refuses it with 403; (3) call livereacting_complete_upload with the uploadToken. A file up to 256 MiB is one part. If you cannot run commands or make HTTP PUT requests, you cannot upload; ask for a public link and use livereacting_import_from_url instead. The extension must match the type (video: .mp4 .m4v .mov .flv .webm .ogv .3gp .wmv .avi .mkv; audio: .mp3 .m4a .wav; image: .jpg .jpeg .png .gif .bmp .svg .heic .webp). The size must fit the plan's max file size, and a video is refused once storage is full. The part URLs and the token expire after 3 days.
Inputs: name (required), size (required), type (required), folderId.
livereacting_validate_destinationsCheck destinations are ready to streamAIdempotentInspect
Check that the given destinations still have a working login before starting a stream. Returns valid true or false per destination, with a reason when it is false. An expired YouTube access token is renewed during this check when the account still holds a refresh token; when renewal fails, the customer has to reconnect the destination in the LiveReacting Studio. Call this before livereacting_start_stream so a failure is explained up front rather than mid-broadcast. What valid: true means depends on the platform. For YouTube, Facebook and Twitch the platform was contacted and the login works. For custom RTMP, HLS and SRT destinations, which includes LinkedIn and X, nothing is checked at all: valid: true is returned without contacting anything, and without checking that a server URL and a stream key exist. It says only that the destination is on the account.
Inputs: destinationIds (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
Related MCP Connectors
Manage 24/7 live streams, media, playback queues, schedules, and multistreaming from AI assistants.
Create and run 24/7 linear TV channels. Import videos by URL; we transcode, schedule and stream.
Manage cloud-hosted 24/7 video streams, playlists, destinations, schedules, media and workspaces.
Put a live video feed on air and get a URL you can embed.
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceEnables an AI assistant to run cloud live streaming end to end: starting and stopping broadcasts, reordering playback queues, searching and organizing the media library, planning stream schedules, and managing multistream destinations. It connects over a remote Streamable HTTP endpoint secured with OAuth or a personal access token, applying the same validation, ownership rules, and rate limits as the public REST API.1MIT- FlicenseBqualityBmaintenanceLets Grok Bot or any MCP client schedule a GifOS broadcast with complete invite details (link, start and end times, visit link, ready-to-send text), run the host's booth to go live, play a prerecorded video and end the stream, and seat a note-taking bot that transcribes what is said on stage. It runs entirely on the user's own machine, broadcasting over GifOS's peer-to-peer fan-out with no account, API key, or hosted endpoint.36-
- AlicenseBqualityBmaintenanceEnables AI agents to configure and launch simultaneous live streams on YouTube Live, Twitch, and Kick by analyzing thumbnails and themes, detecting games, generating SEO tags and Markdown-based descriptions, and configuring all platforms at once.5MIT
- AlicenseAqualityFmaintenanceEnables management of multi-platform streaming through the Restream API, allowing control of streaming channels, stream settings, and access to analytics across platforms like YouTube, Twitch, and Facebook through natural language.912 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.