Documentació Tècnica: Integració MCP amb IA
Què és el MCP de l'Amic Invisible?
El servidor MCP (Model Context Protocol) de l'Amic Invisible permet que qualsevol assistent d'IA —com ChatGPT, Claude o Gemini— creï sortejos d'intercanvi de regals de manera programàtica utilitzant llenguatge natural. En lloc d'emplenar formularis web, els usuaris simplement diuen a la IA qui hi participa, i la IA es comunica amb el nostre servidor per generar el sorteig automàticament.
El servidor implementa JSON-RPC 2.0 sobre HTTPS, seguint l'especificació MCP (versió 2025-06-18). Exposa tres eines públiques: create_draw, send_invitations_email i get_group_share_message.
Endpoint i Protocol
Les peticions s'envien mitjançant JSON-RPC 2.0 sobre HTTPS. Versió del protocol: 2025-06-18.
POST https://mcp.secretsantaraffle.net/mcp
POST https://mcp.secretsantaraffle.net/openai/mcp
Content-Type: application/json
Versió del protocol MCP: 2025-06-18
Aquest servidor exposa dos canals al mateix domini: POST /mcp — el canal per defecte amb el conjunt complet d'eines, per a assistents com Claude; i POST /openai/mcp — el canal compatible amb OpenAI que fa servir l'app de ChatGPT, que exposa només les tres eines públiques documentades més avall. Tots dos parlen el mateix protocol JSON-RPC 2.0.
Handshake (Inicialització)
Tot client MCP ha de completar un handshake d'inicialització abans d'invocar eines. Després de rebre la resposta, el client ha d'enviar una notificació notifications/initialized (sense camp id).
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"capabilities": {},
"clientInfo": {
"name": "mi-cliente",
"version": "1.0.0"
}
}
}
Després de la resposta d'initialize, cal enviar: { "jsonrpc": "2.0", "method": "notifications/initialized" } — el servidor respon 202 Accepted amb el body buit.
create_draw — Esquema JSON
L'eina principal és create_draw. Crea un sorteig d'intercanvi de regals amb N participants (mínim 3), els empareix aleatòriament respectant les exclusions, i retorna un drawId i un shareCode per a operacions posteriors.
{
"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."
}
}
}
Referència de camps
| Camp | Tipus | Obligatori | Descripció |
|---|---|---|---|
| date | string (date) | Sí | Data del sorteig en format YYYY-MM-DD. Ha de ser avui o una data futura. |
| participants | array (min 3) | Sí | Llista de participants. Cadascun té name, email i exclusions opcionals. |
| drawName | string | No | Nom opcional del sorteig. Per defecte "Amic Invisible 2026". |
| price | string | No | Pressupost del regal com a text lliure (p. ex. "20€", "$25"). |
| message | string | No | Cos personalitzat del correu d'invitació. Utilitza un valor per defecte localitzat si s'omet. |
| locale | string (BCP 47) | No | Determina la marca (AI/AS/MX/SS) i les plantilles localitzades. Utilitza Accept-Language si s'omet. |
Eines disponibles
create_draw
— Crear un sorteig
Crea un sorteig d'intercanvi de regals amb N participants (mínim 3). Empareix participants aleatòriament respectant exclusions. Retorna drawId i shareCode per a operacions posteriors.
send_invitations_email
— Enviar invitacions per correu electrònic
Envia un correu personalitzat a cada participant amb un enllaç personal per unir-se al sorteig. Només es pot invocar una vegada per sorteig.
Requereix drawId i shareCode obtinguts de create_draw.
get_group_share_message
— Generar missatge per a WhatsApp/Telegram
Genera un missatge de text llest per copiar i enganxar en un grup. No té side effects: no crea dades ni envia correus.
Flux d'integració típic
Enrutament per idioma i marca
El paràmetre locale als arguments de cada eina determina la marca i les plantilles utilitzades. Inclou-lo sempre per obtenir els millors resultats.
| locale | Marca | Joc |
|---|---|---|
| es-ES, es-AR, es-UY | AI (Amic Invisible) | Amic Invisible |
| es-MX | MX (Intercanvi de Regals) | Intercanvi de Regals |
| es-CO, es-CL, es-PE, es-VE, es | AS (Amic Secret) | Amic Secret |
| en-* (o omès) | SS (Secret Santa) | Secret Santa Raffle |
Seguretat i Privacitat en la integració amb IA
Processament Efímer
Els noms i les adreces de correu electrònic enviats a través de la interfície de xat s'utilitzen exclusivament per generar el sorteig. No es guarden al model de llenguatge ni s'utilitzen per entrenar futures IA.
Xifratge d'Extrem a Extrem
Tota la comunicació entre l'assistent d'IA i els nostres servidors es fa mitjançant protocols HTTPS segurs.
Custòdia de Dades
Un cop creat el sorteig, la gestió de les dades personals (correus i assignacions) es trasllada a la nostra infraestructura segura, complint estrictament amb el RGPD (GDPR).
Control de l'Usuari
La IA només té accés a les dades que l'organitzador proporciona voluntàriament durant la conversa.
Gestió d'errors
El servidor retorna errors a nivell d'eina amb isError: true al resultat, distingint "l'eina ha fallat" de "l'eina no existeix".
| Error | Causa |
|---|---|
| lottery_impossible | Les exclusions impedeixen un sorteig vàlid. Suggereix reduir exclusions o afegir participants. |
| validation | El backend ha rebutjat les dades (422 amb errors). Llista els camps que han fallat. |
| not_found | El drawId no existeix. Suggereix verificar o recrear el sorteig. |
| forbidden | shareCode incorrecte. No hauria de passar si prové del mateix create_draw. |
| already_sent | Ja s'han enviat invitacions per a aquest sorteig. Cada sorteig només es pot enviar per correu una vegada. |
| server | Error temporal del backend (5xx). Suggereix reintentar-ho d'aquí a uns minuts. |
Com funciona per als usuaris?
Si prefereixes una guia pas a pas sense argot tècnic, consulta el nostre article del blog on expliquem com qualsevol persona pot crear un Amic Invisible parlant amb ChatGPT.
Llegir la guia per a usuarisEt pot interessar
Preparat per crear el teu sorteig?
Salta't la IA i crea el teu Amic Invisible directament a la web. Gratis, ràpid, sense registre.
Crear Sorteig Gratis