MCP サーバーの概要
概要
MCP(Model Context Protocol)は、AI アシスタントと外部システムを連携させるためのプロトコルです。本システムは完全な MCP サーバーを実装しており、18 種類のツール関数を提供して、自然言語によるロボットアームの制御とビジョン検出を可能にします。
MCP サービスのアドレス:http://localhost:8002/mcp/
MCP プロトコルの特長
- プラグアンドプレイ:Claude などの AI アシスタントとシームレスに連携
- ️ ツール関数:検出と制御をカバーする 18 種類の専用関数
- 非同期処理:同時リクエストや時間のかかる処理に対応
- 状態管理:システムの状態をリアルタイムに同期
- エラー処理:充実した例外処理とエラーフィードバック
ツール関数一覧
検出関連ツール(4 種類)
1. get_measurements()
機能:現在の検出モードにおける全物体の計測データを取得します。
{
"name": "get_measurements",
"description": "検出されたすべての物体の計測データを取得",
"inputSchema": {},
"response": {
"measurements": [
{
"id": 1,
"class": "red_shape",
"confidence": 0.92,
"position": {"x": 320, "y": 240},
"distance_from_center": 150.2,
"dimensions": {"width": 120, "height": 80},
"quadrant": "第一象限"
}
],
"count": 1
}
}
2. get_measurement_by_id(object_id)
機能:特定の物体の計測データを取得します。 パラメータ:
object_id(int):物体 ID
trigger_yolo_detection()
機能:YOLO モードで物体検出を行い、検出モードを切り替えます。
4. trigger_vlm_detection(prompt)
機能:VLM モードで物体検出を行います。 パラメータ:
prompt(str):VLM 検出用のプロンプト
注意:VLM 検出機能を使用するには、SiliconFlow の API キーを設定する必要があります。詳しい設定方法は SiliconFlow API キー取得ガイド を参照してください。
ロボットアーム制御ツール(12 種類)
基本制御
1. catch_object(image_x, image_y, height_z)
機能:ロボットアームを制御して物体を把持します。 パラメータ:
image_x(float):画像上の X 座標(中心基準)image_y(float):画像上の Y 座標(中心基準)height_z(float):把持高さ(推奨値 -50.0)
2. init_action()
機能:ロボットアームが初期化動作を行い、初期位置に戻ります。
3. normal_put_object(image_x, image_y, height_z)
機能:物体を通常配置します(積み重ねなし)。 パラメータ:物体の把持と同じです。
4. stack_put_object(image_x, image_y, height_z)
機能:物体を積み重ねて配置します。 パラメータ:物体の把持と同じです(推奨値 height_z = 30.0)。
方向移動(6 関数)
5-10. 方向移動関数
move_forward(distance) # 前へ移動
move_back(distance) # 後ろへ移動
move_left(distance) # 左へ移動
move_right(distance) # 右へ移動
move_up(distance) # 上へ移動
move_down(distance) # 下へ移動
パラメータ:
distance(float):移動距離(cm、正の数)
位置制御
11. move_to_position(target_x, target_y, target_z)
機能:絶対座標の位置へ移動します。 パラメータ:
target_x(float):目標 X 座標(50~180mm)target_y(float):目標 Y 座標(-80~80mm)target_z(float):目標 Z 座標(-50~140mm)
12. get_arm_position()
機能:ロボットアームの現在の位置座標を取得します。
システム管理ツール(2 種類)
1. get_system_status()
機能:システムの稼働状況と設定情報を取得します。
get_available_tools()
機能:利用可能なすべての MCP ツールの一覧と説明を取得します。
使用例
自然言語による操作
AI アシスタントを介して、ユーザーは自然言語でシステムを操作できます。
検出関連:
- 「現在のフレームにはどんな物体がありますか?」
- 「物体はいくつ検出されましたか?」
- 「赤い物体はいくつありますか?」
- 「物体はどこにありますか?」
- 「1 番目の物体の詳細を教えてください。」
ロボットアーム制御:
- 「(100, 50) の物体をつかんで」
- 「物体を (200, 100) の位置に置いて」
- 「アームを 5cm 前に動かして」
- 「初期位置に戻って」
- 「ロボットアームは今どこにありますか?」
プログラムからの呼び出し例
Python MCP クライアント
import asyncio
from mcp import ClientSession
async def control_arm():
async with ClientSession("http://localhost:8002/mcp/") as session:
# 検出データを取得
result = await session.call_tool("get_measurements")
if result["measurements"]:
obj = result["measurements"][0]
x, y = obj["position"]["x"], obj["position"]["y"]
# 物体を把持
await session.call_tool("catch_object", {
"image_x": x,
"image_y": y,
"height_z": -50.0
})
asyncio.run(control_arm())
安全上の制限
ロボットアームの動作範囲の制限
- X 軸:50~180mm
- Y 軸:-80~80mm
- Z 軸:-50~140mm
エラー処理
制限を超える操作では、すべてエラーメッセージが返されます。
{
"error": "ロボットアームの X 座標 200mm が制限範囲外です(有効範囲:50-180mm)",
"success": false
}
同時実行制御
- ロボットアーム制御関数:競合を避けるため逐次実行
- 検出関数:同時アクセスに対応
- システム状態:リアルタイムに同期
MCP クライアントの設定
Claude Desktop との連携
Claude Desktop の設定ファイルに次の内容を追加します。
{
"mcpServers": {
"vision-arm-control": {
"command": "node",
"args": ["path/to/mcp-client.js"],
"env": {
"MCP_SERVER_URL": "http://localhost:8002/mcp/"
}
}
}
}
カスタム MCP クライアント
// mcp-client.js
const { MCPClient } = require('@modelcontextprotocol/sdk');
const client = new MCPClient({
serverUrl: 'http://localhost:8002/mcp/'
});
client.connect().then(() => {
console.log('Connected to Vision Arm MCP Server');
});
監視とデバッグ
MCP ログの確認
# MCP サービスのログをリアルタイムで確認
tail -f logs/app.log | grep "MCP"
ツールの接続テスト
# MCP サービスが稼働しているかテスト
curl http://localhost:8002/mcp/
# ツール一覧の取得をテスト
curl -X POST http://localhost:8002/mcp/ \
-H "Content-Type: application/json" \
-d '{"method": "tools/list", "params": {}}'
デバッグモード
環境変数を設定すると、詳細なログ出力が有効になります。
export VISION_ARM_LOGGING_CONSOLE_LEVEL=DEBUG
python -m vision_arm_mcp.main
拡張開発
新しいツール関数の追加
mcp_service.pyに新しいツールを登録します。
@self.mcp.tool()
async def new_function(param1: str, param2: int) -> dict:
"""新しいツール関数の説明"""
# 機能を実装
return {"result": "success"}
- MCP サーバーを再起動して変更を反映します。
カスタムエラー処理
try:
result = await some_operation()
return {"success": True, "data": result}
except Exception as e:
return {"success": False, "error": str(e)}
パフォーマンスの最適化
- 同時実行数の制限:ロボットアームの操作は同時実行数 1 に制限
- キャッシュ機構:検出結果を 30 秒間キャッシュ
- コネクションプール:HTTP クライアントの接続を再利用
- 非同期処理:すべての I/O 処理を非同期で実行
情報交換コミュニティ
資料のダウンロード・技術サポートについては、HumansX株式会社までお問い合わせください。
ドキュメント