ros2-mcp-server について
ros2-mcp-server は、MCP と ROS 2 を接続する Python 製の MCP サーバーで、AI アシスタントから ROS 2 トピックを通じてロボットを制御できます。ROS 2 ノードとして動作し、geometry_msgs/Twist メッセージを /cmd_vel に発行します。現時点では ROS 2 Humble 環境で、時間指定の移動コマンドに対応しています。
主な機能
- 01FastMCP による MCP クライアントからの指示の受付
- 02/cmd_vel へ直接発行する ROS 2 ノード
- 03時間指定の移動と自動停止
- 04asyncio と ROS 2 イベントループの連携
活用シーン
- 01AI アシスタントからシミュレーションロボットを一定速度で前進させる操作
- 02Gazebo と TurtleBot3 での移動コマンドの検証
- 03実機の /cmd_vel インターフェースへの自然言語による制御
MCP 対応
MCP サーバーとして move_robot ツールを MCP クライアントに公開し、サーバーがそれを ROS 2 の /cmd_vel メッセージに変換します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
ros2-mcp-server
ros2-mcp-server は、Model Context Protocol(MCP)と ROS 2 を連携させ、AI アシスタントが ROS 2 トピック経由でロボットを制御できるようにする、Python ベースのサーバーです。FastMCP を通じてコマンドを処理し、ROS 2 ノードとして動作して、geometry_msgs/Twist メッセージを /cmd_vel トピックにパブリッシュし、ロボットの動きを制御します。
この実装では、「5 秒間、0.2 m/s で前進して停止する」といったコマンドに対応しており、/cmd_vel パブリッシャーの名前は pub_cmd_vel です。
特長
- MCP 連携:FastMCP を使用して、MCP クライアント(例:Claude)からのコマンドを処理します。
- ROS 2 ネイティブ:ROS 2 ノードとして動作し、
/cmd_velに直接パブリッシュします。 - 時間ベースの制御:指定時間だけ移動して停止するなど、継続時間を指定した移動コマンドに対応しています。
- 非同期処理:FastMCP の
asyncioと ROS 2 のイベントループを組み合わせて、効率的に動作します。
前提条件
- ROS 2:Humble ディストリビューションがインストールされ、環境設定されていること。
- Python:バージョン 3.10(ROS 2 Humble との互換性に必要です)。
- uv:依存関係を管理する Python パッケージマネージャー。
- 依存関係:
rclpy:ROS 2 の Python クライアントライブラリ(ROS 2 とともにインストールされます)。fastmcp:MCP サーバーの実装に使用する FastMCP フレームワーク。numpy:ROS 2 のメッセージ型で必要です。
インストール
-
リポジトリのクローン:
git clone https://github.com/kakimochi/ros2-mcp-server.git cd ros2-mcp-server -
Python バージョンの設定: このプロジェクトでは、ROS 2 Humble の要件に合わせて Python 3.10 を使用します。
.python-versionファイルはすでに設定されています。# .python-version content 3.10 -
プロジェクトの依存関係:
pyproject.tomlファイルには、必要な依存関係が設定されています。# pyproject.toml content [project] name = "ros2-mcp-server" version = "0.1.0" description = "ROS 2 MCP Server" readme = "README.md" requires-python = ">=3.10" dependencies = [ "fastmcp", "numpy", ] -
uv 環境の作成:
uv venv --python /usr/bin/python3.10 -
仮想環境の有効化:
source .venv/bin/activateコマンドプロンプトの先頭に
(.venv)が表示され、仮想環境が有効になったことを確認できます。 -
依存関係のインストール:
uv pip install -e .
MCP サーバーの設定
このサーバーを Claude やその他の MCP クライアントで使用するには、MCP サーバーとして設定する必要があります。設定方法は次のとおりです。
Claude Desktop の場合
-
Claude Desktop の設定を開き、MCP サーバーのセクションに移動します。
-
次の設定で新しい MCP サーバーを追加します。
"ros2-mcp-server": { "autoApprove": [], "disabled": false, "timeout": 60, "command": "uv", "args": [ "--directory", "/path/to/ros2-mcp-server", "run", "bash", "-c", "export ROS_LOG_DIR=/tmp && source /opt/ros/humble/setup.bash && python3 /path/to/ros2-mcp-server/ros2-mcp-server.py" ], "transportType": "stdio" }重要:
/path/to/ros2-mcp-serverを、リポジトリの実際のパスに置き換えてください。たとえば、リポジトリを/home/user/projects/ros2-mcp-serverにクローンした場合は、そのパスを使用します。 -
設定を保存し、Claude を再起動します。
Cline(VSCode 拡張機能)の場合
-
VSCode で、サイドバーの Cline アイコンをクリックして Cline 拡張機能の設定を開きます。
-
MCP サーバーの設定セクションに移動します。
-
次の設定で新しい MCP サーバーを追加します。
"ros2-mcp-server": { "autoApprove": [], "disabled": false, "timeout": 60, "command": "uv", "args": [ "--directory", "/path/to/ros2-mcp-server", "run", "bash", "-c", "export ROS_LOG_DIR=/tmp && source /opt/ros/humble/setup.bash && python3 /path/to/ros2-mcp-server/ros2-mcp-server.py" ], "transportType": "stdio" }重要:Claude Desktop の例と同様に、
/path/to/ros2-mcp-serverをリポジトリの実際のパスに置き換えてください。 -
VSCode の再起動や拡張機能の再読み込みを行わなくても、Cline の MCP 設定画面からサーバーのオン/オフをすぐに切り替え、接続を確認できます。
使用方法
MCP サーバーを設定すると、Claude を使ってロボットにコマンドを送信できます。
-
コマンドの例: ロボットに 0.2 m/s で 5 秒間前進するよう Claude に指示します。
Please make the robot move forward at 0.2 m/s for 5 seconds. -
ツールの直接使用:
move_robotツールを直接使用することもできます。{ "linear": [0.2, 0.0, 0.0], "angular": [0.0, 0.0, 0.0], "duration": 5.0 } -
ROS 2 トピックの監視:
/cmd_velトピックの出力を確認します。ros2 topic echo /cmd_vel
テスト
-
シミュレーターを使用する場合:
- ROS 2 互換のシミュレーター(例:TurtleBot3 を使用した Gazebo)を起動します。
export TURTLEBOT3_MODEL=burger ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py - Claude を使用して移動コマンドを送信します。
- Gazebo でロボットが動くことを確認します。
- ROS 2 互換のシミュレーター(例:TurtleBot3 を使用した Gazebo)を起動します。
-
実機のロボットを使用する場合:
- ロボットが
/cmd_velトピックを正しくサブスクライブするように設定されていることを確認します。 - Claude を使用して移動コマンドを送信します。
- ロボットがコマンドに従って動くはずです。
- ロボットが
-
期待される出力:
- サーバーは移動コマンドと停止コマンドをログに記録します。
- Claude は
"Successfully moved for 5.0 seconds and stopped"のような応答を受け取ります。
トラブルシューティング
- ROS 2 のログエラー:ログディレクトリのエラーが発生した場合は、
ROS_LOG_DIR環境変数が書き込み可能なディレクトリ(例:/tmp)に設定されていることを確認します。 - Python のバージョン不一致:ROS 2 Humble は Python 3.10 向けにビルドされているため、Python 3.10 を使用していることを確認します。
- 接続エラー:Claude で「Connection closed」エラーが報告される場合は、MCP サーバーの設定が正しく、すべての依存関係がインストールされていることを確認します。
ディレクトリ構成
ros2-mcp-server/
├── ros2-mcp-server.py # Main server script integrating FastMCP and ROS 2
├── pyproject.toml # Project dependencies and metadata
├── .python-version # Python version specification
├── .gitignore # Git ignore file
└── README.md # This file
制限事項
- 単一のトピック:現在は
Twistメッセージを使用する/cmd_velをサポートしています。他のトピックやサービスに対応するには、ros2-mcp-server.pyを拡張してください。 - 基本的なコマンド:現在は単純な移動コマンドをサポートしています。より複雑な動作には、追加の実装が必要です。
ライセンス
MIT License
Copyright (c) 2025 kakimochi
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
このプロジェクトでは FastMCP を使用しています。FastMCP は Apache License 2.0 の下でライセンスされています。FastMCP コンポーネントの使用にも、そのライセンスの条項が適用されます。
謝辞
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。