无人机MCP
用于控制与ArduPilot兼容的无人机(QuadCopters)的纯MCP服务器。显示无人机指令、移动和遥测 MCP工具 通过Streamable HTTP,由 官方Python MCP SDK通过MAVLink支持真实无人机,通过ArduPilot SITL支持模拟无人机。
特征:
- MCP工具界面 在
/mcp--连接任何MCP客户端(Claude Desktop、Claude Code、LangGraph、自定义代理)以控制无人机 - 全飞行控制:手臂和起飞在一个指令
- GPS和NED移动命令(即发即弃和封锁变体)
- 丰富的遥测技术:GPS、NED位置、指南针、电池、传感器健康状况
- Gradys地面站集成:周期性GPS定位推送
- 通过任务规划器或任何MAVLink地面军事系统提供视觉反馈
- 每个组件的可配置日志记录
______________________________________________________________________
安装
先决条件
- Python 3.10+
- 对于模拟飞行:本地构建的ArduPilot存储库,以及
xterm安装。
- 克隆并构建ArduPilot:https://ardupilot.org/dev/docs/where-to-get-the-code.html - SITL设置指南:https://ardupilot.org/dev/docs/SITL-setup-landingpage.html
从PyPI安装(推荐)
pip install uav-mcp安装后重新启动终端。
从源代码安装(开发)
git clone https://github.com/Project-GrADyS/uav_mcp
cd uav_mcp
pip install -e .安装后重新启动终端。
______________________________________________________________________
入门指南
用真正的无人机跑步
通过UDP或USB连接无人机,然后启动MCP服务器:
uav-mcp --port 8000 --uav_connection 127.0.0.1:17171 --connection_type udpin --sysid 1这 --connection_type 控制UDP方向:
udpin--服务器监听,无人机连接(最常见)udpout--服务器连接到无人机usb--串行连接(组--uav_connection到串行设备路径,例如。/dev/ttyUSB0)
运行模拟(SITL)
这将启动ArduCopter SITL(在新的 xterm 窗口)和MCP服务器:
uav-mcp --simulated true --ardupilot_path ~/ardupilot --speedup 1 --port 8000 --sysid 1SITL将绑定到中的地址 --uav_connection (默认值 127.0.0.1:17171).这 --speedup 因素控制模拟速度(例如。 5 =5倍实时)。这 --location 参数设置SITL的起始位置(默认 AbraDF).
使用配置文件
所有参数都可以通过INI文件提供:
[api]
port=8000
uav_connection=127.0.0.1:17171
connection_type=udpin
sysid=1
[simulated]
ardupilot_path=~/ardupilot
location=AbraDF
gs_connection=[]
speedup=1
[logs]
log_console=[]
log_path=None
debug=[]
script_logs=None运行方式:
uav-mcp --config /path/to/config.iniCLI参数始终覆盖配置文件中的值。
______________________________________________________________________
启动和关闭生命周期
当 uav-mcp 开始时,以下内容按顺序发生 run_mcp.py:
启动:
- 解析CLI参数并设置目录
- 如果
--simulated true:SITL在xterm窗口中生成(标记为UAV_SITL_TAGenv-var用于清理) - 这
Copter创建单例并连接到MAVLink车辆 - 启动后台MAVLink排放回路(
asyncio.create_task) - 如果
--gradys_gs已设置:后台任务每秒开始推送GPS位置 - MCP服务器开始监听配置的端口(
mcp.run_streamable_http_async())
关机 (在Ctrl+C或SIGTERM上):
- 通过扫描来杀死SITL进程
UAV_SITL_TAGenv 是 通过psutil - MAV墨水排放回路已取消
- Gradys GS任务已取消,HTTP会话已关闭
______________________________________________________________________
验证MCP服务器
服务器运行后,您可以通过连接LLM代理进行验证。
使用克劳德桌面
将MCP服务器添加到Claude Desktop配置中(claude_desktop_config.json):
{
"mcpServers": {
"uav-1": { "url": "http://localhost:8000/mcp" }
}
}重新启动Claude Desktop,然后问:
“获取无人机的通用遥测数据”
克劳德会打电话给 get_general_telemetry 工具和返回空速、地速、航向、油门和高度——确认MCP服务器已连接到车辆。
使用克劳德代码
创建一个 .mcp.json 项目目录中的文件:
{
"mcpServers": {
"uav-1": { "url": "http://localhost:8000/mcp" }
}
}然后启动Claude Code,让它与无人机交互:
“武装无人机,起飞至20米”
克劳德代码将调用 arm_and_takeoff 和 alt=20.
多无人机设置
使用不同的端口和系统ID为每架无人机运行一台MCP服务器:
uav-mcp --simulated true --ardupilot_path ~/ardupilot --port 8001 --sysid 1
uav-mcp --simulated true --ardupilot_path ~/ardupilot --port 8002 --sysid 2为MCP客户端配置两台服务器:
{
"mcpServers": {
"uav-1": { "url": "http://localhost:8001/mcp" },
"uav-2": { "url": "http://localhost:8002/mcp" }
}
}然后,LLM代理可以通过调用每个服务器上的工具来控制多架无人机。
______________________________________________________________________
MCP工具
工具分为三组:
命令: arm_and_takeoff --武装车辆,切换到制导模式,并起飞到指定高度。
运动: go_to_gps, go_to_gps_wait, go_to_ned, go_to_ned_wait, drive, drive_wait, stop, resume -全球定位系统和NED导航与即发即弃和封锁变体。
遥测: get_general_telemetry, get_gps, get_ned, get_compass, get_sys_status, get_sensor_status, get_battery, get_home --读取车辆状态和传感器数据。
看 .claude/docs/specification.md 有关完整参数和响应的详细信息。
______________________________________________________________________
CLI参数参考
所有参数都可以在命令行上传递,也可以在INI配置文件中设置。跑 uav-mcp --help 以供快速参考。
通用(所有模式)
| 参数 | 默认值 | 描述 |
|---|---|---|
--config | 无 | INI配置文件的路径([api], [simulated], [logs] 部分) |
--port | 8000 | MCP服务器监听的端口(可流式传输HTTP) |
--sysid | 10 | MAVLink系统ID;必须与无人机匹配 SYSID_THISMAV 参数 |
--uav_connection | 127.0.0.1:17171 | MAVLink地址-- host:port 用于UDP,或用于USB的串行设备路径 |
--gradys_gs | 没有 | host:port Gradys地面站——实现周期性GPS位置推送 |
--scripts_path | ~/uav_scripts | 保存任务脚本的目录 |
--python_path | python3 | 用于运行脚本的Python二进制文件 |
连接(真实无人机)
| 参数 | 默认值 | 描述 |
|---|---|---|
--connection_type | udpin | udpin --服务器监听; udpout --服务器连接出去; usb --串行 |
仅模拟
| 参数 | 默认值 | 描述 |
|---|---|---|
--simulated | false | 设置为 true 在MCP服务器旁边生成ArduCopter SITL |
--ardupilot_path | ~/ardupilot | 本地ArduPilot存储库的路径 |
--location | AbraDF | SITL的指定起始位置(定义见 ~/.config/ardupilot/locations.txt) |
--speedup | 1 | SITL仿真时间倍增器 |
--gs_connection | [] | 额外 host:port 解决SITL流遥测问题(例如任务规划器) |
日志记录
| 参数 | 默认值 | 描述 |
|---|---|---|
--log_console | [] | 将日志打印到控制台的组件: COPTER GRADYS_GS |
--log_path | 无 | 写入所有组件日志组合的文件路径 |
--debug | [] | 组件名称与 --log_console 但在DEBUG冗长 |
--script_logs | None | 脚本stdout/stderr保存为带时间戳的目录 .log 文件 |
______________________________________________________________________
额外功能
Gradys地面站集成
当 --gradys_gs 设置后,服务器启动一个后台协程,每秒将车辆的GPS位置发送到Gradys GS:
uav-mcp --port 8000 --sysid 1 --gradys_gs 192.168.1.10:5000每次POST http:///update-info/ 包括:纬度、经度、高度、设备类型、序列号以及服务器自己的IP和端口。这使得Gradys生态系统能够实时跟踪无人机。
使用任务规划器进行视觉反馈
在模拟模式下运行时,使用 --gs_connection 将MAVLink遥测数据流式传输到任务规划器(或任何地面军事系统软件):
uav-mcp --simulated true --ardupilot_path ~/ardupilot --sysid 1 --gs_connection [192.168.1.5:14550]将任务规划器连接到指定的UDP地址,以查看实时位置、姿态和飞行数据。
记录系统
使用日志参数控制记录的内容和位置:
# Print COPTER logs to console
uav-mcp --log_console COPTER ...
# Write all logs to a file
uav-mcp --log_path ~/uav_mcp.log ...
# Enable DEBUG verbosity for the COPTER component
uav-mcp --debug COPTER ...可用日志组件: COPTER, GRADYS_GS.
