Discord MCP Server
Enables AI models to send plain text messages, formatted release announcements, and teaser previews to Discord channels using webhooks. It provides secure local webhook management and supports rich embeds with customizable styles for automated notifications.
README
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
- Changelog Posts: Send structured changelogs (Added/Changed/Fixed) as rich embeds or plain text
- 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
Using Bun (Recommended)
# 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
Each tool uses a dedicated webhook, allowing you to route different message types to different channels:
messages- Used bydiscord_send_messagereleases- Used bydiscord_send_announcementteasers- Used bydiscord_send_teaserchangelog- Used bydiscord_send_changelog
To get your Discord webhook URL:
- Go to your Discord server
- Server Settings → Integrations → Webhooks
- Click New Webhook
- Choose a name and channel (e.g., "releases" webhook → #releases channel)
- Copy Webhook URL
- Use the
discord_add_webhooktool in OpenCode to add it with the appropriate name
Example setup:
discord_add_webhook messages <webhook-url> "General messages"
discord_add_webhook releases <webhook-url> "Release announcements"
discord_add_webhook teasers <webhook-url> "Teaser announcements"
discord_add_webhook changelog <webhook-url> "Changelog posts"
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. Uses the messages webhook.
Parameters:
content(required): Message content (max 2000 chars)username(optional): Override webhook usernameavatarUrl(optional): Override webhook avatarresponseFormat(optional):markdownorjson
discord_send_announcement
Send a formatted release announcement with rich Discord embeds. Uses the releases webhook.
Parameters:
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 URLstyle(optional):release(green) /hotfix(red) /beta(yellow) /custom(blue)betaWarning(optional): Include backup warninguseEmbed(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 textusername(optional): Override webhook display nameresponseFormat(optional):markdownorjson
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. Uses the teasers webhook.
Parameters:
version(required): Version numberheadline(required): Teaser headlinehighlights(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 URLfooterText(optional): Custom footer textusername(optional): Override webhook usernameresponseFormat(optional):markdownorjson
discord_add_webhook
Add or update a webhook configuration.
Parameters:
name(required): Friendly name for the webhookurl(required): Discord webhook URLdescription(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):markdownorjson
discord_send_changelog
Send a structured changelog post with sections (e.g., Added/Changed/Fixed). Uses the changelog webhook.
Parameters:
title(required): Changelog title (max 256 chars)sections(required): Array of sections (1-25). Each:{ title: string, items: string[] }version(optional): Version string (e.g., "v1.2.3")summary(optional): Intro text (max 2000 chars)url(optional): Link to release notes/downloadstyle(optional):release/hotfix/beta/customuseEmbed(optional): Use embed format (default: true)embedColor(optional): Custom hex color (e.g., "#5865F2")thumbnailUrl(optional): Custom thumbnail URLfooterText(optional): Custom footer textusername(optional): Override webhook usernameresponseFormat(optional):markdownorjson
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
anytypes 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.jsonfile 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
Links
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。