Skip to content

動的なツール登録

動的なツール登録により、MCPサーバーはDataRobotのデプロイを検出し、それらをMCPツールとして自動的に公開できます。 ツールが呼び出されると、サーバーはリクエストを登録済みのデプロイに転送します。

この機能は、DataRobot MCPのテンプレートDataRobot Agentic Starterのテンプレートを使用して構築されたMCPサーバーで利用できます。 MCPサーバーの設定とエージェントの統合については、MCPサーバーを使用してツールを統合するを参照してください。

クイックスタート

  1. モデルまたはサービスをDataRobotにデプロイします。
  2. デプロイに、タグ名とタグ値の両方をtoolとして設定します。
  3. 必要に応じて、動的なツール登録を有効にしてサーバーを起動します。

起動時の自動検出を有効にするには(オプション):

MCP_SERVER_REGISTER_DYNAMIC_TOOLS_ON_STARTUP=true 

ほとんどのデプロイタイプでは、追加の設定は必要ありません。

サポートされているデプロイのタイプ

デプロイのタイプ 必要な設定
DataRobotのネイティブ予測モデル なし。 デプロイにtoolというタグを付けます。
DRUMの構造化予測 なし。 必要に応じて、model-metadata.yaml内でinputSchemaを定義します。
DRUMのエージェントワークフロー なし。 必要に応じて、model-metadata.yaml内でinputSchemaを定義します。
DRUMの非構造化モデル model-metadata.yaml内でinputSchemaを定義します。
FastAPIサービスなどのカスタムサーバー ツールのメタデータを含む/info/エンドポイントを公開します。

動的なツール登録によって他のMCPサーバーをツールとして登録することはサポートされていません。

登録の要件

すべてのデプロイは、以下の条件を満たす必要があります。

  • アクティブであること。
  • 名前と値の両方にtoolというタグが付けられていること。

その他の要件は、デプロイのタイプによって異なります。

  • DataRobotのネイティブモデル:追加の要件はありません。
  • DRUMの非構造化モデルmodel-metadata.yaml内でinputSchemaを定義してください。
  • カスタムサーバー/info/を公開し、endpointmethod、およびinput_schemaを返してください。

ランタイムAPI

実行時に登録を管理するには、MCPサーバーでこれらのエンドポイントを使用します。

  • GET /registeredDeployments:登録済みのツールを一覧表示します。
  • PUT /registeredDeployments/{deployment_id}:ツールを登録します。
  • DELETE /registeredDeployments/{deployment_id}:ツールを削除します。

たとえば、GET /registeredDeploymentsエンドポイントは次のように実装できます。

List registered deployments (excerpt)
@mcp.custom_route(prefix_mount_path("/registeredDeployments"), methods=["GET"])
async def list_deployments(_: Request) -> JSONResponse:
    """List all deployments."""
    try:
        deployments = await get_registered_tool_deployments()
        formatted_deployments = [
            {"deploymentId": k, "toolName": v} for k, v in deployments.items()
        ]
        return JSONResponse(
            status_code=HTTPStatus.OK,
            content={
                "deployments": formatted_deployments,
                "count": len(deployments),
            },
        )
    except Exception as e:
        return JSONResponse(
            status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
            content={"error": f"Failed to retrieve deployments: {str(e)}"},
        ) 

DRUMのデプロイ

DataRobot DRUMのデプロイは、通常、追加の設定をほとんど、あるいはまったく行わなくても正常に動作します。

ゼロ設定(ほとんどの場合)

これらのデプロイタイプについては、デプロイにtoolというタグを付けると、サーバーが自動的に登録します。

  • 二値モデル、連続値モデル、多クラスモデルなどの構造化予測。
  • エージェントのワークフロー。
  • DataRobotのネイティブ予測モデル。

非構造化モデル

ターゲットタイプがunstructuredの場合は、model-metadata.yamlinputSchemaを追加します。

model-metadata.yaml
name: "Fetch dataset"
description: "Fetches a dataset from DataRobot Data Registry"
type: inference
targetType: unstructured
inputSchema:
  type: object
  properties:
    json:
      type: object
      properties:
        dataset_id:
          type: string
          description: Dataset ID from Data Registry
        limit:
          type: integer
          default: 100
      required:
        - dataset_id 

非構造化モデルのスキーマ

  • 非構造化モデルの場合は、jsonプロパティの下にリクエストパラメーターを定義します。
  • model-metadata.yamlから入力スキーマを公開するには、datarobot-drumバージョン1.17.2以降が必要です。

オプションのカスタムスキーマ

フォールバックスキーマをオーバーライドすることで、LLMに対してより適切な指針を示したり、リクエストの形式をより厳密に制御したりすることができます。

model-metadata.yaml (custom inputSchema)
inputSchema:
  type: object
  properties:
    data:
      type: string
      description: "CSV with columns: transaction_amount, user_age, merchant_category"
  required:
    - data 

カスタムサーバーのデプロイ

FastAPI、Flask、および類似のサービスについては、ツールのメタデータを返す/info/エンドポイントを公開してください。

必須の/info/レスポンス

{
  "endpoint": "directAccess/weather/{city}",
  "method": "GET",
  "input_schema": {
    "type": "object",
    "properties": {
      "path_params": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string",
            "description": "City name"
          }
        },
        "required": ["city"]
      }
    }
  }
} 

FastAPIの例

FastAPI custom server (excerpt)
from fastapi import FastAPI
from pydantic import BaseModel, Field

app = FastAPI()

class WeatherRequest(BaseModel):
    class PathParams(BaseModel):
        city: str = Field(description="City name")

    class QueryParams(BaseModel):
        units: str = Field(default="metric", description="metric or imperial")

    path_params: PathParams
    query_params: QueryParams | None = None

@app.get("/info/")
async def metadata():
    return {
        # Custom model deployments expose custom server routes behind directAccess/.
        "endpoint": "directAccess/weather/{city}",
        "method": "GET",
        "input_schema": WeatherRequest.model_json_schema(),
    }

@app.get("/weather/{city}")
async def get_weather(city: str, units: str = "metric"):
    return {"city": city, "temp": 22, "units": units} 

リクエストのマッピング

次のようなツール呼び出しがある場合:

{
  "path_params": {"city": "paris"},
  "query_params": {"units": "imperial"}
} 

MCPサーバーは次のようなリクエストを生成します。

GET <base_url>/directAccess/weather/paris?units=imperial 

各パラメーターについて説明します。

  • base_urlはDataRobotのデプロイURLから派生します。
  • directAccess/は、カスタムモデルのデプロイにおけるカスタムサーバーエンドポイントに使用されるプレフィックスです。

入力スキーマのリファレンス

パラメーターグループ

パラメーターは、次のようにHTTPリクエストに対応付けられます。

グループ 目的
path_params URLパスに値を代入します。 {city}"paris"
query_params クエリー文字列のパラメーターを追加します。 ?units=imperial
data CSVなどの生のリクエスト本文を送信します。 天気予報の例では使用されていません。
json JSONのリクエスト本文を送信します。 天気予報の例では使用されていません。

ルール

  • path_paramsquery_paramsはフラットなオブジェクトにする必要があります。
  • datajsonにはネストされた構造を含めることができます。
  • エンドポイント内のすべての{param}が、path_paramsに含まれている必要があります。
  • 空のスキーマは、MCP_SERVER_TOOL_REGISTRATION_ALLOW_EMPTY_SCHEMA=trueの場合にのみ許可されます。

サーバーの動作

内部的には、MCPサーバーはツールからの呼び出しをHTTPリクエストに変換します。 天気予報の例の場合、リクエストは次のようになります。

async with session.request(
    method="GET",
    url="<base_url>/directAccess/weather/paris",
    params={"units": "imperial"},
) as response:
    return await response.json() 

トラブルシューティング

ツールが登録されない

以下のコマンドを使用して、デプロイ状況を調査し、DRUMまたはカスタムサーバーの場合は/info/エンドポイントをテストします。

# Check that the deployment is active and tagged correctly.
curl -H "Authorization: Bearer $DATAROBOT_API_TOKEN" \
  "$DATAROBOT_ENDPOINT/api/v2/deployments/{deployment-id}/" | jq .

# Check the /info/ endpoint for DRUM and custom server deployments.
curl -H "Authorization: Bearer $DATAROBOT_API_TOKEN" \
  "$DATAROBOT_ENDPOINT/api/v2/deployments/{deployment-id}/directAccess/info/" | jq . 

Common errors

エラー Fix
input_schemaがない カスタムサーバーの場合は/info/レスポンスにinput_schemaを追加し、DRUMの非構造化モデルの場合はmodel-metadata.yamlinputSchemaを追加します。
トップレベルのプロパティがサポートされていない path_paramsquery_paramsdata、およびjsonのみを使用します。
path_paramsにネストされた構造がある 構造をフラットにするか、jsonに移動します。
パスパラメーターがない エンドポイントで使われているすべてのパス変数をpath_params内で定義します。

その他のリソース