返回市场
无人机-mcp

无人机-mcp

作者:0xKoda24 星标更新:2025-04-10

项目介绍

Tello无人机MCP服务器

这是一个用于控制DJI Tello无人机的模型上下文协议(MCP)服务器实现。该服务器允许任何兼容MCP的客户端通过标准化接口控制Tello无人机。

正在积极开发中,请参阅安全注意事项

功能

  • 支持MCP
  • 通过SSE(服务器发送事件)实现实时无人机控制
  • 健壮的错误处理和日志记录
  • 启用CORS以支持网络客户端(如mcp inspector)
  • 支持基本的Tello无人机命令:
    • 起飞
    • 着陆
    • 移动(上/下/左/右/前/后)
    • 旋转(顺时针/逆时针)

预备条件

  • Python 3.7+
  • DJI Tello无人机
  • 连接到Tello无人机的网络连接
  • 根/超级用户权限(绑定UDP套接字所需)

安装

  1. 克隆此仓库:
git clone <repository-url>
cd drone-mcp
  1. 安装依赖项:
pip install -r requirements.txt

MCP配置

要使您的MCP客户端能够连接到Tello无人机服务器,请在您的mcp.json文件中添加以下配置(通常位于~/.cursor/mcp.json或项目目录中):

{
  "tello-drone": {
    "url": "http://localhost:3000/sse"
  }
}

此配置允许启用MCP的工具和模型自动发现并连接到您的Tello无人机服务器。

使用方法

  1. 连接到Tello无人机的WiFi网络(通常以"TELLO-"开头)。

  2. 启动MCP服务器:

sudo python tello_mcp.py

服务器将执行以下操作:

  • 初始化与Tello无人机的连接
  • http://0.0.0.0:3000启动MCP服务器
  • /sse设置SSE端点
  • 处理/message的消息

确保在计划使用客户端(光标、冲浪板、代码)之前服务器正在运行。

可用工具

服务器提供以下MCP工具:

1. 起飞

{
    "name": "takeoff",
    "description": "命令Tello无人机起飞",
    "inputSchema": {
        "type": "object",
        "properties": {}
    }
}

2. 着陆

{
    "name": "land",
    "description": "命令Tello无人机着陆",
    "inputSchema": {
        "type": "object",
        "properties": {}
    }
}

3. 移动

{
    "name": "move",
    "description": "移动Tello无人机到指定方向",
    "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": "顺时针或逆时针旋转Tello无人机",
    "inputSchema": {
        "type": "object",
        "properties": {
            "direction": {
                "type": "string",
                "enum": ["cw", "ccw"]
            },
            "degrees": {
                "type": "integer",
                "minimum": 1,
                "maximum": 3600
            }
        },
        "required": ["direction", "degrees"]
    }
}

MCP客户端集成

要连接MCP客户端:

  1. 启动您的服务器并连接到SSE端点:
GET http://localhost:3000/sse
  1. 提示您的启用MCP的模型,该模型将通过SSE进行通信
event: endpoint
data: /message?sessionId=<session-id>
  1. 发送初始化请求:
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize"
}
  1. 列出可用工具:
{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "listTools"
}
  1. 调用一个工具(例如 - 起飞):
{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "callTool",
    "params": {
        "name": "takeoff",
        "arguments": {}
    }
}

错误处理

服务器实现了全面的错误处理:

  • 无人机连接失败
  • 无效命令
  • 网络超时
  • 协议错误
  • 工具参数无效

所有错误都被记录,并作为正确的JSON-RPC 2.0错误响应返回。

日志记录

服务器将详细信息记录到stderr,包括:

  • 服务器启动/关闭
  • 无人机连接状态
  • 命令执行
  • 客户端连接
  • 错误条件

安全注意事项

  • 服务器需要root/超级用户权限来绑定UDP端口
  • 没有实现身份验证(依赖于网络安全)
  • 启用了CORS,适用于所有来源(*)
  • 仅在受控环境中使用

开发

服务器构建使用:

  • Python的mcp库用于协议处理
  • Starlette用于HTTP/SSE传输
  • Uvicorn作为ASGI服务器
  • 原生Python套接字库用于无人机UDP通信

故障排除

  1. 服务器无法启动:

    • 确保您具有sudo/超级用户权限
    • 检查是否已连接到Tello的WiFi
    • 验证没有其他进程占用端口3000
  2. 无人机无法连接:

    • 确保无人机已开机
    • 检查WiFi连接
    • 验证没有其他应用程序控制无人机
  3. 命令失败:

    • 检查无人机电池电量
    • 确保无人机处于安全飞行环境
    • 验证命令参数是否在允许范围内

许可证

MIT

贡献

欢迎贡献。