The MTGSL Discord bot posts your pairings, sends match reminders, and lets players report results, all inside the Discord server you already use. Setup is a few clicks - nobody needs to write any code or touch a developer portal.
Get Started
Pick the option that matches you - each one takes a couple of minutes.
Signed up or logged in with Continue with Discord? You're already connected. Skip to the last step.
- Go to your Profile page (click your avatar, top right)
- Find the Discord card and click Connect
- Click Authorize on the Discord page that opens - you'll land back on MTGSL automatically
/report in Discord. Nothing else to set up on your end.- Open your league's Discord server and type
/setup-league - For the
leagueoption, paste your league's link (or its ID, if the league is private - see Advanced Details below) - Press enter - Discord confirms the server is linked
- Go to the channel you want pairings and results posted in and type
/set-channel
That turns on pairing pings, reminders, and lets players use /join, /standings and /report. No webhook to copy and paste.
- Go to your store's page and open the Discord Bot section (under the Dashboard tab)
- Click Add Bot to Server
- Pick your Discord server and click Authorize
- In Discord, go to the channel you want updates in and type
/set-channel
/join, and automatic Discord roles for participants - no per-league setup needed. Your Majors and Series show up in /join and /standings too. (Prefer a lighter setup with no roles? Run /setup-store in your server instead.)What Happens Automatically
Once you've connected your account and your server is linked, these all happen on their own - no commands needed:
A player who hasn't connected their Discord account just doesn't get tagged - nothing breaks for anyone else.
Organiser extras Pro, Community & Store
These also run on their own, for events whose organiser is on the Pro Organiser, Community or Store plan:
/digest enabled:true.Every Command
Slash commands are just messages you type into Discord starting with / - Discord will show you the options as you type, so you don't need to memorize the exact wording.
| Command | Who can use it | What it does |
|---|---|---|
/standings |
Anyone | Posts current standings. In a linked server, leave the event blank to get this server's event, or start typing to pick one (leagues, Majors and Series). Works for any public league in any server too. |
/join |
Anyone | Shows the league (or the store's open leagues, Majors and Series) this server is linked to, with links to join. |
/setup-store |
Store owner/staff | Links this server to your store, once. Turns on /join and pairing/reminder pings for every league under that store. |
/setup-league |
League manager/staff | Links this server to one league that isn't part of a store. Works for private leagues too. |
/set-channel |
Store owner/staff, league manager/staff | Run it in the channel (or thread) you want pairings, results and reminders posted in. Replaces pasting a webhook. Add off:true to stop. |
/report |
Either player in a match | Reports your 1v1 match result without leaving Discord. If you only have one open match, just enter the score. |
/mymatch |
Any player | Shows your open matches: who you're playing, when, and where. Only you see it. |
/propose-time |
Either player in a 1v1 match | Suggest 2 or 3 times. Your opponent picks one with a button, or says none work. Needs Match Scheduling turned on for the league. |
/judge |
Any player | Calls the league's staff to your match, with an optional note. Staff get tagged and a notification on MTGSL. |
/card |
Anyone | Looks up a card, with its legality in this server's league format (and Canadian Highlander points, for a Highlander league). |
/events |
Anyone | What's coming up at this server's store or league, with dates and when Major registration closes. |
/leaderboard |
Anyone | The store's rating ladder for a format. Leave the format empty for the most-played one. |
| Organiser commands - Pro Organiser, Community & Store plans | ||
/round-status |
League staff | This week at a glance: how many matches are in, and which are still to play. Only you see it. |
/nudge |
League staff | Tags every player whose match this week is still unplayed. |
/repost-pairings |
League staff | Posts this week's pairings again without pinging anyone, for when the original has scrolled away. |
/report-for |
League manager/staff | Records a 1v1 result, or a no-show, for two players. Works like reporting on the website as staff, so it doesn't wait for the players to confirm. |
/digest |
Store owner/staff, league manager/staff | Turns the Monday morning digest on or off for this server. |
Common Tasks
My league is private - can I still connect it?
Yes. Your league never needs to be made public to use the bot. Open your league's Settings → Integrations tab - if the league is private, you'll see its ID there with a Copy ID button. Use that ID anywhere you'd normally use a league link, including in /setup-league and /report.
How do automatic Discord roles work?
Once you've clicked Add Bot to Server (league Settings, or the store page), MTGSL creates a Discord role for your league the first time it's needed. From then on:
- A participant gets the role the moment they join
- It's removed automatically when they drop or get banned (and given back if you unban someone who's still playing)
- A week after the league ends, the role is deleted from your server
- Adding and removing the role needs that player to have connected their own Discord account first
How do I choose where the bot posts?
Go to the channel you want updates in and type /set-channel. The bot posts a short test message there so you know it can post in that channel. From then on, pairings, results and reminders go to that channel. It works in threads too.
If the bot says it can't post there, check that you used Add Bot to Server and that the bot's role can view and send messages in that channel. Already set up a webhook in MTGSL settings? /set-channel replaces it for that league or store, and /set-channel off:true switches back.
How do I report a match from Discord?
Type /report and enter the games you and your opponent each won. If you're only in one league with one open match, that's all you need. Otherwise, pick the league or match from the list Discord shows as you type. If you have more than one open match and don't pick one, the bot lists them and asks which one you mean.
If your league requires both players to confirm the score, your report is posted with Confirm and Dispute buttons that only your opponent can click. Confirm locks in the result immediately; Dispute lets them know the score needs a second look (they can run /report themselves with the correct score, or reach out to the manager).
How do I set up a match time from Discord?
Type /propose-time and fill in two or three times as YYYY-MM-DD HH:MM, for example 2026-10-02 19:30. The times are read in your timezone: the one saved with your availability on MTGSL, otherwise your store's. If that's wrong, set the timezone option (type a city like "london" to find it).
Your opponent gets tagged with a button for each time. Once they pick one, the match is scheduled, just like on the website, and everyone sees the time in their own timezone.
How do I record a result for players? Pro, Community & Store
Type /report-for and start typing a player's name in match. Then either enter player1_games and player2_games (player 1 is the first name shown in the match), or pick who didn't turn up in no_show. The result posts in the channel so both players can see it.
Advanced Details
Skip this section unless you're curious how something works, or you've hit one of these specific situations.
/setup-league alone turn on automatic roles?
That command only tells MTGSL which server to send pings to - it doesn't add the bot to your server as an actual member, so Discord never gives it permission to manage roles. Add Bot to Server is the one action that installs the bot with that permission. If a league or store already shows as "Linked" but roles still aren't appearing, this is almost always why - use Add Bot to Server (or Relink) to fix it.
/standings show?
/standings works for anyone, with no Discord account connection required, so MTGSL can't check who's asking. Because of that, it only shows a private league in the server its manager linked it to with /setup-league. Anywhere else, the league has to be public. Majors and Series only show in a server linked to their store.
/setup-store, /setup-league and /set-channel?
Discord only shows those three commands to members with the Manage Server permission, so regular members don't see setup commands. A server admin can let other roles use them under Server Settings → Integrations. Either way, MTGSL still checks that you're staff of the linked store or league.
/report, /report-for and /propose-time only cover 1v1 matches - pod/multiplayer results and times, and suspected-cheating reports, still need the website. Players report their own no-shows on the website too; staff can record one with /report-for. A Major that isn't part of a store can't be linked to a server yet.
Discord events need the bot's "Manage Events" permission, which servers that added the bot before this feature don't have. Click Relink next to your server in MTGSL settings (store Dashboard or league Settings → Integrations) and approve the new permission. Only leagues and Majors with a start date in the future get an event, and a store server only gets its public leagues.