SC2 Map Editor MCP
SC2 Map Editor MCP
これは、Galaxy Editor の UI を操作する代わりに、ファイルの内容を直接操作して StarCraft II のマップとモッドを検査・編集できるようにする MCP サーバーです。
ステータス: プレリリース。 PLAN.md の大部分が実装されており、ギャップはごまかさず明示されています。現在の機能 を読むか、実行中のサーバーに sc2_get_server_info で問い合わせてください。それが特定のビルドとマシンにとっての信頼できる答えです。
現在の機能
サーバーはこれを sc2_get_server_info 経由で自身が報告します — それが実行中のビルドにとっての信頼できる答えです。現時点では次のとおりです。
サブシステム | 読み取り | 書き込み | 備考 |
ワークスペースのステージング | ✅ | ✅ | アンパック済みドキュメントディレクトリのみ |
コンポーネントインベントリ | ✅ | ⚠️ |
|
GameData カタログ | ✅ | ✅ | 検索、検査、継承の解決、参照の検索、パッチ/クローン/作成/削除。自ドキュメントのみ — 依存関係は読み込まれません |
MPQ アーカイブ ( | ✅ | ✅ | 実際のラダーマップでバイト単位のラウンドトリップを実現し、ここでパックしたマップはエディターで開けます — 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 として報告されます。なぜなら、それはマップが壊れているのとはまったく別のことだからです。
ツール
ツール | 読み取り専用 | 目的 |
| はい | バージョン、構成、機能マトリックス、制限 |
| はい | ディスクをスキャンせずに StarCraft II を見つける |
| いいえ | ドキュメントをステージングし、 |
| はい | 種類、件数、コンポーネント、依存関係、診断情報、既知のギャップ |
| はい | 再接続後に |
| はい |
|
| はい | 名前、作者、Modタイプ、アイコン、スクリーンショット、依存関係 |
| はい | 解決順の依存関係チェーン |
| はい | コンポーネントタイプコードの参照表 |
| はい | 存在するカタログドメインとエントリ数 |
| はい | ドメインでフィルタリングして ID でカタログオブジェクトを検索する |
| はい | 単一オブジェクトの独自宣言と、そのままの XML |
| はい | 継承を含む有効な値と、それぞれの由来 |
| はい | オブジェクトを参照するものと、共有されているかどうか |
| いいえ | パスによるフィールド単位の編集(共有オブジェクトの警告付き) |
| いいえ | オブジェクトを新しい ID でバイト単位でコピーする |
| いいえ | 新しいオブジェクトを追加する(できれば親付きで) |
| いいえ | オブジェクトを削除する。参照されている間は拒否する |
| はい | 存在するロケールとテキストテーブル |
| はい | テキストテーブルをキーまたは値で検索する |
| はい | ローカライズされた文字列を1件読み取る |
| いいえ | ローカライズされた文字列を作成または更新する |
| いいえ | ローカライズされた文字列を削除する |
| いいえ | キー間またはロケール間で文字列をコピーする |
| はい | 表示名のないカタログオブジェクトを見つける |
| いいえ | Galaxy Editor でドキュメントを開き、読み込めることを確認する |
| はい | エディタ自身のログを一覧表示または読み取る |
| はい | レジストリ経由で解決したユーザーの Maps フォルダー |
| はい | ドキュメント内のスクリプト。生成された MapScript にフラグを付ける |
| はい | スクリプトを読み取る(行範囲指定も可能) |
| はい | 関数、変数、構造体、インクルード |
| はい | 行番号と列番号付きの構文エラー |
| いいえ | 完全一致テキスト編集。パースを壊す場合は拒否される |
| いいえ | ライブラリを追加する(最初に構文チェック) |
| はい | 名前が解決されたトリガーツリー |
| はい | 1つの要素: タイプ、名前、内容、参照元、生の XML |
| はい | 名前でトリガー要素を検索する |
| いいえ | 要素の名前を変更する(TriggerStrings のみ編集) |
| はい | マップ上のユニット、ダッド、ポイント |
| いいえ | 次の空き ID でユニット、ダッド、またはポイントを配置する |
| いいえ | 配置済みオブジェクトを移動、回転、または再スケールする |
| いいえ | 配置済みオブジェクトを削除する |
| はい | 形状付きのリージョン |
| いいえ | 次の空き ID でリージョンを追加する |
| いいえ | リージョンを移動または名前変更する |
| いいえ | リージョンを削除する |
| いいえ | 依存関係を追加する。ロード順では後にあるエントリが優先される |
| いいえ | 依存関係を |
| いいえ |
|
| はい | 地形記述子とバイナリコンポーネントヘッダー |
| いいえ | 名前、ステータス、専用ウェポンを持つユニットを複製する |
| いいえ | 共有しているユニットに影響を与えずに1つのユニットのダメージを変更する |
| いいえ | 共有オブジェクトの所有者に専用コピーを提供する |
| はい | これを編集すると1人の所有者を超えて影響するか? |
| はい | このビルドが持つすべてのチェックをカテゴリごとに表示し、未チェックのものも名前を挙げる |
| いいえ | ステージングしたドキュメントをバックアップと事前チェック付きで書き出す |
| はい | ソースまたはスナップショットに対する unified diff |
| はい | 変更履歴(各変更前に取得したスナップショット付き) |
| いいえ | 最新の変更を元に戻す |
| いいえ | 正常と分かっている状態を固定する |
| はい | ワークスペースに対して保持されているスナップショット |
| いいえ | ステージングツリーをスナップショットまで戻す |
| はい | ステージングツリーのページネーション付き一覧 |
| はい | ステージングされたファイルを1件読み取る(テキスト、バイナリは base64) |
| はい | ステージングされたテキストファイル全体でのリテラル部分文字列検索 |
| いいえ | ステージングコピーを削除する。ソースは変更されない |
セーフティモデル
ソースが変更されることはありません。
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 installpnpm run verifyverify は lint、型チェック、ビルド、完全なテストスイートを実行します — ビルド済みサーバーを実際の子プロセスとして起動し、stdio 経由で MCP をやり取りする統合テストも含みます。
パックされた .SC2Map アーカイブを読み書きするには、sc2mpq サイドカーも必要です。これはビルドして提供されるもので、同梱されません — ネイティブバイナリであり、コミットされたものはビルドマシンのパスを保持してしまうからです。固定された StormLib を取得してコンパイルしてください:
pwsh scripts/bootstrap.ps1 -Only StormLibpwsh 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 doctordoctor は解決された設定、検出された 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 のアセット、抽出されたゲームデータ、著作権のあるマップコンテンツはこのリポジトリに含まれておらず、今後も含まれることはありません。テストフィクスチャはプロジェクトが作成したプレースホルダーです — ステージングとトランザクションの仕組みを試すには有用ですが、フォーマットパーサーの検証には役に立ちません。パーサーは実際のエディタ出力と照合する必要があります。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personal…
An MCP server for deep research or task groups
MCP Server for JFrog, providing tools for development and artifact management.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/erivgout/sc2-map-editor-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server