Skip to main content
Glama

SC2 Map Editor MCP

これは、Galaxy Editor の UI を操作する代わりに、ファイルの内容を直接操作して StarCraft II のマップとモッドを検査・編集できるようにする MCP サーバーです。

ステータス: プレリリース。 PLAN.md の大部分が実装されており、ギャップはごまかさず明示されています。現在の機能 を読むか、実行中のサーバーに sc2_get_server_info で問い合わせてください。それが特定のビルドとマシンにとっての信頼できる答えです。

現在の機能

サーバーはこれを sc2_get_server_info 経由で自身が報告します — それが実行中のビルドにとっての信頼できる答えです。現時点では次のとおりです。

サブシステム

読み取り

書き込み

備考

ワークスペースのステージング

✅

✅

アンパック済みドキュメントディレクトリのみ

コンポーネントインベントリ

✅

⚠️

ComponentList は読み取り専用です。DocumentInfo フィールドと依存関係チェーンは書き込み可能です

GameData カタログ

✅

✅

検索、検査、継承の解決、参照の検索、パッチ/クローン/作成/削除。自ドキュメントのみ — 依存関係は読み込まれません

MPQ アーカイブ (.SC2Map, .SC2Mod)

✅

✅

実際のラダーマップでバイト単位のラウンドトリップを実現し、ここでパックしたマップはエディターで開けます — docs/native-helper.md を参照

Galaxy スクリプト

✅

✅

解析、シンボル、構文診断、安全なテキストパッチ。型チェックなし — ゲームのネイティブが必要です。ベンダー提供のツールキットのビルドが必要です

トリガー

✅

⚠️

構造、名前、検索。名前の変更のみ — 構造編集は意図的に未実装

ローカリゼーション

✅

✅

テキストテーブル。BOM と CRLF を正確に保持

SC2Layout

❌

❌

フェーズ 10

配置オブジェクト / リージョン

✅

✅

両方とも XML であり、バイナリではありません。配置、移動、削除 — エディターを介してラウンドトリップします。地形の高さは考慮されません

地形

⚠️

❌

ディスクリプタのみ(タイルセット、寸法、クリフセット)。バルクデータはマジック/バージョン/サイズで報告され、デコードされることはありません

エディター起動

✅

n/a

Galaxy Editor でドキュメントを開き、そのログを読み取ります。自動のテストマップ起動は提供されません — 信頼できるメカニズムは確認されていません

なぜギャップがそこにあるのか、そして各行の "⚠️" が何を意味するのか: docs/capabilities.md。

パックされたアーカイブはエンドツーエンドで機能します。.SC2Map から開いた既存のマップをここで拡張し、ここで再パックしてから Galaxy Editor で開くと、実際のドキュメントとして読み込まれ、エディターは追加されたカタログを名前で解決します。ヘルパーのビルドには C++ ツールチェーンと Windows SDK が必要です (scripts/build-native.ps1)。これがない場合、capabilities.mpq は false を報告し、パックされたアーカイブは明確なエラーで拒否されます。

依存関係: ローカルのものは読み込まれますが、Blizzard のものは読み込まれません。 マップの隣にある .SC2Mod ディレクトリはインデックスされ、そのオブジェクトは継承と参照に表示されます — 読み取り専用です。このサーバーは依存アーカイブを変更することがないためです。Blizzard の標準モッドはインストール先の CASC ストア内にありますが、このビルドはそれを読み取ることができません。それらは欠落としてではなく in-casc として報告されます。なぜなら、それはマップが壊れているのとはまったく別のことだからです。

ツール

ツール

読み取り専用

目的

sc2_get_server_info

はい

バージョン、構成、機能マトリックス、制限

sc2_detect_installations

はい

ディスクをスキャンせずに StarCraft II を見つける

sc2_open_document

いいえ

ドキュメントをステージングし、workspace_id を取得する

sc2_get_document_summary

はい

種類、件数、コンポーネント、依存関係、診断情報、既知のギャップ

sc2_list_workspaces

はい

再接続後に workspace_id を復元する

sc2_list_components

はい

ComponentList.SC2Components を解析し、各エントリを実際のファイルに解決する

sc2_get_document_info

はい

名前、作者、Modタイプ、アイコン、スクリーンショット、依存関係

sc2_get_dependencies

はい

解決順の依存関係チェーン

sc2_list_component_types

はい

コンポーネントタイプコードの参照表

sc2_list_catalog_domains

はい

存在するカタログドメインとエントリ数

sc2_search_catalog

はい

ドメインでフィルタリングして ID でカタログオブジェクトを検索する

sc2_get_catalog_object

はい

単一オブジェクトの独自宣言と、そのままの XML

sc2_resolve_catalog_object

はい

継承を含む有効な値と、それぞれの由来

sc2_find_catalog_references

はい

オブジェクトを参照するものと、共有されているかどうか

sc2_patch_catalog_object

いいえ

パスによるフィールド単位の編集(共有オブジェクトの警告付き)

sc2_clone_catalog_object

いいえ

オブジェクトを新しい ID でバイト単位でコピーする

sc2_create_catalog_object

いいえ

新しいオブジェクトを追加する(できれば親付きで)

sc2_delete_catalog_object

いいえ

オブジェクトを削除する。参照されている間は拒否する

sc2_list_locales

はい

存在するロケールとテキストテーブル

sc2_search_text_keys

はい

テキストテーブルをキーまたは値で検索する

sc2_get_text_value

はい

ローカライズされた文字列を1件読み取る

sc2_set_text_value

いいえ

ローカライズされた文字列を作成または更新する

sc2_delete_text_key

いいえ

ローカライズされた文字列を削除する

sc2_copy_text_key

いいえ

キー間またはロケール間で文字列をコピーする

sc2_find_missing_localization

はい

表示名のないカタログオブジェクトを見つける

sc2_launch_editor

いいえ

Galaxy Editor でドキュメントを開き、読み込めることを確認する

sc2_get_editor_logs

はい

エディタ自身のログを一覧表示または読み取る

sc2_get_user_maps

はい

レジストリ経由で解決したユーザーの Maps フォルダー

sc2_list_galaxy_files

はい

ドキュメント内のスクリプト。生成された MapScript にフラグを付ける

sc2_get_galaxy_file

はい

スクリプトを読み取る(行範囲指定も可能)

sc2_get_galaxy_symbols

はい

関数、変数、構造体、インクルード

sc2_get_galaxy_diagnostics

はい

行番号と列番号付きの構文エラー

sc2_apply_galaxy_patch

いいえ

完全一致テキスト編集。パースを壊す場合は拒否される

sc2_create_galaxy_file

いいえ

ライブラリを追加する(最初に構文チェック)

sc2_list_triggers

はい

名前が解決されたトリガーツリー

sc2_get_trigger

はい

1つの要素: タイプ、名前、内容、参照元、生の XML

sc2_search_triggers

はい

名前でトリガー要素を検索する

sc2_rename_trigger

いいえ

要素の名前を変更する(TriggerStrings のみ編集)

sc2_list_placed_objects

はい

マップ上のユニット、ダッド、ポイント

sc2_place_object

いいえ

次の空き ID でユニット、ダッド、またはポイントを配置する

sc2_update_object

いいえ

配置済みオブジェクトを移動、回転、または再スケールする

sc2_delete_object

いいえ

配置済みオブジェクトを削除する

sc2_list_regions

はい

形状付きのリージョン

sc2_create_region

いいえ

次の空き ID でリージョンを追加する

sc2_update_region

いいえ

リージョンを移動または名前変更する

sc2_delete_region

いいえ

リージョンを削除する

sc2_add_dependency

いいえ

依存関係を追加する。ロード順では後にあるエントリが優先される

sc2_remove_dependency

いいえ

依存関係を file: の部分で照合して削除する

sc2_set_document_info

いいえ

ModType のような単一値の DocInfo フィールドを設定する

sc2_get_terrain_summary

はい

地形記述子とバイナリコンポーネントヘッダー

sc2_create_unit_from_template

いいえ

名前、ステータス、専用ウェポンを持つユニットを複製する

sc2_set_unit_weapon_damage

いいえ

共有しているユニットに影響を与えずに1つのユニットのダメージを変更する

sc2_isolate_shared_object

いいえ

共有オブジェクトの所有者に専用コピーを提供する

sc2_check_shared_object

はい

これを編集すると1人の所有者を超えて影響するか?

sc2_validate_document

はい

このビルドが持つすべてのチェックをカテゴリごとに表示し、未チェックのものも名前を挙げる

sc2_commit_document

いいえ

ステージングしたドキュメントをバックアップと事前チェック付きで書き出す

sc2_diff_workspace

はい

ソースまたはスナップショットに対する unified diff

sc2_get_changes

はい

変更履歴(各変更前に取得したスナップショット付き)

sc2_revert_change

いいえ

最新の変更を元に戻す

sc2_create_snapshot

いいえ

正常と分かっている状態を固定する

sc2_list_snapshots

はい

ワークスペースに対して保持されているスナップショット

sc2_restore_snapshot

いいえ

ステージングツリーをスナップショットまで戻す

sc2_list_files

はい

ステージングツリーのページネーション付き一覧

sc2_read_file

はい

ステージングされたファイルを1件読み取る(テキスト、バイナリは base64)

sc2_search_files

はい

ステージングされたテキストファイル全体でのリテラル部分文字列検索

sc2_discard_workspace

いいえ

ステージングコピーを削除する。ソースは変更されない

Related MCP server: loenn-mcp

セーフティモデル

  • ソースが変更されることはありません。 sc2_open_document はドキュメントをサーバー所有のステージングディレクトリにコピーします。すべての編集はそこに置かれます。sc2_commit_document のみがそこからデータを出す唯一の手段であり、検証エラー、元のソースの変更、出力先の占有という3つの独立した理由で拒否されます。それぞれを個別に承認する必要があります。

  • パスは許可リストに制限されます。 allowedRoots の外部にあるものは読み取りも書き込みもできません。パスは最初に正規化されるため、シンボリックリンクで逃れることはできません。

  • シェルは実行されません。 外部プログラムは引数配列、タイムアウト、トリムされた環境で起動されます。「このコマンドを実行」ツールはありません。

  • 未実装は未実装です。 能力フラグが true になるのは、コードが存在し、かつ そのバックエンドがこのマシンに存在する場合のみです。サーバーは推測するより、できないことを伝える方を選びます。

  • 共有オブジェクトが誤って編集されることはありません。 20のユニットが1つのウェポンを共有しています。「このユニットのダメージ」を変更するよう依頼すると、チェーンを複製してそのユニットだけを配線し直し、コピーした内容を正確に通知します — 共有元を明示的に変更するよう依頼しない限り。

  • 編集はロスレス、プレビュー可能、そして元に戻せます。 XML変更は正確なバイト範囲をスプライスするため、編集外のすべて(コメント、属性の順序、CRLF行末、ファイルが改行で終わるかどうか)は同一のまま出力されます。すべての変更はまずスナップショットを作成し、dry_run に対応し、unified diff を生成し、一部でも失敗した場合は完全にロールバックし、後から元に戻すこともできます。

要件

  • Node.js 22 以降(26 で開発)

  • pnpm 10

  • StarCraft II 自体に関するすべては Windows が必要。コアはクロスプラットフォームですが、エディタ統合はそうではありません。

はじめに

pnpm install
pnpm run verify

verify は lint、型チェック、ビルド、完全なテストスイートを実行します — ビルド済みサーバーを実際の子プロセスとして起動し、stdio 経由で MCP をやり取りする統合テストも含みます。

パックされた .SC2Map アーカイブを読み書きするには、sc2mpq サイドカーも必要です。これはビルドして提供されるもので、同梱されません — ネイティブバイナリであり、コミットされたものはビルドマシンのパスを保持してしまうからです。固定された StormLib を取得してコンパイルしてください:

pwsh scripts/bootstrap.ps1 -Only StormLib
pwsh scripts/build-native.ps1

これには CMake、MSVC ツールセット および Windows SDK が必要です。docs/native-helper.md を参照してください。何が欠けていると失敗するかが説明されています。パックドアーカイブ対応以外は、省略しても問題なく動作します — capabilities.mpq は単に false を報告します。

設定ファイルを作成します(docs/configuration.md を参照):

node apps/sc2-mcp-server/dist/main.js doctor

doctor は解決された設定、検出された StarCraft II インストール、機能マトリックスを出力します。サーバーが有用なことを何もできない場合は非ゼロで終了します — たとえば許可されたルートが設定されていない場合などです。

MCPクライアントへの接続

サーバーは stdio 経由で MCP を話します。クライアントをビルド済みエントリーポイントに向けてください:

{
  "mcpServers": {
    "sc2": {
      "command": "node",
      "args": ["C:\\path\\to\\SC2EditorMCP\\apps\\sc2-mcp-server\\dist\\main.js"],
      "env": {
        "SC2MCP_ALLOWED_ROOTS": "C:\\Users\\me\\OneDrive\\Documents\\StarCraft II\\Maps"
      }
    }
  }
}

リポジトリ構成

apps/sc2-mcp-server/     MCP protocol layer: tools, schemas, error translation, stdio entry
packages/sc2-core/       Domain layer: config, path guard, workspace staging, MPQ adapter
packages/sc2-test-utils/ Test fixtures and temp-directory helpers
native/sc2mpq/           C++ MPQ sidecar (StormLib), built separately
docs/                    capabilities.md, sc2-formats.md, native-helper.md, galaxy.md
docs/adr/                Architecture decision records
vendor/PINS.json         Pinned upstream sources (checkouts are gitignored)
scripts/                 bootstrap.ps1 (fetch pins), build-native.ps1 (build the sidecar)
tests/                   Cross-package integration tests

レイヤリングルール(PLAN.md §4): ツールハンドラーは入力を検証し、ドメインサービスを呼び出し、結果を変換します。SC2 のパースはツールハンドラーには決して置かれません。

ライセンスとコンテンツ

MIT — LICENSE を参照。商標およびサードパーティの通知は NOTICE.md にあります。このプロジェクトは Blizzard Entertainment とは関係がなく、その承認も受けていません。

Blizzard のアセット、抽出されたゲームデータ、著作権のあるマップコンテンツはこのリポジトリに含まれておらず、今後も含まれることはありません。テストフィクスチャはプロジェクトが作成したプレースホルダーです — ステージングとトランザクションの仕組みを試すには有用ですが、フォーマットパーサーの検証には役に立ちません。パーサーは実際のエディタ出力と照合する必要があります。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that enables AI agents to read, edit, analyze, procedurally generate, and preview Celeste .bin map files without the Lönn editor.
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for Windows process memory inspection/editing and crash dump analysis, enabling live memory scanning, patching, pointer resolution, disassembly, and offline dump examination via structured tool calls.
    MIT