StarCraft-Kampagnen-MCP-Server ("Missions-Baumeister") #1

Merged
Kenearos merged 2 commits from claude/starcraft-campaign-mcp-akqjvd into main 2026-06-22 11:29:34 +02:00
Kenearos commented 2026-06-22 09:11:47 +02:00 (Migrated from github.com)

Was ist drin

Vollständiger MCP-Server, mit dem Claude StarCraft-Brood-War-Karten (.scm/.scx) liest und schreibt — aus einer Kreativ-Vorlage entstehen echte, spielbare Missionsdateien (Logik, Texte, Sound-Einbettung). Das Gelände wird nicht generiert; jede Mission startet von einer Basis-Karte. Karten-Manipulation komplett über RichChk.

13 Tools (Prefix sc_)

  • Lesen: sc_list_maps, sc_describe_map, sc_list_locations, sc_list_triggers
  • Locations: sc_create_location, sc_rename_location
  • Player-Setup: sc_set_player_setup (forc/ownr/side + Force-Namen)
  • Kern-Tool sc_add_trigger: 10 Condition-Typen (always, elapsed_time, bring, command, kill, deaths, accumulate, opponents, countdown_timer, never) und 20 Action-Typen (create_unit, display_text, play_wav, set_mission_objectives, victory/defeat, set_countdown_timer, run_ai_script(+at_location), move/kill/remove/give units, set_resources/deaths, center_view, minimap_ping, set_alliance_status, pause/unpause_timer)
  • Trigger verwalten: sc_remove_trigger, sc_clear_triggers
  • Sound: sc_embed_wav (Voiceover-Einbettung)
  • Speichern: sc_save_map, sc_reset_map

Tolerante Pydantic-Eingaben (Bezeichner / Anzeigename / Zahl), hilfreiche Fehlermeldungen (z.B. "Location 'X' existiert nicht. Verfuegbar: …"), readOnlyHint/destructiveHint-Annotationen.

Architektur & Betrieb

  • FastMCP (mcp[cli]), Transport stdio (lokal) + Streamable HTTP (Betrieb, Endpunkt /mcp)
  • Docker (python:3.12-slim), docker-compose.yml, Caddyfile (TLS-Subdomain), run.sh (Ein-Befehl-Start)
  • Karten-Volume /data/maps; Beispiel-Basis-Karte data/maps/base-map.scx liegt bei

Verifiziert (selbst getestet)

  • Selbsttest (DoD): laden → Location → Trigger (Text + Einheiten) → speichern → neu laden → bestätigt
  • Alle 13 Tools registrieren mit korrekten Hints; komplexe Trigger (play_wav, run_ai_script, bring→victory) gebaut
  • WAV-Einbettung end-to-end (WAV-Sektion + physische Datei in der MPQ)
  • Streamable-HTTP-Endpunkt per echtem MCP-Client-Handshake (initialize, list_tools=13, call_tool)
  • Lauffähig unter Python 3.11 und 3.12

Connector-URL für Claude

https://sc-mcp.pixel-by-design.de/mcp

Bekannte TODOs (kein Blocker)

  • Transmission/TalkingPortrait (Portrait-Funkspruch) hat in RichChk kein High-Level-Modell → Ersatz: play_wav + display_text + center_view
  • sc_set_briefing (MBRF) und Switches bewusst für v1 weggelassen

Hinweis: Code + komplette Pipeline wurden in einer Linux-Build-Umgebung gebaut und getestet. Das eigentliche Deployment auf den Hetzner-VPS (Docker-Build, Caddy, DNS) erfolgt mit ./run.sh — das konnte aus der Build-Umgebung nicht für den VPS ausgeführt werden (kein Docker-Daemon dort).

🤖 Generated with Claude Code

https://claude.ai/code/session_01NaZBZofC1on2gkSMb5UWZy

## Was ist drin Vollständiger **MCP-Server**, mit dem Claude StarCraft-Brood-War-Karten (`.scm`/`.scx`) liest und schreibt — aus einer Kreativ-Vorlage entstehen echte, spielbare Missionsdateien (Logik, Texte, Sound-Einbettung). Das Gelände wird **nicht** generiert; jede Mission startet von einer Basis-Karte. Karten-Manipulation komplett über **RichChk**. ### 13 Tools (Prefix `sc_`) - **Lesen:** `sc_list_maps`, `sc_describe_map`, `sc_list_locations`, `sc_list_triggers` - **Locations:** `sc_create_location`, `sc_rename_location` - **Player-Setup:** `sc_set_player_setup` (forc/ownr/side + Force-Namen) - **Kern-Tool `sc_add_trigger`:** 10 Condition-Typen (always, elapsed_time, bring, command, kill, deaths, accumulate, opponents, countdown_timer, never) und 20 Action-Typen (create_unit, display_text, play_wav, set_mission_objectives, victory/defeat, set_countdown_timer, run_ai_script(+at_location), move/kill/remove/give units, set_resources/deaths, center_view, minimap_ping, set_alliance_status, pause/unpause_timer) - **Trigger verwalten:** `sc_remove_trigger`, `sc_clear_triggers` - **Sound:** `sc_embed_wav` (Voiceover-Einbettung) - **Speichern:** `sc_save_map`, `sc_reset_map` Tolerante Pydantic-Eingaben (Bezeichner / Anzeigename / Zahl), hilfreiche Fehlermeldungen (z.B. *"Location 'X' existiert nicht. Verfuegbar: …"*), `readOnlyHint`/`destructiveHint`-Annotationen. ### Architektur & Betrieb - **FastMCP** (`mcp[cli]`), Transport **stdio** (lokal) + **Streamable HTTP** (Betrieb, Endpunkt `/mcp`) - **Docker** (`python:3.12-slim`), `docker-compose.yml`, **Caddyfile** (TLS-Subdomain), `run.sh` (Ein-Befehl-Start) - Karten-Volume `/data/maps`; **Beispiel-Basis-Karte** `data/maps/base-map.scx` liegt bei ### Verifiziert (selbst getestet) - ✅ Selbsttest (DoD): laden → Location → Trigger (Text + Einheiten) → speichern → neu laden → bestätigt - ✅ Alle 13 Tools registrieren mit korrekten Hints; komplexe Trigger (play_wav, run_ai_script, bring→victory) gebaut - ✅ WAV-Einbettung end-to-end (WAV-Sektion + physische Datei in der MPQ) - ✅ Streamable-HTTP-Endpunkt per **echtem MCP-Client-Handshake** (initialize, list_tools=13, call_tool) - ✅ Lauffähig unter Python **3.11 und 3.12** ### Connector-URL für Claude ``` https://sc-mcp.pixel-by-design.de/mcp ``` ### Bekannte TODOs (kein Blocker) - `Transmission`/`TalkingPortrait` (Portrait-Funkspruch) hat in RichChk kein High-Level-Modell → Ersatz: `play_wav` + `display_text` + `center_view` - `sc_set_briefing` (MBRF) und Switches bewusst für v1 weggelassen > Hinweis: Code + komplette Pipeline wurden in einer Linux-Build-Umgebung gebaut und getestet. Das eigentliche Deployment auf den Hetzner-VPS (Docker-Build, Caddy, DNS) erfolgt mit `./run.sh` — das konnte aus der Build-Umgebung nicht für den VPS ausgeführt werden (kein Docker-Daemon dort). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01NaZBZofC1on2gkSMb5UWZy
coderabbitai[bot] commented 2026-06-22 09:12:43 +02:00 (Migrated from github.com)

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 8942d904-da61-4e36-ba43-0eda96c97909

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/starcraft-campaign-mcp-akqjvd

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

<!-- This is an auto-generated comment: summarize by coderabbit.ai --> <!-- This is an auto-generated comment: skip review by coderabbit.ai --> > [!IMPORTANT] > ## Review skipped > > Draft detected. > > Please check the settings in the CodeRabbit UI or the `.coderabbit.yaml` file in this repository. To trigger a single review, invoke the `@coderabbitai review` command. > > <details> > <summary>⚙️ Run configuration</summary> > > **Configuration used**: defaults > > **Review profile**: CHILL > > **Plan**: Pro > > **Run ID**: `8942d904-da61-4e36-ba43-0eda96c97909` > > </details> > > You can disable this status message by setting the `reviews.review_status` to `false` in the CodeRabbit configuration file. > > Use the checkbox below for a quick retry: > - [ ] <!-- {"checkboxId": "e9bb8d72-00e8-4f67-9cb2-caf3b22574fe"} --> 🔍 Trigger review <!-- end of auto-generated comment: skip review by coderabbit.ai --> <!-- finishing_touch_checkbox_start --> <details> <summary>✨ Finishing Touches</summary> <details> <summary>🧪 Generate unit tests (beta)</summary> - [ ] <!-- {"checkboxId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "radioGroupId": "utg-output-choice-group-unknown_comment_id"} --> Create PR with unit tests - [ ] <!-- {"checkboxId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8", "radioGroupId": "utg-output-choice-group-unknown_comment_id"} --> Commit unit tests in branch `claude/starcraft-campaign-mcp-akqjvd` </details> </details> <!-- finishing_touch_checkbox_end --> <!-- tips_start --> --- Thanks for using [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=Kenearos/Star-Edit&utm_content=1)! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. <details> <summary>❤️ Share</summary> - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code) </details> <sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub> <!-- tips_end -->
Sign in to join this conversation.
No description provided.