{
  "workflow": {
    "id": 3946,
    "name": "Control Discord bot with natural language via MCP server",
    "views": 734,
    "recentViews": 0,
    "totalViews": 734,
    "createdAt": "2025-05-08T19:55:25.245Z",
    "description": "What it is-\nI wanted to create a simple, easy-to-use, MCP server for your Discord bot(s).\n\nHow to set up-\nLiterally all you do is select your bot auth (or crease a new Discord Bot auth if you havn't entered your key in n8n before) and that's IT!\n\nHow to use it-\nYou can now ask your bot to do things via any MCP client, including from within N8N workflows!\n\nNote:\nIf you need an example, you can check out my simple quickstart Discord MCP Server that uses 4o to send messages to channels on your server and users who are members of the server the bot is in.\n\nNeed help? Want access to more workflows and even live Q&A sessions with a top verified n8n creator.. All 100% free?\n\n[Join the community](https://www.skool.com/n8n-nodes-automation-lab-1570/about)",
    "workflow": {
      "id": "ly8aZhPk5ZI8uB0Y",
      "meta": {
        "instanceId": "8931e7db592c2960ce253801ea290c1dc66e447734ce3d968310365665cefc80",
        "templateCredsSetupCompleted": true
      },
      "name": "Discord MCP Server",
      "tags": [],
      "nodes": [
        {
          "id": "6e87d612-3006-4683-b978-87718f89257d",
          "name": "Send Discord Message to Channel",
          "type": "n8n-nodes-base.discordTool",
          "position": [
            360,
            280
          ],
          "webhookId": "90b1dca9-c742-4c7e-aef3-ba5a47c5f86d",
          "parameters": {
            "content": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Message', ``, 'string') }}",
            "guildId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Server', ``, 'string') }}"
            },
            "options": {},
            "resource": "message",
            "channelId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Channel', ``, 'string') }}"
            }
          },
          "credentials": {
            "discordBotApi": {
              "id": "credential-id",
              "name": "discordBotApi Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "32a17a73-8953-4474-a49f-9d1cc0cc3eb2",
          "name": "Add Role To Member",
          "type": "n8n-nodes-base.discordTool",
          "position": [
            -200,
            560
          ],
          "webhookId": "e41a85ec-3f16-44fc-ad87-4617c0d0f1c0",
          "parameters": {
            "role": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Role', ``, 'string') }}",
            "userId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('User', ``, 'string') }}"
            },
            "guildId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Server', ``, 'string') }}"
            },
            "resource": "member",
            "operation": "roleAdd"
          },
          "credentials": {
            "discordBotApi": {
              "id": "credential-id",
              "name": "discordBotApi Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "688ea823-b8ea-4bbf-96cb-a64925fc29a9",
          "name": "Remove Role from member",
          "type": "n8n-nodes-base.discordTool",
          "position": [
            -20,
            560
          ],
          "webhookId": "e41a85ec-3f16-44fc-ad87-4617c0d0f1c0",
          "parameters": {
            "role": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Role', ``, 'string') }}",
            "userId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('User', ``, 'string') }}"
            },
            "guildId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Server', ``, 'string') }}"
            },
            "resource": "member",
            "operation": "roleRemove"
          },
          "credentials": {
            "discordBotApi": {
              "id": "credential-id",
              "name": "discordBotApi Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "1d8a14f1-8e63-4112-8076-15b4408c844f",
          "name": "Discord MCP Server Trigger",
          "type": "@n8n/n8n-nodes-langchain.mcpTrigger",
          "position": [
            20,
            -280
          ],
          "webhookId": "404f083e-f3f4-4358-83ef-9804099ee253",
          "parameters": {
            "path": "404f083e-f3f4-4358-83ef-9804099ee253"
          },
          "typeVersion": 1
        },
        {
          "id": "67602807-3126-4564-8fed-912551eb824b",
          "name": "Get channels of server by server ID",
          "type": "n8n-nodes-base.discordTool",
          "position": [
            420,
            20
          ],
          "webhookId": "73c49e13-24e9-4481-902d-a5f3e1f50032",
          "parameters": {
            "guildId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Server', ``, 'string') }}"
            },
            "options": {},
            "operation": "getAll",
            "returnAll": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Return_All', ``, 'boolean') }}"
          },
          "credentials": {
            "discordBotApi": {
              "id": "credential-id",
              "name": "discordBotApi Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "5f1c3039-7042-48b8-997c-12bcaa6a1256",
          "name": "Get members of server by server ID",
          "type": "n8n-nodes-base.discordTool",
          "position": [
            -80,
            20
          ],
          "webhookId": "ebd6d7dd-bcfa-4546-b48d-5e7862129caa",
          "parameters": {
            "after": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('After', ``, 'string') }}",
            "guildId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Server', ``, 'string') }}"
            },
            "options": {},
            "resource": "member",
            "returnAll": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Return_All', ``, 'boolean') }}"
          },
          "credentials": {
            "discordBotApi": {
              "id": "credential-id",
              "name": "discordBotApi Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "ece7a065-36bb-4667-aa61-610e54f0b22d",
          "name": "Send DM and Wait for reply",
          "type": "n8n-nodes-base.discordTool",
          "position": [
            -280,
            280
          ],
          "webhookId": "90b1dca9-c742-4c7e-aef3-ba5a47c5f86d",
          "parameters": {
            "sendTo": "user",
            "userId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('User', ``, 'string') }}"
            },
            "guildId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Server', ``, 'string') }}"
            },
            "message": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Message', ``, 'string') }}",
            "options": {},
            "resource": "message",
            "operation": "sendAndWait",
            "responseType": "freeText"
          },
          "credentials": {
            "discordBotApi": {
              "id": "credential-id",
              "name": "discordBotApi Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "c37d0478-5b00-4d21-b0fd-7e2fa34708ec",
          "name": "Send to Channel and Wait for Reply",
          "type": "n8n-nodes-base.discordTool",
          "position": [
            580,
            280
          ],
          "webhookId": "90b1dca9-c742-4c7e-aef3-ba5a47c5f86d",
          "parameters": {
            "guildId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Server', ``, 'string') }}"
            },
            "message": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Message', ``, 'string') }}",
            "options": {},
            "resource": "message",
            "channelId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Channel', ``, 'string') }}"
            },
            "operation": "sendAndWait",
            "responseType": "freeText"
          },
          "credentials": {
            "discordBotApi": {
              "id": "credential-id",
              "name": "discordBotApi Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "fb8091b5-114b-422e-be5a-6413d9aec599",
          "name": "Send DM to User",
          "type": "n8n-nodes-base.discordTool",
          "position": [
            -60,
            280
          ],
          "webhookId": "90b1dca9-c742-4c7e-aef3-ba5a47c5f86d",
          "parameters": {
            "sendTo": "user",
            "userId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('User', ``, 'string') }}"
            },
            "content": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Message', ``, 'string') }}",
            "guildId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Server', ``, 'string') }}"
            },
            "options": {},
            "resource": "message"
          },
          "credentials": {
            "discordBotApi": {
              "id": "credential-id",
              "name": "discordBotApi Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "6f61b18a-8d96-4acb-994a-45ef32c10f16",
          "name": "Get Discord Server IDs",
          "type": "n8n-nodes-base.httpRequestTool",
          "position": [
            180,
            -60
          ],
          "parameters": {
            "url": "https://discord.com/api/v10/users/@me/guilds",
            "options": {},
            "authentication": "predefinedCredentialType",
            "toolDescription": "Retrieves the ID of each discord server the bot is in.",
            "nodeCredentialType": "discordBotApi"
          },
          "credentials": {
            "discordBotApi": {
              "id": "credential-id",
              "name": "discordBotApi Credential"
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "3fe9b9ab-d9c8-4414-b3a4-01dace75da77",
          "name": "Sticky Note",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            100,
            -60
          ],
          "parameters": {
            "height": 600,
            "content": "\n\n\n\n\n\n\n\n\n\n\n\nThis gets all of the servers that your discord bot is currently in. If you have a bot in more than one server, you will need to let it know or at least hint at which server it is, or it may get stuck. If you specify a channel through your natural language request, then the model may keep trying to get servers' channels via the get channel node or it may give up before getting to the right one).\n\nNote: This is a custom API call using the same Discord bot auth, not a built-in \"Discord tool\" - I encourage you to go well beyond the 15 included tools that n8n provides for you. It is *easy* to do, and there are, literally, no limits to what you can do with n8n!"
          },
          "typeVersion": 1
        },
        {
          "id": "c886422d-f034-49dc-ad77-bc6e1cd495a8",
          "name": "Sticky Note1",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            360,
            280
          ],
          "parameters": {
            "width": 300,
            "height": 240,
            "content": "\n\n\n\n\n\n\n\n\n\n\n\nThese nodes either send a basic message from your bot to a channel or sends a message and waits for a response from a human (HITL)."
          },
          "typeVersion": 1
        },
        {
          "id": "36d5bcc3-f9f2-4161-83d8-d76083ea9e8c",
          "name": "Sticky Note2",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -280,
            280
          ],
          "parameters": {
            "width": 300,
            "height": 240,
            "content": "\n\n\n\n\n\n\n\n\n\n\n\nThese nodes either send a basic message from your bot to a user via DM or sends a DM and waits for a response from the human (HITL)."
          },
          "typeVersion": 1
        },
        {
          "id": "65b6d13e-6f97-4b4c-9a0d-85b07b666c81",
          "name": "Sticky Note3",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -200,
            560
          ],
          "parameters": {
            "width": 520,
            "height": 360,
            "content": "\n\n\n\n\n\n\n\n\n\n\n\nProgrammatic role addition and removal are just two examples of the many, many tools/API calls that you can make to Discord.\n\nYou could monitor for spam, mod abuse, or anything else you wanted and respond automatically by removing perms until you can check it out.\n\nYou can create amazing workflows that include discord webhooks, your existing other workflows, or anything else you can imagine and have it running on your bot in minutes via a MCP client node in a new or existing workflow!"
          },
          "typeVersion": 1
        },
        {
          "id": "e39211f7-7471-4b0b-a253-79b1e3026354",
          "name": "Sticky Note4",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -280,
            -60
          ],
          "parameters": {
            "width": 280,
            "content": "Once we have the server ID of the server we want to interact with, we can grab all members of the server that the bot can see."
          },
          "typeVersion": 1
        },
        {
          "id": "84f36c6d-c990-48d0-9328-32a40c803956",
          "name": "Sticky Note5",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            420,
            -60
          ],
          "parameters": {
            "width": 280,
            "content": "Once we have the server ID of the server we want to interact with, we can grab all channels the bot can see."
          },
          "typeVersion": 1
        }
      ],
      "active": true,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "bedf1c45-22f0-422c-8d77-ab058c1cceab",
      "connections": {
        "Send DM to User": {
          "ai_tool": [
            [
              {
                "node": "Discord MCP Server Trigger",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Add Role To Member": {
          "ai_tool": [
            [
              {
                "node": "Discord MCP Server Trigger",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Get Discord Server IDs": {
          "ai_tool": [
            [
              {
                "node": "Discord MCP Server Trigger",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Remove Role from member": {
          "ai_tool": [
            [
              {
                "node": "Discord MCP Server Trigger",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Send DM and Wait for reply": {
          "ai_tool": [
            [
              {
                "node": "Discord MCP Server Trigger",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Send Discord Message to Channel": {
          "ai_tool": [
            [
              {
                "node": "Discord MCP Server Trigger",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Get members of server by server ID": {
          "ai_tool": [
            [
              {
                "node": "Discord MCP Server Trigger",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Send to Channel and Wait for Reply": {
          "ai_tool": [
            [
              {
                "node": "Discord MCP Server Trigger",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Get channels of server by server ID": {
          "ai_tool": [
            [
              {
                "node": "Discord MCP Server Trigger",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 29,
    "workflowInfo": {
      "nodeCount": 16,
      "nodeTypes": {
        "n8n-nodes-base.stickyNote": {
          "count": 6
        },
        "n8n-nodes-base.discordTool": {
          "count": 8
        },
        "n8n-nodes-base.httpRequestTool": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.mcpTrigger": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "David Ashby",
      "username": "cfomodz",
      "bio": "Unlimited Access to my paid workflows 👇 For the cost of one a month",
      "verified": true,
      "links": [
        "https://www.skool.com/n8n-automation-lab"
      ],
      "avatar": "https://gravatar.com/avatar/0118796cfdab829a3307d407dfeeb01a3952eb402584a45a211e4ef7d15edbbf?r=pg&d=retro&size=200"
    },
    "nodes": [
      {
        "id": 565,
        "icon": "fa:sticky-note",
        "name": "n8n-nodes-base.stickyNote",
        "codex": {
          "data": {
            "alias": [
              "Comments",
              "Notes",
              "Sticky"
            ],
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Sticky Note",
          "color": "#FFD233"
        },
        "iconData": {
          "icon": "sticky-note",
          "type": "icon"
        },
        "displayName": "Sticky Note",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 1293,
        "icon": "file:../mcp.svg",
        "name": "@n8n/n8n-nodes-langchain.mcpTrigger",
        "codex": {
          "data": {
            "alias": [
              "Model Context Protocol",
              "MCP Server"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-langchain.mcptrigger/"
                }
              ]
            },
            "categories": [
              "AI",
              "Core Nodes",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Root Nodes",
                "Model Context Protocol"
              ],
              "Core Nodes": [
                "Other Trigger Nodes"
              ]
            }
          }
        },
        "group": "[\"trigger\"]",
        "defaults": {
          "name": "MCP Server Trigger"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgwIiBoZWlnaHQ9IjE4MCIgdmlld0JveD0iMCAwIDE5NSAxOTUiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+Cgk8ZyBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+CgkJPHBhdGggZD0iTTI1IDk3Ljg1MjhMOTIuODgyMyAyOS45NzA2QzEwMi4yNTUgMjAuNTk4IDExNy40NTEgMjAuNTk4IDEyNi44MjMgMjkuOTcwNlYyOS45NzA2QzEzNi4xOTYgMzkuMzQzMSAxMzYuMTk2IDU0LjUzOTEgMTI2LjgyMyA2My45MTE3TDc1LjU1ODEgMTE1LjE3NyIvPgoJCTxwYXRoIGQ9Ik03Ni4yNjUzIDExNC40N0wxMjYuODIzIDYzLjkxMTdDMTM2LjE5NiA1NC41MzkxIDE1MS4zOTIgNTQuNTM5MSAxNjAuNzY1IDYzLjkxMTdMMTYxLjExOCA2NC4yNjUyQzE3MC40OTEgNzMuNjM3OCAxNzAuNDkxIDg4LjgzMzggMTYxLjExOCA5OC4yMDYzTDk5LjcyNDggMTU5LjZDOTYuNjAwNiAxNjIuNzI0IDk2LjYwMDYgMTY3Ljc4OSA5OS43MjQ4IDE3MC45MTNMMTEyLjMzMSAxODMuNTIiLz4KCQk8cGF0aCBkPSJNMTA5Ljg1MyA0Ni45NDExTDU5LjY0ODIgOTcuMTQ1N0M1MC4yNzU3IDEwNi41MTggNTAuMjc1NyAxMjEuNzE0IDU5LjY0ODIgMTMxLjA4N1YxMzEuMDg3QzY5LjAyMDggMTQwLjQ1OSA4NC4yMTY4IDE0MC40NTkgOTMuNTg5NCAxMzEuMDg3TDE0My43OTQgODAuODgyMiIvPgoJPC9nPgo8L3N2Zz4K"
        },
        "displayName": "MCP Server Trigger",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          },
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 47,
        "name": "AI Chatbot"
      }
    ],
    "image": []
  }
}