Documentación Técnica: Integración MCP con IA
Que é o MCP de Amigo Invisible?
O servidor MCP (Model Context Protocol) de Amigo Invisible permite que calquera asistente de IA —como ChatGPT, Claude ou Gemini— cree sorteos de intercambio de agasallos de forma programática usando linguaxe natural. En vez de encher formularios web, os usuarios simplemente lle din á IA quen participa, e a IA comunícase co noso servidor para xerar o sorteo automaticamente.
O servidor implementa JSON-RPC 2.0 sobre HTTPS, seguindo a especificación MCP (versión 2025-06-18). Expón tres ferramentas públicas: create_draw, send_invitations_email e get_group_share_message.
Endpoint e Protocolo
As peticións envíanse mediante JSON-RPC 2.0 sobre HTTPS. Versión do protocolo: 2025-06-18.
POST https://mcp.secretsantaraffle.net/mcp
POST https://mcp.secretsantaraffle.net/openai/mcp
Content-Type: application/json
Versión do protocolo MCP: 2025-06-18
Este servidor expón dúas canles no mesmo dominio: POST /mcp — a canle por defecto co conxunto completo de ferramentas, para asistentes como Claude; e POST /openai/mcp — a canle compatible con OpenAI que usa a app de ChatGPT, que expón só as tres ferramentas públicas documentadas máis abaixo. As dúas falan o mesmo protocolo JSON-RPC 2.0.
Handshake (Inicialización)
Todo cliente MCP debe completar un handshake de inicialización antes de invocar ferramentas. Tras recibir a resposta, o cliente debe enviar unha notificación notifications/initialized (sen campo id).
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"capabilities": {},
"clientInfo": {
"name": "mi-cliente",
"version": "1.0.0"
}
}
}
Tras a resposta de initialize, hai que enviar: { "jsonrpc": "2.0", "method": "notifications/initialized" } — o servidor responde 202 Accepted co body baleiro.
create_draw — Esquema JSON
A ferramenta principal é create_draw. Crea un sorteo de intercambio de agasallos con N participantes (mínimo 3), emparellándoos aleatoriamente respectando as exclusións, e devolve un drawId e shareCode para operacións 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 | Obrigatorio | Descrición |
|---|---|---|---|
| date | string (date) | Si | Data do sorteo en formato YYYY-MM-DD. Debe ser hoxe ou unha data futura. |
| participants | array (min 3) | Si | Lista de participantes. Cada un ten name, email e exclusións opcionais. |
| drawName | string | Non | Nome opcional do sorteo. Por defecto "Amigo Invisible 2026". |
| price | string | Non | Orzamento do agasallo como texto libre (ex. "20€", "$25"). |
| message | string | Non | Corpo personalizado do correo de invitación. Usa un valor por defecto localizado se se omite. |
| locale | string (BCP 47) | Non | Determina a marca (AI/AS/MX/SS) e as plantillas localizadas. Usa Accept-Language se se omite. |
Ferramentas dispoñibles
create_draw
— Crear un sorteo
Crea un sorteo de intercambio de agasallos con N participantes (mínimo 3). Emparella participantes aleatoriamente respectando exclusións. Devolve drawId e shareCode para operacións posteriores.
send_invitations_email
— Enviar invitacións por correo electrónico
Envía un correo personalizado a cada participante cun enlace persoal para unirse ao sorteo. Só se pode invocar unha vez por sorteo.
Require drawId e shareCode obtidos de create_draw.
get_group_share_message
— Xerar mensaxe para WhatsApp/Telegram
Xera unha mensaxe de texto lista para copiar e pegar nun grupo. Non ten side effects: non crea datos nin envía correos.
Fluxo de integración típico
Enrutamento por idioma e marca
O parámetro locale nos argumentos de cada ferramenta determina a marca e as plantillas utilizadas. Inclúeo sempre para obter os mellores resultados.
| locale | Marca | Xogo |
|---|---|---|
| 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 |
Seguridade e Privacidade na integración con IA
Procesamento Efémero
Os nomes e correos electrónicos enviados a través da interface de chat úsanse exclusivamente para a xeración do sorteo. Non se almacenan no modelo de linguaxe nin se usan para adestrar futuras IA.
Cifrado de Extremo a Extremo
Toda a comunicación entre o asistente de IA e os nosos servidores realízase mediante protocolos HTTPS seguros.
Custodia de Datos
Unha vez creado o sorteo, a xestión dos datos persoais (correos e asignacións) trasládase á nosa infraestrutura segura, cumprindo estritamente co RGPD (GDPR).
Control do Usuario
A IA só ten acceso aos datos que o organizador proporciona voluntariamente durante a conversa.
Xestión de erros
O servidor devolve erros a nivel de ferramenta con isError: true no resultado, distinguindo "a ferramenta fallou" de "a ferramenta non existe".
| Erro | Causa |
|---|---|
| lottery_impossible | As exclusións impiden un sorteo válido. Suxire reducir exclusións ou engadir participantes. |
| validation | O backend rexeitou os datos (422 con erros). Lista os campos que fallaron. |
| not_found | O drawId non existe. Suxire verificar ou recrear o sorteo. |
| forbidden | shareCode incorrecto. Non debería ocorrer se vén do mesmo create_draw. |
| already_sent | Xa se enviaron invitacións para este sorteo. Cada sorteo só se pode enviar por correo unha vez. |
| server | Erro temporal do backend (5xx). Suxire reintentar nuns minutos. |
Como funciona para os usuarios?
Se prefires unha guía paso a paso sen xerga técnica, consulta o noso artigo do blog onde explicamos como calquera persoa pode crear un Amigo Invisible falando con ChatGPT.
Ler a guía para usuariosPode interesarche
Listo para crear o teu sorteo?
Omite a IA e crea o teu Amigo Invisible directamente na web. Gratis, rápido, sen rexistro.
Crear Sorteo Gratis