Build a Commander deck using the Command Zone 2025 template.
Build a Magic: The Gathering Commander deck from the user's collection using the Command Zone 2025 template (episode 658).
38 lands, 61 nonland cards, 1 Commander. Template:
Plan Cards: 34 (Cards advancing the deck's strategy/win condition) Ramp: 10 (Mana acceleration: mana dorks, mana rocks, land tutors) Card Advantage: 12 (Card draw, selection, recursion, impulse draw) Targeted Disruption: 12 (Single-target removal, targeted exile — prefer removal over counterspells, they're less fun in casual games) Mass Disruption: 6 (Board wipes, mass bounce, mass exile) Mana-producing lands: 38
Multiple roles: The template totals more than 99 because many cards should serve multiple roles.
Explicitly assign cards to categories via --categories. The add-card tool tracks counts based on these assignments. Use your MTG knowledge to decide what role a card fills. MORE OVERLAP is BETTER. Get the total to 90 or more if you can.
Plan cards will be woven throughout.
CMC 0: 0 (don't bother) CMC 1: 5 (strong utility, disruption/removal only) CMC 2: 17 (strong utility, disruption/removal, enters effects on creatures, cantrips, ramp) CMC 3: 17 (ramp, utility creatures, disruption, card draw) CMC 4: 12 (utility, modal choices) CMC 5: 7 (high-impact cards) CMC 6+: 10 (powerful effects: game-ending threats, board wipes, repeatable card advantage)
All tools are invoked via uv run python .claude/skills/commander/scripts/<tool>.py <args>.
All scripts support --host <url> to run against a remote MTGC instance (e.g. a deployed container). The URL can also be set via the MTGC_HOST environment variable. Default: https://localhost:8081.
# Run against a remote instance
uv run python .claude/skills/commander/scripts/commander-find.py --host https://localhost:9443 --colors RG
[options]Browse owned legendary creatures for commander selection. Run with --help for all filter flags (colors, CMC, set year, type, oracle text, sort).
<commander name query>Search collection for legendary creatures and create a deck. If multiple matches, prints all — re-run with a more specific query. Pre-populates template role categories for tracking.
<deck_id> "<plan text>" [--sub-plans '<json>']Save the deck plan/theme and sub-plan categories. Sub-plans JSON format:
[{"name": "Counter Synergy", "target": 10, "search_hint": "counter"}]
name: display name for the sub-categorytarget: how many cards you want in this sub-categorysearch_hint: optional, for reference only--<category> | --listPrint sample SQL WHERE clauses for a card category. This is a growing query library — it covers template roles (ramp, card-advantage, targeted-disruption, mass-disruption, lands) and common sub-plan themes (sacrifice, reanimation, tokens, counters, discard, etb, voltron, tribal). Use the output as starting points for commander-search.py.
<deck_id>Mana base sizing tool. Run after all spells are added, before adding lands. Shows colored pip counts, color weight percentages, mana curve, and recommends total land count and basic land split based on pip ratios, average CMC, and ramp count.
<deck_id> "<sql_where_clause>" | --schemaSearch owned cards using a SQL WHERE clause. The query runs against cards c, printings p, and collection col (already joined). Cards already in the deck are excluded, and color identity is filtered to match the commander. EDHREC inclusion rates are shown when data exists.
Run --schema to see all available columns. Examples:
commander-search.py 62 "c.oracle_text LIKE '%destroy target%' AND c.cmc <= 3"
commander-search.py 62 "c.type_line LIKE '%Creature%' AND c.oracle_text LIKE '%enters%' AND c.cmc <= 3"
commander-search.py 62 "p.rarity IN ('rare', 'mythic') AND c.cmc <= 4"
<deck_id> <collection_id> --categories "<name>" ...Add a card to the deck. Validates singleton rule and color identity. After adding, automatically prints deck status: nonland count, mana curve progress, next category to fill, and phase-appropriate selection guidance. When all 61 nonland cards are in, it tells you to proceed to Phase 4. Use --categories to assign the card to template roles and/or sub-plan categories. A card can belong to multiple categories. Examples:
--categories "Ramp"
--categories "Targeted Disruption" "Plan Cards"
--categories "Plan Cards" "+1/+1 Counter Synergy" "Legendary Synergy"
--categories "Lands"
--categories is required — the tool will reject adds without it.
<deck_id> --plains N --island N --forest N [--mountain N] [--swamp N]Bulk-add basic lands to the deck. Prefers full-art printings, then printings from the commander's set. Use this after the mana analysis to fill the land base quickly.
<deck_id> [--dry-run]Upgrade every card in the deck to the blingiest printing you own (matched by oracle_id). Bling ranking: Serialized > Double Rainbow > Borderless > Full Art > Showcase > Extended Art > Foil > Promo > standard. Use --dry-run to preview changes without applying them. Run this as a final polish step after the deck is complete.
The user provides a commander or asks for help choosing one.
commander-create-deck.py "<name>"Analyze the commander's abilities and propose 2-3 deck themes to the user.
{"name": "Reanimation", "target": 12}, {"name": "Discard Enablers", "target": 8}{"name": "+1/+1 Counter Synergy", "target": 12}, {"name": "Counter Payoffs", "target": 8}{"name": "Token Generators", "target": 14}, {"name": "Anthem Effects", "target": 6}commander-sample-queries.py --list to see if existing categories overlap with your sub-plans. Re-use their tested queries during card search when they align. If your sub-plan categories aren't covered, you may add them after deckbuilding.commander-save-plan.py <deck_id> "<plan>" --sub-plans '<json>'Sub-plan targets should sum to roughly the Plan Cards target (30) but can overlap — a card can satisfy multiple sub-plans. Progress is tracked automatically by commander-add-card.py.
Start by finding a good Plan card to go with the commander. The output of commander-add-card.py will tell you what's next — it prints deck status, curve progress, the next category to fill, and phase-appropriate guidance after every add. Follow its instructions.
Repeat this loop until add-card says "61 NONLAND CARDS COMPLETE":
Search — Use commander-search.py to find candidates for the category suggested by the last add-card output. Run multiple searches with different queries for a diverse pool.
Compare — Follow the selection guidance from the add-card output. Always compare at least 2-3 options and explain why the winner beats the alternatives.
Add ONE card — commander-add-card.py <deck_id> <collection_id> --categories "<role>" "<sub-plan>" ...
Assign ALL categories the card belongs to (template roles + sub-plans). Read the output — it tells you what to do next. Go back to step 1.
DO NOT add the first card you find. Search, compare, then add.
DO NOT FILL ENTIRE CATEGORIES. LISTEN TO ADD CARD. It CHANGES as you add cards, helping you balance card additions.
When add-card says "61 NONLAND CARDS COMPLETE", run commander-mana-analysis.py <deck_id> to get pip counts, color weights, and curve data. Then:
When the deck has 99 cards (+1 commander = 100), it's complete. Run commander-bling-it-up.py <deck_id> to upgrade all cards to the blingiest printings owned. Summarize the final build for the user.
CATEGORIES dict so it can be re-used in future deck builds. Add a corresponding test in tests/test_commander_queries.py with expected staple cards.