Aracılığıyla paylaş


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 giriş yapın

Azure MCP Sunucusu, Microsoft Entra Id aracılığıyla belirteç tabanlı kimlik doğrulaması kullanarak sorunsuz bir kimlik doğrulama deneyimi sağlar. Azure MCP Sunucusu dahili olarak kullanıcıların kimliğini doğrulamak için DefaultAzureCredential kullanır.

Azure MCP Server ile çalışmak için Azure hesabınızla yerel olarak desteklenen DefaultAzureCredential araçlardan birinde oturum açmanız gerekir. Visual Studio Code terminali gibi bir terminal penceresi kullanarak oturum açın:

az login

Önceki araçlardan birinde başarıyla oturum açtıktan sonra, Azure MCP Server kimlik bilgilerinizi otomatik olarak bulabilir ve bunları kullanarak Azure hizmetlerinde kimlik doğrulaması yapabilir ve işlemleri gerçekleştirebilir.

Uyarı

Ayrıca Visual Studio aracılığıyla Azure'da oturum açabilirsiniz. Azure MCP Sunucusu yalnızca oturum açmış kullanıcının gerçekleştirme izinlerine sahip olduğu 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