---
name: npoq
description: Manage a Kick streamer's npoq chatbot through the npoq MCP server — custom chat commands (including JavaScript-scripted commands), timed/periodic messages, chat alert texts, on-stream (OBS) alert on/off toggles, counters and global variables. Use when the user asks to create, edit, list or delete npoq/Kick chat commands, timers, alerts or variables.
---

# npoq — Kick chatbot via MCP

npoq (https://npoq.net) is a chatbot, overlay and widget platform for Kick streamers. Its MCP server lets you manage the streamer's bot settings directly. Everything you change applies to the live channel right away, exactly as if the streamer had done it in the npoq panel.

## Connection

- MCP server: `https://api.npoq.net/mcp` (Streamable HTTP, OAuth 2.1). The first connection opens an npoq consent page in the browser; the streamer signs in with Kick and chooses which areas you may read or change.
- If no npoq tools are available, the server is not connected. Tell the user how to add it (see https://npoq.net/skills/npoq/INSTALL.md) instead of guessing.
- Areas (OAuth scopes, each `:read` or `:write`): `commands`, `periodic-messages`, `chat-alerts`, `alerts`, `variables`. Tools outside the granted scopes are not visible to you.

## What you can do

| Area | Tools |
| --- | --- |
| Commands | `list_commands`, `create_command`, `update_command`, `delete_command`, `get_script_reference` |
| Periodic messages | `list_periodic_messages`, `create_periodic_message`, `update_periodic_message`, `delete_periodic_message` |
| Chat alerts (bot messages on follow, sub, raid, level-up…) | `get_chat_alerts`, `update_chat_alert` |
| On-stream (OBS) alerts | `get_overlay_alerts`, `set_overlay_alert_active` (on/off only) |
| Variables | `list_variables`, `set_counter`, `set_variable`, `delete_counter`, `delete_variable` |

## What you cannot do (say so instead of trying)

- Send messages to Kick chat, ban/timeout viewers, or act as the bot in chat.
- Change overlay visuals (images, sounds, colors, widget layouts) — those need the panel's live preview: https://npoq.net/profile
- Billing, plans, moderators, account settings, giveaways, channel point rewards, widgets.
- Read or change per-viewer data (watch time, points, levels, viewer variables).

## How to work

1. **Read before you write.** Call the matching `list_*` / `get_*` tool first so you know the current state and the exact ids.
2. **Commands**
   - `trigger` is the name without `!`. Names must be unique across custom commands, built-in commands and widget commands — a clash returns an error; pick another name.
   - Built-in commands (`!points`, `!uptime`, `!followage`, `!clip` …) cannot be deleted or renamed. Edit them with `update_command` + `defaultTrigger`.
   - `role`: who may use it. `availability`: `always` · `live` · `offline` (`!clip` is always live-only). `globalTimeout` / `userTimeout` are cooldowns.
   - Plain-text responses may use `{sender}`.
3. **Scripted commands.** ALWAYS call `get_script_reference` first and follow it exactly. The response must contain a `<script>` block that defines `Main` and returns the text to post. Writing a script needs BOTH `commands:write` and `variables:write`; if the tool answers `insufficient-scope` with `variables:write`, ask the user to reconnect and grant it. Use the `npoq.*` helpers for counters and variables, await every call, keep scripts short and fast.
4. **Periodic messages** post only while the stream is live: `period` = minutes between posts, `messageCount` = chat messages required in between.
5. **Plan limits.** Free / Pro / Ultimate plans limit how many commands, aliases and periodic messages exist. If a create call fails with a limit error, tell the user (deleting or disabling something, or upgrading at https://npoq.net/pricing) — do not retry in a loop.
6. **Errors** come back as keys such as `Errors.command-name-taken`; explain them in plain words.
7. **Confirm destructive actions** (delete, bulk changes) with the user before running them, and summarize what changed afterwards.
8. Reply in the user's language. Command texts the viewers see should be in the channel's chat language (ask if unsure).

## Examples

- "Make a !discord command that posts my server link, mods only, 30 s cooldown" → `create_command` with `role: "moderator"`, `globalTimeout: 30`.
- "Count deaths with !death" → `get_script_reference`, then a script command that increments the `deaths` counter and returns the new total.
- "Post my Instagram every 20 minutes" → `create_periodic_message` with `period: 20`.
- "Turn off the raid message in chat" → `get_chat_alerts`, then `update_chat_alert` with `isActive: false`.

Docs: https://npoq.net/docs · MCP page: https://npoq.net/mcp · Support: support@npoq.net
