Skip to main content
Glama

SC2 Map Editor MCP

MCP-сервер, позволяющий программному агенту просматривать и редактировать карты и моды StarCraft II, напрямую изменяя содержимое их файлов, а не управляя интерфейсом Galaxy Editor.

Статус: предварительная версия. Бо́льшая часть 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

да

Название, автор, тип мода, иконка, скриншоты, зависимости

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

да

Прочитать одну локализованную строку

sc2_set_text_value

нет

Создать или обновить локализованные строки

sc2_delete_text_key

нет

Удалить локализованные строки

sc2_copy_text_key

нет

Копировать строки между ключами или локалями

sc2_find_missing_localization

да

Объекты каталога без отображаемого имени

sc2_launch_editor

нет

Открыть документ в редакторе Galaxy, чтобы подтвердить загрузку

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

да

Один элемент: тип, имя, содержимое, ссылки, исходный 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

нет

Задать однозначное поле DocInfo, например ModType

sc2_get_terrain_summary

да

Описатель ландшафта и заголовки двоичных компонентов

sc2_create_unit_from_template

нет

Клонировать юнит с именем, характеристиками и собственным оружием

sc2_set_unit_weapon_damage

нет

Изменить урон одного юнита, не затрагивая другие юниты, разделяющие его

sc2_isolate_shared_object

нет

Дать одному владельцу собственную копию общего объекта

sc2_check_shared_object

да

Затронет ли изменение кого-то помимо одного владельца?

sc2_validate_document

да

Все проверки этой сборки по категориям, с указанием непроверенных

sc2_commit_document

нет

Записать подготовленный документ с резервной копией и предварительной проверкой

sc2_diff_workspace

да

Объединённый diff относительно источника или снимка

sc2_get_changes

да

История изменений со снимком перед каждым

sc2_revert_change

нет

Отменить последнее изменение

sc2_create_snapshot

нет

Зафиксировать заведомо рабочее состояние

sc2_list_snapshots

да

Снимки, хранящиеся для рабочей области

sc2_restore_snapshot

нет

Откатить дерево подготовки к снимку

sc2_list_files

да

Постраничный список дерева подготовки

sc2_read_file

да

Прочитать один подготовленный файл (текст или base64 для двоичного)

sc2_search_files

да

Поиск литеральной подстроки по подготовленным текстовым файлам

sc2_discard_workspace

нет

Удалить копию подготовки; источник не затрагивается

Related MCP server: loenn-mcp

Модель безопасности

Это программа, которая редактирует ваши карты по указаниям языковой модели, поэтому настройки по умолчанию консервативны:

  • Ваш источник никогда не изменяется. sc2_open_document копирует документ в служебный каталог подготовки на сервере. Все изменения попадают туда. sc2_commit_document — единственный способ что-либо оттуда вывести, и он отказывается по трём независимым причинам — ошибки проверки, изменение источника под вами и занятый целевой файл — каждую из которых нужно отдельно обойти.

  • Пути находятся в белом списке. Ничего за пределами allowedRoots нельзя прочитать или записать. Пути сначала канонизируются, поэтому симлинки нельзя использовать для обхода.

  • Ничто не запускает оболочку. Внешние программы запускаются с массивами аргументов, таймаутом и урезанным окружением. Инструмента «выполнить эту команду» не существует.

  • Не реализовано означает не реализовано. Флаг возможности равен true только тогда, когда код существует и его серверная часть присутствует на этой машине. Сервер предпочтёт сообщить, что не может что-то сделать, чем гадать.

  • Общие объекты никогда не изменяются случайно. Двадцать юнитов разделяют одно оружие. Просьба изменить «урон этого юнита» клонирует цепочку, перенастраивает только этот юнит и точно сообщает, что скопировано — если вы явно не попросите изменить общий оригинал.

  • Правки без потерь, предварительно просматриваемые и обратимые. XML-изменения вставляются в точные диапазоны байтов, поэтому всё за пределами правки — комментарии, порядок атрибутов, окончания строк CRLF, наличие завершающего перевода строки — остаётся идентичным. Каждая мутация сначала делает снимок, поддерживает dry_run, создаёт объединённый diff, полностью откатывается при сбое любой части и может быть отменена после.

Требования

  • Node.js 22 или новее (разрабатывалось на 26)

  • pnpm 10

  • Windows для всего, что связано со StarCraft II. Ядро кроссплатформенное; интеграция с редактором — нет.

Начало работы

pnpm install
pnpm run verify

verify запускает линтер, проверку типов, сборку и полный набор тестов — включая интеграционный тест, который запускает собранный сервер как реальный дочерний процесс и общается с ним по MCP через stdio.

Для чтения и записи упакованных архивов .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-клиента

Сервер общается по MCP через stdio. Укажите вашему клиенту на собранную точку входа:

{
  "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