Skip to main content
Glama
watamoo
by watamoo

setup

Initialize crossword puzzle state by loading grid layout and clue definitions to prepare for solving. Accepts grid text with cell positions and JSON-formatted clues for across and down directions.

Instructions

クロスワードの盤面とカギ定義を読み込み、状態を初期化する。

Args: grid_text (str): 行番号つきの盤面テキスト。列・行番号は全角数字で表記し、 文字が入るマスは "?"、黒マスは "#" で記述する。各行のマス数が一致している 必要がある。 clue_text (str): JSON Lines 形式のカギ定義。各行は id/direction/row/col /length/clue を持つ辞書で、direction は "across" か "down"。rowcol は 1 起点の正整数。

Returns: list[list[str]]: 正規化済みセル行列。各要素は "?" または "#" のシンボル。

Raises: ValueError: 盤面の行長不一致・未知のセル記号・カギ定義の欠損や不正値など、 入力内容が検証に失敗した場合。

Notes: この関数を呼び出すと既存の候補リストは破棄され、状態が再初期化される。

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
clue_textYes
grid_textYes

Implementation Reference

  • Core implementation of the 'setup' MCP tool. Decorated with @mcp.tool() for registration. Parses and validates grid_text and clue_text, populates the global PuzzleState, clears candidates, and returns the grid.
    @mcp.tool() async def setup(grid_text: str, clue_text: str) -> list[list[str]]: """クロスワードの盤面とカギ定義を読み込み、状態を初期化する。 Args: grid_text (str): 行番号つきの盤面テキスト。列・行番号は全角数字で表記し、 文字が入るマスは "?"、黒マスは "#" で記述する。各行のマス数が一致している 必要がある。 clue_text (str): JSON Lines 形式のカギ定義。各行は `id`/`direction`/`row`/`col` /`length`/`clue` を持つ辞書で、`direction` は "across" か "down"。`row` と `col` は 1 起点の正整数。 Returns: list[list[str]]: 正規化済みセル行列。各要素は "?" または "#" のシンボル。 Raises: ValueError: 盤面の行長不一致・未知のセル記号・カギ定義の欠損や不正値など、 入力内容が検証に失敗した場合。 Notes: この関数を呼び出すと既存の候補リストは破棄され、状態が再初期化される。 """ grid = _load_grid(grid_text) clues = _load_clues(clue_text, grid) state.grid = grid state.clues = clues state.candidates.clear() return grid
  • Helper function to parse and validate the grid_text input into a list of lists representing the puzzle grid.
    def _load_grid(grid_text: str) -> list[list[str]]: "グリッド文字列を読み込み、全角表記の入力からセル行列を構築する" grid: list[list[str]] = [] for raw_line in grid_text.splitlines(): if FILLABLE_CELL not in raw_line and BLOCK_CELL not in raw_line: continue normalized_line = raw_line.translate(_FULLWIDTH_DIGIT_TO_ASCII) parts = normalized_line.strip().split() if not parts: continue if parts[0].isdigit(): tokens = parts[1:] else: tokens = parts if not tokens: continue for token in tokens: if token not in {FILLABLE_CELL, BLOCK_CELL}: raise ValueError(f"未知のマス表現を検出しました: {token}") if grid and len(tokens) != len(grid[0]): raise ValueError("行ごとのマス数が一致しません。入力を確認してください。") grid.append(tokens) return grid
  • Helper function to parse JSON Lines clue_text into a dictionary of validated Clue objects.
    def _load_clues(clue_text: str, grid: list[list[str]]) -> dict[str, Clue]: "JSON Lines 形式のカギ定義を読み込み、検証した Clue オブジェクトへ変換する" lines = [line.strip() for line in clue_text.splitlines() if line.strip()] if not lines: raise ValueError("カギ情報が存在しません。") seen_ids: set[str] = set() clues: dict[str, Clue] = {} for line_no, raw in enumerate(lines, start=1): try: payload = json.loads(raw) except json.JSONDecodeError as exc: raise ValueError(f"{line_no} 行目のカギ情報を JSON として読み込めません。") from exc if not isinstance(payload, dict): raise ValueError(f"{line_no} 行目のカギ情報が辞書形式ではありません。") clue = _validate_clue_payload(payload, grid, seen_ids) clues[clue.clue_id] = clue return clues
  • Helper function to ensure the puzzle state has been initialized by 'setup', used by other tools.
    def _ensure_setup() -> None: "セットアップ済みかを検査し、未設定なら利用者に通知する" if not state.clues or not state.grid: raise RuntimeError("setup を先に呼び出してください。")
  • Input/output schema defined in the docstring of the setup handler.
    Args: grid_text (str): 行番号つきの盤面テキスト。列・行番号は全角数字で表記し、 文字が入るマスは "?"、黒マスは "#" で記述する。各行のマス数が一致している 必要がある。 clue_text (str): JSON Lines 形式のカギ定義。各行は `id`/`direction`/`row`/`col` /`length`/`clue` を持つ辞書で、`direction` は "across" か "down"。`row` と `col` は 1 起点の正整数。 Returns: list[list[str]]: 正規化済みセル行列。各要素は "?" または "#" のシンボル。 Raises: ValueError: 盤面の行長不一致・未知のセル記号・カギ定義の欠損や不正値など、 入力内容が検証に失敗した場合。 Notes: この関数を呼び出すと既存の候補リストは破棄され、状態が再初期化される。 """

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/watamoo/mcp-crossword-tools'

If you have feedback or need assistance with the MCP directory API, please join our Discord server