SC2 Map Editor MCP
SC2 Map Editor MCP
一个 MCP 服务器,让编码代理通过直接操作文件内容来检查和编辑 StarCraft II 地图和 Mod,而不是驱动 Galaxy Editor 界面。
状态:预发布。 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 编辑器中打开文档;读取其日志。自动测试地图启动不提供——尚无可靠机制验证 |
为什么这些差距会在这些位置,以及每一行中 "⚠️" 的含义: docs/capabilities.md。
打包归档可以端到端工作:从 .SC2Map 打开的现有地图,在这里扩展,在这里重新打包,然后在 Galaxy 编辑器中打开时会作为真实文档加载,编辑器会按名称解析新增的目录。构建辅助工具需要 C++ 工具链和 Windows SDK(scripts/build-native.ps1);没有它时,capabilities.mpq 报告 false,并且打包归档会被拒绝,并给出明确错误。
依赖项:本地依赖会加载,Blizzard 的不会。 地图旁的 .SC2Mod 目录会被索引,其中的对象对继承和引用可见——只读,因为此服务器从不修改依赖归档。Blizzard 的官方 Mod 位于安装的 CASC 存储中,此构建无法读取;它们被报告为 in-casc 而不是缺失,因为这与你地图损坏是完全不同的事情。
工具
工具 | 只读 | 用途 |
| 是 | 版本、配置、能力矩阵、限制 |
| 是 | 在不扫描磁盘的情况下找到 StarCraft II |
| 否 | 暂存文档,获取 |
| 是 | 种类、计数、组件、依赖、诊断、已知缺口 |
| 是 | 重新连接后恢复 |
| 是 | 解析 |
| 是 | 名称、作者、模组类型、图标、截图、依赖 |
| 是 | 按解析顺序排列的依赖链 |
| 是 | 组件类型代码的参考表 |
| 是 | 存在的目录域,附带条目计数 |
| 是 | 按 id 查找目录对象,可按域过滤 |
| 是 | 单个对象自身的声明,外加逐字 XML |
| 是 | 带继承关系的有效值,以及每个值的来源 |
| 是 | 哪些内容引用了某个对象,以及它是否被共享 |
| 否 | 按路径进行字段级编辑,并带共享对象警告 |
| 否 | 以新 id 逐字节复制对象 |
| 否 | 添加新对象,最好带有父对象 |
| 否 | 删除对象;被引用时拒绝 |
| 是 | 存在的区域设置和文本表 |
| 是 | 按键或值搜索文本表 |
| 是 | 读取一个本地化字符串 |
| 否 | 创建或更新本地化字符串 |
| 否 | 删除本地化字符串 |
| 否 | 在键或区域设置之间复制字符串 |
| 是 | 没有显示名称的目录对象 |
| 否 | 在 Galaxy Editor 中打开文档,以确认其能加载 |
| 是 | 列出或读取编辑器自身的日志 |
| 是 | 用户的 Maps 文件夹,通过注册表解析 |
| 是 | 文档中的脚本;标记生成的 MapScript |
| 是 | 读取脚本,可按行范围读取 |
| 是 | 函数、变量、结构体、include |
| 是 | 带行号和列号的语法错误 |
| 否 | 精确文本编辑,若破坏解析则拒绝 |
| 否 | 添加库,先进行语法检查 |
| 是 | 触发器树,名称已解析 |
| 是 | 单个元素:类型、名称、内容、引用者、原始 XML |
| 是 | 按名称查找触发器元素 |
| 否 | 重命名元素(仅编辑 TriggerStrings) |
| 是 | 地图上的单位、装饰物和点 |
| 否 | 使用下一个空闲 id 放置单位、装饰物或点 |
| 否 | 移动、旋转或缩放已放置的对象 |
| 否 | 移除已放置的对象 |
| 是 | 区域及其形状 |
| 否 | 使用下一个空闲 id 添加区域 |
| 否 | 移动或重命名区域 |
| 否 | 移除区域 |
| 否 | 追加依赖;在加载顺序中后出现的条目生效 |
| 否 | 移除依赖,按其 |
| 否 | 设置单值 |
| 是 | 地形描述符及二进制组件头 |
| 否 | 克隆一个单位,包含名称、属性和自己的武器 |
| 否 | 更改单个单位的伤害,而不影响共享该武器的单位 |
| 否 | 让某个所有者拥有共享内容的独立副本 |
| 是 | 编辑此内容是否会影响到多个所有者? |
| 是 | 此构建的所有检查,按类别列出,并指明未执行的检查 |
| 否 | 写出暂存文档,包含备份和预检 |
| 是 | 与源文件或快照的统一差异 |
| 是 | 变更历史,每次变更前都有快照 |
| 否 | 撤销最近的更改 |
| 否 | 固定一个已知良好的状态 |
| 是 | 工作区持有的快照 |
| 否 | 将暂存树回滚到某个快照 |
| 是 | 暂存树的分页列表 |
| 是 | 读取一个暂存文件(文本,或二进制文件的 base64) |
| 是 | 在暂存文本文件中进行字面子串搜索 |
| 否 | 删除暂存副本;源文件不受影响 |
安全模型
这是一个根据语言模型的指令编辑你的地图的程序,因此默认设置是保守的:
你的源文件永远不会被修改。
sc2_open_document将文档复制到服务器拥有的暂存目录中。所有编辑都落在那里。sc2_commit_document是文档离开该目录的唯一方式,并且它会在三个独立理由下拒绝——校验错误、源文件在你操作期间已发生变化、以及目标位置被占用——每一项都必须单独豁免。路径采用白名单制。
allowedRoots之外的任何路径都无法读取或写入。路径会先进行规范化处理,因此无法通过符号链接逃逸。不会运行 shell。 外部程序通过参数数组、超时和精简环境来启动。没有“运行此命令”这样的工具。
未实现就是未实现。 只有当代码存在 并且 其后端存在于本机时,能力标志才会是
true。服务器宁可明确告诉你它无法做某事,也不会去猜测。共享对象永远不会被意外编辑。 二十个单位共享一件武器。请求更改“这个单位的伤害”会克隆关联链,只重新连接该单位,并明确告诉你复制了什么——除非你明确要求修改共享的原始对象。
编辑是无损、可预览、可逆的。 XML 更改精确拼接字节范围,因此编辑之外的一切——注释、属性顺序、CRLF 行尾、文件是否以换行符结尾——都保持不变。每次变更都会先创建快照,支持
dry_run,生成统一差异,如果任何部分失败则完全回滚,并且之后可以撤销。
要求
Node.js 22 或更新版本(针对 26 开发)
pnpm 10
Windows,用于任何涉及 StarCraft II 本身的操作。核心是跨平台的,但编辑器集成不是。
快速开始
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