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
3. trigger_yolo_detection()
機能: YOLOモードで物体検出を行い、検出モードを切り替えます。
4. trigger_vlm_detection(prompt)
機能: VLMモードで物体検出を行います。 パラメーター:
prompt(str): VLM検出用のプロンプト
注意: VLM検出機能を使用するにはSiliconFlowのAPIキーの設定が必要です。詳しい設定方法は SiliconFlow API_KEYの取得 を参照してください。
🤖 ロボットアーム制御ツール(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): 移動距離(センチメートル、正の数)
位置制御
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()
機能: システムの稼働状態と設定情報を取得します。
2. 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株式会社までお問い合わせください。
ドキュメント