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

нет

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

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

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

  • Ваш источник никогда не изменяется. 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, извлечённые игровые данные или защищённые авторским правом карты. Тестовые фикстуры — это заполнители, созданные проектом; они полезны для проверки механизмов подготовки и транзакций, но бесполезны для проверки парсеров форматов, которые должны сверяться с реальным выводом редактора.

-
license - not tested
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all MCP Connectors

Latest Blog Posts

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