无人机MCP服务器

yangliuyi2016/Tello_MCP_Server
1 Stars 94 次浏览 杜麦尼 更新于 2026-08-23

Tello MCP Server 是一个模型上下文协议(MCP)服务器,旨在通过标准化接口控制大疆Tello无人机。

该服务暂未提供标准配置,请参考 README 手动接入

服务介绍

Tello 无人机 MCP 服务器

这是一个用于控制 DJI Tello 无人机的 Model Context Protocol (MCP) 服务器实现。该服务器允许任何与 MCP 兼容的客户端通过标准化接口控制 Tello 无人机。

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

功能

  • 支持 MCP
  • 通过 SSE(服务器发送事件)实现实时无人机控制
  • 强大的错误处理和日志记录
  • 支持跨域资源共享 (CORS),适用于 Web 客户端(如 mcp 检查器)
  • 支持基本的 Tello 无人机命令:
    • 起飞
    • 降落
    • 移动(上/下/左/右/前/后)
    • 旋转(顺时针/逆时针)

前提条件

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

安装

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

MCP 配置

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

json

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

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

使用方法

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

  2. 启动 MCP 服务器:
    bash

    sudo 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 客户端:

  1. 启动您的服务器并连接到 SSE 端点:
    json
    GET http://localhost:3000/sse
    
  2. 提示您的 MCP 启用的模型,它将通过 SSE 通信
    json
    event: endpoint
    data: /message?sessionId=<session-id>
    
  3. 发送初始化请求:
    json
    {
        "jsonrpc": "2.0",
        "id": 1,
        "method": "initialize"
    }
    
  4. 列出可用工具:
    json
    {
        "jsonrpc": "2.0",
        "id": 2,
        "method": "listTools"
    }
    
  5. 调用工具(例如起飞):
    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 通信

故障排除

  1. 服务器无法启动:

    • 确保您具有 sudo/根用户权限
    • 检查 Tello 的 WiFi 是否已连接
    • 确认没有其他进程正在使用端口 3000
  2. 无人机无法连接:

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

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

许可证

MIT

贡献

欢迎贡献。

相关 MCP 服务