mulligan

Live pick helper

Pick advice while you draft on MTG Arena, on your own computer.

The pick helper on this site needs you to type in the pack. The local version reads it for you. Arena writes every pack it shows you and every pick you make to a log file on your computer. mulligan live watches that file, and each time a new pack arrives it ranks the cards, both in the terminal and on a page it opens in your browser (served from your own computer):

PremierDraft_FRA_20260929   Pack 1, pick 2   1 cards taken
Your picks lean Blue (U 0.2).
Where your pool's best cards point: WU 10%, WB 10%, WR 10%, WG 10%.
    grade  card                        score  experts
 1  B+     Jiang Yanggu, Never Alone G  +3.1  Marshall B+, Luis B+, Marc B, ...
           +2.7 pts vs. the average card. Taking it, your pool points to its
           colors 80%, splashed 20%: adds +3.1 pts to your likely deck.
 2  B      Mindseeker Oculus         U  +2.1  Marshall B, Luis B, Marc B-, ...
 3  B-     Proft, Sinister Mastermind B +1.8  Marshall B, Luis B, Alex B-, ...
 ...

The browser page shows the same ranking with card art and the reasons for each score, plus:

It only reads the log file. It doesn't touch the game or send anything anywhere, and it's the same log that 17Lands' and other draft overlays read.

Where the advice comes from

Card ratings are the experts' grades, and only those: the podcast hosts from the primer (Limited Resources, Limited Level-Ups, Lords of Limited, TCGplayer). Shows use the letters differently, so each host's grades are shifted to a common average first, then averaged per card. The average letter becomes win-rate points on an uneven scale, the way real win rates fall out: an A+ bomb is some ten points better than a C+ card and a B+ under four, while C and C- are about a point apart. The simulator's ratings are not used here; they missed too many busted rares.

Score is how much the card adds to the deck you'll likely end up with:

The terminal lists the likeliest decks above the pack, and the why column spells out each card's odds of being in your final colors, whether it's removal, and every host's grade. It still doesn't know your curve: if two cards are within a point or two, take the one your deck needs.

Install

You need about five minutes and a terminal (Terminal on a Mac, PowerShell on Windows). It works on macOS and Windows, and on Linux if Arena runs under Steam.

1. Install uv, a Python installer. It fetches the right Python by itself, so you don't need Python already.

On a Mac or Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh

On Windows, in PowerShell:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Then close the terminal and open a new one.

2. Install mulligan:

uv tool install git+https://github.com/deknapp/mulligan

3. Turn on Arena's detailed logs. In Arena, go to Options → Account and check Detailed Logs (Plugin Support), then restart Arena. Without this, Arena doesn't log packs. You only have to do this once.

4. Run it before or during a draft, and keep the window beside Arena:

mulligan live

Your browser opens the helper's page. When a pack shows up in Arena, it shows up there (and in the terminal, best pick in green). Ctrl-C stops it. For the terminal alone, run mulligan live --no-web; if the page doesn't open by itself, the terminal prints its address (http://127.0.0.1:8765/). If you start it partway through a draft, it catches up on the picks you've already made from the log.

To update to the newest simulated data and fixes:

uv tool upgrade mulligan

If something's off

Once the draft is done, mulligan build log:latest suggests a deck from the cards you took. The code and full README cover the rest of what the tool does.