upload_deckLABSCO SUMMARY
It keeps state, which is what makes it a practice tool.
A card search server tells you what a card does; this one deals you a hand and lets you make the keep-or-mulligan decision with the actual cards in front of you. That difference is the whole reason to run the deck manager — testing an opening-hand distribution or rehearsing a sideboard plan needs a deck that is being drawn from, not queried. Splitting it from the Scryfall server is the right call too: you can register lookup alone if game state is not what you are after.
What it is
A Swift implementation of two separate MCP servers for Magic: The Gathering. One is a game-state manager that loads a decklist and then tracks deck, hand and sideboard through draws, mulligans and sideboarding; the other is a card lookup over the Scryfall API. They run independently, so you can register either or both.
What you get
- Decklists parsed from the format you already paste around, with deck, sideboard and commander sections —
load_deck - A real game state rather than a card list: draw from deck to hand with proper shuffling, look at your hand, play a card out of it, and read live deck and hand statistics —
draw_cards,get_hand_contents,play_card,get_deck_stats - London mulligans implemented as their own operation, and a reset back to the opening state —
mulligan,reset_game - Sideboarding as a swap between main deck or sideboard and hand —
sideboard_swap - Card search using Scryfall's own query syntax, so colour, converted mana cost, type and power filters work the way you already write them —
search_cards - Random cards, optionally constrained by the same query syntax —
get_random_card - Name lookup two ways, because half-remembered card names are the normal case — exact match or fuzzy —
lookup_card_exact,lookup_card_fuzzy - Full card data behind those lookups, including images, prices and format legalities
Requirements
No account and no key — Scryfall is public. Swift 6.2 or later and macOS 13 or later. Build from a clone with swift build, optionally in release mode, and copy the two executables somewhere on your path. Each server is registered separately in your client config with a stdio transport; a development configuration runs them through swift run from the project directory, and a production one points at the built binaries directly.
Setup effort
Build from source — clone the repository, then follow the project's own run instructions
USE CASES
Practising mulligan decisions
Load a real list, draw an opening hand, and decide whether to keep it — then take the London mulligan and see what you get.
Testing whether a decklist actually works
Draw repeatedly and read the deck and hand statistics, rather than eyeballing a mana curve on a spreadsheet.
Rehearsing a sideboard plan
Swap cards between the sideboard and your hand the way you would between games, and see what the deck looks like after.
Finding cards that fit a slot
Search Scryfall by colour, cost and type in its own query syntax, and read back the full records with legalities and prices.
Looking up a card you half remember
Use fuzzy name matching instead of getting the exact spelling right, and open the record from there.
11 tools
Listed in project docs. Your client may show a different list.
draw_cardview_handview_deck_statsplay_cardmulligansideboard_swapreset_gamelookup_rulesearch_rulesexplain_conceptBEFORE YOU INSTALL
What to know first
Tools you get
11 tools named in the project's documentation.
Requires
swift on PATH
Where it runs
Both documented setups run the server on your machine.
INSTALLATION
Connect your client
Server setup
git clone <YOUR_REPOSITORY_URL>
cd mtg-mcp
swift build -c releaseMCP Clients
Claude Desktop — swift run
{
"mcpServers": {
"mtg-deck-manager": {
"command": "swift",
"args": [
"run",
"mtg-mcp",
"--transport",
"stdio"
],
"cwd": "<YOUR_PATH_TO_MTG_MCP>"
}
}
}Claude Desktop — built binary
{
"mcpServers": {
"mtg-deck-manager": {
"command": "<YOUR_PATH_TO_BUILD>/release/mtg-mcp",
"args": [
"--transport",
"stdio"
]
}
}
}