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


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

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

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

  • Установка и проверка подлинности на сервере Azure MCP
  • Подключение к серверу Azure MCP с помощью пользовательского клиента Python
  • Выполнение запросов на тестирование операций 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 на основе ваших разрешений.

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

Выполните следующие действия, чтобы создать приложение Python (хост-приложение). Приложение подключается к модели искусственного интеллекта и выступает в качестве узла для клиента MCP, который подключается к серверу Azure MCP (локальный процесс, выполняющий протокол 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 (локальным процессом) с помощью стандартного транспорта ввода-вывода.
  • Извлекает и отображает список доступных инструментов (операций Azure, зарегистрированных в MCP) с сервера Azure MCP.
  • Реализует цикл общения для обработки запросов пользователей, использования инструментов и обработки вызовов функций.

Параметры конфигурации:

Параметр Description Example
AZURE_OPENAI_ENDPOINT Конечная точка службы Azure OpenAI https://your-resource.openai.azure.com/
AZURE_OPENAI_MODEL Имя развертывания модели gpt-4o
Область маркера Область OAuth в Azure Cognitive Services https://cognitiveservices.azure.com/.default
Аутентификация Используется DefaultAzureCredential (Azure CLI, управляемое удостоверение или другая цепочка учетных данных) См. документацию по идентификации Azure
Обязательный RBAC Роль пользователя Cognitive Services или аналогичная роль для ресурса Azure OpenAI Назначается через портал Azure или CLI

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

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

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

    python main.py
    

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

  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
    

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