streamelements-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@streamelements-mcpUpdate !discord to reply 'Join us: discord.gg/pixelpals' and set a 30-second cooldown."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
How to connect StreamElements to Claude Code, ChatGPT and any AI agent
Yes, Claude, ChatGPT and other AI agents can work in your StreamElements account. StreamElements has an AI chatbot variable, $(ai), but it runs inside your stream chat, not as an app in ChatGPT or Claude. Cotlet.dev connects your own signed-in StreamElements account to any AI agent, so you can ask in plain words and the AI lists and edits your chat commands for you.
What you can ask
List all my StreamElements chat commands with their cooldown and user level, sorted by name.
Change the !discord command to reply "Join the crew: discord.gg/pixelpals" and set the cooldown to 30 seconds.
Update !schedule to say I stream Monday, Wednesday and Friday at 7 pm CET.
Which of my commands are disabled? Turn !giveaway and !merch back on.
Rename !socials to !links and add my new TikTok handle @pixelpals to the reply.
Related MCP server: Minecraft Command Execution MCP Server
Connect in 2 minutes
Get your API key at https://cotlet.dev/app and export it as COTLET_API_KEY.
Claude Code
claude mcp add --transport http cotlet https://cotlet.dev/mcp/v1 --header "Authorization: Bearer $COTLET_API_KEY"ChatGPT
Settings → Apps → add connector URL https://cotlet.dev/mcp/v1, then sign in with Cotlet.dev. No API key needed.
Cursor
Copy .cursor/mcp.json from this repo into your project:
{
"mcpServers": {
"cotlet": {
"url": "https://cotlet.dev/mcp/v1",
"headers": {
"Authorization": "Bearer ${COTLET_API_KEY}"
}
}
}
}Run it locally (stdio)
This repo is a real MCP server. It speaks MCP over stdio, lists its StreamElements tools without any key, and forwards every tool call to the hosted Cotlet.dev server. The hosted URL above stays the recommended way. Use this when your client only starts local servers.
{"mcpServers":{"streamelements":{"command":"uvx","args":["streamelements-mcp"],"env":{"COTLET_API_KEY":"your-key"}}}}Or with Docker:
docker build -t streamelements-mcp .
docker run -i --rm -e COTLET_API_KEY streamelements-mcpTools: streamelements_guide, streamelements_status, streamelements_open, streamelements_read, streamelements_click, streamelements_type, streamelements_close. Without COTLET_API_KEY a tool call answers: "Set COTLET_API_KEY. Get a key at https://cotlet.dev/app".
Command line
Python 3.10+, nothing else to install. From PyPI:
pip install streamelements-mcp # or run it once: uvx streamelements-mcp connect
streamelements-mcp connectOr straight from this repo:
export COTLET_API_KEY="your-key"
python3 streamelements_agent.py connect # ready config for Claude Code, Cursor, ChatGPT
python3 streamelements_agent.py status # is StreamElements ready in your Cotlet.dev account
python3 streamelements_agent.py guide # StreamElements screens and sign-in link
python3 streamelements_agent.py read # open StreamElements, read the page, close the browser
python3 streamelements_agent.py tools # list Cotlet.dev tools
python3 streamelements_agent.py serve # start the stdio MCP server (same as no argument)Questions from StreamElements users
Is there StreamElements API documentation I need to use first?
You don't need to work with any StreamElements API. Cotlet.dev works in your own signed-in StreamElements account, so your AI agent can list and edit chat commands without code, tokens or API setup.
How do I connect StreamElements to ChatGPT?
Add Cotlet.dev as an app in ChatGPT (Settings → Apps, connector URL https://cotlet.dev/mcp/v1), sign in to StreamElements once in your Cotlet.dev Cloud Browser, and ask ChatGPT in plain words. No code and no StreamElements API key.
Is there a way to use Claude with StreamElements?
Yes. In Claude Code run the one-line claude mcp add command above; in the Claude app add https://cotlet.dev/mcp/v1 as a custom connector. Claude then works in your own StreamElements account.
Is there a StreamElements MCP server?
Cotlet.dev is a hosted MCP server that works in StreamElements for you, 24/7, with Claude, ChatGPT, Cursor, Codex, n8n, Make and Zapier.
Does StreamElements have a ChatGPT chatbot built in?
StreamElements has an AI chatbot variable, $(ai) (alias $(chatgpt)), that answers viewers inside your stream chat. To have ChatGPT or Claude manage your StreamElements commands for you, connect them with Cotlet.dev.
Find it on
Also works with
Start free: https://cotlet.dev/signup?app=streamelements&utm_source=github&utm_medium=readme&utm_campaign=streamelements
Available Tools
7 toolsstreamelements_clickC
Click a numbered element on the current StreamElements page.
| Name | Required | Description | Default |
|---|---|---|---|
| element | Yes | Element number from the last read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden, yet it says nothing about side effects: whether the click navigates to a new page, submits a form, mutates state, or invalidates the numbering returned by the last read. For an interaction tool that can trigger arbitrary page actions, this is a major gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is efficient, though its brevity borders on under-specification given the tool's side-effecting nature.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and side effects undisclosed, an agent cannot tell what state exists after the click or whether it needs to re-read the page before the next action. For an interaction primitive in a stateful browser-automation suite, that omission leaves a critical decision point uncovered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already defines 'element' as an integer >= 1 taken from the last read. The description's phrase 'numbered element' restates that without adding format, range, or failure-mode context, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb (click) and a concrete target (a numbered element on the current StreamElements page), which is enough to distinguish it from streamelements_read, streamelements_type, and streamelements_open. It does not explicitly call out the sibling it is not, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to click versus type, open, or close, nor does it state the precondition that element numbers come from a prior read — that hint lives only in the parameter schema. An agent must infer the read-then-click workflow and any freshness requirement on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
streamelements_closeA
Close the StreamElements browser session when the work is done, so credits stop running.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden. It does add genuinely useful context that the caller would not otherwise know: that a live session consumes credits, which motivates the call. It says nothing about idempotency, behavior when no session exists, or what happens if an interaction is mid-flight, so the mutation/termination semantics remain partly opaque.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and resource, followed by the condition and the rationale. Every clause earns its place and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, non-destructive session-termination tool with no output schema, the description covers the essential what, when, and why. Only minor gaps remain around failure or repeat-call behavior, which are unlikely to change how an agent invokes it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is empty with additionalProperties false, so there is no parameter meaning for the description to add. Baseline 4 applies; nothing is missing or contradicted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Close') and a specific resource ('StreamElements browser session'), which is enough to distinguish it from streamelements_open and the other interaction siblings. It stops short of naming the counterpart tool explicitly, so the pairing is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear trigger condition: 'when the work is done'. That is real when-to-use guidance for a cleanup tool. It does not address edge cases such as whether it is safe to call if no session was opened, but no plausible alternative tool competes with it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
streamelements_guideA
How to work in StreamElements (list and edit chat commands): its screens and the sign-in link. Call this first.
| Name | Required | Description | Default |
|---|---|---|---|
| task | No | What you want done in StreamElements, in your words. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It hints that a sign-in link may be returned, but it never says whether the tool only returns instructions or takes any action, nor what format the guidance arrives in. For a low-risk guide tool this is acceptable but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the subject front-loaded and the sequencing rule at the end. The parenthetical and the odd colon usage add a little friction but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter guide tool with no output schema, the agent still lacks a sense of what comes back (steps, screens list, sign-in URL) and how to combine that with the sibling open/click/type tools. It is adequate but leaves a meaningful gap about the workflow it is meant to unlock.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single optional 'task' parameter, and the description adds no further meaning about how to phrase it or what happens when it is omitted. Baseline 3 applies since the schema already does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (StreamElements: screens, sign-in link) and a specific function (guidance on how to list and edit chat commands), which separates it from siblings like streamelements_read or streamelements_click. It is slightly muddled by 'list and edit chat commands', which could be read as the tool performing those actions rather than explaining them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call this first.' gives an explicit ordering rule that routes the agent here before the other streamelements_* tools. It does not state when to skip it (for example, after orientation is already done), which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
streamelements_openB
Open a StreamElements page in your signed-in Cloud Browser (default https://streamelements.com) to work with list and edit chat commands.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Page to open. Default: https://streamelements.com |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose a valuable trait the schema cannot: the page opens in the user's already signed-in Cloud Browser, so authentication state is inherited. It does not say whether this navigates the current page or a new tab, what happens if a page is already open, or what is returned on success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and destination, with no filler. The parenthetical default is slightly redundant with the schema but does not bloat the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter navigation tool with no output schema and no annotations, the description covers purpose and auth context adequately. It leaves open what the agent gets back after opening the page (e.g., page content or state) and how this interacts with a previously open page, which matters for chaining into the click/type siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single optional url parameter is fully documented there. The description only restates the default URL, which duplicates the schema rather than adding format or constraint detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (open) and resource (a StreamElements page in the signed-in Cloud Browser), plus the default URL and the downstream intent (list/edit chat commands). This clearly separates it from siblings like streamelements_read, streamelements_click, and streamelements_close, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'to work with list and edit chat commands' implies when this tool is appropriate, but there is no explicit when-not guidance and no routing to alternatives such as streamelements_read for reading content or streamelements_guide for help. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
streamelements_readB
Read the current StreamElements page: its text and numbered buttons, links and fields.
| Name | Required | Description | Default |
|---|---|---|---|
| element | No | Read only inside this element. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does useful work by disclosing the return contents (text, numbered buttons, links, fields), which tells the agent the page is presented as an indexed, actionable view. It does not say whether the read is passive, whether numbering is stable across calls, or whether large pages are truncated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and the target, with the payload listed after the colon. Nothing is wasted, though the compressed phrasing leaves helpful detail such as the numbering convention unstated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema and no annotations, the description covers what comes back but not the conventions an agent needs — notably that the numbered buttons are the handles consumed by streamelements_click. Adequate but with a real gap for a browser-driving toolset.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'element' parameter is documented as 'Read only inside this element', so the schema does the work. The description says nothing about scoping or the meaning of element, so it adds no meaning beyond the schema — the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Read) and a specific resource (the current StreamElements page), then enumerates what is returned: text, numbered buttons, links and fields. That goes well beyond the name, though it never names a sibling tool, so an agent must infer from the sibling list that this is the inspection half of a click/type workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: reading the page is obviously a precursor to streamelements_click and streamelements_type, but the description never says so, nor does it state when to prefer this over streamelements_status or streamelements_guide. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
streamelements_statusB
Check that your Cotlet.dev account and StreamElements are ready: account, credits and StreamElements connection.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It does disclose the scope of the check (account, credits, connection), and a zero-parameter "status" query naturally reads as side-effect free, but it says nothing about what a not-ready result looks like or what the agent should do about a failed connection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the resource list up front and no filler. The colon-separated enumeration is slightly awkward and the Cotlet.dev branding adds noise, but nothing needs cutting.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial zero-parameter probe with no output schema, the description covers what is inspected but not what the result means or how to act on a negative outcome. It is adequate to call correctly, but thin on interpretation guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is no parameter meaning to convey and the baseline is 4. The description correctly avoids inventing inputs for a parameterless call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Check" plus three named subjects (account, credits, StreamElements connection) tells the agent this is a readiness/health probe, which is clearly distinct from the action-oriented siblings (read, open, click, type, close). It loses a point because "ready" is never defined and the "Cotlet.dev account" framing is ambiguous about what is actually being checked.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit statement of when to call this versus streamelements_read or streamelements_guide, and no mention of it being a prerequisite check before the other tools. The word "ready" only implies it should be run first; that routing decision is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
streamelements_typeB
Type text into a numbered field on the current StreamElements page.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to type. | |
| element | Yes | Field number from the last read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the entire burden and leaves key behaviors unstated: whether typing overwrites or appends to existing field content, whether it triggers input/change/submit events, whether focus is required first, and what happens on an invalid field number. For a mutating UI-automation tool with zero annotation coverage this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler and no redundant restatement of the tool name. Every word carries information about the action and the target.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and no statement of side effects or return behavior, an agent cannot tell what this tool reports back or how the page changes after typing. For a browser-automation mutation tool, the definition should disclose more than the action alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented, including the useful 'Field number from the last read' hint. The description adds nothing beyond restating 'numbered field' and 'text', so the schema does the work and the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb ('Type text') and a specific target ('a numbered field on the current StreamElements page'), which distinguishes it from streamelements_click and streamelements_read. It stops short of explicitly naming which sibling to use when, but the action itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'on the current StreamElements page' implies a prerequisite (a page must already be open) and 'numbered field' implies a prior read, but neither is stated as a rule. There is no explicit when-not guidance or comparison with siblings such as streamelements_click, which an agent would need to choose between.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v1.1.0- First observed
streamelements_click - First observed
streamelements_close - First observed
streamelements_guide - First observed
streamelements_open - First observed
streamelements_read - First observed
streamelements_status - First observed
streamelements_type
TDQS
Scored across 7 tools
Each tool maps to a distinct browser-automation action: open, read, click, type, close, plus guide and status. The boundaries between guide (instructions) and status (readiness check) are clear enough, though both are meta-tools that could initially be confused. Open versus read is also distinguishable because one navigates and the other extracts content.
All tools follow the same streamelements_<verb> snake_case pattern. The prefix is consistent and the verbs are simple and readable. There is no mixing of camelCase or conflicting conventions.
Seven tools is a well-scoped set for a browser-automation workflow focused on StreamElements chat-command management. Each tool has a clear role, and none appears redundant or purely decorative.
The surface covers the core lifecycle: sign-in guidance, readiness check, opening a page, reading it, interacting via click and type, and closing the session. Minor gaps exist around navigation history or waiting for dynamic updates, but the essential list-and-edit workflow is covered.
Maintenance
Related MCP Connectors
Query your Twitch streams, events, supporters, raids & rankings from an AI assistant via OAuth.
Manage your Twitch raid-train schedule from an AI assistant: claim, release & trade slots via OAuth.
Manage ElevenLabs voice agents and generate speech, music, sound effects, images, and video.
Build, edit and place TikTok LIVE overlay widgets (alerts, goals, games) from your AI assistant.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables interaction with the Twitch API, allowing users to retrieve comprehensive information about channels, streams, games, and more, with additional support for searching and accessing chat elements like emotes and badges.14217 npm4MIT
- FlicenseAqualityDmaintenanceEnables Claude to execute Minecraft commands and get tab completions through the MasterControl API. Allows remote command execution and command discovery while the player is online on a server.2-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage WooCommerce stores, including products, orders, customers, categories, coupons, attributes, variations, order notes, refunds, reports, payment gateways, meta data, reviews, settings, data, posts, and system status through natural language.MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to manage Top.gg bot or server listings, including updating project info, checking votes, posting metrics, and registering commands.89 npm3ISC