HumansXドキュメントセンター 公式サイトへ ↗

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

拡張開発

新しいツール関数の追加

  1. mcp_service.py に新しいツールを登録します。
@self.mcp.tool()
async def new_function(param1: str, param2: int) -> dict:
    """新しいツール関数の説明"""
    # 機能を実装
    return {"result": "success"}
  1. 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株式会社までお問い合わせください。