Tello Drone MCP Server について
Tello Drone MCP Server は、DJI Tello ドローンを制御するための MCP サーバーです。MCP に対応した任意のクライアントから、離陸、着陸、移動、回転のコマンドを標準的なインターフェースで送信できます。README では開発が活発に進められていること、セキュリティ上の注意点があることが示されています。
主な機能
- 01SSE によるリアルタイムのドローン制御
- 02離陸と着陸のツール
- 03六方向への移動
- 04時計回りと反時計回りの回転
- 05エラー処理とログ出力
- 06Web クライアント向けの CORS 有効化
活用シーン
- 01MCP クライアントからツール経由で Tello ドローンを操作する
- 02管理された環境で LLM によるドローン操作を検証する
MCP 対応
MCP サーバーとして、起飛・着陸・移動・回転の操作を MCP ツールとして公開します。MCP クライアントは SSE エンドポイント /sse を通じて接続し、ツールを呼び出します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Tello ドローン MCP サーバー
DJI Tello ドローンを制御するための Model Context Protocol(MCP)サーバーの実装です。このサーバーを使用すると、MCP 互換クライアントから標準化されたインターフェースを通じて Tello ドローンを制御できます。
現在、活発に開発中です。セキュリティに関する考慮事項をお読みください。
機能
- MCP のサポート
- SSE(Server-Sent Events)によるリアルタイムのドローン制御
- 堅牢なエラー処理とログ記録
- Web クライアント(mcp inspector など)向けの CORS 対応
- Tello ドローンの基本的なコマンドに対応:
- 離陸
- 着陸
- 移動(上/下/左/右/前進/後退)
- 回転(時計回り/反時計回り)
前提条件
- Python 3.7+
- DJI Tello ドローン
- Tello ドローンへのネットワーク接続
- root/sudo アクセス(UDP ソケットのバインドに必要)
インストール
- このリポジトリをクローンします:
git clone <repository-url>
cd drone-mcp
- 依存関係をインストールします:
pip install -r requirements.txt
MCP の設定
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 ドローンとの接続を初期化します
http://0.0.0.0:3000で MCP サーバーを起動します/sseに SSE エンドポイントを設定します/messageでメッセージを処理します
クライアント(cursor、windsurf、code)で使用する前に、サーバーが起動していることを確認してください。
利用可能なツール
サーバーは次の 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=<session-id>
- 初期化リクエストを送信します:
{
"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 に、次の詳細情報を記録します:
- サーバーの起動/終了
- ドローンの接続状態
- コマンドの実行
- クライアントの接続
- エラーの発生状況
セキュリティに関する考慮事項
- UDP ポートをバインドするため、サーバーには root/sudo アクセスが必要です
- 認証は実装されていません(ネットワークセキュリティに依存します)
- すべてのオリジンに対して CORS が有効になっています(*)
- 管理された環境でのみ使用してください
開発
このサーバーは次の技術を使用して構築されています:
- プロトコル処理用の Python の
mcpライブラリ - HTTP/SSE トランスポート用の Starlette
- ASGI サーバーとしての Uvicorn
- ドローンとの UDP 通信に使用する Python 標準のソケットライブラリ
トラブルシューティング
-
サーバーが起動しない:
- sudo/root アクセスがあることを確認します
- Tello の WiFi に接続されていることを確認します
- ポート 3000 をほかのプロセスが使用していないことを確認します
-
ドローンに接続できない:
- ドローンの電源が入っていることを確認します
- WiFi 接続を確認します
- ほかのアプリケーションがドローンを制御していないことを確認します
-
コマンドが失敗する:
- ドローンのバッテリー残量を確認します
- ドローンが安全な飛行環境にあることを確認します
- コマンドのパラメーターが許容範囲内であることを確認します
ライセンス
MIT
貢献
貢献を歓迎します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。