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 Settings โ†’ Integrations โ†’ Webhooks

  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

F
license - not found
Not graded
quality - not tested
Not graded
maintenance - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

  • Let your AI agent notify you by email, Slack, Discord, or webhook. One tool: send_notification.

  • Build and deploy websites, Telegram and Discord bots from chat via the DreamAgent platform.

  • Connect any AI agent to 11+ social platforms: schedule, publish & track posts via hosted MCP.

View all MCP Connectors

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