Udostępnij przez


Korzystanie z narzędzi MCP z agentami foundry

Możesz rozszerzyć możliwości swojego agenta usługi Azure AI Foundry, łącząc go z narzędziami hostowanymi na zdalnych serwerach protokołu Model Context Protocol (MCP) poprzez własny punkt końcowy serwera MCP.

Jak używać narzędzia Protokół kontekstu modelu

W tej sekcji wyjaśniono, jak utworzyć agenta sztucznej inteligencji przy użyciu usługi Azure Foundry (Azure AI) z hostowaną integracją serwera protokołu MCP (Model Context Protocol). Agent może korzystać z narzędzi MCP zarządzanych i wykonywanych przez usługę Azure Foundry, co umożliwia bezpieczny i kontrolowany dostęp do zasobów zewnętrznych.

Najważniejsze funkcje    

  • Hostowany serwer MCP: serwer MCP jest hostowany i zarządzany przez usługę Azure AI Foundry, eliminując konieczność zarządzania infrastrukturą serwera
  • Agenci trwały: agenci są tworzone i przechowywane po stronie serwera, co umożliwia wykonywanie konwersacji stanowych
  • Przepływ pracy zatwierdzania narzędzi: Konfigurowalne mechanizmy zatwierdzania dla wywołań narzędzi MCP

Jak to działa

1. Konfiguracja środowiska

Przykład wymaga dwóch zmiennych środowiskowych:

  • AZURE_FOUNDRY_PROJECT_ENDPOINT: Adres URL punktu końcowego projektu usługi Azure AI Foundry
  • AZURE_FOUNDRY_PROJECT_MODEL_ID: Nazwa wdrożenia modelu (domyślnie to "gpt-4.1-mini")
var endpoint = Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_ENDPOINT") 
    ?? throw new InvalidOperationException("AZURE_FOUNDRY_PROJECT_ENDPOINT is not set.");
var model = Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_MODEL_ID") ?? "gpt-4.1-mini";

2. Konfiguracja agenta

Agent jest skonfigurowany przy użyciu określonych instrukcji i metadanych:

const string AgentName = "MicrosoftLearnAgent";
const string AgentInstructions = "You answer questions by searching the Microsoft Learn content only.";

Spowoduje to utworzenie agenta wyspecjalizowanego do odpowiadania na pytania przy użyciu dokumentacji platformy Microsoft Learn.

3. Definicja narzędzia MCP

Przykład tworzy definicję narzędzia MCP wskazującą hostowany serwer MCP:

var mcpTool = new MCPToolDefinition(
    serverLabel: "microsoft_learn",
    serverUrl: "https://learn.microsoft.com/api/mcp");
mcpTool.AllowedTools.Add("microsoft_docs_search");

Kluczowe składniki:

  • serverLabel: unikatowy identyfikator wystąpienia serwera MCP
  • serverUrl: adres URL hostowanego serwera MCP
  • AllowedTools: określa narzędzia z serwera MCP, których agent może używać

4. Trwałe tworzenie agenta

Agent jest tworzony po stronie serwera przy użyciu zestawu SDK agentów trwałych usługi Azure AI Foundry:

var persistentAgentsClient = new PersistentAgentsClient(endpoint, new DefaultAzureCredential());

var agentMetadata = await persistentAgentsClient.Administration.CreateAgentAsync(
    model: model,
    name: AgentName,
    instructions: AgentInstructions,
    tools: [mcpTool]);

Ostrzeżenie

DefaultAzureCredential jest wygodne do programowania, ale wymaga starannego rozważenia w środowisku produkcyjnym. W środowisku produkcyjnym rozważ użycie określonego poświadczenia (np ManagedIdentityCredential. ) w celu uniknięcia problemów z opóźnieniami, niezamierzonego sondowania poświadczeń i potencjalnego ryzyka związanego z bezpieczeństwem z mechanizmów rezerwowych.

Spowoduje to utworzenie agenta trwałego, który:

  • Mieszka w usłudze Azure AI Foundry
  • Ma dostęp do określonych narzędzi MCP
  • Może zachować stan konwersacji w wielu interakcjach

5. Pobieranie i wykonywanie agenta

Utworzony agent jest pobierany jako AIAgent wystąpienie:

AIAgent agent = await persistentAgentsClient.GetAIAgentAsync(agentMetadata.Value.Id);

6. Konfiguracja zasobów narzędzi

Przykład konfiguruje zasoby narzędzi z ustawieniami zatwierdzania:

var runOptions = new ChatClientAgentRunOptions()
{
    ChatOptions = new()
    {
        RawRepresentationFactory = (_) => new ThreadAndRunOptions()
        {
            ToolResources = new MCPToolResource(serverLabel: "microsoft_learn")
            {
                RequireApproval = new MCPApproval("never"),
            }.ToToolResources()
        }
    }
};

Konfiguracja klucza:

  • MCPToolResource: Łączy wystąpienie serwera MCP z wykonaniem agenta
  • RequireApproval: określa, kiedy jest wymagane zatwierdzenie przez użytkownika w przypadku wywołań narzędzi
    • "never": Narzędzia są wykonywane automatycznie bez zatwierdzenia
    • "always": Wszystkie wywołania narzędzi wymagają zatwierdzenia przez użytkownika
    • Niestandardowe reguły zatwierdzania można również skonfigurować

7. Wykonywanie agenta

Agent jest wywoływany z pytaniem i wykonywany przy użyciu skonfigurowanych narzędzi MCP:

AgentSession session = await agent.CreateSessionAsync();
var response = await agent.RunAsync(
    "Please summarize the Azure AI Agent documentation related to MCP Tool calling?", 
    session, 
    runOptions);
Console.WriteLine(response);

8. Oczyszczanie

W przykładzie pokazano prawidłowe czyszczenie zasobów:

await persistentAgentsClient.Administration.DeleteAgentAsync(agent.Id);

Tip

Zobacz przykłady dla platformy .NET , aby uzyskać pełne przykłady możliwych do uruchomienia.

Usługa Azure AI Foundry zapewnia bezproblemową integrację z serwerami protokołu MCP (Model Context Protocol) za pośrednictwem platformy Agent Framework języka Python. Usługa zarządza hostowaniem i wykonywaniem serwera MCP, eliminując zarządzanie infrastrukturą przy jednoczesnym zapewnieniu bezpiecznego, kontrolowanego dostępu do narzędzi zewnętrznych.

Konfiguracja środowiska

Skonfiguruj poświadczenia projektu usługi Azure AI Foundry za pomocą zmiennych środowiskowych:

import os
from azure.identity.aio import AzureCliCredential
from agent_framework.azure import AzureAIAgentClient

# Required environment variables
os.environ["AZURE_AI_PROJECT_ENDPOINT"] = "https://<your-project>.services.ai.azure.com/api/projects/<project-id>"
os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"] = "gpt-4o-mini"  # Optional, defaults to this

Podstawowa integracja mcp

Utwórz agenta usługi Azure AI Foundry z hostowanymi narzędziami MCP:

import asyncio
from agent_framework.azure import AzureAIAgentClient
from azure.identity.aio import AzureCliCredential

async def basic_foundry_mcp_example():
    """Basic example of Azure AI Foundry agent with hosted MCP tools."""
    async with (
        AzureCliCredential() as credential,
        AzureAIAgentClient(async_credential=credential) as client,
    ):
        # Create a hosted MCP tool using the client method
        learn_mcp = client.get_mcp_tool(
            name="Microsoft Learn MCP",
            url="https://learn.microsoft.com/api/mcp",
        )

        # Create agent with hosted MCP tool
        agent = client.as_agent(
            name="MicrosoftLearnAgent", 
            instructions="You answer questions by searching Microsoft Learn content only.",
            tools=learn_mcp,
        )

        # Simple query without approval workflow
        result = await agent.run(
            "Please summarize the Azure AI Agent documentation related to MCP tool calling?"
        )
        print(result)

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

Konfiguracja mcp z wieloma narzędziami

Użyj wielu hostowanych narzędzi MCP z jednym agentem:

async def multi_tool_mcp_example():
    """Example using multiple hosted MCP tools."""
    async with (
        AzureCliCredential() as credential,
        AzureAIAgentClient(async_credential=credential) as client,
    ):
        # Create multiple MCP tools using the client method
        learn_mcp = client.get_mcp_tool(
            name="Microsoft Learn MCP",
            url="https://learn.microsoft.com/api/mcp",
            approval_mode="never_require",  # Auto-approve documentation searches
        )
        github_mcp = client.get_mcp_tool(
            name="GitHub MCP", 
            url="https://api.github.com/mcp",
            approval_mode="always_require",  # Require approval for GitHub operations
            headers={"Authorization": "Bearer github-token"},
        )

        # Create agent with multiple MCP tools
        agent = client.as_agent(
            name="MultiToolAgent",
            instructions="You can search documentation and access GitHub repositories.",
            tools=[learn_mcp, github_mcp],
        )

        result = await agent.run(
            "Find Azure documentation and also check the latest commits in microsoft/semantic-kernel"
        )
        print(result)

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

Struktura agentów języka Python zapewnia bezproblemową integrację z hostowanymi funkcjami MCP usługi Azure AI Foundry, umożliwiając bezpieczny i skalowalny dostęp do narzędzi zewnętrznych przy zachowaniu elastyczności i kontroli wymaganej dla aplikacji produkcyjnych.

Kompletny przykład

# Copyright (c) Microsoft. All rights reserved.

import asyncio
import os

from agent_framework import Agent
from agent_framework.openai import OpenAIResponsesClient
from dotenv import load_dotenv

"""
MCP GitHub Integration with Personal Access Token (PAT)

This example demonstrates how to connect to GitHub's remote MCP server using a Personal Access
Token (PAT) for authentication. The agent can use GitHub operations like searching repositories,
reading files, creating issues, and more depending on how you scope your token.

Prerequisites:
1. A GitHub Personal Access Token with appropriate scopes
   - Create one at: https://github.com/settings/tokens
   - For read-only operations, you can use more restrictive scopes
2. Environment variables:
   - GITHUB_PAT: Your GitHub Personal Access Token (required)
   - OPENAI_API_KEY: Your OpenAI API key (required)
   - OPENAI_RESPONSES_MODEL_ID: Your OpenAI model ID (required)
"""


async def github_mcp_example() -> None:
    """Example of using GitHub MCP server with PAT authentication."""
    # 1. Load environment variables from .env file if present
    load_dotenv()

    # 2. Get configuration from environment
    github_pat = os.getenv("GITHUB_PAT")
    if not github_pat:
        raise ValueError(
            "GITHUB_PAT environment variable must be set. Create a token at https://github.com/settings/tokens"
        )

    # 3. Create authentication headers with GitHub PAT
    auth_headers = {
        "Authorization": f"Bearer {github_pat}",
    }

    # 4. Create agent with the GitHub MCP tool using instance method
    # The MCP tool manages the connection to the MCP server and makes its tools available
    # Set approval_mode="never_require" to allow the MCP tool to execute without approval
    client = OpenAIResponsesClient()
    github_mcp_tool = client.get_mcp_tool(
        name="GitHub",
        url="https://api.githubcopilot.com/mcp/",
        headers=auth_headers,
        approval_mode="never_require",
    )

    # 5. Create agent with the GitHub MCP tool
    async with Agent(
        client=client,
        name="GitHubAgent",
        instructions=(
            "You are a helpful assistant that can help users interact with GitHub. "
            "You can search for repositories, read file contents, check issues, and more. "
            "Always be clear about what operations you're performing."
        ),
        tools=github_mcp_tool,
    ) as agent:
        # Example 1: Get authenticated user information
        query1 = "What is my GitHub username and tell me about my account?"
        print(f"\nUser: {query1}")
        result1 = await agent.run(query1)
        print(f"Agent: {result1.text}")

        # Example 2: List my repositories
        query2 = "List all the repositories I own on GitHub"
        print(f"\nUser: {query2}")
        result2 = await agent.run(query2)
        print(f"Agent: {result2.text}")


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

Dalsze kroki