クロスワードを解くためのMCPサーバーを作ってみた

1.3K Views

October 14, 25

スライド概要

Findy社の「著者陣に聞く!PythonではじめるMCP開発入門」イベントで投影した資料です。

profile-image

株式会社松尾研究所 シニアデータサイエンティスト

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

著者陣に聞く!PythonではじめるMCP開発入門 クロスワードを解くためのMCPサーバーを作ってみた 2025/10/14 株式会社松尾研究所 渡邊 拓夢 許諾なく撮影や第三者 への開示を禁止します ©︎MATSUO INSTITUTE, INC.

2.

自己紹介 渡邊 拓夢(わたなべ たくむ) 株式会社松尾研究所 シニアデータサイエンティスト 略歴 • 2021~2025 野村総合研究所にてシステ ムコンサルタントとしてAI導入・活用 支援プロジェクトに従事 • 2025~現在 松尾研究所にてシニアデー タサイエンティストとしてAI開発の共 同研究プロジェクトに従事 X: @LearningWtm GitHub: watamoo Zenn: watamoo ©︎MATSUO INSTITUTE, INC. 2

3.

概要紹介 最新のLLMであっても、単語の位置関係を加味した試行錯誤を要するクロスワードを解くことは難しい。 そこで、複数の支援ツールとそれらの使い方を示すプロンプトを提供するMCPサーバーを構築した。 クロスワード クロスワード用 MCPサーバー クロスワード 解答を支援 LLM 正確な解答を 作成 https://github.com/watamoo/mcp-crossword-tools でコードも公開しています!!! ©︎MATSUO INSTITUTE, INC. 3

4.

最新LLMの限界 最新のLLMを用いた場合でも、縦と横の文字列の位置関係の考慮や、候補に基づく試行錯誤が必要なクロ スワードは解くことが難しい 例題 列番号 123 行 番 号 1 ??? 2 ?#? 3 ??? タテのカギ スタート位置: 1行1列 スタート位置: 1行3列 いわれる 2つのことをくらべること 山や森にすむ動物。人を化かすと ヨコのカギ スタート位置: 1行1列 日本の昔話に出てくる動物。葉っ ぱを頭にのせて化ける スタート位置: 3行1列 昼ごはんを食べた後にしたくなる ?:文字が入る場所 #:文字の入らない場所 ©︎MATSUO INSTITUTE, INC. 4

5.

最新LLMの限界 最新のLLMを用いた場合でも、縦と横の文字列の位置関係の考慮や、候補に基づく試行錯誤が必要なクロ スワードは解くことが難しい Claude Sonnnet 4.5の解答 • • カギに対応する候補文字列は筋のいいものが 出せている(カギ1についての正解は「対比」 だが、「比較」も間違いではない) 交差関係の考慮が苦手。うまく交差していな いのに、「問題なく交差が一致」という嘘の 解答を行ってしまう ©︎MATSUO INSTITUTE, INC. 5

6.

クロスワード対応に向けた課題 各カギに対応する候補単語リストをもとに 試行錯誤することが難しい • • クロスワードを解くためには、縦横のカギに対応す る候補単語リストを持っておき、試行錯誤しながら リストを適切に更新していくことが必要になる LLM単体では、試行錯誤を続けるうちにリストの情 報が失われてしまうため、条件を満たす単語の組み 合わせを見つけ出すことが難しい 縦、横に交差する単語が矛盾なく整合するかを 正確に判断することが難しい • • ©︎MATSUO INSTITUTE, INC. クロスワードにおいては縦方向・横方向の単語の整 合性を取る必要があるが、LLMはこうした幾何的な 関係性を扱うのが苦手 基本的に横書きの文章で学習しているため、特に縦 方向の単語の解釈に問題があり、ハルシネーション を起こしやすい 6

7.

MCPを用いた解決策 • • 各カギに対応する候補単語リストをもとに 試行錯誤することが難しい 縦、横に交差する単語が矛盾なく整合するかを 正確に判断することが難しい 候補単語リストを保持・管理できる MCPツールを構築 候補単語リストから整合性の取れる組み合わせを 探索するMCPツールを構築 それぞれのカギに対応する候補単語リストを登録・ 参照できるツールを作成 また、LLMの苦手とする文字数の検証についてもツ ールにて実施 →候補単語リストの内容の保持・検証・管理タスクを LLMから外部化 • 候補単語リストのすべての組み合わせに対して、交 差条件を検討して、矛盾なく整合する最大の組み合 わせを返すツールを作成 →幾何的な判断と網羅的な探索が必要なタスクをLLM から外部化 ©︎MATSUO INSTITUTE, INC. 7

8.

構築したMCPサーバーの概要 4種類のツールと1種類のプロンプトを備えたMCPサーバー crossword_toolsをFastMCPで構築した。 ©︎MATSUO INSTITUTE, INC. 8

9.

構築したMCPサーバーの概要 4種類のツールと1種類のプロンプトを備えたMCPサーバー crossword_toolsをFastMCPで構築した。 • • ©︎MATSUO INSTITUTE, INC. クロスワードの盤面及び縦横のカギについ て、プログラムで処理しやすいようなリスト・ 辞書形式で読み込みを行うツール 最初に必ずこのツールを利用することで、 LLMが効果的に盤面・カギの情報を取得で きるようにする 9

10.

構築したMCPサーバーの概要 4種類のツールと1種類のプロンプトを備えたMCPサーバー crossword_toolsをFastMCPで構築した。 • • ©︎MATSUO INSTITUTE, INC. 各カギに対応する候補語のリストを登録す るツール LLMが苦手とする文字数の正確な検証もこ のツールが自動的に行い、整合する候補の みが登録される仕組みとなっている 10

11.

構築したMCPサーバーの概要 4種類のツールと1種類のプロンプトを備えたMCPサーバー crossword_toolsをFastMCPで構築した。 • • • ©︎MATSUO INSTITUTE, INC. すでに登録された各カギについての候補語 から、縦横の交差部分の整合性が満たされ る組み合わせを探索して返すツール 各カギについての正解が候補語に含まれて いれば最終解答が自動的に導かれる 全てのカギについて整合性が満たされない 場合でも、可能な最大数の組み合わせを提 示するため、それをヒントにして試行錯誤が 可能 11

12.

構築したMCPサーバーの概要 4種類のツールと1種類のプロンプトを備えたMCPサーバー crossword_toolsをFastMCPで構築した。 • • ©︎MATSUO INSTITUTE, INC. 最終解答となる単語が見つかった場合に、 クロスワード盤面にそれらを当てはめた解 答盤面を表示するツール LLMにまかせると視覚的に崩れた応答が多 くなるため、後処理用にツールを追加 12

13.

構築したMCPサーバーの概要 4種類のツールと1種類のプロンプトを備えたMCPサーバー crossword_toolsをFastMCPで構築した。 • • ©︎MATSUO INSTITUTE, INC. 上記のツールをうまく活用しながら試行錯誤 を行わせるためには、カスタムされたプロン プトが必要となる MCPサーバーの機能として、このプロンプト 自体を公開して利用可能としている 13

14.

(参考)作成したカスタムプロンプトの内容 あなたはクロスワードを解くアシスタントです。以下の MCP ツールを活用しながら、 カレントディレクトリのdata/フォルダ配下にある{grid_path} のグリッドと {clue_path} のカギ定義から正解と納得できる解答集を導き出してください。 グリッドは全角数字の座標で表記され、入力可能なマスは「?」、黒マスは「#」です。解答語はひらがなで揃えて扱ってください。 利用できる主なツール: - setup(grid_text, clue_text): グリッドとカギを読み込み初期化します。まず最初に必ず実行します。 - register_candidates(clue_id, candidates): 候補語のリストをカギに追加登録します。既存候補は保持され、重複は無視されます。 - get_candidates(clue_id): あるカギに登録済みの候補語を確認します。 - search_consistent_sets([clue_ids]): 今ある候補語の組合せから整合する割当てを探索します。部分的にチェックしたい場合は ID を絞り込んでください。 - render_solution(assignments): 全カギの解答を盤面に反映し、最終確認用の描画済みグリッドを取得します。解答はひらがなで指定してください。 解法方針: 1. まず setup を実行して状態を初期化します。 2. 候補語が不足している、あるいは整合する解が見つからない場合は register_candidates を使って語を追加します。クロスワードでは様々な可能性を考慮することが重要なの で、候補単語については思いつく限り多く列挙してください。 3. search_consistent_sets を使って整合性チェックを行いますが、整合結果が出ても即確定せず、解が妥当か検討してください。納得できない場合は候補語をさらに追加した り、特定のカギだけに絞って再チェックしたりします。 4. 行き詰まったら、候補語のバリエーションを広げたり、同じカギに複数セットの候補を追加した上で再び search_consistent_sets を呼び出してください。部分的に良さそう な組を見つけたら、そのカギの候補を洗い替えするのも有効です。 5. 途中で諦めず、複数回の検索と候補追加を繰り返し、納得のいく解答が得られるまで試行錯誤を続けてください。 6. 納得できる割当てを得たら、解答をすべてひらがなでそろえたうえで render_solution を呼び出し、盤面を描画して視覚的な矛盾がないか確認してください。 重要: search_consistent_sets で得られる組み合わせはあくまで整合性を満たす候補です。内容に確信が持てない場合は、さらに候補を追加し直して再実行し、より良い解を目 指してください。 最終的に render_solution で得た盤面を添えて、各カギの解答と根拠、試行錯誤が必要だったポイントの2つを整理したレポートを提示してください。 ©︎MATSUO INSTITUTE, INC. 14

15.

実際に解かせてみた(簡単な問題) 列番号 123 行 番 号 1 ??? 2 ?#? 3 ??? タテのカギ スタート位置: 1行1列 スタート位置: 1行3列 いわれる 2つのことをくらべること 山や森にすむ動物。人を化かすと ヨコのカギ スタート位置: 1行1列 日本の昔話に出てくる動物。葉っ ぱを頭にのせて化ける スタート位置: 3行1列 昼ごはんを食べた後にしたくなる ?:文字が入る場所 #:文字の入らない場所 ©︎MATSUO INSTITUTE, INC. 15

16.

実際に解かせてみた(簡単な問題) MCPサーバーに設定したPrompt を、グリッドとカギ定義を引数 に指定して、スラッシュコマン ドで呼び出し 問題設定の読み込みが完了 ©︎MATSUO INSTITUTE, INC. 16

17.

実際に解かせてみた(簡単な問題) カギ情報から初期の候補単語リ ストを作成して、 register_candidatesを用いて候補 を登録 ©︎MATSUO INSTITUTE, INC. 17

18.

実際に解かせてみた(簡単な問題) 整合性チェックを行うと、4つの カギのうち、3つについて整合性 が取れる解が見つかり、1つにつ いては整合性がとれなかった 整合性が取れなかったのは「 2 つのことをくらべること」につ いての「ひかく」という候補。 整合性を取るには「た」から始 まる必要があるので「たいひ」 という別候補を考案 「たいひ」を候補に追加して再 度整合性チェックを行うと、す べてのカギについて整合性の取 れる解が見つかった ©︎MATSUO INSTITUTE, INC. 18

19.

実際に解かせてみた(簡単な問題) 正しい最終解答を出力できてい る!! レポート内容も適切。整合性を とれる類義語を検討して追加で きている ©︎MATSUO INSTITUTE, INC. 19

20.

実際に解かせてみた(複雑な問題) 列番号 12345 行 番 号 1 2 3 4 5 ???#? ?#??? ????? ???#? #?#?? タテのカギ スタート位置: 1行1列 新年最初に見る夢 スタート位置: 1行3列 最初に何かを言い始めた人のこと を〇〇〇〇っぺと言います スタート位置: 1行5列 外回りの反対 スタート位置: 2行4列 円筒形の容器。酒や味噌を入れる スタート位置: 3行2列 春の〇〇〇 ヨコのカギ スタート位置: 1行1列 スタート位置: 2行3列 スタート位置: 3行1列 スタート位置: 4行1列 スタート位置: 5行4列 ©︎MATSUO INSTITUTE, INC. 憧れの〇〇〇航路(岡晴夫の歌) 胴長短足の動物 雪を2個丸めて作る像 イワシを干した干物 肩〇〇 20

21.

実際に解かせてみた(複雑な問題) 各カギについての候補単語を登 録 ©︎MATSUO INSTITUTE, INC. 21

22.

実際に解かせてみた(複雑な問題) 整合性チェックの結果、カギ5 「春の〇〇〇」については整合 する候補なし カギ5についての候補を追加して いる 整合性チェックの結果、やはり カギ5については整合する候補な し。すでに整合している「ゆき だるま」から1文字目を特定 ©︎MATSUO INSTITUTE, INC. 22

23.

実際に解かせてみた(複雑な問題) カギ5について、「き」から始め る候補を追加 整合性の取れる結果として「き ざし」を発見 整合性チェックの結果、カギ6 「憧れの〇〇〇航路」が見つか っていない。再検討して「ハワ イ航路」という正解を発見 ©︎MATSUO INSTITUTE, INC. 23

24.

実際に解かせてみた(複雑な問題) 「はわい」を候補に追加したこ とで、すべてのカギについて整 合性がとれる解を発見 ©︎MATSUO INSTITUTE, INC. 24

25.

実際に解かせてみた(複雑な問題) 正しい最終解答を出力できてい る!! 交差条件を考慮して適切な候補 を発見している ©︎MATSUO INSTITUTE, INC. 25

26.

まとめ 今回はクロスワードというキャッチーな例を紹介しましたが、みなさんにお伝えしたいこととしては… ⚫ うまく構築されたMCPサーバーは、LLMの賢さを最大限に活かして知的なタスク実行を実現 できる ⚫ 適切なMCPサーバーを設計・開発することで、単体のLLMでは到底不可能なタスクを賢く実行さ せることができる ⚫ MCPはあくまで1つの手段であり、万能薬ではない ⚫ LLM単体では解決できないタスクについて、課題を整理したうえで、それに対する対応策として MCPサーバーのツール・プロンプトを設計することが重要 ⚫ 固定的なワークフロー置き換えで事足りることも多いため注意 ⚫ 例えば「AIの応答についてweb検索でファクトチェックを行う」だけであれば、後処理として 必ずwebチェックを走らせるだけでよく、MCPサーバーとして実装する必要はない ⚫ 私見としては、LLMがツールを適宜呼び出し、結果を参照して、試行錯誤を行う必要があるタス クにおいてこそ、MCPが活きるのではないかと考えている ©︎MATSUO INSTITUTE, INC. 26

27.

©︎MATSUO INSTITUTE, INC.