先日、Azure AI Foundry Agent ServiceでModel Context Protocol (MCP)をtoolとしての利用がサポートされたので、試してみました。
今回は、Python SDKを使い、MCP toolを利用するエージェントの実装方法を記載します。
環境変数の設定
次の環境変数を設定します。
※ 値は適切なものに書き換えてください。
PROJECT_ENDPOINT="https://<resource_name>/api/projects/<project_name>" MODEL_DEPLOYMENT_NAME="<model_deployment_name>" MCP_SERVER_URL="<mcp_url>" MCP_SERVER_LABEL="<mcp_server_label>"
実装
次のコードでMCP toolを利用するエージェントを作成し、実行することができます。
※ MCP serverはMicrosoft Learn Docs MCP Server(GitHub - MicrosoftDocs/mcp)を利用します。
コード
import os, time, json from dotenv import load_dotenv from azure.identity import DefaultAzureCredential from azure.ai.projects import AIProjectClient from azure.ai.agents.models import McpTool, MessageTextContent, ListSortOrder, RequiredMcpToolCall, SubmitToolApprovalAction, ToolApproval # ─── 環境変数読み込み ─────────────────────────────── #load_dotenv() #.envなどに環境変数を設定している場合に利用 PROJECT_ENDPOINT = os.environ["PROJECT_ENDPOINT"].rstrip("/") MODEL_DEPLOYMENT = os.getenv("MODEL_DEPLOYMENT_NAME", "gpt-4o-mini") MCP_SERVER_URL = os.environ["MCP_SERVER_URL", "https://learn.microsoft.com/api/mcp"] MCP_SERVER_LABEL = os.getenv("MCP_SERVER_LABEL", "Microsoft_Docs_MCP_Server") # 英数+ _ のみ (^[a-zA-Z0-9_]+$) #MCP_API_KEY = os.getenv("MCP_API_KEY") # keyなどを利用する場合 # ─── クライアント生成 ─────────────────────────────── credential = DefaultAzureCredential() project_client = AIProjectClient( endpoint=PROJECT_ENDPOINT, credential=credential, ) mcp_tool = McpTool( server_label=MCP_SERVER_LABEL, server_url=MCP_SERVER_URL, allowed_tools=[], # Optional: specify allowed tools ) with project_client: # エージェント作成 (MCP ツール付き) ------------------------------ agents_client = project_client.agents #agent = project_client.agents.create_agent agent = agents_client.create_agent( model=MODEL_DEPLOYMENT, name="ms-docs-mcp-agent", instructions=( "You are a helpful assistant. Always use the tools provided to answer the user's questions. Be sure to cite your sources." ), tools=mcp_tool.definitions, #tool_resources=None, ) print("Created agent →", agent.id) # スレッド生成 --------------------------------------------------- thread = project_client.agents.threads.create() print(f"Created thread, ID: {thread.id}") # ユーザーメッセージ追加 --------------------------------------- question = "Azure AI Foundryの最新のアップデート情報を教えてください。" message = agents_client.messages.create( thread_id=thread.id, role="user", content=question, ) print(f"Created message, ID: {message.id}") # Handle tool approvals #mcp_tool.update_headers("SuperSecret", "123456") mcp_tool.set_approval_mode("never") # Uncomment to disable approval requirements run = agents_client.runs.create(thread_id=thread.id, agent_id=agent.id, tool_resources=mcp_tool.resources) print(f"Created run, ID: {run.id}") # Run 完了までポーリング ---------------------------------------- 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("Run status:", run.status) if run.status == "failed": raise RuntimeError(f"Run failed: {run.last_error}") # メッセージ取得 ------------------------------------------------- msgs = project_client.agents.messages.list(thread_id=thread.id, order=ListSortOrder.ASCENDING) for m in msgs: last = m.content[-1] if isinstance(last, MessageTextContent): print(f"{m.role}: {last.text.value}") # クリーンアップ (任意) ---------------------------------------- project_client.agents.delete_agent(agent.id) print("Deleted agent →", agent.id)
実行結果
Created agent → asst_QzDGzrejbw4Tc9ZBQNn9MjMd Created thread, ID: thread_clfCFNSdKKmxWaqmZ3ffrEzT Created message, ID: msg_bg0nR3GqqZWsDZO83A4oouGx Created run, ID: run_Q2FuvQye4ctkfQaLpvZ3oLGj Run status: RunStatus.IN_PROGRESS Run status: RunStatus.IN_PROGRESS Run status: RunStatus.IN_PROGRESS Run status: RunStatus.IN_PROGRESS Run status: RunStatus.IN_PROGRESS Run status: RunStatus.IN_PROGRESS Run status: RunStatus.IN_PROGRESS Run status: RunStatus.COMPLETED MessageRole.USER: Azure AI Foundryの最新のアップデート情報を教えてください。 MessageRole.AGENT: Azure AI Foundryの最新のアップデート情報をまとめると、以下のようになります。 ### 2025年6月の主なアップデート - **Azure OpenAIモデルの新リリース**として、「codex-mini」や「o3-pro」が追加されました。詳細は[こちら](https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/reasoning)。 - **Sora動画生成モデルのプレビューリリース**があり、テキスト指示からリアルな動画シーンを生成可能です。詳しくは[クイックスタート](https://learn.microsoft.com/en-us/azure/ai-services/openai/video-generation-quickstart)へ。 - **Prompt shieldsのスポットライティング**による誘導保護強化が行われています。 - **モデルルーター(プレビュー)**により、最適なチャットモデルを自動選択する機能が追加されました。詳細は[こちら](https://learn.microsoft.com/en-us/azure/ai-foundry/openai/concepts/model-router)。 ### 2024年8月のアップデート - **GPT-4oモデルの新バージョン(2024-08-06)**が公開され、多彩な構造化出力サポートや最大トークン数が引き上げられました。 - **Azure AI Foundry Agent Service**が一般公開され、多機能なエージェント開発・管理ツールが整備されました。 - **モデル評価ガイド**や**Azureリソースの診断・監視**のサポートが充実しています。 ### 2025年4月のリリース - **リアルタイムAPIのWebRTC対応**により、音声ストリーミングや低遅延のインタラクションが可能に。 - **GPT-image-1(画像生成モデル)**がプレビューリリース。 - **新規リリースの reasoning models(o4-mini, o3)**と、**GPT-4.1シリーズ**、および音声モデル群も登場しています。 ### 2022年12月のアップデート - 最新のOpenAIモデルへのアクセスと、APIのバージョンアップ。 - 高速デプロイやトレーニング制限の引き上げ、顧客管理キー(CMK)によるデータ暗号化など、多くの新機能と改善が含まれています。 これらの情報の詳細は各リンクから確認できます。特に最新のモデルやツールに関する詳細な情報は、次の公式ページがお勧めです: [Azure AI Foundryの最新情報ページ](https://learn.microsoft.com/en-us/azure/ai-foundry/openai/whats-new) ご質問があればどうぞ! Deleted agent → asst_QzDGzrejbw4Tc9ZBQNn9MjMd
Azure AI Foundryで実行したスレッドを確認すると、回答までの流れを確認可能です。ToolでMCPが利用されていることが確認できます。

既存のエージェントを利用するコード
次のコードでは、上記で作成したエージェントを既存のエージェントして呼び出し実行します。
※ 既存のエージェントを利用する場合でも、McpTool を使用し tool_resources を project_client.agents.runs.create に渡すことでツール呼び出しを行います。
import os import time from dotenv import load_dotenv from azure.identity import DefaultAzureCredential from azure.ai.projects import AIProjectClient from azure.ai.agents.models import McpTool, ListSortOrder, MessageTextContent # ─── 環境変数読み込み ───────────────────────────────────────── load_dotenv() PROJECT_ENDPOINT = os.environ["PROJECT_ENDPOINT"].rstrip("/") MODEL_DEPLOYMENT = os.getenv("MODEL_DEPLOYMENT_NAME", "gpt-4o-mini") MCP_SERVER_LABEL = os.getenv("MCP_SERVER_LABEL", "Microsoft_Docs_MCP_Server") # 英数+_ のみ # ─── クライアント生成 ─────────────────────────────────────── credential = DefaultAzureCredential() project_client = AIProjectClient(endpoint=PROJECT_ENDPOINT, credential=credential) # ─── MCP ツール定義 ───────────────────────────────────────── mcp_tool = McpTool( server_label=MCP_SERVER_LABEL, server_url="https://learn.microsoft.com/api/mcp", # 変更する場合は .env 側で指定 allowed_tools=[], # 必要に応じて制限 ) # ----------------------------------------------------------------------------- # メイン処理 # ----------------------------------------------------------------------------- with project_client: # 既存エージェントの取得 (無ければ新規作成) -------------------------- EXISTING_AGENT_ID = os.getenv("AGENT_ID") try: agent = project_client.agents.get_agent(agent_id=EXISTING_AGENT_ID) print("Use existing agent →", agent.id) except Exception: agent = project_client.agents.create_agent( model=MODEL_DEPLOYMENT, name="ms-docs-mcp-agent", instructions=( "You are a helpful assistant. Always use the tools provided to answer the user's " "questions. Be sure to cite your sources." ), tools=mcp_tool.definitions, ) print("Created agent →", agent.id) # スレッド取得 (無ければ新規作成) -------------------------------------- EXISTING_THREAD_ID = os.getenv("THREAD_ID") thread = None if EXISTING_THREAD_ID: try: thread = project_client.agents.threads.get(thread_id=EXISTING_THREAD_ID) print("Use existing thread →", thread.id) except Exception as e: print("Cannot get thread:", e) if not thread: thread = project_client.agents.threads.create() print("Created thread →", thread.id) # ユーザーメッセージ追加 --------------------------------------------- question = "Azure AI Foundryの最新のアップデート情報を教えてください。" message = project_client.agents.messages.create( thread_id=thread.id, role="user", content=question, ) print("Created message →", message.id) # Run 作成 ---------------------------------------------------------- mcp_tool.set_approval_mode("never") # 承認フローを無効化 (必要なら変更) run = project_client.agents.runs.create( thread_id=thread.id, agent_id=agent.id, tool_resources=mcp_tool.resources, ) print("Created run →", run.id) # 完了までポーリング ------------------------------------------------- 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("Run status:", run.status) if run.status == "failed": raise RuntimeError(f"Run failed: {run.last_error}") # 出力を表示 --------------------------------------------------------- msgs = project_client.agents.messages.list(thread_id=thread.id, order=ListSortOrder.ASCENDING) for m in msgs: last = m.content[-1] if isinstance(last, MessageTextContent): print(f"{m.role}: {last.text.value}") # (任意) クリーンアップ --------------------------------------------- # project_client.agents.delete_agent(agent.id) # print("Deleted agent →", agent.id)
終わりに
今回は、Azure AI Foundry Agent ServiceでMCP toolを利用する方法を記載しました。
MCPのツールを利用できるようになったので、エージェントの機能拡張を容易に行うことができるようになりました。
7月の一週目にもMCP toolを試したのですが、それからもアップデートにより短期間で内容が変わっているようでした。実際に試す際には、最新情報も併せてご確認いただければと思います。