Draw names for Secret Santa without sign-ups or email addresses.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use this when the user wants to draw names for a Secret Santa or gift exchange (secret santa generator, name draw, no email needed), including exclusions such as couples, households, "Ana can't draw Bo", or last year's pairs, an optional no 2-person loops rule, a budget, an exchange date, wish lists, and an organizer note. Returns one private reveal link per participant plus copy-ready messages; each pairing is encrypted inside the link, so the result never shows who drew whom. Explains exactly why when no valid draw exists. Handles 3 to 60 people. Does not send emails or texts and does not store anything. Do not use for White Elephant or Yankee Swap games (use plan_white_elephant) or for picking one random winner.
Everyone taking part (3 to 60 people), e.g. ["Ana","Bo","Cy","Dee","Eli","Fay"]. Names must be unique; add a last initial to tell two people with the same name apart. Any language or script works.
Gift budget as the group says it, e.g. $30, 25 EUR, or £20-£25.
Language of the reveal pages and share messages: en, es, fr, de, pl, pt, or ja (e.g. pl). Default en.
Name of the exchange shown on every link, e.g. Office Holiday Party 2026.
One-way rules such as "Ana can't draw Cy" or last year's pairs, e.g. [{"giver":"Ana","cannot_draw":"Cy"}]. Cy may still draw Ana unless a second rule says otherwise.
Couples or households whose members must not draw each other (both directions), e.g. [["Ana","Bo"],["Cy","Dee","Eli"]].
Optional wish lists. Each one is shown only to the person who draws that participant.
Gift exchange date as YYYY-MM-DD, e.g. 2026-12-18.
Optional note shown on every reveal page, e.g. Wrap gifts and bring them to the kitchen by 3 pm.
true = never let two people draw each other (no A gives to B while B gives to A). Default false.
true only when the organizer explicitly asks to see every pairing; adds a link to the full list, which spoils the surprise for them. Default false.
Use this when the user wants to draw names for a Secret Santa or gift exchange (secret santa generator, name draw, no email needed), including exclusions such as couples, households, "Ana can't draw Bo", or last year's pairs, an optional no 2-person loops rule, a budget, an exchange date, wish lists, and an organizer note. Returns one private reveal link per participant plus copy-ready messages; each pairing is encrypted inside the link, so the result never shows who drew whom. Explains exactly why when no valid draw exists. Handles 3 to 60 people. Does not send emails or texts and does not store anything. Do not use for White Elephant or Yankee Swap games (use plan_white_elephant) or for picking one random winner.
| Argument | Type | Description |
|---|---|---|
| budget | any | Gift budget as the group says it, e.g. $30, 25 EUR, or £20-£25. |
| language | string | Language of the reveal pages and share messages: en, es, fr, de, pl, pt, or ja (e.g. pl). Default en. |
| event_name | string | Name of the exchange shown on every link, e.g. Office Holiday Party 2026. |
| exclusions | array | One-way rules such as "Ana can't draw Cy" or last year's pairs, e.g. [{"giver":"Ana","cannot_draw":"Cy"}]. Cy may still draw Ana unless a second rule says otherwise. |
| households | array | Couples or households whose members must not draw each other (both directions), e.g. [["Ana","Bo"],["Cy","Dee","Eli"]]. |
| wish_lists | array | Optional wish lists. Each one is shown only to the person who draws that participant. |
| participants* | array | Everyone taking part (3 to 60 people), e.g. ["Ana","Bo","Cy","Dee","Eli","Fay"]. Names must be unique; add a last initial to tell two people with the same name apart. Any language or script works. |
| exchange_date | string | Gift exchange date as YYYY-MM-DD, e.g. 2026-12-18. |
| organizer_note | string | Optional note shown on every reveal page, e.g. Wrap gifts and bring them to the kitchen by 3 pm. |
| no_two_person_loops | boolean | true = never let two people draw each other (no A gives to B while B gives to A). Default false. |
| include_organizer_list | boolean | true only when the organizer explicitly asks to see every pairing; adds a link to the full list, which spoils the surprise for them. Default false. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"participants"
],
"properties": {
"budget": {
"anyOf": [
{
"type": "string",
"maxLength": 60
},
{
"type": "number"
}
],
"description": "Gift budget as the group says it, e.g. $30, 25 EUR, or £20-£25."
},
"language": {
"type": "string",
"maxLength": 20,
"description": "Language of the reveal pages and share messages: en, es, fr, de, pl, pt, or ja (e.g. pl). Default en."
},
"event_name": {
"type": "string",
"maxLength": 120,
"description": "Name of the exchange shown on every link, e.g. Office Holiday Party 2026."
},
"exclusions": {
"type": "array",
"items": {
"type": "object",
"required": [
"giver",
"cannot_draw"
],
"properties": {
"giver": {
"type": "string",
"maxLength": 120,
"description": "Who must not draw the other person, e.g. Ana."
},
"cannot_draw": {
"type": "string",
"maxLength": 120,
"description": "Whom the giver must not draw, e.g. Cy."
}
}
},
"maxItems": 400,
"description": "One-way rules such as \"Ana can't draw Cy\" or last year's pairs, e.g. [{\"giver\":\"Ana\",\"cannot_draw\":\"Cy\"}]. Cy may still draw Ana unless a second rule says otherwise."
},
"households": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"description": "A participant's name exactly as listed in participants, e.g. Ana."
},
"maxItems": 60
},
"maxItems": 30,
"description": "Couples or households whose members must not draw each other (both directions), e.g. [[\"Ana\",\"Bo\"],[\"Cy\",\"Dee\",\"Eli\"]]."
},
"wish_lists": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"wishes"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120,
"description": "A participant's name exactly as listed in participants, e.g. Ana."
},
"wishes": {
"type": "string",
"maxLength": 400,
"description": "Gift ideas shown to whoever draws this person, e.g. Board games, dark chocolate, no candles."
}
}
},
"maxItems": 60,
"description": "Optional wish lists. Each one is shown only to the person who draws that participant."
},
"participants": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 200,
"minItems": 1,
"description": "Everyone taking part (3 to 60 people), e.g. [\"Ana\",\"Bo\",\"Cy\",\"Dee\",\"Eli\",\"Fay\"]. Names must be unique; add a last initial to tell two people with the same name apart. Any language or script works."
},
"exchange_date": {
"type": "string",
"maxLength": 40,
"description": "Gift exchange date as YYYY-MM-DD, e.g. 2026-12-18."
},
"organizer_note": {
"type": "string",
"maxLength": 400,
"description": "Optional note shown on every reveal page, e.g. Wrap gifts and bring them to the kitchen by 3 pm."
},
"no_two_person_loops": {
"type": "boolean",
"description": "true = never let two people draw each other (no A gives to B while B gives to A). Default false."
},
"include_organizer_list": {
"type": "boolean",
"description": "true only when the organizer explicitly asks to see every pairing; adds a link to the full list, which spoils the surprise for them. Default false."
}
}
}Use this when the user wants to run a White Elephant, Yankee Swap, or Dirty Santa gift game: shuffles a fair random turn order for 3 to 60 players and writes the rules (steal limit per gift, optional cap on steals per turn, no immediate steal-backs, player 1's final swap), with a printable PDF (Letter or A4) that includes a gift tracker and a printable web page. Does not run the game live or track steals. Do not use for Secret Santa name draws (use plan_gift_exchange).
| Argument | Type | Description |
|---|---|---|
| paper | string | PDF paper size: letter (default) or a4, e.g. a4. |
| budget | any | Gift budget, e.g. $25. |
| event_name | string | Name printed on the rules sheet, e.g. Team White Elephant 2026. |
| party_date | string | Party date as YYYY-MM-DD, e.g. 2026-12-12. |
| steal_limit | integer | How many times one gift can be stolen before it is frozen, e.g. 3 (default). 0 turns stealing off. |
| participants* | array | Everyone playing (3 to 60 people), e.g. ["Ana","Bo","Cy","Dee","Eli","Fay","Gus","Hal"]. Names must be unique. |
| max_steals_per_turn | integer |
| Optional cap on steals in one turn's chain, e.g. 2. Omit for no cap. |
| first_player_final_swap | boolean | true (default) = player 1 gets a final turn to swap with any unfrozen gift, since they never had a chance to steal. |
| no_immediate_steal_back | boolean | true (default) = you cannot steal back the gift that was just taken from you. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"participants"
],
"properties": {
"paper": {
"type": "string",
"maxLength": 10,
"description": "PDF paper size: letter (default) or a4, e.g. a4."
},
"budget": {
"anyOf": [
{
"type": "string",
"maxLength": 60
},
{
"type": "number"
}
],
"description": "Gift budget, e.g. $25."
},
"event_name": {
"type": "string",
"maxLength": 120,
"description": "Name printed on the rules sheet, e.g. Team White Elephant 2026."
},
"party_date": {
"type": "string",
"maxLength": 40,
"description": "Party date as YYYY-MM-DD, e.g. 2026-12-12."
},
"steal_limit": {
"type": "integer",
"maximum": 5,
"minimum": 0,
"description": "How many times one gift can be stolen before it is frozen, e.g. 3 (default). 0 turns stealing off."
},
"participants": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 200,
"minItems": 1,
"description": "Everyone playing (3 to 60 people), e.g. [\"Ana\",\"Bo\",\"Cy\",\"Dee\",\"Eli\",\"Fay\",\"Gus\",\"Hal\"]. Names must be unique."
},
"max_steals_per_turn": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Optional cap on steals in one turn's chain, e.g. 2. Omit for no cap."
},
"first_player_final_swap": {
"type": "boolean",
"description": "true (default) = player 1 gets a final turn to swap with any unfrozen gift, since they never had a chance to steal."
},
"no_immediate_steal_back": {
"type": "boolean",
"description": "true (default) = you cannot steal back the gift that was just taken from you."
}
}
}