A .NET global tool that wires MCP clients into the Magic: The Gathering deckbuilding ecosystem. You get Scryfall card search and rulings, local deck workspaces with edit plans and validation, Moxfield imports that preserve boards and tags, Archidekt writeback with checkpoint management, Playgroup.gg meta analysis and power rankings, Commander Spellbook combo detection, and goldfish simulation with board state projection. Ships with three operation modes: read-only for lookup, plan for staged edits, and apply for writeback. Credentials live in separate JSON files. Useful when you want an LLM to suggest swaps under budget, analyze mana curves, find combos in your 99, or rank playgroup decks by win rate without switching between browser tabs.
Public tool metadata for what this MCP can expose to an agent.
pingHealth check — returns 'pong'.Health check — returns 'pong'.
No parameter schema in public metadata yet.
scryfall_search_cardsSearch for Magic cards using Scryfall syntax. Examples: "f:commander id:sultai t:creature", "o:destroy t:instant cmc<=3" See https://scryfall.com/docs/syntax for full syntax reference.4 paramsSearch for Magic cards using Scryfall syntax. Examples: "f:commander id:sultai t:creature", "o:destroy t:instant cmc<=3" See https://scryfall.com/docs/syntax for full syntax reference.
pageintegerlimitintegerquerystringresponse_formatstringdetailed · concisedefault: detailedscryfall_card_detailsGet full details for a Magic card by exact or fuzzy name.3 paramsGet full details for a Magic card by exact or fuzzy name.
namestringfuzzybooleanresponse_formatstringdetailed · concisedefault: detailedscryfall_card_priceGet current prices for a Magic card. Prices update once per day.1 paramsGet current prices for a Magic card. Prices update once per day.
namestringscryfall_card_rulingsGet official rulings and clarifications for a Magic card.1 paramsGet official rulings and clarifications for a Magic card.
namestringscryfall_set_infoGet metadata for a Magic set by its code.1 paramsGet metadata for a Magic set by its code.
set_codestringscryfall_whats_newFind recently printed or released Magic cards. Searches Scryfall for cards released within the given number of days. Optionally filter by set or format legality.5 paramsFind recently printed or released Magic cards. Searches Scryfall for cards released within the given number of days. Optionally filter by set or format legality.
daysintegerlimitintegerformatvalueset_codevalueresponse_formatstringdetailed · concisedefault: detailedspellbook_find_combosSearch for known combos involving a specific card. Optionally filter by color identity (e.g. "sultai", "BUG", "wubrg"). Returns up to `limit` combos with cards involved and results produced.3 paramsSearch for known combos involving a specific card. Optionally filter by color identity (e.g. "sultai", "BUG", "wubrg"). Returns up to `limit` combos with cards involved and results produced.
limitintegercard_namestringcolor_identityvaluespellbook_combo_detailsGet detailed steps for a specific combo by its Spellbook ID. Use an ID from find_combos results (e.g. "1414-2730-5131-5256").1 paramsGet detailed steps for a specific combo by its Spellbook ID. Use an ID from find_combos results (e.g. "1414-2730-5131-5256").
combo_idstringspellbook_find_decklist_combosFind combos present in (or nearly present in) a Commander decklist. Provide commander name(s) and a list of card names in the main deck. Returns combos that are fully included and those that are almost included.2 paramsFind combos present in (or nearly present in) a Commander decklist. Provide commander name(s) and a list of card names in the main deck. Returns combos that are fully included and those that are almost included.
decklistarraycommandersarrayspellbook_estimate_bracketEstimate the Commander bracket (power level) for a decklist. Provide commander name(s) and a list of card names in the main deck. Returns bracket tag and any bracket-relevant findings.2 paramsEstimate the Commander bracket (power level) for a decklist. Provide commander name(s) and a list of card names in the main deck. Returns bracket tag and any bracket-relevant findings.
decklistarraycommandersarraydraft_card_ratingsGet win rate and draft performance data for cards in a set. Key metrics: GIH WR (ever_drawn_win_rate), ALSA (avg_seen), OH WR (opening_hand_win_rate), IWD (drawn_improvement_win_rate). Note: 17Lands data skews toward above-average players (~56% baseline WR). Cards with <500 ga...5 paramsGet win rate and draft performance data for cards in a set. Key metrics: GIH WR (ever_drawn_win_rate), ALSA (avg_seen), OH WR (opening_hand_win_rate), IWD (drawn_improvement_win_rate). Note: 17Lands data skews toward above-average players (~56% baseline WR). Cards with <500 ga...
limitintegersort_bystringset_codestringevent_typestringresponse_formatstringdetailed · concisedefault: detaileddraft_archetype_statsGet win rates by color pair/archetype for a draft set. Note: start_date and end_date are required by the 17Lands API. Args: set_code: Three-letter set code (e.g. "LCI", "MKM", "OTJ"). start_date: Start date in YYYY-MM-DD format. end_date: End date in YYYY-MM-DD format. event_t...4 paramsGet win rates by color pair/archetype for a draft set. Note: start_date and end_date are required by the 17Lands API. Args: set_code: Three-letter set code (e.g. "LCI", "MKM", "OTJ"). start_date: Start date in YYYY-MM-DD format. end_date: End date in YYYY-MM-DD format. event_t...
end_datestringset_codestringevent_typestringstart_datestringedhrec_commander_staplesGet the most-played cards for a commander with synergy scores and inclusion rates. Shows which cards are most commonly played with this commander and how synergistic they are (vs. generic popularity).4 paramsGet the most-played cards for a commander with synergy scores and inclusion rates. Shows which cards are most commonly played with this commander and how synergistic they are (vs. generic popularity).
limitintegercategoryvaluecommander_namestringresponse_formatstringdetailed · concisedefault: detailededhrec_card_synergyGet synergy data for a specific card with a specific commander. Shows how synergistic the card is with the commander compared to its general popularity, plus how many decks include it. Args: card_name: The card to check (e.g. "Spore Frog"). commander_name: The commander to che...2 paramsGet synergy data for a specific card with a specific commander. Shows how synergistic the card is with the commander compared to its general popularity, plus how many decks include it. Args: card_name: The card to check (e.g. "Spore Frog"). commander_name: The commander to che...
card_namestringcommander_namestringmoxfield_decklistFetch a full decklist from Moxfield by deck ID or URL. Returns the complete decklist organized by board (commanders, mainboard, sideboard, companions) with card names and quantities.1 paramsFetch a full decklist from Moxfield by deck ID or URL. Returns the complete decklist organized by board (commanders, mainboard, sideboard, companions) with card names and quantities.
deck_idstringmoxfield_deck_infoGet metadata for a Moxfield deck (name, format, author, dates). Returns deck metadata without the full card list. Use ``decklist`` for the complete card list.1 paramsGet metadata for a Moxfield deck (name, format, author, dates). Returns deck metadata without the full card list. Use ``decklist`` for the complete card list.
deck_idstringmoxfield_search_decksSearch public Moxfield decks by format, keyword, or sort order. Returns a paginated list of deck summaries with name, format, author, colors, and card counts.5 paramsSearch public Moxfield decks by format, keyword, or sort order. Returns a paginated list of deck summaries with name, format, author, colors, and card counts.
pageintegersortstringqueryvalueformatvaluepage_sizeintegermoxfield_user_decksList a user's public decks on Moxfield. Verifies the user exists, then searches for their public decks. Optionally filter by format.2 paramsList a user's public decks on Moxfield. Verifies the user exists, then searches for their public decks. Optionally filter by format.
formatvalueusernamestringbulk_card_lookupLook up a Magic card by exact name using Scryfall bulk data. Returns full card details including mana cost, type, oracle text, colors, power/toughness, prices, legalities, and EDHREC rank. Case-insensitive.2 paramsLook up a Magic card by exact name using Scryfall bulk data. Returns full card details including mana cost, type, oracle text, colors, power/toughness, prices, legalities, and EDHREC rank. Case-insensitive.
namestringresponse_formatstringdetailed · concisedefault: detailedbulk_card_searchSearch for Magic cards in Scryfall bulk data. Args: query: Substring to search for (case-insensitive). search_field: Field to search in -- "name", "type", or "text". limit: Maximum number of results to return (default 20).4 paramsSearch for Magic cards in Scryfall bulk data. Args: query: Substring to search for (case-insensitive). search_field: Field to search in -- "name", "type", or "text". limit: Maximum number of results to return (default 20).
limitintegerquerystringsearch_fieldstringname · type · textdefault: nameresponse_formatstringdetailed · concisedefault: detailedbulk_format_legalityBatch legality check for cards in a specific format. Returns a markdown table showing the legality status of each card in the specified format. Handles common format aliases (e.g. 'edh' for 'commander').2 paramsBatch legality check for cards in a specific format. Returns a markdown table showing the legality status of each card in the specified format. Handles common format aliases (e.g. 'edh' for 'commander').
cardsarrayformatstringbulk_format_searchSearch for legal cards in a specific format using natural language. Combines format legality filtering with name/type/text search and optional color identity, price, and rarity constraints. Results are sorted by EDHREC rank (most popular first).7 paramsSearch for legal cards in a specific format using natural language. Combines format legality filtering with name/type/text search and optional color identity, price, and rarity constraints. Results are sorted by EDHREC rank (most popular first).
limitintegerquerystringformatstringrarityvaluemax_pricevaluecolor_identityvalueresponse_formatstringdetailed · concisedefault: detailedbulk_format_staplesFind the most popular (staple) cards legal in a format. Ranking adapts to the format: singleton formats (Commander, Brawl, Oathbreaker) use EDHREC rank; competitive formats use MTGGoldfish tournament frequency when available, falling back to a mana-efficiency heuristic.6 paramsFind the most popular (staple) cards legal in a format. Ranking adapts to the format: singleton formats (Commander, Brawl, Oathbreaker) use EDHREC rank; competitive formats use MTGGoldfish tournament frequency when available, falling back to a mana-efficiency heuristic.
colorvaluelimitintegerformatstringcard_typevalueranking_modestringauto · edhrec · competitive · tournamentdefault: autoresponse_formatstringdetailed · concisedefault: detailedbulk_similar_cardsFind cards similar to a given card. Scores similarity based on shared keywords, type words, CMC proximity, and oracle text overlap. Optionally filter by format legality and price.5 paramsFind cards similar to a given card. Scores similarity based on shared keywords, type words, CMC proximity, and oracle text overlap. Optionally filter by format legality and price.
limitintegerformatvaluecard_namestringmax_pricevalueresponse_formatstringdetailed · concisedefault: detailedbulk_random_cardGet a random Magic card, optionally filtered by format, color, type, and rarity. Returns full card details in the same format as card_lookup.4 paramsGet a random Magic card, optionally filtered by format, color, type, and rarity. Returns full card details in the same format as card_lookup.
formatvaluerarityvaluecard_typevaluecolor_identityvaluebulk_ban_listGet the banned and restricted cards for a format. Returns alphabetically sorted lists of banned and restricted cards, including their type lines.1 paramsGet the banned and restricted cards for a format. Returns alphabetically sorted lists of banned and restricted cards, including their type lines.
formatstringbulk_card_in_formatsShow a card's legality across all Magic formats. Returns a table with the card's legality status in each format, ordered with the most common formats first.1 paramsShow a card's legality across all Magic formats. Returns a table with the card's legality status in each format, ordered with the most common formats first.
card_namestringspicerack_recent_tournamentsList recent tournaments for a format with dates, player counts, and IDs. Use the tournament ID from the results with ``tournament_results`` to see full standings and decklists.4 paramsList recent tournaments for a format with dates, player counts, and IDs. Use the tournament ID from the results with ``tournament_results`` to see full standings and decklists.
limitintegerformatstringnum_daysintegerresponse_formatstringdetailed · concisedefault: detailedspicerack_tournament_resultsGet full standings and decklists for a specific tournament. Look up a tournament by its Spicerack ID. Use ``recent_tournaments`` first to find tournament IDs.5 paramsGet full standings and decklists for a specific tournament. Look up a tournament by its Spicerack ID. Use ``recent_tournaments`` first to find tournament IDs.
top_nintegerformatvaluenum_daysintegertournament_idstringresponse_formatstringdetailed · concisedefault: detailedspicerack_format_decklistsFind top-performing decklists across recent tournaments for a format. Collects top-4 finishers with Moxfield decklists from recent events. Use ``moxfield_decklist`` to fetch the full card list for a deck.4 paramsFind top-performing decklists across recent tournaments for a format. Collects top-4 finishers with Moxfield decklists from recent events. Use ``moxfield_decklist`` to fetch the full card list for a deck.
limitintegerformatstringnum_daysintegerresponse_formatstringdetailed · concisedefault: detailedgoldfish_metagameGet the current metagame breakdown for a competitive format. Shows top archetypes with meta share percentages, deck counts, and estimated paper prices.2 paramsGet the current metagame breakdown for a competitive format. Shows top archetypes with meta share percentages, deck counts, and estimated paper prices.
formatstringresponse_formatstringdetailed · concisedefault: detailedgoldfish_archetype_listGet a sample decklist for an archetype in a format. Returns deck metadata (author, event, result, date) and the full mainboard and sideboard card list.3 paramsGet a sample decklist for an archetype in a format. Returns deck metadata (author, event, result, date) and the full mainboard and sideboard card list.
formatstringarchetypestringresponse_formatstringdetailed · concisedefault: detailedgoldfish_format_staplesGet the most-played cards in a format with deck inclusion percentages. Shows which cards appear most frequently across all archetypes in the format, with average copies played per deck.3 paramsGet the most-played cards in a format with deck inclusion percentages. Shows which cards appear most frequently across all archetypes in the format, with average copies played per deck.
limitintegerformatstringresponse_formatstringdetailed · concisedefault: detailedgoldfish_deck_priceGet the estimated paper price for an archetype deck. Returns the total estimated cost of the deck based on current card prices from MTGGoldfish.3 paramsGet the estimated paper price for an archetype deck. Returns the total estimated cost of the deck based on current card prices from MTGGoldfish.
formatstringarchetypestringresponse_formatstringdetailed · concisedefault: detailedcommander_overviewComprehensive commander profile combining data from all available sources. Returns card details, top combos, EDHREC staples, and synergy scores. Degrades gracefully if optional sources (EDHREC, Spellbook) are unavailable.2 paramsComprehensive commander profile combining data from all available sources. Returns card details, top combos, EDHREC staples, and synergy scores. Degrades gracefully if optional sources (EDHREC, Spellbook) are unavailable.
commander_namestringresponse_formatstringdetailed · concisedefault: detailedevaluate_upgradeAssess whether a card is worth adding to a specific commander deck. Returns card details, price, synergy score, and combos enabled for the caller to assess. Degrades gracefully if optional sources (EDHREC, Spellbook) are unavailable.3 paramsAssess whether a card is worth adding to a specific commander deck. Returns card details, price, synergy score, and combos enabled for the caller to assess. Degrades gracefully if optional sources (EDHREC, Spellbook) are unavailable.
card_namestringcommander_namestringresponse_formatstringdetailed · concisedefault: detaileddraft_pack_pickRank cards in a draft pack using 17Lands win rate data. Provides GIH WR, ALSA, IWD stats, and color fit analysis based on current picks. Requires 17Lands to be enabled.4 paramsRank cards in a draft pack using 17Lands win rate data. Provides GIH WR, ALSA, IWD stats, and color fit analysis based on current picks. Requires 17Lands to be enabled.
packarrayset_codestringcurrent_picksvalueresponse_formatstringdetailed · concisedefault: detailedsuggest_cutsIdentify the weakest cards to cut from a commander decklist. Scores cards by synergy, inclusion rate, and combo membership. Degrades gracefully if EDHREC or Spellbook backends fail (uses whatever data is available).4 paramsIdentify the weakest cards to cut from a commander decklist. Scores cards by synergy, inclusion rate, and combo membership. Degrades gracefully if EDHREC or Spellbook backends fail (uses whatever data is available).
decklistarraynum_cutsintegercommander_namestringresponse_formatstringdetailed · concisedefault: detailedcard_comparisonCompare 2-5 cards side-by-side for a specific commander deck. Shows mana cost, type, synergy, inclusion rate, combo count, and price for each card. Scryfall and Spellbook required; EDHREC optional.3 paramsCompare 2-5 cards side-by-side for a specific commander deck. Shows mana cost, type, synergy, inclusion rate, combo count, and price for each card. Scryfall and Spellbook required; EDHREC optional.
cardsarraycommander_namestringresponse_formatstringdetailed · concisedefault: detailedbudget_upgradeSuggest budget-friendly upgrades for a commander deck. Ranks EDHREC staples by synergy-per-dollar within the given budget ceiling. Requires EDHREC (for staples) and Scryfall (for prices).4 paramsSuggest budget-friendly upgrades for a commander deck. Ranks EDHREC staples by synergy-per-dollar within the given budget ceiling. Requires EDHREC (for staples) and Scryfall (for prices).
budgetnumbercommander_namestringnum_suggestionsintegerresponse_formatstringdetailed · concisedefault: detaileddeck_analysisFull decklist health check — mana curve, colors, combos, bracket, budget, synergy. Uses all available backends: Scryfall bulk data for rate-limit-free card resolution, Scryfall API as fallback, Spellbook for combos and bracket estimation, EDHREC for synergy scores. Degrades gr...3 paramsFull decklist health check — mana curve, colors, combos, bracket, budget, synergy. Uses all available backends: Scryfall bulk data for rate-limit-free card resolution, Scryfall API as fallback, Spellbook for combos and bracket estimation, EDHREC for synergy scores. Degrades gr...
decklistarraycommander_namestringresponse_formatstringdetailed · concisedefault: detailedset_overviewDraft format overview — top commons/uncommons and trap rares. Uses 17Lands card ratings to provide a data-driven format breakdown. Requires 17Lands to be enabled.3 paramsDraft format overview — top commons/uncommons and trap rares. Uses 17Lands card ratings to provide a data-driven format breakdown. Requires 17Lands to be enabled.
set_codestringevent_typestringresponse_formatstringdetailed · concisedefault: detailedtheme_searchFind cards matching a theme — mechanical, tribal, or abstract/flavorful. Maps themes to oracle text patterns and searches bulk data. Groups results by relevance tier (strong match, moderate match, flavor match).6 paramsFind cards matching a theme — mechanical, tribal, or abstract/flavorful. Maps themes to oracle text patterns and searches bulk data. Groups results by relevance tier (strong match, moderate match, flavor match).
limitintegerthemestringformatvaluemax_pricevaluecolor_identityvalueresponse_formatstringdetailed · concisedefault: detailedbuild_aroundFind synergistic cards for 1-5 build-around cards in any format. Analyzes oracle text for key mechanics, searches for synergies, and checks combo potential. Groups results by role (enablers, payoffs, support).5 paramsFind synergistic cards for 1-5 build-around cards in any format. Analyzes oracle text for key mechanics, searches for synergies, and checks combo potential. Groups results by role (enablers, payoffs, support).
cardsarraylimitintegerbudgetvalueformatstringresponse_formatstringdetailed · concisedefault: detailedcomplete_deckIdentify gaps in a partial decklist and suggest cards to fill them. Analyzes mana curve, card roles, and format-specific ratios, then suggests cards for underrepresented categories.5 paramsIdentify gaps in a partial decklist and suggest cards to fill them. Analyzes mana curve, card roles, and format-specific ratios, then suggests cards for underrepresented categories.
budgetvalueformatstringdecklistarraycommandervalueresponse_formatstringdetailed · concisedefault: detailedcommander_comparisonCompare 2-5 commanders head-to-head: stats, combos, staples, popularity. Side-by-side comparison table with mana cost, color identity, EDHREC rank, combo count, and shared/unique staples.2 paramsCompare 2-5 commanders head-to-head: stats, combos, staples, popularity. Side-by-side comparison table with mana cost, color identity, EDHREC rank, combo count, and shared/unique staples.
commandersarrayresponse_formatstringdetailed · concisedefault: detailedtribal_staplesBest cards for a creature type — lords, synergy pieces, and top members. Groups results by: lords/anthems, tribal synergy, best members, tribal support.5 paramsBest cards for a creature type — lords, synergy pieces, and top members. Groups results by: lords/anthems, tribal synergy, best members, tribal support.
limitintegertribestringformatvaluecolor_identityvalueresponse_formatstringdetailed · concisedefault: detailedprecon_upgradeAnalyze and upgrade a Commander precon — identify weakest cards, suggest replacements. Pairs each upgrade with a specific cut, explaining the synergy improvement.5 paramsAnalyze and upgrade a Commander precon — identify weakest cards, suggest replacements. Pairs each upgrade with a specific cut, explaining the synergy improvement.
budgetnumberdecklistarraycommanderstringnum_upgradesintegerresponse_formatstringdetailed · concisedefault: detailedcolor_identity_staplesTop cards across ALL commanders in a color identity. Uses EDHREC aggregated data when available, falls back to EDHREC rank from bulk data.4 paramsTop cards across ALL commanders in a color identity. Uses EDHREC aggregated data when available, falls back to EDHREC rank from bulk data.
limitintegercategoryvaluecolor_identitystringresponse_formatstringdetailed · concisedefault: detailedsealed_pool_buildBuild 1-3 decks from a sealed pool using card quality and color pair analysis. Evaluates each 2-color pair, selects best cards, and suggests land splits. Uses 17Lands data when available for card quality scoring.3 paramsBuild 1-3 decks from a sealed pool using card quality and color pair analysis. Evaluates each 2-color pair, selects best cards, and suggests land splits. Uses 17Lands data when available for card quality scoring.
poolarrayset_codestringresponse_formatstringdetailed · concisedefault: detaileddraft_signal_readAnalyze draft picks and recommend a direction based on color signals. Uses ALSA data to detect which colors are open (cards seen later than expected = open).4 paramsAnalyze draft picks and recommend a direction based on color signals. Uses ALSA data to detect which colors are open (cards seen later than expected = open).
picksarrayset_codestringcurrent_packvalueresponse_formatstringdetailed · concisedefault: detaileddraft_log_reviewReview a completed draft — pick-by-pick GIH WR analysis and key decision points. Identifies where you could have taken a higher-WR card, pivot points, and overall draft grade.4 paramsReview a completed draft — pick-by-pick GIH WR analysis and key decision points. Identifies where you could have taken a higher-WR card, pivot points, and overall draft grade.
picksarrayset_codestringfinal_deckvalueresponse_formatstringdetailed · concisedefault: detailedrotation_checkCheck Standard rotation status and identify which cards are rotating. Shows sets currently in Standard with rotation dates. If cards provided, identifies which are in rotating sets and suggests replacements.2 paramsCheck Standard rotation status and identify which cards are rotating. Shows sets currently in Standard with rotation dates. If cards provided, identifies which are in rotating sets and suggests replacements.
cardsvalueresponse_formatstringdetailed · concisedefault: detailedmetagame_snapshotGet the current metagame breakdown for a competitive format. Shows top archetypes with meta share %, tier classification, and prices. Uses MTGGoldfish as primary source with Spicerack tournament data as fallback.2 paramsGet the current metagame breakdown for a competitive format. Shows top archetypes with meta share %, tier classification, and prices. Uses MTGGoldfish as primary source with Spicerack tournament data as fallback.
formatstringresponse_formatstringdetailed · concisedefault: detailedarchetype_decklistGet the stock decklist for a competitive archetype. Returns a full decklist (mainboard + sideboard) with deck metadata and total price when available. Archetype name is fuzzy-matched.3 paramsGet the stock decklist for a competitive archetype. Returns a full decklist (mainboard + sideboard) with deck metadata and total price when available. Archetype name is fuzzy-matched.
formatstringarchetypestringresponse_formatstringdetailed · concisedefault: detailedarchetype_comparisonCompare 2-4 competitive archetypes side-by-side. Shows price, colors, key cards, shared staples, and differences.3 paramsCompare 2-4 competitive archetypes side-by-side. Shows price, colors, key cards, shared staples, and differences.
formatstringarchetypesarrayresponse_formatstringdetailed · concisedefault: detailedformat_entry_guideGet a beginner-oriented guide for entering a competitive format. Shows archetypes sorted by budget accessibility, cross-archetype staples (buy once, play everywhere), and format rules summary.3 paramsGet a beginner-oriented guide for entering a competitive format. Shows archetypes sorted by budget accessibility, cross-archetype staples (buy once, play everywhere), and format rules summary.
budgetvalueformatstringresponse_formatstringdetailed · concisedefault: detailedsuggest_sideboardSuggest a 15-card sideboard for a competitive deck. Analyzes the main deck's weaknesses and recommends sideboard cards with per-card reasoning. Works with heuristic analysis alone; enhanced with MTGGoldfish frequency data when available.4 paramsSuggest a 15-card sideboard for a competitive deck. Analyzes the main deck's weaknesses and recommends sideboard cards with per-card reasoning. Works with heuristic analysis alone; enhanced with MTGGoldfish frequency data when available.
formatstringdecklistarraymeta_contextvalueresponse_formatstringdetailed · concisedefault: detailedsideboard_guideGet a specific sideboard in/out plan for a named matchup. Given a full 75 and a matchup archetype, produces specific boarding instructions with reasoning.5 paramsGet a specific sideboard in/out plan for a named matchup. Given a full 75 and a matchup archetype, produces specific boarding instructions with reasoning.
formatstringmatchupstringdecklistarraysideboardarrayresponse_formatstringdetailed · concisedefault: detailedsideboard_matrixGenerate a sideboard matrix for a deck across common matchups. Matrix shows which sideboard cards come IN/OUT/FLEX for each matchup. Auto-detects top matchups from metagame data or uses provided matchup list.5 paramsGenerate a sideboard matrix for a deck across common matchups. Matrix shows which sideboard cards come IN/OUT/FLEX for each matchup. Auto-detects top matchups from metagame data or uses provided matchup list.
formatstringdecklistarraymatchupsvaluesideboardarrayresponse_formatstringdetailed · concisedefault: detaileddeck_validateValidate a decklist against a format's construction rules. Checks legality, deck size, copy limits, color identity (Commander), singleton rules, and Pauper rarity. Returns VALID or INVALID with actionable error messages.5 paramsValidate a decklist against a format's construction rules. Checks legality, deck size, copy limits, color identity (Commander), singleton rules, and Pauper rarity. Returns VALID or INVALID with actionable error messages.
formatstringdecklistarraycommandervaluesideboardvalueresponse_formatstringdetailed · concisedefault: detailedsuggest_mana_baseSuggest a mana base for a decklist based on color pip distribution. Analyzes color requirements, recommends land count, and suggests format-legal dual lands. Handles hybrid and phyrexian mana.4 paramsSuggest a mana base for a decklist based on color pip distribution. Analyzes color requirements, recommends land count, and suggests format-legal dual lands. Handles hybrid and phyrexian mana.
formatstringdecklistarraytotal_landsvalueresponse_formatstringdetailed · concisedefault: detailedprice_comparisonCompare prices across multiple cards using Scryfall bulk data. Returns a markdown table with USD, USD foil, and EUR prices sorted by USD descending.2 paramsCompare prices across multiple cards using Scryfall bulk data. Returns a markdown table with USD, USD foil, and EUR prices sorted by USD descending.
cardsarrayresponse_formatstringdetailed · concisedefault: detailedrules_lookupLook up MTG Comprehensive Rules by number or keyword search. Returns matching rules with full text, parent context, and subrules.3 paramsLook up MTG Comprehensive Rules by number or keyword search. Returns matching rules with full text, parent context, and subrules.
querystringsectionvalueresponse_formatstringdetailed · concisedefault: detailedkeyword_explainExplain an MTG keyword with rules text, examples, and interactions. Returns the rules definition, reminder text, and up to 5 example cards from bulk data.2 paramsExplain an MTG keyword with rules text, examples, and interactions. Returns the rules definition, reminder text, and up to 5 example cards from bulk data.
keywordstringresponse_formatstringdetailed · concisedefault: detailedrules_interactionExplain how two mechanics or cards interact under MTG rules. Returns relevant rules, step-by-step resolution, and common misconceptions.3 paramsExplain how two mechanics or cards interact under MTG rules. Returns relevant rules, step-by-step resolution, and common misconceptions.
mechanic_astringmechanic_bstringresponse_formatstringdetailed · concisedefault: detailedrules_scenarioResolve a game scenario step-by-step using MTG rules. Covers priority, stack resolution, state-based actions, and triggers with rule citations.2 paramsResolve a game scenario step-by-step using MTG rules. Covers priority, stack resolution, state-based actions, and triggers with rule citations.
scenariostringresponse_formatstringdetailed · concisedefault: detailedcombat_calculatorCalculate combat step-by-step with keyword interactions. Resolves declare attackers → declare blockers → damage steps → state-based actions. Looks up card keywords from bulk data if card names are provided.4 paramsCalculate combat step-by-step with keyword interactions. Resolves declare attackers → declare blockers → damage steps → state-based actions. Looks up card keywords from bulk data if card names are provided.
blockersarraykeywordsvalueattackersarrayresponse_formatstringdetailed · concisedefault: detailed
mtg-mcp is an unofficial MCP server for Magic: The Gathering deckbuilding. It
connects MCP clients to Scryfall card data, local deck workspaces, optional
Moxfield imports, Archidekt writeback, Playgroup.gg playgroup data, Commander
Spellbook combos, and API-backed deckbuilding evidence.
It is not affiliated with Hasbro, Wizards of the Coast, Magic: The Gathering, Scryfall, Moxfield, Archidekt, Playgroup.gg, or Commander Spellbook.
The easiest manual install is the published NuGet tool package:
dotnet tool install --global Nccurry.MtgMcp
mtg-mcp --version
mtg-mcp --smoke
To upgrade an existing install:
dotnet tool update --global Nccurry.MtgMcp
PowerShell note: when invoking the executable by a quoted full path, prefix it with the call operator:
& "C:\Users\you\.dotnet\tools\mtg-mcp.exe" --version
Registry-aware MCP clients can discover the server by its registry name:
io.github.nccurry/mtg-mcp
The registry entry points to the NuGet package Nccurry.MtgMcp and uses stdio
transport. You can also inspect it in the
official MCP Registry.
Release archives are attached to GitHub Releases for the published desktop runtimes:
win-x64: download mtg-mcp-<version>-win-x64.zip.linux-x64: download mtg-mcp-<version>-linux-x64.tar.gz.osx-arm64: download mtg-mcp-<version>-osx-arm64.tar.gz.Extract the archive and configure your MCP client to run the extracted
mtg-mcp executable.
For local development or testing an unreleased branch:
git clone https://github.com/nccurry/mtg-mcp.git
cd mtg-mcp
./bootstrap.sh
task install:local
On Windows:
git clone https://github.com/nccurry/mtg-mcp.git
cd mtg-mcp
.\bootstrap.ps1
task install:local
task install:local packs the current checkout, publishes a self-contained
binary for the current machine, and updates the configured local MCP command
path when possible.
Configure your MCP client to run the mtg-mcp stdio command. Scryfall lookup
and local deck analysis work without account credentials.
Codex example:
codex mcp add mtg-mcp \
--env MTGMCP__OPERATION_MODE=plan \
-- mtg-mcp
JSON MCP client example:
{
"mcpServers": {
"mtg-mcp": {
"command": "mtg-mcp",
"env": {
"MTGMCP__OPERATION_MODE": "plan"
}
}
}
}
Set MTGMCP__OPERATION_MODE explicitly:
read-only: lookup and analysis only.plan: lookup, analysis, metadata refresh, and saved edit plans.apply: deck edits, checkpoints, and Archidekt writeback. Writeback still
requires opening the Archidekt workspace with writeback enabled.| Area | What the MCP exposes |
|---|---|
| Card data | Scryfall search with optional format legality filtering, fuzzy card lookup, prints, rulings, and Scryfall query syntax guidance. |
| Workspaces | Create, import, parse, export, open, validate, summarize, migrate, and update local or Archidekt-backed decks. |
| Deck editing | Add, remove, move, categorize, annotate, and set quantities; create, preview, list, apply, or delete persisted edit plans. |
| Moxfield | Import public or unlisted decks as generic local workspaces while preserving boards, tags, and print metadata when available. |
| Archidekt | Create decks, open decks, list visible decks, write back when enabled, copy local workspaces into Archidekt, and manage deck checkpoints. |
| Playgroup.gg | Check auth, get playgroups and decks, list playgroup users/decks, list user decks, rank decks by power, Elo, win rate, competitive rating, games played, or average win turn, and score candidate cards against local-meta pressure. |
| Analysis | Mana base, curve, colors, categories, cost, legality, draw odds, consistency, best practices, Commander bracket, card facets, and explicit facet predicates. |
| Simulation | Goldfish runs, projected board states, win-turn estimates, deterministic performance analysis, plan comparisons, and Archidekt reference comparisons. |
| Recommendations | New-card swap evidence, Commander aggregate cards/tags, win-condition evidence, caller-supplied Scryfall queries, lesser-known cards, commander trends, exemplar decks, raw source evidence, and Reddit discussion evidence. |
| Combos | Catalog-backed combo search/details, deck combo analysis, route labels, terminal/needs-payoff flags, near-misses, and clearly separated local heuristics. |
| Deck intent | Optional human-readable deck goals, budgets, local meta, role targets, simulation profiles, win routes, preferences, avoided cards, and protected cards. |
Most users can ask naturally instead of naming tools:
Open this Archidekt deck locally, analyze the mana base, and suggest fixes under $10.
Import this Moxfield deck, dry-run copying it to a new private Archidekt deck, and preserve its tags.
Moxfield role tags import as secondary workspace categories. When copied to
Archidekt, those tag categories are marked as not included in deck totals so
Mainboard, Commander, and other board categories still control legality and
deck size. Existing Archidekt copies can be repaired or refreshed with
archidekt_copy_workspace using replaceExistingDestination=true.
Find budget replacements for cards over $20 and preview the plan before changing anything.
List decks from this Playgroup URL and rank them by win rate.
Find new cards for this deck from the last year and explain the source evidence.
Goldfish this deck through turn 6 and compare the previewed plan against it.
mtg-mcp.json is the only JSON config file the server reads. Environment
variables use the MTGMCP__... names below; the equivalent JSON path is under
MtgMcp. For example, MTGMCP__PLAYGROUP__CREDENTIALS_FILE maps to
MtgMcp.Playgroup.CredentialsFile.
Minimal mtg-mcp.json:
{
"MtgMcp": {
"OperationMode": "plan",
"DataDir": "C:/Users/you/AppData/Local/mtg-mcp"
}
}
Common credential config:
{
"MtgMcp": {
"Archidekt": {
"CredentialsFile": "C:/Users/you/.mtg-mcp/archidekt.json"
},
"Playgroup": {
"CredentialsFile": "C:/Users/you/.mtg-mcp/playgroup.json"
},
"Reddit": {
"CredentialsFile": "C:/Users/you/.mtg-mcp/reddit.json"
}
}
}
archidekt.json:
{
"username": "you-or-you@example.com",
"password": "..."
}
Archidekt does not expose a public self-service page for generating refresh
tokens, so Archidekt credentials are configured as username and password only.
The username value can be your Archidekt username or account email address.
playgroup.json:
{
"apiKey": "..."
}
reddit.json:
{
"clientId": "...",
"clientSecret": "...",
"refreshToken": "...",
"userAgent": "mtg-mcp/1.0 by your-reddit-username",
"scope": "read"
}
Reddit uses OAuth bearer tokens through https://oauth.reddit.com, not a
long-lived API key. A refresh token plus app client id is the preferred local
setup; a temporary accessToken or bearerToken can be stored for short-lived
testing.
You can also create an Archidekt credentials file with:
mtg-mcp auth archidekt \
--credentials-file "$HOME/.mtg-mcp/archidekt.json" \
--username "you-or-you@example.com" \
--password "..."
PowerShell equivalent:
mtg-mcp auth archidekt `
--credentials-file "$env:USERPROFILE\.mtg-mcp\archidekt.json" `
--username "you-or-you@example.com" `
--password "..."
You can create a Playgroup credentials file the same way:
mtg-mcp auth playgroup \
--credentials-file "$HOME/.mtg-mcp/playgroup.json" \
--api-key "..."
PowerShell equivalent:
mtg-mcp auth playgroup `
--credentials-file "$env:USERPROFILE\.mtg-mcp\playgroup.json" `
--api-key "..."
Create a Reddit OAuth credentials file with:
mtg-mcp auth reddit \
--credentials-file "$HOME/.mtg-mcp/reddit.json" \
--client-id "..." \
--client-secret "..." \
--refresh-token "..." \
--user-agent "mtg-mcp/1.0 by your-reddit-username"
PowerShell equivalent:
mtg-mcp auth reddit `
--credentials-file "$env:USERPROFILE\.mtg-mcp\reddit.json" `
--client-id "..." `
--client-secret "..." `
--refresh-token "..." `
--user-agent "mtg-mcp/1.0 by your-reddit-username"
Supported environment settings. In rows with slashes, repeat the full prefix for each abbreviated suffix.
| Setting | Use |
|---|---|
MTGMCP__OPERATION_MODE | read-only, plan, or apply. Set explicitly; the app default is apply. |
MTGMCP__DATA_DIR | Local decks, plans, workspaces, and source-fact cache. |
MTGMCP__INTELLIGENCE__ANALYSIS_DEPTH | Recommendation source depth: minimal, balanced, or best. |
MTGMCP__INTELLIGENCE__CACHE__MODE | Source-fact cache: persisted, memory, or off. |
MTGMCP__INTELLIGENCE__CACHE__MAX_BYTES / MAX_ENTRIES | Persisted cache limits. |
MTGMCP__INTELLIGENCE__CACHE__TTLS__SCRYFALL_CARD_METADATA / SCRYFALL_SEARCH / COMMANDERSPELLBOOK / DECK_SEARCH / DECK_DETAILS / CORPUS_SIGNALS | Per-source cache TTLs such as 24h or 7d. |
MTGMCP__INTELLIGENCE__SOURCES__SCRYFALL__ENABLED / SCRYFALL_TAGGER__ENABLED / COMMANDERSPELLBOOK__ENABLED / TOPDECK__ENABLED / SPICERACK__ENABLED / EDHREC__ENABLED / EDHTOP16__ENABLED / REDDIT__ENABLED | Enable or disable recommendation sources. |
MTGMCP__INTELLIGENCE__SOURCES__TOPDECK__API_KEY / SPICERACK__API_KEY | Optional source API keys. |
MTGMCP__INTELLIGENCE__SOURCES__EDHREC__ALLOW_UNOFFICIAL_API / EDHTOP16__ALLOW_UNOFFICIAL_API / REDDIT__ALLOW_UNOFFICIAL_API | Allow bounded unofficial structured JSON endpoints for those sources. |
MTGMCP__INTELLIGENCE__SOURCES__TOPDECK__BASE_ADDRESS / SPICERACK__BASE_ADDRESS / EDHREC__BASE_ADDRESS / EDHTOP16__BASE_ADDRESS / REDDIT__BASE_ADDRESS | Source API URL overrides. |
MTGMCP__ARCHIDEKT__BASE_ADDRESS / CREDENTIALS_FILE / USERNAME / PASSWORD | Archidekt API and credential settings. The username value may be an Archidekt username or account email. |
MTGMCP__ARCHIDEKT__RATE_LIMIT__MAX_REQUESTS / WINDOW_SECONDS | Optional process-local Archidekt pacing. For example, 30 requests per 60 seconds leaves room for browser activity; 0 max requests disables proactive pacing. |
MTGMCP__MOXFIELD__BASE_ADDRESS / USER_AGENT / CURL_FALLBACK_ENABLED / CURL_PATH | Moxfield import endpoint settings. Imports use an anonymous, unofficial endpoint; when Moxfield blocks .NET HTTP requests, the adapter can retry through curl if available. |
MTGMCP__PLAYGROUP__BASE_ADDRESS / API_KEY / CREDENTIALS_FILE | Playgroup.gg API settings. Credential files may use JSON or apiKey=value, accessToken=value, or token=value lines. |
MTGMCP__REDDIT__CLIENT_ID / CLIENT_SECRET / REFRESH_TOKEN | Reddit OAuth app credentials. CLIENT_SECRET is optional for installed-client style flows. |
MTGMCP__REDDIT__ACCESS_TOKEN / BEARER_TOKEN / EXPIRES_AT_UTC | Temporary Reddit bearer token override for short-lived local testing. |
MTGMCP__REDDIT__USER_AGENT / SCOPE / DEVICE_ID / CREDENTIALS_FILE | Reddit request identity and local credential file settings. SCOPE defaults to read. |
MTGMCP__REDDIT__OAUTH_BASE_ADDRESS / TOKEN_ENDPOINT | Reddit OAuth endpoint overrides for tests or controlled environments. Defaults target Reddit's OAuth API path and token endpoint. |
MTGMCP__SIMULATION__PROFILE_PATHS__0 / MTGMCP__SIMULATION__ALLOW_EXTERNAL_PROFILE_OVERRIDES | Optional external simulation profile JSON files or simple glob paths. Built-in profiles always remain available. |
MTGMCP__SCRYFALL__BASE_ADDRESS / USER_AGENT / MAX_RATE_LIMIT_RETRIES | Scryfall API settings. |
MTGMCP__COMMANDERSPELLBOOK__BASE_ADDRESS | Commander Spellbook API setting. |
Recommendation source providers give deckbuilding tools source-backed evidence
beyond the local decklist. Use source_list or mtg://sources/status to
report the current source status:
available: the provider can be queried.missing-config: the provider is implemented, but needs a configured key.disabled: the provider is implemented, but disabled by configuration.failed: the provider failed during a lookup; other sources still run.TopDeck.gg and Spicerack are API-backed decklist recommendation sources. They are enabled by default, but they do not make network calls until an API key is configured.
$env:MTGMCP__INTELLIGENCE__SOURCES__TOPDECK__API_KEY = "..."
$env:MTGMCP__INTELLIGENCE__SOURCES__SPICERACK__API_KEY = "..."
Equivalent mtg-mcp.json:
{
"MtgMcp": {
"Intelligence": {
"Sources": {
"TopDeck": {
"ApiKey": "..."
},
"Spicerack": {
"ApiKey": "..."
}
}
}
}
}
Set Enabled to false for either source to exclude it:
{
"MtgMcp": {
"Intelligence": {
"Sources": {
"TopDeck": {
"Enabled": false
}
}
}
}
}
TopDeck.gg uses the documented tournaments v2 API for tournament standings and decklists. Get a key from TopDeck.gg and keep visible attribution when using its data in user-facing output. Spicerack uses the documented public decklist database API for recent tournament results and decklist text.
EDHREC is enabled by default as an unofficial source for broad Commander
aggregate inclusion and synergy evidence. It uses structured JSON pages only,
never HTML scraping or browser automation. Set AllowUnofficialApi to false
to exclude it:
$env:MTGMCP__INTELLIGENCE__SOURCES__EDHREC__ALLOW_UNOFFICIAL_API = "false"
Equivalent mtg-mcp.json:
{
"MtgMcp": {
"Intelligence": {
"Sources": {
"Edhrec": {
"AllowUnofficialApi": false
}
}
}
}
}
EDHREC evidence is cached, attribution-sensitive, and not backed by a stable
public API contract. Treat it as popularity and synergy context, not tournament
performance or source decklist evidence. Commander theme filters are used only
when a source exposes deterministic theme slugs; other sources return an
unsupported-theme note instead of silently falling back to broader rows.
Reddit discussion evidence is also enabled by default for bounded searches over
Commander-focused subreddits. Configure Reddit OAuth credentials with
mtg-mcp auth reddit or MTGMCP__REDDIT__... settings to use bearer requests
against https://oauth.reddit.com. Public JSON fallback remains available only
when OAuth credentials are absent and AllowUnofficialApi permits it; treat that
fallback as unreliable and less preferred. EDHTop16 remains opt-in because it
uses an unofficial cEDH-focused endpoint rather than broad casual Commander data.
These tools consume recommendation sources or source-backed catalog evidence:
commander_get_aggregate_cards: returns commander card rows grouped by
source. It does not merge unlike populations when source is omitted.commander_get_tags: returns source-backed commander tags and themes.commander_get_win_condition_evidence: bundles aggregate cards, tags,
commander-containing combos, route classifications, and payoff candidates as
structured evidence only.deck_review_new_card_swaps: returns new-card swap evidence plus
deterministic cut evidence, not automatic edits.deck_find_exemplar_decks: returns high-signal source decks.deck_analyze_commander_trends: ranks card candidates from enabled sources.deck_find_lesser_known_cards: finds lower-known candidates with source evidence.source_explain_card_signal: explains one card's source signal in a deck context.source_search_evidence: inspects one source by key, such as topdeck,
spicerack, or edhrec, without making deckbuilding choices.source_search_reddit_discussions: returns bounded raw discussion rows and
card mentions; Reddit is never treated as prevalence evidence.TopDeck and Spicerack evidence is tournament and event decklist evidence. It is
not broad casual Commander inclusion data. Use bypassCache=true on source-backed
recommendation tools to bypass fresh source-fact cache entries for one call.
Use these resources inside an MCP client to verify setup without exposing secrets:
mtg://config/effectivemtg://server/infomtg://providers/archidekt/auth-statusmtg://providers/playgroup/auth-statusmtg://sources/statusWorkflow-first tools:
workspace_start, workspace_list, and
workspace_open; parse, export, and validate with workspace_parse_decklist,
workspace_export, workspace_validate, workspace_validate_legality,
workspace_checkpoint_create, workspace_refresh_from_source, and
workspace_diff_last_import.card_search, card_get, card_get_prints, and
card_get_rulings.deck_summarize, deck_analyze_structure,
deck_analyze_mana, deck_analyze_consistency, and
deck_analyze_performance; use deck_analyze_land_drop_odds for the
turn-by-turn land-drop question, or deck_re_evaluate for a compact updated
deck health snapshot. Use deck_compare_workspaces_analysis when you need
validation, legality, mana, consistency, cost, role, risk, and optional
performance deltas against an explicit or last-import baseline.deck_list_cards_by_category, or use
deck_list_cards_by_zone for active, sideboard, maybeboard, excluded, and
all-card views with optional duplicate collapsing; a newly created or
implicit Sideboard category is excluded from deck and price accounting
unless imported data explicitly says otherwise.deck_compare_goldfish. Its
default optimistic-goldfish-model preserves the existing heuristic output;
opt into rules-backed-goldfish-race-v1 for a conservative template life-total
race that reports explicit assumptions and unsupported-text warnings.deck_analyze_combos,
combo_search_by_card, combo_get_details, card_classify_win_routes, and
wincon_find_payoffs.deck_query_cards, deck_review_new_card_swaps,
commander_get_aggregate_cards, commander_get_win_condition_evidence,
source tools, and Playgroup tools.deck_plan_create, deck_plan_preview, and
deck_plan_compare_performance; apply only with deck_plan_apply.deck_add_cards_bulk,
deck_update_card_categories_bulk, and deck_move_cards_bulk when many
candidates or category changes should validate together and persist once.archidekt_copy_workspace,
archidekt_checkpoint_create, and playgroup_rank_decks when the workflow
needs provider-specific behavior.Public tool prefixes are archidekt_, card_, commander_, combo_,
deck_, playgroup_, server_, source_, wincon_, and workspace_.
Compatibility aliases from older 0.x releases are intentionally not exposed.
Useful resources:
mtg://workspace/{workspaceId},
mtg://workspace/{workspaceId}/summary,
mtg://workspace/{workspaceId}/intent.mtg://scryfall/syntax-cheatsheet,
mtg://formats/{format}/deck-rules, mtg://usage/workspace-selection,
mtg://usage/simulation-tool-selection, mtg://usage/operation-modes,
mtg://usage/deck-intent.mtg://config/effective, mtg://sources/status,
mtg://server/info, mtg://providers/{provider}/auth-status.Built-in prompts cover brewing, tuning, Commander common-card and win-condition evidence, cost reduction, power increases or reductions, Commander bracket reduction, mana-base work, land-drop risk, consistency, local meta tuning, new-card swaps, missing combo pieces, goldfishing, goal-focused packages, and rules/rulings checks.
For Playgroup-aware tuning, deck_score_cards_for_playgroup_meta scores
explicit candidate names with candidateSource=explicit-cards, or cards in
excluded workspace categories with candidateSource=excluded-workspace-cards,
with visible factor scores for plan fit, deterministic performance delta,
local-meta coverage, self-harm, price/bracket constraints, and evidence
confidence. Playgroup decks are ranked from fetched game participations;
Archidekt decklists are imported read-only when Playgroup exposes an Archidekt
URL.
Simulation results include the resolved simulation profile, why that profile was
chosen, route evidence, and warnings when a claim comes from fallback
heuristics. See docs/simulation-profiles.md
for the compact profile, deck-intent, and route syntax reference.
Several mutation and lookup tools default to bounded output so repeated agent
work does not flood context. Use detailLevel:"full" when you need full
workspace or facet payloads from tools such as deck_refresh_card_metadata,
deck_plan_apply, category edits, mutation tools, or card_facets_get.
Performance analysis tools preserve backward-compatible raw payloads by
default; use detailLevel:"normal" or detailLevel:"summary" on
deck_analyze_performance and deck_plan_compare_performance for bounded key
metrics, failed scenarios, stranded cards, warnings, and command-zone context.
Use mtg://usage/simulation-tool-selection when choosing between Stats Lab
performance, goldfish sequence, board projection, win-turn estimate, workspace
goldfish comparison, and Archidekt-backed comparison tools.
Deck intent is optional text stored in a workspace description, and in the
Archidekt deck description when writeback is enabled. Use deck_intent_suggest,
deck_intent_get, deck_intent_set, and deck_intent_clear.
Small example:
MTG MCP Deck Intent
Version: 2
Format: commander
Commander: Teysa Karlov
Goal: Aristocrats value with resilient sacrifice engines
Power Level: tuned-casual
Power Target: tuned casual
Heuristic Profile: command-zone-template
Simulation Profile: value
Archetype Tags: aristocrats, tokens, graveyard
Local Meta: graveyards, go-wide tokens
Budget: prefer upgrades under $10
Build Targets
Ramp: 8-10
Draw: 10-12
Interaction: 10-14
Simulation
Mulligan Style: multiplayer-london
Hold Interaction From Turn: 3
Minimum Interaction Held: 1
Prefer Commander On Curve: true
Win Routes
Blood Artist Drain: requires commander, tag:aristocrats, tokens>=4; earliest turn 6; kind finisher
Avoid
- deterministic infinite combos
End MTG MCP Deck Intent
Supported power levels are precon, casual, tuned-casual, high-power,
and cedh. Supported heuristic profiles are auto, commander-baseline,
command-zone-template, edhrec-foundation, mana-rich-39-land,
fifty-mana-sources, package-8x8, package-7x9, package-9x7,
seventy-five-percent, cedh-turbo, cedh-midrange, cedh-stax,
cedh-tempo, archetype-landfall, archetype-sea-monsters,
archetype-enchantments, and archetype-go-wide. Supported simulation
profiles are auto, neutral, aggro,
combo, control, value, big-mana, and stax. Package templates are
none, 8x8, 7x9, and 9x7.
For the full syntax, read mtg://usage/deck-intent or
docs/simulation-profiles.md.
mtg-mcp runs as a stdio MCP server. It stores local workspaces, edit plans,
annotations, and cache data under MTGMCP__DATA_DIR.
Archidekt writeback has two gates: the server must run in apply mode, and the
deck must be opened with writeback enabled. Multi-card Archidekt edits require
or create a checkpoint before applying a plan.
Card-only edit plans are applied as a single batch. Commander deck-size checks use the final included card count, so equal add/remove swaps can add before cutting as long as the finished deck remains legal.
Source-backed recommendations query structured APIs on demand and cache source
facts under the recommendation source cache directory. The cache stores source
facts, not final recommendations or prompt rationale. Pass bypassCache=true
to supported tools to bypass fresh cache entries for one call.
The source policy is API-only: official/documented APIs and explicitly allowed unofficial structured JSON endpoints may be used, but mtg-mcp does not scrape HTML, parse page markup, or use browser automation for source data.
Development is supported without installing the pinned SDK globally. From a
fresh checkout, run the bootstrap script for your platform. It installs Go Task
under .tools when needed, then delegates to task setup, which installs the
pinned .NET SDK under .dotnet, restores dotnet tools, and restores NuGet
packages:
./bootstrap.sh
.\bootstrap.ps1
You can pass any Task workflow through bootstrap:
./bootstrap.sh test
After setup, use the same Task workflows as CI:
task test
task lint
task install:local
task install:local:cleanup
On Linux, scripts/setup-linux.sh remains available when you also want local
PowerShell and repo-local .NET/NuGet cache paths. Source scripts/env-linux.sh
after using it to carry those paths into future shells.
task install:local publishes the current host runtime by default, so Linux
uses linux-x64 or linux-arm64 depending on the machine. Override it only
when cross-publishing:
task publish:runtime RUNTIME=linux-x64
For a system-wide setup instead of the local bootstrap, install the .NET SDK,
Task CLI, and PowerShell versions listed in versions.env, then run
task setup. You also need curl, which is used by the setup script and
optional Moxfield HTTP fallback.
Use Taskfile.yml for common workflows:
task test
task lint
task install:local
task install:local:cleanup
task install:local packs the current checkout using the package version in
server.json. It refreshes the global .NET tool from that freshly packed local
package when the existing tool store is unlocked, publishes a self-contained
binary, and copies it to the configured local MCP command path when one is found.
If the global tool or configured executable is locked by a running MCP process,
it leaves the locked file in place, writes a versioned binary beside it, and
updates the Codex MCP config for the next server start. Pass LOCAL_VERSION=...
only when you need an explicit one-off package version.
task install:local:cleanup removes old unlocked versioned local binaries while
keeping the currently configured MCP command path.
com.mcparmory/google-sheets
domdomegg/google-sheets-mcp
henilcalagiya/google-sheets-mcp
cct15/war-dashboard-data
moooonad/mcp-google-sheets-full
io.github.br0ski777/csv-to-json