Koskamo

DrawKind Secret Santa MCP

DrawKind Secret Santa facilitates private gift exchanges and White Elephant parties via chat. It generates fair, encrypted reveal links for participants, manages exclusions for couples or households, and supports budget and wish list integration without requiring user sign-ups or email addresses.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

DrawKind Secret Santa MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Zovo
MCP endpoint (Streamable HTTP)
https://gift-exchange.zovo.one/mcp
Vendor documentation

What you can do with it

  • Draw names for Secret Santa with exclusions and budget constraints
  • Generate private reveal links for gift recipients
  • Create White Elephant turn orders with steal limits
  • Print rules and gift tracker sheets for parties

Source and maintenance

Community listingRegistry 1.0.0

Protocol and capabilities

Server
gift-exchange 1.0.0
MCP protocol
2025-06-18
Tools
2 advertised
Resources
1 advertised
Resource templates
1 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

DrawKind Secret Santa runs private Secret Santa draws and White Elephant games. plan_gift_exchange draws names with exclusions and returns one sealed reveal link per person; the pairings are encrypted inside the links and never appear in the result, so never guess, state, or ask for them. Give each person only their own link. plan_white_elephant shuffles a fair turn order and returns rules plus a printable PDF.

Tools

2 advertised

plan_gift_exchange — Plan Secret Santa draw
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

plan_gift_exchange input schema
{
  "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."
    }
  }
}
plan_gift_exchange output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "mode",
    "event_name",
    "draw_code",
    "participants",
    "households",
    "exclusions",
    "rules",
    "budget",
    "exchange_date",
    "exchange_date_label",
    "language",
    "valid_arrangements",
    "sampling",
    "message_template",
    "warnings",
    "downloads"
  ],
  "properties": {
    "mode": {
      "type": "string"
    },
    "rules": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "budget": {
      "type": [
        "string",
        "null"
      ]
    },
    "language": {
      "type": "string"
    },
    "sampling": {
      "type": "string"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "downloads": {
      "type": "object",
      "properties": {
        "organizer_list": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "draw_code": {
      "type": "string"
    },
    "event_name": {
      "type": [
        "string",
        "null"
      ]
    },
    "exclusions": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "giver",
          "cannot_draw"
        ],
        "properties": {
          "giver": {
            "type": "string"
          },
          "cannot_draw": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "households": {
      "type": "array",
      "items": {
        "type": "array",
        "items": {
          "type": "string"
        }
      }
    },
    "participants": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "link",
          "has_wish_list"
        ],
        "properties": {
          "link": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "has_wish_list": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      }
    },
    "exchange_date": {
      "type": [
        "string",
        "null"
      ]
    },
    "message_template": {
      "type": "string"
    },
    "valid_arrangements": {
      "type": "object",
      "required": [
        "exact",
        "count",
        "label"
      ],
      "properties": {
        "count": {
          "type": [
            "number",
            "null"
          ]
        },
        "exact": {
          "type": "boolean"
        },
        "label": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "exchange_date_label": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
plan_gift_exchange annotations
{
  "title": "Plan Secret Santa draw",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
plan_white_elephant — Plan White Elephant game
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

plan_white_elephant input schema
{
  "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."
    }
  }
}
plan_white_elephant output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "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"
  ],
  "properties": {
    "mode": {
      "type": "string"
    },
    "rules": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "budget": {
      "type": [
        "string",
        "null"
      ]
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "downloads": {
      "type": "object",
      "required": [
        "pdf",
        "page"
      ],
      "properties": {
        "pdf": {
          "type": "string"
        },
        "page": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "event_name": {
      "type": [
        "string",
        "null"
      ]
    },
    "party_date": {
      "type": [
        "string",
        "null"
      ]
    },
    "turn_order": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "steal_limit": {
      "type": "number"
    },
    "party_date_label": {
      "type": [
        "string",
        "null"
      ]
    },
    "max_steals_per_turn": {
      "type": [
        "number",
        "null"
      ]
    },
    "first_player_final_swap": {
      "type": "boolean"
    },
    "no_immediate_steal_back": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
plan_white_elephant annotations
{
  "title": "Plan White Elephant game",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

gift-exchange-widget — DrawKind Secret Santa view

Advertised by the server during the last successful anonymous check.

Interactive view for DrawKind Secret Santa.

gift-exchange-widget URI
ui://widget/gift-exchange-v2-1.0.0-1f64a46849ece9d3faf016c7874d27f074b6a60500784432f50ccb487673a47c.html

MIME type: text/html;profile=mcp-app

gift-exchange-widget-legacy — DrawKind Secret Santa view (previous versions)

Advertised by the server during the last successful anonymous check.

gift-exchange-widget-legacy URI template
ui://widget/gift-exchange-{version}.html

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
629 ms
95th percentile latency
629 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 629 ms · metadata changed · 2 tool(s), 1 resource(s), 1 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http drawkind-secret-santa-mcp https://gift-exchange.zovo.one/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add drawkind-secret-santa-mcp --url https://gift-exchange.zovo.one/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable drawkind-secret-santa-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "drawkind-secret-santa-mcp": {
      "url": "https://gift-exchange.zovo.one/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "drawkind-secret-santa-mcp": {
      "type": "streamableHttp",
      "url": "https://gift-exchange.zovo.one/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start drawkind-secret-santa-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "drawkind-secret-santa-mcp": {
      "type": "http",
      "url": "https://gift-exchange.zovo.one/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http drawkind-secret-santa-mcp https://gift-exchange.zovo.one/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "drawkind-secret-santa-mcp": {
      "url": "https://gift-exchange.zovo.one/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "drawkind-secret-santa-mcp": {
      "serverUrl": "https://gift-exchange.zovo.one/mcp"
    }
  }
}

Let your agent find its tools

Find servers like DrawKind Secret Santa MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.