Documentación Técnica: Integración MCP con IA
¿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) | Sí | Fecha del sorteo en formato YYYY-MM-DD. Debe ser hoy o fecha futura. |
| participants | array (min 3) | Sí | 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
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 usuariosTe puede interesar
¿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