← back to Mystic Forge

Changelog

Everything that's shipped in Mystic Forge, newest first.

Moved to the MCP 2 SDK, with nothing to relearn

Mystic Forge now runs on version 2 of the Model Context Protocol SDK, the library that speaks to Claude and every other client. All 46 tools keep their names, descriptions and inputs, and every answer and error message reads the same as before; this is the groundwork that keeps the server current with the protocol as clients adopt newer revisions. Personal connector URLs and existing watchlist passphrases work unchanged, and each request still stands on its own, so there is no session to expire mid-conversation.

The board paints first and fills in after

A board now sends its title, theme and layout the instant you ask for it, then the cards arrive as the prices are read — so the page is on screen in a blink even when the server is cold, and a slow board no longer holds up Claude's tool calls while it renders. The reading itself got much cheaper too: each card's price history is fetched once instead of three times, the newest price at each shop is found by lookup rather than by reading every price on record, and the index every board reads from now carries the price itself, so a card's history is one run of pages rather than a scatter of them. Also fixes a mistake in 1.3.1: the index it added to answer the “prices through” line could tempt the database into reading every price at a shop when the board was set to that single market. That line is now answered from the board's own cards, and the index is gone.

watchlist_view watchlist_report

Boards open in a blink again

Every board took three to four seconds to open, and a little longer each day. The line at the bottom that says which date the prices run through was to blame: answering it meant reading every price on record for the shops on the board — a million and a half rows, and growing with each nightly ingest. The database now keeps an index shaped for exactly that question, and the same line resolves in three lookups. A side effect worth having: link previews in Slack, Discord and the like had started giving up before the page arrived and falling back to a bare domain name; they get the board's title and banner again.

watchlist_view watchlist_report

Every market at once, targets that move, and lists that travel

The watchlist board now compares all four price sources. The prices dropdown opens on All markets, where each card shows the cheapest of TCGplayer, Card Kingdom and Mana Pool and names which one it is; pick a single market to see everything at that shop instead (Cardmarket stays in euro and is never mixed into the cheapest). A card can also be pinned to one market for good, from its own modal, when that is the only place you would buy it — targets, the board and the push alerts all judge the same basis, so a lit card and a notification never disagree.

Targets learned to move. Besides a fixed number, a card can follow the historic low: the target sits at the lowest price recorded so far (or a chosen percentage under it) and shifts whenever a new low is set, so a buy window opens only on a genuine dip. The modal offers gg.deals-style shortcuts — beat the current price, match the low, ten, twenty or thirty percent under either — and the same grammar works everywhere a target is typed: @ low, @ low-10%, @ -20% on a line, or the new target_rule and shop inputs on watchlist_add and watchlist_bulk_add.

The card modal was rebuilt around what you do there: the card face beside four figures (now, lowest, target, thirty-day change), a market row that flips the chart between shops, the target editor, hop-outs that now include Card Kingdom and Mana Pool, and the daily table folded away under Recent prices. Remove sits far left, Save and Bought far right. The BUY/WAIT banner above the board is gone.

Lists travel. Export writes plain 1 Card Name lines for everything, for the cards at target, or for a hand-picked set, and opens them in TCGplayer Mass Entry or the Card Kingdom deck builder, or copies them for Mana Pool. Import takes the same lines back, with targets after @ and an optional pin to the printing each line names. And a list no longer needs an assistant to exist: /mtg/w/new forges one by hand from a name and a pasted list, and hands over the passphrase once.

watchlist_add watchlist_bulk_add watchlist_list watchlist_report price_history

The MTGStocks badge, resolved by the people reading the page

MTGStocks has no URL you can build from a card's name — only /prints/<id>, naming one specific printing — and they refuse requests from cloud hosts, which is every request this server makes. So the badge has never appeared, on any card. Your browser is not a cloud host, so it does the lookup instead: open a card and it finds that printing's id, links it, and reports the id back, which means the next person to open that card gets the link already rendered, even if their own network is refused. A pinned printing links to that exact printing rather than the card's default one. Nobody is taken at their word: a reported id has to name the card it claims to be, and where two browsers disagree the one more of them agree on wins.

watchlist_view watchlist_report

Mana Pool prices, and a year of history instead of 90 days

Mana Pool joins TCGplayer, Card Kingdom, and Cardmarket, so every watched card carries a fourth price. Watchlists also keep more history than MTGJSON hands out: prices now land in a store the server maintains itself, at daily resolution for 120 days and weekly averages kept indefinitely after that. A list you have held for a year shows a year rather than the rolling ~90 days MTGJSON still has. Adding a card used to mean waiting while a 1.4 GB price file streamed end to end just to find that card's rows; it now reads the store by index, so the history is there before the page finishes loading. The MTGStocks badge on a shared list points at a real page now instead of a 404.

watchlist_add watchlist_bulk_add watchlist_view watchlist_history watchlist_report price_history

The Comprehensive Rules, on tap

Rules questions no longer run on memory. rules_get returns exact Comprehensive Rules text for any rule number (702.2b) or keyword (deathtouch) — subrules, glossary entry, and the rules it cites — and rules_search ranks full-text matches across all 3,300+ rules when you don't know the number. Every answer carries the CR's effective date, and the server refreshes itself when Wizards publishes a new set's rules, so layers, state-based actions, and replacement effects come from the rulebook rather than from vibes.

rules_get rules_search

Goldfish — simulate a deck before you build it

Deal opening hands and play them out thousands of times to measure how fast and how consistently a deck does its thing. goldfish_run gives seeded Monte Carlo stats with 95% confidence intervals, goldfish_ab runs a paired swap comparison and flags whether a difference is real or lucky noise, and goldfish_odds answers exact draw questions by hypergeometric enumeration. Runs render to a shareable HTML report, and you can step through a single game by hand. Goldfishing measures speed and consistency only; it cannot value interaction.

goldfish_annotate goldfish_run goldfish_ab goldfish_odds goldfish_report goldfish_start goldfish_step goldfish_state

Reliable card text pulling

Tools no longer describe cards from memory. scryfall_card_text pulls full oracle text for a whole list of names in one call, and archidekt_deck gained an include_text flag that returns a deck with real rules text attached. The server now instructs clients to verify text before reasoning about it.

scryfall_card_text

Prices for the exact printing

Pricing now knows that not every copy is the same. scryfall_price takes a set code, collector number, and finish; scryfall_price_list reads set, collector number, and finish off each line of a decklist and prices that specific copy. Foil and etched no longer silently fall back to non-foil, and format_archidekt emits *F* and *E* markers.

scryfall_price_list

Price Watchlist

A hosted watchlist for tracking card prices over time. Create a list, add cards one at a time or in bulk, set targets, and get a push notification when something hits your number. Lists live behind a passphrase URL with price history sparklines.

watchlist_create watchlist_add watchlist_bulk_add watchlist_remove watchlist_list watchlist_view watchlist_report watchlist_history watchlist_clone price_history

Precon upgrades and diffs

edhrec_precon_upgrade shows how the community actually upgrades a preconstructed deck — which cards get cut, which get added, and how often. precon_diff gives the exact cut and added lists between a precon and any specific deck.

edhrec_precon_upgrade precon_diff

Combos, rulings, and precon decks

Commander Spellbook combo search, official Wizards rulings, and 2700+ preconstructed decklists from MTGJSON. Plus format_archidekt, which generates importable decklists with categories, commander placement, and maybeboards.

spellbook_combos spellbook_card_combos scryfall_rulings precon_search precon_decklist precon_export format_archidekt

Mystic Forge goes live

One MCP server for Magic: The Gathering — Scryfall search and pricing, EDHRec commander recommendations, Archidekt deck reading, and decklist validation.