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.
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.
- 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
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.
Build from source — clone the repository and build it, then point your client at the binary
