Communication · Integration
DiscordAGNT

AI agents for Discord

Community chat with an automation-friendly API. AGNT connects to Discord so agents can read what happens there, reason about it, and act — with a receipt for every run.

Install Support First Responder → Get AGNT free

Support First Responder is a ready-made agent that works in Discord — free, and it runs on your machine.

Discord and AGNT, in brief

What it doesLets an AGNT agent read from and act in Discord.
Connects withAn API key held in the local vault
AGNT nodediscord-api, receive-discord-message
Runs whenA message posts in a channel
Typical build timeTwo minutes
Where data goesNowhere by default — AGNT runs on your machine and credentials never leave it.

What you can automate

Reacts when…

  • a message posts in a channel
  • a member joins
  • a keyword appears

Agents can…

  • post channel messages
  • DM members
  • publish digests

Teams use it for

  • community questions answered from your docs
  • daily digests of what mattered
  • signals routed to the team

Build it: the Discord workflow

Design goal for Discord: community questions answered from your docs; daily digests of what mattered; signals routed to the team. The template below supplies configurable nodes, not the complete logic for those goals.

Use this Discord setup template to arrange the schedule, input review and API operation. Configure the account-specific fields and add your own decision and approval controls before activation.

Discord workflow: watch discord for activity → review source and draft → configure destination in discord TRIGGER receive-discord-message Watch Discord for activity Configure activation ACTION agnt-agent Review source and draft Configure inputs ACTION discord-api Configure destination in Discord Configure inputs
Configuration example for Discord. API and model calls may send data to your selected providers.
Discord — read, decide, actSetup template · configure before activation

This is a schema-checked starting point, not an end-to-end tested automation. Replace every CONFIGURE_ value, choose the operations you intend, connect credentials and map source outputs into later inputs. An edge orders steps; it does not supply a condition, an approval gate or a field mapping. Add and test those controls explicitly before any write. Cloud APIs and model providers may receive data. Keep the workflow inactive until tested with fixtures.

{
  "id": "a18a5a5e-1a0f-40e0-ad9e-c28a0e7d3670",
  "name": "Discord — read, decide, act",
  "nodes": [
    {
      "id": "562bf3dc-c91a-4989-a998-80c776ad0896",
      "text": "Watch Discord for activity",
      "x": 512,
      "y": 144,
      "isEditing": false,
      "type": "receive-discord-message",
      "icon": "clock",
      "category": "trigger",
      "isSelected": false,
      "parameters": {
        "channelId": "CONFIGURE_CHANNELID"
      },
      "description": "Setup template for Receive Discord Message. Listen for incoming Discord messages in a specified channel and trigger the workflow when a new message is received. Configure credentials, inputs and output mapping before use.",
      "error": null,
      "isActive": false,
      "output": null,
      "outputs": {}
    },
    {
      "id": "ed3d7624-87f1-403e-a53b-96a821557eb4",
      "text": "Review source and draft",
      "x": 512,
      "y": 336,
      "isEditing": false,
      "type": "agnt-agent",
      "icon": "agnt",
      "category": "action",
      "isSelected": false,
      "parameters": {
        "agentId": "CONFIGURE_AGENTID",
        "message": "Read the Discord item and decide whether it warrants action. Explain your reasoning.\nSource input: CONFIGURE_SOURCE_INPUT. Produce a reviewable draft only; do not take external actions."
      },
      "description": "Setup template for Agent Chat. Chat with an AI agent from your agent library. Select an agent and send messages to interact with it within your workflow. Configure credentials, inputs and output mapping before use.",
      "error": null,
      "isActive": false,
      "output": null,
      "outputs": {}
    },
    {
      "id": "70e17101-de14-4d03-a9f2-c2700f297a36",
      "text": "Configure destination in Discord",
      "x": 512,
      "y": 528,
      "isEditing": false,
      "type": "discord-api",
      "icon": "connect",
      "category": "action",
      "isSelected": false,
      "parameters": {
        "action": "SEND_MESSAGE",
        "recipientType": "channel",
        "channelId": "CONFIGURE_CHANNELID",
        "message": "CONFIGURE_MESSAGE",
        "autoSplit": false,
        "splitLimit": 1,
        "splitDelayMs": 1,
        "numberChunks": false
      },
      "description": "Setup template for Discord API. Interact with Discord to perform various operations such as sending messages, managing roles, and uploading files. Long messages are automatically split into multiple chunks (Discord caps a single message at 2000 characters); splitting is code-block aware and emoji-safe. Configure credentials, inputs and output mapping before use.",
      "error": null,
      "isActive": false,
      "output": null,
      "outputs": {}
    }
  ],
  "edges": [
    {
      "id": "0491de8a-0785-4f14-aebf-564aafc77574",
      "start": {
        "id": "562bf3dc-c91a-4989-a998-80c776ad0896",
        "type": "output"
      },
      "end": {
        "id": "ed3d7624-87f1-403e-a53b-96a821557eb4",
        "type": "input"
      },
      "startX": 800,
      "startY": 168,
      "endX": 512,
      "endY": 360
    },
    {
      "id": "73989002-3b2d-4b03-a0e7-03396470befe",
      "start": {
        "id": "ed3d7624-87f1-403e-a53b-96a821557eb4",
        "type": "output"
      },
      "end": {
        "id": "70e17101-de14-4d03-a9f2-c2700f297a36",
        "type": "input"
      },
      "startX": 800,
      "startY": 360,
      "endX": 512,
      "endY": 552
    }
  ],
  "zoomLevel": 1,
  "canvasOffsetX": 0,
  "canvasOffsetY": 0,
  "isTinyNodeMode": false
}

Configure Receive Discord Message

Listen for incoming Discord messages in a specified channel and trigger the workflow when a new message is received.

  • channelId — The ID of the Discord channel to monitor Current example: CONFIGURE_CHANNELID.

Configure Discord API

Interact with Discord to perform various operations such as sending messages, managing roles, and uploading files. Long messages are automatically split into multiple chunks (Discord caps a single message at 2000 characters); splitting is code-block aware and emoji-safe.

  • action — The action to perform on Discord. RESOLVE_USER = look up a user by username or ID. TEST_DM = 5-stage diagnostic that verifies the bot can DM a user. ORCHESTRATOR_CHAT = bridge a message into AGNT's full orchestrator (the same engine that powers the main Annie chat) and return the reply + any generated image refs; conversationId (or channelId) keys persistent memory. DELETE_MESSAGE = delete the bot's OWN message(s) — one by messageId, or purge all/recent bot messages from a DM or channel (deleteMode='purgeMine'/'purgeRecent'). In a DM the bot can only delete its own messages (Discord platform rule). Only use this when you actually intend to delete something: mode='single' with no messageId is a safe no-op (deletes nothing). Current example: SEND_MESSAGE.
  • recipientType — Where the action targets. 'channel' = guild text channel (uses channelId). 'user' = direct message to a Discord user (uses userId; bot must share at least one guild with the user). Applies to SEND_MESSAGE, UPLOAD_FILE, and DELETE_MESSAGE. Current example: channel.
  • channelId — The ID of the Discord channel (for SEND_MESSAGE, UPLOAD_FILE, and DELETE_MESSAGE when recipientType='channel'). When recipientType='user' this field is ignored (use userId instead). Current example: CONFIGURE_CHANNELID.
  • message — The message text. For SEND_MESSAGE: the Discord message to send (auto-split if over the 2000-char limit unless autoSplit is disabled). For UPLOAD_FILE: optional caption sent with the attachment. For ORCHESTRATOR_CHAT: the prompt sent to Annie's full orchestrator. Current example: CONFIGURE_MESSAGE.
  • autoSplit — Automatically split messages that exceed the character limit into multiple sequential messages (for SEND_MESSAGE action). Splitting avoids breaking words, preserves fenced code blocks, and never slices emoji. Default: true. Set false to send as-is (Discord will reject content over 2000 chars). Current example: false.
  • splitLimit — Maximum characters per message chunk when autoSplit is on (for SEND_MESSAGE action). Capped at Discord's 2000-char hard limit. Lower it for a safety margin. Default: 2000. Current example: 1.
  • splitDelayMs — Delay in milliseconds between sequential chunks when a message is split (for SEND_MESSAGE action). Keeps chunks in order and avoids Discord rate limits. Default: 350. Set 0 for no delay. Current example: 1.
  • numberChunks — Append a (n/N) counter to the end of each chunk when a message is split (for SEND_MESSAGE action). Default: false. Current example: false.

Install Support First Responder — it runs on Discord

Support First Responder is a working agent that uses Discord. Installing it drops the whole workflow onto your canvas — connected, editable, and yours to change.

Runs on your own machine · See what it does

Community questions are mostly documented already

Most questions in a community server have an answer somewhere in your docs. An agent that answers from that documentation with the source linked reduces load without inventing anything, and escalates the questions that genuinely are new.

Digests instead of scrollback

A busy server is impossible to read and easy to miss things in. A daily digest of what actually mattered — recurring problems, notable feedback, unanswered questions — turns a firehose into something a team can act on.

What the Discord node actually exposes

Interact with Discord to perform various operations such as sending messages, managing roles, and uploading files. Long messages are automatically split into multiple chunks (Discord caps a single message at 2000 characters); splitting is code-block aware and emoji-safe.

What it can do: SEND_MESSAGE ASSIGN_ROLE GET_MEMBERS UPLOAD_FILE BAN_MEMBER RESOLVE_USER TEST_DM ORCHESTRATOR_CHAT DELETE_MESSAGE

Full Discord API parameter reference
ParameterTypeWhat it does
actionrequired string The action to perform on Discord. RESOLVE_USER = look up a user by username or ID. TEST_DM = 5-stage diagnostic that verifies the bot can DM a user. ORCHESTRATOR_CHAT = bridge a message into AGNT's full orchestrator (the same engine that powers the main Annie chat) and return the reply + any generated image refs; conversationId (or channelId) keys persistent memory. DELETE_MESSAGE = delete the bot's OWN message(s) — one by messageId, or purge all/recent bot messages from a DM or channel (deleteMode='purgeMine'/'purgeRecent'). In a DM the bot can only delete its own messages (Discord platform rule). Only use this when you actually intend to delete something: mode='single' with no messageId is a safe no-op (deletes nothing).
SEND_MESSAGE · ASSIGN_ROLE · GET_MEMBERS · UPLOAD_FILE · BAN_MEMBER · RESOLVE_USER · TEST_DM · ORCHESTRATOR_CHAT
conversationId string Stable conversation key for ORCHESTRATOR_CHAT memory. Same ID across calls = same persistent conversation. If omitted, derived from channelId (discord-dm-<channelId>) or userId. This is what gives the Discord bridge full conversation memory.
only when action is ORCHESTRATOR_CHAT
orchestratorModel string Optional model override for ORCHESTRATOR_CHAT (e.g. 'claude-sonnet-4-5'). If omitted, uses the user's default provider/model.
only when action is ORCHESTRATOR_CHAT
enabledTools string Strict tool whitelist for ORCHESTRATOR_CHAT turns (comma-separated tool names). Default: a lean DM set (discord_api, generate_image, analyze_image, web_search, web_scrape, file_operations, execute_javascript_code, execute_shell_command, atlas_image, atlas_video, atlas_upload, text_to_speech). Pass 'all' to disable filtering and send the full tool surface. Fewer tools = far fewer tokens per turn and fits small-context models like Grok (128k).
only when action is ORCHESTRATOR_CHAT
resolveMode string How to look up the user (RESOLVE_USER action). 'byQuery' searches a guild's member list by username/display name/nickname (needs guildId + userQuery). 'byId' validates a known user ID (needs userId).
byQuery · byId
only when action is RESOLVE_USER
userQuery string The username, global display name, or nickname to search for (RESOLVE_USER with resolveMode='byQuery'). Case-insensitive substring match by default; set exactMatch=true for exact match.
only when resolveMode is byQuery
guildId string The ID of the Discord guild (server) (for ASSIGN_ROLE and GET_MEMBERS actions)
only when action is ASSIGN_ROLE or GET_MEMBERS or BAN_MEMBER
exactMatch boolean Require exact match of username / display name / nickname (RESOLVE_USER with resolveMode='byQuery'). Default: false (case-insensitive substring match).
only when resolveMode is byQuery
dryRun boolean Run all TEST_DM checks WITHOUT actually sending a message. All stages up to messageSend will run, but the final send is skipped. Perfect for first-time setup verification without spamming DMs. Default: false.
only when action is TEST_DM
recipientType string Where the action targets. 'channel' = guild text channel (uses channelId). 'user' = direct message to a Discord user (uses userId; bot must share at least one guild with the user). Applies to SEND_MESSAGE, UPLOAD_FILE, and DELETE_MESSAGE.
channel · user
only when action is SEND_MESSAGE or UPLOAD_FILE or DELETE_MESSAGE
deleteMode string DELETE_MESSAGE mode. 'single' = delete one message by messageId. 'purgeMine' = delete EVERY message the bot authored in this DM/channel (up to scanLimit). 'purgeRecent' = delete the bot's last N authored messages (set count). In a DM only the bot's own messages can be deleted.
single · purgeMine · purgeRecent
only when action is DELETE_MESSAGE
messageId string The ID of the message to delete (DELETE_MESSAGE with deleteMode='single'). Enable Developer Mode -> right-click the message -> Copy Message ID.
only when deleteMode is single

27 further parameters are available on the node itself.

Every parameter above is read from the shipped discord-api node, so it cannot drift from the product.

Connect Discord in two minutes

  1. Download AGNT Community Core — free, local-first, no account needed to run.
  2. Connect by pasting an API key into AGNT’s vault — stored encrypted on your machine, never uploaded.
  3. Drop the Discord node into a workflow or hand it to an agent — the first run produces a receipt you can read line by line.

Discord + AGNT — common questions

Can an agent answer in a Discord channel?

Yes, grounded in your documentation with the source linked, and escalating when the docs do not cover it.

How does AGNT connect to Discord?

With a bot token held encrypted in the local vault.

Can it summarise activity?

Yes — scheduled digests of what mattered are a common use.

More communication integrations

Give AI a job. Get the proof.