Skip to main content
Glama

Tank Fight MCP — die Spielspezifikation als Service

Ein MCP-Server, der die kanonische Spezifikation für Tank Fight bereitstellt: Feld- und Fenstergröße, Panzer- und Geschossstatistiken, Spawn-Regeln, Punktevergabe, Steuerung, Menüverhalten, KI-Strategien, die Schwierigkeitskurve und ein zerstörbares Labyrinth pro Level.

Es läuft als lokaler Dienst auf einem Port. Jeder MCP-Client kann sich verbinden, fragen, welche Tools angeboten werden, und die Spezifikation abfragen – während das Spiel in Java, TypeScript oder in etwas anderem entwickelt wird.

Wofür es da ist

Zwei Aufgaben, und die zweite ist wichtiger, als es zunächst scheint.

1. Unabhängige Implementierungen in Einklang halten. Zwei Builds desselben Spiels, getrennt geschrieben, driften in dem Moment auseinander, in dem sie eine Zahl brauchen, die niemand aufgeschrieben hat. Wenn beide denselben Dienst fragen, wie groß ein Panzer ist, entfällt das Rätselraten.

2. Verhindern, dass das Modell Anforderungen erfindet. Jedes Detail, das eine Spezifikation auslässt, ist eine Stelle, an der ein KI-Codierungsassistent stillschweigend etwas Plausibles wählt und weitermacht – bleiben Geschosse an Wänden hängen? können Verbündete sich gegenseitig beschießen? was passiert, wenn ein Spieler mitten in der Runde zerstört wird? Er erwähnt selten, dass er sich entschieden hat. Jede dieser Fragen wird hier beantwortet, sodass die Frage zu einer Nachschlageoperation wird statt zu einer Vermutung, und open_questions benennt, was wirklich nicht entschieden ist, sodass die ehrliche Antwort „einen Menschen fragen" ist, statt einer selbstbewussten Erfindung.

Related MCP server: OWASP Pentest Guide Knowledge Base

Ausführen

Erfordert uv.

uv sync
uv run server.py

Das stellt die Spezifikation unter http://127.0.0.1:8082/mcp bereit. Verwenden Sie --port, um woanders zu lauschen, --host, um eine andere Schnittstelle zu binden, und --stdio für Clients, die nur stdio sprechen.

Einen Client verbinden

Jeder MCP-Client, beliebig viele gleichzeitig. Für Claude Code:

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

Fügen Sie --scope project hinzu, um es im Repository zu speichern, in dem Sie entwickeln, damit alle, die an diesem Build arbeiten, dieselbe Spezifikation erhalten. Dann /mcp, um die Verbindung zu bestätigen, und der Client kann den Server fragen, welche Tools existieren und wie man sie aufruft – hier muss nichts pro Client konfiguriert werden.

Tools

Tool

Antworten

list_sections()

Was in der Spezifikation steht, jeweils eine Zeile – hier beginnen

get_spec(section)

Ein Abschnitt oder ein Punktpfad wie entities.bullet.damage

search_spec(query)

„Passiert X?" – findet die Regel, die das entscheidet

resolve_level(level)

Was Level N bedeutet: Gesamtzahl der Gegner, maximale gleichzeitige, Spawn-Intervall, welches Labyrinth

get_maze(level)

Das Ziegellayout dieses Levels, in Kacheln expandiert, mit einem ASCII-Bild

open_questions()

Was die Spezifikation bewusst nicht entschieden hat

Was dieser Server bewusst nicht tut

Er hat keine Ahnung, wer verbunden ist oder was sie bauen, und das ist beabsichtigt. Er kennt die Spezifikation; Clients kennen den Server. Nichts zeigt in die andere Richtung.

Die Überprüfung, ob eine Implementierung noch der Spezifikation entspricht, ist also die Aufgabe des Clients. Ein Client kann die Werte aus seinem eigenen Code lesen und mit dem vergleichen, was diese Tools zurückgeben – er sitzt in diesem Repository, der Server nicht. Ein Server, der in einen Checkout greifen würde, um ihn zu inspizieren, müsste die Sprache, die Dateistruktur und den Pfad kennen und müsste jedes Mal aktualisiert werden, wenn eine weitere Implementierung auftaucht.

Aus demselben Grund wird die Spezifikation bereitgestellt und nicht als Datei mitgeliefert:

  • Sie liegt außerhalb jeder Implementierung. Eine Sitzung, die in einem Repository arbeitet, kann die Dateien eines anderen nicht lesen, aber sie kann einen Dienst aufrufen.

  • Sie wird abgefragt, nicht ausgeschüttet. search_spec("friendly fire") liefert eine Regel. Die gesamte Spezifikation in den Kontext eines Modells zu laden, um eine Frage zu beantworten, ist genau die Verschwendung, die das vermeidet.

  • Einige Antworten werden berechnet, nicht gespeichert. Level werden aus einer Rampenformel generiert – Level 6 existiert in keiner Datei. resolve_level ist der einzige korrekte Weg zu fragen, und seine Ganzzahl-Kürzung ist tragend: Eine Gleitkommaversion weicht bei vier der acht Level ab.

Zerstörbare Ziegel und Labyrinthe pro Level

Alles innerhalb der Grenze ist Ziegel, und Ziegel kann weggeschossen werden – von beiden Seiten, da Seiten für Panzer wichtig sind, aber nie für Wände. Eine Kachel ist 20x20 und nimmt 40 Schaden, sodass zwei Standardgeschosse ein Loch öffnen, durch das Panzer dann fahren. Die Grenze selbst ist immun.

Jedes Level hat sein eigenes Labyrinth, sodass die Levelnummer der einzige Schwierigkeitsregler ist: Sie legt fest, wie viele Gegner ankommen, wie schnell, und das Gelände, in das sie ankommen. Level 1 ist fast offen; Level 8 ist so dicht, dass das Schießen eines Weges normalerweise schneller ist als das Finden eines.

get_maze(level) gibt die Rechtecke, die expandierte Kachelliste und ein Bild zurück:

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

Verwenden Sie die expandierten Kacheln, anstatt die Rechtecke selbst zu expandieren – dieser Schritt und die Regel, welche Kachel ein Geschoss beschädigt, wenn es zwei überbrückt, sind die Stellen, an denen zwei Builds am leichtesten unterschiedliche Löcher aus denselben Schüssen graben.

Das Hinzufügen eines Labyrinths ist nur das Hinzufügen von Rechtecken unter mazes.levels in der YAML. Die Testsuite hält es dann an die Invarianten, die ein Level spielbar machen: kachelausgerichtet, innerhalb des Bereichs, nicht überlappend, Spawn- und Verbündeten-Boxen frei, und jeder Einstiegspunkt zu Fuß erreichbar, ohne etwas zu zerstören – Graben ist eine Abkürzung, nie eine Anforderung.

Bearbeiten der Spezifikation

spec/game-spec.yaml ist das Ganze, und es ist dafür gedacht, von Hand bearbeitet zu werden – das ist der Punkt. Der Server liest es bei jedem Aufruf erneut, sodass eine Änderung sofort wirksam wird, ohne etwas neu zu starten.

Die Spezifikation wurde aus einer funktionierenden Implementierung gespeist und ist von diesem Punkt an unabhängig davon. Sie führt: Ändern Sie zuerst einen Wert hier, dann lassen Sie die Implementierungen folgen.

Tests

uv run pytest

tests/test_spec.py fixiert die Werte der Spezifikation und hält jedes Labyrinth an die Spielbarkeits-Invarianten. tests/test_server.py treibt den Server über einen MCP-Client – Tools entdecken, ihre Beschreibungen lesen, sie aufrufen. tests/test_http.py startet den echten Prozess auf einem Port und verbindet sich über HTTP, so wie ein Client es tut.

Aufbau

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