Smithery's MCP Proxy and managed identity shut down on October 31. See what's changing

SmitherySign up for Arcade

Discord Bot

Arcade toolkit · docs.arcade.dev

The Discord Bot toolkit lets an Arcade-powered agent act as a Discord bot — reading and writing messages, managing threads, handling reactions, and inspecting server structure — all authenticated via a bot token rather than OAuth.

Capabilities

  • Messaging: Send, edit, delete, reply to, pin, and unpin messages across channels and threads; mention suppression (@everyone, @here, roles) is enforced on send, edit, and thread seed operations to prevent accidental server-wide pings.
  • Search & retrieval: Fetch individual messages, channels, servers, and users by ID; list recent messages (newest-first), pinned messages, and perform text/author search within a channel or across an entire server (local scan of recent history, not full Discord history).
  • Thread & channel management: List channels (filterable by type), list active (non-archived) threads, and start threads from a message, standalone in a text channel, or as forum/media posts.
  • Reactions: Add and remove the bot's own emoji reactions; removing a reaction never added is a safe no-op.
  • Server & identity introspection: List servers the bot belongs to, resolve user IDs to human-readable names (with optional per-server nickname lookup), and verify the active bot identity with WhoAmI.
  • Graceful not-found handling: Missing messages, channels, servers, and users return a structured not_found status rather than raising errors, letting agent chains branch without try/catch logic.

Secrets

DISCORD_BOT_TOKEN — The bot token that authenticates every API call as your Discord bot. To obtain it:

  1. Open the Discord Developer Portal and select (or create) your application.
  2. Go to Bot in the left sidebar.
  3. Under the Token section, click Reset Token (or Copy if already generated) to retrieve the token.
  4. Enable any Privileged Gateway Intents your use case requires — notably Message Content Intent if you need full message body access via SearchMessages or GetMessage.
  5. Invite the bot to your server with appropriate permissions (e.g. Read Messages, Send Messages, Manage Messages) using the OAuth2 URL Generator in the portal.

Store the token as an Arcade secret. See Arcade tool secrets docs for configuration details, or manage secrets directly at https://api.arcade.dev/dashboard/auth/secrets.

Tools20

  • DiscordBot_AddReaction

    Add an emoji reaction to a Discord message as the bot.

  • DiscordBot_DeleteMessage

    Delete a message from a Discord channel. This cannot be undone.

  • DiscordBot_EditMessage

    Edit a message the bot posted. The bot can only edit its own messages. Edits suppress @everyone, @here, and role mentions, so correcting an earlier post never pings the whole server (Discord re-parses mentions in edited content by default). Editing a message authored by someone else is not an error: it returns a result whose status is not_author so the caller can pivot (e.g. post a new message) without its tool chain aborting.

  • DiscordBot_GetChannel

    Get a single Discord channel's name, type, and topic. A missing channel (e.g. one that was deleted) is not an error: the result's status is not_found so the caller can branch without a try/catch. A genuine permission problem is still raised.

  • DiscordBot_GetMessage

    Fetch a single Discord message by id. A missing message (e.g. one that was deleted) is not an error: the result's status is not_found so the caller can branch without a try/catch. A genuine permission problem is still raised.

  • DiscordBot_GetServer

    Get a single Discord server's name, owner, and member count. A server the bot cannot resolve (it is not a member, or the id is wrong) is not an error: the result's status is not_found so the caller can branch without a try/catch. A genuine permission problem is still raised.

  • DiscordBot_GetUser

    Resolve a user id (such as a message author_id) into a human-readable name. Pass server_id to fold in the user's nickname in that server. Use this to turn the opaque author_id on messages into a name without leaving the agent. A user id that resolves to no account is not an error: the result's status is not_found so the caller can branch.

  • DiscordBot_ListActiveThreads

    List a Discord server's currently active (non-archived) threads.

  • DiscordBot_ListChannels

    List the channels in a Discord server, optionally filtered by type.

  • DiscordBot_ListMessages

    Read a channel's or thread's recent messages, newest first.

  • DiscordBot_ListPinnedMessages

    List the pinned messages in a Discord channel.

  • DiscordBot_ListServers

    List the Discord servers the bot is a member of and can act in.

  • DiscordBot_PinMessage

    Pin a message in a Discord channel so the team can find it later.

  • DiscordBot_RemoveReaction

    Remove the bot's own emoji reaction from a Discord message. Removes only the bot's reaction; other users' reactions with the same emoji are unaffected. Removing a reaction the bot never added is a no-op that returns removed False, so the caller can tell that case apart from a real removal.

  • DiscordBot_ReplyToMessage

    Reply to an existing Discord message so the answer stays tied to the question. To reply inside a thread, pass the thread id as channel_id and a message id from inside the thread as message_id. A thread's own id is its starter message, which lives in the parent channel, not inside the thread.

  • DiscordBot_SearchMessages

    Find messages by text and/or author in one channel or across a whole server. Use a single call with server_id to answer "I remember a message but not where" without looping channels yourself; a server-wide search covers text and announcement channels plus active threads and forum posts. Discord's bot API has no server-side message search, so this scans recent messages locally and covers the most recent max_scan messages, not full history. Matching reads content, which is empty for messages the bot cannot see in full without the Message Content intent.

  • DiscordBot_SendMessage

    Post a new message to a Discord channel as the bot. Posts with @everyone, @here, and role mentions suppressed so a routine update never pings the whole server.

  • DiscordBot_StartThread

    Start a thread from a message, standalone in a text channel, or as a forum/media post. Discord seeds forum and media posts from the create call but does not accept an opening body for text-channel threads, so for those this posts content as a follow-up opening message in one call. Mentions in content are suppressed so seeding never pings the server.

  • DiscordBot_UnpinMessage

    Unpin a previously pinned message in a Discord channel.

  • DiscordBot_WhoAmI

    Return the authenticated Discord bot's own user identity. Use this to verify the configured bot token and confirm which bot account the tools act as. It is a verification helper, not a required preamble to the other tools.