Skip to main content
Glama

SC2 Map Editor MCP

一个 MCP 服务器,让编码代理通过直接操作文件内容来检查和编辑 StarCraft II 地图和 Mod,而不是驱动 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 编辑器中打开文档;读取其日志。自动测试地图启动不提供——尚无可靠机制验证

为什么这些差距会在这些位置,以及每一行中 "⚠️" 的含义: docs/capabilities.md

打包归档可以端到端工作:从 .SC2Map 打开的现有地图,在这里扩展,在这里重新打包,然后在 Galaxy 编辑器中打开时会作为真实文档加载,编辑器会按名称解析新增的目录。构建辅助工具需要 C++ 工具链和 Windows SDK(scripts/build-native.ps1);没有它时,capabilities.mpq 报告 false,并且打包归档会被拒绝,并给出明确错误。

依赖项:本地依赖会加载,Blizzard 的不会。 地图旁的 .SC2Mod 目录会被索引,其中的对象对继承和引用可见——只读,因为此服务器从不修改依赖归档。Blizzard 的官方 Mod 位于安装的 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 Editor 中打开文档,以确认其能加载

sc2_get_editor_logs

列出或读取编辑器自身的日志

sc2_get_user_maps

用户的 Maps 文件夹,通过注册表解析

sc2_list_galaxy_files

文档中的脚本;标记生成的 MapScript

sc2_get_galaxy_file

读取脚本,可按行范围读取

sc2_get_galaxy_symbols

函数、变量、结构体、include

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

与源文件或快照的统一差异

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 之外的任何路径都无法读取或写入。路径会先进行规范化处理,因此无法通过符号链接逃逸。

  • 不会运行 shell。 外部程序通过参数数组、超时和精简环境来启动。没有“运行此命令”这样的工具。

  • 未实现就是未实现。 只有当代码存在 并且 其后端存在于本机时,能力标志才会是 true。服务器宁可明确告诉你它无法做某事,也不会去猜测。

  • 共享对象永远不会被意外编辑。 二十个单位共享一件武器。请求更改“这个单位的伤害”会克隆关联链,只重新连接该单位,并明确告诉你复制了什么——除非你明确要求修改共享的原始对象。

  • 编辑是无损、可预览、可逆的。 XML 更改精确拼接字节范围,因此编辑之外的一切——注释、属性顺序、CRLF 行尾、文件是否以换行符结尾——都保持不变。每次变更都会先创建快照,支持 dry_run,生成统一差异,如果任何部分失败则完全回滚,并且之后可以撤销。

要求

  • Node.js 22 或更新版本(针对 26 开发)

  • pnpm 10

  • Windows,用于任何涉及 StarCraft II 本身的操作。核心是跨平台的,但编辑器集成不是。

快速开始

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 资产、提取的游戏数据或受版权保护的地图内容,将来也不会包含。测试夹具是项目自制的占位内容——适用于测试暂存和事务机制,但无法用于验证格式解析器,格式解析器必须对照真实的编辑器输出进行校验。

-
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