Tello无人机MCP服务器
用于控制DJI Tello无人机的模型上下文协议(MCP)服务器实现。该服务器允许任何兼容MCP的客户端通过标准化接口控制Tello无人机。
这正在积极开发中,请阅读 安全考虑
特性
- MCP支持
- 通过SSE(服务器发送事件)进行实时无人机控制
- 强大的错误处理和日志记录
- 为web客户端启用CORS(如mcp检查器)
- 支持Tello无人机的基本指令:
- 起飞 - 土地 - 移动(上/下/左/右/前/后) - 旋转(顺时针/逆时针)
先决条件
- Python 3.7+
- 日间无人机
- Tello无人机的网络连接
- Root/sudo访问权限(UDP套接字绑定所需)
安装
- 克隆此存储库:
git clone
cd drone-mcp- 安装依赖项:
pip install -r requirements.txtMCP配置
要使您的MCP客户端能够连接到Tello无人机服务器,请将以下配置添加到您的 mcp.json 文件(通常位于 ~/.cursor/mcp.json 或在您的项目目录中):
{
"tello-drone": {
"url": "http://localhost:3000/sse"
}
}此配置允许启用MCP的工具和模型自动发现并连接到您的Tello无人机服务器。
用法
- 连接到Tello无人机的WiFi网络(通常以“Tello-”开头)。
- 启动MCP服务器:
sudo python tello_mcp.py服务器将:
- 初始化与Tello无人机的连接
- 启动MCP服务器
http://0.0.0.0:3000 - 在以下位置设置SSE端点
/sse - 在以下位置处理消息
/message
在计划在客户端(游标、风帆、代码)中使用服务器之前,请确保服务器正在运行。
可用工具
服务器提供以下MCP工具:
1.起飞
{
"name": "takeoff",
"description": "Commands the Tello drone to take off",
"inputSchema": {
"type": "object",
"properties": {}
}
}2.土地
{
"name": "land",
"description": "Commands the Tello drone to land",
"inputSchema": {
"type": "object",
"properties": {}
}
}3.移动
{
"name": "move",
"description": "Moves the Tello drone in a specified direction",
"inputSchema": {
"type": "object",
"properties": {
"direction": {
"type": "string",
"enum": ["up", "down", "left", "right", "forward", "back"]
},
"distance": {
"type": "integer",
"minimum": 20,
"maximum": 500
}
},
"required": ["direction", "distance"]
}
}4.旋转
{
"name": "rotate",
"description": "Rotates the Tello drone clockwise or counter-clockwise",
"inputSchema": {
"type": "object",
"properties": {
"direction": {
"type": "string",
"enum": ["cw", "ccw"]
},
"degrees": {
"type": "integer",
"minimum": 1,
"maximum": 3600
}
},
"required": ["direction", "degrees"]
}
}MCP客户端集成
要连接MCP客户端,请执行以下操作:
- 启动服务器并连接到SSE端点:
GET http://localhost:3000/sse- 提示您启用MCP的模型,该模型将通过SSE进行通信
event: endpoint
data: /message?sessionId=- 发送初始化请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize"
}- 列出可用工具:
{
"jsonrpc": "2.0",
"id": 2,
"method": "listTools"
}- 调用工具(示例-起飞):
{
"jsonrpc": "2.0",
"id": 3,
"method": "callTool",
"params": {
"name": "takeoff",
"arguments": {}
}
}错误处理
服务器实现了全面的错误处理:
- 无人机连接失败
- 无效命令
- 网络超时
- 协议错误
- 无效的工具参数
所有错误都会被记录下来,并作为正确的JSON-RPC 2.0错误响应返回。
日志记录
服务器将以下详细信息记录到stderr:
- 服务器启动/关闭
- 无人机连接状态
- 命令执行
- 客户端连接
- 错误条件
安全考虑
- 服务器需要root/sudo访问权限才能绑定到UDP端口
- 未实施身份验证(依赖于网络安全)
- 所有来源都启用了CORS(\*)
- 仅在受控环境中使用
发展
服务器是使用以下方式构建的:
- Python的
mcp协议处理库 - 用于HTTP/SSE传输的Starlette
- Uvicorn作为ASGI服务器
- 用于无人机UDP通信的原生Python套接字库
故障排除
- 服务器无法启动:
- 确保您具有sudo/root访问权限 - 检查Tello的WiFi是否已连接 - 验证没有其他进程正在使用端口3000
- 无人机无法连接:
- 确保无人机已通电 - 检查WiFi连接 - 验证没有其他应用程序正在控制无人机
- 命令失败:
- 检查无人机电池电量 - 确保无人机处于安全的飞行环境中 - 验证命令参数是否在允许的范围内
许可证
麻省理工学院
贡献
欢迎投稿。
