Minecraft ↔ Discord bridge
FREE The MCDC bridge is on every plan.
The Minecraft ↔ Discord bridge (MCDC) joins one Discord channel to your Minecraft server so in-game chat and Discord chat become a single conversation. It uses a small free companion plugin on your Minecraft server, no game mods and nothing for your players to install.
Works with Paper or Spigot servers on a recent Minecraft version. The plugin targets modern 1.21.x, which needs Java 21.
What it does
- Two-way chat. In-game chat appears in your Discord channel as the player, their Minecraft name and their skin-face avatar, and messages sent in that Discord channel appear in-game.
- Relayed server events. Joins, leaves, deaths, advancements, and server start/stop can be posted to Discord. Each event type is a toggle, so you show only what you want.
- Discord reactions in-game. When someone reacts to a message in the linked Discord
channel, it shows up in Minecraft (for example
Alice reacted 👍 to Bob: "gg"). Toggle it in the/mcdcwizard. On by default. - Live AI translation, both ways (optional, off by default). See Translation below.
- Who’s online at a glance.
/onlinelists the players currently in-game, and the linked channel’s topic keeps a live count, for example🟢 7/40 online. Anyone can run it, in the bridged channel — run elsewhere it just points you at the right one. - XP for in-game time. Players who’ve linked their accounts earn XP for the time they spend in-game, into the same account-wide balance they earn in Discord. Free and automatic. See Earn XP for playtime.
- Discord roles → Minecraft ranks. An optional one-way mirror that keeps a linked player’s in-game rank matching the Discord role your staff already gave them. Off until you switch it on. See Roles and ranks in step.
Server health
FREE The bot shows your linked server’s live health
right in Discord — its TPS (ticks per second), tick time, RAM use and uptime
appear under the connection line in the /mcdc panel and as a Server health field in
/online, updated as your server reports in. A typical readout looks like:
🟢 TPS 19.8 · ⏱ 42ms · 🧠 2.1/4.0 GB · ⏳ up 3d 4h
Optional health alerts post a short notice to your log/staff channel when the server
goes offline or comes back, or when TPS drops into the red. They’re on by default
and you can toggle them from the /mcdc panel. Health reporting is free on every plan and
needs the companion plugin v0.4.0 or newer (it updates itself if auto-update is on).
Ask SAi in-game
PREMIUM On a bridged server, your players can ask
SAi questions without leaving Minecraft. A player types @sai (or !sai / !ai) followed
by a question in chat, and SAi’s answer prints straight back in-game — no need to switch to
Discord. For example, typing @sai what's the nether portal ratio? gets SAi’s reply right there
in chat.
It’s off by default, and you don’t just switch it on — you choose who may ask. The
control is a four-way access setting in the /mcdc panel (main page, or 🤖 @sai
Studio → Access):
| Access | Who can ask @sai in-game |
|---|---|
| Off — nobody | @sai never answers in game chat. The default. |
| Everyone in chat | Any player on your server. |
| Linked members only | Only players who’ve linked their Minecraft and Discord accounts. |
| Staff only | Only linked players whose Discord account holds a staff role. |
If it can’t work out whether someone qualifies, the answer is no — it fails closed.
Each player can ask up to 15 questions every 6 hours, and answers draw on the same AI allowance as the rest of SAi.
@sai Studio
PREMIUM @sai Studio is where you make the
in-game assistant yours — its name, how it talks, what it knows about your server, and
who it talks to. Open it from /mcdc → 🤖 @sai Studio (owner / Manage Server only).
The settings save on any plan; @sai only answers players on Premium.
- Give it a name. Up to 32 characters — the default is
SAi. Players address it by the same@sai/!sai/!aiprefixes either way; the name is what it answers as. Rename it and it becomes fully white-labelled: it will never name Server Assistant, even if a player asks it directly. - Set a greeting. An optional opening line for a first reply, up to 200 characters. Leave it blank for none.
- Pick a tone. Concise (terse & factual), Friendly (warm & plain — the default), or In-character (playful, on-theme).
- Teach it your server. The server knowledge pack is up to 2,000 characters of authoritative notes about your server — its rules, ranks, shops, commands, events, lore. @sai answers server-specific questions from your pack first, falls back to its general Minecraft knowledge (crafting, redstone, mobs, vanilla commands) for everything else, and when neither covers it, it says so and points the player at your staff. It never guesses.
- Choose the audience. The same four-way access setting as Ask SAi in-game above.
@sai can never change permissions, roles or ranks — and it will never claim it can. That safeguard is fixed in every tone, name and knowledge pack you can configure; nothing you write in the Studio can unlock it.
SAi in your world: the companion
PREMIUM Beyond answering in public chat, SAi can have an in-world presence: a companion a player can summon in-game and ask questions privately. The reply goes to that player only — it is not echoed into your linked Discord channel, so a quiet “how do I get to spawn?” stays between the player and the assistant.
- Off by default. Turn it on at
/mcdc→ 🤖 @sai Studio → 🧚 SAi Companion. - Auto-spawn for newcomers is a separate toggle, so a first-time joiner can be met by the companion without knowing to summon one.
- It’s the same assistant: your Studio name, tone, greeting and knowledge pack all carry over, and it obeys the same access setting and per-player rules — a Linked members only server doesn’t get a companion loophole.
- It shares the same 15 questions per 6 hours budget as asking in chat.
- Summoning happens in game, and the companion is served by the plugin, so keep the plugin up to date (it updates itself if auto-update is on).
Moderate from Discord
FREE When the chat scan flags a Minecraft
player, staff see Kick and Ban in-game buttons on the flag alert and can
action the player right on your Minecraft server — no console needed. It’s
off by default: turn it on with the Enforcement toggle in the /mcdc
panel. Each button is permission-gated — only staff who already have the
matching kick/ban permission can click it. Carrying the action out in-game needs
the companion plugin v0.5.0 or newer (it updates itself if auto-update is on).
Every MCDC moderation action — a Kick or Ban taken from an alert, and the chat-flag alerts themselves — is recorded in your server’s log channel and audit trail, exactly like native Server Assistant moderation, so there’s a full record of what happened and who acted.
Players can appeal. When someone is banned or kicked, the disconnect message they see includes a one-time link to a web appeal form. If they submit it, their appeal reaches your staff to review — no Discord account required. The link is single-use and expires.
In your weekly Pulse
FREE Linked servers get a Minecraft section in the weekly Pulse digest — a 7-day rollup of in-game chat, joins, deaths and advancements, right alongside the rest of your weekly recap. It’s free and automatic: it shows up on its own for any server with the bridge linked and some in-game activity that week, with nothing to switch on and no plugin change.
Link your account
Players can link their Discord and Minecraft accounts so they’re recognised as the same person on both sides. It’s opt-in — nothing links automatically — and free.
Linking is what unlocks the features that need to know you’re the same person on both sides: your in-game time earns XP (see Earn XP for playtime) and, if your server turns it on, your Discord roles keep your in-game rank in step (see Roles and ranks in step).
To link:
- In Discord, run
/linkto get a one-time code. - In Minecraft chat, type
!link <code>within 15 minutes. - The plugin confirms the link in-game — you’re connected.
Run /unlink at any time to disconnect. Only the connection between your
Discord account and your Minecraft UUID is stored, never your Minecraft
username.
Earn XP for playtime
FREE Once you’ve linked your account, the time you spend on the bridged Minecraft server earns XP — into the same account-wide balance you already build up by chatting and sitting in voice on Discord. There’s no separate Minecraft score and nothing to switch on.
- The rate matches voice. Each minute in-game is worth the same base XP as a minute in a voice channel.
- It counts connected time. XP accrues while you’re connected to the server. There’s no idle check in-game, so time spent AFK still earns, up to the hourly cap below.
- Double XP counts. A server-wide Double-XP event or your own personal Double-XP buff doubles your in-game earnings exactly as it doubles chat and voice XP — and, as everywhere else, the boost is capped at 2× even if both are running.
- There’s an hourly ceiling. A rolling hourly cap applies to Minecraft XP, the same way one applies to voice, so a very long session can’t run away with the leaderboard.
- Linked players only. Unlinked players earn nothing — the bot has no way to know whose balance to credit, and it never guesses. Linking is opt-in and reversible.
- No plan requirement. The server just needs Server Assistant set up and the bridge linked — playtime XP is free on every plan.
Your Minecraft XP shows up in /rank, on /leaderboard and in your
Crestbound balance like any other XP, because
it is the same XP. One thing to note: because you’re in-game rather than in a Discord
channel, level-ups earned in Minecraft aren’t announced in your level-up channel — the
XP still lands, you just won’t get a fanfare for it.
See the XP & leveling guide for the full picture.
Roles and ranks in step
FREE Rank sync keeps a linked player’s
in-game rank matching the Discord role your staff already gave them. Set it up in
/mcdc → 🏅 Rank sync: pick a Discord role, name the in-game rank (your LuckPerms
group, e.g. vip), and flip the master switch on. A role change made in Discord reaches
the game server within seconds.
It is a one-way mirror, and only that. Server Assistant copies Discord → Minecraft, never the other way, and only for the roles you listed. It never changes anyone’s Discord roles, and there is no command, chat message or
@sairequest that can get anyone a rank — not from a player, not from staff, not from anyone. Rank changes only ever start with an authorised person acting in Discord’s own controls. Asking the bot for a rank does not work and never will.
It is off by default and touches nothing until you both switch it on and map at least one role.
Roles it refuses to map. These are rejected when you add the mapping and re-checked on every sync (a role can be moved after you map it):
| Refused | Why |
|---|---|
| Any role at or above Server Assistant’s own top role | It’s above the bot in your hierarchy — that’s your Operations / Executive Operator tier, out of reach by position, not by name. |
| Any role carrying Administrator | Admin-level roles are never mirrored to a game rank. |
@everyone |
That’s every member in the server, not a rank. |
| Bot / integration-managed roles | Discord owns those; the bot won’t mirror them. |
How it behaves day to day:
- Several mapped roles? The player gets the rank of their highest-positioned Discord role.
- No mapped role any more? The managed ranks are removed in-game — that’s how a demotion travels across.
- Linked players only. Anyone who hasn’t linked, or who the bot can’t confidently resolve, is left alone rather than guessed at.
- Only the ranks you named. The bot only ever touches the rank names in your mapping.
- Bursts are batched. Granting a role to two hundred members results in one sync, and the bridge’s ordinary refresh pass picks up anything missed within about a minute.
- All-or-nothing. If anything can’t be resolved safely, no rank data is sent at all — never a half-applied sync.
- 🔄 Sync now in the
/mcdcwizard re-runs the mirror on demand.
Needs the companion plugin v0.15.0 or newer and LuckPerms on your Minecraft server.
Setup
Setup runs once, by the server owner (Manage Server permission is needed for the setup command). You can link the bridge entirely in-game — no config file to edit and no restart:
- Add the plugin. Download the MCDC plugin
.jar, drop it into your Minecraft server’splugins/folder, and start the server. - In Discord, run
/mcdc(or open/settings → Minecraft) to open the wizard, then pick the channel to bridge from the dropdown, or press Create a channel for me and let Server Assistant make one. On linking, the panel shows a ready-to-run line — your/mcdc linkcommand with the token and relay URL already filled in — plus the plugin download link. -
In Minecraft, run the link command. As a server operator (or from the server console), run the line the panel gave you:
/mcdc link <token> <relay-url>The bridge links instantly — the plugin validates the token, confirms which Discord channel it linked to, and the linked channel goes live. No restart needed.
Alternative — link via the config file. Prefer to edit the file? Paste the relay URL
and token from the wizard into plugins/MCDC/config.yml (the plugin generates it on
first start) and restart the server. This is the same link, just the manual route.
A setup summary posts to your staff chat. As soon as the bridge is linked, Server
Assistant posts a short hierarchy self-report to your staff channel: which roles it
detected, where it sits in the role hierarchy, what it will monitor, what it can
manage, and what it can’t (for example, roles ranked above its own). It’s a quick way
to confirm the bot is set up the way you expect. The Sync now button in the /mcdc
wizard re-checks Server Assistant’s role position and re-posts that summary on demand —
handy after you move the bot’s role or change its permissions.
Requirements. A Paper or Spigot server on a recent Minecraft version. The plugin targets 1.21.x, which requires Java 21.
One server per Discord server. In this version you can link one Minecraft server to each Discord server (one active bridge at a time). Reopen the
/mcdcwizard to point the bridge at a different channel.
Download the plugin here — drop the .jar into your server’s plugins/ folder:
⬇ Download the MCDC plugin (v0.16.0).
(the /mcdc wizard also gives you this download link.)
Plugin settings (config.yml)
You don’t need to edit the config file to link the bridge — the in-game
/mcdc link <token> <relay-url> command (see Setup) does that for you. The file is still
there if you’d rather set the relay URL and token by hand, and it holds the rest of
the plugin’s knobs. The plugin generates plugins/MCDC/config.yml on first start:
| Setting | What it does |
|---|---|
relay-url |
The relay address from the /mcdc wizard. Until it’s set to a real value, the plugin stays idle and makes no network calls. |
token |
Your link token from the /mcdc wizard. Keep it secret — treat it like a password. |
join-notice |
Shows each player an in-game notice on join that chat is bridged to Discord. This is a privacy requirement — please keep it on (true). |
join-notice-text |
The wording of that notice. Supports & colour codes. |
discord-to-mc-format |
How Discord messages look in-game. Placeholders {author} and {text}, with & colour codes — default &9[Discord] &b{author}&7: &f{text}. |
relay.chat |
Relay in-game chat to Discord. |
relay.join / relay.leave |
Relay player joins / leaves. |
relay.death |
Relay death messages. |
relay.advancement |
Relay advancements. |
relay.server-start-stop |
Relay server start and stop. |
poll-wait-seconds |
How long the plugin waits for Discord messages on each check (default 25). |
presence-interval-seconds |
How often the online count and player list are refreshed (default 60). |
Each relay: line is an independent on/off toggle, so you can post only the events you
want. After editing the file, restart the server (or re-run the bridge) to pick up changes.
Commands
In Discord
/mcdc: opens the setup & customization wizard (pick/create a channel, get your plugin config, and toggle events, the topic count, reactions and translation, open @sai Studio and Rank sync, rotate the token, or unlink). Owner / Manage Server only. Also in/settings → Minecraft./online: list who’s currently in-game. Anyone can run it, and the reply is private to you — but it’s scoped to your bridged channel. Run it somewhere else and it doesn’t answer, it points you at the right channel instead (“Try/onlinein #minecraft — that’s this server’s Minecraft chat channel.”)./link·/unlink: connect or disconnect your own Minecraft account. Anyone can run them, on themselves only. See Link your account.
In Minecraft
The bridge adds a small number of things you can type in the game, and it’s worth knowing which are commands and which are just chat:
| In-game | What it does | Who |
|---|---|---|
/mcdc link <token> <relay-url> |
Links the bridge to your Discord channel, instantly and with no restart. You only run this once, during Setup — the /mcdc wizard hands you the whole line pre-filled. |
Server operator, or the server console |
/saportal |
Prints your customer portal address into chat as a clickable link, so a player can reach their account without hunting for the URL. The address is served by Server Assistant, so it stays correct without a plugin update. | Players |
!link <code> |
Not a command — a chat message. Redeems the one-time code /link gave you in Discord, within 15 minutes. See Link your account. |
Any player |
@sai … · !sai … · !ai … |
Also chat, not commands. Ask the assistant a question in-game. Subject to your access setting. See Ask SAi in-game. | Depends on access |
There is no in-game
/saicommand and no in-game/link— asking SAi is done with the chat prefixes above, and/linkis a Discord command that mints the code you redeem in-game with!link.
The plugin keeps itself up to date. It checks with Server Assistant for a newer build, and only installs one whose checksum matches what we published — a mismatch blocks the update rather than installing anything, and the new build is staged for your next restart. When it does update, the bot posts a short note to your log channel (“⛏️ Your Minecraft bridge plugin updated to vX.Y.Z.”).
Translation
Turn on live AI translation and everyone reads one conversation, whichever side
they’re on. Set a target language from the Translation button in the /mcdc wizard (or
turn it off there), and chat is translated both ways, in-game messages into that
language for Discord and Discord messages into that language for in-game.
- It is off by default, switch it on only when you want it.
- Text that is already in your chosen language is left alone, no needless re-wording.
- Translation is handled by Server Assistant’s AI, the same engine behind the bot’s
existing
/translatefeature.
Keeping chat clean & safe
The bridge respects your server’s own moderation, in both directions — and it’s governed by a single control: your server’s AutoMod switch.
- Filtering & monitoring follow your AutoMod switch. There’s nothing separate to
turn on for the bridge. When AutoMod is on, bridged Minecraft chat is automatically
masked and monitored in both directions; when it’s off, the bridge isn’t
filtered. The
/mcdcwizard shows a single Filter & monitor status that reflects AutoMod — no bridge-only toggles that can read “on” while doing nothing. - Your AutoMod filter applies to bridged chat. With AutoMod on, messages crossing the
bridge are run through your server’s existing AutoMod word list (lexicon) and enabled
word packs, and any matched words are masked to
***in the copy that’s delivered — so a word you already block in Discord stays blocked when it comes from Minecraft, and vice versa. - Your full protection scans in-game chat too. Bridged Minecraft chat is checked by the
same AutoMod as your Discord — your word and lexicon filters, the built-in
scamspack, and the known-bad-domain link blocklist. A match raises a staff alert (with the Kick and Ban in-game buttons from Moderate from Discord), so your scam-link and phishing protection already covers Minecraft, not just Discord. - No surprise pings from in-game. A player typing
@everyone(or any other mention) in Minecraft cannot ping your Discord. Mentions in bridged messages are handled safely and show as plain text, so nobody can mass-ping the server through the game.
Privacy
The bridge is built to keep your server’s secrets on your server:
- No passwords, no remote console. The plugin never exposes RCON and no admin passwords ever leave your machine. It only makes outbound HTTPS connections.
- Relayed in transit, not stored. In-game chat and player usernames are passed
between Minecraft and Discord to deliver the message, and not stored. When
translation is on, that chat is processed by Server Assistant’s AI translation (the same
as
/translate) to produce the translated text. - A flagged message is the exception. If a bridged message trips your AutoMod, the 180-day moderation-actions record keeps only the player name, UUID and which rule matched — never the message text. A short extract (up to ~500 characters) is kept with the staff decision card so your staff can see what they’re deciding about, and that is deleted 90 days after the decision is closed. The filter check itself is plain pattern-matching on our servers — no AI provider sees it. Full detail in the Privacy Policy.
- Ask SAi in-game sends your operator’s server notes. When
@saiis on, a player’s question goes to the AI along with the server-information text you wrote for it (up to 2,000 characters). No player names or UUIDs are sent. - Players are told, in-game. When a player joins, the plugin posts an in-game notice letting them know chat is bridged to Discord. As the server owner, you should also inform your players that the bridge is active.
- Account linking is opt-in. Linking your Discord and Minecraft accounts is
optional and started by you (
/link, then!link <code>) — until you do, the bridge does not connect the two. When you do link, only the Discord ID ↔ Minecraft UUID connection is stored (never your Minecraft username), and you can/unlinkany time. See Link your account and the Privacy Policy.
Troubleshooting
- The bridge won’t connect. Double-check the relay URL and token were pasted
in exactly as the
/mcdcwizard gave them, make sure your Minecraft server can reach the internet (the plugin needs outbound HTTPS), then check the/mcdcwizard (it shows the connection state). The bridge also reconnects on its own if the link drops. - The plugin won’t load. MCDC needs Java 21 and a Paper or Spigot server on 1.21.x. An older Java or server version will stop the plugin loading.
- Chat shows as a plain bot message, not the player. In-game chat is posted through a channel webhook so it can show the player’s name and skin-face avatar. If the bot can’t manage that webhook it falls back to a plain message — give the bot the Manage Webhooks permission in the linked channel.
- The online count in the topic looks stale. The channel topic count updates about once a minute and is rate-limited, so a change can take a few minutes to appear. The bot also needs the Manage Channel permission to edit the topic.
/onlinesays nothing’s linked. The plugin isn’t running or hasn’t connected yet. Start your Minecraft server and check the/mcdcwizard (it shows the connection state) to confirm the bridge is live.
Coming soon
The bridge has grown well past its first version — two-way chat, server health, moderation from Discord, full chat protection, Ask SAi in-game, @sai Studio, the in-world companion, account linking, XP for playtime, role → rank sync and a weekly Pulse section are all live today. Plenty more is still on the drawing board. The ideas below are planned or under consideration, not yet available, and everything here is subject to change, some may arrive later, look different, or not ship at all. No dates yet.
- More ways roles and ranks connect. Rank sync is live as a one-way mirror (see Roles and ranks in step); still on the drawing board are syncing nicknames and letting a booster or supporter role unlock an in-game perk.
- ThreatNet in Minecraft. Extend ThreatNet cross-server protection to your Minecraft server, so known bad actors can be stopped from joining in the first place. (On the roadmap.)
- More of your server in the bridge. Bridge extra channels (factions, staff, towny), show Discord images and attachments as links in-game, and keep message edits and deletes in sync across both sides.
- More moderation sync. Keep Discord and Minecraft bans and mutes in step, broadcast mutes both ways, and optionally relay the server console or run server commands from Discord. (Kicking and banning a flagged player from Discord is already live — see Moderate from Discord.)
- More AI in-game. A “while you were away” recap when you next log in, and a weekly AI highlight reel of your community’s best moments. (Asking SAi in-game is already live — see Ask SAi in-game.)
- More of SAi in your world. The summonable companion is live — what’s still exploratory is a persistent NPC with a fixed home, a greeter standing at spawn who shows newcomers around, and a character that moves through the world alongside you.
- One player history across both sides. A single activity history that spans a linked player’s Discord and Minecraft presence.
- DM offline players. Send a Discord message to a player who isn’t currently online.
- Richer formatting. Markdown and emoji carried across both ways, PlaceholderAPI support, and more language options.
- Bigger setups. Bridge several servers into one channel or one server into several channels, support for proxy networks (BungeeCord/Velocity) and cross-server chat, Bedrock players via Geyser, and Dynmap web-chat.
See also
- SAi (AI assistant): the AI behind live translation and
@sai - XP & leveling: where your in-game playtime XP lands
- Pulse: the weekly digest your Minecraft section appears in
- Commands: the full slash-command reference