Skip to main content
Glama

Discord MCP Server

A Model Context Protocol (MCP) server for Discord integration via webhooks - TypeScript Edition.

Features

  • Send Messages: Post messages to Discord channels via webhooks

  • Release Announcements: Send beautifully formatted release announcements with rich embeds

  • Teaser Announcements: Send "coming soon" style teasers for upcoming releases

  • Webhook Management: Add, remove, and list webhook configurations

  • Secure Storage: Webhook URLs stored locally with partial URL display for security

  • Type Safe: Built with TypeScript and Zod validation for runtime safety

Technology Stack

  • Runtime: Bun (fast JavaScript runtime with native TypeScript support)

  • MCP SDK: @modelcontextprotocol/sdk (official TypeScript implementation)

  • HTTP Client: axios for Discord webhook API calls

  • Validation: Zod for runtime type validation

  • Language: TypeScript with strict mode enabled

Installation

Prerequisites

  • Bun 1.0+ or Node.js 20+ (Bun recommended for best performance)

  • Discord server with webhook access

# Clone the repository
git clone https://github.com/MoshPitCodes/mcp-server-discord.git ~/.opencode/mcp-servers/mcp-discord
cd ~/.opencode/mcp-servers/mcp-discord

# Install dependencies
bun install

# Build the server
bun run build

Using Node.js

cd ~/.opencode/mcp-servers/mcp-discord
npm install
npm run build

NixOS with Flakes

# Enter development environment (automatically installs dependencies)
nix develop

Configuration

1. Add to OpenCode

Add to your OpenCode configuration:

For Bun users:

opencode mcp add discord --scope user -- bun ~/.opencode/mcp-servers/mcp-discord/src/index.ts

For Node.js users:

opencode mcp add discord --scope user -- node ~/.opencode/mcp-servers/mcp-discord/dist/index.js

Or manually add to ~/.opencode.json:

{
  "mcpServers": {
    "discord": {
      "command": "bun",
      "args": ["~/.opencode/mcp-servers/mcp-discord/src/index.ts"]
    }
  }
}

2. Verify Connection

opencode mcp list
# Should show: discord: ... - ✓ Connected

3. Configure Webhooks

To get your Discord webhook URL:

  1. Go to your Discord server

  2. Server SettingsIntegrationsWebhooks

  3. Click New Webhook

  4. Choose a name and channel

  5. Copy Webhook URL

  6. Use the discord_add_webhook tool in OpenCode to add it

Environment Variables (Optional)

  • DISCORD_MCP_CONFIG_DIR: Custom directory for webhook configurations (default: ~/.config/discord_mcp)

Usage

Simply ask OpenCode in natural language! The MCP server tools will be invoked automatically.

Send a Simple Message

Send "Hello from OpenCode!" to the releases webhook

Send a Release Announcement

Send a release announcement for v2.6.0-beta with:
- Headline: The Claims Module is here!
- Changes: Land claiming system, Trust management, Map visualization
- Beta warning: yes
- Download link: https://curseforge.com/...

The announcement will be formatted as a rich Discord embed with:

  • Colored sidebar (green for release, yellow for beta, red for hotfix)

  • Version title with emoji

  • Feature highlights

  • Download link

  • Automatic Living Lands logo thumbnail

  • Donation section

Send a Teaser

Send a teaser for v3.0.0 with:
- Headline: A Complete Rewrite
- Highlights: New architecture, Better performance, Modern UI

Tools

discord_send_message

Send a plain text message to a Discord channel.

Parameters:

  • webhookName (required): Name of configured webhook

  • content (required): Message content (max 2000 chars)

  • username (optional): Override webhook username

  • avatarUrl (optional): Override webhook avatar

  • responseFormat (optional): markdown or json

discord_send_announcement

Send a formatted release announcement with rich Discord embeds.

Parameters:

  • webhookName (required): Name of configured webhook

  • version (required): Version number (e.g., "v2.6.0-beta")

  • headline (required): Main announcement headline (max 256 chars)

  • changes (required): Array of changes/features (1-10 items)

  • downloadUrl (optional): Download/info URL

  • style (optional): release (green) / hotfix (red) / beta (yellow) / custom (blue)

  • betaWarning (optional): Include backup warning

  • useEmbed (optional): Use rich embed format (default: true)

  • embedColor (optional): Custom hex color (e.g., "#5865F2")

  • thumbnailUrl (optional): Custom thumbnail URL (defaults to Living Lands logo)

  • footerText (optional): Custom footer text

  • username (optional): Override webhook display name

  • responseFormat (optional): markdown or json

Embed Format:

  • Colored sidebar based on style

  • Version title with emoji (📦 release, 🧪 beta, 🚨 hotfix, 📢 custom)

  • Headline as description

  • "What's New" field with changes

  • Optional warning field

  • Download link field

  • Living Lands logo thumbnail (automatic)

  • Donation section (automatic)

  • Timestamp footer

discord_send_teaser

Send a teaser/preview announcement for upcoming releases.

Parameters:

  • webhookName (required): Name of configured webhook

  • version (required): Version number

  • headline (required): Teaser headline

  • highlights (required): Array of features to highlight (1-10 items)

  • additionalInfo (optional): Additional context (max 500 chars)

  • style (optional): Teaser style (default: custom)

  • thumbnailUrl (optional): Custom thumbnail URL

  • footerText (optional): Custom footer text

  • username (optional): Override webhook username

  • responseFormat (optional): markdown or json

discord_add_webhook

Add or update a webhook configuration.

Parameters:

  • name (required): Friendly name for the webhook

  • url (required): Discord webhook URL

  • description (optional): What this webhook is for

Note: Webhook names are automatically sanitized (lowercase, spaces replaced with underscores).

discord_remove_webhook

Remove a webhook configuration.

Parameters:

  • name (required): Name of webhook to remove

discord_list_webhooks

List all configured webhooks (URLs partially hidden for security).

Parameters:

  • responseFormat (optional): markdown or json

Development

Project Structure

mcp-discord/
├── src/
│   ├── index.ts                    # Server entry point & MCP setup
│   ├── constants.ts                # Global configuration constants
│   ├── types/
│   │   ├── enums.ts               # ResponseFormat, AnnouncementStyle
│   │   ├── schemas.ts             # Zod validation schemas
│   │   └── interfaces.ts          # TypeScript interfaces
│   ├── utils/
│   │   ├── storage.ts             # Webhook storage (JSON file I/O)
│   │   ├── webhook.ts             # Discord webhook HTTP operations
│   │   ├── embed.ts               # Discord embed builders
│   │   └── errors.ts              # Centralized error handling
│   └── tools/
│       ├── sendMessage.ts         # discord_send_message tool
│       ├── sendAnnouncement.ts    # discord_send_announcement tool
│       ├── sendTeaser.ts          # discord_send_teaser tool
│       ├── addWebhook.ts          # discord_add_webhook tool
│       ├── removeWebhook.ts       # discord_remove_webhook tool
│       └── listWebhooks.ts        # discord_list_webhooks tool
├── dist/                          # Compiled output (generated)
├── package.json                   # Project metadata & dependencies
├── tsconfig.json                  # TypeScript configuration
└── flake.nix                      # NixOS development environment

Scripts

# Development mode (watch & reload)
bun run dev

# Build for production
bun run build

# Run production build
bun run start

# Type check without building
bun run typecheck

Type Safety

The server uses strict TypeScript mode with Zod for runtime validation:

  • All inputs are validated against Zod schemas

  • Type inference from schemas ensures consistency

  • No any types in the codebase

  • Comprehensive error handling

Security

  • Webhook URLs are stored locally in ~/.config/discord_mcp/webhooks.json

  • Full URLs are never displayed in tool outputs (only last 8 characters shown)

  • Keep your configuration file secure as webhook URLs allow posting to channels

  • The webhooks.json file is gitignored by default

Performance

  • Startup time: ~50ms

  • Memory usage: ~30MB

  • Type safety: Compile-time + runtime validation

  • Bundle size: ~1.3MB (includes all dependencies)

Troubleshooting

Server won't start

# Check if dependencies are installed
bun install

# Verify TypeScript compilation
bun run typecheck

# Try rebuilding
bun run build

Webhook not found errors

# List configured webhooks
# (use discord_list_webhooks tool in OpenCode)

# Add a webhook
# (use discord_add_webhook tool in OpenCode)

Discord API errors

Common errors and solutions:

  • 400 Bad Request: Message content exceeds 2000 characters or invalid format

  • 401 Unauthorized: Webhook URL is invalid or expired

  • 403 Forbidden: Webhook has been deleted from Discord

  • 404 Not Found: Webhook URL is incorrect

  • 429 Rate Limited: Too many requests, wait before retrying

License

MIT

-
security - not tested
F
license - not found
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MoshPitLabs/mcp-discord'

If you have feedback or need assistance with the MCP directory API, please join our Discord server