Connect ChatGPT or Claude with your LiveReacting account, or Claude Code, Codex, Cursor and other AI agents with an API key. The agent builds a stream from a playlist, starts it, schedules it and reads the broadcast history afterwards.
https://mcp.livereacting.com/mcp
Streamable HTTP, POST only, no session. An API key goes in the Authorization header as a Bearer token. ChatGPT and Claude sign in with OAuth instead.
One URL and one Authorization header for every client below. The key is the lr_ key the REST API takes, so a key you already have works here.
Copy this message into your coding agent. The agent adds LiveReacting to its own settings, tells you where to put your API key and checks the connection.
Use it in Claude Code, GitHub Copilot, Codex, Cursor, OpenCode, Antigravity, Gemini CLI, Kiro, Cline, Zed or another coding agent that can change its own settings.
Connect the LiveReacting MCP server to this agent.
1. Add a remote MCP server named "livereacting" to your own MCP settings, the way you normally add one (your config file or your "mcp add" command).
URL: https://mcp.livereacting.com/mcp (Streamable HTTP)
Header: Authorization: Bearer <my LiveReacting API key>
Exact settings for Claude Code, Codex, Cursor, VS Code, Gemini CLI and more agents: https://www.livereacting.com/mcp.md
2. I create the API key at https://studio.livereacting.com/developer (every paid plan includes one). Keep it out of this chat and out of config files where you can: read it from the LIVEREACTING_API_KEY environment variable or your password prompt, and tell me how to set it. Never write the key into a file tracked by git or anywhere public.
3. Check the connection: call livereacting_list_projects and tell me what it returned. If the server loads only after a restart or a new session, tell me exactly what to do, and to ask you "List my LiveReacting projects" afterwards.
If you cannot change your own settings (for example, you are a chat app), say so and send me to https://www.livereacting.com/mcp.
If you have no key yet, create one in the Developer section of the LiveReacting Studio. Set it as the LIVEREACTING_API_KEY environment variable and restart your client. VS Code asks for the key instead.
In .mcp.json at the root of your project. The key stays out of the file, so it is safe to commit.
{
"mcpServers": {
"livereacting": {
"type": "http",
"url": "https://mcp.livereacting.com/mcp",
"headers": { "Authorization": "Bearer ${LIVEREACTING_API_KEY}" }
}
}
}
In ~/.codex/config.toml.
[mcp_servers.livereacting]
url = "https://mcp.livereacting.com/mcp"
bearer_token_env_var = "LIVEREACTING_API_KEY"
# Then, in your shell profile:
# export LIVEREACTING_API_KEY=lr_...
In ~/.cursor/mcp.json.
{
"mcpServers": {
"livereacting": {
"url": "https://mcp.livereacting.com/mcp",
"headers": { "Authorization": "Bearer ${env:LIVEREACTING_API_KEY}" }
}
}
}
In .vscode/mcp.json. The inputs block makes VS Code ask for the key instead of storing it in the repository.
{
"inputs": [
{
"id": "livereacting-key",
"type": "promptString",
"description": "LiveReacting API key",
"password": true
}
],
"servers": {
"livereacting": {
"type": "http",
"url": "https://mcp.livereacting.com/mcp",
"headers": { "Authorization": "Bearer ${input:livereacting-key}" }
}
}
}
In ~/.gemini/settings.json.
{
"mcpServers": {
"livereacting": {
"httpUrl": "https://mcp.livereacting.com/mcp",
"headers": { "Authorization": "Bearer ${LIVEREACTING_API_KEY}" }
}
}
}
| Agent | Settings file | API key |
|---|---|---|
| GitHub Copilot CLI | ~/.copilot/mcp-config.json"mcpServers": { "type": "http", "url", "headers" } |
Typed into the file. Its docs show no way to read it from your environment. |
| OpenCode | ~/.config/opencode/opencode.json"mcp": { "type": "remote", "url", "headers" } |
Read from your environment with {env:LIVEREACTING_API_KEY} in the header. |
| Antigravity | ~/.gemini/config/mcp_config.json"mcpServers": { "serverUrl", "headers" } |
Typed into the file. Its docs show no way to read it from your environment. |
| Kiro | ~/.kiro/settings/mcp.json"mcpServers": { "url", "headers" } |
Read from your environment with ${LIVEREACTING_API_KEY} in the header, once you approve the variable in Kiro. |
| Cline | cline_mcp_settings.json"mcpServers": { "type": "streamableHttp", "url", "headers" } |
Typed into the file. Its docs show no way to read it from your environment. |
| Zed | settings.json"context_servers": { "url", "headers" } |
Typed into the file. Its docs show no way to read it from your environment. |
Any client that supports Streamable HTTP and a Bearer header takes the same URL and the same header.
Add ?read_only=1 to the URL and the client is offered only the tools that read. Nothing the agent calls can change a project or a broadcast.
Every name starts with livereacting_, so one search finds the whole server in a client that loads tools on demand.
| Tool | What it does | Access |
|---|---|---|
| Account The destinations you have already connected. | ||
livereacting_list_destinations |
Your connected YouTube, Facebook, Twitch, LinkedIn, X and your own servers | Read only |
livereacting_validate_destinations |
Check a YouTube, Facebook or Twitch login still works before you rely on it. Custom destinations are not contacted | Read only |
| Editor Projects, scenes and the video and audio playlists inside them. | ||
livereacting_list_projects |
Your projects, newest first | Read only |
livereacting_get_project |
One project in full: format, duration, destinations and stream status | Read only |
livereacting_create_project |
Create an empty project, the first step of building a stream | Writes |
livereacting_update_project |
Change a project's settings | Writes |
livereacting_get_scenes |
The scenes of a project, with a summary of what is in each one | Read only |
livereacting_manage_scene |
Create, rename or delete a scene | Destructive |
livereacting_activate_scene |
Switch the scene that goes out on air, including while the stream runs | Writes |
livereacting_create_scene_with_playlist |
Add a scene and fill it with a video playlist in one call | Writes |
livereacting_add_layer |
Add one video playlist, audio playlist or single video to a scene that already exists | Writes |
livereacting_get_layer |
Read one playlist and the videos in it, fifty at a time | Read only |
livereacting_set_playlist |
Replace everything in a video or audio playlist | Destructive |
| Streams Going live, scheduling, and watching a broadcast while it runs. | ||
livereacting_start_stream |
Go live now | Destructive |
livereacting_stop_stream |
End the broadcast that is running | Destructive |
livereacting_get_stream_status |
What the stream is doing right now, and the state of each destination | Read only |
livereacting_schedule_stream |
Go live at one or more times in the next 28 days | Writes |
livereacting_cancel_schedules |
Cancel one scheduled broadcast, or every schedule on a project | Destructive |
livereacting_sync_stream |
Push the edits you just made to the stream that is running | Writes |
livereacting_list_broadcasts |
Past broadcasts: when each ran, for how long, and its peak viewers | Read only |
| Media The video library the playlists are built from. | ||
livereacting_list_media |
The files and folders in your library | Read only |
livereacting_get_media_file |
One file, with its technical detail when you ask for it | Read only |
livereacting_import_media |
Bring in one file from a Google Drive, Dropbox or YouTube URL | Writes |
livereacting_import_from_url |
Bring in one video, audio or image file from a direct link on a public site | Writes |
livereacting_get_import_status |
How far an import has got, and whether the file can be streamed yet | Read only |
livereacting_upload_file |
Start an upload from your computer. The agent sends the file with the commands it gets back | Writes |
livereacting_complete_upload |
Finish the upload and add the file to your library | Writes |
livereacting_encode_media |
Queue files for encoding so they can be streamed | Writes |
livereacting_get_encode_status |
How far the encoding has got | Read only |
| Analytics The numbers a finished broadcast produced. | ||
livereacting_get_stream_analytics |
YouTube's broadcast numbers on every paid plan, and per-video playlist numbers by request | Read only |
Each tool's input schema comes from tools/list once you connect, and its description says what to call next and how long to wait between polls. Read them there; do not infer them from the names above.
Add ?toolsets= with any of account, editor, streams, media and analytics, comma-separated, and the client is offered only those groups. The server does the filtering, so any client can use it, and it refuses a name it does not recognize.
Say what the stream should do, in plain words. The agent picks the tools from the table above and calls them in the order the job needs.
"Here are three Google Drive video links. Build a 24/7 live stream on my YouTube channel from them and start it."
It imports the three files, waits until they can be streamed, fills a looping playlist and goes live.
"Schedule last week's webinar recording to go out live on Friday at 3pm."
It finds the recording in your library, builds a project that plays it once, and schedules that one start time.
"We are live. Switch to the interval scene."
It activates the interval scene and pushes the change to the running broadcast. The stream stays live.
"How did last week's broadcasts do?"
It goes through your projects, lists the broadcasts each one ran with their peak viewers, then reads YouTube's numbers for them.
The Free plan and a paused subscription do not include API access. With an API key, every request is refused with 403 API_ACCESS_REQUIRES_PAID_PLAN. Through ChatGPT or Claude the account can connect, and each tool call returns that error until the plan includes API access.
Anything the key can reach, the agent can reach. Create it in the Developer section of the Studio, and revoke it there the moment you want the agent to stop.
Add ?read_only=1 for the tools that read, or ?toolsets=streams,media for the groups you name. The server refuses an unrecognized value rather than ignoring it.
It cannot import a YouTube playlist, or build a text, image or interactive overlay. You build those in the Studio, and the agent can still run a stream that has them.
Yes. It can delete a scene, replace a whole playlist, stop a broadcast and cancel a schedule, and the table above marks each of those tools Destructive. With ?read_only=1 on the URL the server offers none of them.
ChatGPT, through the LiveReacting plugin: open it from our ChatGPT page, install it and sign in to your LiveReacting account. In Claude, open Customize, then Connectors, choose Add custom connector, enter the server URL above and sign in the same way. In Mistral Vibe, add a Custom MCP Connector with the same URL, choose HTTP Bearer Token and paste your API key. Coding agents such as Claude Code, Codex, Cursor, GitHub Copilot and Gemini CLI set themselves up from the setup message above, and each has a configuration on this page. The Gemini app and Microsoft Copilot cannot connect to LiveReacting yet.
Yes, when the agent can run commands on your computer. It asks LiveReacting for upload links, sends the file with curl, and the file joins your library. Each file can be as large as your plan allows. An agent without a terminal can import one file at a time from a direct public link, or from Google Drive, Dropbox or YouTube.
Every tool, every input, every response field and every error code is in the MCP reference. The REST API it sits on is documented beside it.
Build your stream in the studio on the Free plan, which does not expire. Move to any paid plan when you are ready to hand it to an agent, and the API key comes with it.
Want the numbers first? See plans and pricing
Your AI then builds, schedules and starts your live streams for you.
The LiveReacting plugin opens in ChatGPT. Click Install plugin, then sign in to your LiveReacting account.
Open in ChatGPTCopy this URL. In Claude, open Customize, Connectors, Add custom connector, paste it, then sign in to your LiveReacting account.
https://mcp.livereacting.com/mcp
Copy the setup message and paste it into your agent. The agent sets up the connection for you.
Included in every paid plan. Full setup guide