无人机MCP服务器
Tello MCP Server 是一个模型上下文协议(MCP)服务器,旨在通过标准化接口控制大疆Tello无人机。
服务介绍
Tello 无人机 MCP 服务器
这是一个用于控制 DJI Tello 无人机的 Model Context Protocol (MCP) 服务器实现。该服务器允许任何与 MCP 兼容的客户端通过标准化接口控制 Tello 无人机。
本项目正在积极开发中,请阅读安全注意事项
功能
- 支持 MCP
- 通过 SSE(服务器发送事件)实现实时无人机控制
- 强大的错误处理和日志记录
- 支持跨域资源共享 (CORS),适用于 Web 客户端(如 mcp 检查器)
- 支持基本的 Tello 无人机命令:
- 起飞
- 降落
- 移动(上/下/左/右/前/后)
- 旋转(顺时针/逆时针)
前提条件
- Python 3.7+
- DJI Tello 无人机
- 与 Tello 无人机的网络连接
- 根/超级用户权限(需要绑定 UDP 套接字)
安装
- 克隆此仓库:
bashgit clone <repository-url> cd drone-mcp - 安装依赖项:
bashpip install -r requirements.txt
MCP 配置
要使您的 MCP 客户端能够连接到 Tello 无人机服务器,请将以下配置添加到您的 mcp.json 文件中(通常位于 ~/.cursor/mcp.json 或您的项目目录中):
json
{
"tello-drone": {
"url": "http://localhost:3000/sse"
}
}
此配置允许启用 MCP 的工具和模型自动发现并连接到您的 Tello 无人机服务器。
使用方法
-
连接到您的 Tello 无人机的 WiFi 网络(通常以 "TELLO-" 开头)。
-
启动 MCP 服务器:
bashsudo python tello_mcp.py
服务器将:
- 初始化与 Tello 无人机的连接
- 在
http://0.0.0.0:3000上启动 MCP 服务器 - 在
/sse设置 SSE 端点 - 在
/message处理消息
确保在计划使用客户端(如 cursor、windsurf、code)之前,服务器已经运行。
可用工具
服务器提供以下 MCP 工具:
1. 起飞
json
{
"name": "takeoff",
"description": "Commands the Tello drone to take off",
"inputSchema": {
"type": "object",
"properties": {}
}
}
2. 降落
json
{
"name": "land",
"description": "Commands the Tello drone to land",
"inputSchema": {
"type": "object",
"properties": {}
}
}
3. 移动
json
{
"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. 旋转
json
{
"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 端点:
jsonGET http://localhost:3000/sse - 提示您的 MCP 启用的模型,它将通过 SSE 通信
jsonevent: endpoint data: /message?sessionId=<session-id> - 发送初始化请求:
json{ "jsonrpc": "2.0", "id": 1, "method": "initialize" } - 列出可用工具:
json{ "jsonrpc": "2.0", "id": 2, "method": "listTools" } - 调用工具(例如起飞):
json{ "jsonrpc": "2.0", "id": 3, "method": "callTool", "params": { "name": "takeoff", "arguments": {} } }
错误处理
服务器实现了全面的错误处理:
- 无人机连接失败
- 无效命令
- 网络超时
- 协议错误
- 无效的工具参数
所有错误都会被记录,并作为符合 JSON-RPC 2.0 规范的错误响应返回。
日志记录
服务器将详细的日志信息输出到标准错误流,包括:
- 服务器启动/关闭
- 无人机连接状态
- 命令执行
- 客户端连接
- 错误条件
安全注意事项
- 服务器需要根/超级用户权限来绑定 UDP 端口
- 未实现身份验证(依赖于网络安全)
- 对所有来源启用了 CORS(*)
- 仅在受控环境中使用
开发
服务器使用以下技术构建:
- Python 的
mcp库用于协议处理 - Starlette 用于 HTTP/SSE 传输
- Uvicorn 作为 ASGI 服务器
- 本地 Python 套接字库用于无人机的 UDP 通信
故障排除
-
服务器无法启动:
- 确保您具有 sudo/根用户权限
- 检查 Tello 的 WiFi 是否已连接
- 确认没有其他进程正在使用端口 3000
-
无人机无法连接:
- 确保无人机已开机
- 检查 WiFi 连接
- 确认没有其他应用程序正在控制无人机
-
命令失败:
- 检查无人机电池电量
- 确保无人机处于安全飞行环境
- 确认命令参数在允许范围内
许可证
MIT
贡献
欢迎贡献。