Scryfall MCP Server
Servidor MCP de Scryfall
Un servidor completo del Protocolo de Contexto de Modelo (MCP) que se integra con la API de Scryfall para proporcionar datos y funcionalidades de cartas de Magic: The Gathering a asistentes de IA.
Este repositorio actualmente admite:
stdiocomo el transporte estable predeterminado para clientes MCP localesStreamable HTTPexperimental como un transporte aditivo para flujos de trabajo HTTP locales
El producto principal sigue siendo el mismo en ambos modos: búsqueda respaldada por Scryfall, reglas y flujos de trabajo de construcción de mazos para MTG.
Características
🔧 Herramientas MCP
Construcción de consultas
build_scryfall_query: Convierte solicitudes en lenguaje natural en consultas de búsqueda optimizadas de Scryfall
Entrada: Descripción en lenguaje natural, preferencias de formato, estrategia de optimización
Salida: Consulta de Scryfall optimizada con explicación y alternativas
Ejemplo: "red creatures under $5 for aggressive decks" → "c:r t:creature usd<=5 pow>=2 cmc<=3"
Herramientas de búsqueda principales
search_cards: Busca cartas usando la potente sintaxis de búsqueda de Scryfall
get_card: Obtiene información detallada sobre cartas específicas
get_card_prices: Recupera datos de precios actuales de las cartas
random_card: Obtiene cartas aleatorias con filtros opcionales
search_sets: Busca y filtra colecciones de Magic
Herramientas de descubrimiento y análisis
query_rules: Busca en las reglas completas de MTG con contexto
search_format_staples: Encuentra cartas básicas, esenciales y del meta para un formato
search_alternatives: Encuentra reemplazos económicos, mejoras o cartas similares
find_synergistic_cards: Descubre piezas de sinergia para una carta, tema o arquetipo
batch_card_analysis: Analiza múltiples cartas en cuanto a legalidad, precios, sinergia o composición
Herramientas de construcción de mazos
validate_brawl_commander: Comprueba si una carta es un comandante legal en Brawl o Brawl Estándar
analyze_deck_composition: Evalúa la curva de maná, la mezcla de cartas, los colores y las recomendaciones a partir de una lista de mazo
suggest_mana_base: Recomienda recuentos de tierras y paquetes de fijación de maná según los requisitos de color
📚 Recursos MCP
card-database://bulk: Base de datos completa de cartas de Scryfall con actualizaciones diarias
set-database://all: Todas las colecciones de Magic con metadatos e iconos
💡 Prompts MCP
analyze_card: Genera un análisis completo de la carta, incluyendo viabilidad competitiva, sinergias y posicionamiento en el meta
build_deck: Crea guías de construcción de mazos centradas en cartas específicas
⚡ Características de rendimiento
Limitación de tasa (Rate Limiting): Respeta los límites de la API de Scryfall con intervalos mínimos de 100ms
Caché inteligente: Reduce las llamadas a la API en más de un 70% con TTL configurable
Manejo de errores: Manejo elegante de todas las condiciones de error de la API
Disyuntor (Circuit Breaker): Previene fallos en cascada durante las interrupciones de la API
🔍 Sistema de validación simple
Validación ligera: Validación básica de la sintaxis de consulta con mensajes de error útiles
Comprobaciones esenciales: Paréntesis equilibrados, comillas y errores de sintaxis comunes
Reconocimiento de operadores: Valida operadores conocidos de Scryfall con sugerencias para errores tipográficos
Optimizado para el rendimiento: Validación rápida con una sobrecarga mínima
Related MCP server: API Tester MCP Server
Instalación
Requisitos previos
Node.js 18+
npm o yarn
Configuración
Clonar el repositorio
git clone https://github.com/bmurdock/scryfall-mcp.git cd scryfall-mcpInstalar dependencias
npm installConfigurar el entorno (opcional)
cp .env.example .env # Edit .env with your preferencesConstruir el proyecto
npm run build
Uso
Modos de transporte
STDIO (predeterminado estable)
Utilice stdio para clientes MCP locales como Claude Desktop, Codex y MCP Inspector. Este sigue siendo el transporte principal y mejor soportado.
npm run devnpm startStreamable HTTP (experimental)
Un punto de entrada HTTP aditivo está disponible para el uso de Streamable HTTP local.
npm run dev:httpnpm run start:httpPruebas
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with UI
npm run test:uiInspector MCP
npm run inspectorEstado del transporte HTTP
El soporte HTTP es actualmente experimental.
Lo que significa:
stdio sigue siendo el predeterminado recomendado
HTTP es aditivo, no un reemplazo
la implementación sigue la ruta de transporte oficial
Streamable HTTPde MCPla primera implementación es intencionalmente local y de alcance conservador
Comportamiento HTTP actual:
se vincula a
127.0.0.1por defectoexpone
POST|GET|DELETE /mcpexpone
GET /healthrechaza encabezados
Originde estilo navegador que no sean de bucle local (loopback) por defectose puede configurar con
HTTP_ALLOWED_ORIGINScuando se necesite intencionalmente una política de origen diferente
Objetivos no actuales:
guía de despliegue en internet público
middleware de autenticación o endurecimiento de producción alojado
reemplazar ejemplos de stdio en todo el repositorio
Si necesita un modelo de despliegue público, trate el soporte HTTP actual como una base en lugar de una solución de alojamiento terminada.
Documentación del proyecto
Integración con Claude Desktop
Agregue lo siguiente a su archivo de configuración de Claude Desktop:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"scryfall": {
"command": "node",
"args": ["/absolute/path/to/scryfall-mcp/dist/index.js"]
}
}
}Reemplace /absolute/path/to/scryfall-mcp con la ruta real a su instalación.
Configuración HTTP
Variables de entorno HTTP opcionales:
HTTP_HOSTpredeterminado127.0.0.1HTTP_PORTpredeterminado3000HTTP_MCP_PATHpredeterminado/mcpHTTP_HEALTH_PATHpredeterminado/healthHTTP_ALLOWED_ORIGINSlista de permitidos de origen opcional separada por comas
Ejemplo de inicio de HTTP local:
HTTP_HOST=127.0.0.1 HTTP_PORT=3000 npm run start:httpEste modo está destinado a entornos locales o controlados explícitamente. No trate el punto de entrada HTTP actual como una exposición pública lista para producción sin agregar autenticación y endurecimiento de despliegue.
Ejemplos de uso de herramientas
Construcción de consultas en lenguaje natural
Convertir lenguaje natural a sintaxis de Scryfall:
// Convert natural language to optimized Scryfall query
{
"tool": "build_scryfall_query",
"arguments": {
"natural_query": "blue counterspells in modern under $20",
"optimize_for": "precision"
}
}Generar consultas económicas:
// Budget-focused query generation
{
"tool": "build_scryfall_query",
"arguments": {
"natural_query": "aggressive red creatures for standard",
"optimize_for": "budget",
"price_budget": {
"max": 5,
"currency": "usd"
}
}
}Descubrir cartas interesantes:
// Discovery-optimized search
{
"tool": "build_scryfall_query",
"arguments": {
"natural_query": "legendary artifacts that produce mana",
"format": "commander",
"optimize_for": "discovery"
}
}Reglas de consulta
{
"tool": "query_rules",
"arguments": {
"query": "state-based actions",
"context_lines": 2
}
}Buscar cartas básicas de formato
{
"tool": "search_format_staples",
"arguments": {
"format": "commander",
"role": "ramp",
"tier": "competitive",
"limit": 10
}
}Buscar alternativas
{
"tool": "search_alternatives",
"arguments": {
"target_card": "Rhystic Study",
"direction": "cheaper",
"format": "commander",
"max_price": 10
}
}Encontrar cartas sinérgicas
{
"tool": "find_synergistic_cards",
"arguments": {
"focus_card": "Obeka, Splitter of Seconds",
"synergy_type": "theme",
"format": "commander",
"limit": 12
}
}Análisis de cartas por lotes
{
"tool": "batch_card_analysis",
"arguments": {
"card_list": ["Sol Ring", "Arcane Signet", "Command Tower"],
"analysis_type": "prices",
"currency": "usd",
"include_suggestions": true
}
}Validar comandante de Brawl
{
"tool": "validate_brawl_commander",
"arguments": {
"card_identifier": "Ashiok, Nightmare Muse",
"format": "brawl"
}
}Analizar composición de mazo
{
"tool": "analyze_deck_composition",
"arguments": {
"deck_list": "4 Lightning Bolt\n4 Monastery Swiftspear\n20 Mountain",
"format": "modern",
"strategy": "aggro"
}
}Sugerir base de maná
{
"tool": "suggest_mana_base",
"arguments": {
"color_requirements": "WUG",
"format": "commander",
"strategy": "midrange",
"budget": "moderate"
}
}Buscar cartas
// Basic search
{
"query": "lightning bolt"
}
// Advanced search with Scryfall syntax
{
"query": "c:red type:instant cmc:1",
"limit": 10,
"format": "json"
}
// Format-specific search
{
"query": "legal:modern type:creature power>=4",
"order": "cmc"
}Obtener detalles de la carta
// By name
{
"identifier": "Lightning Bolt"
}
// By set and collector number
{
"identifier": "dom/123"
}
// By Scryfall ID
{
"identifier": "f7a99cc1-2b73-4c9c-8de2-9b6c4c1d8f2a"
}
// With specific set
{
"identifier": "Lightning Bolt",
"set": "m21"
}Obtener precios de la carta
{
"card_identifier": "f7a99cc1-2b73-4c9c-8de2-9b6c4c1d8f2a",
"currency": "usd"
}Carta aleatoria
// Completely random
{}
// Filtered random card
{
"query": "type:creature",
"format": "modern"
}Buscar colecciones
// All sets
{}
// Filter by type and date
{
"type": "expansion",
"released_after": "2020-01-01"
}Sintaxis de búsqueda de Scryfall
El servidor admite la sintaxis de búsqueda completa de Scryfall:
Operadores básicos
c:red- Colortype:creature- Línea de tiposet:dom- Código de coleccióncmc:3- Coste de maná convertidopower>=4- Comparaciones de fuerza/resistencialegal:modern- Legalidad de formato
Operadores avanzados
is:commander- Propiedades de la cartayear:2023- Año de lanzamientorarity:mythic- Rarezaartist:"john avon"- Nombre del artistaflavor:"text"- Búsqueda de texto de ambientación
Lógica booleana
red OR blue- Cualquiera de las condicionescreature AND red- Ambas condicionesNOT black- Excluir condición(red OR blue) type:instant- Agrupación
Manejo de errores
El servidor proporciona mensajes de error detallados para problemas comunes:
404: Carta/recurso no encontrado
422: Sintaxis de búsqueda no válida
429: Límite de tasa excedido (reintento automático)
Errores de validación: Fallos en la validación de parámetros
Monitoreo de rendimiento
Estadísticas de caché
// Get cache performance
server.getCacheStats()Estado del limitador de tasa
// Check rate limiting status
server.getRateLimiterStatus()Verificación de estado (Health Check)
// Overall system health
server.healthCheck()Configuración
Variables de entorno
SCRYFALL_USER_AGENT=ScryfallMCPServer/1.0
RATE_LIMIT_MS=100
LOG_LEVEL=info
NODE_ENV=development
# Optional timeouts and health/deep checks
SCRYFALL_TIMEOUT_MS=15000
HEALTHCHECK_DEEP=false
# Bound the internal rate limiter queue
RATE_LIMIT_QUEUE_MAX=500Duraciones de caché
Búsqueda de cartas: 30 minutos
Detalles de cartas: 24 horas
Precios de cartas: 6 horas
Datos de colecciones: 1 semana
Datos masivos: 24 horas
Configuración de registro (Logging)
El servidor utiliza Pino para un registro estructurado de alto rendimiento con seguimiento y monitoreo integral de errores.
Niveles de registro
# Available log levels (default: info)
LOG_LEVEL=trace # Most verbose - all operations
LOG_LEVEL=debug # Debug information and performance metrics
LOG_LEVEL=info # General information (default)
LOG_LEVEL=warn # Warnings and degraded performance
LOG_LEVEL=error # Errors only
LOG_LEVEL=fatal # Critical errors onlyRegistro de desarrollo vs producción
Modo de desarrollo (NODE_ENV=development):
Salida impresa y coloreada
Marcas de tiempo legibles por humanos
Resaltado de ID de solicitud y nombre de herramienta
Formato de registro automático para legibilidad
Modo de producción (NODE_ENV=production):
Registros estructurados en JSON para procesamiento por máquina
Optimizado para sistemas de agregación de registros
Sobrecarga mínima para escenarios de alto rendimiento
Compatible con ELK Stack, Grafana y herramientas de monitoreo
Formato de registro estructurado
Todos los registros incluyen contexto estructurado para depuración y monitoreo:
{
"level": "info",
"time": "2025-01-17T19:32:53.123Z",
"pid": 12345,
"hostname": "server-01",
"service": "scryfall-mcp",
"version": "1.0.0",
"requestId": "req_1737145973123_abc123def",
"toolName": "search_cards",
"operation": "tool_execution",
"duration": 245,
"msg": "Tool execution completed"
}Correlación de solicitudes
Cada solicitud obtiene un ID de correlación único para el seguimiento a través de las operaciones:
Formato:
req_{timestamp}_{random}Rastrea ejecuciones de herramientas, llamadas a la API y errores
Permite el seguimiento de solicitudes de extremo a extremo
Limpieza automática de datos de correlación antiguos
Manejo de errores y monitoreo
Clasificación de errores
El servidor implementa un manejo integral de errores con clases de error estructuradas:
Tipos de error base:
MCPError- Clase base con soporte para registro estructuradoToolExecutionError- Fallos de ejecución específicos de la herramientaResourceError- Fallos de acceso a recursosPromptError- Fallos de generación de prompts
Errores específicos del dominio:
ScryfallAPIError- Errores relacionados con la API de ScryfallRateLimitError- Limitación de tasa y estrangulamientoValidationError- Fallos de validación de entrada
Características de monitoreo de errores
Seguimiento automático de errores:
Monitoreo de frecuencia de errores por tipo
Recopilación de métricas de rendimiento
Seguimiento de correlación de solicitudes
Patrón de disyuntor para fallos de API
Acceso a datos de monitoreo:
// Get comprehensive monitoring report
const status = server.getStatus();
console.log(status.monitoring);
// Output includes:
// - Error counts by type
// - Performance metrics (avg response times)
// - Request correlation data
// - Health check statusMonitoreo de verificación de estado
Verificaciones de estado mejoradas con estado detallado del servicio:
# Health check includes:
# - Cache service status
# - Rate limiter status
# - Scryfall API connectivity
# - Error monitoring metrics
# - Performance statisticsConfiguración de monitoreo de producción
Stack de monitoreo recomendado:
Agregación de registros: ELK Stack (Elasticsearch, Logstash, Kibana)
Métricas: Grafana con Prometheus
Seguimiento de errores: Sentry con contexto de error estructurado
Alertas: Basadas en tasas de error y tiempos de respuesta
Métricas clave a monitorear:
Tasas de éxito/fallo de ejecución de herramientas
Distribuciones de tiempo de respuesta de la API
Frecuencias de tipo de error
Ratios de aciertos/fallos de caché
Estado del limitador de tasa
Estrategias de recuperación de errores
Recuperación automática:
Retroceso exponencial para fallos de API
El disyuntor evita fallos en cascada
Lógica de reintento inteligente con fluctuación (jitter)
Degradación elegante durante las interrupciones
Recuperación manual:
// Reset error monitoring
server.resetRateLimiter();
server.clearCaches();
// Check system health
const health = await server.healthCheck();Solución de problemas
Problemas comunes
"Rate limit exceeded"
El servidor maneja automáticamente la limitación de tasa
Espere un momento e inténtelo de nuevo
Compruebe si está realizando demasiadas solicitudes simultáneas
"Network error: Unexpected token" o errores relacionados con gzip
Esto se solucionó en v1.0.2 deshabilitando la compresión gzip
Asegúrese de estar utilizando la última compilación:
npm run buildReinicie Claude Desktop después de reconstruir
El servidor ahora solicita respuestas sin comprimir para evitar problemas de análisis
"Card not found"
Verifique la ortografía del nombre de la carta
Intente usar el formato de código de colección + número de coleccionista
Compruebe si la carta existe en Scryfall
"Invalid search syntax"
Revise la documentación de sintaxis de búsqueda de Scryfall
Compruebe si hay paréntesis sin cerrar
Evite comenzar las consultas con operadores booleanos
La integración de Claude Desktop no funciona
Verifique la ruta absoluta en la configuración
Asegúrese de que el servidor se compile correctamente
Compruebe los registros de Claude Desktop en busca de errores
Modo de depuración
LOG_LEVEL=debug npm run devBorrar caché
# Programmatically
server.clearCaches()
# Or restart the serverContribución
Bif
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Appeared in Searches
Latest Blog Posts
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/bmurdock/scryfall-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server