kerbal-space-program-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@kerbal-space-program-mcpBuild a rocket in VAB with a Mk1 pod, fuel tanks, and a Swivel engine, then validate it."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Kerbal Space Program MCP
这是一个面向 Kerbal Space Program 1.x 的完整 MCP 接入工程。它由两部分组成:
ksp-plugin/:安装到 KSPGameData后运行在游戏内部的 C# 插件。插件在 Unity 主线程执行编辑器和飞行操作,并在本机回环地址提供 HTTP 桥接。server/:标准输入输出(stdio)MCP 服务端。MCP 客户端只需要启动它,它会把工具调用转发给游戏插件。
建造链路支持从空白编辑器开始创建火箭,也支持一次性提交完整的部件树;粒度较细的工具可以继续增删零件、移动/旋转、重新连接、设置阶段和动作组。飞行链路支持发射后的状态读取、油门和姿态控制、SAS/RCS、分级、时间加速、单部件动作、紧急中止和回收。
0.4.9 是 AI-first、无视觉依赖的版本:AI 通过 MCP 工具完成编辑器建造、规则校验、发射确认、游戏内分级、油门/姿态闭环、轨道节点燃烧和月球软着陆;人不需要点击 KSP 界面,只有在用户明确要求时才作为可选安全接管者。新增了发动机字段跨 KSP 版本兼容、自动点火保持窗口、直接节流刷新、明确的离地高度(AGL)遥测、远点事件边界处理、使用轨道惯性速度的可靠减轨方向、受控下降速度、包含水平速度的停止距离、对准闸门、低速径向下降和锁存动力制动窗口,以及指导器运行期间只允许实时物理帧的时间加速安全上限。0.4.9 进一步修复了低速垂直下降交接的状态滞回、落地后的自动分级锁定,以及 SAS 不可接合时错误吞掉 MCP 自有姿态回退的问题;原生自动驾驶只有在遥测确认实际启用且模式匹配时才接管,否则由 MCP 的 PD 闭环继续控制。默认建造速度为每个 Unity 帧 4 个部件,fast 可提高到 16,visible 可降到 1;/api/v1/telemetry 直接读取线程安全缓存,ksp_wait_for_event 使用桥内短暂条件等待。无视觉模型可以只依赖状态、事件游标、阶段报告、发动机/资源摘要和轨道数据完成闭环决策。此版本还提供月球软着陆规划/执行接口和可扩展的空间站核心蓝图。
当前目标平台是 KSP 1.12.x(KSP 1.x 的 Assembly-CSharp.dll API)。KSP 2 使用另一套 API,不能直接使用这个插件。
目录
server/ Python MCP stdio 服务端(仅使用标准库)
tests/ 不需要启动 KSP 的协议和数据模型测试
ksp-plugin/src/ KSP 游戏侧 C# 插件源码
ksp-plugin/GameData/ 可直接复制到 KSP 根目录的插件目录和配置
examples/ MCP 客户端配置示例
outputs/ 本机生成的发布 ZIP 和 SHA-256 校验文件(不提交源码仓库)Related MCP server: Computer Control MCP
安装
1. 安装游戏插件
在 KSP 根目录执行:
Copy-Item -Recurse -Force .\ksp-plugin\GameData\KspMcp .\GameData\KspMcp如果要从发布包安装,可以先正常退出 KSP,然后运行包根目录的安装脚本:
powershell -ExecutionPolicy Bypass -File .\install.ps1 -KspRoot 'D:\Games\Kerbal Space Program'脚本会拒绝在 KSP 仍运行时覆盖 DLL,避免游戏继续使用旧版本插件。开发者如果还没有 DLL,需要先设置 KSP 根目录并编译:
$env:KSP_ROOT = 'D:\Games\Kerbal Space Program'
powershell -ExecutionPolicy Bypass -File .\ksp-plugin\build.ps1构建脚本会引用游戏自己的 KSP_x64_Data\Managed\Assembly-CSharp.dll 和 Unity 程序集,把 DLL 输出到 ksp-plugin\GameData\KspMcp\Plugins\KspMcpBridge.dll。如果 KSP 使用的是 32 位目录,脚本会自动寻找 KSP_Data\Managed。
启动游戏后,插件会在 127.0.0.1:8765 监听。可以先用下面的命令检查桥接是否起来:
Invoke-RestMethod http://127.0.0.1:8765/api/v1/status | ConvertTo-Json -Depth 8如果要改端口或加令牌,编辑:
GameData/KspMcp/PluginData/config.cfg然后让 MCP 服务端使用同一个 KSP_MCP_URL 和 KSP_MCP_TOKEN。
2. 启动 MCP 服务端
服务端只依赖 Python 3.10+ 标准库:
$env:KSP_MCP_URL = 'http://127.0.0.1:8765'
python -m server如果 MCP 客户端从其他工作目录启动,请把项目绝对路径放入 PYTHONPATH,或者在配置里把 cwd 设置为本项目根目录。也可以在 PowerShell 中直接运行发布包里的 .\start-server.ps1,它会自动设置项目根目录和 PYTHONPATH。示例配置见 examples/mcp.json。
在另一台设备上运行
优先下载 GitHub Release 中的 ksp-mcp-0.4.9.zip 和对应的 .sha256 文件。解压到任意没有中文或空格要求的目录,先关闭 KSP,再运行:
Get-FileHash .\ksp-mcp-0.4.9.zip -Algorithm SHA256
powershell -ExecutionPolicy Bypass -File .\install.ps1 -KspRoot 'D:\Games\Kerbal Space Program'
.\start-server.ps1另一台设备只需要安装 KSP 1.12.x、Python 3.10+ 和一个支持 stdio MCP 的客户端;不需要 Visual Studio、Unity、KSP 源码或额外 Python 包。发布 ZIP 已经包含可运行的游戏插件 DLL;只有开发者要重新编译插件时,才需要在该设备上运行 ksp-plugin\build.ps1,因为编译必须引用那台设备自己的 KSP/Unity 程序集。把 examples\mcp.json 的 cwd 改成解压目录即可。
推荐的建造流程
对模型来说,最稳定的操作顺序是:
调用
ksp_status确认已经进入 VAB/SPH。调用
ksp_parts_list查看当前游戏实例实际加载的零件名称和连接节点。调用
ksp_editor_new清空编辑器。用
ksp_editor_apply_craft提交完整部件树。MCP 默认使用分帧 live 模式,立即返回job_id,默认每个 Unity 帧生成 4 个部件;需要逐件展示时传parts_per_frame=1,需要更快完成时可以提高到 16。每个部件会通过editor.build.part_added事件进入实时事件游标。用
ksp_editor_job_status读取completed/total,并把最近的event_cursor交给ksp_wait_for_event;事件一到就用ksp_realtime_state读取增量事件和当前部件数,直到任务进入completed。调用
ksp_editor_analyze读取真实零件质量、推力、TWR、近似 Δv、质心/推力中心和分级风险。用
ksp_editor_validate检查控制核心、发动机、连接关系、阶段和成本,再用ksp_editor_save保存.craft文件。用户明确允许后,才调用
ksp_editor_launch。
如果必须兼容旧的同步调用方,可以传 wait_for_completion=true;对于模型调用,推荐保留默认 live 模式,并通过事件游标观察过程。
VAB 中插件会把生成的根零件自动放到安全高度(默认 y=50),避免高大的火箭穿过编辑器地板。ksp_editor_load 是异步的;插件会等待 KSP 的部件树稳定后再恢复保存的阶段号并重新检查根部位置。调用方仍应在加载后再次调用 ksp_editor_get_craft 和 ksp_editor_validate,确认部件数量、发动机和连接关系。
无视觉实时状态
ksp_realtime_state 返回缓存的紧凑状态,避免每次读取都序列化完整部件树。它包含场景、建造任务、当前飞船、位置/速度、绝对海拔、地形海拔、明确的 height_agl(离当地地形高度)、垂直速度、质量、级号、姿态、轨道根数和 MCP 控制租约;events 使用单调递增的 event_cursor,模型可以把上次游标传入 since,只接收增量事件。无视觉模型进行着陆、齿轮和制动判断时必须使用 height_agl,不能把 altitude 当作离地高度。
ksp_wait_for_event 是低延迟的事件等待接口:模型传入上一次的 since 游标,MCP 通过 wait_ms 把等待交给游戏桥的后台 HTTP 监听线程;收到部件生成、点火、分级、升空、远点、近点或着陆事件后立即返回,没有事件才会在有界超时后返回。它不会阻塞 KSP Unity 主线程,也不会让 MCP 进程以固定间隔制造大量 HTTP 请求,适合在实时飞行控制循环中替代较长的固定时间 ksp_watch。需要显式控制等待时,ksp_realtime_state 也支持 wait_ms(0–1000)。
ksp_watch 会在一个有界时间段内连续采样这些状态,适合无视觉模型观察“部件逐个出现、加载稳定、发射、点火、分级、远点/近点变化和着陆”。为避免一次 MCP 响应积累几千个样本拖慢模型,ksp_watch 默认最多返回 120 个样本,也可传 max_samples(1–240)调整;event_limit 默认 256,用于覆盖高速分帧建造的一整个轮询窗口。遥测还会返回 oldest_event_cursor、events_lost、events_truncated 和 next_since;当一个响应装不下所有事件时,客户端必须沿 next_since 继续,而不是直接跳到生产者的 event_cursor。ksp_batch 把多个安全命令放在一次 HTTP 往返里;发射、Abort 和回收仍必须使用各自的确认工具,不能隐藏在批处理中。
ksp_realtime_state 的摘要是轻量的:编辑器只返回当前部件数、任务进度和事件;飞行侧返回位置/速度、轨道根数、阶段、指导阶段、发动机点火/故障汇总和资源总量,不遍历完整部件树。默认遥测间隔为 50 ms,可在 GameData/KspMcp/PluginData/config.cfg 用 telemetryIntervalMs 调整(25–1000);要检查连接节点、模块、资源和详细验证结果时再调用 ksp_editor_get_craft、ksp_editor_validate 或 ksp_editor_analyze。如果需要排查游戏侧问题,可以临时设置 verboseLogging = true,正常使用应保持 false。
AI-only 无视觉控制协议
下面的协议是给没有截图/多模态能力的模型使用的;每一步都以 MCP 返回的状态或事件为准,不依赖 KSP 界面文字,也不把“命令已接受”当成“游戏动作已完成”:
建造前调用
ksp_status、ksp_parts_list,然后用ksp_editor_new和ksp_editor_apply_craft。持续使用ksp_editor_job_status、ksp_wait_for_event、ksp_realtime_state,直到任务状态是completed,部件计数稳定,且editor.build.completed已出现。发射前同时调用
ksp_editor_validate和ksp_editor_analyze。至少确认valid=true、存在ModuleCommand、每个需要工作的发动机级有推进剂和正 TWR;只有用户授权后调用ksp_editor_launch(confirm=true)。场景进入
FLIGHT后先读取ksp_flight_state,确认commandable=true、situation和body,再调用ksp_flight_guidance_start(confirm=true)。指导器会在游戏帧内自己刷新控制,不需要模型每一帧发送杆量。指导运行期间只使用
ksp_flight_warp(rate_index=0);任何时间加速都会被桥拒绝,因为 KSP 可能在加速时推进轨道而跳过可靠的飞控回调、点火、分级、远点或触地事件。每次收到flight.ignition.hold_started、flight.engine.state.changed、flight.stage.changed、flight.apoapsis.reached或flight.periapsis.reached,都用ksp_realtime_state读取新摘要并沿next_since继续。判断自动点火成功时,必须同时看到
engine_summary.ignited>0或详细发动机ignited=true、requested_throttle>0、推进剂数量下降;只有flight.ignition.automatic不能单独证明发动机已经工作。判断软着陆成功时,必须收到
flight.touchdown,并再次读取situation=LANDED或用户允许的SPLASHED、height_agl接近 0、surface_speed和vertical_speed在安全范围。任务超时、燃料耗尽、commandability_lost、vessel_lost或flameout都是失败状态,模型应先停止指导并报告原因。事件缓冲出现
events_lost/resync_required时,立即用当前摘要重新同步,不得猜测中间动作;events_truncated=true时沿next_since继续,不得直接跳到event_cursor。
示例观察循环:
ksp_editor_apply_craft(...)
-> ksp_editor_job_status(job_id)
-> ksp_wait_for_event(since=event_cursor)
-> ksp_realtime_state(since=event_cursor)
-> ksp_editor_analyze()
-> ksp_editor_validate()星际转移与原生轨道节点
飞行工具现在可以直接读取 KSP 当前星体和 patched-conic 数据:
ksp_flight_bodies返回半径、引力参数、大气高度、影响球和星体轨道;ksp_flight_transfer_plan使用当前飞船所在星体和目标星体,计算透明的圆轨道、共面 Hohmann 转移估算,返回出发相位角、转移时间、出发/捕获 Δv 和警告;如果 KSP 提供轨道历元和平均运动,还会返回当前目标领先角与相位误差,避免只拿理论窗口直接点火;ksp_flight_maneuver_nodes读取游戏原生节点;ksp_flight_add_maneuver_node在明确confirm=true后创建节点;ksp_flight_clear_maneuver_nodes在明确confirm=true后清除节点。ksp_flight_maneuver_burn_start在明确confirm=true后按原生节点执行一个有限燃烧控制计划,实时报告coast_to_node_burn、aligning_for_node_burn、burning_node和burn_complete阶段。
例如,模型可以先调用 ksp_flight_transfer_plan(destination_body="Duna"),核对相位角和推进剂余量,再根据用户确认调用节点工具,最后调用 ksp_flight_maneuver_burn_start。节点的 Δv 坐标使用 KSP 原生约定:radial 为径向外侧正、normal 为法向正、prograde 为顺行正,单位是 m/s。燃烧控制会根据节点 Δv、实时质量和可用推力估算对称点火时刻,并在游戏帧内对准燃烧向量;它仍然需要实时监控,不会把近似的有限燃烧误报成任务保证。规划器明确忽略了非共面修正、发射/转向损失、大气阻力、真实相位误差和目标星体地形。
ksp_flight_guidance_start(profile="orbit") 会先完成上升,在远点等待并抬升近点,或在近点执行降轨修正,直到目标远点/近点容差内;profile="landing" 会先尝试把正近点降到与星体相交,再使用相对地表速度、制动距离和局部重力控制下降。指导器属于游戏侧闭环,模型只需按事件协议监督,不需要逐帧发送控制量;它会拒绝指导期间的时间加速,在远点跨周期后仍能进入减轨燃烧,并在发动机自动分级后保持正油门直到遥测确认点火。
月球软着陆与空间站核心
月球能力拆成“规划”和“执行”两个明确步骤,适合没有视觉输入的模型:
ksp_moon_landing_plan读取当前flight.state和flight.bodies,对当前星体到目标卫星(默认 Mun)给出透明的转移估算、停车轨道、捕获和下降参数。它是只读规划器,不会自动点火、创建节点或改变飞船。当飞船已经处于目标月球附近并且用户允许执行时,调用
ksp_flight_moon_soft_landing_start(confirm=true)。它启动游戏侧landing指导,并通过ksp_wait_for_event/ksp_realtime_state返回阶段、绝对海拔、height_agl、速度、油门、分级和着陆事件;无视觉模型可以完全依赖这些数据监督执行,ksp_flight_guidance_stop只作为失败/接管时的安全出口。转移窗口、捕获和地形避障仍应由模型逐段核对,不能把规划估算当作任务成功保证。ksp_station_build在真实 VAB 中生成一个连通的 10 部件空间站核心:探测器控制核心、stationHub、四个侧向对接口、服务燃料箱、电池、乘员舱和轴向对接口。核心故意保留对接口,便于人或后续 MCP 调用继续添加太阳能板、实验舱、推进模块和更多对接段;示例文件是examples/space_station_core.json。
分级和游戏规则检查
ksp_editor_validate 不只检查“有没有一个控制舱”,还会返回 summary.stage_summary,逐级列出部件数、发动机数、控制模块数和分离器数。当前规则是:
有效飞行器至少要有一个可控制的
ModuleCommand(例如 Mk1 指令舱);每个油箱、适配器和发动机不需要各自安装控制舱。每个在分离后仍要继续工作的级,必须在同一分级链中有发动机和相容的推进剂;否则验证器会报错。
stage 0可以作为最终载荷/分离动作,因此允许没有发动机;但stage > 0如果含有分离器却没有后续发动机,会被拒绝。KSP 原生对舱体、适配器和油箱等被动零件使用
inverseStage=-1是正常状态,不会被误判成非法分级;真正带发动机或分离动作的零件仍必须有有效阶段号。
大型火箭可以从 examples/duna_interplanetary.json 开始:它包含显式 probeCoreOcto2.v2 控制源、化学助推级、核热转移级、末端着陆推进级和有效分离链。安装 0.4.9 后应先通过 ksp_editor_validate、ksp_editor_analyze、ksp_wait_for_event 和 ksp_realtime_state 做游戏内烟测。本机已经验证该蓝图可以被 MCP 分帧构建、校验、保存并重新加载为 28 个部件;飞行指导负责可观测的点火、分级和基础姿态/轨道闭环,AI 应按事件协议逐段执行上升、转移、捕获、再入和着陆,并在任何失败状态自动停机/回收,而不是依赖人一直盯着画面。
完整部件格式如下:
{
"name": "MCP Test Rocket",
"description": "Built by MCP",
"editor_mode": "VAB",
"parts": [
{
"id": "pod",
"part": "mk1pod.v2",
"position": [0, 0, 0],
"rotation": [0, 0, 0, 1],
"stage": 0
},
{
"id": "tank",
"part": "fuelTankSmall",
"parent_id": "pod",
"parent_attach_node": "bottom",
"attach_node": "top",
"snap_to_node": true,
"stage": 1
}
]
}position 是 KSP 世界坐标,rotation 是 Unity 四元数 [x, y, z, w]。部件树中的 parent_attach_node 和 attach_node 必须是实际零件配置里的节点名称;先调用 ksp_parts_list 可以直接查看它们。默认 snap_to_node=true,插件会把子零件的节点对齐到父零件节点;要保留自定义的世界坐标/姿态时才设为 false。对于表面连接,仍然使用同一字段,只需选择对应的 srfAttach 节点。一个可直接提交的三件套火箭见 examples/minimal_rocket.json。
结构和性能分析
ksp_editor_analyze 不猜测零件名称,而是读取当前 KSP 实例的实际 Part、资源密度、发动机大气曲线和分级。它会返回:
总质量、推进剂质量、发动机总推力、海平面/真空 TWR、加权 Isp;
按
inverseStage分组的发动机、质量、剩余质量、TWR 和近似 Δv;质心、推力中心和“质心是否位于推力中心上方”的几何检查;
不能起飞、可能严重下沉或容易翻滚等错误/警告。
Δv 是工程估算,不是完整的飞行仿真:它明确排除了阻力、转向损失、节流曲线、跨级供料变化和大气变化。真正发射前仍要同时通过 ksp_editor_analyze 和 ksp_editor_validate,并用遥测观察实际 TWR、垂直速度、燃料和级号。
实时飞行指导(AI-only,无视觉依赖)
新增的 ksp_flight_guidance_start 在游戏帧内运行闭环指导,支持 ascent、orbit、landing 和 node_burn 四种 profile;ksp_flight_guidance_stop 立即释放控制,ksp_flight_guidance_status 返回当前阶段、目标、控制输出、点火保持、减轨状态和剩余时间。启动必须传 confirm=true,默认允许自动分级,但不会绕过发射工具的确认门槛。运行指导器不需要截图或手动点击。
当前指导器的职责是提供可观测、可停止的游戏侧闭环:上升阶段按海拔执行重力转弯并以目标远点收油,轨道阶段按远点/近点和原生轨道遥测执行圆化修正,节点燃烧阶段根据原生节点向量进行对准和有限燃烧,着陆阶段先把正近点降到与星体相交,再按相对地表反向速度、height_agl、制动距离和垂直速度控制下降。自动分级会兼容不同 KSP 版本的点火字段,并在确认发动机点火前保持油门。它不是全任务级别的“保证成功”黑盒;去 Duna 的转移窗口精确求解、跨影响球捕获、再入热/气动控制和地形避障仍需要模型逐段规划。模型应持续调用 ksp_realtime_state,发现燃料、姿态、命令能力或垂直速度异常时先停止指导或 Abort;默认不要求人操作画面。
推荐把飞行控制当作“状态驱动的 AI 任务执行器”,而不是需要人盯屏的黑盒:MCP 负责状态读取、点火/分级时机、有限燃烧、时间加速约束和事件记录;模型负责按成功/失败条件推进任务。ksp_flight_set_controls 不能和指导器同时抢控制权;只有要人工接管时才先调用 ksp_flight_guidance_stop,接管后仍可用 ksp_realtime_state 观察结果。
重要边界
游戏侧操作严格在 KSP 主线程执行,HTTP 线程只负责接收请求,避免从后台线程触碰 Unity 对象。
默认只监听回环地址,不把游戏控制端口暴露到局域网。
ksp_editor_launch要求confirm: true,并且会同时通过游戏规则验证和估算的起飞 TWR/质心-推力几何预检,防止模型把无控制舱、无推进剂、无法离地或容易翻滚的火箭送入飞行。ksp_flight_guidance_start要求confirm: true;ksp_flight_set_controls与指导器互斥,避免两个控制回路互相抢杆。工具不会替模型猜测不存在的零件名称;零件名、节点名和已解锁状态来自当前运行的游戏实例。
更新
GameData/KspMcp/Plugins/KspMcpBridge.dll后必须重启 KSP,已经运行的 Unity 进程不会热加载新 DLL。本地没有 KSP 安装时,可以运行全部 Python 协议/模型测试,但无法验证 Unity 行为;发布包中的 DLL 可以直接安装,若要重新编译则必须在安装了同版本 KSP 的机器上完成。
验证
python -m unittest discover -s tests -v
python -m server --self-test--self-test 只检查 MCP 初始化、工具列表和参数路由,不要求 KSP 在线。
API 依据
插件使用 KSP 1.x 的 EditorLogic、ShipConstruct、Part、AttachNode、Vessel 和 FlightCtrlState 接口。火箭设计和轨道流程参考 KSP 官方 KSPedia 手册;控制器的“导航/制导/控制分层”和上升/着陆状态机参考 NASA 的 Guidance, Navigation & Control 以及 Rocket Control。KSP API 的公开文档可参考 KSPDocsSite 以及 XML Documentation for the KSP API。
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
MCP server for aerospace calculations: orbital mechanics, ephemeris, DSN operations, ...
SpaceX MCP — wraps SpaceX API v4 (free, no auth)
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Launches MCP — wraps Launch Library 2 API (ll.thespacedevs.com, free, no auth)
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables Large Language Models or other MCP clients to interact with Ansys/AGI STK (Systems Tool Kit), allowing users to control STK Desktop simulations programmatically or via natural language.42-
- AlicenseNot gradedqualityBmaintenanceMCP server that provides computer control capabilities including mouse movements, keyboard actions, screenshot capture with OCR, and window management through a unified API.165MIT
- FlicenseCqualityDmaintenanceThis MCP server enables AI agents to control kOS computers in Kerbal Space Program, providing tools for scripting, telemetry, and simulation management via telnet and file system integration.100-
- AlicenseAqualityBmaintenanceEnables MCP clients like Claude to read live state and control aircraft in Microsoft Flight Simulator 2024 via SimConnect, FSUIPC7, and raw memory, offering 23 tools for simvars, events, autopilot, and more.23MIT