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

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