見出し画像

Azure AI Foundry Agent ServiceでModel Context Protocol Supportを 発表 (Preview)

ついに、AI Foundry Agent Service がMCP クライアントになったとのことで注目してみた。

`


Generative-AI エージェントは「行動できてこそ」価値を持つ

システム・オブ・レコードへのクエリ、ワークフローのトリガー、専門知識の検索──これらを行うには、これまでは Azure Functions を手作業で用意したり、OpenAPI 仕様を管理したり、バックエンドごとにカスタム プラグインを書いたりする必要がありました。

MCP が変えるエコノミクス

Model Context Protocol (MCP) は、Anthropic が最初に提案した オープンな JSON-RPC ベースのプロトコル です。
「サーバー」がツール(関数)やリソース(コンテキスト)を一度公開すれば、準拠したどの「クライアント」(エージェント実行環境)からでも自動で発見・呼び出しが可能になります。
要するに 「AI 統合の USB-C」 のような存在です。


Foundry Agent Service が MCP クライアントに

本日のプレビューにより、Foundry Agent Service が MCP クライアントとして正式対応しました。
セルフホストでも SaaS でも、任意のリモート MCP サーバーを持ち込めば、Azure AI Foundry がその機能を数秒でインポートし、更新を維持し、エンタープライズ向けのエンベロープを通じて呼び出しをルーティングします。


Model Context Protocol (MCP) とは

MCP は、開発者・組織・サービスプロバイダーが MCP サーバー 上でサービスや API をホストし、
MCP 互換クライアント(Foundry Agent Service など)へツールを簡単に公開・接続できる オープン標準 です。

Foundry Agent Service が MCP をサポートすることで、次のようなメリットがあります。

  • サービスや API を簡単に統合
    内部サービスでも外部プロバイダーの API でも、カスタム関数なしで Foundry Agent Service に接続可能。

  • エンタープライズ機能を強化
    Foundry Agent Service の「Bring Your Own thread storage」など、企業向け機能をエージェントに付与。


コードサンプル

以下のサンプルは、Azure AI Foundry で MCP サーバーをツールとして追加し、スレッドを作成して実行結果を取得するまでの流れを示します。

ただし、以下が注意事項で私もハマったので要注意
自身で作ったりしてるものではなく、Basic Agent setupなど以下対応しているもので新たにデプロイしてから検証することをお勧めします。

https://learn.microsoft.com/ja-jp/azure/ai-foundry/agents/environment-setup

ステップ 1: 必要なパッケージをインポート

import time
import json

from azure.ai.agents.models import MessageTextContent, ListSortOrder
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential

ステップ 2: AI Project Client を作成し、Azure AI Foundry エージェントを生成

project_client = AIProjectClient(
    endpoint=PROJECT_ENDPOINT,
    credential=DefaultAzureCredential()
)

with project_client:
    agent = project_client.agents.create_agent(
        model=MODEL_DEPLOYMENT_NAME, 
        name="my-mcp-agent", 
        instructions="You are a helpful assistant. Use the tools provided to answer the user's questions. Be sure to cite your sources.",
        tools=[
            {
                "type": "mcp",
                "server_label": <name of your choice for the mcp server>,
                "server_url": <url of the remote MCP server>,
                "require_approval": "never"
            }
        ],
        tool_resources=None
    )
    print(f"Created agent, agent ID: {agent.id}")

ステップ 3: スレッド・メッセージ・ランを作成

server_label を指定することで、特定の MCP サーバーへマッピングできます。

    thread = project_client.agents.threads.create()
    print(f"Created thread, thread ID: {thread.id}")

    message = project_client.agents.messages.create(
        thread_id=thread.id,
        role="user",
        content="<a question for your MCP server>",
    )
    print(f"Created message, message ID: {message.id}")

    run = project_client.agents.runs.create(
        thread_id=thread.id,
        agent_id=agent.id
    )

ステップ 4: ランを実行しメッセージを取得

    # ステータスが queued または in_progress の間ポーリング
    while run.status in ["queued", "in_progress", "requires_action"]:
        time.sleep(1)
        run = project_client.agents.runs.get(
            thread_id=thread.id,
            run_id=run.id
        )
        print(f"Run status: {run.status}")

    if run.status == "failed":
        print(f"Run error: {run.last_error}")

    run_steps = project_client.agents.run_steps.list(
        thread_id=thread.id,
        run_id=run.id
    )
    for step in run_steps:
        print(f"Run step: {step.id}, status: {step.status}, type: {step.type}")
        if step.type == "tool_calls":
            print("Tool call details:")
            for tool_call in step.step_details.tool_calls:
                print(json.dumps(tool_call.as_dict(), indent=2))

    messages = project_client.agents.messages.list(
        thread_id=thread.id,
        order=ListSortOrder.ASCENDING
    )
    for data_point in messages:
        last_message_content = data_point.content[-1]
        if isinstance(last_message_content, MessageTextContent):
            print(f"{data_point.role}: {last_message_content.text.value}")

ステップ 5: クリーンアップ

    project_client.agents.delete_agent(agent.id)
    print(f"Deleted agent, agent ID: {agent.id}")

AI Foundry Portal側にて

一度作成したら、エージェントプレイグラウンドでも利用可能!

スレッドログ

MCP内

重要事項

  • Microsoft 以外のサービスと接続する場合、その利用条件は 利用者とサービス プロバイダー間の契約 に従います。

  • 非 Microsoft サービスに接続すると、一部のデータ(プロンプト内容など)が当該サービスへ送信される、または当該サービスからアプリに戻る場合があります。使用料等は利用者の責任となります。

  • この MCP ツールで接続するリモート MCP サーバーは 第三者によって構築 されており、Microsoft によるテストや検証は行われていません。Microsoft はこれらのサーバー利用に関して一切の責任を負いません。

  • 信頼できるサービス プロバイダー自身がホストするサーバー を利用し、プロキシ経由は避けることを推奨します。

  • 認証キーやスキーマなどの カスタム ヘッダー を渡せます。共有データを精査し、必要に応じて監査ログを取得してください。

  • Microsoft 以外のデータ保持・保存場所ポリシーにも留意してください。

注意事項

  • 既存の MCP サーバー エンドポイント をご用意ください。

  • 現行の MCP ツールでは require_approval は never のみ 対応しています。追加する MCP サーバーを十分に精査してください。

  • サポート リージョン: westus, westus2, uaenorth, southindia, switzerlandnorth

  • MCP ツールのカスタム ヘッダーは 現在のランのみ有効 で、保存はされません。

Microsoft Build 2025 での発表

Satya Nadella は Build 2025 で 「オープン・バイ・デザイン」 な AI エコシステムを強調し、
Anthropic と提携して Model Context Protocol (MCP) を Windows 11、GitHub、Copilot Studio、Azure AI Foundry で標準化すると発表しました。

今回の Foundry Agent Service における MCP プレビュー対応は、その旅の次の一歩です。
任意の MCP サーバーをクラウドホスト型エージェントに 「一度接続すればどこでも統合」 でき、カスタムコードは一切不要になります。

さあ、Azure AI Foundry で始めよう


いいなと思ったら応援しよう!