Cloud Discord
An MCP server that gives AI agents full admin control over Discord servers with 59 tools for messaging, moderation, roles, channels, forums, reactions, files, and more, deployed on Cloudflare Workers.
README
Cloud Discord
A full-featured Discord MCP (Model Context Protocol) server that runs on Cloudflare Workers. Gives AI agents complete admin control over Discord servers — 59 tools covering messaging, moderation, forums, roles, files, voice notes, and more.
Deploy once, connect from any MCP-compatible client (Claude Code, Claude Desktop, Cursor, etc.).
Features
59 tools across 12 categories:
| Category | Tools | What You Can Do |
|---|---|---|
| Messaging | 8 | Send, edit, delete, bulk delete, read history, send embeds, read/send DMs |
| Moderation | 4 | Kick, ban, unban, timeout members |
| Roles | 7 | Create, edit, delete, assign, remove roles, list member roles |
| Channels | 6 | Create, edit, delete channels, set slowmode, set permissions, list all |
| Threads | 3 | Create, manage (archive/lock), delete threads |
| Forums | 9 | Create/edit/list posts, manage tags, set layout/sort/guidelines |
| Reactions | 3 | Add, remove, get reactions |
| Pins | 3 | Pin, unpin, list pinned messages |
| Files | 2 | Send files to channels or DMs (via URL or base64) |
| Voice | 1 | Text-to-speech voice notes via ElevenLabs (optional) |
| Server | 4 | Guild info, audit log, list servers, member list |
| Invites | 3 | Create, list, delete invites |
| Polls | 1 | Create native Discord polls |
Plus:
/vibeslash command — AI-powered channel vibe check (requires Anthropic API key)- Direct file upload endpoint — send files from your machine without base64 encoding
- Secret-path authentication — your MCP endpoint is only accessible with your secret URL
- Rate limit handling with automatic retry
Prerequisites
- A Cloudflare account (free tier works)
- Node.js 18+
- A Discord bot with appropriate permissions
Setup
1. Create a Discord Bot
- Go to the Discord Developer Portal
- Click New Application, give it a name
- Go to the Bot tab:
- Click Reset Token and save the token — you'll need it later
- Enable Message Content Intent under Privileged Gateway Intents
- Go to the General Information tab:
- Copy the Application ID (you'll need this for the
/vibecommand) - Copy the Public Key (you'll need this for
wrangler.toml)
- Copy the Application ID (you'll need this for the
- Go to OAuth2 > URL Generator:
- Select scopes:
bot,applications.commands - Select bot permissions:
Administrator(or select individual permissions you need) - Copy the generated URL and open it in your browser to invite the bot to your server
- Select scopes:
2. Clone and Install
git clone https://github.com/codependentai/cloud-discord.git
cd cloud-discord
npm install
3. Configure
Edit wrangler.toml:
[vars]
# Generate a random secret: openssl rand -base64 24
MCP_SECRET_PATH = "your-random-secret-here"
# From Discord Developer Portal > General Information > Public Key
DISCORD_PUBLIC_KEY = "your-public-key-here"
4. Add Secrets
These are stored securely in Cloudflare — they never appear in your code:
# Required — your Discord bot token
npx wrangler secret put DISCORD_BOT_TOKEN
# Paste your bot token when prompted
# Optional — needed for the /vibe slash command
npx wrangler secret put ANTHROPIC_API_KEY
# Optional — needed for voice notes (discord_send_voice_note)
npx wrangler secret put ELEVENLABS_API_KEY
5. Deploy
npx wrangler deploy
Your MCP server is now live at:
https://cloud-discord.<your-subdomain>.workers.dev/mcp/<your-secret-path>
6. Connect to Your MCP Client
Add the server to your MCP client's configuration. For example, in Claude Code's .mcp.json:
{
"mcpServers": {
"discord": {
"type": "url",
"url": "https://cloud-discord.<your-subdomain>.workers.dev/mcp/<your-secret-path>"
}
}
}
For Claude Desktop, add it to claude_desktop_config.json under mcpServers with the same format.
Optional: Register the /vibe Slash Command
The /vibe command lets anyone in your Discord server run an AI-powered vibe check on the current channel. It reads the last 20 messages and summarizes what's happening.
Requires ANTHROPIC_API_KEY to be set.
DISCORD_APP_ID=your_app_id DISCORD_BOT_TOKEN=your_token npx tsx src/register-commands.ts
Then in Discord Developer Portal, set the Interactions Endpoint URL to:
https://cloud-discord.<your-subdomain>.workers.dev/interactions
Optional: Voice Notes
The discord_send_voice_note tool generates speech using ElevenLabs and sends it as an audio file to Discord.
- Sign up at ElevenLabs and get an API key
- Add the secret:
npx wrangler secret put ELEVENLABS_API_KEY - Find your voice ID in the Voice Lab
- Use the tool with
voice_idandtextparameters
If ELEVENLABS_API_KEY is not set, the tool will return an error when called but won't affect any other tools.
Direct File Upload
For sending local files (images, audio, documents) without base64 encoding, use the direct upload endpoint:
# Send to a channel
curl -F "channel_id=CHANNEL_ID" \
-F "file=@/path/to/file.mp3" \
-F "message=Optional message" \
https://cloud-discord.<your-subdomain>.workers.dev/mcp/<your-secret>/upload
# Send as DM
curl -F "user_id=USER_ID" \
-F "file=@/path/to/image.png" \
https://cloud-discord.<your-subdomain>.workers.dev/mcp/<your-secret>/upload
This is useful when the MCP tool's base64 parameter would be too large (e.g., audio files).
Tool Reference
Messaging
| Tool | Description |
|---|---|
discord_read_messages |
Read channel message history (1-100 messages) |
discord_read_dm_messages |
Read DM history with a user |
discord_send_message |
Send a message, optionally as a reply |
discord_send_dm |
Send a direct message to a user |
discord_edit_message |
Edit a bot message |
discord_delete_message |
Delete a message |
discord_bulk_delete_messages |
Delete 2-100 messages at once (must be <14 days old) |
discord_send_embed |
Send a rich embed with title, fields, images, colors |
Moderation
| Tool | Description |
|---|---|
discord_kick_member |
Kick a member from the server |
discord_ban_member |
Ban a member, optionally delete their recent messages |
discord_unban_member |
Unban a user |
discord_timeout_member |
Timeout (mute) a member for up to 28 days |
Roles
| Tool | Description |
|---|---|
discord_list_roles |
List all roles in a server |
discord_create_role |
Create a role with name, color, hoist, mentionable |
discord_edit_role |
Edit role name or color |
discord_delete_role |
Delete a role |
discord_assign_role |
Give a role to a member |
discord_remove_role |
Remove a role from a member |
discord_get_member_roles |
Get all roles for a member |
Channels
| Tool | Description |
|---|---|
discord_list_channels |
List all channels organized by category |
discord_list_servers |
List all servers the bot is in |
discord_create_channel |
Create text, voice, category, or forum channels |
discord_edit_channel |
Edit name, topic, NSFW, position, category |
discord_delete_channel |
Delete a channel |
discord_set_slowmode |
Set slowmode (0-21600 seconds) |
discord_set_channel_permissions |
Set permission overwrites for roles/users |
Threads
| Tool | Description |
|---|---|
discord_create_thread |
Create a thread, optionally from a message |
discord_manage_thread |
Archive, unarchive, lock, unlock threads |
discord_delete_thread |
Delete a thread |
Forums
| Tool | Description |
|---|---|
discord_create_forum_post |
Create a forum post with optional tags |
discord_edit_forum_post |
Edit title, archive, lock, pin, change tags |
discord_list_forum_posts |
List active posts in a forum |
discord_list_archived_forum_posts |
List archived/closed posts |
discord_get_forum_tags |
Get available tags |
discord_create_forum_tag |
Add a tag (max 20 per forum) |
discord_edit_forum_tag |
Edit a tag's name, emoji, moderated status |
discord_delete_forum_tag |
Delete a tag |
discord_set_forum_default_reaction |
Set default reaction emoji for new posts |
discord_set_forum_settings |
Configure layout, sort order, guidelines, require tags |
Reactions & Pins
| Tool | Description |
|---|---|
discord_add_reaction |
Add an emoji reaction |
discord_remove_reaction |
Remove a reaction (own or others) |
discord_get_message_reactions |
Get all reactions on a message |
discord_pin_message |
Pin a message |
discord_unpin_message |
Unpin a message |
discord_get_pinned_messages |
List all pinned messages |
Files & Voice
| Tool | Description |
|---|---|
discord_send_file |
Send a file via URL or base64 |
discord_send_dm_file |
Send a file as DM via URL or base64 |
discord_send_voice_note |
Generate TTS audio and send (requires ElevenLabs) |
Server & Members
| Tool | Description |
|---|---|
discord_get_guild_info |
Server details: name, members, boosts, verification |
discord_get_audit_log |
View audit log, filter by action type or user |
discord_get_guild_members |
List server members |
discord_get_user_info |
Get user details |
discord_change_nickname |
Change the bot's nickname |
Invites & Polls
| Tool | Description |
|---|---|
discord_create_invite |
Create a channel invite with expiry and use limits |
discord_list_invites |
List all server invites |
discord_delete_invite |
Revoke an invite |
discord_create_poll |
Create a native Discord poll (2-10 options) |
Images
| Tool | Description |
|---|---|
discord_fetch_image |
Fetch a message attachment as base64 |
discord_fetch_dm_image |
Fetch a DM attachment as base64 |
Architecture
This is a single Cloudflare Worker (~330 KB) that:
- Receives MCP JSON-RPC requests at
/mcp/<secret-path> - Translates tool calls into Discord REST API requests
- Returns formatted results to the MCP client
No database, no state, no containers. Auth is handled by the secret path in the URL — anyone with the URL can use all tools, so treat it like an API key.
The /vibe slash command handles Discord interactions at /interactions using signature verification.
Development
# Run locally
npx wrangler dev
# Type check
npx tsc --noEmit
# Deploy
npx wrangler deploy
License
MIT — see LICENSE.
Built by Codependent AI.
Support
Built by Codependent AI.
<a href="https://ko-fi.com/codependentai"><img src="https://img.shields.io/badge/Ko--fi-Support%20Us-ff5e5b?logo=ko-fi&logoColor=white" alt="Ko-fi" /></a>
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.