¿Qué es el MCP de Amigo Invisible?

El servidor MCP (Model Context Protocol) de Amigo Invisible permite que cualquier asistente de IA —como ChatGPT, Claude o Gemini— cree sorteos de intercambio de regalos programáticamente usando lenguaje natural. En lugar de rellenar formularios web, los usuarios simplemente dicen a la IA quiénes participan, y la IA se comunica con nuestro servidor para generar el sorteo automáticamente.

El servidor implementa JSON-RPC 2.0 sobre HTTPS, siguiendo la especificación MCP (versión 2025-06-18). Expone tres herramientas: create_draw, send_invitations_email y get_group_share_message.

Endpoint y Protocolo

Todas las peticiones se envían a un único endpoint utilizando JSON-RPC 2.0 sobre HTTPS. Versión del protocolo: 2025-06-18.

POST https://mcp.secretsantaraffle.net/mcp

Content-Type: application/json

Versión del protocolo MCP: 2025-06-18

Handshake (Inicialización)

Todo cliente MCP debe completar un handshake de inicialización antes de invocar herramientas. Tras recibir la respuesta, el cliente debe enviar una notificación notifications/initialized (sin campo id).

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-06-18",
    "capabilities": {},
    "clientInfo": {
      "name": "mi-cliente",
      "version": "1.0.0"
    }
  }
}

Tras la respuesta de initialize, enviar: { "jsonrpc": "2.0", "method": "notifications/initialized" } — el servidor responde 202 Accepted con body vacío.

create_draw — Esquema JSON

La herramienta principal es create_draw. Crea un sorteo de intercambio de regalos con N participantes (mínimo 3), emparejándolos aleatoriamente respetando las exclusiones, y devuelve un drawId y shareCode para operaciones posteriores.

{
  "type": "object",
  "required": ["date", "participants"],
  "properties": {
    "date": {
      "type": "string",
      "format": "date",
      "description": "Fecha del sorteo, YYYY-MM-DD. Hoy o futuro."
    },
    "participants": {
      "type": "array",
      "minItems": 3,
      "description": "Mínimo 3 participantes. El primero se trata como organizador.",
      "items": {
        "type": "object",
        "required": ["name", "email"],
        "properties": {
          "name": { "type": "string", "maxLength": 255 },
          "email": { "type": "string", "format": "email" },
          "exclusions": {
            "type": "array",
            "items": { "type": "string", "format": "email" },
            "description": "Emails de participantes con los que NO debe emparejarse."
          }
        }
      }
    },
    "drawName": {
      "type": "string",
      "maxLength": 255,
      "description": "Opcional. Si se omite, se genera un default como \"Amigo Invisible 2026\"."
    },
    "price": {
      "type": "string",
      "description": "Presupuesto del regalo, texto libre. Ejemplos: \"20€\", \"$25\"."
    },
    "message": {
      "type": "string",
      "description": "Cuerpo del email de invitación. Si se omite, se usa un default localizado."
    },
    "locale": {
      "type": "string",
      "description": "Tag BCP 47 del idioma. Ej: \"es-ES\", \"es-MX\", \"en-GB\". Determina la marca y las plantillas."
    }
  }
}

Referencia de campos

Campo Tipo Obligatorio Descripción
date string (date) Fecha del sorteo en formato YYYY-MM-DD. Debe ser hoy o fecha futura.
participants array (min 3) Lista de participantes. Cada uno tiene name, email y exclusiones opcionales.
drawName string No Nombre opcional del sorteo. Por defecto "Amigo Invisible 2026".
price string No Presupuesto del regalo como texto libre (ej. "20€", "$25").
message string No Cuerpo personalizado del email de invitación. Usa un default localizado si se omite.
locale string (BCP 47) No Determina la marca (AI/AS/SS) y las plantillas localizadas. Usa Accept-Language si se omite.

Herramientas disponibles

create_draw — Crear un sorteo

Crea un sorteo de intercambio de regalos con N participantes (mínimo 3). Empareja participantes aleatoriamente respetando exclusiones. Devuelve drawId y shareCode para operaciones posteriores.

send_invitations_email — Enviar invitaciones por email

Envía un email personalizado a cada participante con un enlace para descubrir su asignación en la app móvil. Solo se puede invocar una vez por sorteo.

Requiere drawId y shareCode obtenidos de create_draw.

get_group_share_message — Generar mensaje para WhatsApp/Telegram

Genera un mensaje de texto listo para copiar y pegar en un grupo. No tiene side effects: no crea datos ni envía emails.

Flujo de integración típico

1 Initialize → Envía el handshake de inicialización y recibe las capacidades del servidor.
2 notifications/initialized → Completa el handshake (el servidor responde 202 Accepted).
3 tools/list → Descubre las tres herramientas disponibles.
4 tools/call create_draw → Crea el sorteo y obtiene drawId + shareCode del structuredContent.
5 Opción A: tools/call send_invitations_email → Envía emails a todos los participantes.
6 Opción B: tools/call get_group_share_message → Obtiene un mensaje listo para WhatsApp/Telegram.

Enrutamiento por idioma y marca

El parámetro locale en los argumentos de cada herramienta determina la marca y las plantillas utilizadas. Inclúyelo siempre para obtener los mejores resultados.

locale Marca Juego
es-ES, es-AR, es-UY AI (Amigo Invisible) Amigo Invisible
es-MX, es-CO, es-CL, es-PE, es AS (Amigo Secreto) Amigo Secreto
en-* (o omitido) SS (Secret Santa) Secret Santa Raffle

Seguridad y Privacidad en la integración con IA

Procesamiento Efímero

Los nombres y correos electrónicos enviados a través de la interfaz de chat se utilizan exclusivamente para la generación del sorteo. No se almacenan en el modelo de lenguaje ni se utilizan para entrenar futuras IA.

Cifrado de Extremo a Extremo

Toda la comunicación entre el asistente de IA y nuestros servidores se realiza mediante protocolos HTTPS seguros.

Custodia de Datos

Una vez creado el sorteo, la gestión de los datos personales (emails y asignaciones) se traslada a nuestra infraestructura segura, cumpliendo estrictamente con el RGPD (GDPR).

Control del Usuario

La IA solo tiene acceso a los datos que el organizador proporciona voluntariamente durante la conversación.

Gestión de errores

El servidor devuelve errores a nivel de herramienta con isError: true en el resultado, distinguiendo "la herramienta falló" de "la herramienta no existe".

Error Causa
lottery_impossible Las exclusiones impiden un sorteo válido. Sugiere reducir exclusiones o añadir participantes.
validation El backend rechazó los datos (422 con errores). Lista los campos que fallaron.
not_found El drawId no existe. Sugiere verificar o recrear el sorteo.
forbidden shareCode incorrecto. No debería ocurrir si viene del mismo create_draw.
already_sent Ya se enviaron invitaciones para este sorteo. Los reenvíos individuales son premium.
server Error temporal del backend (5xx). Sugiere reintentar en unos minutos.

¿Cómo funciona para usuarios?

Si prefieres una guía paso a paso sin jerga técnica, consulta nuestro artículo de blog donde explicamos cómo cualquier persona puede crear un Amigo Invisible hablando con ChatGPT.

Leer la guía para usuarios

¿Listo para crear tu sorteo?

Omite la IA y crea tu Amigo Invisible directamente en la web. Gratis, rápido, sin registro.

Crear Sorteo Gratis