Documentación Técnica: Integración MCP con IA
¿Qué es el MCP de Amigo Secreto?
El servidor MCP (Model Context Protocol) de Amigo Secreto 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 públicas: create_draw, send_invitations_email y get_group_share_message.
Úsalo en Claude
Claude tiene su propio conector con las tres herramientas públicas. No hace falta iniciar sesión ni tener cuenta.
URL del conector: https://mcp.secretsantaraffle.net/claude/mcp
No hace falta iniciar sesión ni tener cuenta: el conector no tiene autenticación.
Cómo añadirlo
- claude.ai: abre Customize › Connectors, pulsa + Add › Add custom connector, pega la URL y elige No sign in.
- Claude Code: claude mcp add --transport http amigo-secreto https://mcp.secretsantaraffle.net/claude/mcp
Herramientas
create_draw— Create a Secret Santa draw: Crea el sorteo y hace los emparejamientos al azar, respetando las exclusiones.send_invitations_email— Email the invitations: Envía a cada participante una invitación personal por email (una vez por sorteo).get_group_share_message— Get a group chat message: Redacta un mensaje para pegar en WhatsApp o Telegram. No envía nada.
Prompts de ejemplo
- “Crea un sorteo de amigo secreto para el 20 de diciembre con Ana (ana@example.com), Bruno (bruno@example.com) y Carla (carla@example.com), con un presupuesto de 20.000 pesos.”
- “Bruno y Carla son pareja y no deben tocarse entre ellos. Crea el sorteo con esa exclusión.”
- “Envía las invitaciones por email a todos los del sorteo que acabamos de crear.”
- “Escríbeme un mensaje para pegar en nuestro grupo de WhatsApp y avisar a todos del sorteo.”
Los emparejamientos nunca se muestran en el chat: cada participante descubre a quién le regala con su propia invitación por email.
Endpoint y Protocolo
Las peticiones se envían mediante JSON-RPC 2.0 sobre HTTPS. Versión del protocolo: 2025-06-18.
POST https://mcp.secretsantaraffle.net/mcp
POST https://mcp.secretsantaraffle.net/openai/mcp
Content-Type: application/json
Versión del protocolo MCP: 2025-06-18
Este servidor expone tres canales en el mismo dominio: POST /mcp — el canal por defecto con el conjunto completo de herramientas; POST /openai/mcp — el canal que usa la app de ChatGPT; y POST /claude/mcp — el conector de Claude (ver la sección de Claude más abajo). Los dos últimos exponen solo las tres herramientas públicas documentadas más abajo. Todos hablan el mismo protocolo JSON-RPC 2.0.
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 Secreto 2026". |
| price | string | No | Presupuesto del regalo como texto libre (ej. "$200 MXN", "$25 USD"). |
| 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/MX/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 personal para unirse al sorteo. 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 | MX (Intercambio de Regalos) | Intercambio de Regalos |
| es-CO, es-CL, es-PE, es-VE, 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. Cada sorteo solo se puede enviar por email una vez. |
| 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 Secreto hablando con ChatGPT.
Leer la guía para usuariosTe puede interesar
¿Listo para crear tu sorteo?
Omite la IA y crea tu Amigo Secreto directamente en la web. Gratis, rápido, sin registro.
Crear Sorteo Gratis