# Lettras word search

> Word searches, crosswords, sudoku and Unicode text styles in 6 languages, accents kept.

- name: org.lettras/word-search
- version: 0.5.0
- connection class: R0 (autonomous)
- trust: 93/100
- quality: 73/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/org.lettras%2Fword-search
- tools: https://api.protogrid.dev/v1/servers/org.lettras%2Fword-search/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "word-search": {
      "type": "http",
      "url": "https://mcp.lettras.org/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 75
- drivers: +repository +dns-namespace +reachable +uptime-100% +updated-8d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 73/100 (needs work)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 71 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: stylize_text (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); solve_sudoku (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); generate_word_search (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 1,923 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 6 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 8, about 1,923 tokens to load them all
- tool set hash: 07f4d9e6815afe5c0d984928ad6ba76e
- tools last changed: 2026-10-13T05:30:58.278Z
- badge: [![protogrid quality](https://protogrid.dev/badge/org.lettras/word-search.svg)](https://protogrid.dev/servers/org.lettras/word-search)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-13 `solve_sudoku` added
  - Solves a sudoku grid (0 = empty cell; sizes 4, 6, 9, 12, 16) and says whether the solution is the only one. Free, no usage limit.
- 2026-10-13 `sudoku` added
  - Creates a sudoku with exactly one solution. Returns puzzle (0 = empty cell) and solution. Sizes 4, 6, 9 (default), 12 and 16; difficulty 1 easy (most clues) to 4 expert. Free, no usage limit. The same seed gives the same sudoku.
- 2026-10-13 `crossword` added
  - Lays out a crossword from words with clues. Returns two matrices of the same size: puzzle (the game position: "-" is a blank cell, a word's number is on its first cell, "0" marks the other cells where a letter goes, and "a/d" such as "3/4" appears when an across word and a down word start in the same cell) and solution (the same matrix with the correct letters, one grapheme per cell). placements lists every word with its number, clue, direction (across/down) and start cell; unplaced lists words that did not fit. Offer more words than you need: the engine keeps the best layout it finds. Native letters (Ñ, Ç, ẞ…) stay one cell each. Free, no usage limit. The same seed gives the same crossword.
- 2026-10-11 `list_styles` added
  - The Unicode text styles stylize_text offers, with the id to pass, an English name and a category (bold-italic, sans, script, gothic, mono, enclosed, decoration, other).
- 2026-10-11 `stylize_text` added
  - Turns text into Unicode styles for social media bios and posts: bold, italic, script, fraktur, monospace, circled, squared, fullwidth, small caps, strikethrough, underline and more (22 styles). Accents are kept: an accented letter becomes its styled base letter plus the combining accent (ñ, ç, ü, ß work). Not every style can draw every character: letters such as ß, Æ, Œ, Ø or non-Latin scripts stay plain, and accented letters rely on a combining mark that some fonts draw badly. Those characters are listed in notNative for each style, and parts with missing: true mark them, so you can warn the user or show an empty box. Set classic to strip accents first. Pass one style id, several, or none for all styles (see list_styles). Runs locally and has no usage limit.
- 2026-10-11 `generate_word_search` changed (description)
  - before: Create a word-search puzzle (sopa de letras) from a list of words. Keeps native letters (Ñ, Ç, Ã, Ä, ẞ, È…) as one cell each. Returns the grid, where every word is hidden, and any words that did not fit. Empty cells are marked "-": call fill_word_search with the grid to complete it with random letters. The same seed always gives the same puzzle.
  - after: Create a word-search puzzle (sopa de letras) from a list of words. Puzzles up to 10x10 with at most 10 words are free and unlimited; bigger ones use the free puzzles each client gets. Keeps native letters (Ñ, Ç, Ã, Ä, ẞ, È…) as one cell each. Returns the grid, where every word is hidden, and any words that did not fit. Empty cells are marked "-": call fill_word_search with the grid to complete it with random letters. The same seed always gives the same puzzle.

Full history: https://api.protogrid.dev/v1/servers/org.lettras%2Fword-search/changes

## Remotes

- https://mcp.lettras.org/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (8)

- `crossword`: Lays out a crossword from words with clues. Returns two matrices of the same size: puzzle (the game position: "-" is a blank cell, a word's number is on its first cell, "0" marks the other cells where a letter goes, and "a/d" such as "3/4" appears when an across word and a down word start in the same cell) and solution (the same matrix with the correct letters, one grapheme per cell). placements lists every word with its number, clue, direction (across/down) and start cell; unplaced lists words that did not fit. Offer more words than you need: the engine keeps the best layout it finds. Native letters (Ñ, Ç, ẞ…) stay one cell each. Free, no usage limit. The same seed gives the same crossword.
- `fill_word_search`: Completes a word search: takes the grid from generate_word_search (empty cells are "-") and fills them with random letters in the chosen language, with accents on or off. Letters follow how common they are in that language. Pass the puzzle's words so the filler never creates an extra copy of one.
- `generate_word_search`: Create a word-search puzzle (sopa de letras) from a list of words. Puzzles up to 10x10 with at most 10 words are free and unlimited; bigger ones use the free puzzles each client gets. Keeps native letters (Ñ, Ç, Ã, Ä, ẞ, È…) as one cell each. Returns the grid, where every word is hidden, and any words that did not fit. Empty cells are marked "-": call fill_word_search with the grid to complete it with random letters. The same seed always gives the same puzzle.
- `list_languages`: Languages Lettras supports, with the native letters each one adds to its grid alphabet.
- `list_styles`: The Unicode text styles stylize_text offers, with the id to pass, an English name and a category (bold-italic, sans, script, gothic, mono, enclosed, decoration, other).
- `solve_sudoku`: Solves a sudoku grid (0 = empty cell; sizes 4, 6, 9, 12, 16) and says whether the solution is the only one. Free, no usage limit.
- `stylize_text`: Turns text into Unicode styles for social media bios and posts: bold, italic, script, fraktur, monospace, circled, squared, fullwidth, small caps, strikethrough, underline and more (22 styles). Accents are kept: an accented letter becomes its styled base letter plus the combining accent (ñ, ç, ü, ß work). Not every style can draw every character: letters such as ß, Æ, Œ, Ø or non-Latin scripts stay plain, and accented letters rely on a combining mark that some fonts draw badly. Those characters are listed in notNative for each style, and parts with missing: true mark them, so you can warn the user or show an empty box. Set classic to strip accents first. Pass one style id, several, or none for all styles (see list_styles). Runs locally and has no usage limit.
- `sudoku`: Creates a sudoku with exactly one solution. Returns puzzle (0 = empty cell) and solution. Sizes 4, 6, 9 (default), 12 and 16; difficulty 1 easy (most clues) to 4 expert. Free, no usage limit. The same seed gives the same sudoku.
