Python ile Azure MCP Sunucusu'nu kullanmaya başlama

Azure MCP Sunucusu, yapay zeka uygulamalarıyla dış araçlar ve veri kaynakları arasındaki tümleştirmeleri standart hale getirmek için Model Bağlam Protokolü'ne (MCP) sahiptir ve yapay zeka sistemlerinin Azure kaynaklarınıza bağlam açısından duyarlı işlemler gerçekleştirmesine olanak tanır.

Bu makalede, aşağıdaki görevleri nasıl tamamlayacağınızı öğreneceksiniz:

  • Azure MCP Sunucusu'nu yükleme ve kimlik doğrulaması
  • Özel python istemcisi kullanarak Azure MCP Sunucusu'na bağlanma
  • Azure MCP Sunucusu işlemlerini test etmek ve Azure kaynaklarını yönetmek için istemleri çalıştırma

Önkoşullar

Uyarı

Azure MCP Sunucusu ile erişmeyi planladığınız Azure kaynaklarının Azure aboneliğinizde zaten mevcut olması gerekir. Ayrıca, kullanıcı hesabınızın bu kaynaklar için gerekli RBAC rollerine ve izinlerine atanmış olması gerekir.

Yerel geliştirme için Azure MCP Sunucusu'nda oturum açın

Azure MCP Sunucusu, .NET için Azure Kimlik kitaplığını kullanarak Microsoft Entra Kimliği'nde kimlik doğrulaması yapar. Sunucu iki kimlik doğrulama modunu destekler:

  • Aracı modu: ile InteractiveBrowserCredentialişletim sisteminizin yerel kimlik doğrulamasını (Windows Web Hesabı Yöneticisi gibi) kullanır.
  • Kimlik bilgisi zinciri modu: Ortam değişkenleri, Visual Studio Code, Visual Studio, Azure CLI, Azure PowerShell, Azure Geliştirici CLI ve etkileşimli tarayıcı kimlik doğrulaması gibi birden çok kimlik doğrulama yöntemini sırayla dener.

Şu yöntemlerden birini kullanarak oturum açın:

  1. Komut Paleti'ni (Ctrl+Shift+P veya Cmd+Shift+P Mac'te) açın.
  2. Azure:Oturum Aç'ı çalıştırın ve istemleri izleyin.

Oturum açtıktan sonra, Azure MCP Sunucusu izinlerinize göre Azure hizmetlerinde kimlik doğrulaması yapabilir ve işlemleri çalıştırabilir.

Python uygulamasını oluşturma

Python uygulaması (konak uygulaması) oluşturmak için aşağıdaki adımları tamamlayın. Uygulama bir yapay zeka modeline bağlanır ve Azure MCP Sunucusuna bağlanan bir MCP istemcisi için konak görevi görür (MCP protokolunu çalıştıran yerel işlem).

Projeyi oluşturma

  1. Düzenleyicinizin içinde istediğiniz boş bir klasörü açın.

  2. adlı requirements.txt yeni bir dosya oluşturun ve aşağıdaki kitaplık bağımlılıklarını ekleyin:

    mcp
    azure-identity
    openai
    logging
    
  3. Aynı klasörde adlı .env yeni bir dosya oluşturun ve aşağıdaki ortam değişkenlerini ekleyin:

    AZURE_OPENAI_ENDPOINT=<your-azure-openai-endpoint>
    AZURE_OPENAI_MODEL=<your-model-deployment-name>
    
  4. Uygulamanızın kodunu tutmak için adlı main.py boş bir dosya oluşturun.

Ortamı oluşturma ve bağımlılıkları yükleme

  1. Yeni klasörünüzde bir terminal açın ve uygulama için bir Python sanal ortamı oluşturun:

    python -m venv venv
    
  2. Sanal ortamı etkinleştirin:

    venv\Scripts\activate
    
  3. requirements.txt içindeki bağımlılıkları yükleyin:

    pip install -r requirements.txt
    

Uygulama kodunu ekleme

içeriğini main.py aşağıdaki kodla güncelleştirin:

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())

Yukarıdaki kod aşağıdaki görevleri gerçekleştirir:

  • Loglamayı kurar ve .env dosyasından ortam değişkenlerini yükler.
  • Azure OpenAI istemcisi, azure-identity ve openai kitaplıkları kullanılarak yapılandırılır.
  • Standart G/Ç aktarımını kullanarak Azure MCP Sunucusu (yerel işlem) ile etkileşime geçmek için bir MCP istemcisi başlatır.
  • Azure MCP Sunucusu'ndan kullanılabilir araçların (MCP tarafından kaydedilen Azure işlemleri) listesini alır ve görüntüler.
  • Kullanıcı istemlerini işlemek, araçları kullanmak ve araç çağrılarını işlemek için konuşma döngüsü uygular.

Yapılandırma parametreleri:

Parametre Description Example
AZURE_OPENAI_ENDPOINT Azure OpenAI hizmet uç noktanız https://your-resource.openai.azure.com/
AZURE_OPENAI_MODEL Model dağıtım adı gpt-4o
Belirteç kapsamı Azure Bilişsel Hizmetler OAuth kapsamı https://cognitiveservices.azure.com/.default
Kimlik Doğrulaması Kullanır DefaultAzureCredential (Azure CLI, yönetilen kimlik veya diğer kimlik doğrulama zinciri) Azure Identity belgelerine bakın
Gerekli RBAC Azure OpenAI kaynağında Bilişsel Hizmetler Kullanıcı rolü veya eşdeğeri Azure portalı veya CLI aracılığıyla atandı

Uygulamayı çalıştırma ve test edin

Python uygulamanızı test etmek için aşağıdaki adımları tamamlayın:

  1. Projenizin köküne açık bir terminal penceresinde aşağıdaki komutu çalıştırarak uygulamayı başlatın:

    python main.py
    

    Başarılı doğrulama: Uygulama kullanılabilir Azure MCP Server araçlarının listesini görüntülemeli ve ardından bir Prompt: giriş göstermelidir.

  2. Uygulama çalıştırıldıktan sonra aşağıdaki test istemini girin:

    List all of the resource groups in my subscription
    

    Önceki istemin çıktısı aşağıdaki metne benzemelidir:

    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. Aşağıdakiler gibi diğer ilgili istemleri kullanarak Azure MCP işlemlerini keşfedin ve test edin:

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

Sonraki Adımlar