Skip to main content
Glama
ALasek
by ALasek

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 单位数据库进行实时检查;它们是功能性的、有代表性的起点,而非精确的真实世界战斗序列。

  • 航母编组创作会实时发现超级航母授权、可用的免费/付费船体,以及来自 DCS 自身跑道类别元数据的可上舰飞机。一个事务可以单独部署航母,或以有代表性的蓝/红护航编队部署,计算甲板风,编写受支持的 TACAN/ICLS/Link 4/ACLS 动作,将飞机起飞点和可选回收航点绑定到甲板,并应用命名挂载和战斗消耗品。

  • 基本通信创作写入编组频率和规范化单位呼号。离线验证会在 AWACS/加油机编组共享频率时发出警告。

  • 缓存地形可以回答坐标/高程剖面和直线地形视距,并带有明确的净空和障碍点。建筑物和植被不在该模型范围内。

  • 混合模式创作包括确定性的 1024×1440 军用灯光玩家档案和写时复制 .miz 外部内容覆盖层。档案从固定的已保存任务中读取呼号、飞机、航线、时间、无线电、航母辅助设备、挂载、燃油、机炮和干扰弹;可选的战术散文保持为显式代理输入。航线页面使用干净的缓存 DCS 地形,禁用语义和 F10 覆盖层。覆盖层管理飞机/通用膝板、简报文本和图片,以及有界的图像/声音/Lua 资源,而无需就地编辑源任务。

  • 可恢复的瓦片缓存提取权威的 DCS 高程和地表类型,推导坡度、坡向、粗糙度和候选山脊/山谷/山口特征,并渲染干净的地形 PNG 和带注释的上下文 PNG,后续查询无需 DCS。

  • 独立可恢复的水文层默认以 50 米间隔采样 DCS 地表类型,无需重建高程、坡度或语义区域。它将每个采样打包为两位,跳过高置信度的均匀陆地和开阔海域基础瓦片,推导有界的八连通河流/湖泊组件,并单独报告保守的短间隙拼接,且可以从已验证的切片扩展到全数据集覆盖,具有稳定的瓦片 ID。

  • 每个缓存存储 DCS 创作的命名地点和固定机场元数据,包括跑道阈值/长度、停机坪包络、掩体标志和推导的停机坪集群。地点标签明确不排名,因为 DCS 的城镇源提供名称和坐标,而非重要性。

  • 有界的锚点图缓存 DCS 原生道路和铁路走廊,连接附近机场和命名地点,包括绕行、高程/坡度、端点吸附和跨水证据。实时路由仍可用于精确端点,因为缓存不是完整的道路网络导出。

  • 粗略聚落区域是缓冲的命名地点集群,具有明确的来源和推荐的图像视图边界。它们不是建筑足迹;单个结构仍是视觉地图检查任务。

  • 语义缓存还存储可查询的机场、聚落和命名地点实体,以及根据地表、高程、坡度、粗糙度和低细节证据分类的连续地形区域。区域使用紧凑的行游程并记录邻接关系,而不是假装栅格单元是真实世界的行政边界。

  • 可恢复的宏观交通图使用机场和聚落枢纽。其边是 DCS 原生道路/铁路路径,带有吸附的端点网关,因此离线查询可以选择多边区域路线,而实时 DCS 路由仍是精确首/末英里护航队几何的权威。

  • 按需地图检查将实时 ME 地图适配到请求的边界,仅捕获其地图小部件,写入带地理参考的 PNG,并恢复之前的相机。相机运动帧检查会拒绝隐藏编辑器捕获(例如,当运行任务中的 F10 视图实际在屏幕上时)。

  • 预处理自动检查缓存形状、精确共享瓦片边缘和 16 个确定性点与实时 DCS 的对应关系。同一报告可以使用 validate_map_dataset 重新运行,或禁用实时奇偶校验以进行仅离线 QA。

  • 保守的低细节检测记录其证据,并且仅在近均匀陆地通过所有阈值时存储粗略瓦片;它不会将普通平坦地形静默等同于高加索边缘占位符。

  • DCS 保存的金色夹具、离线存档/Lua/参考测试,以及隔离的实时创作测试平台,该平台编辑克隆、恢复原始文件并验证其文件哈希。

  • 实时机场规划使用 DCS 的飞机包络/类别过滤器和开放任务中的保留停机位、任务地面风、跑道标签,以及停机位到可能阈值的滑行代理。验证创建支持单机到四机编队的冷启动、热启动和跑道启动,并在构建步骤失败时移除部分构建的编组。活跃跑道策略可以将原生紧凑停机选择重新分配给已验证的首选停机位集合。

  • 预设优先的挂载创作查询已安装的 DCS 构建,获取命名飞机预设、其声明的任务兼容性、挂载和重量。补丁可以应用一个预设或进行有界的逐挂架调整;网关从不要求模型发明 CLSID 或整个挂载。战斗创作还显式检查机炮弹药;零机炮的战斗飞机会收到警告,除非该省略是有意为之。

  • 实时任务发现仅列出 DCS 为现有编组公开的航点和航路动作,任务描述在编写补丁之前提供默认值、允许值和缺失目标选择器指导。

  • 任务日期/时间和有用的天气字段在每个语义快照中可读,并可作为一次修订检查的环境操作写入。类型化航点选项包括威胁反应、ROE、雷达/ECM 使用、bingo RTB、静默以及加力/抛弃弹药禁令。

  • 基于角色的固定翼剖面和透明的启动/滑行/爬升/转场估算有助于同步编组到达。离线 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 在编组级别持久化车辆航向。因此,语义快照对车辆编组中的每个单位使用领队车辆的航向。尝试仅给非领队车辆不同的持久航向将无法通过后置条件验证,而不是在重新打开后静默漂移。

Related MCP server: DCS Lua Runner MCP Server

要求

  • Windows 版本包含自己的 Node.js 运行时。源码开发需要 Node.js 20.17 或更新版本。

  • 仅实时编辑器工具需要 Windows、DCS World 和 DCS-SMS ME 模组。

  • 任务编辑器需打开并启用 DCS-SMS -> External execution 以进行变更。

  • inspect_map_view 额外要求任务编辑器地图在非最小化窗口中打开。DCS 可以保持未聚焦或被覆盖;网关直接捕获其应用程序窗口,从不将其置于前台,也不会静默回退到遮挡敏感的显示器捕获。

地图提取需要输入 terrain info、terrain sample-grid 和 terrain list-places、terrain nearest-transport、terrain transport-path、 airbase plan-start 和 airbase create-start 这些动词,它们位于随附的 DCS-SMS ME 模块 0.32.4 工作树中。

安装 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 桌面版是独立注册的。 其他客户端可以使用相同的 stdio 命令和来自 generic 文件的环境。 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-me MCP 条目,并将该 条目固定到选定的 Saved Games 实例。

在 MCP 启动时,网关会检查 GitHub 的最新稳定版端点,并带有 2.5 秒超时和六小时的本地缓存。当有更新的语义化版本 可用时,其 MCP 指令会告诉代理询问用户是否要 更新。该检查绝不会安装任何内容。在明确批准后,请关闭 DCS 以及所有使用该网关的 MCP 客户端,然后运行:

powershell -NoProfile -ExecutionPolicy Bypass -File `
  "$env:LOCALAPPDATA\DcsMeGateway\update.ps1"

更新程序在修改前会再次询问,仅下载带版本号的 Windows 版本,验证其单独发布的 SHA-256,并调用正常的 备份保护安装程序。设置 DCS_ME_GATEWAY_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 的补丁必须提供相应的 {"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.js

MCP 主机应将命令和路径配置为名为 dcs-me 的 stdio 服务器。诊断信息输出到 stderr;stdout 仅用于 MCP 帧。

配置

环境变量

默认值

含义

DCS_ME_GATEWAY_SAVED_GAMES

自动检测

显式指定 DCS Saved Games 实例根目录

DCS_SMS_SAVED_GAMES

自动检测

兼容的 DCS-SMS 替代项;同样被接受

DCS_ME_GATEWAY_STATE

<DCS_SAVED_GAMES>\dcs-me-gateway

绑定和幂等性状态

DCS_ME_GATEWAY_MAP_CACHE

<DCS_ME_GATEWAY_STATE>\maps

持久化的地形瓦片数据集和预览

DCS_ME_GATEWAY_MAP_REGISTRY_FILE

packaged\registry.json

随附的地图包注册表及远程注册表指针

DCS_ME_GATEWAY_MAP_REGISTRY_URL

注册表指针或无

显式指定的 HTTPS 地图包注册表替代项

DCS_ME_GATEWAY_TIMEOUT_MS

60000

实时烟雾默认超时时间

DCS_ME_GATEWAY_POLL_MS

100

邮箱轮询间隔

DCS_ME_VIEWER_PORT

4317

仅限本机的语义地图查看器端口

在没有替代项的情况下,网关会读取 DCS-SMS 的 saved_games 配置值, 然后选择具有最新 ME 心跳的 DCS、DCS.openbeta 或 DCS.server 实例。当 Windows Saved Games 已被 移动且 DCS-SMS 未记录该路径时,请设置 DCS_SMS_SAVED_GAMES。

MCP 工具

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.0

render_mission_documents 对于相同的已保存任务、地形缓存、样式版本、所选编组和提供的说明文本而言是确定性的。默认情况下,它会选择玩家/客户端航班。它会生成一个清单和可直接传递的 kneeboard_images 条目,但不会修改任务。DCS 膝板文件夹可以针对所有飞机或特定飞机类型;它无法区分使用相同飞机类型的两个航班,因此当需要按航班区分时,请合并这些说明或使用简报页面。任务卡标识飞机类型,但不暗示每航班的挂载数量。通信/挂载页面使用规范的、人类可读的存储名称、以磅为单位的燃油量以及以百分比表示的火炮弹药量;它从不显示内部 CLSID。如果已保存的任务有挂载但没有可读的预设名称,请使用 include_stations=true 调用 get_aircraft_loadouts,并将其 DCS 编写的显示名称传递给 flight_notes.loadout_summary。在提供这些名称之前,渲染会发出显式警告。航路点表在航线确实按计划调度时使用经过验证的已保存航线 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 和生成的配置的 Mission Start 触发器。生成的 .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 关闭的情况下重用这些瓦片。精细的重新运行可能合理地保持不确定状态;响应会报告分辨率限制,并在可能的情况下报告更小的下一个间距,而不是编造 clear/blocked 的答案。这适用于雷达/SAM 部署和航线遮蔽,但不适用于建筑物或树木重要的最终可见性声明。

地形瓦片完成后,语义预处理会派生 2 公里分类栅格,平滑孤立的非水域单元,并将每个四连通分量转换为具有统计信息、邻接关系和行游程几何形状的紧凑地形区域。空军基地和居民点集群成为图中心。道路候选包括 80 公里内的最多四个邻居,并具有有界的连通性修复;铁路候选包括 120 公里内的最多两个邻居。DCS 铁路路由被视为候选证据,因为其地形网络选择器可能返回不相关的线性要素。缓存的铁路走廊必须与两个锚点都对齐在 1.5 公里以内,并且其路由长度必须至少覆盖它们直接距离的一半;较弱的结果仍作为失败的候选者进行检查,而不是作为铁路暴露给代理。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-256 和来源/时代出处存储在 semantics.json 中,因此编辑目录会使缓存的居民点和交通语义失效并重建,而无需重建高程瓦片。有关有意简化的清理格式,请参阅 maps/settlements/README.md。

query_map_context 可以使用边界、semantic_search 或两者来调用。语义搜索可以过滤地形类别、最小区域面积、与实体的接近度、实体种类/名称以及近似道路可达性,而无需加载地形瓦片或要求 DCS。inspect_map_view 是补充的细节路径:它不缓存每个建筑物或道路标记,而是以请求的比例返回当前 ME 渲染,并带有仿射像素到场景变换。它会临时写入 ME 地图相机,针对其他网关变更进行序列化,并且即使捕获或可见性验证失败也会恢复先前的相机。它会解析确切的 DCS 窗口句柄,并在 DCS 最小化或独占全屏 Alt-Tab 已移除其可捕获表面时,以窗口几何和恢复详细信息失败。无边框/窗口化 DCS 可能会在检查期间停留在 MCP 客户端后面。如果空军基地、居民点集群和原始 DCS 地点共享一个名称,请使用返回的实体 ID 或 kind:name 选择器,例如 settlement:Batumi 或 airbase:Batumi;不明确的裸名称将失败,而不是静默选择一个。

在开发期间使用 npm run viewer 运行本地分层缓存查看器,或在 npm run build 之后使用 npm run viewer:start,然后打开 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 米的分辨率对 north=-370000..-330000、east=610000..670000 进行采样,在每个瓦片后持久化进度,并且可以安全地重新运行。仅在有意的刷新已缓存瓦片时添加 -- --force。它不处理整个地图。

水文细化

250 米地形缓存特意不被视为权威的河流几何形状:狭窄的河流可能落在网格点之间并显示为稀疏的蓝点。preprocess_hydrology_layer 将单独的 hydrology/ 缓存附加到现有的已完成数据集。其默认的 50 米网格仅为每个样本存储一个紧凑的两位表面代码;高程和地形导数保持在其基础分辨率。已被证明是均匀占位陆地或公海的基础瓦片将从规划中省略,而对详细和混合沿海瓦片进行采样。

从代表性的边界开始,并重复相同的调用,直到 completeForBounds=true。之后省略 bounds 以在所有详细的基础瓦片上扩展同一层。tile_batch_limit 限制每次调用的边界,max_tiles 只是一个刻意的安全上限。更改的间距、瓦片大小、场景或 DCS 地形签名将失败关闭;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 记录其基础修订以及工作树是否脏;完整的对应桥接源代码位于同一包内。

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to interact with DCS World in real-time through chat by executing Lua scripts and providing tools for mission info, unit management, coordinate conversion, and more.
    10
    8
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to read and control Command: Modern Operations scenarios locally via MCP tools, supporting real-time battle assessment, task planning, and scenario editing.
    7
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to drive the Unity Editor directly over HTTP, including scene and asset editing, diagnostics, play mode control, code execution, input simulation, and builds, with no separate MCP server process.
    334
    MIT