Skip to main content
Glama

Scryfall MCP Server

MCP server that exposes Scryfall (Magic: The Gathering) through simple, typed tools for MCP-compatible clients (Claude Desktop, Cursor, Continue, Zed, etc.). Now includes Commander Spellbook (combo database) integration.

Highlights

  • High-level server API via McpServer with typed inputs/outputs

  • Tools for common queries: full-text search, by colors/CMC/format, and Tagger-based searches

  • SSE or stdio transports

  • Polite rate limiting and 429 backoff (Scryfall and Commander Spellbook)

  • Optional local cache of Tagger tag lists

  • Optional local index mapping Scryfall oracle_id → Commander Spellbook card id

Requirements

  • Node.js >= 18.17

Install & Build

  • Install: npm install

  • Build: npm run build

Run (stdio)

  • node dist/index.js

Run (SSE HTTP)

  • npm run start:sse

  • Env: PORT=3000 (default), CORS_ORIGIN=* (optional)

Docker

  • Build: docker build -t scryfall-mcp:latest .

  • Run (SSE): docker run --rm -p 3000:3000 -v mcp_data:/data scryfall-mcp:latest

  • Override env:

    • SCRYFALL_INTERVAL_MS=100 (rate limiter)

    • TAGGER_CACHE_PATH=/data/tagger-tags.json

    • SCRYFALL_BASE_URL=https://api.scryfall.com

    • CSB_INTERVAL_MS=100 (rate limiter for Commander Spellbook)

    • CSB_BASE_URL=https://backend.commanderspellbook.com

    • CSB_CARD_INDEX_PATH=/data/csb-card-index.json

    • CSB_CARD_INDEX_TTL_MS=86400000

  • Stdio transport: docker run --rm -it scryfall-mcp:latest node dist/index.js

MCP Client Example (Claude Desktop)

{ "mcpServers": { "scryfall": { "command": "node", "args": ["/absolute/path/to/dist/index.js"], "env": { "SCRYFALL_INTERVAL_MS": "100", "TAGGER_CACHE_PATH": "C:/path/to/cache/tagger-tags.json" } } } }

Environment Variables

  • SCRYFALL_BASE_URL: API base URL (default https://api.scryfall.com)

  • SCRYFALL_INTERVAL_MS: Minimum ms between requests (default 100)

  • SCRYFALL_MAX_RETRIES: Max retries on 429 (default 3)

  • SCRYFALL_RETRY_BASE_MS: Base backoff ms (default 250)

  • TAGGER_CACHE_PATH: Local JSON path for Tagger tag lists (default ./cache/tagger-tags.json, Docker default /data/tagger-tags.json)

Commander Spellbook (CSB):

  • CSB_BASE_URL: API base URL (default https://backend.commanderspellbook.com)

  • CSB_INTERVAL_MS: Minimum ms between requests (default 100)

  • CSB_MAX_RETRIES: Max retries on 429 (default 3)

  • CSB_RETRY_BASE_MS: Base backoff ms (default 250)

  • CSB_CARD_INDEX_PATH: Cache file path for oracleId→CSB id index (default ./cache/csb-card-index.json)

  • CSB_CARD_INDEX_TTL_MS: TTL for index reuse in ms (default 86400000 = 24h)

Tools (Scryfall)

  • search_cards — Full-text search using Scryfall q syntax.

  • get_card — Fetch a card by id or name (fuzzy optional).

  • random_card — Random card, optional q filter.

  • autocomplete — Autocomplete card names.

  • list_sets — All sets.

  • get_rulings — Rulings by card id.

Guided search tools (structured results):

  • search_by_colors — Params: colors, mode (exact|contains|at_most), identity, include_colorless, page.

  • search_by_cmc — Params: min, max, colors, type, page.

  • search_by_format — Params: format, status (legal|banned|restricted), colors, page.

Tagger-powered tools:

  • list_tagger_tags — Returns { function: string[], art: string[] } from docs page (cached).

  • search_by_function_tag — Params: tags[], match (any|all), colors?, format?, page? (uses otag:).

  • search_by_art_tag — Params: tags[], match (any|all), colors?, type?, page? (uses arttag:).

  • read_tagger_cache — Read cached tags without network.

  • refresh_tagger_tags — Force refresh tags and write cache.

Notes:

  • Many tools return structuredContent with compact card summaries: name, mana_cost, type_line, oracle_text, set, collector_number, scryfall_uri, image, prices.

  • Some basic tools return content text (JSON stringified) for compatibility.

Commander Spellbook Tools

  • csb_parse_deck_text — Parse plain-text decklist to cards via CSB.

    • Input: { text: string }

  • csb_find_combos_by_card_ids — Find combos included/almost-included by CSB numeric card IDs.

    • Input: { ids: number[], limit?: number, offset?: number }

  • csb_variants_search — Search variants (combos) by filters like uses (card id) or produces (feature id).

    • Input: { uses?: number, produces?: number, of?: number, limit?: number, offset?: number }

  • csb_card — Fetch CSB card by numeric id.

    • Input: { id: number }

  • csb_build_card_index — Build and cache oracleId→CSB id index (paginates /cards).

  • csb_read_card_index — Read the cached index without network.

  • csb_lookup_by_oracle_ids — Map Scryfall oracle_id UUIDs to CSB numeric ids using the cached index.

    • Input: { oracleIds: string[] }

  • csb_find_combos_by_names — Resolve names via Scryfall → oracle_id, map via cached index, then call find-my-combos.

    • Input: { names: string[], fuzzy?: boolean, limit?: number, offset?: number }

Notes:

  • CSB’s card-list-from-text expects Content-Type: text/plain (handled by the tool).

  • The csb_find_combos_by_names tool benefits from building the index first: run csb_build_card_index once per day or set a custom TTL.

API Etiquette

  • All requests send a descriptive User-Agent.

  • Default limiter targets ~10 req/s (100ms between starts) and backs off on HTTP 429, honoring Retry-After (applies to both Scryfall and CSB).

Development

  • Build: npm run build

  • StdIO dev: npm run start:stdio

  • SSE dev: npm run start:sse

  • random_card:

    • Input: { q?: string }

  • autocomplete:

    • Input: { q: string }

  • list_sets:

    • Input: none

  • get_rulings:

    • Input: { id: uuid }

Notes

  • Scryfall rate limits: be respectful (they suggest up to ~10 requests/sec). This server does not add extra rate limiting; your client should avoid flooding requests.

  • Responses are returned as JSON content for maximum fidelity; clients can post-process or render summaries.

SSE Transport Endpoints

  • Events stream (server -> client via EventSource): GET /sse

  • Messages endpoint (client -> server): POST /messages

Point your MCP client’s SSE transport at these endpoints on your configured host/port.

Development

  • Build: npm run build

  • Start (built): npm start

  • Edit source in src/ and rebuild.

License

No license specified. Add one if you plan to distribute.

Related MCP Servers

  • A
    security
    F
    license
    A
    quality
    Enables interaction with the Scryfall API, allowing users to search for Magic: The Gathering card details, retrieve card rulings, and access pricing information using the Model Context Protocol.
    Last updated -
    7
    6
    16
  • A
    security
    F
    license
    A
    quality
    Enables access to Fireflies.ai API for retrieving, searching, and summarizing meeting transcripts with various filtering options and formats.
    Last updated -
    5
    • Apple
  • -
    security
    F
    license
    -
    quality
    Enables Magic: The Gathering players to manage decks and access card information through Claude, supporting gameplay actions like drawing cards and mulligans while providing Scryfall API integration for card lookups.
    Last updated -
    9
  • A
    security
    A
    license
    A
    quality
    Provide seamless access to Magic: The Gathering Chinese card data from 大学院废墟(sbwsz.com) through a set of powerful query tools. Search cards by complex criteria, retrieve card sets, and get detailed card information to enhance your applications or workflows.
    Last updated -
    6
    5
    1
    MIT License
    • Apple
    • Linux

View all related MCP servers

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/latte-chan/scryfall-connector'

If you have feedback or need assistance with the MCP directory API, please join our Discord server