Koskamo

Zovo Bingo Card Maker MCP

Generates printable bingo cards from custom words or classic number sets, providing PDFs, caller sheets, and CSVs. It supports big-screen calling and claim checking, allowing agents to create party, classroom, or goal bingo sets without sign-in.

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 Bingo Card Maker MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Zovo
MCP endpoint (Streamable HTTP)
https://bingo-cards.zovo.one/mcp
Vendor documentation

What you can do with it

  • Generate printable bingo cards from custom word lists
  • Create classic 1-75 or UK 1-90 bingo sets
  • Produce caller sheets with shuffled call orders
  • Check claimed bingo wins by card number

Source and maintenance

Community listingRegistry 1.0.0

Protocol and capabilities

Server
bingo-cards 1.0.0
MCP protocol
2025-06-18
Tools
3 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 Bingo Card Maker builds sets of different printable bingo cards (your words, classic 1-75, or UK 1-90 tickets) with a caller sheet, runs the game (draws and claim checks), and makes a personal goal bingo card. Every card set has a number (seed); pass the same items and caller_args to show_bingo_caller to draw or verify claims. Party, classroom, shower and meeting games only: no prizes, stakes or money.

Tools

3 advertised

generate_bingo_cards — Generate bingo cards
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants printable bingo cards: a bingo card generator or bingo card maker for a holiday party, classroom, baby shower, team meeting, or any game with their own words or phrases, or classic number bingo (1-75) or UK 90-ball tickets. Makes 1-200 different cards (3x3, 4x4 or 5x5, free centre on or off) with each item spread evenly, optionally so that no two cards share a winning line. Returns card 1, balance and uniqueness numbers, and links to a cards PDF (1, 2, 4 or 6 per page, cut lines), a caller sheet PDF and a CSV. Does not add pictures, and does not draw items or check claims (use show_bingo_caller). Not for a single personal goals card (use generate_goal_bingo) or for prize or money games.

generate_bingo_cards input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "mode": {
      "enum": [
        "words",
        "numbers_75",
        "numbers_90"
      ],
      "type": "string",
      "description": "words (default): your own words or phrases. numbers_75: classic US bingo, 5x5 with B 1-15, I 16-30, N 31-45, G 46-60, O 61-75. numbers_90: UK-style 3x9 tickets with 15 numbers from 1-90, printed in strips of 6. Example: words."
    },
    "seed": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Card set number from an earlier result, e.g. 4242. The same items, options and seed always rebuild the same cards. Leave out for a new random set."
    },
    "items": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string",
            "maxLength": 4000
          },
          {
            "type": "number"
          }
        ]
      },
      "maxItems": 400,
      "description": "For mode words: the words or phrases to put on the cards, one per entry, e.g. [\"Ugly sweater\", \"Mistletoe\", \"Hot cocoa\"]. Need at least 24 for 5x5 with a free centre, 25 without, 16 for 4x4, 8 or 9 for 3x3. Up to 300, each up to 100 characters."
    },
    "paper": {
      "enum": [
        "letter",
        "a4"
      ],
      "type": "string",
      "description": "Paper size for the PDFs, e.g. letter (default) or a4."
    },
    "title": {
      "type": "string",
      "maxLength": 120,
      "description": "Heading printed on every card, e.g. Holiday Party Bingo. Default Bingo."
    },
    "grid_size": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Card size for mode words: 3, 4 or 5 (default 5), e.g. 5. Classic numbers_75 is always 5x5; numbers_90 tickets are always 3x9."
    },
    "card_count": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "How many different cards (or tickets) to make, 1-200, e.g. 30. Default 30."
    },
    "free_label": {
      "type": "string",
      "maxLength": 40,
      "description": "Text in the free centre square, e.g. FREE (default), Santa, or Baby."
    },
    "free_space": {
      "type": "boolean",
      "description": "Free centre square on 3x3 and 5x5 cards, e.g. true. Default true for 5x5 and false for 3x3; 4x4 cards have no centre."
    },
    "accent_color": {
      "type": "string",
      "maxLength": 30,
      "description": "Theme colour as hex or a name, e.g. #2B8A3E, red, green, gold, pink, purple, teal, christmas. Default raspberry #C2255C."
    },
    "unique_lines": {
      "type": "boolean",
      "description": "true = no two cards share an identical winning line (row, column or diagonal), so two players never complete the very same line. Needs enough items; the tool explains if the request is not possible. Default false (cards are always all different)."
    },
    "cards_per_page": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Cards per printed page: 1, 2, 4 or 6, e.g. 2. Default 2 (6 for 90-ball tickets). Pages get dashed cut lines."
    }
  }
}
generate_bingo_cards output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "view",
    "title",
    "mode",
    "grid",
    "free_space",
    "free_label",
    "card_count",
    "item_count",
    "cells_per_card",
    "balance",
    "uniqueness",
    "seed",
    "card_1",
    "caller_args",
    "pdf_pages",
    "warnings",
    "downloads"
  ],
  "properties": {
    "grid": {
      "type": "string"
    },
    "mode": {
      "type": "string"
    },
    "seed": {
      "type": "number"
    },
    "view": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "card_1": {
      "type": "array",
      "items": {
        "type": "array",
        "items": {
          "type": "string"
        }
      }
    },
    "balance": {
      "type": "object",
      "required": [
        "min_cards_per_item",
        "max_cards_per_item",
        "spread",
        "note"
      ],
      "properties": {
        "note": {
          "type": "string"
        },
        "spread": {
          "type": "number"
        },
        "max_cards_per_item": {
          "type": "number"
        },
        "min_cards_per_item": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "downloads": {
      "type": "object",
      "required": [
        "cards_pdf",
        "caller_pdf",
        "csv"
      ],
      "properties": {
        "csv": {
          "type": "string"
        },
        "cards_pdf": {
          "type": "string"
        },
        "caller_pdf": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "pdf_pages": {
      "type": "number"
    },
    "card_count": {
      "type": "number"
    },
    "free_label": {
      "type": "string"
    },
    "free_space": {
      "type": "boolean"
    },
    "item_count": {
      "type": "number"
    },
    "uniqueness": {
      "type": "object",
      "required": [
        "all_cards_different",
        "distinct_item_sets",
        "unique_lines",
        "cards_sharing_a_line"
      ],
      "properties": {
        "unique_lines": {
          "type": "boolean"
        },
        "distinct_item_sets": {
          "type": "number"
        },
        "all_cards_different": {
          "type": "boolean"
        },
        "cards_sharing_a_line": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "caller_args": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "cells_per_card": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
generate_bingo_cards annotations
{
  "title": "Generate bingo cards",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
show_bingo_caller — Show bingo caller
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user is running a bingo game: call or draw the next word or number at random, show what has been called on a big screen, check whether a claimed bingo on card number N is real (which line, at which call, and who won first), or list all cards that have bingo now. Pass the same items and the caller_args (mode, grid_size, free_space, card_count, seed, unique_lines) from generate_bingo_cards, plus everything called so far in order. Draws use secure randomness. Does not make or print cards and does not keep game state between calls: always send the full called list. Not for prize, betting or money games.

show_bingo_caller input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "mode": {
      "enum": [
        "words",
        "numbers_75",
        "numbers_90"
      ],
      "type": "string",
      "description": "words (default): your own words or phrases. numbers_75: classic US bingo, 5x5 with B 1-15, I 16-30, N 31-45, G 46-60, O 61-75. numbers_90: UK-style 3x9 tickets with 15 numbers from 1-90, printed in strips of 6. Example: words."
    },
    "seed": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Card set number from an earlier result, e.g. 4242. The same items, options and seed always rebuild the same cards. Leave out for a new random set."
    },
    "items": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string",
            "maxLength": 4000
          },
          {
            "type": "number"
          }
        ]
      },
      "maxItems": 400,
      "description": "For mode words: the words or phrases to put on the cards, one per entry, e.g. [\"Ugly sweater\", \"Mistletoe\", \"Hot cocoa\"]. Need at least 24 for 5x5 with a free centre, 25 without, 16 for 4x4, 8 or 9 for 3x3. Up to 300, each up to 100 characters."
    },
    "title": {
      "type": "string",
      "maxLength": 120,
      "description": "Game title shown on the caller screen, e.g. Holiday Party Bingo."
    },
    "action": {
      "enum": [
        "draw",
        "check",
        "winners",
        "board"
      ],
      "type": "string",
      "description": "draw (default): call the next item at random. check: verify a claimed bingo on card_number. winners: list every card that has the pattern now. board: show what has been called. Example: check."
    },
    "called": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string",
            "maxLength": 4000
          },
          {
            "type": "number"
          }
        ]
      },
      "maxItems": 400,
      "description": "Everything already called, in call order, exactly as shown on the cards, e.g. [\"Mistletoe\", \"Hot cocoa\"] or [\"B-12\", \"N-40\", \"O-71\"]. Empty for a new game."
    },
    "pattern": {
      "enum": [
        "line",
        "two_lines",
        "four_corners",
        "full_card"
      ],
      "type": "string",
      "description": "Winning pattern to check, e.g. line. line: any row, column or diagonal (90-ball: any row). two_lines: two complete lines. four_corners: the 4 corner squares (not for 90-ball). full_card: every square (full house). Default line."
    },
    "grid_size": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Card size for mode words: 3, 4 or 5 (default 5), e.g. 5. Classic numbers_75 is always 5x5; numbers_90 tickets are always 3x9."
    },
    "list_code": {
      "type": "string",
      "maxLength": 16,
      "description": "For word games: list_code from caller_args of generate_bingo_cards, e.g. 0k3x9qa. Confirms the items were sent in the same order as when the cards were made, so card numbers match."
    },
    "card_count": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "How many different cards (or tickets) to make, 1-200, e.g. 30. Default 30."
    },
    "free_space": {
      "type": "boolean",
      "description": "Free centre square on 3x3 and 5x5 cards, e.g. true. Default true for 5x5 and false for 3x3; 4x4 cards have no centre."
    },
    "card_number": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "For action check: the card number printed on the claimed card, e.g. 17."
    },
    "unique_lines": {
      "type": "boolean",
      "description": "true = no two cards share an identical winning line (row, column or diagonal), so two players never complete the very same line. Needs enough items; the tool explains if the request is not possible. Default false (cards are always all different)."
    }
  }
}
show_bingo_caller output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "view",
    "title",
    "mode",
    "action",
    "total_items",
    "called_count",
    "remaining",
    "current",
    "called",
    "pattern",
    "check",
    "winners",
    "caller_args"
  ],
  "properties": {
    "mode": {
      "type": "string"
    },
    "view": {
      "type": "string"
    },
    "check": {
      "anyOf": [
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ]
    },
    "title": {
      "type": "string"
    },
    "action": {
      "type": "string"
    },
    "called": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "current": {
      "type": [
        "string",
        "null"
      ]
    },
    "pattern": {
      "type": "string"
    },
    "winners": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "card",
              "at_call"
            ],
            "properties": {
              "card": {
                "type": "number"
              },
              "at_call": {
                "type": "number"
              }
            },
            "additionalProperties": false
          }
        },
        {
          "type": "null"
        }
      ]
    },
    "remaining": {
      "type": "number"
    },
    "caller_args": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "total_items": {
      "type": "number"
    },
    "called_count": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
show_bingo_caller annotations
{
  "title": "Show bingo caller",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
generate_goal_bingo — Generate goal bingo card
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants a goal bingo card (new year goal bingo, 2027 bingo card, resolutions bingo, bucket-list bingo): one personal 5x5 card (or 4x4, 3x3) of their own goals with a free centre, title, year and theme colour, as a PNG, SVG and printable PDF. Goals marked completed print with a check mark and the tool counts bingo lines. Needs one goal per square (24 for 5x5 with a free centre). Does not invent goals for the user and does not make sets of party cards (use generate_bingo_cards).

generate_goal_bingo input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "goals"
  ],
  "properties": {
    "seed": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Shuffle number from an earlier result to repeat the same order, e.g. 77."
    },
    "year": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Year for the title, e.g. 2027 gives \"2027 Bingo\"."
    },
    "goals": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string",
            "maxLength": 4000
          },
          {
            "type": "number"
          }
        ]
      },
      "maxItems": 40,
      "description": "The goals, one per square, e.g. [\"Run a 10K\", \"Read 12 books\", \"Learn to make sourdough\"]. Exactly 24 for a 5x5 card with a free centre (25 without), 16 for 4x4, 8 for 3x3 with a free centre (9 without). Up to 80 characters each."
    },
    "paper": {
      "enum": [
        "letter",
        "a4"
      ],
      "type": "string",
      "description": "Paper size for the PDF, e.g. letter (default) or a4."
    },
    "title": {
      "type": "string",
      "maxLength": 120,
      "description": "Card heading, e.g. Maya's 2027 Bingo. Overrides the year title."
    },
    "shuffle": {
      "type": "boolean",
      "description": "true to mix the goals into a random order, e.g. false (default keeps your order, filled row by row)."
    },
    "subtitle": {
      "type": "string",
      "maxLength": 120,
      "description": "Small line under the title, e.g. One square at a time."
    },
    "completed": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string",
            "maxLength": 4000
          },
          {
            "type": "number"
          }
        ]
      },
      "maxItems": 40,
      "description": "Goals already done, written as in goals, e.g. [\"Read 12 books\"]. They print with a check mark and count toward bingo lines."
    },
    "grid_size": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "3, 4 or 5 (default 5), e.g. 5."
    },
    "free_space": {
      "type": "boolean",
      "description": "Free centre square on 3x3 and 5x5 cards, e.g. true (default)."
    },
    "accent_color": {
      "type": "string",
      "maxLength": 30,
      "description": "Theme colour as hex or a name, e.g. #0B7285, teal, gold, purple. Default raspberry #C2255C."
    },
    "center_label": {
      "type": "string",
      "maxLength": 40,
      "description": "Text in the centre square, e.g. FREE (default), Be kind to myself, or 2027."
    }
  }
}
generate_goal_bingo output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "view",
    "title",
    "subtitle",
    "grid_size",
    "cells",
    "center_index",
    "done",
    "done_count",
    "goal_count",
    "bingo_lines",
    "seed",
    "accent",
    "warnings",
    "downloads"
  ],
  "properties": {
    "done": {
      "type": "array",
      "items": {
        "type": "number"
      }
    },
    "seed": {
      "type": [
        "number",
        "null"
      ]
    },
    "view": {
      "type": "string"
    },
    "cells": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "title": {
      "type": "string"
    },
    "accent": {
      "type": "string"
    },
    "subtitle": {
      "type": "string"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "downloads": {
      "type": "object",
      "required": [
        "png",
        "svg",
        "pdf"
      ],
      "properties": {
        "pdf": {
          "type": "string"
        },
        "png": {
          "type": "string"
        },
        "svg": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "grid_size": {
      "type": "number"
    },
    "done_count": {
      "type": "number"
    },
    "goal_count": {
      "type": "number"
    },
    "bingo_lines": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "center_index": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
generate_goal_bingo annotations
{
  "title": "Generate goal bingo card",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

bingo-cards-widget — Zovo Bingo Card Maker view

Advertised by the server during the last successful anonymous check.

Interactive view for Zovo Bingo Card Maker.

bingo-cards-widget URI
ui://widget/bingo-cards-v6-1.0.0-558f3a2650b1a2ce7ffc6972584d5db00a42c561542674c799d8396ce4eafcf6.html

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

bingo-cards-widget-legacy — Zovo Bingo Card Maker view (previous versions)

Advertised by the server during the last successful anonymous check.

bingo-cards-widget-legacy URI template
ui://widget/bingo-cards-{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
740 ms
95th percentile latency
740 ms

Maintenance history

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

  • · probe · passed · 740 ms · metadata changed · 3 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-bingo-card-maker-mcp https://bingo-cards.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-bingo-card-maker-mcp --url https://bingo-cards.zovo.one/mcp

Cursor

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

Cline

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

VS Code

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

Let your agent find its tools

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