Dokumentacja dla deweloperów: integracja MCP
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
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ówMoże Ci się też spodobać
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