Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NaZBZofC1on2gkSMb5UWZy |
||
|---|---|---|
| README.md | ||
Star-Edit — StarCraft-Kampagnen-MCP-Server ("Missions-Baumeister")
Status: Planung / Spezifikation. Dieses Dokument hält den kompletten Auftrag fest, bevor Code gebaut wird. Es dient als verbindliche Vorlage für die Umsetzung.
Ziel in einem Satz
Ein MCP-Server, der Claude in die Lage versetzt, aus der Kreativ-Seite einer
StarCraft-Brood-War-Kampagne (Story, Dialoge, Voiceover, Sounds, Missionsablauf)
echte, spielbare .scm/.scx-Missionsdateien zu bauen — also komplette
Missions-Logik, Texte und Sound-Einbettung.
Wichtig: Das Gelände wird nicht generiert. Jede Mission startet von einer vorhandenen Basis-Karte als Leinwand; der Server bearbeitet nur die Daten-/Logik- Sektionen darin.
Rollenverteilung
- Ich (Auftraggeber): liefere die Kreativ-Seite — Story, Dialoge, Voiceover, Sounds, Missionsablauf. Null Programmierkenntnisse. Will am Ende einen Befehl ausführen und eine URL in Claude eintragen.
- Claude + MCP-Server: setzt die Kreativ-Vorlage in echte Missionsdateien um.
Technische Basis
-
Karten-Manipulation: Python-Bibliothek RichChk (PyPI:
richchk).pip install richchkfunktioniert; bringt StormLib mit, läuft auf Linux (getestet —StarCraftMpqIoHelper.create_mpq_io()startet ohne Fehler).
-
Bestätigte Einstiegspunkte (Signaturen vor dem Coden per Introspektion final prüfen, da sie je nach Version leicht abweichen):
Lesen/Schreiben von Karten (MPQ-Container):
from richchk.io.mpq.starcraft_mpq_io_helper import StarCraftMpqIoHelper mpq_io = StarCraftMpqIoHelper.create_mpq_io() rich_chk = mpq_io.read_chk_from_mpq("/pfad/map.scx") # -> RichChk-Modell mpq_io.save_chk_to_mpq(rich_chk, "/pfad/basis.scx", "/pfad/out.scx")Bearbeiten:
from richchk.editor.richchk.rich_chk_editor import RichChkEditor new_chk = RichChkEditor().replace_chk_section(neue_sektion, rich_chk) rich_chk.get_sections_by_name(...) # vorhandene Sektionen abfragen rich_chk.chk_sections # alle Sektionen -
Fertige Editoren unter
richchk.editor.richchk.*: trig (Trigger), mrgn (Locations), unis/unix (Einheiten-Werte), forc (Forces/Fraktionen), ownr (Owner), side (Rassen), swnm (Switches), uprp (Unit Properties), wav (Sounds). -
Rich-Modelle (Trigger, Conditions, Actions, Locations, …) unter
richchk.model.richchk.*.
Herzstück = Trigger. Fast die gesamte Kampagnen-Logik wird über Trigger abgebildet: Gegnerwellen, Verstärkungen, Einheiten spawnen, Story-Text einblenden, Funksprüche mit Portrait, WAV-Sounds abspielen, Missionsziele, Sieg/Niederlage, Timer, AI-Skripte starten. Das Trigger-Tool muss ausdrucksstark und gut dokumentiert sein (unterstützte Condition-/Action-Typen in der Tool-Beschreibung).
Erster Arbeitsschritt (vor dem Tool-Coding)
richchkinstallieren.- README/Quellen des GitHub-Repos "richchk" lesen.
- Installiertes Paket per Introspektion inspizieren, um die echten Klassen für Trigger (Conditions/Actions), Locations, Forces etc. zu lernen.
- Keine erratenen Methodennamen schreiben.
Stack & Architektur
| Aspekt | Wahl |
|---|---|
| Sprache | Python 3.12 |
| MCP-Framework | FastMCP (offizielles mcp-SDK, pip install "mcp[cli]") |
| Transport | stdio (lokaler Test) + Streamable HTTP (Dauerbetrieb VPS) |
| Betrieb | Docker-Container, eingebunden ins bestehende docker-compose Setup |
| Reverse-Proxy | Caddy (läuft bereits) → TLS-Subdomain, z.B. sc-mcp.pixel-by-design.de |
| Karten-Volume | gemountetes Volume (z.B. /data/maps) für Basis-Karten, WAVs, Missionen |
Tools (Prefix sc_)
| Tool | Zweck | Hints |
|---|---|---|
sc_list_maps |
listet .scm/.scx-Dateien im Karten-Verzeichnis |
readOnly |
sc_describe_map |
menschenlesbare Übersicht: Tileset, Größe, Forces/Player-Setup, Rassen, Locations, Trigger-Zusammenfassung | readOnly |
sc_list_locations |
Locations (MRGN) auflisten | readOnly |
sc_create_location |
Location anlegen | — |
sc_rename_location |
Location umbenennen | — |
sc_set_player_setup |
Forces (forc), Owner (ownr), Rassen (side) setzen | — |
sc_add_trigger |
Kern-Tool. Trigger mit Conditions + Actions + betroffenen Playern hinzufügen | — |
sc_list_triggers |
Trigger auflisten | readOnly |
sc_remove_trigger |
einzelnen Trigger entfernen | destructive |
sc_clear_triggers |
alle Trigger entfernen | destructive |
sc_embed_wav |
WAV-Datei einbetten und referenzierbar machen (wav-Editor) | — |
sc_save_map |
bearbeitetes Modell als neue .scm/.scx schreiben (save_chk_to_mpq, Basis-Karte als Vorlage) |
— |
sc_set_briefing |
optional / experimentell. Mission-Briefing (MBRF). Falls kein High-Level-Editor: als TODO markieren, kein Blocker | — |
sc_add_trigger — Mindest-Abdeckung
Strukturierte Eingabe (Liste von Conditions, Liste von Actions, betroffene Player). Muss u.a. abdecken:
- Einheiten erzeugen an Location
- Text einblenden (Display Text Message)
- Transmission mit Portrait + WAV
- Play WAV
- Sieg-/Niederlagebedingungen
- Timer
- AI-Skript ausführen
Anforderungen pro Tool
- Klare Beschreibung.
- Sinnvolle Pydantic-Eingabeschemas mit Feldbeschreibungen.
- Hilfreiche Fehlermeldungen, z.B.
"Location 'Basis' existiert nicht – verfügbar: …". readOnlyHint/destructiveHint-Annotationen passend gesetzt.
Definition of Done — Selbsttest
Ein kurzer Selbsttest beweist die ganze Pipeline:
- Basis-Karte aus
/data/mapsladen. - Eine Location anlegen.
- Per Trigger hinzufügen: bei Spielstart eine Texteinblendung
"Mission 1 – Start"und das Erzeugen von ein paar Einheiten an der Location. - Als neue
.scxspeichern. - Neue Datei erneut laden und bestätigen, dass Trigger + Location wirklich drin sind.
Läuft das durch, steht das Fundament.
Liefergegenstände
- Server läuft als Docker-Service, erreichbar über die TLS-Subdomain.
- Ein Start-/Neustart-Befehl.
- Die Connector-URL für Claude (Custom Connector).
- Beispiel-Basis-Karte liegt bereits in
/data/maps. README.mdmit Startbefehl, Subdomain-URL und Anleitung für den Custom Connector in Claude.
Defaults / Entscheidungen
Hier werden während der Umsetzung die getroffenen Default-Entscheidungen dokumentiert, damit am Ende klar ist, was gewählt wurde (keine technischen Rückfragen, wo selbst entscheidbar).
- (wird ergänzt)
Offene TODOs
richchkinstallieren & per Introspektion echte Klassen verifizieren.- Projektstruktur (FastMCP-Server, Pydantic-Schemas, Tool-Module) anlegen.
- Self-Test-Skript schreiben.
- Dockerfile + docker-compose-Service + Caddy-Reverse-Proxy-Eintrag.
- Beispiel-Basis-Karte bereitstellen.
sc_set_briefing(MBRF) als best-effort prüfen.