Начало работы с сервером Azure MCP с .NET

Сервер Azure MCP использует протокол MCP для стандартизации интеграции между приложениями ИИ и внешними инструментами и источниками данных, что позволяет системам ИИ выполнять операции с учетом контекста ресурсов Azure.

Из этой статьи вы узнаете, как выполнить следующие задачи:

  • Установка и проверка подлинности на сервере Azure MCP
  • Подключение к серверу Azure MCP с помощью пользовательского клиента .NET
  • Выполнение запросов на тестирование операций Azure MCP Server и управление ресурсами Azure

Предпосылки

Замечание

Ресурсы Azure, к которым вы планируете получить доступ с помощью Azure MCP Server, должны уже существовать в подписке Azure. Кроме того, учетная запись пользователя должна иметь необходимые роли и разрешения RBAC, назначенные для этих ресурсов.

Вход в Azure MCP Server для локальной разработки

Сервер Azure MCP аутентифицируется в Microsoft Entra ID с помощью библиотеки удостоверений Azure для .NET. Сервер поддерживает два режима проверки подлинности:

  • Режим брокера: использует собственную проверку подлинности операционной системы (например, диспетчер веб-учетных записей Windows) с InteractiveBrowserCredential.
  • Режим цепочки учетных данных: пытается выполнить несколько методов проверки подлинности в последовательности: переменные среды, Visual Studio Code, Visual Studio, Azure CLI, Azure PowerShell, Azure Developer CLI и интерактивную проверку подлинности браузера.

Войдите с помощью любого из следующих методов:

  1. Откройте палитру команд (Ctrl+Shift+P или Cmd+Shift+P на Компьютере Mac).
  2. Запустите Azure: войдите и следуйте инструкциям.

После входа Azure MCP Server может выполнять операции проверки подлинности и выполнения операций в службах Azure на основе ваших разрешений.

Создание ведущего приложения .NET

Выполните следующие действия, чтобы создать консольное приложение .NET. Приложение подключается к модели искусственного интеллекта и выступает в качестве узла для клиента MCP, который подключается к серверу Azure MCP.

Создание проекта

  1. Откройте терминал в пустую папку, в которой вы хотите создать проект.

  2. Выполните следующую команду, чтобы создать консольное приложение .NET:

    dotnet new console -n MCPHostApp
    
  3. Перейдите в только что созданную папку проекта:

    cd MCPHostApp
    
  4. Откройте папку проекта в выбранном редакторе, например Visual Studio Code:

    code .
    

Добавление зависимостей

  1. В терминале выполните следующие команды, чтобы добавить необходимые пакеты NuGet:

    dotnet add package Azure.AI.OpenAI --prerelease
    dotnet add package Azure.Identity
    dotnet add package Microsoft.Extensions.AI --prerelease
    dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease
    dotnet add package ModelContextProtocol --prerelease
    
  2. Убедитесь, что пакеты были добавлены, проверив MCPHostApp.csproj файл.

  3. Выполните следующую команду, чтобы создать проект и убедиться, что все настроено правильно:

    dotnet build
    

Добавление кода приложения

Замените все содержимое Program.cs следующим кодом:

using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Extensions.AI;
using ModelContextProtocol.Client;

// Create an IChatClient
IChatClient client =
    new ChatClientBuilder(
        new AzureOpenAIClient(new Uri("<your-azure-openai-endpoint>"), 
        new DefaultAzureCredential())
        .GetChatClient("gpt-4o").AsIChatClient())
    .UseFunctionInvocation()
    .Build();

// Create the MCP client
var mcpClient = await McpClient.CreateAsync(
    new StdioClientTransport(new()
    {
        Command = "npx",
        Arguments = ["-y", "@azure/mcp@latest", "server", "start"],
        Name = "Azure MCP",
    }));

// Get all available tools from the MCP server
Console.WriteLine("Available tools:");
var tools = await mcpClient.ListToolsAsync();
foreach (var tool in tools)
{
    Console.WriteLine($"{tool}");
}
Console.WriteLine();

// Conversational loop that can utilize the tools
List<ChatMessage> messages = [];
while (true)
{
    Console.Write("Prompt: ");
    messages.Add(new(ChatRole.User, Console.ReadLine()));

    List<ChatResponseUpdate> updates = [];
    await foreach (var update in client
        .GetStreamingResponseAsync(messages, new() { Tools = [.. tools] }))
    {
        Console.Write(update);
        updates.Add(update);
    }
    Console.WriteLine();

    messages.AddMessages(updates);
}

Приведенный выше код выполняет следующие задачи:

  • Инициализирует IChatClient абстракцию с помощью Microsoft.Extensions.AI библиотек.
  • Создает клиент MCP для взаимодействия с сервером Azure MCP с помощью стандартного транспорта ввода-вывода. Указанная npx команда и соответствующие аргументы скачивают и запускают сервер Azure MCP.
  • Извлекает и отображает список доступных средств с сервера MCP, который является стандартной функцией MCP.
  • Реализует цикл беседы, который обрабатывает запросы пользователей и использует средства для ответов.

Запуск и тестирование приложения

Выполните следующие действия, чтобы протестировать хост-приложение .NET:

  1. В окне терминала откройте корень проекта, выполните следующую команду, чтобы запустить приложение:

    dotnet run
    
  2. После запуска приложения введите следующую тестовую строку:

    List all of the resource groups in my subscription
    

    Выходные данные предыдущего запроса должны выглядеть следующим образом:

    The following resource groups are available for your subscription:
    
    1. **DefaultResourceGroup-EUS** (Location: `eastus`)
    2. **rg-testing** (Location: `centralus`)
    3. **rg-azd** (Location: `eastus2`)
    4. **msdocs-sample** (Location: `southcentralus`)
    14. **ai-testing** (Location: `eastus2`)
    
    Let me know if you need further details or actions related to any of these resource groups!
    
  3. Изучите и проверьте операции Azure MCP с помощью других соответствующих запросов, таких как:

    List all of the storage accounts in my subscription
    Get the available tables in my storage accounts
    

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