Running a Discord ⇄ Mumble Voice Bridge with Docker

Here’s how to self-host a “voice bridge” that connects Discord voice with an external Mumble server, using Docker. Even Discord members who aren’t in the game will be able to talk by voice with friends who are on Mumble.

This article is aimed at developers and server admins who can run a bot themselves. The code can be copied and pasted as-is.

⚠️ [Important — as of July 2026] This bridge currently cannot connect to Discord voice.
As of March 2, 2026, Discord has made DAVE (end-to-end encrypted audio) support mandatory for all non-Stage voice calls (official announcement). Clients that don’t support DAVE are rejected on connection with close 4017: E2EE/DAVE protocol required. mumble-discord-bridge cannot currently complete the DAVE handshake, so voice connections fail (context deadline exceeded). Until DAVE support on the bridge side matures, voice relay cannot be used. This article remains as an explanation of how it works and a record for a possible future revival.

What it does

Stieneee/mumble-discord-bridge (written in Go, OSS) relays audio bidirectionally between one Discord voice channel and one Mumble channel. The bot joins the Mumble side as “one user,” also joins the Discord voice channel, and mixes and plays the voices of both sides.

[Discord voice ch] ⇄ 🤖 Bridge Bot ⇄ [Mumble channel]
   Discord-only people          People using Mumble

⚠️ Positional Audio can’t cross the bridge

First, the most important limitation. Audio that passes through the bridge does not carry positional audio.

  • Participants on the Discord side don’t have in-game coordinates
  • Because the bridge mixes everyone’s voices as a single bot user, direction and distance are lost

Positional audio only works with the combination of Mumble + a game (such as 7 Days to Die). The right way to think about the bridge is not as something that “delivers positional audio,” but as something for “bringing people who can’t get into the game into the voice circle.” We recommend not connecting your combat channels, and only bridging channels used for communication.

What you need

  • An environment that can run Docker (PC / VPS)
  • Permission to create one Discord Bot

1. Create the bridge Bot

  1. Discord Developer PortalNew ApplicationBotReset Token (copy it)
  2. Privileged Gateway Intentsturn ON MESSAGE CONTENT INTENT (required to read the !mumble-discord command)
  3. OAuth2 → URL Generator → scope bot, permissions View Channel / Connect / Speak, and invite the bot
  4. Prepare one regular voice channel for the bridge (note: Stage channels won’t work — the bot can’t speak in them)

2. Place the code

Put two files in the same folder.

docker-compose.yml

services:
  mumble-discord-bridge:
    image: stieneee/mumble-discord-bridge:latest
    container_name: mumble-discord-bridge
    restart: unless-stopped
    env_file: .env

.env

# Your Discord Bot info
DISCORD_TOKEN=your Bot token here
DISCORD_GID=server (guild) ID
DISCORD_CID=voice channel ID for the bridge

# Mumble to connect to
MUMBLE_ADDRESS=your-mumble-host
MUMBLE_PORT=64738
MUMBLE_USERNAME=Bridge-yourname
MUMBLE_CHANNEL=name of the channel to bridge to
MUMBLE_INSECURE=true      # accept self-signed certificates

# Operating mode (manual = connect/disconnect via command)
MODE=manual
COMMAND=mumble-discord
COMMAND_MODE=both

Start it up:

docker compose up -d
docker compose logs -f      # OK if you see "Mumble connected"

3. How to use it

Since it’s MODE=manual, it normally stays idle. It only starts up on command when you want to connect.

  • Join the target voice channel → type !mumble-discord link in text
  • End with !mumble-discord unlink / check status with !mumble-discord status / reconnect with refresh

About modes and scaling

There are three types of MODE.

  • constant … always connected from startup
  • auto … automatically connects only when there are users on both sides
  • manual … explicit control via command (the setting in this article)

And an important design limitation: this bridge is one instance = one guild. You can’t handle multiple Discord servers with a single Bot (if you IDENTIFY the same token from multiple processes at once, Discord rejects it).

The reason text-to-speech bots like “Zundamon” run on tens of thousands of servers is that they only generate audio and stream it to Discord (one-way, no external server). The bridge has bidirectional traffic + an external Mumble + the “one user = one channel” constraint, so to handle many guilds with a single Bot you’d have to build your own multi-tenant implementation that opens as many Mumble connections as there are guilds. At a scale of a few dozen guilds, it’s realistic to just run one instance per guild.

Connecting to the 7DAYS.JP Mumble

At 7DAYS.JP, the Japanese fan community for 7 Days to Die, we use this mechanism to let you connect your Discord to our Mumble. A dedicated integration bot automatically issues your own personal Mumble channel and connection details.

It makes a nice, low-key entry point for casual interaction, letting even people who aren’t in the game join the voice circle.

コメントする

お名前(ニックネーム)だけで投稿できます。ログイン・メール登録は不要です。お気軽にどうぞ。

※ AIの回答は管理者の確認後に表示されます。内容は不正確な場合があります。