Skip to main content
Glama

Tank Fight MCP — ゲーム仕様をサービスとして提供

Tank Fight の正規仕様を提供する MCP サーバーです。フィールドとウィンドウのサイズ、タンクと弾のステータス、出現ルール、スコアリング、操作、メニューの動作、AI 戦略、難易度の上昇カーブ、レベルごとの破壊可能な迷路などです。

ポート上でローカルサービスとして実行されます。任意の MCP クライアントが接続し、提供されるツールを問い合わせ、仕様を照会できます。Java でも TypeScript でも、あるいは他のどんな言語でも、ゲームをビルドしながら利用できます。

目的

2 つの役割がありますが、2 つ目は一見したよりも重要です。

1. 独立した実装の整合性を保つ。

別々に書かれた同じゲームの 2 つのビルドは、誰も文書化していない数値が必要になった瞬間に乖離します。両方が同じサービスにタンクの大きさを問い合わせれば、推測する必要がなくなります。

2. モデルが要件をでっち上げるのを防ぐ。

仕様が省略した詳細は、AI コーディングアシスタントが黙ってもっともらしい何かを選んで先に進んでしまう箇所です — 弾は壁で止まるのか? 味方は互いに撃てるのか? プレイヤーがラウンド中に破壊されたらどうなるのか? アシスタントが決定したことに言及することはほとんどありません。これらのそれぞれにここで答えているので、質問は推測ではなくルックアップになり、open_questions は実際に未決定のものを示すため、誠実な答えは、自信に満ちた発明ではなく「人間に聞く」になります。

Related MCP server: OWASP Pentest Guide Knowledge Base

実行方法

uv が必要です。

uv sync
uv run server.py

これで http://127.0.0.1:8082/mcp で仕様が提供されます。別の場所で待ち受けるには --port を、別のインターフェースにバインドするには --host を、stdio のみを話すクライアントには --stdio を使用します。

クライアントを接続する

任意の MCP クライアント、同時に複数でも接続できます。Claude Code の場合:

claude mcp add --transport http tank-spec http://localhost:8082/mcp

--scope project を追加すると、ビルドしているリポジトリに記録されるため、そのビルドで作業している全員が同じ仕様を取得できます。次に /mcp で接続を確認すると、クライアントはサーバーにどのようなツールがあり、それらをどう呼び出すかを尋ねることができます。ここではクライアントごとに設定する必要は何もありません。

ツール

ツール

回答

list_sections()

仕様の内容をそれぞれ 1 行で — ここから始めましょう

get_spec(section)

1 つのセクション、または entities.bullet.damage のようなドット区切りのパス

search_spec(query)

「X は起こりますか?」— それを決定するルールを見つけます

resolve_level(level)

レベル N の意味: 敵の総数、最大同時数、出現間隔、どの迷路か

get_maze(level)

そのレベルのレンガのレイアウトをタイルに展開し、ASCII 画像付きで表示

open_questions()

仕様が意図的に未決定にしていること

このサーバーが意図的にやらないこと

誰が接続しているか、何をビルドしているかをこのサーバーは把握しません。意図的です。サーバーは仕様について知っており、クライアントはサーバーについて知っています。逆を向いているものは何もありません。

したがって、実装がまだ仕様と一致しているかを確認するのはクライアントの仕事です。クライアントは自身のコードから値を読み取り、これらのツールが返す値と比較できます。クライアントはそのリポジトリの中にあり、サーバーはそこにありません。チェックアウトを調べるためにサーバーがリポジトリに手を伸ばすとしたら、言語、ファイルレイアウト、パスを知っている必要があり、別の実装が登場するたびに更新が必要になるでしょう。

同じ理由で、仕様はファイルとして配布されるのではなく、サービスとして提供されます。

  • すべての実装の外側にある。 あるリポジトリで作業しているセッションは、別のリポジトリのファイルを読むことはできませんが、サービスを呼び出すことはできます。

  • ダンプされるのではなく、クエリされる。 search_spec("friendly fire") は 1 つのルールを返します。1 つの質問に答えるために仕様全体をモデルのコンテキストに読み込むことは、まさにこれが回避する無駄です。

  • 一部の答えは保存されるのではなく計算される。 レベルはランプ式から生成されます。レベル 6 はどのファイルにも存在しません。resolve_level が唯一の正しい尋ね方であり、その整数切り捨てが重要です。浮動小数点バージョンは 8 レベルのうち 4 レベルで一致しません。

破壊可能なレンガとレベルごとの迷路

境界の内側はすべてレンガで、レンガは撃ち壊せます。壁はどちらの側にも関係ないので、両方の側から撃てます。タイルは 20x20 で、40 のダメージで破壊されるため、標準の弾 2 発で穴が開き、タンクはそこを通り抜けられます。境界自体は破壊できません。

各レベルには独自の迷路があるため、レベル番号が唯一の難易度調整になります。敵の数、速さ、そして敵が到着する地形を設定します。レベル 1 はほぼ開けていますが、レベル 8 は非常に密集しているため、道を見つけるよりも撃ち抜く方が速いことがよくあります。

get_maze(level) は、矩形、展開されたタイルのリスト、および画像を返します:

########################################
#EE................EE................EE#
#EE................EE................EE#
#......................................#
#......BBBBBBBBBBB....BBBBBBBBBBB......#
...
#.............AA...AA...AA.............#
########################################

長方形を自分で展開するのではなく、展開されたタイルを使用してください。この手順と、弾が 2 つのタイルにまたがる場合にどちらのタイルにダメージを与えるかというルールは、2 つのビルドが同じショットから異なる穴を掘ってしまいがちな箇所です。

迷路を追加するには、YAML の mazes.levels の下に長方形を追加するだけです。テストスイートは、レベルをプレイ可能にする不変条件、つまりタイルに揃っていること、エリア内にあること、重なっていないこと、スポーンと味方のボックスがクリアであること、何も破壊せずに徒歩で到達可能なすべてのエントリポイントがあることをチェックします。掘ることは近道であり、必須ではありません。

仕様の編集

spec/game-spec.yaml がすべてであり、手動で編集することを想定しています。それがポイントです。サーバーは呼び出しのたびにこれを再読み込みするため、何かを再起動しなくても変更がすぐに反映されます。

仕様は動作する実装からシードされ、それ以降はその実装から独立しています。仕様が主導します。ここで値を変更してから、実装を追従させます。

テスト

uv run pytest

tests/test_spec.py は仕様の値を固定し、すべての迷路をプレイアビリティの不変条件に保ちます。tests/test_server.py は MCP クライアントを介してサーバーを駆動します。ツールを発見し、その説明を読み、呼び出します。tests/test_http.py は実際のプロセスをポートで起動し、クライアントが行うように HTTP 経由で接続します。

レイアウト

spec/game-spec.yaml   the specification — the actual source of truth
server.py             MCP server: tool definitions, their descriptions, and the transport
tank_spec/spec.py     loading, searching, level maths, maze expansion
tests/                spec and maze invariants, MCP integration, HTTP transport
Install Server
F
license - not found
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Read-only MCP server for the WebAssembly spec: instructions, types, sections, search, proposals.

  • Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.

  • MCP server for accessing curated awesome list documentation

View all MCP Connectors

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/LarryAtGU/tank-fight-mcp'

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