Koskamo

Zovo Fair Draw MCP

Organize a prize draw that everyone can check. Zovo Fair Draw makes a hosted page for a giveaway, a door prize, a classroom pick or a team raffle without tickets. Entrants add their name from one link, or you paste the list. From the moment it is made, the page shows a SHA-256 commitment of a secret seed and the time it was made. At the draw, the seed is revealed and the winners follow from a published algorithm, so anyone can re-run it with a short Python script and get the same names.

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.

Zovo Fair Draw MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-08Published by Zovo
MCP endpoint (Streamable HTTP)
https://fair-draw.zovo.one/mcp
Vendor documentation

What its tools do

4 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Read-only (1)

4 of 4 have a description · 4 of 4 declare behavior hints · 4 of 4 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Run a prize draw for a team lunch voucher
  • Make a fair draw with a provided list of names
  • Draw the winners for a prize draw
  • Export entries and results as CSV

Source and maintenance

Community listingRegistry 1.0.0

Protocol and capabilities

Server
fair-draw 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
4 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.

Zovo Fair Draw runs a prize draw on a hosted page that anyone can check. create_prize_draw publishes the page with a SHA-256 commitment of a secret seed; entrants add their names on the public page or the organizer adds a list with add_draw_entries. draw_winners closes entries and picks winners with a published, reproducible method. show_draw_results reads the state. It does not take payments, sell tickets or handle bets.

Tools

4 advertised

create_prize_draw — Create prize draw
Advertised by the server during the last successful anonymous check.
Open-world

Use this when the user wants a fair random pick of winners from a group: a giveaway, door prize, raffle without tickets, classroom or team pick. Publishes a draw page with a public link where entrants add their names (or only the organizer adds them), and returns a private organizer link. Optionally adds a first list of names. Up to 500 entries, 1 to 20 winners, up to 10 backups. For free draws only: set free_entry to true to confirm nobody pays to enter; it does not handle money. Does not draw yet; use draw_winners for that.

create_prize_draw input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "title",
    "free_entry"
  ],
  "properties": {
    "note": {
      "type": "string",
      "maxLength": 800,
      "description": "Optional short note shown on the page, up to 400 characters, e.g. Draw on Friday at the team call."
    },
    "names": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 80
      },
      "maxItems": 500,
      "description": "Entrant display names, up to 500, each up to 40 characters, one person per item, e.g. [\"Ana\", \"Ben K.\", \"Chloe\"]. First names or nicknames only."
    },
    "prize": {
      "type": "string",
      "maxLength": 400,
      "description": "What the winners get, up to 200 characters, e.g. One 50-minute massage voucher."
    },
    "title": {
      "type": "string",
      "maxLength": 240,
      "description": "Short title of the draw, up to 120 characters, e.g. Team lunch voucher draw."
    },
    "backups": {
      "type": "integer",
      "maximum": 10,
      "minimum": 0,
      "description": "Number of backup winners drawn in order after the winners, 0 to 10 (default 0). Example: 2."
    },
    "winners": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1,
      "description": "Number of winners, 1 to 20 (default 1). Example: 2."
    },
    "free_entry": {
      "type": "boolean",
      "description": "Set true to confirm nobody pays to enter and no money is pooled; this tool does not handle money."
    },
    "public_entry": {
      "type": "boolean",
      "description": "true (default) = people add their own name on the public page; false = only the organizer adds names."
    }
  }
}
create_prize_draw output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "title",
    "prize",
    "winners_wanted",
    "backups_wanted",
    "public_entry",
    "entries",
    "names",
    "names_shown",
    "status",
    "commitment",
    "winners",
    "backups",
    "seed",
    "entry_list_hash",
    "drawn_at",
    "expires_at",
    "public_url",
    "manage_url",
    "action"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "seed": {
      "type": [
        "string",
        "null"
      ]
    },
    "added": {
      "type": "number"
    },
    "names": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "prize": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "action": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "backups": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "entries": {
      "type": "number"
    },
    "skipped": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "winners": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "drawn_at": {
      "type": [
        "string",
        "null"
      ]
    },
    "commitment": {
      "type": "string"
    },
    "expires_at": {
      "type": "string"
    },
    "manage_url": {
      "type": "string"
    },
    "public_url": {
      "type": "string"
    },
    "names_shown": {
      "type": "number"
    },
    "public_entry": {
      "type": "boolean"
    },
    "skipped_count": {
      "type": "number"
    },
    "backups_wanted": {
      "type": "number"
    },
    "winners_wanted": {
      "type": "number"
    },
    "entry_list_hash": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
create_prize_draw annotations
{
  "title": "Create prize draw",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
add_draw_entries — Add names to prize draw
Advertised by the server during the last successful anonymous check.
Open-world

Use this when the organizer wants to add entrant names to a draw made with create_prize_draw, before the winners are drawn. Takes the private organizer link and a list of up to 100 names per call (send more in further calls). Duplicate names (ignoring case) are skipped and reported. Does not draw; does not remove names.

add_draw_entries input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "manage_url",
    "names"
  ],
  "properties": {
    "names": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 80
      },
      "maxItems": 100,
      "description": "Entrant display names to add, up to 100 per call (send more in further calls), each up to 40 characters, one person per item, e.g. [\"Ana\", \"Ben K.\", \"Chloe\"]. First names or nicknames only."
    },
    "manage_url": {
      "type": "string",
      "maxLength": 400,
      "description": "The private organizer link of the draw, e.g. https://fair-draw.zovo.one/m/AbC123.../XyZ789... (contains /m/)."
    }
  }
}
add_draw_entries output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "title",
    "prize",
    "winners_wanted",
    "backups_wanted",
    "public_entry",
    "entries",
    "names",
    "names_shown",
    "status",
    "commitment",
    "winners",
    "backups",
    "seed",
    "entry_list_hash",
    "drawn_at",
    "expires_at",
    "public_url",
    "manage_url",
    "action"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "seed": {
      "type": [
        "string",
        "null"
      ]
    },
    "added": {
      "type": "number"
    },
    "names": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "prize": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "action": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "backups": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "entries": {
      "type": "number"
    },
    "skipped": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "winners": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "drawn_at": {
      "type": [
        "string",
        "null"
      ]
    },
    "commitment": {
      "type": "string"
    },
    "expires_at": {
      "type": "string"
    },
    "manage_url": {
      "type": "string"
    },
    "public_url": {
      "type": "string"
    },
    "names_shown": {
      "type": "number"
    },
    "public_entry": {
      "type": "boolean"
    },
    "skipped_count": {
      "type": "number"
    },
    "backups_wanted": {
      "type": "number"
    },
    "winners_wanted": {
      "type": "number"
    },
    "entry_list_hash": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
add_draw_entries annotations
{
  "title": "Add names to prize draw",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
draw_winners — Draw prize winners
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Use this when the organizer is ready to pick the winners of a draw made with create_prize_draw. Takes the private organizer link. Closes entries, picks the winners and backups with the published method, and reveals the seed on the public page so anyone can verify. The result is final: running it again returns the same winners. Needs at least one entry. Does not add or remove names and does not redraw.

draw_winners input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "manage_url"
  ],
  "properties": {
    "manage_url": {
      "type": "string",
      "maxLength": 400,
      "description": "The private organizer link of the draw, e.g. https://fair-draw.zovo.one/m/AbC123.../XyZ789... (contains /m/)."
    }
  }
}
draw_winners output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "title",
    "prize",
    "winners_wanted",
    "backups_wanted",
    "public_entry",
    "entries",
    "names",
    "names_shown",
    "status",
    "commitment",
    "winners",
    "backups",
    "seed",
    "entry_list_hash",
    "drawn_at",
    "expires_at",
    "public_url",
    "manage_url",
    "action"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "seed": {
      "type": [
        "string",
        "null"
      ]
    },
    "added": {
      "type": "number"
    },
    "names": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "prize": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "action": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "backups": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "entries": {
      "type": "number"
    },
    "skipped": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "winners": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "drawn_at": {
      "type": [
        "string",
        "null"
      ]
    },
    "commitment": {
      "type": "string"
    },
    "expires_at": {
      "type": "string"
    },
    "manage_url": {
      "type": "string"
    },
    "public_url": {
      "type": "string"
    },
    "names_shown": {
      "type": "number"
    },
    "public_entry": {
      "type": "boolean"
    },
    "skipped_count": {
      "type": "number"
    },
    "backups_wanted": {
      "type": "number"
    },
    "winners_wanted": {
      "type": "number"
    },
    "entry_list_hash": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
draw_winners annotations
{
  "title": "Draw prize winners",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
show_draw_results — Show prize draw
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants the state of a draw made with create_prize_draw: number of entries, the names, the commitment, and after the draw the winners, backups and proof values. Takes the private organizer link. Does not change the draw.

show_draw_results input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "manage_url"
  ],
  "properties": {
    "manage_url": {
      "type": "string",
      "maxLength": 400,
      "description": "The private organizer link of the draw, e.g. https://fair-draw.zovo.one/m/AbC123.../XyZ789... (contains /m/)."
    }
  }
}
show_draw_results output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "title",
    "prize",
    "winners_wanted",
    "backups_wanted",
    "public_entry",
    "entries",
    "names",
    "names_shown",
    "status",
    "commitment",
    "winners",
    "backups",
    "seed",
    "entry_list_hash",
    "drawn_at",
    "expires_at",
    "public_url",
    "manage_url",
    "action"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "seed": {
      "type": [
        "string",
        "null"
      ]
    },
    "added": {
      "type": "number"
    },
    "names": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "prize": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "action": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "backups": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "entries": {
      "type": "number"
    },
    "skipped": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "winners": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "drawn_at": {
      "type": [
        "string",
        "null"
      ]
    },
    "commitment": {
      "type": "string"
    },
    "expires_at": {
      "type": "string"
    },
    "manage_url": {
      "type": "string"
    },
    "public_url": {
      "type": "string"
    },
    "names_shown": {
      "type": "number"
    },
    "public_entry": {
      "type": "boolean"
    },
    "skipped_count": {
      "type": "number"
    },
    "backups_wanted": {
      "type": "number"
    },
    "winners_wanted": {
      "type": "number"
    },
    "entry_list_hash": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
show_draw_results annotations
{
  "title": "Show prize draw",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

fair-draw-widget — Zovo Fair Draw view

Advertised by the server during the last successful anonymous check.

Interactive view for Zovo Fair Draw.

fair-draw-widget URI
ui://widget/fair-draw-v1-1.0.0-e6c16df44c7ef08d9ac8f2dc5cfcf11d3d2dce48d1efcd042be02b1a2a31fbfd.html

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

fair-draw-widget-legacy — Zovo Fair Draw view (previous versions)

Advertised by the server during the last successful anonymous check.

fair-draw-widget-legacy URI template
ui://widget/fair-draw-{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
1067 ms
95th percentile latency
1067 ms

Maintenance history

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

  • · probe · passed · 1067 ms · metadata changed · 4 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 zovo-fair-draw-mcp https://fair-draw.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 zovo-fair-draw-mcp --url https://fair-draw.zovo.one/mcp

Cursor

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

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start zovo-fair-draw-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "zovo-fair-draw-mcp": {
      "type": "http",
      "url": "https://fair-draw.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 zovo-fair-draw-mcp https://fair-draw.zovo.one/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://fair-draw.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": {
    "zovo-fair-draw-mcp": {
      "serverUrl": "https://fair-draw.zovo.one/mcp"
    }
  }
}

Let your agent find its tools

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