With DISCORD_GUILD_ID configured, the guildId parameter becomes optional across the whole surface, which turns most requests into one sentence. The coverage is the other reason to pick it: forums, scheduled events and per-channel permission overwrites are all reachable, not just send-a-message.
A Discord bot exposed as an MCP server, built on JDA. It covers most of what a server admin does through the Discord UI.
- Messages — send_message, edit_message, delete_message, read_messages with cursors and a count from 1 to 100, add_reaction and remove_reaction
- Direct messages — send_private_message, edit_private_message, delete_private_message, read_private_messages, and get_user_id_by_name for pings
- Channels and categories — create_text_channel, edit_text_channel, delete_channel, move_channel, find_channel, list_channels, get_channel_info, plus create_category, edit_category, delete_category, find_category and list_channels_in_category
- Roles and moderation — list_roles, create_role, edit_role, delete_role, assign_role, remove_role, kick_member, ban_member, unban_member, get_bans, timeout_member, remove_timeout and set_nickname
- Voice and stage — create_voice_channel, create_stage_channel, edit_voice_channel, move_member, disconnect_member and modify_voice_state
- Scheduled events — create_guild_scheduled_event, edit_guild_scheduled_event, delete_guild_scheduled_event, list_guild_scheduled_events and get_guild_scheduled_event_users
- Permission overwrites — list_channel_permission_overwrites, upsert_role_channel_permissions, upsert_member_channel_permissions and delete_channel_permission_overwrite
- Invites, webhooks, forums and emojis — including create_forum_post, list_forum_posts, modify_forum_post and create_emoji
- get_server_info for the server itself
A Discord bot token in DISCORD_TOKEN. Run the published Docker image with SPRING_PROFILES_ACTIVE set to http; the endpoint is http://localhost:8085/mcp, with a health check at /actuator/health. Setting DISCORD_GUILD_ID is optional but makes the guildId parameter optional on every tool — worth doing if you only run one server. A stdio mode exists for legacy clients but starts a container per session.
One command plus a key — docker run -d -i --name discord-mcp --restart unless-stopped -p 8085:8085 -e SPRING_PROFILES_ACTIVE -e DISCORD_TOKEN -e DISCORD_GUILD_ID saseq/discord-mcp:latest, then supply credentials
