StreamElements MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SE_TOOLSETS | No | Comma-separated toolsets to load, e.g. `bot,commands,loyalty`. | all |
| SE_JWT_TOKEN | No | JWT token from your StreamElements dashboard. Sent as `Bearer <jwt>`. One of SE_JWT_TOKEN or SE_OAUTH_TOKEN is required. | |
| SE_READ_ONLY | No | `true` loads only read-only tools: nothing that creates, changes, deletes or posts. | false |
| SE_CHANNEL_ID | No | 24-character hex channel id that tools use when `channel` is omitted. Default: looked up via `/channels/me`. | |
| SE_TIMEOUT_MS | No | Per-request timeout in milliseconds. | 15000 |
| SE_OAUTH_TOKEN | No | OAuth2 access token. Sent as `oAuth <token>`. Ignored (with a warning) if SE_JWT_TOKEN is also set. One of SE_JWT_TOKEN or SE_OAUTH_TOKEN is required. | |
| SE_MAX_RESPONSE_CHARS | No | Longer responses are truncated, with a note to page through them using `limit`/`offset`. | 100000 |
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 | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| channels_meA | Get the StreamElements channel that owns the configured token: channel id (_id), username, display name, provider (twitch/youtube/...), avatar and more. Use it to find your channel id. |
| channels_getB | Get public details of a StreamElements channel by channel id or channel name. |
| channels_get_detailsB | Get extended details for a channel (profile, settings and linked provider information). |
| channels_emotesA | List the emotes usable on a channel: Twitch, BetterTTV (BTTV) and FrankerFaceZ (FFZ). |
| channels_socketC | POST /channels/{channel}/socket. StreamElements documents this endpoint without any description; it appears to relate to the channel's realtime socket connection. Only use it if you know what it does. |
| channels_revoke_access_tokenA | DELETE /channels/{channel}/accesstoken. Undocumented; it appears to revoke the channel's access token. WARNING: this may invalidate the token this server is using, so every later call fails until you put a new token in SE_JWT_TOKEN / SE_OAUTH_TOKEN. Only run it if the user explicitly asks for it. |
| users_currentA | Get the StreamElements user account behind the token, including the channels it can access. |
| users_channelsB | List the channels the current StreamElements user can access. |
| users_accessA | List the channel's access list: users who have been granted access to manage this channel. |
| bot_getA | Get the StreamElements chat bot's status on the channel: whether it has joined, is muted, its language and name. |
| bot_joinC | Make the StreamElements bot join the channel's chat. |
| bot_leaveA | Make the StreamElements bot leave (part) the channel's chat. Commands and timers stop working until it rejoins. |
| bot_muteA | Mute the bot: it stays in chat but stops sending messages. |
| bot_unmuteA | Unmute the bot so it sends messages in chat again. |
| bot_sayB | Send a message to the channel's chat as the StreamElements bot. Visible to everyone in chat. |
| bot_set_languageB | Set the language the bot uses for its built-in responses. |
| bot_levels_listB | List users that have a custom bot permission level on the channel. StreamElements permission levels: 100 everyone, 250 subscriber, 300 regular, 400 VIP, 500 moderator, 1000 super moderator, 1500 broadcaster. |
| bot_levels_addA | Give a user a custom bot permission level. StreamElements permission levels: 100 everyone, 250 subscriber, 300 regular, 400 VIP, 500 moderator, 1000 super moderator, 1500 broadcaster. |
| bot_levels_removeA | Remove a user's custom bot permission level, returning them to their default level. |
| bot_counter_getB | Get the current value of a named bot counter (the counters that commands update and print with ${count}). |
| bot_modules_listC | List the chat bot's modules (built-in games and features such as 8ball, roulette, duel and heist) with their settings. |
| commands_listB | List the channel's custom chat bot commands with their replies, cooldowns, costs and access levels. |
| commands_createC | Create a custom chat bot command. |
| commands_list_publicB | List the channel's public commands, as shown on its public StreamElements command page. |
| commands_list_defaultA | List the bot's built-in default commands (e.g. !points, !followage) and their settings on the channel. |
| commands_update_defaultA | Change the settings of a built-in default command, e.g. { "enabled": false } or { "cooldown": { "user": 30, "global": 5 }, "accessLevel": 500 }. Get ids from commands_list_default. |
| commands_getB | Get one custom command by id. |
| commands_updateA | Update a custom command. The API may treat this as a full replacement, so the safest approach is to send every field from commands_get with your changes applied. |
| commands_deleteB | Permanently delete a custom command. |
| timers_listA | List the channel's bot timers (messages the bot posts on a schedule). |
| timers_createB | Create a bot timer that posts a message every N minutes, optionally only after enough chat activity. |
| timers_getC | Get one bot timer by id. |
| timers_updateA | Update a bot timer. The API may treat this as a full replacement, so the safest approach is to send every field from timers_get with your changes applied. |
| timers_deleteB | Permanently delete a bot timer. |
| filters_listA | Get the channel's spam filter configuration: the caps, links, emotes, symbols, paragraph and banphrases filters (under botFilters), banned phrase groups, and activity-feed word filtering. |
| filters_update_settingsA | Replace the channel's spam filter document. The API documents the body as { banphrases, filter }. Get the current document with filters_list, change it, and send it back. To change one filter, filters_update is simpler. |
| filters_updateA | Update one bot spam filter. |
| filters_test_messageB | Check whether a message would be caught by the channel's spam filters. StreamElements documents the body only as { origin, data } with no further detail. |
| filters_banphrases_createA | Create a new, empty banned phrase group. Add phrases to it afterwards with filters_banphrases_update. |
| filters_banphrases_updateA | Update a banned phrase group (its name, phrases, enabled state and timeout). Send the group as returned in filters_list's banphrases list, with your changes applied. |
| filters_banphrases_deleteA | Permanently delete a banned phrase group and all of its phrases. |
| filters_banphrase_searchC | Get the details of a banned phrase by its id. |
| loyalty_get_settingsA | Get the channel's loyalty (points) settings: currency name, points per interval (amount), subscriber multiplier, per-event bonuses (follow, tip, subscriber, cheer, host) and ignored users. |
| loyalty_update_settingsA | Update the channel's loyalty settings. StreamElements does not document the body. Send the document shape returned by loyalty_get_settings (at least its |
| loyalty_statsB | Get the channel's StreamElements statistics for a period (year, month, week or day) around a date. |
| points_get_userB | Get a viewer's current points, all-time points and watchtime on the channel. |
| points_get_user_rankC | Get a viewer's rank on the channel's points leaderboard. |
| points_addB | Add points to a viewer's current balance, or remove points with a negative amount. |
| points_reset_userA | Reset a viewer's current points by removing them from the points table. Cannot be undone. |
| points_add_alltimeB | Add to a viewer's all-time points total, or subtract with a negative amount. |
| points_reset_user_alltimeB | Reset a viewer's all-time points. Cannot be undone. |
| points_list_alltimeB | List viewers ranked by all-time points. |
| points_list_topB | List viewers ranked by current points (the points leaderboard). |
| points_list_watchtimeB | List viewers ranked by watchtime. |
| points_bulk_updateA | Change points for many viewers at once. mode 'add' adds each amount to the balance; 'set' replaces the balance. |
| points_reset_allA | Reset the points of EVERY viewer on the channel for a leaderboard context. Cannot be undone. Only run it if the user explicitly asks. |
| store_items_listB | List the channel's loyalty store items (name, cost, stock, cooldowns, redemption settings). |
| store_items_createC | Add an item that viewers can redeem with loyalty points. |
| store_items_getC | Get one store item by id. |
| store_items_updateA | Update a store item. The API may treat this as a full replacement, so the safest approach is to send every field from store_items_get with your changes applied. |
| store_items_deleteB | Permanently delete a store item. |
| store_redemptions_listB | List store redemptions, newest first. Set pending=true to see only redemptions still to be fulfilled. |
| store_redemptions_searchC | Search store redemptions by text, with optional date range, pending filter and sort. |
| store_redemptions_mineA | List the store redemptions made by the token owner on this channel. |
| store_redemptions_getA | Get one store redemption by id, including the viewer's answers to the item's questions. |
| store_redemptions_updateB | Update a store redemption, e.g. { "completed": true } to mark it fulfilled. |
| store_redemptions_deleteA | Permanently delete a store redemption record. |
| tips_listB | List the channel's tips (donations), with optional filters by date range, tipper, email and message. |
| tips_createA | Create a tip record on the channel, e.g. to import a donation received elsewhere. This writes to the channel's real tip history. |
| tips_topB | List the channel's top tippers with tip count, total, average, and first/last tip dates. |
| tips_leaderboardC | Get the channel's tips leaderboard. |
| tips_moderation_listA | List tips held for moderation before they are shown on stream. |
| tips_getB | Get one tip by id, with the tipper, amount, currency, message and status. |
| activities_listB | List the channel's activity feed (follows, subs, tips, cheers, raids, hosts, redemptions and more), newest first, filtered by type, date range and minimum amounts. |
| activities_topC | List the channel's top cheerers or tippers for a period. |
| activities_getC | Get one activity by id. |
| activities_updateB | Update an activity. StreamElements documents this endpoint only as 'Update activity' and gives no body format; pass the fields to change in |
| activities_replayA | Replay an activity's alert on the channel's overlays, e.g. to re-show a follow or tip alert on stream. |
| songrequests_playing_globalA | Get the song currently playing in a media request room, looked up by provider and room instead of channel. StreamElements does not document these parameters. |
| songrequests_youtube_lookupB | Look up a YouTube video by id, or search YouTube by phrase, as the media request system sees it. |
| songrequests_get_settingsB | Get the channel's media (song) request settings: limits, costs, moderation and allowed sources. |
| songrequests_get_public_settingsA | Get the public subset of the channel's media request settings. |
| songrequests_queueB | Get the media request queue with full video details. |
| songrequests_queue_publicA | Get the media request queue for public display, without video details. |
| songrequests_addB | Add a YouTube video to the channel's media request queue. |
| songrequests_removeB | Remove a song from the media request queue. Get song ids from songrequests_queue. |
| songrequests_pendingA | List media requests waiting in the moderation queue. |
| songrequests_playlistA | Get the songs on the channel's playlist, which plays when the request queue is empty. |
| songrequests_player_statusB | Get the media player's current state (playing or paused, volume and so on). |
| songrequests_player_controlC | Play or pause the channel's media request player. |
| songrequests_historyB | List previously played media requests. |
| songrequests_playingB | Get the song currently playing on the channel. |
| songrequests_nextC | Get the next song in the media request queue. |
| contests_listA | List the channel's contests (points betting on outcomes), including the active one. |
| contests_createA | Create a contest where viewers bet loyalty points on an outcome. Start it with contests_start. |
| contests_historyC | List the channel's previous contests. |
| contests_getB | Get one contest by id, with its options, totals and state. |
| contests_updateB | Update a contest that has not started yet. |
| contests_deleteA | DELETE /contests/{channel}/{contestId}. StreamElements labels it 'Close contest', the same as contests_close. Prefer contests_close to end a running contest and contests_refund to return bets. |
| contests_startA | Start a created contest so viewers can place bets. |
| contests_betA | Place a bet on a contest option as the token owner. |
| contests_list_betsC | List the bets placed on a contest. |
| contests_draw_winnerA | Settle a contest by choosing the winning outcome, which pays out points. StreamElements does not document the body; it presumably names the winning option, e.g. { "winnerId": "" }. |
| contests_refundB | Cancel a contest and refund every participant's bet. |
| contests_closeA | Close betting on a running contest, so no new bets are accepted, before picking a winner. |
| giveaways_listB | List the channel's giveaways, including the active one. |
| giveaways_createA | Create a giveaway where viewers buy tickets with loyalty points. Start it with giveaways_start. |
| giveaways_historyB | List the channel's previous giveaways. |
| giveaways_getB | Get one giveaway by id, optionally with its entrants. |
| giveaways_create_by_idA | POST /giveaways/{channel}/{giveawayId}. StreamElements labels it 'Create a new Giveaway' and says the id may refer to the ongoing giveaway; the body format is undocumented. Prefer giveaways_create to create one. |
| giveaways_updateC | Update a giveaway's settings. |
| giveaways_deleteB | Permanently delete a giveaway. |
| giveaways_list_entrantsB | List the users who joined a giveaway and their tickets. |
| giveaways_startC | Start a giveaway so viewers can join. |
| giveaways_draw_winnerB | Draw a random winner from the giveaway's entrants. Each call draws another winner. |
| giveaways_completeA | Mark a giveaway as complete once winners are settled. |
| giveaways_reopenA | Reopen a closed giveaway so viewers can join again. |
| giveaways_refundB | Cancel a giveaway and refund every entrant's tickets. |
| giveaways_closeA | Close entries on a running giveaway, so no new tickets are accepted, before drawing a winner. |
| sessions_getA | Get the channel's session data: latest follower/subscriber/tip/cheer, and the session, week, month and total counters that overlay widgets display. |
| sessions_updateA | Overwrite session data values, e.g. to correct a counter shown on overlays. Send the fields to change, keyed as they appear in sessions_get's data. |
| sessions_get_settingsB | Get the channel's session settings, such as when the session resets and which events count toward it. |
| sessions_update_settingsA | Update the channel's session settings. Get the current settings with sessions_get_settings, change them, and send them back. |
| sessions_resetA | Reset the channel's session data (session counters and latest events). Cannot be undone. |
| sessions_topB | Get the top events (e.g. biggest tips or cheers) aggregated over an interval. |
| overlays_listA | List the channel's overlays, optionally filtered by name or type. |
| overlays_getA | Get one overlay with all of its widgets and their settings. Responses can be large. |
| overlays_reloadA | Reload all of the channel's overlays, like refreshing every overlay browser source. |
| overlays_actionB | Control alerts on the channel's overlays: pause or play the alert queue, mute or unmute alert sounds, or reload. |
| overlays_createA | Create a new overlay on the channel, empty by default. Undocumented endpoint: not in the official API reference, so it may change without notice. To copy an overlay, pass the widgets from overlays_get. |
| overlays_deleteA | Permanently delete an overlay and all of its widgets. Browser sources pointing at it stop working. Undocumented endpoint: not in the official API reference, so it may change without notice. |
| chatstats_globalB | Get global chat statistics across all channels that StreamElements chat stats tracks. |
| chatstats_searchB | Search the channels tracked by chat stats by channel name. |
| chatstats_getC | Get a channel's chat stats summary by channel name. |
| chatstats_epmC | Get a channel's 'emotes per minute' chat stats. |
| chatstats_statsB | Get a channel's detailed chat stats: top chatters, emotes, commands, hashtags and more. |
| chatstats_itemB | Get the chat stats for one item in a category, e.g. one emote or one chatter. |
| themes_listB | Browse the StreamElements theme gallery (ready-made overlay and alert packages). |
| themes_getB | Get one theme from the StreamElements gallery by id. |
| overlays_updateA | Change an overlay's name, canvas settings or individual widgets (position, size, visibility, text, colors and other widget fields). Fetches the current overlay, applies only the given changes and saves it back, so widgets you don't mention are kept intact. Use overlays_get first to find widget ids and field names. Undocumented endpoint (PUT /overlays/{channel}/{overlayId}): not in the official API reference, so it may change without notice. |
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 140 tools
Many tools target distinct resources, but overlaps exist: contests_delete is documented as the same as contests_close, giveaways_create vs giveaways_create_by_id, and several get/details variants (channels_get, channels_get_details, channels_me). Descriptions often note preferences, which helps, but an agent could still misselect among near-duplicates.
Names follow a mostly consistent snake_case resource_action pattern (giveaways_draw_winner, points_get_user, store_items_create). Minor deviations like channels_me, channels_socket, and long names like channels_revoke_access_token are readable but slightly break the verb_noun convention.
140 tools is an extreme mismatch for a single MCP server; the rubric marks 50+ as extreme. Many tools could be consolidated or scoped to sub-servers, and the sheer count makes discovery and selection impractical.
The surface covers a huge portion of the StreamElements API across giveaways, contests, commands, timers, filters, loyalty, points, store, tips, activities, overlays, and chat stats. Minor gaps remain, such as no obvious tool to approve/deny moderated tips or update bot module settings, but core lifecycle operations are present.