Koskamo

GridSmith Puzzle Maker MCP

GridSmith Puzzle Maker is a crossword maker, word search maker and sudoku generator for teachers, parents and puzzle fans. It builds interlocking crossword grids, checks word placements, and generates sudoku with verified solutions. Users can play puzzles in chat, print PDF worksheets with answer keys, and use it via ChatGPT plugins or custom connectors.

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.

GridSmith Puzzle Maker MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Zovo
MCP endpoint (Streamable HTTP)
https://puzzle-maker.zovo.one/mcp
Vendor documentation

What you can do with it

  • Generate interlocking crossword grids from vocabulary words and clues
  • Create word searches with varying difficulty levels
  • Generate sudoku puzzles with single verified solutions
  • Print PDF worksheets with name, date lines and answer keys

Source and maintenance

Community listingRegistry 1.0.1

Protocol and capabilities

Server
puzzle-maker 1.0.1
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.

GridSmith Puzzle Maker builds printable puzzles: crosswords from answer-and-clue pairs (generate_crossword), word searches from a word list (generate_word_search), and sudoku with exactly one solution (generate_sudoku). Each result is playable in the chat and has a PDF with an answer key. When the user gives only vocabulary words for a crossword, write a short clue for each word first, then call generate_crossword. Keep answer keys hidden unless the user asks.

Tools

3 advertised

generate_crossword — Create crossword puzzle
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants a crossword puzzle (crossword maker, crossword puzzle maker, crossword for a class or a vocabulary list) built from answers and clues. Builds a valid interlocking grid with standard numbering and Across/Down clue lists, reports any answers that could not be placed, shows a playable crossword, and returns a printable PDF with an answer key. Needs 4-40 answer-and-clue pairs; if the user gives only words, write a short clue for each first. Answers are reduced to letters A-Z. Does not solve existing crosswords or answer single clues, and does not make symmetric newspaper-style grids.

generate_crossword input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "entries"
  ],
  "properties": {
    "seed": {
      "type": "integer",
      "maximum": 999999,
      "minimum": 1,
      "description": "Optional layout seed (1-999999). The same inputs and seed always give the same puzzle; pass a different seed for a new layout. Example: 2024"
    },
    "paper": {
      "enum": [
        "letter",
        "a4"
      ],
      "type": "string",
      "description": "Paper size for the printable PDF: letter (US, default) or a4. Example: a4"
    },
    "title": {
      "type": "string",
      "maxLength": 80,
      "description": "Title printed on the puzzle and PDF. Example: \"Week 5 Science Vocabulary\""
    },
    "entries": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "answer",
          "clue"
        ],
        "properties": {
          "clue": {
            "type": "string",
            "maxLength": 200,
            "description": "The clue shown to the solver. Example: Process plants use to turn sunlight into food"
          },
          "answer": {
            "type": "string",
            "maxLength": 40,
            "description": "The answer word or short phrase. Spaces, hyphens, accents and punctuation are removed in the grid (\"ice cream\" -> ICECREAM, shown as (3,5)). Example: photosynthesis"
          }
        }
      },
      "maxItems": 40,
      "description": "4 to 40 answer-and-clue pairs. Example: [{\"answer\":\"oxygen\",\"clue\":\"Gas released by plants\"}, ...]"
    }
  }
}
generate_crossword output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "kind",
    "title",
    "seed",
    "rows",
    "cols",
    "grid",
    "across",
    "down",
    "unplaced",
    "placed",
    "total",
    "crossings",
    "paper",
    "downloads"
  ],
  "properties": {
    "cols": {
      "type": "number"
    },
    "down": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "number",
          "answer",
          "clue",
          "enumeration",
          "row",
          "col",
          "length"
        ],
        "properties": {
          "col": {
            "type": "number"
          },
          "row": {
            "type": "number"
          },
          "clue": {
            "type": "string"
          },
          "answer": {
            "type": "string"
          },
          "length": {
            "type": "number"
          },
          "number": {
            "type": "number"
          },
          "enumeration": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "grid": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "kind": {
      "type": "string"
    },
    "rows": {
      "type": "number"
    },
    "seed": {
      "type": "number"
    },
    "paper": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "total": {
      "type": "number"
    },
    "across": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "number",
          "answer",
          "clue",
          "enumeration",
          "row",
          "col",
          "length"
        ],
        "properties": {
          "col": {
            "type": "number"
          },
          "row": {
            "type": "number"
          },
          "clue": {
            "type": "string"
          },
          "answer": {
            "type": "string"
          },
          "length": {
            "type": "number"
          },
          "number": {
            "type": "number"
          },
          "enumeration": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "placed": {
      "type": "number"
    },
    "pdf_note": {
      "type": "string"
    },
    "unplaced": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "answer",
          "clue",
          "reason"
        ],
        "properties": {
          "clue": {
            "type": "string"
          },
          "answer": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "crossings": {
      "type": "number"
    },
    "downloads": {
      "type": "object",
      "required": [
        "pdf"
      ],
      "properties": {
        "pdf": {
          "type": "string"
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
generate_crossword annotations
{
  "title": "Create crossword puzzle",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
generate_word_search — Create word search
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants a word search puzzle (word find, word search maker, printable word search for kids or a class) from a list of words. Accepts 5-40 words for a letter grid: right and down for easy, adding diagonals for medium, all 8 directions including backwards for hard; checks placed words for duplicate occurrences and reports words left out. Shows a playable puzzle and returns a printable PDF with an answer key. Not for crosswords (use generate_crossword) and does not find words in a grid the user already has.

generate_word_search input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "words"
  ],
  "properties": {
    "seed": {
      "type": "integer",
      "maximum": 999999,
      "minimum": 1,
      "description": "Optional layout seed (1-999999). The same inputs and seed always give the same puzzle; pass a different seed for a new layout. Example: 2024"
    },
    "size": {
      "type": "integer",
      "maximum": 25,
      "minimum": 8,
      "description": "Grid width and height in letters (8-25). Leave out to size the grid automatically from the words. Example: 15"
    },
    "paper": {
      "enum": [
        "letter",
        "a4"
      ],
      "type": "string",
      "description": "Paper size for the printable PDF: letter (US, default) or a4. Example: a4"
    },
    "title": {
      "type": "string",
      "maxLength": 80,
      "description": "Title printed on the puzzle and PDF. Example: \"Ocean Animals Word Search\""
    },
    "words": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 30
      },
      "maxItems": 40,
      "description": "5 to 40 words to hide. Accents, spaces and punctuation are removed (\"sea horse\" -> SEAHORSE). Example: [\"dolphin\",\"octopus\",\"shark\",\"coral\",\"whale\"]"
    },
    "difficulty": {
      "enum": [
        "easy",
        "medium",
        "hard"
      ],
      "type": "string",
      "description": "easy = words run right and down; medium (default) = adds diagonals; hard = all 8 directions including backwards. Example: easy"
    }
  }
}
generate_word_search output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "kind",
    "title",
    "seed",
    "size",
    "difficulty",
    "directions",
    "grid",
    "words",
    "unplaced",
    "notes",
    "paper",
    "downloads"
  ],
  "properties": {
    "grid": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "kind": {
      "type": "string"
    },
    "seed": {
      "type": "number"
    },
    "size": {
      "type": "number"
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "paper": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "words": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "word",
          "display",
          "row",
          "col",
          "dr",
          "dc"
        ],
        "properties": {
          "dc": {
            "type": "number"
          },
          "dr": {
            "type": "number"
          },
          "col": {
            "type": "number"
          },
          "row": {
            "type": "number"
          },
          "word": {
            "type": "string"
          },
          "display": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "pdf_note": {
      "type": "string"
    },
    "unplaced": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "word",
          "reason"
        ],
        "properties": {
          "word": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "downloads": {
      "type": "object",
      "required": [
        "pdf"
      ],
      "properties": {
        "pdf": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "difficulty": {
      "type": "string"
    },
    "directions": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false
}
generate_word_search annotations
{
  "title": "Create word search",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
generate_sudoku — Create sudoku
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants a new sudoku puzzle to play or print (sudoku generator, printable sudoku with answers, easy sudoku for kids, hard sudoku). Generates a classic 9x9 sudoku at easy, medium or hard difficulty, checked by a solver for a single solution, playable in the chat with pencil notes, plus a printable PDF with the answer key. Does not solve a sudoku the user already has, explain solving strategies, or make 4x4, 6x6 or variant sudoku.

generate_sudoku input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "seed": {
      "type": "integer",
      "maximum": 999999,
      "minimum": 1,
      "description": "Optional layout seed (1-999999). The same inputs and seed always give the same puzzle; pass a different seed for a new layout. Example: 2024"
    },
    "paper": {
      "enum": [
        "letter",
        "a4"
      ],
      "type": "string",
      "description": "Paper size for the printable PDF: letter (US, default) or a4. Example: a4"
    },
    "title": {
      "type": "string",
      "maxLength": 80,
      "description": "Title printed on the puzzle and PDF. Example: \"Friday Brain Teaser\""
    },
    "difficulty": {
      "enum": [
        "easy",
        "medium",
        "hard"
      ],
      "type": "string",
      "description": "easy (37-38 givens, solvable with simple elimination), medium (30-32 givens, still solvable with singles), hard (24-30 givens, checked to require a technique beyond singles). Default medium. Example: hard"
    }
  }
}
generate_sudoku output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "kind",
    "title",
    "seed",
    "difficulty",
    "puzzle",
    "solution",
    "givens",
    "unique",
    "technique",
    "paper",
    "downloads"
  ],
  "properties": {
    "kind": {
      "type": "string"
    },
    "seed": {
      "type": "number"
    },
    "paper": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "givens": {
      "type": "number"
    },
    "puzzle": {
      "type": "string"
    },
    "unique": {
      "type": "boolean"
    },
    "pdf_note": {
      "type": "string"
    },
    "solution": {
      "type": "string"
    },
    "downloads": {
      "type": "object",
      "required": [
        "pdf"
      ],
      "properties": {
        "pdf": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "technique": {
      "type": "string"
    },
    "difficulty": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
generate_sudoku annotations
{
  "title": "Create sudoku",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

puzzle-maker-widget — GridSmith Puzzle Maker view

Advertised by the server during the last successful anonymous check.

Interactive view for GridSmith Puzzle Maker.

puzzle-maker-widget URI
ui://widget/puzzle-maker-v3-1.0.1-9cee7a19334f281661a81c6c42f90ea1861bb90fbfc25ceb13a465aa0815cd84.html

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

puzzle-maker-widget-legacy — GridSmith Puzzle Maker view (previous versions)

Advertised by the server during the last successful anonymous check.

puzzle-maker-widget-legacy URI template
ui://widget/puzzle-maker-{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
750 ms
95th percentile latency
750 ms

Maintenance history

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

  • · probe · passed · 750 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 gridsmith-puzzle-maker-mcp https://puzzle-maker.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 gridsmith-puzzle-maker-mcp --url https://puzzle-maker.zovo.one/mcp

Cursor

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

Cline

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

VS Code

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

Let your agent find its tools

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