モデル コンテキスト プロトコル サーバーとしてのデータ エージェント (プレビュー)

モデル コンテキスト プロトコル (MCP) は、AI システムが自分以外のツールやデータと接続できるようにする、AI ランドスケープの新たな標準です。 AIモデルが利用可能なものをどのように見つけて、一貫した方法でそれと対話できるかを定義します。 MCP は、1 回限りの統合を構築する代わりに、さまざまなアプリやサービス間で動作するものをプラグインする標準的な方法を提供します。 このアプローチにより、AI システムは、一貫性を保ちながら、組み込みの知識をはるかに簡単に超えやすくなります。 また、チームは毎回同じつながりを再発明する必要がないため、より迅速に移動するのにも役立ちます。

MCP には、クライアントとサーバーの 2 つの主要な部分があります。

MCP クライアントは、ユーザーが操作するアプリまたはエクスペリエンスです。 ここで質問したり、アクションをトリガーしたりします。 クライアントは MCP サーバーにアクセスしてツールを見つけて使用します。 たとえば、Visual Studio Codeは外部ツールに接続してデータを取得したり、コードを記述して実行したりするときに MCP クライアントとして機能できます。

MCP サーバーは、クライアントがツール、データ、またはサービスを使用できるように公開します。 使用できる内容と使用方法がクライアントに通知されます。 たとえば、Fabric データ エージェントは、AI システムが使用できるエンタープライズ データとクエリを公開することで、MCP サーバーとして機能できます。

クライアントとサーバーを組み合わせることで、毎回カスタム統合を構築することなく、AI システムを実際のデータとアクションに簡単に接続できます。

Important

この機能は プレビュー段階です

Important

Fabric データ エージェントを MCP サーバーとして使用する場合、データ エージェントによって返される応答は、Fabricのコンプライアンス境界または地理的リージョンの外部に送信され、使用する MCP クライアントの用語とデータ処理ポリシーに従って処理または格納される可能性があります。

[前提条件]

動作方法

パブリッシュされたFabric データ エージェントは、1 つの MCP ツールを公開します。 このツールはデータ エージェント自体を表しているため、MCP クライアントはそのツールに質問を送信し、データ エージェントが Fabric OneLake 内でアクセスできるデータに基づく回答を受け取ります。

クライアントはツールを呼び出すタイミングを決定するため、データ エージェントの説明が重要になります。 データ エージェントを発行すると、その説明は MCP サーバーがアドバタイズするツールの説明になります。 クライアントとオーケストレーターはその説明を読んで、データ エージェントを呼び出すタイミングと方法を決定するため、エージェントが知っていることを説明する明確で具体的な説明と、それに答えることができる質問の種類を記述します。

データ エージェント MCP サーバーは、1 つのツールまたはエディターだけでなく、任意の MCP クライアントから使用できます。 クライアントがストリーミング可能な HTTP 経由で MCP を読み上げ、有効なFabricベアラー トークンを要求にアタッチできる限り、接続できます。 次のセクションでは、2 つのクライアント (Python スクリプトとVisual Studio Code) を示します。 同じエンドポイントと同じトークンは、ビルドまたは採用する他の MCP クライアントに対して機能します。

MCP サーバーと通信するものは MCP を話す必要があるため、定義上は MCP クライアントとして機能します。 "MCP クライアント" という用語は、特定の製品または SDK を意味するものではありません。 これは、プロトコルに従う任意のコードを意味します。 エンドポイントは、任意の要求を送信できるプレーンな REST API ではありません。 接続は、MCP メッセージ フロー ( initialize ハンドシェイク、ツールを検出するための tools/list 呼び出し、質問を行う tools/call 要求) に従います。 MCP Python SDK などの SDK は、そのフローを自動的に処理しますが、要求がプロトコルに従っている限り、プレーン HTTP 経由で自分で実装することもできます。 ハンドシェイクとメッセージ形式をスキップする汎用 HTTP クライアントは機能しません。

データ エージェント MCP サーバーは、動的クライアント登録をサポートしていません。 クライアントは、プロトコルを介して自身を登録し、認証情報を自動的に取得することはできません。 代わりに、独自の認証フローを通じてFabric トークンを取得し、この記事の例に示すように各要求にアタッチします。

MCP サーバーの詳細を取得する

データ エージェントを発行したら、その 設定を 開き、[ モデル コンテキスト プロトコル ] タブに移動します。このタブには、次の情報が表示されます。

  • データ エージェント MCP サーバー名
  • MCP サーバー URL (この値をコピーします。すべてのクライアントで使用します)
  • データ エージェントの MCP ツール名
  • MCP サーバー ツールの説明

このタブから mcp.json ファイルをダウンロードして、その形式を読み取るクライアント (Visual Studio Code など) を構成することもできます。

データ エージェントの [MCP サーバー設定] タブを示すスクリーンショット。

ワークスペース ID とデータ エージェント ID から URL を自分で作成することもできます。

https://api.fabric.microsoft.com/v1/mcp/workspaces/{WorkspaceId}/dataagents/{DataAgentId}/agent
Placeholder 説明
{WorkspaceId} データ エージェントを含むFabric ワークスペースの ID。
{DataAgentId} 公開されたデータエージェントの ID。

手動で構築された URL は、データ エージェントを発行した後にのみ機能します。 エージェントが発行されていない場合、URL が正しい場合でも、エンドポイントはエラーを返します。

Authentication

MCP エンドポイントに対するすべての要求は、Fabricに対して認証する必要があります。 クライアントは、 Authorization ヘッダーにベアラー トークンをアタッチします。トークンには、ターゲット ワークスペースとデータ エージェントにアクセスするためのアクセス許可が必要です。 トークンは、ユーザー ID またはサービス プリンシパルを表すことができます。

トークンを取得する方法は、クライアントによって異なります。 Visual Studio Code では、対話的にサインインするよう求められます。 Python スクリプトでは、azure-identityなどのライブラリを使用してトークンを取得し、自分で要求ヘッダーに追加します。 クライアントが何であれ、 https://api.fabric.microsoft.com/.default スコープのトークンを要求します。

Python から接続する

この例では、スタンドアロン Python スクリプトからデータ エージェント MCP エンドポイントに接続し、ツールを検出し、質問を送信して、回答を出力します。 MCP Python SDKazure-identity ライブラリを使用します。

Python クライアントの前提条件

  • Python 3.10 以降。
  • mcp および azure-identity パッケージ。
  • Fabricにサインインする方法。 この例では、Azure CLIを使用します。 Azure CLIをインストールし、az loginを実行し、ワークスペースとデータ エージェントにアクセスできるアカウントでサインインします。

パッケージをインストールします。

pip install mcp azure-identity

クライアントをステップ バイ ステップでビルドする

次のセクションでは、スクリプトを一度に 1 つずつビルドします。 各ブロックは同じファイルを続行するため、1 つの .py ファイルに順番に貼り付けて実行できます。

ライブラリをインポートし、値を設定します。 ワークスペース ID、データ エージェント ID、および質問を独自の値に置き換えます。 mcp_urlは、前に説明したエンドポイント形式に従います。

import asyncio

from azure.identity import AzureCliCredential
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

workspace_id = "<your-workspace-id>"
data_agent_id = "<your-data-agent-id>"
question = "<your question>"

mcp_url = (
    f"https://api.fabric.microsoft.com/v1/mcp/workspaces/{workspace_id}"
    f"/dataagents/{data_agent_id}/agent"
)

トークンを取得し、認証ヘッダーを作成します。 AzureCliCredential は、 az loginからのサインインを再利用します。 ヘルパーは Fabric スコープのトークンを要求し、すべてのリクエストに含まれる Authorization ヘッダーとしてそれを返します。

credential = AzureCliCredential()


def get_auth_headers():
    token = credential.get_token("https://api.fabric.microsoft.com/.default")
    return {"Authorization": f"Bearer {token.token}"}

接続を開き、ツールを見つけて、質問します。 この関数は、認証ヘッダーを使用してストリーミング可能な HTTP 接続を開き、 initializeを使用して MCP ハンドシェイクを実行し、ツールを一覧表示して、データ エージェントが公開する 1 つのツールを読み取ります。 ツールの入力スキーマから質問引数の名前が見つかるので、ハードコーディングせず、ツールを呼び出して応答からテキストを収集します。

async def query_data_agent(question):
    headers = get_auth_headers()

    async with streamablehttp_client(mcp_url, headers=headers) as (read, write, _):
        async with ClientSession(read, write) as session:
            await session.initialize()

            # The data agent exposes a single tool. Discover it, then call it.
            tools = await session.list_tools()
            tool = tools.tools[0]
            question_arg = next(iter(tool.inputSchema["properties"]))

            result = await session.call_tool(tool.name, {question_arg: question})

            answers = [block.text for block in result.content if block.type == "text"]
            return "\n".join(answers)

それを実行し、回答を印刷します。 query_data_agent はコルーチンであるため、 asyncio.run は完了までドライブし、結果を返します。

answer = asyncio.run(query_data_agent(question))
print(answer)

スクリプトは、サーバーがアドバタイズする最初のツールを読み取り、ツールの入力スキーマから質問引数を検索するため、ツール名または引数名が変更されても動作し続けます。 どちらの値もハードコーディングする必要はありません。

Tip

AzureCliCredential は、 az loginで作成したサインインを読み取ります。 サービスまたはジョブでの実行など、無人で実行するには、代わりにサービス プリンシパルの資格情報を使用してください。たとえば ClientSecretCredentialDefaultAzureCredential です。 残りのコードは同じままです。

Visual Studio Code から接続する

Visual Studio Codeは MCP クライアントとして機能できます。 次の手順では、データ エージェント MCP サーバーを追加し、エディターから質問します。 これらの手順は 1 つの例です。エンドポイントとトークンは、他の MCP クライアントが使用するエンドポイントと同じです。

MCP サーバーを追加する

  1. Visual Studio Codeを開き、作業するフォルダーを選択します。

  2. 選択したフォルダーに .vscode フォルダーを作成します。

  3. .vscode 内に、mcp.jsonという名前のファイルを作成します。

  4. Visual Studio Codeウィンドウの右下に青い [サーバーの追加] ボタンが表示されます。

    MCP サーバーの json ファイルを示すスクリーンショット。

  5. [ サーバーの追加] を選択し、[ HTTP] を選択します。 URL の入力を求められたら、先ほどコピーした MCP サーバーの URL を 貼り付けます。

    HTTP の選択を示すスクリーンショット。

    MCP サーバーの URL を入力する場所を示すスクリーンショット。

  6. Enter キーを押し、サーバーの名前を指定します。 Visual Studio Codeはこの名前を使用してサーバーを表示します。

  7. Visual Studio Codeは認証を試みます。 [ 許可] を選択し、資格情報でサインインします。

サーバーが作成されます。

データ エージェントの MCP ファイルを示すスクリーンショット。

エージェント モードを有効にする

サーバーを追加したら、エージェント モードを有効にして、Visual Studio Codeが質問をデータ エージェントにルーティングできるようにします。

  1. コマンド パレットを開きます (Ctrl + Shift + P または Cmd + Shift + P)。

  2. [エージェント モードの有効化] を検索して選択します。

  3. モードをアクティブ化するためのプロンプトを確認します。

    エージェント モードのVisual Studio Codeデータ エージェントを示すスクリーンショット。

エージェント モードがアクティブな場合は、質問を処理するオーケストレーターを選択します。 オーケストレーターは、エディター内の質問とデータ エージェント MCP サーバーの間のフローを管理します。 プレビューで使用可能なオーケストレーターには、GPT-5、GPT-4.1、Claude Sonnet 4.5、Gemini 2.5 Pro などがあります。

質問する

エージェント モードがオンでオーケストレーターが選択されている状態で、エディターから直接質問します。 オーケストレーターは各質問をデータ エージェント MCP サーバーにルーティングし、エージェントは OneLake でアクセスできるデータに基づいている回答を返します。 組織の知識をAIワークフローに活用しながら、エディターを離れることなく作業できます。