Construye con cartas metafóricas

Una REST API y una OpenAPI compatible con MCP para agentes de IA que ayudan al usuario a reflexionar, llevar un diario o practicar por su cuenta. Tirar una carta, obtener su imagen con marca de agua, respetar la licencia: ese es todo el bucle.

Elige el camino

Tres formas en que los agentes hablan con nosotros. Elige la que encaje con lo que estás construyendo y salta a la documentación adecuada.

Quiero un chat que tire cartas

ChatGPT Custom GPT

Importa el OpenAPI apto para IA en el Custom GPT Builder. El chat puede listar barajas, tirar cartas y enlazar una imagen con marca de agua en la conversación. No puede gastar tus perlas: el subset de IA no incluye operaciones de códigos de invitación.

Fuente de Action: openapi.ai.json ›
Tengo mi propio backend o script

REST directo

Haz llamadas HTTP con tu clave mk_live_ en Authorization: Bearer. El OpenAPI completo lo cubre todo, incluyendo los códigos de invitación si además vendes barajas. Una clave, dos perfiles.

Referencia: openapi.json ›
Quiero un puente Model Context Protocol

Servidor MCP

Hospedado en mcp.makcards.online y como paquete stdio local @maccards/mcp (vía npx o Docker). Mismos tools, misma autenticación, una sola base de código. Elige el modo de conexión en la sección de abajo.

Conectar con clave API ›

OAuth: conexión en un clic desde ChatGPT y Claude

Si tus usuarios parten de ChatGPT o Claude, no necesitan copiar una clave API. La app de chat muestra nuestra pantalla de consentimiento, el usuario pulsa Permitir y el chat recibe un token con alcance limitado. El usuario puede revocar el acceso desde su Perfil en cualquier momento.

Para usuarios finales

Desde «+ Connectors» en tu chat

En ChatGPT (Apps) o Claude.ai («+ Connectors»), busca MAC Cards Online en el selector. La primera vez aparecerá nuestra pantalla de consentimiento con una lista clara de lo que la IA puede y no puede hacer. Apruebas una vez y funciona en todos los chats posteriores.

Disponible en cuanto OpenAI y Anthropic nos incluyan en sus catálogos. Hasta entonces, usa el camino con clave API que aparece abajo.

Para desarrolladores

Crea tu propio cliente OAuth

Exponemos un Authorization Server estándar OAuth 2.1 + PKCE. Descubre los endpoints en /.well-known/oauth-authorization-server sobre el host de la app. Los scopes son read y draw. PKCE S256 es obligatorio.

Tres caminos de registro: pre-registrado para socios verificados, DCR (RFC 7591) con cola de moderación, y Client ID Metadata Documents.

Metadatos del AS ›
Qué permite el token

Alcance limitado, atado a la marca, refresh con rotación

Los access tokens viven una hora. Los refresh tokens viven 30 días con rotación rolling: cada refresh emite uno nuevo, el viejo es de un solo uso y su reutilización dispara revocación de toda la cadena más un security event. Los tokens están atados a un host (un token emitido en app.makcards.online no funcionará en mcp.journalingapp.app).

Los usuarios ven y revocan las apps conectadas en su Perfil → Acceso para IA e integraciones → Apps conectadas.

Qué puedes construir hoy

Chatbot de reflexión

El usuario describe una situación, el agente tira una carta con scope=any, devuelve la imagen y formula una pregunta reflexiva. El trabajo lo hace el usuario; el agente sostiene el espacio.

Compañero de journaling

Prompt diario que saca tres cartas (count=3), invita al usuario a escribir libremente y guarda la tirada en su lado. Las imágenes expiran a los 15 minutos; el agente obtiene unas frescas cada sesión.

Copiloto de facilitación grupal

Para talleres y retrospectivas de equipo: tira cartas de una baraja concreta (scope=deck), muéstralas en el lado del agente y, opcionalmente, entrega un código a los participantes vía /invite-codes/generate.

Inicio rápido REST

Dos comandos: tira una carta, recupera su imagen. Sin webhook, sin callback, sin preflight.

KEY=mk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# 1) Tira una carta de cualquier baraja accesible
curl -X POST https://app.makcards.online/api/v1/public/draw \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"scope":"any","count":1,"image_width":1024}'

# 2) La respuesta trae drawn[0].image_url – recupéralo tal cual
curl https://app.makcards.online/api/v1/public/decks/.../cards/.../image?w=1024&token=eyJhbGc... \
  -o card.jpg

Referencia completa legible por máquinas: openapi.json · subset apto para IA: openapi.ai.json · guía: docs/en/24-public-api.

Obtén una clave API

  1. 1
    Entra en la app.

    Abre app.makcards.online e inicia sesión (Google o Yandex). Un clic, sin cuenta aparte.

  2. 2
    Abre Perfil → Acceso para IA e integraciones.

    La sección está junto a Premium y Logros. El mismo sitio que usan los socios tiendas.

  3. 3
    Genera la clave y cópiala.

    La clave se ve como mk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Se muestra una vez; no habrá una segunda. Guárdala en un gestor de contraseñas o en tu almacén de secretos.

  4. 4
    Trata la clave como una contraseña.

    Nada de repositorios públicos, chats de soporte o capturas de pantalla. Si una clave ha podido filtrarse, regenérala: la antigua deja de funcionar en menos de un minuto.

Conectar con clave API

Una clave, siete superficies. Hosted MCP para arrancar rápido, local stdio para que la clave no salga de tu máquina, Bash plano para agentes que ya tienen shell. Elige lo que encaje con tu cliente.

Añade una entrada bajo mcpServers en ~/.claude.json (Claude Code) o ~/Library/Application Support/Claude/claude_desktop_config.json (Desktop).

{
  "mcpServers": {
    "makcards": {
      "type": "http",
      "url": "https://mcp.makcards.online/v1",
      "headers": {
        "Authorization": "Bearer mk_live_xxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Cursor y Cline comparten el mismo formato de configuración MCP. El bloque es idéntico al de Claude.

{
  "mcpServers": {
    "makcards": {
      "type": "http",
      "url": "https://mcp.makcards.online/v1",
      "headers": {
        "Authorization": "Bearer mk_live_xxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Dos opciones. Nodo MCP (disponible en compilaciones recientes de n8n) – apunta a https://mcp.makcards.online/v1 y configura la cabecera Authorization en las credenciales. Nodo HTTP Request – llama a REST directamente:

URL:      https://app.makcards.online/api/v1/public/draw
Method:   POST
Headers:  Authorization: Bearer mk_live_xxxxxxxxxxxxxxxxxx
          Content-Type: application/json
Body:     { "scope": "any", "count": 1, "image_width": 1024 }

Custom GPT Actions lee OpenAPI. Usa el subset apto para IA para que el chat no pueda gastar perlas por accidente.

Action source: https://makcards.online/api/v1/public/openapi.ai.json
Authentication: API Key (Bearer)
Auth value:     mk_live_xxxxxxxxxxxxxxxxxx

MCP local sobre stdio. La clave nunca sale de tu máquina: va directa a nuestra REST API como Bearer. Requiere Node.js 20+.

{
  "mcpServers": {
    "makcards": {
      "command": "npx",
      "args": ["-y", "@maccards/mcp"],
      "env": {
        "MAKCARDS_API_KEY": "mk_live_xxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

¿Sin Node.js? Ejecuta el mismo binario como contenedor. La imagen se publica solo para linux/amd64, así que Apple Silicon necesita un flag extra (ver abajo). Si tienes Node 20+, la pestaña de npx es más sencilla.

Hosts linux/amd64 (Mac Intel, Linux Intel/AMD, Windows WSL2):

{
  "mcpServers": {
    "makcards": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "MAKCARDS_API_KEY",
        "ghcr.io/makcards/mcp:latest",
        "node", "dist/transports/stdio.js"
      ],
      "env": {
        "MAKCARDS_API_KEY": "mk_live_xxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Apple Silicon (M1 / M2 / M3 / M4): añade --platform linux/amd64 para que Docker descargue la imagen amd64 y la ejecute mediante Rosetta. Funciona, pero el arranque es más lento que la opción nativa de npx.

{
  "mcpServers": {
    "makcards": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "--platform", "linux/amd64",
        "-e", "MAKCARDS_API_KEY",
        "ghcr.io/makcards/mcp:latest",
        "node", "dist/transports/stdio.js"
      ],
      "env": {
        "MAKCARDS_API_KEY": "mk_live_xxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Si tu agente ya corre en una shell (Claude Code, Cursor en modo agente, Aider, Codex, cualquier contenedor), este es el camino más corto: HTTPS plano + Bearer, respuestas JSON, sin runtime MCP que instalar. Las cuatro recetas siguientes cubren todo lo que envuelven nuestras tools MCP.

# Configuración inicial
export MAKCARDS_API_KEY=mk_live_xxxxxxxxxxxxxxxxxx
BASE=https://app.makcards.online/api/v1/public
H="Authorization: Bearer $MAKCARDS_API_KEY"

# Listar las barajas que tu clave puede leer
curl -s -H "$H" "$BASE/decks" | jq

# Tirar 3 cartas de cualquier baraja accesible
curl -s -X POST "$BASE/draw" -H "$H" -H "Content-Type: application/json" \
  -d '{"scope":"any","count":3,"image_width":1024}' | jq

# Guardar directo a disco la primera imagen
curl -s -X POST "$BASE/draw" -H "$H" -H "Content-Type: application/json" \
  -d '{"scope":"any","count":1,"image_width":1024}' \
  | jq -r '.drawn[0].image_url' \
  | xargs curl -s -o card.jpg

# Consultar el estado del rate limit
curl -s -H "$H" "$BASE/usage" | jq

Dos razones para preferir Bash a MCP: menor contexto del agente (sin esquemas de tools que cargar) y un proceso menos que gestionar. Razones para preferir MCP: tu cliente no tiene shell (ChatGPT Apps, Claude Desktop, Cursor sin modo agente) o quieres prompts de tipo slash-command.

¿Hosted, local o shell? Hosted MCP (mcp.makcards.online) es el camino más rápido y funciona detrás de proxies corporativos. Local stdio es la opción cuando tu política de seguridad dice «nada de servicios MCP de terceros»: tu cliente IA habla con un proceso local, que habla con nuestra REST API usando tu clave. Bash se salta por completo la capa MCP y solo encaja con agentes que ya saben abrir shell. Mismos tools, mismos datos.

Límites de uso

Por cuenta y por ventana. POST /draw se contabiliza en lote: count=5 consume 5 unidades.

Ventana Free Premium
Tiradas por minuto10120
Tiradas por hora702 000
Tiradas por día17010 000
/decks por minuto10120
Descargas de imagen por minuto20240

Estado en vivo en GET /api/v1/public/usage. Cabeceras en cada respuesta: RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset (RFC 9331).

Activar Premium con perlas

Privacidad y seguridad

La marca de agua se queda

Cada imagen de carta lleva una marca de agua con el dominio al 6 % de opacidad. Quitarla viola las condiciones. La API nunca expone el original sin marca.

Contenido no confiable

Los textos de barajas y cartas son contenido generado por usuarios. Trátalos como entrada no confiable: nunca dejes que un nombre o una descripción anule tu prompt de sistema.

No es un servicio sanitario

Las cartas MAC son una herramienta de reflexión. Tu agente no debe presentar una carta como diagnóstico, predicción o tratamiento. Incluye enlaces a líneas de crisis si los usuarios pueden estar en apuros.

Detalles: Términos del servicio · Política de privacidad.

FAQ

Preguntas frecuentes de los integradores.

¿Por qué dos documentos OpenAPI?
El ChatGPT Custom GPT Builder muestra al usuario final cada operación durante la configuración del action. La especificación completa incluye POST /invite-codes/generate, que gasta perlas. Si un usuario autorizara por error a un chat a llamar esa operación, pagarías tú. El subset apto para IA elimina por completo el área de códigos de invitación — no existe un camino para que el chat gaste perlas.
¿Puedo conseguir una imagen sin marca de agua?
No. Es una postura deliberada de protección de IP. La API sirve solo JPEGs con marca de agua a 512 o 1024 píxeles. El original vive dentro del tablero jugable.
¿Qué es scope=any?
Muestreo uniforme sobre las cartas que el llamador puede leer: propias, públicas aprobadas y barajas obtenidas por grants. El muestreo es por carta, no por baraja, por lo que las barajas grandes contribuyen proporcionalmente.
¿Registráis mi chat?
No. Registramos las llamadas a la API — request id, account id, endpoint, status, latencia, IP, user-agent. La conversación entre el usuario y la IA no pasa por nuestros servidores salvo que el propio agente la envíe.
¿Cuán fresca es la especificación OpenAPI?
Se distribuye con el binario vía go:embed. Cada release de la API recompila los endpoints de la spec. No hay un manifiesto separado que se pueda olvidar de publicar.
¿Necesito MCP si mi agente ya tiene shell?
No. Si tu agente puede ejecutar curl y parsear JSON, la REST API es el camino más sencillo. MCP existe para clientes en sandbox (ChatGPT Apps, Claude Desktop, Cursor) que no pueden lanzar shell. Hosted MCP y local stdio son envoltorios finos sobre los mismos endpoints REST, así que no pierdes funcionalidad. Mira la pestaña Bash / shell de agente para recetas curl listas para usar.