Czym jest Secret Santa Raffle MCP?

Serwer Secret Santa Raffle MCP (Model Context Protocol) umożliwia dowolnemu asystentowi AI — takiemu jak ChatGPT, Claude czy Gemini — programowe tworzenie losowań wymiany prezentów za pomocą języka naturalnego. Zamiast wypełniać formularze na stronie, użytkownik po prostu mówi AI, kto bierze udział, a AI komunikuje się z naszym serwerem, by automatycznie wygenerować losowanie.

Serwer implementuje JSON-RPC 2.0 przez HTTPS, zgodnie ze specyfikacją MCP (wersja 2025-06-18). Udostępnia trzy publiczne narzędzia: create_draw, send_invitations_email i get_group_share_message.

Endpoint i protokół

Żądania są wysyłane przez JSON-RPC 2.0 przez HTTPS. Wersja protokołu to 2025-06-18.

POST https://mcp.secretsantaraffle.net/mcp

POST https://mcp.secretsantaraffle.net/openai/mcp

Content-Type: application/json

Wersja protokołu MCP: 2025-06-18

Ten serwer udostępnia dwa kanały na tej samej domenie: POST /mcp — domyślny kanał z pełnym zestawem narzędzi, dla asystentów takich jak Claude; oraz POST /openai/mcp — kanał zgodny z OpenAI, używany przez aplikację ChatGPT, który udostępnia tylko trzy publiczne narzędzia opisane poniżej. Oba używają tego samego protokołu JSON-RPC 2.0.

Uzgadnianie połączenia (Initialize)

Każdy klient MCP musi zakończyć proces uzgadniania initialize przed wywołaniem narzędzi. Po otrzymaniu odpowiedzi klient musi wysłać wiadomość notifications/initialized (bez pola id).

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-06-18",
    "capabilities": {},
    "clientInfo": {
      "name": "my-client",
      "version": "1.0.0"
    }
  }
}

Po odpowiedzi initialize wyślij: { "jsonrpc": "2.0", "method": "notifications/initialized" } — serwer odpowiada 202 Accepted z pustym ciałem odpowiedzi.

create_draw — schemat JSON

Głównym narzędziem jest create_draw. Tworzy ono losowanie wymiany prezentów z N uczestnikami (minimum 3), dopasowuje ich losowo z zachowaniem ograniczeń wykluczeń i zwraca drawId oraz shareCode do dalszych operacji.

{
  "type": "object",
  "required": ["date", "participants"],
  "properties": {
    "date": {
      "type": "string",
      "format": "date",
      "description": "Draw date, YYYY-MM-DD. Today or future."
    },
    "participants": {
      "type": "array",
      "minItems": 3,
      "description": "Minimum 3 participants. The first is treated as the organiser.",
      "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 of participants this person must NOT be matched with."
          }
        }
      }
    },
    "drawName": {
      "type": "string",
      "maxLength": 255,
      "description": "Optional. Defaults to e.g. \"Secret Santa 2026\"."
    },
    "price": {
      "type": "string",
      "description": "Gift budget, free text. Examples: \"£25\", \"$30\"."
    },
    "message": {
      "type": "string",
      "description": "Invitation email body. If omitted, a localised default is used. Placeholder \"ParticipantX\" replaced with the recipient's name."
    },
    "locale": {
      "type": "string",
      "description": "BCP 47 language tag. E.g. \"en-GB\", \"es-ES\", \"es-MX\". Determines brand and templates."
    }
  }
}

Opis pól

Pole Typ Wymagane Opis
date string (date) Tak Data losowania w formacie YYYY-MM-DD. Musi być dzisiejsza lub przyszła.
participants array (min 3) Tak Lista uczestników. Każdy ma imię, e-mail i opcjonalne wykluczenia.
drawName string Nie Opcjonalna nazwa losowania. Domyślnie „Secret Santa 2026”.
price string Nie Budżet na prezent jako dowolny tekst (np. „£25”, „$30”).
message string Nie Niestandardowa treść e-maila zapraszającego. Jeśli pominięte, używana jest domyślna wersja zlokalizowana.
locale string (BCP 47) Nie Określa markę (SS/AS/MX/AI) i zlokalizowane szablony. W braku wartości używany jest nagłówek Accept-Language.

Dostępne narzędzia

create_draw — Utwórz losowanie

Tworzy losowanie wymiany prezentów z N uczestnikami (minimum 3). Dopasowuje uczestników losowo z zachowaniem ograniczeń wykluczeń. Zwraca drawId i shareCode do dalszych operacji.

send_invitations_email — Wyślij zaproszenia e-mailem

Wysyła spersonalizowany e-mail do każdego uczestnika z osobistym linkiem do dołączenia do losowania. Można wywołać tylko raz na losowanie.

Wymaga drawId i shareCode z create_draw.

get_group_share_message — Wygeneruj wiadomość na WhatsApp/Telegram

Generuje gotową do wklejenia wiadomość do udostępnienia w czacie grupowym. Bez efektów ubocznych — nie są tworzone żadne dane ani wysyłane e-maile.

Typowy przepływ integracji

1 Initialize → Wyślij uzgadnianie initialize i otrzymaj możliwości serwera.
2 notifications/initialized → Zakończ uzgadnianie (serwer odpowiada 202 Accepted).
3 tools/list → Odkryj trzy dostępne narzędzia.
4 tools/call create_draw → Utwórz losowanie i otrzymaj drawId + shareCode ze structuredContent.
5 Opcja A: tools/call send_invitations_email → Wyślij e-maile do wszystkich uczestników.
6 Opcja B: tools/call get_group_share_message → Otrzymaj gotową wiadomość na WhatsApp/Telegram.

Kierowanie po języku i marce

Parametr locale w argumentach każdego narzędzia określa, która marka i szablony są używane. Zawsze podawaj locale, by uzyskać najlepsze rezultaty.

locale Marka Gra
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-* (lub pominięte) SS (Secret Santa) Secret Santa Raffle

Bezpieczeństwo i prywatność w integracji z AI

Przetwarzanie efemeryczne

Imiona i adresy e-mail podane przez interfejs czatu są wykorzystywane wyłącznie do wygenerowania losowania. Nie są przechowywane w modelu językowym ani wykorzystywane do przyszłego trenowania AI.

Szyfrowanie od początku do końca

Cała komunikacja między asystentem AI a naszymi serwerami odbywa się przez bezpieczny protokół HTTPS.

Przechowywanie danych

Po utworzeniu losowania zarządzanie danymi osobowymi (e-maile i przydziały) zostaje przekazane naszej bezpiecznej infrastrukturze, w pełnej zgodności z przepisami RODO.

Kontrola użytkownika

AI ma dostęp wyłącznie do danych jawnie podanych przez organizatora podczas rozmowy w języku naturalnym.

Obsługa błędów

Serwer zwraca błędy na poziomie narzędzia z isError: true w wyniku, odróżniając „narzędzie zawiodło” od „narzędzie nie istnieje”.

Błąd Przyczyna
lottery_impossible Wykluczenia uniemożliwiają prawidłowe losowanie. Zasugeruj usunięcie części wykluczeń lub dodanie kolejnych uczestników.
validation Backend odrzucił dane (422 z błędami). Wypisuje pola, które nie przeszły walidacji.
not_found Podany drawId nie istnieje. Zasugeruj sprawdzenie lub ponowne utworzenie losowania.
forbidden Nieprawidłowy shareCode. Nie powinno się zdarzyć, jeśli pochodzi z tej samej odpowiedzi create_draw.
already_sent Zaproszenia zostały już wysłane dla tego losowania. Każde losowanie można wysłać zbiorczo tylko raz.
server Tymczasowy błąd backendu (5xx). Zasugeruj ponowienie próby za kilka minut.

Jak to działa dla użytkowników?

Jeśli wolisz poradnik krok po kroku bez technicznego żargonu, zajrzyj na nasz wpis na blogu wyjaśniający, jak każdy może utworzyć losowanie Mikołajek, po prostu rozmawiając z ChatGPT.

Przeczytaj poradnik dla użytkowników

Gotowy, by utworzyć swoje losowanie?

Pomiń AI i utwórz swoje losowanie Mikołajek bezpośrednio na naszej stronie. Za darmo, szybko, bez rejestracji.

Utwórz darmowe losowanie