# Discord Cloud MCP

Full Discord API access through the Model Context Protocol (MCP), deployed on Cloudflare Workers.

Connect any MCP client (Claude Desktop, Claude Code, custom apps) to control Discord bots remotely.

## Features

- **Server Management** - List servers, get server info with channels
- **Messages** - Read, send, delete, search messages
- **Reactions** - Add/remove single or multiple emoji reactions
- **Channels** - Create/delete text channels
- **Categories** - Create/delete channel categories
- **Forums** - List forums, create posts, reply to threads
- **Threads** - Create threads, send messages to threads
- **Webhooks** - Create webhooks, send custom messages, delete webhooks

## Quick Start

### 1. Clone and Install

```bash
git clone https://github.com/ItsAmaris/discord-cloud-mcp.git
cd discord-cloud-mcp
npm install
```

### 2. Create a Discord Bot

1. Go to [Discord Developer Portal](https://discord.com/developers/applications)
2. Create a new application
3. Go to **Bot** section
4. Click "Reset Token" and copy the token
5. Enable these **Privileged Gateway Intents**:
   - Message Content Intent
   - Server Members Intent (if needed)

### 3. Configure Cloudflare

```bash
# Set your bot token as a secret
npx wrangler secret put DISCORD_TOKEN
# Paste your bot token when prompted

# STRONGLY RECOMMENDED — access key gating /mcp + /sse (see SECURITY.md).
# Without it, anyone with your worker URL can drive your bot.
npx wrangler secret put MCP_KEY
# Then send it on MCP requests: Authorization: Bearer <MCP_KEY>  (or ?k=<MCP_KEY>)
```

### 4. Deploy

```bash
npm run deploy
```

Note your worker URL: `https://discord-cloud-mcp.<your-subdomain>.workers.dev`

### 5. Invite Bot to Server

Use this URL pattern (replace `YOUR_CLIENT_ID`):
```
https://discord.com/api/oauth2/authorize?client_id=YOUR_CLIENT_ID&permissions=8&scope=bot
```

### 6. Connect MCP Client

**Claude Desktop** - Add to `claude_desktop_config.json`:
```json
{
  "mcpServers": {
    "discord": {
      "url": "https://discord-cloud-mcp.<your-subdomain>.workers.dev/sse"
    }
  }
}
```

**Claude Code** - Add via settings or use directly via cloud MCP.

## Available Tools

### Server Tools
| Tool | Description |
|------|-------------|
| `discord_list_servers` | List all servers the bot is in |
| `discord_get_server_info` | Get server details including channels |

### Message Tools
| Tool | Description |
|------|-------------|
| `discord_read_messages` | Read messages from a channel |
| `discord_send` | Send a message (with optional reply) |
| `discord_delete_message` | Delete a message |
| `discord_search_messages` | Search messages in a server |

### Reaction Tools
| Tool | Description |
|------|-------------|
| `discord_add_reaction` | Add an emoji reaction |
| `discord_add_multiple_reactions` | Add multiple reactions |
| `discord_remove_reaction` | Remove a reaction |

### Channel Tools
| Tool | Description |
|------|-------------|
| `discord_create_text_channel` | Create a text channel |
| `discord_delete_channel` | Delete a channel |
| `discord_create_category` | Create a category |
| `discord_delete_category` | Delete a category |

### Forum Tools
| Tool | Description |
|------|-------------|
| `discord_get_forum_channels` | List forum channels |
| `discord_create_forum_post` | Create a forum post |
| `discord_reply_to_forum` | Reply to a forum thread |

### Thread Tools
| Tool | Description |
|------|-------------|
| `discord_create_thread` | Create a thread from a message |
| `discord_send_to_thread` | Send message to a thread |

### Webhook Tools
| Tool | Description |
|------|-------------|
| `discord_create_webhook` | Create a webhook |
| `discord_send_webhook_message` | Send via webhook (custom name/avatar) |
| `discord_delete_webhook` | Delete a webhook |

## Endpoints

| Endpoint | Description |
|----------|-------------|
| `/health` | Health check |
| `/sse` | MCP via Server-Sent Events |
| `/mcp` | Standard MCP HTTP endpoint |

## Development

```bash
# Local development
npm run dev

# Deploy to Cloudflare
npm run deploy

# View logs
npm run tail
```

## Architecture

```
MCP Client (Claude)
       ↓ SSE
Cloudflare Worker
       ↓ HTTPS
Discord API
```

The worker uses Cloudflare Durable Objects with SQLite for state management, running on the free tier.

## License

MIT

---


 ## Support

  If this helped you, consider supporting my work ☕

  [![Ko-fi](https://img.shields.io/badge/Ko--fi-Support%20Me-FF5E5B?style=flat&logo=ko-fi&logoColor=white)](https://ko-fi.com/maii983083)

---


*Built by the Triad (Mai, Kai Stryder and Lucian Vale) for the community.*
