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


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

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

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

  • Установка и проверка подлинности на сервере Azure MCP
  • Подключение к серверу Azure MCP с помощью режима агента GitHub Copilot в Visual Studio Code
  • Выполнение запросов на тестирование операций azure MCP Server и взаимодействие с ресурсами Azure

Предпосылки

Замечание

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

Установка сервера Azure MCP

Выберите один из следующих параметров, чтобы установить сервер Azure MCP в Visual Studio Code:

  1. Чтобы установить сервер Azure MCP для Visual Studio Code в параметрах пользователя, выберите следующую ссылку:

    Установка с помощью NPX в Visual Studio Code

    Список параметров установки открывается в Visual Studio Code. Выберите "Установить сервер" , чтобы добавить конфигурацию сервера в параметры пользователя.

    Снимок экрана: параметры установки сервера Azure MCP.

  2. Откройте GitHub Copilot и выберите режим агента. Дополнительные сведения о режиме агента см. в документации по Visual Studio Code.

  3. Обновите список инструментов, чтобы просмотреть Azure MCP Server в качестве доступных вариантов:

    Снимок экрана: сервер Azure MCP в качестве средства GitHub Copilot.

Использование запросов для тестирования сервера Azure MCP

  1. Откройте GitHub Copilot и выберите режим агента.

  2. Введите запрос, который приводит к использованию агентом средств Azure MCP Server, таких как перечисление групп ресурсов Azure.

  3. Чтобы пройти проверку подлинности Azure MCP Server, Copilot предложит войти в Azure с помощью браузера.

    Замечание

    Copilot не предложит вам войти в Azure, если вы уже прошли проверку подлинности с помощью других локальных инструментов, таких как Azure CLI.

  4. Copilot запрашивает разрешение на выполнение необходимой операции Azure MCP Server для вашего запроса. Нажмите кнопку "Продолжить " или используйте стрелку, чтобы выбрать более конкретное поведение:

    • Текущий сеанс всегда выполняет операцию в текущем сеансе режима агента GitHub Copilot.
    • Текущая рабочая область всегда выполняет команду для текущей рабочей области Visual Studio Code.
    • Всегда разрешать настраивает операцию на постоянное выполнение для любого сеанса режима агента GitHub Copilot или любой рабочей области Visual Studio Code.

    Снимок экрана: параметры, доступные для выполнения операций Azure MCP Server.

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

    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!
    
  5. Изучите и проверьте операции Azure MCP с помощью других соответствующих запросов, таких как:

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

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

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

Предпосылки

Замечание

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

Авторизация для локальной разработки

Сервер Azure MCP обеспечивает бесшовный опыт проверки подлинности на основе токенов через Microsoft Entra ID. На внутреннем сервере Azure MCP используется DefaultAzureCredential из библиотеки удостоверений Azure для проверки подлинности пользователей.

Для работы с Azure MCP Server необходимо войти в одно из поддерживаемых локально средств с вашей учетной записью Azure. Войдите с помощью окна терминала, например терминала Visual Studio Code:

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

Замечание

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

Создание ведущего приложения .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;
using ModelContextProtocol.Protocol.Transport;

// 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 McpClientFactory.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
    

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

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

Предпосылки

Замечание

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

Авторизация для локальной разработки

Сервер Azure MCP обеспечивает бесшовный опыт проверки подлинности на основе токенов через Microsoft Entra ID. На внутреннем сервере Azure MCP используется DefaultAzureCredential из библиотеки удостоверений Azure для проверки подлинности пользователей.

Для работы с Azure MCP Server необходимо войти в одно из поддерживаемых локально средств с вашей учетной записью Azure. Войдите с помощью окна терминала, например терминала Visual Studio Code:

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

Замечание

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

Создание приложения Python

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

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

  1. Откройте пустую папку в выбранном редакторе.

  2. Создайте файл с именем requirements.txt и добавьте следующие зависимости библиотеки:

    mcp
    azure-identity
    openai
    logging
    
  3. В той же папке создайте новый файл с именем .env и добавьте следующие переменные среды:

    AZURE_OPENAI_ENDPOINT=<your-azure-openai-endpoint>
    AZURE_OPENAI_MODEL=<your-model-deployment-name>
    
  4. Создайте пустой файл с именем main.py , чтобы сохранить код для приложения.

Создание среды и установка зависимостей

  1. Откройте терминал в новой папке и создайте виртуальную среду Python для приложения:

    python -m venv venv
    
  2. Активируйте виртуальную среду:

    venv\Scripts\activate
    
  3. Установка зависимостей из requirements.txt:

    pip install -r requirements.txt
    

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

Обновите содержимое Main.py следующим кодом:

from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import AzureOpenAI
from mcp import ClientSession, StdioServerParameters, types
from mcp.client.stdio import stdio_client
import json, os, logging, asyncio
from dotenv import load_dotenv

# Setup logging and load environment variables
logger = logging.getLogger(__name__)
load_dotenv()

# Azure OpenAI configuration
AZURE_OPENAI_ENDPOINT = os.getenv("AZURE_OPENAI_ENDPOINT")
AZURE_OPENAI_MODEL = os.getenv("AZURE_OPENAI_MODEL", "gpt-4o")

# Initialize Azure credentials
token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

async def run():
    # Initialize Azure OpenAI client
    client = AzureOpenAI(
            azure_endpoint=AZURE_OPENAI_ENDPOINT, 
            api_version="2024-04-01-preview", 
            azure_ad_token_provider=token_provider
        )

    # MCP client configurations
    server_params = StdioServerParameters(
        command="npx",
        args=["-y", "@azure/mcp@latest", "server", "start"],
        env=None
    )

    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()

            # List available tools
            tools = await session.list_tools()
            for tool in tools.tools: print(tool.name)

            # Format tools for Azure OpenAI
            available_tools = [{
                "type": "function",
                "function": {
                    "name": tool.name,
                    "description": tool.description,
                    "parameters": tool.inputSchema
                }
            } for tool in tools.tools]

            # Start conversational loop
            messages = []
            while True:
                try:
                    user_input = input("\nPrompt: ")
                    messages.append({"role": "user", "content": user_input})

                    # First API call with tool configuration
                    response = client.chat.completions.create(
                        model = AZURE_OPENAI_MODEL,
                        messages = messages,
                        tools = available_tools)

                    # Process the model's response
                    response_message = response.choices[0].message
                    messages.append(response_message)

                    # Handle function calls
                    if response_message.tool_calls:
                        for tool_call in response_message.tool_calls:
                                function_args = json.loads(tool_call.function.arguments)
                                result = await session.call_tool(tool_call.function.name, function_args)

                                # Add the tool response to the messages
                                messages.append({
                                    "tool_call_id": tool_call.id,
                                    "role": "tool",
                                    "name": tool_call.function.name,
                                    "content": result.content,
                                })
                    else:
                        logger.info("No tool calls were made by the model")

                    # Get the final response from the model
                    final_response = client.chat.completions.create(
                        model = AZURE_OPENAI_MODEL,
                        messages = messages,
                        tools = available_tools)

                    for item in final_response.choices:
                        print(item.message.content)
                except Exception as e:
                    logger.error(f"Error in conversation loop: {e}")
                    print(f"An error occurred: {e}")

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

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

  • Настраивает ведение журнала и загружает переменные среды из .env файла.
  • Настраивает клиент Azure OpenAI с помощью azure-identity и openai библиотек.
  • Инициализирует клиент MCP для взаимодействия с сервером Azure MCP с помощью стандартного транспорта ввода-вывода.
  • Извлекает и отображает список доступных средств с сервера MCP.
  • Реализует цикл общения для обработки запросов пользователей, использования инструментов и вызовов утилит.

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

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

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

    python main.py
    
  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
    

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