GeePT MCP——Kerbal任务指挥协议
引言
“电脑,把我送到轨道!”
- a克尔巴尔的遗言
你一直梦想着让一个特工自主控制你的宇宙飞船?不再需要像轨道插入或会合这样无聊的标准机动飞行了吗?让AI来做吧!
这 GeePT MCP(Kerbal任务指挥协议) 将Kerbal太空计划转变为人工智能代理和人类操作员的远程控制游乐场。通过组合 kRPC 借助一套丰富的任务工具,它可以让你的LLM:
- 在您的实时KSP游戏中编写和执行kRPC Python脚本,有效地控制您的飞行\*。
- 检查你的船的蓝图、零件树、舞台和引擎,以了解你正在飞行的是哪种弯曲的鸟。
- 方便地从KSP Wiki以及官方kRPC文档和kRPC社区代码片段中搜索和检索页面,以获取最佳实践。
- 访问剧本和指南,教特工如何阅读蓝图和计划安全的分期和烧伤。
\*无法保证飞行成功
快速启动
- 安装依赖项
这个项目需要Python 3.10+和 紫外线 用于运行脚本和管理依赖关系。
# Clone the repository
git clone https://github.com/G4ertner/geept_mcp.git
cd geept_mcp
# Use uv to run the MCP server
curl -LsSf https://astral.sh/uv/install.sh | sh # install uv
uv pip install -e .[krpc] # install dependencies with krpc extras- 启动MCP服务器
在一个终端中,启动Kerbal Space Program并启用kRPC服务器(TCP上的Protobuf)。请注意kRPC窗口中显示的地址和端口。在另一个终端中,运行:
# from the repo root
uv run -m mcp_server.main服务器将通过stdio监听传入请求(用于Codex集成),并处理脚本执行和工具调用。
- 在Codex CLI注册(可选)
如果你使用 Codex CLI,添加MCP服务器,以便按需启动:
codex mcp add geept_mcp -- uv run -m mcp_server.main --transport stdio --with krpc - 连接到您的游戏
当调用与游戏交互的工具(执行脚本、获取蓝图等)时,请提供正在运行的KSP实例的地址和端口。例如:
Use krpc_docs to execute_script with code "print('hello'); print('SUMMARY: done')" and address "192.168.1.10" rpc_port 50000 stream_port 50001数据构建器(kRPC文档和代码段库)
运行时MCP服务器现在与以下两个独立的构建器项目一起存在 krpc_MCP_data_builders/:
krpc_docs/包含爬虫(scripts/scrape_krpc_docs.py)并搜索CLI以重新生成data/krpc_python_docs.jsonl.安装pip install -e .[scrape]在该文件夹中,运行提供的控制台脚本。将得到的JSONL复制回./data/刷新数据集时。
每个建设者都有自己的 pyproject.toml、README和复制的辅助模块,以便在将其移动到单独的存储库之前可以独立运行。
MCP服务器布局
mcp_server/main.py-连接FastMCP服务器并导入所有工具/资源表面。mcp_server/executor_tools/-execute_script实现、后台作业和工件助手(通过mcp_server/executor_tools.py).mcp_server/libraries/+mcp_server/libraries.py-kRPC文档搜索、KSP wiki访问和带有公共MCP入口点的代码片段工具。mcp_server/general_tools.py-按类别分组的工具入口点;实施在mcp_server/general_tools_impl/.mcp_server/playbooks/+mcp_server/playbooks.py-降价剧本是MCP的资源。mcp_server/utils/-共享助手(krpc_utils,helper_utils,physics_utils等等)跨服务器包使用。
工具运行时行为(超时)
- 同步工具现在在具有60秒硬上限的工作线程中运行事件循环,以避免在kRPC挂起时冻结服务器。
- 长期工作的新手(
start_part_tree_job,start_stage_plan_job,start_execute_script_job)以及execute_script豁免;他们依靠自己的监督者。 - 如果一个工具可能超过60秒(例如,零件树/阶段计划),则更喜欢start\_\*作业变体来流式传输日志并保持响应。
核心能力
🛰️ 实时脚本执行
这 execute_script 该工具允许您的LLM针对您正在运行的游戏运行kRPC Python代码。通过预先设置,您无需担心LLM会成功连接到您的游戏。MCP服务器自动注入有用的全局变量:
conn:您的实时kRPC连接vessel:活动血管(或None如果你不在飞机上)time,math,sleep,deadline和check_time()助手- 预配置的
logging模块和alog(msg)便利功能 - 成功执行或灾难性故障后飞行变量的状态摘要
此外,游戏将在执行每个脚本后自动暂停,确保在LLM继续规划下一步的过程中不会发生任何意外。对于需要超过~60的烧伤 监督、使用 start_execute_script_job 相反:它将stdout/stderr流式传输到 get_job_status,允许您将这些民意调查与 get_status_overview/get_flight_snapshot,并且可以通过以下方式立即中止 cancel_job(job_id) 如果遥测技术出现偏差。如果火箭在作业运行时解体或恢复,跑步者现在会注意到丢失的 active_vessel,立即中止,然后返回 ok=false 所以你可以把这次撞车当作一次失败,而不是永远旋转。
🛠️ 船舶蓝图和图表
需要你的法学硕士来检查你的飞船吗?蓝图工具揭示了:
get_vessel_blueprint:返回一个包含元数据、阶段、引擎和部件的JSON蓝图。get_part_tree:返回具有父/子关系、模块和资源的所有部分的分层列表。get_blueprint_ascii:生成容器的LLM可读的各阶段摘要。get_stage_plan:提供类似股票的阶段计划(推力、Isp、Δv)。get_staging_info:每个阶段的回报Δv/TWR估计值。export_blueprint_diagram:生成船舶分段和结构的图表(SVG或PNG)。
这些工具让你的LLM了解飞船的结构、计划分段和燃料使用情况,以生成特定于飞船的飞行计划和任务剖面
📚 KSP Wiki、kRPC文档搜索和社区示例片段搜索
MCP服务器包装MediaWiki API和本地索引的kRPC文档。工具包括:
search_ksp_wiki(query, limit),get_ksp_wiki_page(title, max_chars)和get_ksp_wiki_section(title, heading, max_chars)用于查找游戏概念(例如delta‑v、机动节点、ISRU)。非常适合需要领域知识的代理。search_krpc_docs(query, k)和get_krpc_doc(url, max_chars)用于在不离开聊天的情况下搜索和检索kRPC Python API引用。snippets_search,snippets_get,snippets_resolve,以及snippets_search_and_resolve允许您的LLM从11个最流行的kRPC公共仓库中获取kRPC代码的最佳示例。
📖 剧本和指南
该服务器附带了几个剧本,让你的法学硕士在如何使用MCP的工具和执行常见操作方面有一个初步的了解:
get_maneuver_node_playbook-(resource://playbooks/maneuver-node) get_blueprint_usage_playbook-(resource://playbooks/vessel-blueprint-usage) get_light_control_playbook-(resource://playbooks/flight-control) get_rendezvous_spivel-(resource://playbooks/rendezvous-docking) get_launch_ascent_circ_playbook-(resource://playbooks/launch-ascent-circularize) get_state_checkpoint_playbook-(resource://playbooks/state-checkpoint-rollback) get_orbital_return_playbook-(resource://playbooks/orbital-return-playbook) get_scribe_master_prompt_resource-(resource://prompts/scribe-master) get_latest_staging-(resource://staging/latest) get_latest_vesselblueprint-(resource://vessel-blueprint/latest) get_last_svg-(resource://blueprints/last-diagram.svg) get_last_png-(resource://blueprints/last-diagram.png) get_snippets_usage--(resource://snippets/usage)
其他工具
除此之外,MCP服务器还附带了一整套硬编码工具,LLM可以轻松调用这些工具与游戏进行交互。这避免了LLM必须为简单的命令编写代码。
用户注入消息
- 当您想通过HTTP接受注入消息时,以流式HTTP模式启动服务器:
uv run -m mcp_server.main --transport streamable-http --host 0.0.0.0 --port 8000. - 将消息发布到
POST /runs//inject使用类似JSON的主体{ "message": "Warn me if TWR drops" }。该运行的下一个工具响应将附加User injection message: ...一次。流式HTTP客户端可以重用其mcp-session-id标题为run_id;stdio用例可以针对默认运行iddefault. - 辅助用户界面可在
uv run -m mcp_server.injection_ui --run-id [--server-url http://127.0.0.1:8000]用于快速打字和发送消息。在Streamable HTTP模式下,您可以简单地传递--run-id default;如果没有特定于会话的消息排队,则默认队列将应用于任何会话的下一个工具调用。
🧭 连接和保存管理
krpc_get_status--检查与kRPC的连接并报告版本。save_llm_checkpoint--创建命名空间保存(非快速保存)。load_llm_checkpoint--加载命名保存(默认前缀为LLM)。quicksave,quickload,revert_to_launch--管理航班和恢复状态。
🚀 发射和船只
launch_vessel--在现场从VAB/SPH发射一艘飞船。list_launchable_vessels-列出VAB/SPH中可用的工艺。list_launch_sites-列出可用的发射场。list_vessels-列出保存中的船只。
🧠 脚本作业和控制
start_execute_script_job-将execute_script作为具有实时日志流的可取消作业运行;将getjob_status与血管状态检查交替使用,以监测烧伤情况。get_job_status-轮询任何后台作业(零件树、阶段计划、脚本等)以获取实时日志和result_resource URI。cancel_job-在恢复/加载检查点之前,中止正在运行的作业(在执行过程中终止脚本)。
脚本作业工作流: 开始作业,循环 get_job_status(job_id) 要读取日志,请使用情景工具将这些民意调查交织在一起(get_status_overview, get_flight_snapshot等),如果遥测看起来错误呼叫 cancel_job(job_id) 立即恢复/加载,然后再继续。
🌍 车身和航点
list_bodies--列出具有关键元数据的天体。list_waypoints--列出带有位置和距离/方位的航路点。
🧾 状态和时间
get_status_overview--船只/游戏状态的组合快照。get_vessel_info--船舶基本信息(名称、质量、油门、状况)。get_time_status--通用时间和任务时间。
🌡️ 环境与地表
get_environment_info--身体/环境数据,包括重力和大气。get_surface_info--地表坐标、地形高度、坡度、地面速度。
🛩️ 飞行与控制
get_flight_snapshot--飞行参数(高度、速度、AoA、姿态)。get_attitude_status--SAS/RCS/油门、SAS模式和自动驾驶仪目标。set_sas_mode--启用SAS并选择导航球保持模式(前进/后退等)。get_action_groups_status--动作组切换。get_camera_status--相机模式和参数。get_screenshot--捕获PNG屏幕截图(仅限本地主机),将其保存在artifacts/screenshots/,并返回base64+可重用资源URI(或resource://screenshots/latest).
🌬️ 空气动力学和发动机
get_aero_status--动压、马赫数、密度、阻力/升力。get_engine_status--根据发动机推力、Isp、油门、熄火。
⚡ 电力与资源
get_power_status--EC总量、生产/消费、注释。get_resource_breakdown--船舶和舞台资源总计。
🧱 蓝图、零件和分期
get_vessel_blueprint--理想化的工艺蓝图(舞台、发动机、零件)。get_blueprint_ascii--带Δv/TWR的紧凑ASCII阶段摘要。get_part_tree--具有资源的分层零件树。get_stage_plan--类似股票的阶段计划(推力、Isp、Δv)。get_staging_info--每阶段Δv/TWR估计值。export_blueprint_diagram--导出二维蓝图图(SVG/PNG)。start_part_tree_job/start_stage_plan_job-启动后台作业,在不触发工具超时的情况下生成相同的JSON工件。get_job_status-轮询作业状态/日志并公开result_resource一旦工件准备就绪,就使用URI。
后台作业工作流(长时间运行的工具)
- 使用常用的kRPC地址/端口调用start\_\*\_job工具;它以{job_id,status,note}作为响应。
- 轮询get_job_status(job_id),直到状态变为“成功”(或“失败”进行故障排除)。作业运行时日志会累积。
- 作业成功后,对报告的内容调用read_resource
result_resource(例如。,resource://jobs/.json)下载工件。 - 在计划循环中使用工件。如果作业失败,请读取日志/错误,修复潜在问题,然后重新启动作业。
🪐 轨道和导航信息
get_orbit_info--轨道元素和周期。get_navigation_info--相对于目标的导航上下文。get_targeting_info--当前目标摘要。
🎯 目标控制
set_target_body--设置目标身体。set_target_vessel--按名称设置目标船只。clear_target--清除当前目标。
🔭 机动节点
list_maneuver_nodes--列出基本机动节点。list_maneuver_nodes_detailed--详细的节点向量和燃烧估计。set_maneuver_node--使用向量在UT处创建节点。update_maneuver_node--编辑现有节点。delete_maneuver_nodes--删除所有机动节点。warp_to--通过可选的交付周期扭曲到UT。
🧠 计划助手(烧伤和转移)
compute_burn_time--估算Δv的燃烧时间。compute_circularize_node--建议在Ap/Pe进行循环。compute_raise_lower_node--建议将Ap/Pe更改为目标高度。compute_transfer_window_to_body--计算霍曼转移窗口。compute_ejection_node_to_body--从停放轨道上粗略喷射燃烧。compute_plane_change_nodes--飞机转换在AN/DN时燃烧。compute_rendezvous_phase_node--定阶段轨道进行交会。
⚓ 对接
list_docking_ports--列出停靠端口和状态。
______________________________________________________________________
🥪 实验性:该项目正在积极开发中。使用风险由您自行承担,如果您遇到问题或有建议,请随时打开问题或PR。
