// Minecraft

DiscordSRV: Link Your Minecraft Server to Discord

DiscordSRV: Link Your Minecraft Server to Discord

DiscordSRV is a free, open source plugin that bridges your Minecraft server's chat to Discord in both directions: what players type in game appears in a Discord channel, and what is typed in that channel arrives in game. The plugin runs entirely server-side on Paper, Purpur or Spigot, so your players install nothing. You need three things: your own Discord bot with a token, the channel IDs of the channels you are bridging, and access to plugins/DiscordSRV/config.yml.

What can you actually bridge with DiscordSRV?

The chat bridge is what most servers come for, but the plugin does more. You switch these parts on or off independently:

  • Two-way chat. In-game messages go to a chosen Discord channel, and messages from that channel land in the in-game chat with the Discord name in front. That way someone can join the conversation straight from their phone.
  • Join, leave and status messages. Players see who arrives and who leaves, optionally with death messages too. On a busy server that quickly becomes noise; many admins keep only join and leave.
  • Console channel. The server console streams into a separate channel and you can run commands there. Handy when you need to unban someone while out and about, but also the most dangerous part of the plugin.
  • Rank synchronisation. Tie a Discord role to a LuckPerms group, so that whoever gets the Donator role in Discord lands in the matching rank in game.
  • Account linking. Players connect their Minecraft account to their Discord account using an in-game command and a short code. Without that link the plugin has no idea who is who, and rank synchronisation will not work.

There is a good reason DiscordSRV appears in practically every list of the standard plugins for a Minecraft server, alongside EssentialsX, LuckPerms and CoreProtect.

How do you create the Discord bot?

DiscordSRV does not ship a ready-made bot. You create one yourself in the Discord developer portal, so you decide exactly which permissions it gets.

  1. Create an application in the Discord developer portal via New Application. The name you enter becomes the name of your bot.
  2. Open the Bot tab and enable the privileged gateway intents: Message Content Intent is required for messages travelling from Discord to Minecraft, and Server Members Intent for rank synchronisation and account linking.
  3. Click Reset Token and copy the token. You see it once; after that you have to reset again. Treat this token as the password to your entire Discord server.
  4. Go to OAuth2 URL Generator, tick the bot scope and pick the permissions: send messages, read message history and Manage Roles (only if you use rank synchronisation). Open the link and invite the bot.
  5. Drop the jar file into the plugins folder and start the server once so the configuration is created. Then put your token behind BotToken in plugins/DiscordSRV/config.yml.
  6. Turn on developer mode in Discord, right-click a channel and choose Copy Channel ID: a number of 17 to 19 digits, not a channel name. Put your chat channel's ID behind global and your admin channel's ID in the console setting.
  7. Restart the server fully rather than reloading. The console tells you whether the bot connects. Then test both directions: type something in game and type something in Discord.

The easiest way to edit config.yml is through your panel's file manager. With Minecraft hosting from MC-Node every package includes the Pterodactyl panel, so you edit the file in your browser with no FTP involved.

Which channels do you bridge, and which stay private?

Most of the trouble comes not from the plugin but from sloppy channel permissions. Decide per channel, in advance, who may read and who may write.

ChannelWho may readWho may writeWhy
Chat channel (global)EveryoneEveryoneThe bridge the plugin exists for. Everything posted here ends up in game.
Log channel (join, leave, deaths)MembersThe bot onlyPurely a logbook. Removing write access stops it filling up with replies.
Console channelAdmins onlyAdmins onlyContains start-up logs, error messages with folder paths and sometimes player IP addresses.
Linking channelMembersMembersWhere players enter their linking code. Those codes are personal and short-lived.

Check the permissions with a second account that has no roles. Channels inherit permissions from their category, and that is where it usually goes wrong: the channel is locked down, the category around it is not.

How do you tie Discord roles to in-game ranks?

For many servers this is the reason to install DiscordSRV at all. In the synchronisation config you map a Discord role ID to a group in LuckPerms, the standard for permissions and ranks on Bukkit servers. Give someone the Donator role in Discord and they get the donator group in game.

Three things decide whether that works. The player must have linked their accounts, otherwise there is no connection between a Discord ID and a Minecraft UUID. The bot's role must sit above the roles it hands out in the role list, or you get a permission error that has nothing to do with Minecraft. And you have to choose which side is authoritative.

That last choice is underrated. With two-way synchronisation a player also loses their in-game rank the moment someone manually removes a role in Discord, and a typo in a role ID can hand out or strip a rank across your whole player base in one go. So back up your LuckPerms database before you switch this on, and when in doubt pick one authoritative side: usually Discord.

Which two mistakes cost servers their Discord most often?

The first is a bot token getting out. With it, someone else has full control over your bot: sending messages as if they were your server, spamming channels, and with Manage Roles handing roles to themselves. If rank synchronisation is on, such a role is instantly a rank in Minecraft too.

Leaks almost always happen in one of two ways: a screenshot of config.yml in a help channel, or a complete config or log posted to a pastebin site while asking for help. Never paste an entire configuration file anywhere, only the part your problem concerns, with the token stripped out; do not assume an upload service censors tokens for you. If it has already happened, reset the token immediately in the developer portal. Put the new one in your config, restart, and go through your Discord server's audit log looking for roles and channels you did not change yourself.

The second mistake is a public console channel. Everything your console spits out ends up there: start-up logs, plugin versions, error messages with full folder paths and, depending on your settings, join messages with player IP addresses. That is precisely the information someone needs to attack your server. If you also allow console commands from that channel, anyone with write access can run op, ban or stop.

So put the console channel in a category visible only to your admin role, and restrict command execution to the role IDs you explicitly list. If you use it purely as a logbook, turn execution off entirely.

How much heavier does it make your server?

Practically nothing. DiscordSRV handles its network traffic asynchronously, so your main thread and your TPS (ticks per second) barely notice it. What you will run into are Discord's own limits: a bot may only post messages at a certain rate, so with death messages and advancements added the chat can start lagging behind. Switch those messages off if it does.

The real performance questions live elsewhere: chunk loading, entities and heavy modpacks. All the Mods 10 asks for at least 10 GB of RAM and 14 to 16 GB with five or more players; a chat plugin changes none of that. If your server feels sluggish, use spark and work through the guide to optimising your Minecraft server.

When are you better off skipping DiscordSRV?

For four friends who are already sitting in the same voice chat, a chat bridge adds very little. If all you want is to see server status and player count, your hosting panel is enough.

More important is the technical boundary: DiscordSRV is a plugin, not a mod. It runs on Bukkit-based software such as Paper and Purpur, and you cannot load it into a pure NeoForge or Fabric setup. If you run All the Mods 10 on NeoForge you need a mod alternative or hybrid server software, with all the instability that brings. The same applies to genuine Bedrock server software: it knows nothing of Bukkit plugins, so first check what is possible on a Bedrock Edition server. On a Java server with Geyser and Floodgate, DiscordSRV does work for Bedrock players.

Finally, remember that a chat bridge is also a moderation job: everything said in game is stored permanently in Discord, and people who do not play on your server join in the chat. So settle in advance who is allowed to write in that channel.

Frequently asked questions

Is DiscordSRV free? Yes, free and open source: two-way chat, console channel, account linking and rank synchronisation with LuckPerms are all in the standard version. You only pay for the server it runs on; a 2 GB package at MC-Node costs EUR 2.20 per month.

My bot token has leaked, what now? Reset the token immediately in the Discord developer portal, which invalidates the old one. Put the new one in config.yml, restart the server and check the audit log for roles, channels or bans you did not create.

Why does chat reach Discord but not come back into Minecraft? Usually Message Content Intent is switched off in the developer portal, which stops the bot reading message content. After that, check the bot has read access in the channel and that the 17 to 19 digit channel ID is correct.

Can I control my server from Discord? Yes, the console channel lets you run commands as if you were sitting at the console. Do keep that channel private to your admin role and restrict execution to specific role IDs, or anyone with write access can run commands such as op or stop.

Further reading

// TRY IT YOURSELF
Your server online in 60 seconds
MC-Node →