<!-- GENERATED by scripts/generate-docs.js — do not edit by hand. Run `npm run docs`. -->

# UberBot MCP tool reference

UberBot exposes **36 MCP tools**: purpose-built tools for everyday administration, plus four catalog tools that reach **all 182 supported Discord API operations** (see [API_CATALOG.md](API_CATALOG.md)).

Conventions shared by every tool:

- `server` accepts a server ID or exact name and may be omitted when you granted exactly one server.
- `channel`, `role`, `user` accept IDs, mentions (`<#id>`, `<@&id>`, `<@id>`), or names (`#general`, `Moderator`, `alice`).
- Results are compact JSON. Lists return a cursor (`next_before`, `next_after`, `next_offset`, `page.next`) when more data exists.
- Errors are `{ "error": code, "message": ..., "hint": ... }`. Codes: `forbidden`, `read_only`, `not_installed`, `not_found`, `ambiguous`, `invalid_argument`, `rate_limited` (with `retry_after_ms`), `discord_forbidden`, `discord_error`, `not_supported`, `circuit_open`, `upgrade_required` (with `upgrade_url`: the server’s plan doesn’t include this).
- Annotations: **read** tools are marked `readOnlyHint` (clients may auto-approve); **write** tools are not; **destructive** tools set `destructiveHint` and require `confirm: true` after showing a preview.

## Contents

- **Orientation & settings**: [`uberbot_help`](#uberbot_help), [`discord_list_servers`](#discord_list_servers), [`discord_get_server_overview`](#discord_get_server_overview), [`discord_list_channels`](#discord_list_channels), [`discord_list_roles`](#discord_list_roles), [`uberbot_configure`](#uberbot_configure)
- **Channels & permissions**: [`discord_create_channel`](#discord_create_channel), [`discord_update_channel`](#discord_update_channel), [`discord_delete_channel`](#discord_delete_channel), [`discord_set_channel_permissions`](#discord_set_channel_permissions)
- **Roles**: [`discord_create_role`](#discord_create_role), [`discord_update_role`](#discord_update_role), [`discord_delete_role`](#discord_delete_role)
- **Members & moderation**: [`discord_find_members`](#discord_find_members), [`discord_get_member`](#discord_get_member), [`discord_update_member_roles`](#discord_update_member_roles), [`discord_moderate_member`](#discord_moderate_member), [`discord_get_audit_log`](#discord_get_audit_log)
- **Messages**: [`discord_read_messages`](#discord_read_messages), [`discord_search_messages`](#discord_search_messages), [`discord_send_message`](#discord_send_message), [`discord_edit_message`](#discord_edit_message), [`discord_delete_messages`](#discord_delete_messages), [`discord_purge_messages`](#discord_purge_messages), [`discord_send_direct_message`](#discord_send_direct_message)
- **Emoji**: [`discord_create_emoji`](#discord_create_emoji)
- **Build, undo & automate**: [`discord_build_server`](#discord_build_server), [`discord_list_changes`](#discord_list_changes), [`discord_undo`](#discord_undo), [`discord_create_automation`](#discord_create_automation), [`discord_list_automations`](#discord_list_automations), [`discord_delete_automation`](#discord_delete_automation)
- **Full API catalog**: [`discord_api_search`](#discord_api_search), [`discord_api_describe`](#discord_api_describe), [`discord_api_read`](#discord_api_read), [`discord_api_write`](#discord_api_write)

## Orientation & settings

### uberbot_help

**Answer questions about UberBot itself** · _read_

Search UberBot’s own documentation and FAQ: what it can do, how to set it up (Discord, Claude, ChatGPT), plans and pricing, AI credits, staff access, undo, automations, triggers, moderation, the help desk, privacy, and troubleshooting. Use this whenever someone asks about UberBot rather than about their server, and answer from the results (link the docs when useful). For the current server’s plan and credits, use discord_list_servers.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `question` | string | yes | The question, in plain words. |

### discord_list_servers

**List my Discord servers** · _read_

START HERE. Lists the Discord servers you granted to this connection, whether UberBot is installed in each, your access there (owner / administrator = everything; member = limited to your own Discord permissions and the channels you can see), member count, and the server policy (read-only, owner-only). Use the returned id or name as `server` in other tools.

_No parameters._

### discord_get_server_overview

**Server overview** · _read_

One-call snapshot of a server: settings (verification, content filter, notifications), counts (members, online, channels by type, roles, emojis, boosts), key channels (rules, system, AFK), features, and UberBot health (its role position and whether it can manage roles). Use before making structural changes.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |

### discord_list_channels

**List channels** · _read_

All channels you can see, as a category tree in display order, with id, type, topic, slowmode, nsfw and whether each is private (hidden from @everyone). Set include_threads to also list active threads. Served from cache — cheap to call.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `include_threads` | boolean |  | Include active (non-archived) threads under their parent channel. |
| `type` | `text` \\| `voice` \\| `category` \\| `announcement` \\| `stage` \\| `forum` \\| `media` |  | Only this channel type. |

### discord_list_roles

**List roles** · _read_

All roles from highest to lowest with id, color, member count, decoded permission names, hoist/mentionable flags, and whether a role is managed by an integration (cannot be assigned). Marks roles UberBot cannot manage (above its own role).

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `include_permissions` | boolean |  | Include permission names per role (default true). |

### uberbot_configure

**Configure UberBot for a server** · _write_

View or change UberBot policy for a server (also editable in the admin portal: settings_page). member_roles lets members with those roles use UberBot WITHOUT being Administrators: they are limited to their own Discord permissions, only see channels they can see in Discord, and cannot grant permissions they lack ([] turns it off; owner or Administrator may change it). read_only: true blocks every write through UberBot; access_level "owner" limits UberBot to the server owner (both owner only). Call with only `server` to view.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `member_roles` | string[] |  | Role names or IDs whose members may use UberBot with their own permissions. Replaces the list; [] disables member access. |
| `read_only` | boolean |  |  |
| `access_level` | `administrator` \\| `owner` |  |  |
| `chat_reply` | `reply` \\| `thread` |  | How @UberBot answers in Discord: "reply" right in the channel (default) or "thread" (opens a private thread with the asker). |

## Channels & permissions

### discord_create_channel

**Create a channel or category** · _write_

Create a text, voice, announcement, stage, forum, or media channel, or a category. Place it in a category by name or ID. private: true hides it from @everyone and shows it only to visible_to roles/members (UberBot keeps access). Without private, a channel in a category inherits the category permissions.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `name` | string | yes |  |
| `type` | `text` \\| `voice` \\| `category` \\| `announcement` \\| `stage` \\| `forum` \\| `media` |  | Default "text". |
| `category` | string |  | Parent category name or ID. |
| `topic` | string |  |  |
| `private` | boolean |  |  |
| `visible_to` | string[] |  | Roles or members (names, IDs, mentions) who can see a private channel. |
| `slowmode` | string,number |  | e.g. "10s", "5m", or seconds (max 6h). |
| `nsfw` | boolean |  |  |
| `user_limit` | integer |  | Voice only. |
| `position` | integer |  |  |
| `reason` | string |  |  |

### discord_update_channel

**Edit a channel or thread** · _write_

Change a channel or thread: name, topic, category (or "none"), slowmode, nsfw, position, user_limit/bitrate (voice), sync_with_category (reset permissions to the category’s), and for threads archived/locked. NOTE: Discord allows only 2 name/topic changes per channel per 10 minutes — combine them in one call.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `channel` | string | yes | Channel ID, mention, or name. |
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `name` | string |  |  |
| `topic` | string |  |  |
| `category` | string |  | Category name/ID, or "none" to remove from its category. |
| `slowmode` | string,number |  | "0" to disable. |
| `nsfw` | boolean |  |  |
| `position` | integer |  |  |
| `user_limit` | integer |  |  |
| `bitrate` | integer |  |  |
| `sync_with_category` | boolean |  |  |
| `archived` | boolean |  | Threads only. |
| `locked` | boolean |  | Threads only. |
| `reason` | string |  |  |

### discord_delete_channel

**Delete a channel** · _destructive_

Permanently delete a channel, thread, or category (and all its messages). Deleting a category leaves its channels uncategorized. Without confirm: true, returns a preview.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `channel` | string | yes |  |
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `reason` | string |  |  |
| `confirm` | boolean |  |  |

### discord_set_channel_permissions

**Set channel permissions for a role or member** · _write_

Change what one role or member can do in a channel or category, using permission names. MERGES with the existing overwrite: `allow` grants, `deny` blocks, `reset` returns those permissions to inherited. remove: true deletes the overwrite entirely. Target "@everyone" to change the default. Prefix target with "role:" or "user:" if a role and user share a name. Common names: ViewChannel, SendMessages, ReadMessageHistory, Connect, Speak, AddReactions, AttachFiles, EmbedLinks, MentionEveryone, ManageMessages, CreatePublicThreads, SendMessagesInThreads.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `channel` | string | yes |  |
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `target` | string | yes | Role name/ID/@everyone, or member username/ID/mention. |
| `allow` | string[] |  | Permission names, e.g. ["ViewChannel","SendMessages","Connect"]. Case/spacing-insensitive. |
| `deny` | any |  | Permission names, e.g. ["ViewChannel","SendMessages","Connect"]. Case/spacing-insensitive. |
| `reset` | any |  | Permission names, e.g. ["ViewChannel","SendMessages","Connect"]. Case/spacing-insensitive. |
| `remove` | boolean |  |  |
| `reason` | string |  |  |

## Roles

### discord_create_role

**Create a role** · _write_

Create a role with a name, color, and permissions given by NAME. hoist shows members separately in the member list. position places it in the hierarchy (higher = more authority; must be below your own highest role). New roles default to just above @everyone.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `name` | string | yes |  |
| `color` | string,number |  | "#5865F2" or a name like "blue". |
| `permissions` | string[] |  | Default: no extra permissions (inherits @everyone). |
| `hoist` | boolean |  |  |
| `mentionable` | boolean |  |  |
| `position` | integer |  |  |
| `reason` | string |  |  |

### discord_update_role

**Edit a role** · _write_

Rename, recolor, move, or change permissions of a role. Use add_permissions / remove_permissions to adjust, or permissions to replace the whole set. You (and UberBot) can only edit roles below your highest role.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `role` | string | yes | Role name, ID, or mention. |
| `name` | string |  |  |
| `color` | string,number |  | "none" to remove color. |
| `permissions` | string[] |  | REPLACES all permissions. |
| `add_permissions` | any |  | Permission names, e.g. ["KickMembers","ManageMessages","ModerateMembers"]. |
| `remove_permissions` | any |  | Permission names, e.g. ["KickMembers","ManageMessages","ModerateMembers"]. |
| `hoist` | boolean |  |  |
| `mentionable` | boolean |  |  |
| `position` | integer |  |  |
| `reason` | string |  |  |

### discord_delete_role

**Delete a role** · _destructive_

Delete a role, removing it from every member. Without confirm: true, returns a preview including how many members have it.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `role` | string | yes |  |
| `reason` | string |  |  |
| `confirm` | boolean |  |  |

## Members & moderation

### discord_find_members

**Find members** · _read_

Find server members. With `query`, finds members whose display name, nickname or username matches loosely (punctuation, spacing and single words are tried, e.g. "Mrs Whatever" finds "Mrs. Whatever"), best match first with a `match` score (100 = exact). With `role`, lists members who have that role. With neither, lists members by join order of user ID. Returns id, names, roles, join date, timeout status. Page with next_after. Scans at most ~5000 members per call when filtering by role.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `query` | string |  |  |
| `role` | string |  | Role name or ID to filter by. |
| `limit` | integer |  | Default 100. |
| `after` | string |  | Cursor: user ID from a previous next_after. |

### discord_get_member

**Get member details** · _read_

Everything about one member: names, account age, join date, roles (highest first), server-wide permissions, timeout status, boosting, and whether you/UberBot can moderate them.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `user` | string | yes | User ID, <@mention>, or username/nickname. |

### discord_update_member_roles

**Add/remove roles for members** · _write_

Give and/or take roles from up to 25 members in one call (other roles are untouched). Reports success per member. Roles must be below your highest role and UberBot’s; managed (bot/integration) roles cannot be assigned.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `users` | string[] | yes | User IDs, mentions, or usernames. |
| `add` | string[] |  | Role names or IDs to add. |
| `remove` | string[] |  | Role names or IDs to remove. |
| `reason` | string |  |  |

### discord_moderate_member

**Moderate a member** · _destructive_

Moderation actions on one user: timeout (duration up to 28d, e.g. "10m", "1h", "7d"), remove_timeout, kick, ban (optionally delete_messages from the last up to 7d), unban, set_nickname (empty string clears), move_voice (to voice_channel), disconnect_voice. Kick and ban need confirm: true (call without it for a preview). The reason appears in the server audit log with your name.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `user` | string | yes | User ID, <@mention>, or username/nickname. |
| `action` | `timeout` \\| `remove_timeout` \\| `kick` \\| `ban` \\| `unban` \\| `set_nickname` \\| `move_voice` \\| `disconnect_voice` | yes |  |
| `duration` | string,number |  | Timeout length, e.g. "30m". |
| `delete_messages` | string,number |  | Ban only: delete their messages from the last N (e.g. "1d", max "7d"). |
| `nickname` | string |  |  |
| `voice_channel` | string |  | For move_voice: voice channel name or ID. |
| `reason` | string |  |  |
| `confirm` | boolean |  |  |

### discord_get_audit_log

**Read the audit log** · _read_

Who did what in the server, newest first, with names resolved: actor, action, target, reason, and what changed. Filter by action (e.g. "ban", "kick", "message_delete", "role_update", or any Discord name like MEMBER_ROLE_UPDATE), actor (who did it), and target. Page with next_before. Actions taken through UberBot show the requesting person in the reason.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `action` | string |  |  |
| `actor` | string |  | User who performed the action (ID, mention, username). |
| `target_id` | string |  | ID of the affected user/channel/role. |
| `limit` | integer |  | Default 25. |
| `before` | string |  | Cursor: entry ID from next_before. |

## Messages

### discord_read_messages

**Read messages** · _read_

Read recent messages from a channel or thread in chronological order (oldest → newest) in a compact format: author, content, attachments, embeds, reactions, replies. Default: the latest 50. Use before/after/around (message ID or ISO date) to navigate and next_before to page further back. limit up to 200 (fetched 100 per request).

| Parameter | Type | Required | Description |
|---|---|---|---|
| `channel` | string | yes | Channel or thread: ID, <#id> mention, or name (e.g. "general" / "#general"; needs `server` if you granted several). |
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `limit` | integer |  | Default 50. |
| `before` | string |  | Message ID or ISO date — only messages before it. |
| `after` | string |  | Message ID or ISO date — only messages after it (returns the oldest ones after it first). |
| `around` | string |  | Message ID — up to `limit` (≤100) messages around it. |

### discord_search_messages

**Search messages** · _read_

Search messages across a whole server like Discord’s search bar (only channels you can read). Combine filters: text, from_user, in_channel, mentions_user, has (link, embed, file, image, video, sound, sticker, poll), after/before dates, pinned. Returns up to 25 per page with total_results; page with offset.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `text` | string |  |  |
| `from_user` | string |  | User ID, mention, or username. |
| `in_channel` | string |  | Channel ID or name. |
| `mentions_user` | string |  |  |
| `has` | `link` \\| `embed` \\| `file` \\| `image` \\| `video` \\| `sound` \\| `sticker` \\| `poll` \\| `snapshot`[] |  |  |
| `after` | string |  | ISO date. |
| `before` | string |  | ISO date. |
| `pinned` | boolean |  |  |
| `sort` | `newest` \\| `oldest` \\| `relevance` |  |  |
| `limit` | integer |  |  |
| `offset` | integer |  |  |

### discord_send_message

**Send a message** · _write_

Post a message as UberBot in a channel or thread. Text over 2000 characters is split into several messages. Supports embeds, replies, and silent messages. By default only @user mentions ping; set mentions to "users_and_roles" or "everyone" to allow role/@everyone pings.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `channel` | string | yes | Channel or thread: ID, <#id> mention, or name (e.g. "general" / "#general"; needs `server` if you granted several). |
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `content` | string |  |  |
| `embeds` | object[] |  |  |
| `reply_to` | string |  | Message ID to reply to (same channel). |
| `mentions` | `none` \\| `users` \\| `users_and_roles` \\| `everyone` |  | Which mentions in content actually notify. Default "users". |
| `silent` | boolean |  | Deliver without push notifications (@silent). |
| `suppress_embeds` | boolean |  | Hide link previews. |

### discord_edit_message

**Edit a message UberBot sent** · _write_

Change the content or embeds of a message previously sent by UberBot. (Other users’ messages cannot be edited, only have embeds suppressed.) Members using UberBot with their own permissions need ManageMessages in the channel, since UberBot’s messages may have been posted by someone else.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `channel` | string | yes | Channel or thread: ID, <#id> mention, or name (e.g. "general" / "#general"; needs `server` if you granted several). |
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `message_id` | string | yes |  |
| `content` | string |  | New text (empty string removes text). |
| `embeds` | object[] |  | Replaces all embeds; [] removes them. |
| `suppress_embeds` | boolean |  |  |

### discord_delete_messages

**Delete specific messages** · _destructive_

Delete 1-100 messages by ID from one channel. Messages newer than 14 days are bulk-deleted in one request; older ones are deleted individually (slow, max 25 per call). Without confirm: true, returns a preview of what would be deleted.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `channel` | string | yes | Channel or thread: ID, <#id> mention, or name (e.g. "general" / "#general"; needs `server` if you granted several). |
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `message_ids` | string[] | yes |  |
| `reason` | string |  |  |
| `confirm` | boolean |  |  |

### discord_purge_messages

**Purge recent messages** · _destructive_

Clean up a channel: scan the most recent `scan` messages (≤500) and delete those matching the filters (from_user, contains text, bots_only, has_attachments, newer_than). Pinned messages are kept unless include_pinned. ALWAYS call without confirm first: it returns how many match plus samples; then call again with confirm: true.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `channel` | string | yes | Channel or thread: ID, <#id> mention, or name (e.g. "general" / "#general"; needs `server` if you granted several). |
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `scan` | integer |  | How many recent messages to examine (default 100). |
| `from_user` | string |  |  |
| `contains` | string |  | Case-insensitive substring. |
| `bots_only` | boolean |  |  |
| `has_attachments` | boolean |  |  |
| `newer_than` | string |  | ISO date — only messages after it. |
| `include_pinned` | boolean |  |  |
| `reason` | string |  |  |
| `confirm` | boolean |  |  |

### discord_send_direct_message

**DM a server member** · _write_

Send a direct message from UberBot to a member of your server (e.g. a moderation notice). Fails if the user has DMs from server members disabled. Members using UberBot with their own permissions need ModerateMembers and can only DM members below their highest role. Use sparingly: Discord rate-limits and flags bots that mass-DM.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `user` | string | yes | User ID, mention, or username of a member of this server. |
| `content` | string |  |  |
| `embeds` | object[] |  |  |

## Emoji

### discord_create_emoji

**Create a custom emoji** · _write_

Add a custom emoji to the server, from art you DRAW yourself (svg) or from an existing picture (image_url, e.g. an image someone attached in Discord, listed in the message as [Attached …]). To draw: write one complete SVG with viewBox="0 0 128 128" and a transparent background. Use bold, flat, emoji-style shapes, a thick dark outline, and high contrast, so it reads at 22 px. Fill most of the canvas and keep it simple, under about 15 KB. Do not use <text>, because no fonts are available, and do not use external images. In Discord chat the person sees the rendered emoji on the Confirm button, so draw it right away instead of describing it. Pictures are resized to 128 px; GIFs under 256 KB stay animated. Needs the Create Expressions permission.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `name` | string | yes | 2-32 letters, numbers or underscores, e.g. spicy_libra. |
| `svg` | string |  | SVG markup you drew (viewBox 0 0 128 128). |
| `image_url` | string |  | https link to a PNG/JPEG/GIF/WebP (e.g. a Discord attachment URL). |
| `roles` | string[] |  | Only members with these roles may use it (default: everyone). |
| `reason` | string |  |  |

## Build, undo & automate

### discord_build_server

**Build a server layout** · _write_

Create a complete server layout in one step: roles, categories, channels, topics, and who can see or post where (private / read_only + visible_to role names). Existing roles, categories and channels with the same names are reused, not duplicated. ALWAYS call first without confirm: it returns a preview of what will be created and skipped; call again with confirm: true to build. Everything created can be removed with one discord_undo. Use for "set up my server", "make a gaming community layout", "add a staff area".

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `layout` | object | yes |  |
| `reason` | string |  |  |
| `confirm` | boolean |  |  |

### discord_list_changes

**List recent UberBot changes** · _read_

Recent changes UberBot made in a server (from Claude, ChatGPT or Discord chat), newest first, each with an undo_id for discord_undo. Shows your changes; admins can pass everyone: true.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `everyone` | boolean |  | Admins: include changes by everyone. |

### discord_undo

**Undo an UberBot change** · _destructive_

Reverse a change UberBot made: created channels/roles are deleted, edits restored to their previous values, role assignments reversed, timeouts and bans lifted, messages UberBot sent deleted, built server layouts removed. Every write tool result includes undo_id; discord_list_changes lists recent ones. Deleted channels/roles come back EMPTY (messages and member assignments can’t be restored); kicks and deleted messages can’t be undone. You can undo your own changes; owners/Administrators can undo anyone’s.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `change_id` | integer | yes | undo_id of the change. |

### discord_create_automation

**Schedule an automation** · _write_

Post something on a schedule. kind "message" posts fixed text (free). kind "ai_post" runs your instructions through the AI each time (it can only READ the server, e.g. "summarize this week’s new members and top channels") and posts the result; it uses AI credits. Runs with YOUR permissions and stops if you lose them. Pro: 2 automations, Community: 25.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `name` | string | yes |  |
| `channel` | string | yes | Channel to post in (ID or name). |
| `kind` | `message` \\| `ai_post` | yes |  |
| `content` | string | yes | The message text, or the AI instructions for ai_post. |
| `schedule` | object | yes | When to run. |

### discord_list_automations

**List automations** · _read_

Scheduled automations in a server: what they post, where, when they run next, and the last error if a run failed.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |

### discord_delete_automation

**Delete or pause an automation** · _destructive_

Delete an automation, or pause/resume it with enabled. You can change your own; owners/Administrators can change any.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `server` | string |  | Server ID or exact name. Optional if you granted only one server. |
| `id` | integer | yes |  |
| `enabled` | boolean |  | Pause (false) or resume (true) instead of deleting. |

## Full API catalog

### discord_api_search

**Search the Discord API catalog** · _read_

Find the Discord API operation for a task that the other discord_* tools do not cover (e.g. "create scheduled event", "automod keyword filter", "emoji", "webhook", "forum tags", "onboarding", "prune"). Returns operation ids with one-line summaries. With no query, lists categories. Next: discord_api_describe(operation) for parameters, then discord_api_read / discord_api_write.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `query` | string |  | What you want to do, in plain words. |
| `category` | string |  | Restrict to a category (call with no args to list categories). |
| `safety` | `read` \\| `write` \\| `destructive` |  |  |
| `limit` | integer |  | Default 15. |

### discord_api_describe

**Describe a Discord API operation** · _read_

Get the exact parameters of a Discord API operation: path params, query params, request body as a compact TypeScript-like type, paging behaviour, safety level, and gotchas. Use expand_type to see a nested type that was not expanded.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `operation` | string | yes | Operation id from discord_api_search, e.g. "create_guild_scheduled_event". |
| `expand_type` | string |  | Name of a type referenced in the signature to expand, e.g. "MessageEmbed". |

### discord_api_read

**Call a read-only Discord API operation** · _read_

Execute any read (GET) operation from the catalog. List endpoints page automatically: set max_pages (1-10) and continue with the returned page.next query params. Always scoped to servers you granted.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `operation` | string | yes |  |
| `path_params` | object (map) |  | Values for {placeholders} in the path, e.g. {"guild_id":"123","channel_id":"456"}. guild_id defaults to your only server if you granted just one. |
| `query` | object (map) |  | Query string params, e.g. {"limit":100,"with_counts":true}. |
| `max_pages` | integer |  | Auto-paging for list operations (default 1). |

### discord_api_write

**Call a Discord API operation that changes data** · _destructive_

Execute any create/update/delete operation from the catalog. Always call discord_api_describe first so the body is correct. Destructive operations (delete, ban, kick, prune, bulk delete) return a preview unless confirm: true. Every write is recorded in the server audit log with your name and `reason`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `operation` | string | yes |  |
| `path_params` | object (map) |  | Values for {placeholders} in the path, e.g. {"guild_id":"123","channel_id":"456"}. guild_id defaults to your only server if you granted just one. |
| `query` | object (map) |  |  |
| `body` | any |  | JSON request body exactly as described by discord_api_describe. |
| `reason` | string |  | Shown in the Discord audit log. |
| `confirm` | boolean |  | Required (true) for destructive operations, after the user agreed. |
