CAT
/MCP
SkillsMCPMarketplacesDigestToolsAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Cross AI Tools

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Plugins Reference

Community

  • About
  • Tools
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by @mertduzgun

Independent project, not affiliated with Anthropic

MTG MCP

nccurry/mtg-mcp
69 toolsSTDIOregistry active
Summary

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.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Tools

Public tool metadata for what this MCP can expose to an agent.

69 tools
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 params

Search 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.

Parameters* required
pageinteger
Page number for paginated results, 1-indexeddefault: 1
limitinteger
Max cards to return (default 30, 0 for all)default: 30
querystring
Scryfall search query (e.g. 'f:commander id:sultai t:creature cmc<=3'). See scryfall.com/docs/syntax
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
scryfall_card_detailsGet full details for a Magic card by exact or fuzzy name.3 params

Get full details for a Magic card by exact or fuzzy name.

Parameters* required
namestring
Card name — exact match by default (e.g. 'Muldrotha, the Gravetide')
fuzzyboolean
Use fuzzy matching for approximate names (e.g. 'muldrotha' finds 'Muldrotha, the Gravetide')default: false
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
scryfall_card_priceGet current prices for a Magic card. Prices update once per day.1 params

Get current prices for a Magic card. Prices update once per day.

Parameters* required
namestring
Card name for price lookup (exact match)
scryfall_card_rulingsGet official rulings and clarifications for a Magic card.1 params

Get official rulings and clarifications for a Magic card.

Parameters* required
namestring
Card name to get official rulings for (exact match)
scryfall_set_infoGet metadata for a Magic set by its code.1 params

Get metadata for a Magic set by its code.

Parameters* required
set_codestring
Set code (e.g. 'dom', 'mh2', 'lci')
scryfall_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 params

Find recently printed or released Magic cards. Searches Scryfall for cards released within the given number of days. Optionally filter by set or format legality.

Parameters* required
daysinteger
Look back this many days for recent cards (minimum 1)default: 30
limitinteger
Max cards to return (default 30, 0 for all)default: 30
formatvalue
Filter to cards legal in a format (e.g. 'standard', 'commander', 'modern')
set_codevalue
Filter to a specific set code (e.g. 'mh3', 'lci')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
spellbook_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 params

Search 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.

Parameters* required
limitinteger
Maximum number of combos to returndefault: 10
card_namestring
Card name to search for combos (e.g. 'Muldrotha, the Gravetide')
color_identityvalue
Filter by color identity — name ('sultai'), letters ('BUG'), or 'wubrg'
spellbook_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 params

Get detailed steps for a specific combo by its Spellbook ID. Use an ID from find_combos results (e.g. "1414-2730-5131-5256").

Parameters* required
combo_idstring
Spellbook combo ID from find_combos results (e.g. '1414-2730-5131-5256')
spellbook_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 params

Find 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.

Parameters* required
decklistarray
List of card names in the main deck
commandersarray
Commander card name(s) (e.g. ['Muldrotha, the Gravetide'])
spellbook_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 params

Estimate 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.

Parameters* required
decklistarray
List of card names in the main deck
commandersarray
Commander card name(s) (e.g. ['Muldrotha, the Gravetide'])
draft_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 params

Get 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...

Parameters* required
limitinteger
Max cards to return (default 50, 0 for all)default: 50
sort_bystring
Sort order: 'gih_wr' (default), 'alsa', 'iwd', 'name'default: gih_wr
set_codestring
Three-letter set code (e.g. 'LCI', 'MKM', 'OTJ', 'BLB')
event_typestring
Draft format — 'PremierDraft' (default) or 'TradDraft'default: PremierDraft
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
draft_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 params

Get 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...

Parameters* required
end_datestring
End date in YYYY-MM-DD format (required by 17Lands API)
set_codestring
Three-letter set code (e.g. 'LCI', 'MKM', 'OTJ', 'BLB')
event_typestring
Draft format — 'PremierDraft' (default) or 'TradDraft'default: PremierDraft
start_datestring
Start date in YYYY-MM-DD format (required by 17Lands API)
edhrec_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 params

Get 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).

Parameters* required
limitinteger
Max cards per category (default 10, 0 for all)default: 10
categoryvalue
Filter by card type: 'creatures', 'enchantments', 'artifacts', 'instants', 'sorceries', 'lands', 'planeswalkers'
commander_namestring
Full commander name (e.g. 'Muldrotha, the Gravetide')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
edhrec_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 params

Get 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...

Parameters* required
card_namestring
Card to check synergy for (e.g. 'Spore Frog')
commander_namestring
Commander to check synergy against (e.g. 'Muldrotha, the Gravetide')
moxfield_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 params

Fetch 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.

Parameters* required
deck_idstring
Moxfield deck ID or full URL (e.g. 'abc123' or 'https://www.moxfield.com/decks/abc123')
moxfield_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 params

Get metadata for a Moxfield deck (name, format, author, dates). Returns deck metadata without the full card list. Use ``decklist`` for the complete card list.

Parameters* required
deck_idstring
Moxfield deck ID or full URL (e.g. 'abc123' or 'https://www.moxfield.com/decks/abc123')
moxfield_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 params

Search public Moxfield decks by format, keyword, or sort order. Returns a paginated list of deck summaries with name, format, author, colors, and card counts.

Parameters* required
pageinteger
Page number (1-indexed)default: 1
sortstring
Sort order: 'Updated', 'Created', or 'Views'default: Updated
queryvalue
Optional search text to filter decks by name or description
formatvalue
Format filter (e.g. 'pauper', 'commander', 'modern'). Leave empty for all formats.
page_sizeinteger
Results per page (max 100)default: 20
moxfield_user_decksList a user's public decks on Moxfield. Verifies the user exists, then searches for their public decks. Optionally filter by format.2 params

List a user's public decks on Moxfield. Verifies the user exists, then searches for their public decks. Optionally filter by format.

Parameters* required
formatvalue
Optional format filter (e.g. 'commander', 'modern')
usernamestring
Moxfield username to look up
bulk_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 params

Look 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.

Parameters* required
namestring
Card name for exact lookup, case-insensitive (e.g. 'Sol Ring')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
bulk_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 params

Search 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).

Parameters* required
limitinteger
Maximum number of results to returndefault: 20
querystring
Substring to search for, case-insensitive
search_fieldstring
Field to search in -- 'name' (card name), 'type' (type line), or 'text' (oracle text)one of name · type · textdefault: name
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
bulk_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 params

Batch 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').

Parameters* required
cardsarray
List of card names to check legality for
formatstring
Format to check (e.g. 'commander', 'modern', 'standard', 'legacy')
bulk_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 params

Search 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).

Parameters* required
limitinteger
Maximum results to returndefault: 20
querystring
Search query -- card name, type, or oracle text substring (e.g. 'flying creatures', 'destroy target')
formatstring
Format to search in (e.g. 'commander', 'modern', 'standard')
rarityvalue
Rarity filter (e.g. 'common', 'uncommon', 'rare', 'mythic')
max_pricevalue
Maximum USD price filter
color_identityvalue
Color identity filter (e.g. 'sultai', 'WU', 'red'). Only returns cards within this identity.
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
bulk_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 params

Find 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.

Parameters* required
colorvalue
Color identity filter (e.g. 'sultai', 'WU', 'red'). Only returns cards within this identity.
limitinteger
Maximum results to returndefault: 20
formatstring
Format to find staples for (e.g. 'commander', 'modern', 'legacy')
card_typevalue
Card type filter (e.g. 'creature', 'instant', 'land')
ranking_modestring
How to rank staples: 'auto' (default) picks the best mode for the format, 'edhrec' uses Commander popularity, 'competitive' uses a mana-efficiency heuristic, 'tournament' uses MTGGoldfish metagame frequency.one of auto · edhrec · competitive · tournamentdefault: auto
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
bulk_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 params

Find 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.

Parameters* required
limitinteger
Maximum results to returndefault: 10
formatvalue
Format filter (e.g. 'commander', 'modern'). Only returns legal cards.
card_namestring
Name of the card to find similar cards for
max_pricevalue
Maximum USD price filter
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
bulk_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 params

Get a random Magic card, optionally filtered by format, color, type, and rarity. Returns full card details in the same format as card_lookup.

Parameters* required
formatvalue
Format filter (e.g. 'commander', 'modern'). Only returns legal cards.
rarityvalue
Rarity filter (e.g. 'common', 'uncommon', 'rare', 'mythic')
card_typevalue
Card type filter (e.g. 'creature', 'instant', 'land')
color_identityvalue
Color identity filter (e.g. 'sultai', 'WU', 'red'). Only returns cards within this identity.
bulk_ban_listGet the banned and restricted cards for a format. Returns alphabetically sorted lists of banned and restricted cards, including their type lines.1 params

Get the banned and restricted cards for a format. Returns alphabetically sorted lists of banned and restricted cards, including their type lines.

Parameters* required
formatstring
Format to check ban list for (e.g. 'commander', 'modern', 'standard')
bulk_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 params

Show 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.

Parameters* required
card_namestring
Card name to check format legality for
spicerack_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 params

List 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.

Parameters* required
limitinteger
Maximum number of tournaments to return (default 10)default: 10
formatstring
MTG format name (e.g. 'Modern', 'Legacy', 'Pauper')
num_daysinteger
Number of days to look back (default 14)default: 14
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
spicerack_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 params

Get full standings and decklists for a specific tournament. Look up a tournament by its Spicerack ID. Use ``recent_tournaments`` first to find tournament IDs.

Parameters* required
top_ninteger
Number of top standings to show (default 8)default: 8
formatvalue
Format to search within (optional, helps narrow results)
num_daysinteger
Number of days to look back (default 30)default: 30
tournament_idstring
Spicerack tournament ID (e.g. '3135276')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
spicerack_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 params

Find 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.

Parameters* required
limitinteger
Maximum number of decklists to return (default 10)default: 10
formatstring
MTG format name (e.g. 'Modern', 'Legacy', 'Pauper')
num_daysinteger
Number of days to look back (default 14)default: 14
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
goldfish_metagameGet the current metagame breakdown for a competitive format. Shows top archetypes with meta share percentages, deck counts, and estimated paper prices.2 params

Get the current metagame breakdown for a competitive format. Shows top archetypes with meta share percentages, deck counts, and estimated paper prices.

Parameters* required
formatstring
MTG format name (e.g. 'Modern', 'Legacy', 'Pioneer', 'Pauper')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
goldfish_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 params

Get a sample decklist for an archetype in a format. Returns deck metadata (author, event, result, date) and the full mainboard and sideboard card list.

Parameters* required
formatstring
MTG format name (e.g. 'Modern', 'Legacy', 'Pioneer')
archetypestring
Archetype name (e.g. 'Boros Energy', 'Azorius Control')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
goldfish_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 params

Get 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.

Parameters* required
limitinteger
Maximum number of staples to return (default 20)default: 20
formatstring
MTG format name (e.g. 'Modern', 'Legacy', 'Pioneer')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
goldfish_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 params

Get the estimated paper price for an archetype deck. Returns the total estimated cost of the deck based on current card prices from MTGGoldfish.

Parameters* required
formatstring
MTG format name (e.g. 'Modern', 'Legacy', 'Pioneer')
archetypestring
Archetype name (e.g. 'Boros Energy', 'Azorius Control')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
commander_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 params

Comprehensive 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.

Parameters* required
commander_namestring
Commander card name (e.g. 'Muldrotha, the Gravetide')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
evaluate_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 params

Assess 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.

Parameters* required
card_namestring
Card to evaluate for the deck (e.g. 'Spore Frog')
commander_namestring
Commander the deck is built around
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
draft_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 params

Rank 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.

Parameters* required
packarray
List of card names currently in the draft pack
set_codestring
Three-letter set code for the draft format (e.g. 'LCI', 'MKM')
current_picksvalue
Cards already drafted — enables color fit analysis when provided
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
suggest_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 params

Identify 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).

Parameters* required
decklistarray
List of card names in the deck
num_cutsinteger
Number of cut candidates to suggestdefault: 5
commander_namestring
Commander the deck is built around
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
card_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 params

Compare 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.

Parameters* required
cardsarray
2-5 card names to compare side-by-side
commander_namestring
Commander the deck is built around
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
budget_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 params

Suggest 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).

Parameters* required
budgetnumber
Maximum price per card in USD (e.g. 5.0 for cards under $5)
commander_namestring
Commander the deck is built around
num_suggestionsinteger
Number of upgrade suggestions to returndefault: 10
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
deck_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 params

Full 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...

Parameters* required
decklistarray
List of card names in the deck (99 cards for Commander)
commander_namestring
Commander the deck is built around
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
set_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 params

Draft format overview — top commons/uncommons and trap rares. Uses 17Lands card ratings to provide a data-driven format breakdown. Requires 17Lands to be enabled.

Parameters* required
set_codestring
Three-letter set code for the draft format (e.g. 'LCI', 'MKM')
event_typestring
Draft format — 'PremierDraft' (default) or 'TradDraft'default: PremierDraft
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
theme_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 params

Find 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).

Parameters* required
limitinteger
Maximum number of resultsdefault: 20
themestring
Theme to search for — mechanical (aristocrats, voltron, tokens), tribal (goblin, merfolk), or abstract (music, death, ocean)
formatvalue
Format legality filter (e.g. 'standard', 'modern', 'commander')
max_pricevalue
Maximum card price in USD
color_identityvalue
Color identity filter (e.g. 'sultai', 'BUG', 'WR')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
build_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 params

Find 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).

Parameters* required
cardsarray
1-5 card names to build around
limitinteger
Maximum number of suggestionsdefault: 20
budgetvalue
Maximum price per card in USD
formatstring
Format to build for (e.g. 'standard', 'modern', 'commander')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
complete_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 params

Identify 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.

Parameters* required
budgetvalue
Maximum price per suggested card in USD
formatstring
Format to build for (e.g. 'standard', 'modern', 'commander')
decklistarray
Partial decklist — card names already chosen
commandervalue
Commander name (required for Commander format)
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
commander_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 params

Compare 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.

Parameters* required
commandersarray
2-5 commander names to compare head-to-head
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
tribal_staplesBest cards for a creature type — lords, synergy pieces, and top members. Groups results by: lords/anthems, tribal synergy, best members, tribal support.5 params

Best cards for a creature type — lords, synergy pieces, and top members. Groups results by: lords/anthems, tribal synergy, best members, tribal support.

Parameters* required
limitinteger
Maximum number of resultsdefault: 20
tribestring
Creature type (e.g. 'Goblin', 'Merfolk', 'Samurai')
formatvalue
Format legality filter (e.g. 'commander', 'modern')
color_identityvalue
Color identity filter (e.g. 'sultai', 'WR')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
precon_upgradeAnalyze and upgrade a Commander precon — identify weakest cards, suggest replacements. Pairs each upgrade with a specific cut, explaining the synergy improvement.5 params

Analyze and upgrade a Commander precon — identify weakest cards, suggest replacements. Pairs each upgrade with a specific cut, explaining the synergy improvement.

Parameters* required
budgetnumber
Maximum price per upgrade card in USDdefault: 50
decklistarray
Full precon decklist — card names
commanderstring
Commander card name
num_upgradesinteger
Number of upgrade suggestionsdefault: 10
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
color_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 params

Top cards across ALL commanders in a color identity. Uses EDHREC aggregated data when available, falls back to EDHREC rank from bulk data.

Parameters* required
limitinteger
Maximum number of resultsdefault: 20
categoryvalue
Card category filter (e.g. 'creatures', 'instants', 'lands')
color_identitystring
Color identity (e.g. 'sultai', 'BUG', 'WR', 'mono-red')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
sealed_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 params

Build 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.

Parameters* required
poolarray
Card names in the sealed pool (typically 84-90)
set_codestring
Three-letter set code (e.g. 'LCI', 'MKM')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
draft_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 params

Analyze 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).

Parameters* required
picksarray
Cards already drafted, in pick order
set_codestring
Three-letter set code (e.g. 'LCI', 'MKM')
current_packvalue
Current pack contents — if provided, cards are ranked with signal context
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
draft_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 params

Review 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.

Parameters* required
picksarray
Cards drafted in order (pack 1 pick 1 through pack 3 pick 14)
set_codestring
Three-letter set code (e.g. 'LCI', 'MKM')
final_deckvalue
Final deck submitted — enables 'made the deck' analysis
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
rotation_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 params

Check 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.

Parameters* required
cardsvalue
Card names to check for rotation — omit for general rotation info
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
metagame_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 params

Get 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.

Parameters* required
formatstring
Competitive format (e.g. 'Modern', 'Legacy', 'Pioneer', 'Pauper')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
archetype_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 params

Get 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.

Parameters* required
formatstring
Competitive format (e.g. 'Modern', 'Legacy', 'Pioneer', 'Pauper')
archetypestring
Archetype name (e.g. 'Boros Energy', 'Mono-Blue Terror') — fuzzy matched
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
archetype_comparisonCompare 2-4 competitive archetypes side-by-side. Shows price, colors, key cards, shared staples, and differences.3 params

Compare 2-4 competitive archetypes side-by-side. Shows price, colors, key cards, shared staples, and differences.

Parameters* required
formatstring
Competitive format (e.g. 'Modern', 'Legacy', 'Pioneer', 'Pauper')
archetypesarray
2-4 archetype names to compare (fuzzy matched)
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
format_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 params

Get 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.

Parameters* required
budgetvalue
Max budget in USD — filters archetypes to this price ceiling
formatstring
Competitive format (e.g. 'Modern', 'Legacy', 'Pioneer', 'Pauper')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
suggest_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 params

Suggest 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.

Parameters* required
formatstring
Competitive format (e.g. 'Modern', 'Pauper')
decklistarray
Main deck card names (e.g. ['4 Lightning Bolt', '4 Goblin Guide'])
meta_contextvalue
Optional context about local metagame (e.g. 'heavy on Mono-Red and Affinity')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
sideboard_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 params

Get a specific sideboard in/out plan for a named matchup. Given a full 75 and a matchup archetype, produces specific boarding instructions with reasoning.

Parameters* required
formatstring
Competitive format (e.g. 'Modern', 'Pauper')
matchupstring
Matchup archetype name (e.g. 'Mono-Red Aggro') — fuzzy matched
decklistarray
Main deck card names (e.g. ['4 Lightning Bolt', '4 Goblin Guide'])
sideboardarray
Sideboard card names (e.g. ['2 Hydroblast', '3 Tormod\'s Crypt'])
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
sideboard_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 params

Generate 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.

Parameters* required
formatstring
Competitive format (e.g. 'Modern', 'Pauper')
decklistarray
Main deck card names (e.g. ['4 Lightning Bolt', '4 Goblin Guide'])
matchupsvalue
Matchup names to include — omit to auto-detect from metagame data
sideboardarray
Sideboard card names (e.g. ['2 Hydroblast', '3 Tormod\'s Crypt'])
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
deck_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 params

Validate 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.

Parameters* required
formatstring
Format to validate against (e.g. 'commander', 'modern', 'standard', 'legacy')
decklistarray
Card names, optionally prefixed with quantity (e.g. '4x Lightning Bolt' or 'Lightning Bolt')
commandervalue
Commander card name (required for Commander format)
sideboardvalue
Sideboard card names, same format as decklist
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
suggest_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 params

Suggest 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.

Parameters* required
formatstring
Format for land legality checking (e.g. 'commander', 'modern')
decklistarray
Non-land card names in the deck
total_landsvalue
Override total land count (default: auto-calculated from avg CMC)
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
price_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 params

Compare prices across multiple cards using Scryfall bulk data. Returns a markdown table with USD, USD foil, and EUR prices sorted by USD descending.

Parameters* required
cardsarray
2-20 card names to compare prices
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
rules_lookupLook up MTG Comprehensive Rules by number or keyword search. Returns matching rules with full text, parent context, and subrules.3 params

Look up MTG Comprehensive Rules by number or keyword search. Returns matching rules with full text, parent context, and subrules.

Parameters* required
querystring
Rule number (e.g. '704.5k') or keyword to search for
sectionvalue
Narrow search to a section (e.g. 'combat', 'stack', 'lands', 'state-based')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
keyword_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 params

Explain an MTG keyword with rules text, examples, and interactions. Returns the rules definition, reminder text, and up to 5 example cards from bulk data.

Parameters* required
keywordstring
MTG keyword to explain (e.g. 'trample', 'deathtouch')
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
rules_interactionExplain how two mechanics or cards interact under MTG rules. Returns relevant rules, step-by-step resolution, and common misconceptions.3 params

Explain how two mechanics or cards interact under MTG rules. Returns relevant rules, step-by-step resolution, and common misconceptions.

Parameters* required
mechanic_astring
First mechanic or card name
mechanic_bstring
Second mechanic or card name
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
rules_scenarioResolve a game scenario step-by-step using MTG rules. Covers priority, stack resolution, state-based actions, and triggers with rule citations.2 params

Resolve a game scenario step-by-step using MTG rules. Covers priority, stack resolution, state-based actions, and triggers with rule citations.

Parameters* required
scenariostring
Game scenario to resolve (describe the board state and action)
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed
combat_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 params

Calculate 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.

Parameters* required
blockersarray
Blocking creature names or descriptions
keywordsvalue
Additional keyword abilities to consider (e.g. 'deathtouch', 'trample')
attackersarray
Attacking creature names or descriptions
response_formatstring
Output verbosity: 'detailed' (default) or 'concise'one of detailed · concisedefault: detailed

mtg-mcp

mtg-mcp logo

CI codecov NuGet NuGet downloads .NET MCP Registry License: AGPL-3.0-or-later

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.

Install

NuGet .NET Tool

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

MCP Registry

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.

GitHub Release Archive

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.

From Source

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.

MCP Client Configuration

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.

Features

AreaWhat the MCP exposes
Card dataScryfall search with optional format legality filtering, fuzzy card lookup, prints, rulings, and Scryfall query syntax guidance.
WorkspacesCreate, import, parse, export, open, validate, summarize, migrate, and update local or Archidekt-backed decks.
Deck editingAdd, remove, move, categorize, annotate, and set quantities; create, preview, list, apply, or delete persisted edit plans.
MoxfieldImport public or unlisted decks as generic local workspaces while preserving boards, tags, and print metadata when available.
ArchidektCreate decks, open decks, list visible decks, write back when enabled, copy local workspaces into Archidekt, and manage deck checkpoints.
Playgroup.ggCheck 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.
AnalysisMana base, curve, colors, categories, cost, legality, draw odds, consistency, best practices, Commander bracket, card facets, and explicit facet predicates.
SimulationGoldfish runs, projected board states, win-turn estimates, deterministic performance analysis, plan comparisons, and Archidekt reference comparisons.
RecommendationsNew-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.
CombosCatalog-backed combo search/details, deck combo analysis, route labels, terminal/needs-payoff flags, near-misses, and clearly separated local heuristics.
Deck intentOptional 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.

Configuration

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.

SettingUse
MTGMCP__OPERATION_MODEread-only, plan, or apply. Set explicitly; the app default is apply.
MTGMCP__DATA_DIRLocal decks, plans, workspaces, and source-fact cache.
MTGMCP__INTELLIGENCE__ANALYSIS_DEPTHRecommendation source depth: minimal, balanced, or best.
MTGMCP__INTELLIGENCE__CACHE__MODESource-fact cache: persisted, memory, or off.
MTGMCP__INTELLIGENCE__CACHE__MAX_BYTES / MAX_ENTRIESPersisted cache limits.
MTGMCP__INTELLIGENCE__CACHE__TTLS__SCRYFALL_CARD_METADATA / SCRYFALL_SEARCH / COMMANDERSPELLBOOK / DECK_SEARCH / DECK_DETAILS / CORPUS_SIGNALSPer-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__ENABLEDEnable or disable recommendation sources.
MTGMCP__INTELLIGENCE__SOURCES__TOPDECK__API_KEY / SPICERACK__API_KEYOptional source API keys.
MTGMCP__INTELLIGENCE__SOURCES__EDHREC__ALLOW_UNOFFICIAL_API / EDHTOP16__ALLOW_UNOFFICIAL_API / REDDIT__ALLOW_UNOFFICIAL_APIAllow 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_ADDRESSSource API URL overrides.
MTGMCP__ARCHIDEKT__BASE_ADDRESS / CREDENTIALS_FILE / USERNAME / PASSWORDArchidekt API and credential settings. The username value may be an Archidekt username or account email.
MTGMCP__ARCHIDEKT__RATE_LIMIT__MAX_REQUESTS / WINDOW_SECONDSOptional 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_PATHMoxfield 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_FILEPlaygroup.gg API settings. Credential files may use JSON or apiKey=value, accessToken=value, or token=value lines.
MTGMCP__REDDIT__CLIENT_ID / CLIENT_SECRET / REFRESH_TOKENReddit OAuth app credentials. CLIENT_SECRET is optional for installed-client style flows.
MTGMCP__REDDIT__ACCESS_TOKEN / BEARER_TOKEN / EXPIRES_AT_UTCTemporary Reddit bearer token override for short-lived local testing.
MTGMCP__REDDIT__USER_AGENT / SCOPE / DEVICE_ID / CREDENTIALS_FILEReddit request identity and local credential file settings. SCOPE defaults to read.
MTGMCP__REDDIT__OAUTH_BASE_ADDRESS / TOKEN_ENDPOINTReddit 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_OVERRIDESOptional external simulation profile JSON files or simple glob paths. Built-in profiles always remain available.
MTGMCP__SCRYFALL__BASE_ADDRESS / USER_AGENT / MAX_RATE_LIMIT_RETRIESScryfall API settings.
MTGMCP__COMMANDERSPELLBOOK__BASE_ADDRESSCommander Spellbook API setting.

Recommendation sources

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/effective
  • mtg://server/info
  • mtg://providers/archidekt/auth-status
  • mtg://providers/playgroup/auth-status
  • mtg://sources/status

MCP Surface

Workflow-first tools:

  • Start or open workspaces with 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.
  • Search cards with card_search, card_get, card_get_prints, and card_get_rulings.
  • Inspect decks with 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.
  • Inspect local category contents with 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.
  • Compare no-interaction goldfish outputs with 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.
  • Inspect combos and win routes with deck_analyze_combos, combo_search_by_card, combo_get_details, card_classify_win_routes, and wincon_find_payoffs.
  • Research changes with deck_query_cards, deck_review_new_card_swaps, commander_get_aggregate_cards, commander_get_win_condition_evidence, source tools, and Playgroup tools.
  • Preview edits with deck_plan_create, deck_plan_preview, and deck_plan_compare_performance; apply only with deck_plan_apply.
  • Apply package-style local edits with 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.
  • Use provider tools such as 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:

  • Workspace data: mtg://workspace/{workspaceId}, mtg://workspace/{workspaceId}/summary, mtg://workspace/{workspaceId}/intent.
  • Usage guides: 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.
  • Status: 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

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.

How It Works

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

Fresh Checkout

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.

Common Workflows

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.

Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
Categories
Data & Analytics
Registryactive
PackageNccurry.MtgMcp
TransportSTDIO
UpdatedJun 10, 2026
View on GitHub

Related Data & Analytics MCP Servers

View all →
Google Sheets

com.mcparmory/google-sheets

Create, read, and modify spreadsheet data, formatting, and sheets
25
Google Sheets

domdomegg/google-sheets-mcp

Allow AI systems to read, write, and query spreadsheet data via Google Sheets.
2
Google Sheets Mcp

henilcalagiya/google-sheets-mcp

Powerful tools for automating Google Sheets using Model Context Protocol (MCP)
14
Futuristic Risk Intelligence

cct15/war-dashboard-data

Geopolitical conflict risk, political events, and maritime traffic data for AI agents
1
Mcp Google Sheets Full

moooonad/mcp-google-sheets-full

Full Google Sheets MCP: 26 tools + run_sheets_script escape hatch. User OAuth, no service account.
CSV to JSON API

io.github.br0ski777/csv-to-json

Parse CSV to JSON array. Auto-detect delimiter, headers. x402 micropayment.