Поделиться через


Использование средств MCP с агентами Foundry

Вы можете расширить возможности агента Azure AI Foundry, подключив его к средствам, размещенным на серверах удаленного протокола контекста модели (MCP), (приведя собственную конечную точку сервера MCP).

Использование средства протокола контекста модели

В этом разделе объясняется, как создать агент ИИ с помощью Azure Foundry (Azure AI) с интеграцией сервера размещенного протокола контекста модели (MCP). Агент может использовать средства MCP, управляемые и выполняемые службой Azure Foundry, что позволяет обеспечить безопасный и контролируемый доступ к внешним ресурсам.

Ключевые функции

  • Размещенный сервер MCP: сервер MCP размещается и управляется Azure AI Foundry, устраняя необходимость управления инфраструктурой сервера
  • Постоянные агенты: агенты создаются и хранятся на стороне сервера, что позволяет беседам с отслеживанием состояния
  • Рабочий процесс утверждения средства: настраиваемые механизмы утверждения для вызовов инструментов MCP

Принцип работы

1. Настройка среды

Для примера требуются две переменные среды:

  • AZURE_FOUNDRY_PROJECT_ENDPOINT: URL-адрес конечной точки проекта Azure AI Foundry
  • AZURE_FOUNDRY_PROJECT_MODEL_ID: имя развертывания модели (по умолчанию — gpt-4.1-mini)
var endpoint = Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_ENDPOINT") 
    ?? throw new InvalidOperationException("AZURE_FOUNDRY_PROJECT_ENDPOINT is not set.");
var model = Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_MODEL_ID") ?? "gpt-4.1-mini";

2. Конфигурация агента

Агент настраивается с определенными инструкциями и метаданными:

const string AgentName = "MicrosoftLearnAgent";
const string AgentInstructions = "You answer questions by searching the Microsoft Learn content only.";

Это создает агент, специализированный для ответов на вопросы с помощью документации Microsoft Learn.

3. Определение инструмента MCP

В примере создается определение инструмента MCP, указывающее на размещенный сервер MCP:

var mcpTool = new MCPToolDefinition(
    serverLabel: "microsoft_learn",
    serverUrl: "https://learn.microsoft.com/api/mcp");
mcpTool.AllowedTools.Add("microsoft_docs_search");

Ключевые компоненты:

  • serverLabel: уникальный идентификатор для экземпляра сервера MCP
  • serverUrl: URL-адрес размещенного сервера MCP
  • AllowedTools: указывает, какие средства на сервере MCP могут использовать агент.

4. Создание постоянного агента

Агент создается на стороне сервера с помощью пакета SDK постоянных агентов Azure AI Foundry:

var persistentAgentsClient = new PersistentAgentsClient(endpoint, new AzureCliCredential());

var agentMetadata = await persistentAgentsClient.Administration.CreateAgentAsync(
    model: model,
    name: AgentName,
    instructions: AgentInstructions,
    tools: [mcpTool]);

При этом создается постоянный агент, который:

  • Живет в службе Azure AI Foundry
  • Имеет доступ к указанным средствам MCP
  • Может поддерживать состояние беседы в нескольких взаимодействиях

5. Извлечение и выполнение агента

Созданный агент извлекается как AIAgent экземпляр:

AIAgent agent = await persistentAgentsClient.GetAIAgentAsync(agentMetadata.Value.Id);

6. Конфигурация ресурсов средства

Пример настраивает ресурсы средства с параметрами утверждения:

var runOptions = new ChatClientAgentRunOptions()
{
    ChatOptions = new()
    {
        RawRepresentationFactory = (_) => new ThreadAndRunOptions()
        {
            ToolResources = new MCPToolResource(serverLabel: "microsoft_learn")
            {
                RequireApproval = new MCPApproval("never"),
            }.ToToolResources()
        }
    }
};

Конфигурация ключа:

  • MCPToolResource: связывает экземпляр сервера MCP с выполнением агента
  • RequireApproval: управляет, когда требуется утверждение пользователя для вызовов инструментов
    • "never": средства выполняются автоматически без утверждения
    • "always": для всех вызовов инструментов требуется утверждение пользователя
    • Настраиваемые правила утверждения также можно настроить

7. Выполнение агента

Агент вызывается с вопросом и выполняется с помощью настроенных средств MCP:

AgentThread thread = agent.GetNewThread();
var response = await agent.RunAsync(
    "Please summarize the Azure AI Agent documentation related to MCP Tool calling?", 
    thread, 
    runOptions);
Console.WriteLine(response);

8. Очистка

В примере демонстрируется правильная очистка ресурсов:

await persistentAgentsClient.Administration.DeleteAgentAsync(agent.Id);

Интеграция Azure AI Foundry MCP с Python

Azure AI Foundry обеспечивает простую интеграцию с серверами протокола MCP модели с помощью платформы агента Python. Служба управляет размещением и выполнением сервера MCP, устраняя управление инфраструктурой, обеспечивая безопасный, контролируемый доступ к внешним средствам.

Настройка среды

Настройте учетные данные проекта Azure AI Foundry с помощью переменных среды:

import os
from azure.identity.aio import AzureCliCredential
from agent_framework.azure import AzureAIAgentClient

# Required environment variables
os.environ["AZURE_AI_PROJECT_ENDPOINT"] = "https://<your-project>.services.ai.azure.com/api/projects/<project-id>"
os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"] = "gpt-4o-mini"  # Optional, defaults to this

Базовая интеграция MCP

Создайте агент Azure AI Foundry с размещенными средствами MCP:

import asyncio
from agent_framework import HostedMCPTool
from agent_framework.azure import AzureAIAgentClient
from azure.identity.aio import AzureCliCredential

async def basic_foundry_mcp_example():
    """Basic example of Azure AI Foundry agent with hosted MCP tools."""
    async with (
        AzureCliCredential() as credential,
        AzureAIAgentClient(async_credential=credential) as chat_client,
    ):
        # Enable Azure AI observability (optional but recommended)
        await chat_client.setup_azure_ai_observability()

        # Create agent with hosted MCP tool
        agent = chat_client.create_agent(
            name="MicrosoftLearnAgent", 
            instructions="You answer questions by searching Microsoft Learn content only.",
            tools=HostedMCPTool(
                name="Microsoft Learn MCP",
                url="https://learn.microsoft.com/api/mcp",
            ),
        )

        # Simple query without approval workflow
        result = await agent.run(
            "Please summarize the Azure AI Agent documentation related to MCP tool calling?"
        )
        print(result)

if __name__ == "__main__":
    asyncio.run(basic_foundry_mcp_example())

Настройка MCP с несколькими инструментами

Используйте несколько размещенных средств MCP с одним агентом:

async def multi_tool_mcp_example():
    """Example using multiple hosted MCP tools."""
    async with (
        AzureCliCredential() as credential,
        AzureAIAgentClient(async_credential=credential) as chat_client,
    ):
        await chat_client.setup_azure_ai_observability()

        # Create agent with multiple MCP tools
        agent = chat_client.create_agent(
            name="MultiToolAgent",
            instructions="You can search documentation and access GitHub repositories.",
            tools=[
                HostedMCPTool(
                    name="Microsoft Learn MCP",
                    url="https://learn.microsoft.com/api/mcp",
                    approval_mode="never_require",  # Auto-approve documentation searches
                ),
                HostedMCPTool(
                    name="GitHub MCP", 
                    url="https://api.github.com/mcp",
                    approval_mode="always_require",  # Require approval for GitHub operations
                    headers={"Authorization": "Bearer github-token"},
                ),
            ],
        )

        result = await agent.run(
            "Find Azure documentation and also check the latest commits in microsoft/semantic-kernel"
        )
        print(result)

if __name__ == "__main__":
    asyncio.run(multi_tool_mcp_example())

Платформа агента Python обеспечивает простую интеграцию с размещенными возможностями MCP Azure AI Foundry, обеспечивая безопасный и масштабируемый доступ к внешним средствам при сохранении гибкости и контроля, необходимых для рабочих приложений.

Дальнейшие шаги