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) Data del sorteig en format YYYY-MM-DD. Ha de ser avui o una data futura.
participants array (min 3) 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

1 Initialize → Envia el handshake d'inicialització i rep les capacitats del servidor.
2 notifications/initialized → Completa el handshake (el servidor respon 202 Accepted).
3 tools/list → Descobreix les tres eines disponibles.
4 tools/call create_draw → Crea el sorteig i obté drawId + shareCode del structuredContent.
5 Opció A: tools/call send_invitations_email → Envia correus a tots els participants.
6 Opció B: tools/call get_group_share_message → Obté un missatge llest per a WhatsApp/Telegram.

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 usuaris

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