DCS-ME-gateway
DCS 任务编写网关
dcs-me-gateway 是一个本地 MCP 服务器,位于 AI 任务设计师与
DCS-SMS 任务编辑器桥接器之间。它将
许多脆弱的编辑器命令转化为一个小型、带版本控制的编写协议。
该网关不点击 UI,也从不聚焦 DCS。请求被写入 现有的 DCS-SMS 邮箱。如果 DCS 未聚焦且其任务编辑器 更新循环被节流,请求将保持排队状态,直到时钟恢复或调用者选择的截止时间到期。
0.9 中已实现的功能
三十五个 MCP 工具:更新发现、任务编写/验证、持久化语义地图和水文预处理、离线查询、实时地图检查、实时机场和航母编队分配、原生运输路由、DCS 编写的挂载方案发现、实时 AI 任务发现、飞行剖面/时序规划、编队模板、绘图、确定性任务文档、可选的 Skynet-IADS 设置,以及有界离线外部内容管理。
四十一个声明式补丁操作,涵盖任务环境、编组、单位、挂载方案、航线、类型化航路点选项/行为、命名编组的触发动作、触发器、圆形区域、编组频率和单位呼号。
稳定的逻辑引用,包括采用现有命名任务实体和 DCS 分配的单位名称。
任务设计指南作为 MCP 服务器初始化指令进行通告,而不仅仅是作为可选资源/提示,因此兼容的客户端会自动收到规划、时序、挂载方案和 AI 策略默认值。
紧凑的语义快照、确定性修订、乐观并发控制和每个操作的后置条件检查。
受原子写入和进程间锁保护的每任务绑定和幂等记录。
绝对请求过期和显式
OUTCOME_UNKNOWN处理可防止丢失响应后的延迟执行和不安全重放。验证通过的补丁在单个任务编辑器回调中分发;如果后续动词失败,则记录已提交的部分前缀。
预制形状的任务片段使用专用的 DCS-SMS 事务端点,具有原生 ID/名称分配、交叉引用重映射、回滚和编辑器端重放保护。
保存/重新打开验证等待稳定的语义修订,并在"另存为"身份变更时迁移绑定。
针对 DCS-SMS 创建的车辆航线和过时的任务编辑器航线面板所有权的固定兼容性保护。
无任意 Lua MCP 工具。
修订跟踪的 F10 地图注释支持经过验证的圆形、线条、多边形、文本标签和删除批次,而无需为每种形状暴露工具。
数据驱动的任务模板目录返回可调谐的 S-300PS/Buk 阵地布局和分阶段的 AWACS/加油机跑道航线。两个 SAM 编队会对照已安装的 DCS 单位数据库进行实时检查;它们是功能性、代表性的起点,而非精确的真实世界战斗序列。
航母编队编写可发现实时的 Supercarrier 授权、可用的免费/付费船体,以及 DCS 自身跑道类别元数据中的航母适配飞机。一个事务可以单独放置航母或以代表性的蓝/红护航编队形式放置,计算甲板风,编写受支持的 TACAN/ICLS/Link 4/ACLS 动作,将飞机起始点和可选回收航路点绑定到甲板,并应用命名挂载方案和战斗消耗品。
基本通信编写可写入编组频率和规范化单位呼号。离线验证在 AWACS/加油机编组共享频率时发出警告。
缓存的地形可以回答坐标/高程剖面和直线地形 LOS,并带有明确的净空和障碍点。建筑物和植被不在该模型范围内。
混合模式编写包括确定性的 1024×1440 军用灯光玩家档案和写时复制
.miz外部内容覆盖层。档案从固定的已保存任务中读取呼号、飞机、航线、时序、无线电、航母辅助设备、外挂、燃油、机炮和对抗措施;可选战术散文保持为显式代理输入。航线页面使用干净的缓存 DCS 地形,禁用语义和 F10 覆盖层。覆盖层管理飞机/通用膝板、简报文本和图片,以及有界的图像/声音/Lua 资源,而无需就地编辑源任务。可恢复的瓦片缓存提取权威的 DCS 高程和地表类型,推导坡度、坡向、粗糙度以及候选山脊/山谷/山口特征,并渲染干净的地形 PNG 和带注释的上下文 PNG,后续查询无需 DCS。
独立可恢复的水文层默认以 50 米采样 DCS 地表类型,无需重建高程、坡度或语义区域。它将每个采样打包为两位,跳过高置信度的均匀陆地和公海基础瓦片,推导有界的八连通河流/湖泊组件,并单独报告保守的短间隙拼接,且可以从已验证的切片扩展到完整数据集覆盖,具有稳定的瓦片 ID。
每个缓存存储 DCS 编写的命名地点和固定机场元数据,包括跑道入口/长度、停机坪包络、掩体标志和推导的停机坪集群。地点标签明确不排名,因为 DCS 的城镇源提供名称和坐标,而非重要性。
有界锚点图缓存附近机场和命名地点之间的 DCS 原生公路和铁路走廊,包括绕行、高程/坡度、端点吸附和跨水证据。实时路由仍可用于精确端点,因为缓存不是完整的道路网络导出。
粗略聚落区域是带缓冲的命名地点集群,具有明确的来源和推荐的图像视图边界。它们不是建筑足迹;单个结构仍是视觉地图检查任务。
语义缓存还存储可查询的机场、聚落和命名地点实体,以及根据地表、高程、坡度、粗糙度和低细节证据分类的连续地形区域。区域使用紧凑的行游程编码并记录邻接关系,而不是假装栅格单元是现实世界的行政边界。
可恢复的宏观运输图使用机场和聚落枢纽。其边是 DCS 原生公路/铁路路径,带有吸附的端点网关,因此离线查询可以选择多边区域路线,而实时 DCS 路由仍是精确首/末英里车队几何的权威。
按需地图检查将实时 ME 地图适配到请求的边界,仅捕获其地图小部件,写入带地理参考的 PNG,并恢复之前的相机。相机运动帧检查拒绝隐藏编辑器捕获(例如,当正在运行的任务的 F10 视图实际在屏幕上时)。
预处理自动检查缓存形状、精确共享瓦片边缘,以及针对实时 DCS 的 16 个确定性点。同一报告可通过
validate_map_dataset重新运行,或禁用实时奇偶校验以进行仅离线 QA。保守的低细节检测记录其证据,并且仅在近均匀陆地通过所有阈值时存储粗略瓦片;它不会将普通平坦地形静默等同于高加索边缘占位符。
DCS 保存的金色固定装置、离线存档/Lua/参考测试,以及隔离的实时编写测试台,该测试台编辑克隆、恢复原始文件并验证其文件哈希。
实时机场规划使用 DCS 的飞机包络/类别过滤器、开放任务中的保留停机位、任务地表风、跑道标签,以及停机位到可能跑道入口的滑行代理。验证创建支持一至四架飞机的冷启动、热启动和跑道启动,并在构建步骤失败时移除部分构建的编组。活动跑道策略可以将原生紧凑停车选择重新分配给已验证的首选停机位集。
预设优先的挂载方案编写查询已安装的 DCS 构建,获取命名飞机预设、其声明的任务兼容性、外挂和重量。补丁可以应用一个预设或进行有界的每挂架调整;网关从不要求模型发明 CLSID 或整个挂载方案。战斗编写还显式检查机炮弹药;零机炮战斗飞机会收到警告,除非该省略是有意的。
实时任务发现仅列出 DCS 为现有编组公开的航路点和航路动作,任务描述在编写补丁之前提供默认值、允许值和缺失目标选择器指导。
任务日期/时间和有用的天气字段在每个语义快照中可读,并可作为一次修订检查的环境操作写入。类型化航路点选项包括威胁反应、交战规则、雷达/ECM 使用、油量不足返航、静默,以及抛弃/加力燃烧室禁令。
基于角色的固定翼剖面和透明的启动/滑行/爬升/转场估算有助于同步编队到达。离线 lint 在 AI 拦截/截击开始其转场时速度过低或高度过低时发出警告。
离线行为 lint 警告无武装 AI 战斗飞机、无交战任务的战斗编组、无目标 ID 的目标任务、无对应行为的语义航路点名称,以及无终端着陆/盘旋/循环的空中航线。目标 lint 还警告可能同时开火的对抗性结果、由单个幸存编组成员满足的占领条件、简报中命名但未出现在任何已识别结果条件中的编组,以及分配给非空中编组的拦截航路点。这些是启发式编写警告,而非对 DCS 运行时 AI 正确性的声明。
该网关不声称对声明式补丁提供回滚。DCS-SMS 补丁
动词在一个 ME 回调中顺序执行;如果动词 N 失败,动词 1 到
N-1 可能已提交。结果记录已提交的前缀和
幂等键,防止盲目重复重试。单独的
apply_mission_fragment 端点具有原生 DCS-SMS 回滚,并显式报告
不完整的回滚。如果其确认结果或应用后
快照无法证明请求的结果,网关返回
OUTCOME_UNKNOWN 并要求在恢复前检查任务;它从不
假装失败的验证撤销了变更。未来的事务性补丁
动词在 docs/dcs-sms-extension.md 中描述。
由于实时语义修订不包括仓库内容,网关
保守地阻止包含仓库效果的片段缓存重放;在选择新键之前检查任务。绘图包含在语义修订和保存/重新打开验证中。
修订和保存/重新打开验证涵盖协议 0.1 编写 表面:语义环境、编组、单位、航线、触发器、区域和绘图 记录,以及任务路径和战区。简报、仓库和全局 任务选项在当前修订边界之外。
DCS 在编组级别持久化车辆航向。因此语义快照 对该车辆编组中的每个单位使用领队车辆的航向。尝试仅给非领队车辆不同的持久航向 将在后置条件验证中失败,而不是在重新打开后静默漂移。
要求
Windows 版本包含自己的 Node.js 运行时。源码开发 需要 Node.js 20.17 或更新版本。
Windows、DCS World 和 DCS-SMS ME 模组仅用于实时编辑器工具。
任务编辑器打开并启用
DCS-SMS -> External execution以进行变更。inspect_map_view额外要求任务编辑器地图在 非最小化窗口中打开。DCS 可以保持未聚焦或被覆盖;网关 直接捕获其应用程序窗口,从不将其置于前台, 也不会静默回退到对遮挡敏感的监视器捕获。
地图提取需要配套的 DCS-SMS ME-mod 0.32.4 工作树中提供的类型化动词 terrain info、terrain sample-grid、terrain list-places、terrain nearest-transport、terrain transport-path、airbase plan-start 和 airbase create-start。
安装 Windows 发行版
该发行版是一个 ZIP 文件。它包含网关、锁定的生产依赖项、可移植的 Node 运行时,以及兼容的 DCS-SMS Mission Editor 桥接源码。它不需要单独安装 DCS-SMS,也不会安装 DCS-SMS 任务钩子或可选的 LuaSec/OpenSSL 文件。
解压 ZIP,关闭 DCS,然后运行:
powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1 -Clients codex支持的 -Clients 值为 codex、claude-code、claude-desktop 和 generic;可以传入多个。generic 会写入一个可移植的 mcp-config.json。Codex 和 ChatGPT 桌面版共用 Codex 的本地 MCP 配置。Claude Code 和 Claude Desktop 会单独注册。其他客户端可以使用 generic 文件中的同一个 stdio 命令和运行环境。网页版 ChatGPT 无法直接启动本地 stdio 服务器;本包面向运行 DCS 的机器上的 ChatGPT 桌面版/Codex。关于它们的原生配置界面,请参见 OpenAI MCP 文档 和 Claude Code MCP 文档。
安装程序会:
发现 DCS 和 Saved Games 文件夹,或接受
-DcsPath参数和-SavedGames参数;验证 DCS 已禁用
Full Screen,但绝不动改该偏好设置;在 DCS 运行期间拒绝修补 Mission Editor;
备份用户的
MissionEditor.lua和任何之前的桥接;安装附带的 GPLv3 桥接源码,并仅将其中用定界符标出的 require 块添加到用户自己的编辑器文件中;以及
仅注册用户所需的
dcs-meMCP 条目,并将该条目固定到所选的 Saved Games 实例。
MCP 启动时,网关会检查 GitHub 最新的稳定版发布入口,采用 2.5 秒超时和六小时本地缓存。当有更新的语义版本可用时,其 MCP 指令会告诉代理询问用户是否更新。该检查从不安装任何内容。在用户明确批准后,关闭 DCS 以及所有使用该网关的 MCP 客户端,然后运行:
powershell -NoProfile -ExecutionPolicy Bypass -File `
"$env:LOCALAPPDATA\DcsMeGateway\update.ps1"更新程序会在更改前再次询问,只下载带版本号的 Windows 发行版,验证其单独发布的 SHA-256,然后调用正常的备份保留安装程序。设置 DCS_ME_UPDATE_CHECK=0 可禁用自动检查。check_gateway_update 执行按需或强制检查。预发布标签被有意排除在该更新通道之外。
对于代理引导的安装,请将解压后的文件夹交给代理,并让它按照 VIBEINSTALL.md 进行操作。安装后,重启 MCP 客户端,在 DCS Mission Editor 中打开一个任务,然后启用 DCS-SMS -> External execution。该切换仅对当前会话有效。
网关采用 MIT 许可。随附的 DCS-SMS 桥接仍为 GPLv3,并在 payload/bridge 下随附完整源码和许可证;请参阅 THIRD_PARTY_NOTICES.md。
从源码安装并验证
cd C:\path\to\dcs-me-gateway
npm install
npm test
npm run build
npm run test:golden
npm run test:live到 test:golden 为止的所有步骤完全离线运行;DCS 可以保持关闭。使用以下命令独立验证任何已保存的任务:
npm run validate:miz -- D:\Missions\mission.miz验证器会检查 ZIP 完整性和解压限制、必需条目、字面 Lua 语法、任务结构、ID/名称、路线、坐标、实体引用、字典键和打包资源。它会将 Lua 解析为数据,而不会加载或执行任务代码。
给定声明式补丁,以及补丁前后的保存文件,使用以下命令生成一份有针对性的验收报告:
npm run report:patch -- patch.json before.miz after.miz [bindings-before.json] [bindings-after.json]
npm run docs:render -- --mission <saved.miz> --dataset <dataset-id> --output <new-directory>报告包含直接补丁目标、一跳依赖上下文、操作后置条件、引入/解决的验证发现,以及该范围之外任何变更的实体。如果修改后文件无效、后置条件失败、依赖意外更改、无关的任务元数据/选项/仓库发生变更,或超出作用域的实体发生变更,则返回非零退出码。引用先前创建的逻辑 ID 的补丁(以及,且如果分配变更,_after) patch 必须提供相应的 {"entities": ...} 绑定对象;未解析的 ID 会显式报告并导致验收失败。
test:live 只读取编辑器会话。添加 -- --snapshot 可进行实时的只读任务快照。
npm run test:live-authoring 是有意修改程序。它要求在 Mission Editor 中已打开一个保存过的任务。该测试工具首先将任务另存为 .artifacts/live,只编辑该副本,检查幂等性、修订冲突、路线编辑、区域以及保存/重新打开稳定性,然后重新打开原始任务并验证其 SHA-256 未变。它不会启动或飞行该任务。
通过 stdio 启程 MCP 服务器:
node C:\path\to\dcs-me-gateway\build\index.jsMCP 主机应将该命令和路径配置为一个名为 dcs-me 的 stdio 服务器。诊断信息输出到 stderr;stdout 仅供 MCP 帧使用。
配置
环境变量 | 默认值 | 含义 |
| 自动检测 | 显式 DCS Saved Games 实例根目录 |
| 自动检测 | 兼容的 DCS-SMS 覆盖;同时也被接受 |
|
| 绑定和幂等性状态 |
|
| 持久化的地形瓦片数据集和预览 |
| 打包的 | 地图包注册表和远程注册表指针 |
| 注册表指针或空 | 显式 HTTPS 地图包注册表覆盖 |
|
| 内存型 smoke 默认超时 |
|
| 邮箱轮询间隔 |
|
| 仅 localhost 语义地图查看器端口 |
在没有覆盖的情况下,网关先读取 DCS-SMS 的 saved_games 配置值,然后选择 ME 心跳最新的 DCS、DCS.openbeta 或 DCS.server 实例。当 Windows Saved Games 目录已移动,且 DCS-SMS 未在其配置中记录该路径时,请设置 DCS_SMS_SAVED_GAMES。
MCP 工具
工具 | 变更 | 用途 |
| 是 | 新建/打开生命周期,带有语义稳定性屏障 |
| 否 | 权限、生命周期、心跳、队列状态 |
| 否 | 能力、类型化 AI 选项、飞行剖面、实时空军基地、航母资格/船体/飞机、触发器谓词 |
| 否 | 基于角色的高度/速度/选项默认值及透明的到达时间估算 |
| 否 | 列出/解析可调 SAM、AWACS 和加油机编写方案 |
| 否 | 实时 DCS 编写的预设、任务兼容性、外挂、重量及可选挂架详情 |
| 否 | 现有编队允许的实时航路点/途中任务 |
| 否 | 单个任务的实时字段、默认值、允许值及目标选择器指南 |
| 否 | 规范化任务状态及修订号 |
| 否 | 离线结构、引用、AI 行为和目标语义验证 |
| 否 | 针对声明补丁的聚焦式前后 |
| 否 | 编译并预检补丁 |
| 是 | 单次滴答、修订检查、幂等批量操作 |
| 是 | 原生 DCS-SMS 事务,支持回滚;不确定的后置条件需要检查 |
| 是 | 感知资格的红/蓝方航母/护航模板、WOD、无线电/信标、甲板关联飞机及预设外挂 |
| 是 | 修订跟踪的批量 F10 圆、线、多边形、标签及移除 |
| 新文件 | SHA 固定的写时复制航图、简报文本/图片及类型化外部资源;DCS 可关闭 |
| 新文件 | 经用户明确接受后,嵌入固定的 MIST/Skynet 运行时及经过验证的带前缀 IADS 配置;DCS 可关闭 |
| 否 | 离线解析简报文本/图片、航图、地图资源、存档存在性及任务引用计数 |
| 新预览 | 确定性逐机任务卡、通信/外挂、航路点及清晰的航线图 PNG 页面 |
| 是 | 另存为、重新打开及语义差异比对 |
| 否 | 列出持久地形缓存;完全离线 |
| 下载/缓存写入 | 所需战区检查:复用本地、获取并验证托管包,或在本地构建前返回显式权限门 |
| 缓存写入 | 有界/可恢复的实时 DCS 地形提取及衍生数据生成 |
| 缓存写入 | 独立可恢复的高分辨率河流/湖泊表面掩膜;均匀低细节陆地和开阔海域被跳过 |
| 仅预览 | 离线地形、空军基地、命名地点、要素候选及带标注的 PNG 上下文 |
| 临时相机 | 可见实时 ME 地图的地理参考按需 PNG,带相机恢复及可见性证明 |
| 通常否 | 三态缓存地形 LOS;仅 |
| 仅报告 | 瓦片/接缝验证及可选确定性实时 DCS 点位一致性 |
| 否 | 离线跑道、停机位、掩体、尺寸等级及停机坪上下文 |
| 仅预览 | 离线采样公路/铁路走廊、交叉口候选、居民区及图像视图指南 |
| 否 | 精确实时公路路径或保守验证的 DCS 铁路候选 |
| 否 | DCS 原生兼容性/占用情况以及风/跑道/滑行/起飞规划 |
| 是 | 修订检查、幂等、已验证的紧凑或活动跑道停机位/跑道编队创建 |
地图包生命周期
在特定地图的任务规划之前,任务代理被指示为该战区调用
ensure_map_dataset。该工具首先复用完整的本地
数据集,然后检查打包注册表及其可选的 GitHub 托管远程
注册表。下载以流式进行,受其注册字节数限制,对照其
注册的 SHA-256 校验,安全解压,验证数据集/战区
身份和完整性,并以原子方式发布。位于
maps/registry.json 的打包注册表
也是规范的远程注册表。
大型数据集是不可变的、SHA-256 固定的 GitHub 发布资产;原始缓存
和生成的归档永远不会提交到 Git。
如果没有注册包,工具返回 permission_required 而不是
打开 DCS 或自行开始数小时的提取。只有在用户
批准后,代理才能以 allow_local_build=true 重复调用。请求的
战区必须已安装并在 Mission Editor 中打开,且启用外部执行。
构建是可恢复的,可能需要重复调用。
开发者可以显式构建并打包未托管的战区:
npm run maps:settlements
npm run maps:build -- --theatre Caucasus
npm run maps:package -- --dataset caucasus-full-v01-250m `
--base-url https://github.com/ALasek/DCS-ME-gateway/releases/download/maps-v0.9.0maps:settlements 是对当前在 Mission Editor 中打开的
战区进行的快速独立审查。它通过 DCS 的
权威坐标转换解析匹配的精选目录,合并 DCS 原生城镇标签,并写入
JSON 及带标签的 PNG 到 .artifacts/settlements 下。它不会采样或
重建地形、高程、土地覆盖、水文、交通或空军基地数据。
使用 --output <directory> 选择稳定的输出位置。
打包命令打印精确的注册表条目,包括归档大小
和 SHA-256。将该条目添加到 maps/registry.json 并将 .tgz 上传到
匹配的发布。本地构建是项目作者
不拥有的地图的回退方案;它绝不是隐式同意。
preprocess_map_region 对照 DCS 的
权威战区边界验证请求的矩形。DCS 的 4,096 限制适用于每个
地形网格请求中的采样数,而非数据集瓦片数。max_tiles 仅是刻意的
数据集大小保护(默认为 50,000);tile_batch_limit 将每次 MCP
调用限制为默认 200 个缺失瓦片。如果结果包含 complete=false,
请以相同的数据集几何和采样设置重复调用。每个
瓦片和清单更新已经是持久的,不完整的数据集会拒绝正常查询,
最终验证可以驱逐不可读、格式错误或接缝无效的
瓦片,以便在下一批次自动修复。
批次大小和安全保护更改不会改变自动生成的
数据集 ID。
其 north/east 坐标与任务对象使用的战区本地米制相同。默认的保守预扫描
可以以粗分辨率保留高置信度的均匀
海洋或类似占位符的均匀陆地;每个此类决策
在清单和查询结果中都是可见的。海岸线、混合表面和
不满足所有阈值的平坦地形保持全分辨率。
空军基地和 DCS 编写的场所标签缓存在
地形瓦片旁边,并在预览上标注。场所记录不分类为
城市/城镇/村庄,因为 DCS 源不暴露该区别。
语义来源记录 DCS 构建、区域设置和战区城镇来源;
场所 ID 由坐标派生,因为当 DCS 加载某些战区数据集时,重复的 Lua 键会被覆盖。更改的 DCS 地形构建需要显式
force=true 重建,而不是静默重用过时瓦片。
query_map_context、query_airbase_context 和 query_transport_context 仅读取缓存,因此 DCS 可以
关闭。200 米停机坪聚类和紧凑/标准/大型包络带
是导航启发式,而非 DCS 兼容性声明。plan_airbase_start
在变更前始终通过 DCS 重新检查请求的飞机和当前占用情况。
render_mission_documents 对于相同的已保存任务、地形缓存、样式版本、选定分组以及提供的文本而言是确定性的。默认情况下,它会选择玩家/客户端编队(Player/Client flights)。它会生成一份清单以及可直接用于 kneeboard_images 的条目,但不会修改任务。DCS 膝板文件夹可以面向所有飞机或某一机型,但无法区分使用同一机型的两个编队;因此,在需要按编队区分内容时,请合并这些指令,或者改用简报页面。任务卡标识机型,但不会暗示每编队的数量。通讯/挂载页面使用规范且人类可读的挂载名称、以磅为单位标注燃油,并将机炮弹药显示为百分比;它从不显示内部 CLSID。如果已保存任务具有挂载但没有可读取的预设名称,则请以 include_stations=true 调用 get_aircraft_loadouts,并在 flight_notes.loadout_summary 中传递其自带可读的 DCS 显示名称。在提供这些名称之前,渲染都会发出明确警告。对于真实按计划进行的航线,航路点表会使用经核实的已保存航线 ETA 值;受状态门控或玩家节奏控制的事件可改用 flight_notes.waypoint_notes[].time_label 来提供提示和时间窗口,而无需虚构固定时间。当多航点玩家航线既没有有效 ETA 值也没有时间标签时,渲染会给出警告。航线地图只添加稀疏的机场和主要定居点标签,航线与航路点标签仍保持冲突规避和视觉优先级。嵌入前请预览所有页面。
apply_miz_overlay 刻意设计为通用的任务编辑器。请保存正在编辑的 ME 任务,关闭或打开另一个文件,检查已有外部内容,锁定该源文件报告的 SHA-256,再写入新的输出路径。该工具会验证真实图像/声音/脚本签名,拒绝删除被引用的资源,并且仅在没有任务引用仍然存留时才垃圾回收被替换的简报图片。叠加成功之后,请在 ME 中打开输出并运行 save_and_verify。核心编队、航线、触发器和目标仍由 ME 向导编写;这可防止两个作者在同一 .miz 上静默分化。
可选的 Skynet-IADS
对于需要多站点/预警机雷达网络、SEAD/DEAD 场景,或对决所需依赖于雷达辐射战术的任务,代理可以推荐一次 Skynet,并询问用户是否接受依赖运行时脚本的行为。它不应在任何决策中都打断这种套索。每个孤立 SAM 设计都会遇到这个问题,所以不用在每次尝试中都询问。对于诱惑、环境隔离、规则可预测或训练威胁,原生 DCS 报警状态和确定性发射触发器仍然是默认选择。
接受后,为托管的 SAM 机组名称使用一个统一前缀,为托管的 EWR 机组名称也使用一个统一的前缀;保存任务,然后使用已保存文件的 SHA-256 新输出的运行调用 setup_iads。该工具会验证并嵌入 Skynet-IADS 3.3.0 及其上游测试的 MIST 4.5.107,并添加一个按顺序加载 MIST、Skynet 和生成配置的“任务开始”触发器。最终生成的 .miz 自包含;玩家无需额外安装任何内容。在继续操作前,请在 Mission Editor 中打开输出并运行 save_and_verify。
该设置会验证脚本哈希、加载顺序、联盟成员、所有前缀和指定命令中心。但是,它只有运行任务后才能证明运行时 IADS 行为。请为每个被管理的 SAM 组保留一种 SAM 系统类型,为每个被管理的 EWR 组保留一种 EWR;不要添加与 Skynet 在同一雷达上对抗的原生辐射动作。来源归结情况、确切哈希和许可记录在 vendor/skynet-iads/3.3.0 和 THIRD_PARTY_NOTICES.md 中。
analyze_terrain_line 对所有样点覆盖的最精细缓存网格进行双线性插值,并报告 clear、blocked 或 indeterminate。分类器使用显式高程分辨率包络:clear 和 blocked 需要整个包络保持在通视线的某一侧。仅缓存模式会在不联系 DCS 的情况下报告未知走廊区和建议的采样间距。refinement_mode=auto-live 会从匹配的打开中的 Mission Editor 战区对该边界走廊采样,将其拆分至扩展每次调用的采样限制,把更精细的文块持久化到数据集中,并立即重新运行 LOS。后续查询无需 DCS 处于打开状态即可重复这些纹片。一次更精细的重新运行可能仍然合理地返回不明确的结果 indeterminate;响应会报告分辨率下限,并尽可能建议更小的下一次间距,而不是地编造 clear/blocked 结果。这适合雷达/SAM 部署和路线筛选,但不适合涉及建筑物或树木时的最终可见性结论。
在地形拼片处理完成后,语义预处理会生成一个 2 km 分类栅格,平滑单个孤立的非水像元,然后将每个四连通分量转换为带统计信息和行步行几何的紧凑地形区域。机场和城市聚落变为图形枢纽。道路候选支持 80 km 内最多四个邻域,外加有界的连通性修复;铁路候选支持每个 max_tiles,包括 120 km 内最多两个邻接候选。DCS 铁路路由会被视为候选证据,因为其地形网络选择器可能返回无关的线性特征。因此,缓存铁路走廊必须位于两个锚点周围 1.5 km 以内,且其路由长度至少要覆盖两锚点间直线距离的一半;更弱的结果保留为失败候选株,仅供检查,而不是被视为铁轨数据暴露给系统以外。
transport_batch_limit 限制每次调用从活动 DCS 提取路径的数量,待处理/已完成/失败三种边状态均可持久化和继续。完成的折线会保留特网 ID 和经过吸附的网关点。容器通过 query_transport_context 在已有缓存边上使用 Dijkstra 得到离线命名特网路由;route_ground_transport 将相同的保守铁路检测应用于用于任务制作而使用的 DCS 精确当前路径。水上的路径被标记为 water-crossing-candidate,而不是断言它们一定要跨越可破坏的桥梁物体。沉 지역聚落划分有意避免全量建筑清单,因为这会随地形版本变化不一致且数据量过大。
波斯湾处理器使用 maps/settlements/persian-gulf.json 中的稀疏、可编辑目录来补充 DCS 自身的地点标签。该目录包含主要城市、港口和岛屿定居点,用于大约 1980-1990 年代的地图语义词汇,而不是代表完整的历史城镇区域范围。预处理时,DCS 会将每个 WGS84 点转换为所加载的剧院中当地坐标。可以匹配到的相邻 DCS 标签保留原有 DCS 位置,同时加入精选名称、别名、类型和重要性。独立的精选点仅保留区域语义推证。目录 SHA-1 以及来源/时代信息存储在 semantics.json 中,因此编辑目录会清除并重建缓存的定居点和运输语义,而不必重建高程拼接。对于有意简化的清理格式,请参阅 maps/settlements/README.md。
query_map_context 可用边界、semantic_search 或两者共同使用来调用。语义搜索可以配合地形类别、最小区域面积、与某个要素的地理距离、要素类型/名称以及近似道路可达性条件,而不用加载地形图谱块或依赖 DCS。inspect_map_view 是互补的细节路径:它不缓存每栋建筑和道路标记,而是返回请求施工层级下当前的 ME 渲染结果,并附带给定的仿射像素到舞台坐标变换。它会临时写入 ME 地图相机,冲突避免影响其他 gateway 变异,并在即使捕获或可见性验证失败时恢复原有相机。脚本会解析出实际 DCS 窗口句柄;当 DCS 最小化或排他全屏 Alt-Tab 后捕获面板已移除,它会返回包含窗口几何和恢复方案的失败。在执行区域地图检查时,无边框或窗口化 DCS 可能留在 MCP 客户端位于后方。如果某个机场、某一个居民点聚簇和一个原始 DCS 各命名同名,请使用返回的实体 ID 或 kind:name 方括号(例如 settlement:Batumi 或 airbase:Batumi);模糊的不完整名称会失败,而不会悄然选择某一个。
在开发过程中运行 npm run viewer 启动分层缓存查看器,或在 npm run build 后运行 npm run viewer:start,然后使用 npm run build 很快。然后打开 http://127.0.0.1:4317。它可以显示所清洗的地形缓存、更细的地形区域、可用和失败的交通基础、聚落边界、语义实体和标签,而无需调用 DCS。
validate_map_dataset 流式检验瓦片去除和数组检查,只比较相邻共用边缘,并且不会在内存中读取全部地图。其默认 direct_samples=16 会将均匀分布的缓存点与当前已加载的 DCS 战场进行对比;若只想进行离线检查,请调用 direct_samples=0。报告还会以 validation.json 保存到数据集目录。已完成的数据集概览同样也是一次只切片一色块地绘制到其有界输出光栅中。
限制版本的高加索地区开发工具集故意抽取简洁的巴统—科布列季沿海-山地地带,而不是地图外部平原:
npm run test:live-map它按 250 m 分辨率采样 north=-370000..-330000、east=610000..670000,每完成一个 tile 后持久化进度,并可安全其重复运行。仅在添加 -- --force 参数时,才特意刷新当前已经缓存的瓦片数据。它不会处理整张地图。
水文学细化
250 m 基础地形缓存并不被视为权威的河流几何:一条较窄的河可能位于网格点之间,看起来就像稀疏的蓝色点。preprocess_hydrology_layer 在系统化数据集之上附加 hydrology/ 缓存。它默认使用 50 m 网格,只存储每个采样点压缩过的两位地表分类代码;高程与地形派生数据仍保持在基础分辨率。基础地形瓦片(已知是完全相同的均匀陆地或开阔海洋水区)会被跳过,而不进入执行阶段,不参与计划;而细节丰富或水陆混合的沿海瓦片则被采样。
从具有代表性的范围开始,一直重复完全相同的调用,直到界定的范围得到完整覆盖。随后如果不传入 bounds,则会使用相同的图层扩展覆盖所有详细的基础瓦片。然后在所有边界内逐步扩展。通过 tile_batch_limit 限制每次调用所处理的瓦片,max_tiles 则是刻意设下的安全上限。如果更换了间距、瓦片尺寸、战区或 DCS 地形签名,则未通过 force 设置并发起运行会“失败”,并回到安全状态;force=true 将有意开始新的水文数据刷新,后续的可恢复调用则使用 force=false。在图层存在时,query_map_context 返回该图层的覆盖范围、精确的有界表面计数、确定性拼接指标,以及采样的八连通河湖要素。它生成的预览和清晰文档图也融合了更精确的水体遮罩。
原始 DCS 代码和地表单元保持为不可变证据。当两端源样本沿同一直线继续时,离线方向缝合器最多可填充两个缺失单元;推断单元单独报告,仅用于组件连续性和渲染。这比无限制的形态学闭合更保守,后者可能合并附近不相关的水道。组件几何既不是堤岸多边形,也不是导航保证。比所选间距更窄的河流仍可能碎片化,因此当精确堤岸位置重要时,请使用更紧密的有界通道或实时地图检查。高置信度的粗略占位陆地和均匀海洋基础瓦片按设计不在水文覆盖范围内;此优化假设基础低细节校准已将地图的非任务地形与真实详细平原分离。查看器将生成的图层作为可单独切换的 Rivers / lakes 叠加层公开。呈现是派生性的而非证据性的:湖泊保留平滑的采样区域栅格,而河流带被确定性细化、保守间隙连接、简化,并绘制为具有固定屏幕空间宽度的抗锯齿 SVG 中心线。查询和验证继续使用原始打包单元和单独识别的缝合点。
完整补丁模式也作为 MCP 资源 dcs-me://schema/mission-patch/0.1 公开。参见 examples/f16-rwr-patch.json 及其后续的 examples/f16-rwr-route-patch.json。
整个任务的编写应从 MCP 提示 design_dcs_mission 开始。它引导对话而非要求一次性规范:代理可以提出高影响问题、推荐默认值、建议替代方案,并维护一个活的玩家角色、结果、阶段、每组目的、因果交互、能力/挂载和平衡记录。规范的机器可读指令是 docs/design-dcs-mission.md;服务器加载同一文件用于初始化指令、MCP 提示和指导资源。连贯的主干和第一个切片先于变更,但后续细节可以在已批准的切片被编写和测试时保持开放。同一指令也可作为只读资源 dcs-me://guidance/mission-design/0.1 使用。任务概念与用户共同开发,并增量实施以尊重 Mission Editor 绑定障碍。
完整片段模式在 dcs-me://schema/mission-fragment/0.1 公开。它接受 DCS-SMS 预制件使用的数据模型(meta、groups、statics、zones、drawings 和 triggers)以及显式放置策略。端点在 Mission Editor 内部执行其预检和变更,因此调用它需要 DCS;开发和运行仓库测试套件则不需要。
高级航母请求模式在 dcs-me://schema/carrier-package/0.1 公开。首先使用 kind=carrier_capabilities 查询 get_catalog 以检查打开的 DCS 安装的船体、授权、航母兼容飞机和护航类型。dry_run=true 返回编译后的片段和解析的甲板风计划而不更改任务。自动模块选择在 DCS 报告已安装并授权时优先选择 Supercarrier,否则选择联盟的免费航母。
高级机场请求模式在 dcs-me://schema/airbase-start/0.1 公开。create_airbase_start 需要打开的 Mission Editor,检查请求的语义修订和幂等键,预检空闲兼容停机位,调用原生 DCS-SMS 构建动词,然后在新快照中验证组大小、飞机类型、零点航路点机场链接、起飞模式和显式停车 ID。默认的 active_runway 停车策略使用地面风和跑道标识符按直线阈值距离对空闲兼容停机位排序,然后验证重新分配;compact 保留 DCS-SMS 的原始附近组选择。该距离是滑行代理,而非路由时间保证。固定陆地机场使用此端点;航母甲板槽位使用 setup_carrier_package。FARP 仍然是未来的独立表面。
触发器字段值可以通过 "$ref:<logical_id>" 引用较早的逻辑实体;编译器替换其稳定的 DCS 名称。对命名触发动作的引用在触发动作被添加之前立即解析为 DCS 当前的 {groupId, taskNumber} 元组。快照中的航路点 index 值和每个补丁的 waypoint_index 都是零基的。触发器规则索引和触发动作槽位保持一基。
支持的操作有:
现有实体:
adopt_entity用于精确的组、单位、触发器或区域名称。组:
create_group、set_group_task、set_group_late_activation、remove_group。当后续补丁必须寻址其第一个单位时,在create_group上设置lead_logical_id;网关绑定 DCS 返回的名称。单位:
add_unit、set_unit_skill、set_unit_heading、set_unit_loadout、set_unit_payload、clear_unit_payload、remove_unit。载荷消耗品:set_unit_fuel、set_unit_chaff、set_unit_flare和set_unit_gun。航路:
add_waypoint、insert_waypoint、remove_waypoint、link_waypoint_airbase。航路点行为:
add_waypoint_task、add_waypoint_enroute_task、remove_waypoint_task、remove_waypoint_enroute_task、clear_waypoint_tasks、clear_waypoint_enroute_tasks以及类型化的set_waypoint_option操作。任务fields接受嵌套的 JSON 类数组和记录,包括诸如targetTypes: ["Air"]的选择器。组触发动作:
add_triggered_task、replace_triggered_task和remove_triggered_task。这些编写具有稳定名称的任务/航路任务条目;在a_ai_task或a_set_ai_task触发动作字段中使用任务逻辑 ID。在移除任务之前移除其引用的触发动作。环境:
set_mission_environment用于日期/时间、温度、QNH、能见度、湍流、三个高度的风、云和沙尘。触发器:
create_trigger、add_trigger_condition、add_trigger_action、remove_trigger_condition、remove_trigger_action和remove_trigger。区域:
create_zone_circle、remove_zone。
在同一补丁中创建的组的航路编辑需要后续补丁,以便 Mission Editor 完成其航路状态的构建。编辑或移除由 add_unit 创建的单位,或通过 create_group.lead_logical_id 声明的领队,同样需要后续补丁,因为 DCS 在操作结果中分配最终单位名称。验证在任何变更被分派之前将这些报告为显式障碍错误。
预设优先的飞机工作流
对于武装飞机,使用 aircraft_type 和 intended_task 调用 get_aircraft_loadouts。优先选择声明与该任务兼容的 DCS 编写预设;当多个匹配时,选择适度的、命名清晰的预设,其挂架适合任务和预期航程。在任何调整之前为所选预设请求 include_stations=true。使用 set_unit_loadout 应用它,然后仅对预设未满足的显式要求使用 set_unit_payload 或 clear_unit_payload。DCS 命名预设仅更改挂架:将单位继承的燃油/箔条/曳光弹/机炮值与返回的机体最大值和对抗措施默认值进行比较,然后显式设置不合适的值。存储特定的引信/程序设置尚不属于网关的受限补丁模式的一部分。
挂载枚举是网关拥有的对 DCS Mission Editor me_loadoututils 的只读适配器,而非正式的 DCS-SMS 动词。因此它对版本敏感,如果 Mission Editor API 更改则失败关闭,并且已针对本地安装的 DCS 构建验证,而非声称是稳定的 Eagle Dynamics 接口。
对于 AI 行为,首先为实际组和任务类型调用 get_ai_task_catalog,然后调用 describe_ai_task。EngageGroup/AttackGroup 需要数字 groupId;单位变体需要 unitId;EngageTargetsInZone 需要剧场本地 x(北)和 y(东)。使用当前语义快照中的 ID。仅任务名称不能构成有效的目标分配。
安全边界
底层 DCS-SMS 桥接在完整的 Mission Editor 环境中执行 Lua。此服务器将生成的代码限制为固定批处理分派器和 JSON/base64 序列化的 DCS-SMS 动词调用。保持本地化,不要通过未认证的网络服务暴露其 stdio,并在不需要时保持 External 执行禁用。
离线验证器和补丁报告不使用 DCS-SMS 邮箱,也不需要安装或运行 DCS。它们仅建立结构和引用完整性。它们无法证明 DCS 将加载存档、在保存时以相同方式规范化,或运行时 AI、传感器、触发器和武器按预期行为;这些仍然是显式的后续验收层。
许可证
MIT。DCS-SMS 是独立项目;其 tools/ 树为 GPLv3。
构建 Windows 发布版
发布构建器编译网关,仅将锁定的生产 npm 依赖安装到暂存区,下载官方 Node Windows 发行版并验证其发布的 SHA-256,复制精确兼容的 DCS-SMS 桥接源码和 GPL 文本,盘点 npm 许可证,写入每文件清单,并生成 ZIP 加校验和:
npm run release:windows -- -DcsSmsSource C:\path\to\dcs-sms在定制的桥接 0.32.4 源码被提交并发布之前,发布版必须从已验证的本地 DCS-SMS 工作树构建。生成的 payload/bridge/SOURCE.md 记录其基础修订以及工作树是否脏;对应的完整桥接源码位于同一包内。
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
Build, validate, and deploy multi-agent AI solutions from any AI environment.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
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/ALasek/DCS-ME-gateway'
If you have feedback or need assistance with the MCP directory API, please join our Discord server