DrawKind Secret Santa

Draw names for Secret Santa without sign-ups or email addresses.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
98%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,059Tokens (tool definitions)
~10.1 KBTypical response size
Moderate attention impact (1.61% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "gift-exchange": {
      "url": "https://gift-exchange.zovo.one/mcp"
    }
  }
}

Remote endpoints

https://gift-exchange.zovo.one/mcpstreamable-http

What it can do

Tool inventory

Tools (2)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢plan_gift_exchange(participants, households, exclusions, no_two_person_loops, budget, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "participants": {
      "minItems": 1,
      "maxItems": 200,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 120
      },
      "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."
    },
    "households": {
      "description": "Couples or households whose members must not draw each other (both directions), e.g. [[\"Ana\",\"Bo\"],[\"Cy\",\"Dee\",\"Eli\"]].",
      "maxItems": 30,
      "type": "array",
      "items": {
        "maxItems": 60,
        "type": "array",
        "items": {
          "type": "string",
          "maxLength": 120,
          "description": "A participant's name exactly as listed in participants, e.g. Ana."
        }
      }
    },
    "exclusions": {
      "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.",
      "maxItems": 400,
      "type": "array",
      "items": {
        "type": "object",
        "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."
          }
        },
        "required": [
          "giver",
          "cannot_draw"
        ]
      }
    },
    "no_two_person_loops": {
      "description": "true = never let two people draw each other (no A gives to B while B gives to A). Default false.",
      "type": "boolean"
    },
    "budget": {
      "description": "Gift budget as the group says it, e.g. $30, 25 EUR, or £20-£25.",
      "anyOf": [
        {
          "type": "string",
          "maxLength": 60
        },
        {
          "type": "number"
        }
      ]
    },
    "exchange_date": {
      "description": "Gift exchange date as YYYY-MM-DD, e.g. 2026-12-18.",
      "type": "string",
      "maxLength": 40
    },
    "event_name": {
      "description": "Name of the exchange shown on every link, e.g. Office Holiday Party 2026.",
      "type": "string",
      "maxLength": 120
    },
    "wish_lists": {
      "description": "Optional wish lists. Each one is shown only to the person who draws that participant.",
      "maxItems": 60,
      "type": "array",
      "items": {
        "type": "object",
        "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."
          }
        },
        "required": [
          "name",
          "wishes"
        ]
      }
    },
    "organizer_note": {
      "description": "Optional note shown on every reveal page, e.g. Wrap gifts and bring them to the kitchen by 3 pm.",
      "type": "string",
      "maxLength": 400
    },
    "language": {
      "description": "Language of the reveal pages and share messages: en, es, fr, de, pl, pt, or ja (e.g. pl). Default en.",
      "type": "string",
      "maxLength": 20
    },
    "include_organizer_list": {
      "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.",
      "type": "boolean"
    }
  },
  "required": [
    "participants"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "mode": {
      "type": "string"
    },
    "event_name": {
      "type": [
        "string",
        "null"
      ]
    },
    "draw_code": {
      "type": "string"
    },
    "participants": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "link": {
            "type": "string"
          },
          "has_wish_list": {
            "type": "boolean"
          }
        },
        "required": [
          "name",
          "link",
          "has_wish_list"
        ],
        "additionalProperties": false
      }
    },
    "households": {
      "type": "array",
      "items": {
        "type": "array",
        "items": {
          "type": "string"
        }
      }
    },
    "exclusions": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "giver": {
            "type": "string"
          },
          "cannot_draw": {
            "type": "string"
          }
        },
        "required": [
          "giver",
          "cannot_draw"
        ],
        "additionalProperties": false
      }
    },
    "rules": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "budget": {
      "type": [
        "string",
        "null"
      ]
    },
    "exchange_date": {
      "type": [
        "string",
        "null"
      ]
    },
    "exchange_date_label": {
      "type": [
        "string",
        "null"
      ]
    },
    "language": {
      "type": "string"
    },
    "valid_arrangements": {
      "type": "object",
      "properties": {
        "exact": {
          "type": "boolean"
        },
        "count": {
          "type": [
            "number",
            "null"
          ]
        },
        "label": {
          "type": "string"
        }
      },
      "required": [
        "exact",
        "count",
        "label"
      ],
      "additionalProperties": false
    },
    "sampling": {
      "type": "string"
    },
    "message_template": {
      "type": "string"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "downloads": {
      "type": "object",
      "properties": {
        "organizer_list": {
          "type": "string"
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "mode",
    "event_name",
    "draw_code",
    "participants",
    "households",
    "exclusions",
    "rules",
    "budget",
    "exchange_date",
    "exchange_date_label",
    "language",
    "valid_arrangements",
    "sampling",
    "message_template",
    "warnings",
    "downloads"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢plan_white_elephant(participants, steal_limit, max_steals_per_turn, first_player_final_swap, no_immediate_steal_back, ...)

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).

Input Schema

{
  "type": "object",
  "properties": {
    "participants": {
      "minItems": 1,
      "maxItems": 200,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 120
      },
      "description": "Everyone playing (3 to 60 people), e.g. [\"Ana\",\"Bo\",\"Cy\",\"Dee\",\"Eli\",\"Fay\",\"Gus\",\"Hal\"]. Names must be unique."
    },
    "steal_limit": {
      "description": "How many times one gift can be stolen before it is frozen, e.g. 3 (default). 0 turns stealing off.",
      "type": "integer",
      "minimum": 0,
      "maximum": 5
    },
    "max_steals_per_turn": {
      "description": "Optional cap on steals in one turn's chain, e.g. 2. Omit for no cap.",
      "type": "integer",
      "minimum": 1,
      "maximum": 10
    },
    "first_player_final_swap": {
      "description": "true (default) = player 1 gets a final turn to swap with any unfrozen gift, since they never had a chance to steal.",
      "type": "boolean"
    },
    "no_immediate_steal_back": {
      "description": "true (default) = you cannot steal back the gift that was just taken from you.",
      "type": "boolean"
    },
    "budget": {
      "description": "Gift budget, e.g. $25.",
      "anyOf": [
        {
          "type": "string",
          "maxLength": 60
        },
        {
          "type": "number"
        }
      ]
    },
    "party_date": {
      "description": "Party date as YYYY-MM-DD, e.g. 2026-12-12.",
      "type": "string",
      "maxLength": 40
    },
    "event_name": {
      "description": "Name printed on the rules sheet, e.g. Team White Elephant 2026.",
      "type": "string",
      "maxLength": 120
    },
    "paper": {
      "description": "PDF paper size: letter (default) or a4, e.g. a4.",
      "type": "string",
      "maxLength": 10
    }
  },
  "required": [
    "participants"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "mode": {
      "type": "string"
    },
    "event_name": {
      "type": [
        "string",
        "null"
      ]
    },
    "turn_order": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "rules": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "steal_limit": {
      "type": "number"
    },
    "max_steals_per_turn": {
      "type": [
        "number",
        "null"
      ]
    },
    "first_player_final_swap": {
      "type": "boolean"
    },
    "no_immediate_steal_back": {
      "type": "boolean"
    },
    "budget": {
      "type": [
        "string",
        "null"
      ]
    },
    "party_date": {
      "type": [
        "string",
        "null"
      ]
    },
    "party_date_label": {
      "type": [
        "string",
        "null"
      ]
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "downloads": {
      "type": "object",
      "properties": {
        "pdf": {
          "type": "string"
        },
        "page": {
          "type": "string"
        }
      },
      "required": [
        "pdf",
        "page"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "mode",
    "event_name",
    "turn_order",
    "rules",
    "steal_limit",
    "max_steals_per_turn",
    "first_player_final_swap",
    "no_immediate_steal_back",
    "budget",
    "party_date",
    "party_date_label",
    "warnings",
    "downloads"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded2 tools