Agents verbinden met Model Context Protocol-servers

Verbind uw Foundry-agents met MCP-servers (Model Context Protocol) met behulp van het MCP-hulpprogramma. Deze verbinding breidt de agentmogelijkheden uit met externe hulpprogramma's en gegevensbronnen. Door verbinding te maken met externe MCP-servereindpunten, heeft het Foundry-model van uw agent toegang tot hulpprogramma's die worden gehost door ontwikkelaars en organisaties die met MCP compatibele clients zoals Foundry Agent Service kunnen gebruiken.

MCP is een open standaard die definieert hoe toepassingen hulpprogramma's en contextuele gegevens bieden aan grote taalmodellen (LLM's). Het maakt consistente, schaalbare integratie van externe hulpprogramma's mogelijk in modelwerkstromen.

Tip

Overweeg dit hulpprogramma toe te voegen met behulp van een werkset. Met behulp van een werkset kunt u het hulpprogramma opnieuw gebruiken tussen agents en runtimes, evenals het centraliseren van referentiebeheer, versiebeheer en het afdwingen van beleid via een beheerd MCP-eindpunt. Zie de snelstartgids voor de toolbox.

In dit artikel leert u het volgende:

  • Voeg een externe MCP-server toe als hulpprogramma.
  • Verifieer bij een MCP-server met behulp van een projectverbinding.
  • MCP-tool-aanroepen controleren en goedkeuren.
  • Veelvoorkomende problemen met MCP-integratie oplossen.

Als u een coderingsagent zoals GitHub Copilot gebruikt, kan de Microsoft Foundry Skill helpen bij het configureren van MCP-hulpprogrammaverbindingen, verificatie, goedkeuringsgedrag en probleemoplossingsstappen.

Voorwaarden

Voordat u begint, moet u ervoor zorgen dat u het volgende hebt:

  • Een Azure-abonnement met een actief Microsoft Foundry-project.

  • De rol Foundry User voor het Foundry-project om agents te maken en te testen. Als u een project-verbinding voor MCP-verificatie maakt, hebt u ook de rol Foundry Project Manager op die project nodig.

    Important

    De rollen Foundry RBAC zijn onlangs hernoemd. Foundry User, Foundry Owner, Foundry Account Owner en Foundry Project Manager zijn eerder benoemd Azure AI-gebruiker, Azure AI-eigenaar Azure AI-accounteigenaar en Azure AI Project Manager. Het kan zijn dat u op sommige plekken nog steeds de vorige namen ziet terwijl de naamswijziging wordt doorgevoerd. De rol-id's en basismachtigingen worden niet gewijzigd door de naamswijziging.

  • Het nieuwste SDK-pakket voor uw taal. De .NET SDK is momenteel in een preview-fase. Zie de quickstart voor informatie over de installatie.

  • Azure inloggegevens die zijn geconfigureerd voor authenticatie (zoals DefaultAzureCredential).

  • Toegang tot een extern MCP-servereindpunt (zoals de MCP-server van GitHub op https://api.githubcopilot.com/mcp).

Een taak kiezen

Task Pad
Een agent verbinden en de eerste geslaagde toolaanroep bevestigen Volg de route voor verbinding maken, goedkeuren, verifiëren en opschonen.
Referenties of op identiteit gebaseerde toegang toevoegen Secundair:Verificatie configureren.
Verbinding maken met een privé-MCP-eindpunt Secundair:Controleer de vereisten voor openbare en privé-eindpunten.
Een lange bewerking uitvoeren in de achtergrondmodus Secundair:Langdurige bewerkingen configureren.
Inzicht krijgen in streaming- en time-outgedrag Secundair:Bekijk de bekende beperkingen.
Serveropties configureren of een lokale server hosten Secundair:Stel de MCP-verbinding in of host een lokale MCP-server.

Zie Hoe mcp-integratie werkt voor conceptuele informatie over hoe MCP-integratie werkt.

Gebruiksondersteuning

In de volgende tabel ziet u SDK- en installatieondersteuning voor MCP-verbindingen.

ondersteuning voor Microsoft Foundry Python SDK C#SDK JavaScript SDK Java SDK REST API Basisagent instellen Standaardagent configureren
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

Openbare en persoonlijke MCP-servereindpunten

Agent Service ondersteunt zowel openbare als privé MCP-servereindpunten:

  • Openbare eindpunten: maak verbinding met elke openbaar toegankelijke externe MCP-server. Deze optie werkt met zowel Basic- als Standard-agentinstellingen.
  • Privé-eindpunten: maak verbinding met MCP-servers die niet beschikbaar zijn voor het openbare internet. Privé-MCP vereist het instellen van privénetwerken en een toegewezen MCP-subnet binnen uw virtuele netwerk.

Voor privé-MCP-servers implementeert u uw MCP-server op Azure Container Apps met interne-only toegang op een toegewezen MCP-subnet dat is gedelegeerd aan Microsoft.App/environments. Als u aan de slag wilt gaan, gebruikt u de sjabloon 19-private-network-agents-tools-setup , waarmee de vereiste netwerkinfrastructuur wordt ingesteld, inclusief het MCP-subnet of het basic-project 11-private-network-basic als u uw eigen resources niet wilt meenemen.

Zie Agent-hulpprogramma's met netwerkisolatie voor meer informatie over hulpprogramma-ondersteuning in netwerkisolatieomgevingen.

Foundry Toolboxes gebruiken als MCP-eindpunten

Met Foundry Toolboxes kunt u meerdere hulpprogramma's bundelen , zoals Webzoekopdrachten, Code Interpreter, File Search, Azure AI Zoeken, MCP-servers, OpenAPI-hulpprogramma's en agent-naar-agent-verbindingen - in één met MCP compatibel eindpunt. In plaats van elk hulpprogramma afzonderlijk te configureren op elke agent, maakt u een werkset in Foundry en wijst u uw agent naar het werkseteindpunt met behulp van de standaardhulpprogrammaconfiguratie mcp (server_url en server_label).

Omdat het werkseteindpunt compatibel is met MCP, kan elke runtime die een MCP-server kan gebruiken ook een Werkset verbruiken. Deze compatibiliteit omvat Foundry Agent Service, Microsoft Agent Framework, LangGraph, GitHub Copilot SDK en andere MCP-clients. U kunt hulpprogramma's toevoegen, verwijderen of opnieuw configureren in de Werkset zonder uw agentcode te wijzigen.

Zie Een Foundry Toolbox maken en gebruiken voor installatiestappen.

Het MCP-eindpunt van de werkset ondersteunt langlopende bewerkingen via MCP-taken, die in preview zijn. Als u langlopende hulpprogramma's wilt gebruiken, moet u ervoor zorgen dat uw agent-harnas MCP-taken ondersteunt.

McP-verificatie en -configuratie van de werkset

Maak een projectverbinding voor uw MCP-server met het verificatietype dat overeenkomt met uw scenario en verwijs ernaar vanuit een minimale yamL-werkset.

Stap 1. Maak de verbinding

Exporteer uw projecteindpunt en stel het in als het actieve project voor de azd ai opdrachten:

PROJECT_ENDPOINT="https://<account>.services.ai.azure.com/api/projects/<project>"
azd ai project set $PROJECT_ENDPOINT

Kies de verificatievariant die u nodig hebt:

# No auth — public MCP server
azd ai connection create my-mcp-conn \
  --kind remote-tool \
  --target https://learn.microsoft.com/api/mcp \
  --auth-type none

# Custom-keys header (for example, GitHub PAT)
azd ai connection create my-mcp-conn \
  --kind remote-tool \
  --target https://api.githubcopilot.com/mcp/ \
  --auth-type custom-keys \
  --custom-key "Authorization=******"

# OAuth — bring your own app registration
azd ai connection create my-mcp-conn \
  --kind remote-tool \
  --target https://your-mcp-server.example.com \
  --auth-type oauth2 \
  --authorization-url https://auth.example.com/authorize \
  --token-url https://auth.example.com/token \
  --client-id <oauth-client-id> \
  --client-secret <oauth-client-secret> \
  --scopes "<scope1> <scope2>"

# User Entra token (managed user identity passthrough; for example, Microsoft Fabric)
azd ai connection create my-mcp-conn \
  --kind remote-tool \
  --target https://api.fabric.microsoft.com/v1/mcp/fabricaihub/integrations/m365 \
  --auth-type user-entra-token \
  --audience https://analysis.windows.net/powerbi/api

# Project managed identity — the project's system-assigned MI
azd ai connection create my-mcp-conn \
  --kind remote-tool \
  --target https://<resource>.cognitiveservices.azure.com/language/mcp \
  --auth-type project-managed-identity \
  --audience https://cognitiveservices.azure.com

# Agentic identity — the agent's per-project identity
azd ai connection create my-mcp-conn \
  --kind remote-tool \
  --target https://<resource>.cognitiveservices.azure.com/language/mcp \
  --auth-type agentic-identity \
  --audience https://cognitiveservices.azure.com
--auth-type Aanvullende vlaggen
none
custom-keys --custom-key "Header=Value" (herhaalbaar)
oauth2 --authorization-url, --token-url, --client-id, --client-secret, , --scopes
user-entra-token --audience <entra-audience>
project-managed-identity --audience <entra-audience> (optioneel)
agentic-identity --audience <entra-audience>

Voor verificatie op basis van identiteit (user-entra-token, project-managed-identity, agentic-identity) wijst u de bijbehorende principal de vereiste RBAC-rol toe aan de doelresource voordat u de werkset aanroept.

Stap 2. Toolbox definiëren

# my-toolbox.yaml
description: MCP server tools
connections:
  - name: my-mcp-conn

Stap 3. Maak de werkset

azd ai toolbox create my-toolbox --from-file my-toolbox.yaml

De eerste keer dat een gebruiker een werkset aanroept met een op OAuth gebaseerde MCP in een project, retourneert het MCP-eindpunt een CONSENT_REQUIRED fout (code -32006) met een toestemmings-URL:

{
  "error": {
    "code": -32006,
    "message": "User consent is required. Please visit: https://..."
  }
}

Deze fout wordt verwacht. Open de toestemmings-URL in een browser, voltooi de OAuth-autorisatiestroom en voer de aanroep van de agent opnieuw uit. Volgende aanroepen slagen zonder opnieuw om input te vragen.

Verificatie

Secundair pad: Configureer verificatie na de eerste geslaagde route wanneer uw MCP-server referenties of op identiteit gebaseerde toegang vereist.

Voor veel MCP-servers is verificatie vereist.

Gebruik in Foundry Agent Service een projectverbinding om verificatiegegevens op te slaan, zoals API-sleutels of Bearer-tokens, in plaats van hardcoderingsreferenties in uw app.

Zie MCP-serververificatie voor meer informatie over ondersteunde verificatieopties, waaronder sleutelgebaseerde, Microsoft Entra-identiteiten en passthrough voor OAuth-identiteiten.

Opmerking

Stel project_connection_id in op de ID van uw projectverbinding-ID.

Tip

Wanneer u de Azure DevOps MCP-server toevoegt via de catalogus Extra toevoegen, verifieert u zich bij Azure DevOps tijdens de verbindingsstap van de organisatie en slaat u de verificatie op als projectverbinding. Gebruik toegang met minimale bevoegdheden en controleer de reikwijdte wanneer u verbinding maakt met de organisatie.

Wanneer u een Foundry Toolbox MCP-eindpunt gebruikt, beheert de Werkset de verificatie centraal. De werkset verwerkt referentiesinjectie, tokenvernieuwing en beleidshandhaving tijdens runtime voor alle hulpprogramma's in de bundel. Agents verifiëren zich bij het werkseteindpunt zelf met behulp van Microsoft Entra referenties, zoals DefaultAzureCredential, en afzonderlijke hulpprogrammareferenties hoeven niet door elke agent te worden doorgegeven. Voor Toolbox-authenticatieconfiguratie, zie de werksetvereisten.

Overwegingen voor het gebruik van niet-Microsoft-services en servers

U bent onderworpen aan de voorwaarden tussen u en de serviceprovider wanneer u verbonden niet-Microsoft-services gebruikt. Wanneer u verbinding maakt met een niet-Microsoft-service, geeft u sommige gegevens, zoals promptinhoud, door aan de service die niet is Microsoft of ontvangt uw toepassing mogelijk gegevens van de service die niet Microsoft is. U bent verantwoordelijk voor uw gebruik van niet-Microsoft-services en gegevens, samen met eventuele kosten voor dat gebruik.

Derden maken, niet Microsoft, de externe MCP-servers die u wilt gebruiken met het MCP-hulpprogramma dat in dit artikel wordt beschreven. Microsoft test of verifieert deze servers niet. Microsoft heeft geen verantwoordelijkheid voor u of anderen met betrekking tot uw gebruik van externe MCP-servers.

Controleer en volg zorgvuldig welke MCP-servers u toevoegt aan Foundry Agent Service. Vertrouw op servers die worden gehost door vertrouwde serviceproviders zelf in plaats van proxy's.

Met de MCP-tool kunt u aangepaste headers, zoals verificatiesleutels of schema's, doorgeven die een externe MCP-server nodig kan hebben. Controleer alle gegevens die u deelt met externe MCP-servers en registreer de gegevens voor controledoeleinden. Houd rekening met niet-Microsoft procedures voor het bewaren en de locatie van gegevens.

Opmerking

Foundry Toolboxes verschillen van MCP-servers van derden. Werksets zijn door de organisatie beheerde resources die u maakt en beheert binnen uw Microsoft Foundry-project. U bent echter nog steeds verantwoordelijk voor het selecteren van hulpprogramma's, gegevensverwerking en naleving bij het cureren van werksetinhoud.

Beste praktijken

Zie Beste praktijken voor het gebruik van hulpprogramma's in Microsoft Foundry Agent Service voor richtlijnen voor het gebruik van hulpprogramma's.

Wanneer u MCP-servers gebruikt, volgt u deze procedures:

  • Gebruik een acceptatielijst met hulpprogramma's met behulp van allowed_tools.
  • Beschrijvingen van hulpprogramma's, aantekeningen en resultaten van externe MCP-servers behandelen als niet-vertrouwde invoer. Ze kunnen instructies voor indirecte promptinjectie bevatten.
  • Goedkeuring vereisen voor bewerkingen met een hoog risico, met name hulpprogramma's die gegevens schrijven of resources wijzigen.
  • Controleer de naam en argumenten van het aangevraagde hulpprogramma voordat u het goedkeurt.
  • Controleer allowed_tools, goedkeuringsinstellingen en verbindingsmachtigingen wanneer de operator van de server, beschikbaar gemaakte hulpprogramma's of gedrag verandert.
  • Logboekgoedkeuringen en hulpprogrammaoproepen voor controle en probleemoplossing.

Tip

Wanneer u de Azure DevOps MCP-server toevoegt via de catalogus Add Tools, wordt de configuratie van de hulpprogrammaselectie toegewezen aan het gedrag allowed_tools dat in dit artikel wordt beschreven. Het selecteren van een subset van hulpprogramma's in de catalogusgebruikersinterface is gelijk aan het opgeven van een allowed_tools lijst in code.

Eerste geslaagde route: verbinding maken, goedkeuren, verifiëren en opschonen

Gebruik het voorbeeld van de prompt-agent voor de geselecteerde taal. Wanneer het voorbeeld tabs van het type agent bevat, selecteer Prompt Agents. Deze route houdt de eerste uitvoering gericht op één taak: verbind één MCP-server, roep één hulpprogramma aan en inspecteer het resultaat.

  1. Verbinding maken: Configureer het MCP-hulpprogramma met require_approval ingesteld op alwaysen koppel het aan de agent.
  2. Goedkeuren: Voer het voorbeeld uit, controleer de aangevraagde server, het hulpprogramma en de argumenten en keur alleen de verwachte aanroep goed.
  3. Controleer: Controleer of het uiteindelijke antwoord informatie bevat die wordt geretourneerd door het MCP-hulpprogramma, zoals wordt weergegeven in de verwachte uitvoer.
  4. Opschonen: Voer de opschoonbewerking van het voorbeeld uit. De prompt-agentvoorbeelden verwijderen de agentversie en het TypeScript-voorbeeld verwijdert ook het gesprek.

Een agent maken in Python met het MCP-hulpprogramma

Gebruik het volgende codevoorbeeld om een agent te maken en de functie aan te roepen. De .NET SDK is momenteel in een preview-fase. Zie de quickstart voor meer informatie.

In het volgende voorbeeld ziet u hoe u de GitHub MCP-server toevoegt aan een werkset en de werkset koppelt aan een agent. Selecteer Prompt-agents om de AZURE AI Projects SDK te gebruiken om een promptagent aan de serverzijde te maken, of Hosted Agents om het Agent Framework FoundryChatClient te gebruiken om een tijdelijke, in-process agent te maken.

Agents aansturen

import json
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import PromptAgentDefinition, MCPTool
from openai.types.responses.response_input_param import McpApprovalResponse, ResponseInputParam

# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
MCP_CONNECTION_NAME = "my-mcp-connection"

# Create clients to call Foundry API
project = AIProjectClient(
    endpoint=PROJECT_ENDPOINT,
    credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()

# [START tool_declaration]
tool = MCPTool(
    server_label="api-specs",
    server_url="https://api.githubcopilot.com/mcp",
    require_approval="always",
    project_connection_id=MCP_CONNECTION_NAME,
)
# [END tool_declaration]

# Create a prompt agent with MCP tool capabilities
agent = project.agents.create_version(
    agent_name="MyAgent7",
    definition=PromptAgentDefinition(
        model="gpt-5-mini",
        instructions="Use MCP tools as needed",
        tools=[tool],
    ),
)
print(f"Agent created (id: {agent.id}, name: {agent.name}, version: {agent.version})")

# Create a conversation to maintain context across multiple interactions
conversation = openai.conversations.create()
print(f"Created conversation (id: {conversation.id})")

# Send initial request that will trigger the MCP tool
response = openai.responses.create(
    conversation=conversation.id,
    input="What is my username in my GitHub profile?",
    extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)

# Process any MCP approval requests that were generated
input_list: ResponseInputParam = []
for item in response.output:
    if item.type == "mcp_approval_request" and item.id:
        print("MCP approval requested")
        print(f"  Server: {item.server_label}")
        print(f"  Tool: {getattr(item, 'name', '<unknown>')}")
        print(
            f"  Arguments: {json.dumps(getattr(item, 'arguments', None), indent=2, default=str)}"
        )

        # Approve only after you review the tool call.
        # In production, implement your own approval UX and policy.
        should_approve = (
            input("Approve this MCP tool call? (y/N): ").strip().lower() == "y"
        )
        input_list.append(
            McpApprovalResponse(
                type="mcp_approval_response",
                approve=should_approve,
                approval_request_id=item.id,
            )
        )

# Send the approval response back to continue the agent's work
response = openai.responses.create(
    input=input_list,
    previous_response_id=response.id,
    extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)

print(f"Response: {response.output_text}")

# Clean up resources by deleting the agent version
project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)
print("Agent deleted")

Verwachte uitvoer

In het volgende voorbeeld ziet u de verwachte uitvoer wanneer u het voorbeeld uitvoert:

Agent created (id: <agent-id>, name: MyAgent7, version: 1)
Created conversation (id: <conversation-id>)
Response: Your GitHub username is "example-username".
Agent deleted

Gehoste agents

In dit voorbeeld wordt FoundryChatClient gebruikgemaakt van het Microsoft Agent Framework, wordt een werkset gemaakt met de GitHub MCP-server en wordt vervolgens het werkseteindpunt gekoppeld aan uw gehoste agent met FoundryToolbox. Installeer de pakketten met pip install agent-framework-foundry, stel de FOUNDRY_PROJECT_ENDPOINT en FOUNDRY_MODEL omgevingsvariabelen in en meld u aan met az login.

import asyncio

from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient, FoundryToolbox
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import MCPToolboxTool
from azure.identity import AzureCliCredential

PROJECT_ENDPOINT = "https://<account>.services.ai.azure.com/api/projects/<project>"
MCP_CONNECTION_NAME = "my-mcp-connection"


async def main() -> None:
    credential = AzureCliCredential()

    # 1. Add the GitHub MCP server to a toolbox.
    project = AIProjectClient(endpoint=PROJECT_ENDPOINT, credential=credential)
    server_tool = MCPToolboxTool(
        server_label="api-specs",
        server_url="https://api.githubcopilot.com/mcp",
        require_approval="always",
        project_connection_id=MCP_CONNECTION_NAME,
    )
    toolbox = project.toolboxes.create_version(
        name="mcp-server-toolbox",
        description="Toolbox with the GitHub MCP server",
        tools=[server_tool],
    )

    # 2. The toolbox exposes an MCP-compatible endpoint.
    TOOLBOX_MCP_URL = (
        f"{PROJECT_ENDPOINT}/toolboxes/{toolbox.name}"
        f"/versions/{toolbox.version}/mcp?api-version=v1"
    )

    # 3. Attach the toolbox to the hosted agent as an MCP tool.
,
        timeout=120.0,
    )

    toolbox_tool = FoundryToolbox(credential, url=TOOLBOX_MCP_URL)

agent = Agent(
        client=FoundryChatClient(credential=credential),
        instructions="You are a helpful assistant that uses your MCP tool "
        "to help with Microsoft documentation questions.",
        tools=[toolbox_tool],
    )

    result = await agent.run("What is Microsoft Agent Framework?")
    print(f"Agent: {result.text}")

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

Verwachte uitvoer

De agent benadert de Microsoft Learn MCP-server via het toolbox-eindpunt en retourneert tekst gebaseerd op de documentatie:

Agent: Microsoft Agent Framework is an open-source framework for building, orchestrating, and deploying AI agents ...

Zie Een werkset gebruiken met een gehoste agent voor de volledige werkset met gehoste agentpatronen.


Een agent maken met MCP-hulpprogramma

In het volgende voorbeeld ziet u hoe u een externe MCP-server toevoegt aan een werkset en de werkset koppelt aan een agent. Selecteer Prompt Agents om de Azure AI Projects SDK te gebruiken om een promptagent aan de serverzijde te maken of Hosted Agents om het Microsoft Agent Framework te gebruiken om een tijdelijke, in-process agent te maken.

Agents aansturen

In het voorbeeld worden synchrone methoden gebruikt om een agent te maken. Zie de sample-code in de Azure SDK voor .NET opslagplaats op GitHub voor asynchrone methoden.

using System;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
using Azure.Identity;

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";

// Create project client to call Foundry API
AIProjectClient projectClient = new(
    endpoint: new Uri(projectEndpoint),
    tokenProvider: new DefaultAzureCredential());

// Create Agent with the `MCPTool`. Note that in this scenario 
// GlobalMcpToolCallApprovalPolicy.AlwaysRequireApproval is used,
// which means that any calls to the MCP server must be approved.
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-5-mini")
{
    Instructions = "You are a helpful agent that can use MCP tools to assist users. Use the available MCP tools to answer questions and perform tasks.",
    Tools = { ResponseTool.CreateMcpTool(
        serverLabel: "api-specs",
        serverUri: new Uri("https://gitmcp.io/Azure/azure-rest-api-specs"),
        toolCallApprovalPolicy: new McpToolCallApprovalPolicy(GlobalMcpToolCallApprovalPolicy.AlwaysRequireApproval
    )) }
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
    agentName: "myAgent",
    options: new(agentDefinition));

// If the tool approval is required, the response item is
// of `McpToolCallApprovalRequestItem` type and contains all
// the information about tool call. This example checks that
// the server label is "api-specs" and approves the tool call.
// All other calls are denied because they should not occur for
// the current configuration.
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);

CreateResponseOptions nextResponseOptions = new([ResponseItem.CreateUserMessageItem("Please summarize the Azure REST API specifications README")]);
ResponseResult latestResponse = null;

while (nextResponseOptions is not null)
{
    latestResponse = responseClient.CreateResponse(nextResponseOptions);
    nextResponseOptions = null;

    foreach (ResponseItem responseItem in latestResponse.OutputItems)
    {
        if (responseItem is McpToolCallApprovalRequestItem mcpToolCall)
        {
            nextResponseOptions = new CreateResponseOptions()
            {
                PreviousResponseId = latestResponse.Id,
            };
            if (string.Equals(mcpToolCall.ServerLabel, "api-specs"))
            {
                Console.WriteLine($"Approval requested for {mcpToolCall.ServerLabel} (tool: {mcpToolCall.ToolName})");
                Console.Write("Approve this MCP tool call? (y/N): ");
                bool approved = string.Equals(Console.ReadLine(), "y", StringComparison.OrdinalIgnoreCase);
                nextResponseOptions.InputItems.Add(ResponseItem.CreateMcpApprovalResponseItem(approvalRequestId: mcpToolCall.Id, approved: approved));
            }
            else
            {
                Console.WriteLine($"Rejecting unknown call {mcpToolCall.ServerLabel}...");
                nextResponseOptions.InputItems.Add(ResponseItem.CreateMcpApprovalResponseItem(approvalRequestId: mcpToolCall.Id, approved: false));
            }
        }
    }
}

// Output the final response from the agent.
Console.WriteLine(latestResponse.GetOutputText());

// Clean up resources by deleting the agent version.
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);

Verwachte uitvoer

In het volgende voorbeeld ziet u de verwachte uitvoer wanneer u het voorbeeld uitvoert:

Approval requested for api-specs...
Response: The Azure REST API specifications repository contains the OpenAPI specifications for Azure services. It is
organized by service and includes guidelines for contributing new specifications. The repository is intended for use by developers building tools and services that interact with Azure APIs.

Gehoste agents

In dit voorbeeld wordt de MCP-serverwerkset gemaakt met de Azure AI Projects SDK. Vervolgens wordt de Microsoft Agent Framework-integratie AddFoundryToolboxes gebruikt om de werksethulpprogramma's beschikbaar te maken voor uw gehoste agent. Stel de AZURE_AI_PROJECT_ENDPOINT, AZURE_OPENAI_ENDPOINTen AZURE_AI_MODEL_DEPLOYMENT_NAME omgevingsvariabelen in en meld u aan met az login.

using Azure.AI.AgentServer.Responses;
using Azure.AI.AgentServer.Responses.Models;
using Azure.AI.OpenAI;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry.Hosting;
using Microsoft.Extensions.DependencyInjection;
using OpenAI.Chat;

string projectEndpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT")
    ?? "https://<account>.services.ai.azure.com/api/projects/<project>";
string openAiEndpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")
    ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5-mini";

DefaultAzureCredential credential = new();

// 1. Create the MCP server tool and add it to a toolbox.
AIProjectClient projectClient = new(endpoint: new Uri(projectEndpoint), tokenProvider: credential);
McpTool mcpTool = ResponseTool.CreateMcpTool(
    serverLabel: "api-specs",
    serverUri: new Uri("https://gitmcp.io/Azure/azure-rest-api-specs"),
    toolCallApprovalPolicy: new McpToolCallApprovalPolicy(
        GlobalMcpToolCallApprovalPolicy.AlwaysRequireApproval));

ToolboxVersion toolboxVersion = projectClient.AgentAdministrationClient
    .GetAgentToolboxes().CreateToolboxVersion(
        toolboxName: "mcp-server-toolbox",
        tools: [ProjectsAgentTool.AsProjectTool(mcpTool)],
        description: "Toolbox with the GitHub MCP server");

// Create the hosted agent and register the toolbox integration.
AIAgent agent = projectClient.AsAIAgent(
    model: deploymentName,
    instructions: "You are a helpful assistant with access to the toolbox tools.",
    name: "hosted-toolbox-agent");

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddFoundryResponses(agent);
builder.Services.AddFoundryToolboxes(credential, toolboxVersion.Name);

var app = builder.Build();
app.MapFoundryResponses();
app.Run();

Verwachte uitvoer

Wanneer de gehoste agent wordt aangeroepen, voert de gehoste agent een query uit op de Microsoft Learn MCP-server via het werkseteindpunt voor documentatiefragmenten en antwoorden:

User: How does one create an Azure storage account using the az CLI?

Agent: To create an Azure storage account using the az CLI, run: `az storage account create --name <name> --resource-group <rg> --location <region> --sku Standard_LRS` ...

Zie Een werkset gebruiken met een gehoste agent voor een onderhouden .NET Agent Framework-integratie.


Een agent maken met behulp van het MCP-hulpprogramma met projectverbindingsverificatie

In dit voorbeeld leert u hoe u zich kunt verifiëren bij de GitHub MCP-server in een werkset en vervolgens het MCP-eindpunt van de werkset koppelt aan een agent. In het voorbeeld worden synchrone methoden gebruikt om de werkset en agent te maken. Zie de sample-code in de Azure SDK voor .NET opslagplaats op GitHub voor asynchrone methoden.

Projectverbinding instellen

Voordat u het voorbeeld uitvoert:

  1. Meld u aan bij uw GitHub-profiel.
  2. Selecteer de profielfoto in de rechterbovenhoek.
  3. Selecteer Instellingen.
  4. Selecteer in het linkerdeelvenster Instellingen voor ontwikkelaars en persoonlijke toegangstokens > (klassiek).
  5. Selecteer bovenaan Nieuw token genereren, voer uw wachtwoord in en maak een token dat openbare opslagplaatsen kan lezen.
    • Belangrijk: Sla het token op of houd de pagina geopend zodra de pagina is gesloten. Het token kan niet opnieuw worden weergegeven.
  6. Open Microsoft Foundry in de Azure-portal.
  7. Selecteer Beheren in de navigatie rechtsboven, selecteer Projectgegevens en selecteer vervolgens het tabblad Verbonden bronnen.
  8. Maak een nieuwe verbinding van het type Aangepaste sleutels .
  9. Geef deze een naam en voeg een sleutelwaardepaar toe.
  10. Stel de sleutelnaam in Authorization op en de waarde moet een vorm hebben van Bearer your_github_token.

Codevoorbeeld voor het maken van de agent

using System;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
using Azure.Identity;

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
var mcpConnectionName = "my-mcp-connection";

// Create project client to call Foundry API
AIProjectClient projectClient = new(
    endpoint: new Uri(projectEndpoint),
    tokenProvider: new DefaultAzureCredential());

// 1. Add the GitHub MCP server to a toolbox. Using a toolbox is the recommended
//    way to give agents tools. See /azure/foundry/agents/concepts/toolbox-overview
AgentToolboxes toolboxClient = projectClient.AgentAdministrationClient.GetAgentToolboxes();

McpTool mcpTool = ResponseTool.CreateMcpTool(
    serverLabel: "api-specs",
    serverUri: new Uri("https://api.githubcopilot.com/mcp"),
    toolCallApprovalPolicy: new McpToolCallApprovalPolicy(
        GlobalMcpToolCallApprovalPolicy.AlwaysRequireApproval));
mcpTool.ProjectConnectionId = mcpConnectionName;

ToolboxVersion toolboxVersion = toolboxClient.CreateToolboxVersion(
    toolboxName: "mcp-server-toolbox",
    tools: [ProjectsAgentTool.AsProjectTool(mcpTool)],
    description: "Toolbox with the GitHub MCP server");

// 2. The toolbox exposes an MCP-compatible endpoint.
var toolboxMcpUrl = new Uri(
    $"{projectEndpoint}/toolboxes/{toolboxVersion.Name}" +
    $"/versions/{toolboxVersion.Version}/mcp?api-version=v1");

// 3. Create a remote-tool project connection that points at the toolbox endpoint.
//    Use a user Entra token so the caller's identity is passed through
//    (audience https://ai.azure.com). Create the connection once, for example
//    with the Azure Developer CLI:
//
//    azd ai connection create mcp-server-toolbox-conn \
//      --kind remote-tool \
//      --target "<toolboxMcpUrl>" \
//      --auth-type user-entra-token \
//      --audience https://ai.azure.com
var toolboxConnectionName = "mcp-server-toolbox-conn";

// 4. Attach the toolbox to a prompt agent as an MCP tool. Note that in this scenario
//    GlobalMcpToolCallApprovalPolicy.AlwaysRequireApproval is used, which means that
//    any calls to the toolbox MCP endpoint must be approved.
McpTool toolboxTool = ResponseTool.CreateMcpTool(
    serverLabel: "toolbox",
    serverUri: toolboxMcpUrl,
    toolCallApprovalPolicy: new McpToolCallApprovalPolicy(
        GlobalMcpToolCallApprovalPolicy.AlwaysRequireApproval));
toolboxTool.ProjectConnectionId = toolboxConnectionName;

DeclarativeAgentDefinition agentDefinition = new(model: "gpt-5-mini")
{
    Instructions = "You are a helpful agent that can use MCP tools to assist users. Use the available MCP tools to answer questions and perform tasks.",
    Tools = { toolboxTool }
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
    agentName: "myAgent",
    options: new(agentDefinition));

// If the tool approval is required, the response item is
// of McpToolCallApprovalRequestItem type and contains all
// the information about tool call. This example checks that
// the server label is "toolbox" and approves the tool call.
// All other calls are denied because they shouldn't happen given
// the current configuration.
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);

CreateResponseOptions nextResponseOptions = new([ResponseItem.CreateUserMessageItem("What is my username in my GitHub profile?")]);
ResponseResult latestResponse = null;

while (nextResponseOptions is not null)
{
    latestResponse = responseClient.CreateResponse(nextResponseOptions);
    nextResponseOptions = null;

    foreach (ResponseItem responseItem in latestResponse.OutputItems)
    {
        if (responseItem is McpToolCallApprovalRequestItem mcpToolCall)
        {
            nextResponseOptions = new()
            {
                PreviousResponseId = latestResponse.Id,
            };
            if (string.Equals(mcpToolCall.ServerLabel, "toolbox"))
            {
                Console.WriteLine($"Approval requested for {mcpToolCall.ServerLabel} (tool: {mcpToolCall.ToolName})");
                Console.Write("Approve this MCP tool call? (y/N): ");
                bool approved = string.Equals(Console.ReadLine(), "y", StringComparison.OrdinalIgnoreCase);
                nextResponseOptions.InputItems.Add(ResponseItem.CreateMcpApprovalResponseItem(approvalRequestId: mcpToolCall.Id, approved: approved));
            }
            else
            {
                Console.WriteLine($"Rejecting unknown call {mcpToolCall.ServerLabel}...");
                nextResponseOptions.InputItems.Add(ResponseItem.CreateMcpApprovalResponseItem(approvalRequestId: mcpToolCall.Id, approved: false));
            }
        }
    }
}

// Output the final response from the agent.
Console.WriteLine(latestResponse.GetOutputText());

// Clean up resources by deleting the agent version.
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);

Verwachte uitvoer

In het volgende voorbeeld ziet u de verwachte uitvoer wanneer u het voorbeeld uitvoert:

Approval requested for toolbox...
Response: Your GitHub username is "example-username".

Een agent maken in TypeScript met het MCP-hulpprogramma

Het volgende TypeScript-voorbeeld laat zien hoe u een MCP-server toevoegt aan een werkset, de werkset koppelt aan een agent, aanvragen verzendt die MCP-goedkeuringswerkstromen activeren, goedkeuringsaanvragen afhandelt en resources opschoont. Zie de sample-code in de Azure SDK voor JavaScript-opslagplaats op GitHub voor een JavaScript-versie.

import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
import OpenAI from "openai";
import * as readline from "readline";

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";

export async function main(): Promise<void> {
  // Create clients to call Foundry API
  const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
  const openai = project.getOpenAIClient();

  console.log("Creating agent with MCP tool...");

  // 1. Add the Azure REST API specifications MCP server to a toolbox. Using a toolbox is
  //    the recommended way to give agents tools. See /azure/foundry/agents/concepts/toolbox-overview
  const toolbox = await project.toolboxes.createVersion(
    "mcp-server-toolbox",
    [
      {
        type: "mcp",
        server_label: "api-specs",
        server_url: "https://gitmcp.io/Azure/azure-rest-api-specs",
        require_approval: "always",
      },
    ],
    { description: "Toolbox with the Azure REST API specifications MCP server" },
  );

  // 2. The toolbox exposes an MCP-compatible endpoint.
  const toolboxMcpUrl =
    `${PROJECT_ENDPOINT}/toolboxes/${toolbox.name}` +
    `/versions/${toolbox.version}/mcp?api-version=v1`;

  // 3. Create a remote-tool project connection that points at the toolbox endpoint.
  //    Use a user Entra token so the caller's identity is passed through
  //    (audience https://ai.azure.com). Create the connection once, for example
  //    with the Azure Developer CLI:
  //
  //    azd ai connection create mcp-server-toolbox-conn \
  //      --kind remote-tool \
  //      --target "<toolboxMcpUrl>" \
  //      --auth-type user-entra-token \
  //      --audience https://ai.azure.com
  const toolboxConnectionName = "mcp-server-toolbox-conn";

  // 4. Attach the toolbox to a prompt agent as an MCP tool.
  // The toolbox tool requires approval for each operation to ensure user control over external requests.
  const agent = await project.agents.createVersion("agent-mcp", {
    kind: "prompt",
    model: "gpt-5-mini",
    instructions:
      "You are a helpful agent that can use MCP tools to assist users. Use the available MCP tools to answer questions and perform tasks.",
    tools: [
      {
        type: "mcp",
        server_label: "toolbox",
        server_url: toolboxMcpUrl,
        require_approval: "always",
        project_connection_id: toolboxConnectionName,
      },
    ],
  });
  console.log(`Agent created (id: ${agent.id}, name: ${agent.name}, version: ${agent.version})`);

  // Create a conversation thread to maintain context across multiple interactions
  console.log("\nCreating conversation...");
  const conversation = await openai.conversations.create();
  console.log(`Created conversation (id: ${conversation.id})`);

  // Send initial request that will trigger the MCP tool to access Azure REST API specs
  // This will generate an approval request since requireApproval="always"
  console.log("\nSending request that will trigger MCP approval...");
  const response = await openai.responses.create(
    {
      conversation: conversation.id,
      input: "Please summarize the Azure REST API specifications Readme",
    },
    {
      body: { agent_reference: { name: agent.name, type: "agent_reference" } },
    },
  );

  // Process any MCP approval requests that were generated
  // When requireApproval="always", the agent will request permission before accessing external resources
  const inputList: OpenAI.Responses.ResponseInputItem.McpApprovalResponse[] = [];

  const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
  const ask = (q: string) => new Promise<string>((resolve) => rl.question(q, resolve));
  for (const item of response.output) {
    if (item.type === "mcp_approval_request") {
      if (item.server_label === "toolbox" && item.id) {
        console.log(`\nReceived MCP approval request (id: ${item.id})`);
        console.log(`  Server: ${item.server_label}`);
        console.log(`  Tool: ${item.name}`);

        // Approve only after you review the tool call.
        // In production, implement your own approval UX and policy.
        const answer = (await ask("Approve this MCP tool call? (y/N): ")).trim().toLowerCase();
        const approve = answer === "y";
        inputList.push({
          type: "mcp_approval_response",
          approval_request_id: item.id,
          approve,
        });
      }
    }
  }

  rl.close();

  console.log(`\nProcessing ${inputList.length} approval request(s)`);
  console.log("Final input:");
  console.log(JSON.stringify(inputList, null, 2));

  // Send the approval response back to continue the agent's work
  // This allows the MCP tool to access the GitHub repository and complete the original request
  console.log("\nSending approval response...");
  const finalResponse = await openai.responses.create(
    {
      input: inputList,
      previous_response_id: response.id,
    },
    {
      body: { agent_reference: { name: agent.name, type: "agent_reference" } },
    },
  );

  console.log(`\nResponse: ${finalResponse.output_text}`);

  // Clean up resources by deleting the agent version and conversation
  // This prevents accumulation of unused resources in your project
  console.log("\nCleaning up resources...");
  await openai.conversations.delete(conversation.id);
  console.log("Conversation deleted");

  await project.agents.deleteVersion(agent.name, agent.version);
  console.log("Agent deleted");

  console.log("\nMCP sample completed!");
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Verwachte uitvoer

In het volgende voorbeeld ziet u de verwachte uitvoer wanneer u het voorbeeld uitvoert:

Creating agent with MCP tool...
Agent created (id: <agent-id>, name: agent-mcp, version: 1)

Creating conversation...
Created conversation (id: <conversation-id>)

Sending request that will trigger MCP approval...

Received MCP approval request (id: <approval-request-id>)
  Server: api-specs
  Tool: get-readme

Processing 1 approval request(s)
Final input:
[
  {
    "type": "mcp_approval_response",
    "approval_request_id": "<approval-request-id>",
    "approve": true
  }
]

Sending approval response...

Response: The Azure REST API specifications repository contains the OpenAPI specifications for Azure services. It is organized by service and includes guidelines for contributing new specifications. The repository is intended for use by developers building tools and services that interact with Azure APIs.

Cleaning up resources...
Conversation deleted
Agent deleted

MCP sample completed!

Een agent maken met behulp van het MCP-hulpprogramma met projectverbindingsverificatie

Het volgende TypeScript-voorbeeld laat zien hoe u een geverifieerde MCP-server toevoegt aan een werkset, het MCP-eindpunt van de werkset koppelt aan een agent, aanvragen verzendt die MCP-goedkeuringswerkstromen activeren, goedkeuringsaanvragen afhandelt en resources opschoont. Zie de sample-code in de Azure SDK voor JavaScript-opslagplaats op GitHub voor een JavaScript-versie.

import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
import OpenAI from "openai";
import * as readline from "readline";

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const MCP_CONNECTION_NAME = "my-mcp-connection";

export async function main(): Promise<void> {
  // Create clients to call Foundry API
  const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
  const openai = project.getOpenAIClient();

  console.log("Creating agent with MCP tool using project connection...");

  // 1. Add the GitHub MCP server to a toolbox with project connection authentication.
  // The project connection should have Authorization header configured with "Bearer <GitHub PAT token>"
  // Token can be created at https://github.com/settings/personal-access-tokens/new
  const toolbox = await project.toolboxes.createVersion(
    "mcp-server-toolbox",
    [
      {
        type: "mcp",
        server_label: "api-specs",
        server_url: "https://api.githubcopilot.com/mcp",
        require_approval: "always",
        project_connection_id: MCP_CONNECTION_NAME,
      },
    ],
    { description: "Toolbox with the GitHub MCP server" },
  );

  // 2. The toolbox exposes an MCP-compatible endpoint.
  const toolboxMcpUrl =
    `${PROJECT_ENDPOINT}/toolboxes/${toolbox.name}` +
    `/versions/${toolbox.version}/mcp?api-version=v1`;

  // 3. Create a remote-tool project connection that points at the toolbox endpoint.
  //    Use a user Entra token so the caller's identity is passed through
  //    (audience https://ai.azure.com). Create the connection once, for example
  //    with the Azure Developer CLI:
  //
  //    azd ai connection create mcp-server-toolbox-conn \
  //      --kind remote-tool \
  //      --target "<toolboxMcpUrl>" \
  //      --auth-type user-entra-token \
  //      --audience https://ai.azure.com
  const toolboxConnectionName = "mcp-server-toolbox-conn";

  // 4. Attach the toolbox to a prompt agent as an MCP tool.
  const agent = await project.agents.createVersion("agent-mcp-connection-auth", {
    kind: "prompt",
    model: "gpt-5-mini",
    instructions: "Use MCP tools as needed",
    tools: [
      {
        type: "mcp",
        server_label: "toolbox",
        server_url: toolboxMcpUrl,
        require_approval: "always",
        project_connection_id: toolboxConnectionName,
      },
    ],
  });
  console.log(`Agent created (id: ${agent.id}, name: ${agent.name}, version: ${agent.version})`);

  // Create a conversation thread to maintain context across multiple interactions
  console.log("\nCreating conversation...");
  const conversation = await openai.conversations.create();
  console.log(`Created conversation (id: ${conversation.id})`);

  // Send initial request that will trigger the MCP tool
  console.log("\nSending request that will trigger MCP approval...");
  const response = await openai.responses.create(
    {
      conversation: conversation.id,
      input: "What is my username in my GitHub profile?",
    },
    {
      body: { agent_reference: { name: agent.name, type: "agent_reference" } },
    },
  );

  // Process any MCP approval requests that were generated
  const inputList: OpenAI.Responses.ResponseInputItem.McpApprovalResponse[] = [];

  const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
  const ask = (q: string) => new Promise<string>((resolve) => rl.question(q, resolve));
  for (const item of response.output) {
    if (item.type === "mcp_approval_request") {
      if (item.server_label === "toolbox" && item.id) {
        console.log(`\nReceived MCP approval request (id: ${item.id})`);
        console.log(`  Server: ${item.server_label}`);
        console.log(`  Tool: ${item.name}`);

        // Approve only after you review the tool call.
        // In production, implement your own approval UX and policy.
        const answer = (await ask("Approve this MCP tool call? (y/N): ")).trim().toLowerCase();
        const approve = answer === "y";
        inputList.push({
          type: "mcp_approval_response",
          approval_request_id: item.id,
          approve,
        });
      }
    }
  }

  rl.close();

  console.log(`\nProcessing ${inputList.length} approval request(s)`);
  console.log("Final input:");
  console.log(JSON.stringify(inputList, null, 2));

  // Send the approval response back to continue the agent's work
  // This allows the MCP tool to access the GitHub repository and complete the original request
  console.log("\nSending approval response...");
  const finalResponse = await openai.responses.create(
    {
      input: inputList,
      previous_response_id: response.id,
    },
    {
      body: { agent_reference: { name: agent.name, type: "agent_reference" } },
    },
  );

  console.log(`\nResponse: ${finalResponse.output_text}`);

  // Clean up resources by deleting the agent version and conversation
  // This prevents accumulation of unused resources in your project
  console.log("\nCleaning up resources...");
  await openai.conversations.delete(conversation.id);
  console.log("Conversation deleted");

  await project.agents.deleteVersion(agent.name, agent.version);
  console.log("Agent deleted");

  console.log("\nMCP with project connection sample completed!");
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Verwachte uitvoer

In het volgende voorbeeld ziet u de verwachte uitvoer wanneer u het voorbeeld uitvoert:

Creating agent with MCP tool using project connection...
Agent created (id: <agent-id>, name: agent-mcp-connection-auth, version: 1)
Creating conversation...
Created conversation (id: <conversation-id>)
Sending request that will trigger MCP approval...
Received MCP approval request (id: <approval-request-id>)
  Server: toolbox
  Tool: get-github-username
Processing 1 approval request(s)
Final input:
[
  {
    "type": "mcp_approval_response",
    "approval_request_id": "<approval-request-id>",
    "approve": true
  }
]
Sending approval response...
Response: Your GitHub username is "example-username".
Cleaning up resources...
Conversation deleted
Agent deleted
MCP with project connection sample completed!

MCP-hulpprogramma's gebruiken in een Java-agent

Tip

De meeste agents gebruiken een werkset om het hulpprogramma voor het zoeken van bestanden toe te voegen en de werkset als MCP-hulpprogramma aan uw agent toe te voegen. *Als u de Java SDK gebruikt, is er nog geen API beschikbaar voor het maken van werksets. Maak een werkset met behulp van de Python, REST API, C#, TypeScript of de Foundry-portal en verwijs vervolgens naar het MCP-eindpunt van uw Java-agent als een McpTool.

Voeg de afhankelijkheid toe aan uw pom.xml:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-ai-agents</artifactId>
    <version>2.2.0</version>
</dependency>

Een agent maken met MCP-hulpprogramma

import com.azure.ai.agents.AgentsClient;
import com.azure.ai.agents.AgentsClientBuilder;
import com.azure.ai.agents.ResponsesClient;
import com.azure.ai.agents.models.AgentReference;
import com.azure.ai.agents.models.AgentVersionDetails;
import com.azure.ai.agents.models.AzureCreateResponseOptions;
import com.azure.ai.agents.models.McpTool;
import com.azure.ai.agents.models.PromptAgentDefinition;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;

import java.util.Collections;

public class McpToolExample {
    public static void main(String[] args) {
        // Format: "https://resource_name.ai.azure.com/api/projects/project_name"
        String projectEndpoint = "your_project_endpoint";
        // Create the toolbox out-of-band by using Python, REST, the Foundry portal, C#, or TypeScript.
        String toolboxMcpUrl = projectEndpoint + "/toolboxes/mcp-server-toolbox/versions/1/mcp?api-version=v1";
        String toolboxConnectionName = "mcp-server-toolbox-conn";

        AgentsClientBuilder builder = new AgentsClientBuilder()
            .credential(new DefaultAzureCredentialBuilder().build())
            .endpoint(projectEndpoint);

        AgentsClient agentsClient = builder.buildAgentsClient();
        ResponsesClient responsesClient = builder.buildResponsesClient();

        // Attach the toolbox MCP endpoint with server label, URL, connection, and approval mode.
        McpTool mcpTool = new McpTool("toolbox")
            .setServerUrl(toolboxMcpUrl)
            .setProjectConnectionId(toolboxConnectionName)
            .setRequireApproval("always");

        // Create agent with MCP tool
        PromptAgentDefinition agentDefinition = new PromptAgentDefinition("gpt-5-mini")
            .setInstructions("You are a helpful assistant that can use MCP tools.")
            .setTools(Collections.singletonList(mcpTool));

        AgentVersionDetails agent = agentsClient.createAgentVersion("mcp-agent", agentDefinition);
        System.out.printf("Agent created: %s (version %s)%n", agent.getName(), agent.getVersion());

        // Create a response
        AgentReference agentReference = new AgentReference(agent.getName())
            .setVersion(agent.getVersion());

        Response response = responsesClient.createAzureResponse(
            new AzureCreateResponseOptions().setAgentReference(agentReference),
            ResponseCreateParams.builder()
                .input("Summarize the Azure REST API specifications"));

        System.out.println("Response: " + response.output());

        // Clean up
        agentsClient.deleteAgentVersion(agent.getName(), agent.getVersion());
    }
}

Verwachte uitvoer

Agent created: mcp-agent (version 1)
Response: [ResponseOutputItem containing MCP tool results ...]

Het MCP-hulpprogramma gebruiken met de REST API

In de volgende voorbeelden ziet u hoe u een agent maakt met het MCP-hulpprogramma en deze aanroept met behulp van de Antwoorden-API. Als het antwoord een uitvoeritem bevat dat is ingesteld op type, verzendt u een opvolgverzoek dat een mcp_approval_request item bevat.

Voorwaarden

Stel deze omgevingsvariabelen in:

  • FOUNDRY_PROJECT_ENDPOINT: de EINDPUNT-URL van uw project.
  • FOUNDRY_MODEL_DEPLOYMENT_NAME: de naam van uw modelimplementatie.
  • AGENT_TOKEN: Een bearer-token voor Foundry.
  • MCP_PROJECT_CONNECTION_NAME (optioneel): de naam van de MCP-projectverbinding.

Een toegangstoken ophalen:

export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)

Als de MCP-server in de toolbox geen authenticatie vereist, laat u project_connection_id weg uit de definitie van de toolbox-tool. De MCP-tool van de agent gebruikt nog steeds project_connection_id voor de externe-toolverbinding met het toolbox-eindpunt.

Opmerking

Voor REST API gebruikt u de verbindingsnaam van het externe hulpprogramma-project dat u voor het werkseteindpunt maakt, zoals project_connection_id in het MCP-hulpprogramma van de agent.

Tip

Zie de Microsoft Foundry REST API-naslaginformatie voor meer informatie over het schema van het MCP-hulpprogramma en de goedkeuringsitems.

1. Een werkset maken met de MCP-server

De aanbevolen manier om een MCP-server toe te voegen, is via een werkset en koppel de werkset vervolgens als een MCP-hulpprogramma aan uw agent. Zie Wat is een gereedschapskist?

curl -X POST "$FOUNDRY_PROJECT_ENDPOINT/toolboxes/mcp-server-toolbox/versions?api-version=v1" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -d '{
    "description": "Toolbox with the Azure REST API specifications MCP server",
    "tools": [
      {
        "type": "mcp",
        "server_label": "api-specs",
        "server_url": "https://gitmcp.io/Azure/azure-rest-api-specs",
        "require_approval": "never"
      }
    ]
  }'

De werkset toont een mcP-compatibel eindpunt op $FOUNDRY_PROJECT_ENDPOINT/toolboxes/mcp-server-toolbox/versions/<version>/mcp?api-version=v1, waarbij <version> de versie is die wordt geretourneerd door de vorige aanroep.

2. Maak een remote-toolverbinding met de toolbox

Maak een projectverbinding voor een externe tool die naar het toolbox-eindpunt verwijst. Gebruik een Entra-token zodat de identiteit van de beller wordt doorgegeven (doelgroep https://ai.azure.com):

azd ai connection create mcp-server-toolbox-conn \
  --kind remote-tool \
  --target "$FOUNDRY_PROJECT_ENDPOINT/toolboxes/mcp-server-toolbox/versions/<version>/mcp?api-version=v1" \
  --auth-type user-entra-token \
  --audience https://ai.azure.com

3. Een MCP-agent maken

curl -X POST "$FOUNDRY_PROJECT_ENDPOINT/agents?api-version=v1" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -d '{
    "name": "<AGENT_NAME>-mcp",
    "description": "MCP agent",
    "definition": {
      "kind": "prompt",
      "model": "'$FOUNDRY_MODEL_DEPLOYMENT_NAME'",
      "instructions": "You are a helpful agent that can use MCP tools to assist users. Use the available MCP tools to answer questions and perform tasks.",
      "tools": [
        {
          "type": "mcp",
          "server_label": "toolbox",
          "server_url": "'$FOUNDRY_PROJECT_ENDPOINT'/toolboxes/mcp-server-toolbox/versions/<version>/mcp?api-version=v1",
          "require_approval": "always",
          "project_connection_id": "mcp-server-toolbox-conn"
        }
      ]
    }
  }'

Als u een geverifieerde MCP-server in de werkset wilt gebruiken, voegt u deze toe "project_connection_id": "'$MCP_PROJECT_CONNECTION_NAME'" aan de werksettooldefinitie. Wijzig server_url in het geverifieerde servereindpunt (bijvoorbeeld https://api.githubcopilot.com/mcp).

4. Een antwoord maken

curl -X POST "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -d '{
    "agent": {"type": "agent_reference", "name": "<AGENT_NAME>-mcp"},
    "input": "Please summarize the Azure REST API specifications Readme"
  }'

Als het antwoord een uitvoeritem bevat waarbij type is ingesteld op mcp_approval_request, kopieer dan het goedkeuringsaanvraagitem id als APPROVAL_REQUEST_ID. Kopieer ook de reactie van het hoogste niveau id als PREVIOUS_RESPONSE_ID.

5. Een goedkeuringsantwoord verzenden

Als het MCP-hulpprogramma goedkeuring vereist, verzendt u een opvolgingsaanvraag:

curl -X POST "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -d '{
    "previous_response_id": "'$PREVIOUS_RESPONSE_ID'",
    "input": [
      {
        "type": "mcp_approval_response",
        "approval_request_id": "'$APPROVAL_REQUEST_ID'",
        "approve": true
      }
    ]
  }'

6. De middelen opschonen

Verwijder de agent:

curl -X DELETE "$FOUNDRY_PROJECT_ENDPOINT/agents/<AGENT_NAME>-mcp?api-version=v1" \
  -H "Authorization: Bearer $AGENT_TOKEN"

Hoe het werkt

U moet een externe MCP-server (een bestaand MCP-servereindpunt) naar de Foundry Agent-service brengen. U kunt meerdere externe MCP-servers meenemen door ze toe te voegen als hulpprogramma's. Voor elk hulpprogramma moet u een unieke server_label waarde opgeven binnen dezelfde agent en een server_url waarde die verwijst naar de externe MCP-server. Zorg ervoor dat u zorgvuldig controleert welke MCP-servers u toevoegt aan Foundry Agent Service.

Naast het verbinden van willekeurige externe MCP-servers per URL, kunt u sommige MCP-servers rechtstreeks vanuit de catalogus Foundry Add Tools toevoegen. Azure DevOps MCP-server is bijvoorbeeld beschikbaar als catalogusvermelding. Azure DevOps host het externe MCP-eindpunt en stelt het beschikbaar via HTTP-streaming, zodat u de server niet hoeft te installeren of te hosten wanneer u deze vanuit de Foundry-catalogus toevoegt. Catalogusvermeldingen vereenvoudigen het instellen van verbindingen en zijn afgestemd op dezelfde goedkeurings- en controlemechanismen die in dit artikel worden beschreven.

Zie voor meer informatie over het gebruik van MCP:

De MCP-verbinding instellen

Secundair pad - geavanceerde bewerkingen: Gebruik deze verwijzing na de eerste geslaagde route om hulpprogramma's te beperken, goedkeuringsgedrag te wijzigen of een projectverbinding toe te voegen.

In de volgende stappen wordt beschreven hoe u verbinding maakt met een externe MCP-server vanuit Foundry Agent Service:

  1. Zoek de externe MCP-server waarmee u verbinding wilt maken, zoals de GitHub MCP-server. Maak of werk een Foundry-agent bij met een mcp hulpprogramma door gebruik te maken van de volgende informatie:
    1. server_url: De URL van de MCP-server, zoals https://api.githubcopilot.com/mcp/.
    2. server_label: Een unieke id van deze MCP-server voor de agent, zoals github.
    3. allowed_tools: Een optionele lijst met hulpprogramma's die deze agent kan openen en gebruiken. Als u deze waarde niet opgeeft, bevat de standaardwaarde alle hulpprogramma's op de MCP-server.
    4. require_approval: Optioneel bepalen of goedkeuring vereist is. De standaardwaarde is always. Ondersteunde waarden zijn:
      • always: Een ontwikkelaar moet goedkeuring bieden voor elke aanroep. Als u geen waarde opgeeft, is dit de standaardwaarde.
      • never: Er is geen goedkeuring vereist.
      • {"never":[<tool_name_1>, <tool_name_2>]}: U geeft een lijst op met hulpprogramma's waarvoor geen goedkeuring is vereist.
      • {"always":[<tool_name_1>, <tool_name_2>]}: U geeft een lijst op met hulpprogramma's waarvoor goedkeuring is vereist.
  2. project_connection_id: De projectverbindings-id waarin verificatie en andere verbindingsgegevens voor de MCP-server worden opgeslagen.
  3. Als het model probeert een hulpprogramma op uw MCP-server aan te roepen met goedkeuring vereist, krijgt u een type antwoorduitvoeritem als mcp_approval_request. In het antwoorduitvoeritem krijgt u meer informatie over welk hulpprogramma op de MCP-server wordt aangeroepen en welke argumenten moeten worden doorgegeven. Controleer het hulpprogramma en de argumenten, zodat u een weloverwogen beslissing voor goedkeuring kunt nemen.
  4. Dien uw goedkeuring in bij de agent met behulp van previous_response_id en het instellen van approve op true.

Verbinding maken met Azure DevOps MCP-server

Azure DevOps MCP Server is beschikbaar als catalogusvermelding in Foundry.

Important

De externe Azure DevOps MCP-server wordt geverifieerd met Microsoft Entra ID. Uw Azure DevOps organisatie moet worden ondersteund door een Microsoft Entra tenant. Zelfstandige Microsoft-account (MSA)-organisaties worden niet ondersteund.

De server toevoegen:

  1. Ga in De Foundry-portal naar uw project.
  2. Selecteer Add Tools>Catalog en zoek naar 'Azure DevOps'.
  3. Selecteer Azure DevOps MCP-server en selecteer Aanmaken.
  4. Voer de naam van uw Azure DevOps organisatie in en selecteer Connect.
  5. Kies welke Azure DevOps hulpprogramma's die u beschikbaar wilt maken voor uw agent. U kunt een subset van hulpprogramma's selecteren om precies te bepalen waartoe de agent toegang heeft.

Met deze installatie op basis van een catalogus maakt u het MCP-hulpprogramma voor gebruik door agents zonder dat er codewijzigingen nodig zijn. U kunt het gedrag van connectiviteit en hulpprogramma's valideren in de foundry-chattest voordat u het hulpprogramma in productiecode integreert.

Tip

Versionering van toolboxes: Foundry Toolboxes ondersteunen versionering, zodat je itereren kunt op een nieuwe versie zonder dat dit invloed heeft op productie-agenten. Gebruik het consumer endpoint ({project_endpoint}/toolboxes/{name}/mcp?api-version=v1) voor productieagents - het dient altijd de gepromoveerde standaardversie. Gebruik het versiespecifieke eindpunt ({project_endpoint}/toolboxes/{name}/versions/{version}/mcp?api-version=v1) om te testen voordat u promotie uitvoert. Houd server_label uniek per agent, zelfs wanneer u schakelt tussen werksetversies. Zie Niveau verhogen van een versie naar de standaardinstelling voor meer informatie.

Langdurige bewerkingen (preview-versie)

Secundair pad - achtergrondmodus: Gebruik deze modus alleen als een MCP-bewerking niet kan worden voltooid binnen de standaard synchrone time-out.

Sommige MCP-servers bevatten hulpprogramma's die langer duren dan de standaard synchrone time-out om een resultaat te retourneren. Voer de agent uit in de achtergrondmodus om deze bewerkingen te ondersteunen. In de achtergrondmodus wordt het antwoord asynchroon uitgevoerd, zodat de MCP-hulpprogrammaaanroep kan doorgaan zonder een geopende verbinding vast te houden en u de antwoordstatus opvraagt totdat deze is voltooid. Met deze aanpak kunnen aanroepen van MCP-hulpprogramma’s de time-out zonder streaming van 100 seconden overschrijden die wordt beschreven in Bekende beperkingen.

Opmerking

Langdurige MCP-bewerkingen zijn beschikbaar als preview. Preview-functies worden aangeboden zonder service level agreement en worden niet aanbevolen voor productieworkloads. Gedrag en ondersteunde modellen kunnen veranderen.

Vereisten voor de MCP-server

De agentruntime is afhankelijk van de MCP-server om de bewerking asynchroon uit te voeren en de voortgang te rapporteren. De server moet:

  • Implementeer de taakmogelijkheid van het Model Context Protocol, zodat een toolaanroep een taakverwijzing kan retourneren in plaats van te wachten totdat het werk is afgerond.
  • Retourneer een gerelateerde taak-id in de metadata van het toolresultaat (het veld io.modelcontextprotocol/related-task met een taskId) wanneer het een langlopende bewerking start.
  • Maak een manier beschikbaar voor de runtime om de taakstatus te peilen en het uiteindelijke resultaat op te halen nadat de taak is voltooid.
  • Bereikbaar zijn als een extern MCP-eindpunt, hetzelfde als elk ander MCP-hulpprogramma. Lokale MCP-servers moeten zelf worden gehost om een extern eindpunt te bieden. Zie een lokale MCP-server hosten.

Wanneer de agentruntime een hulpprogramma aanroept dat een langlopende bewerking start, retourneert de server de taakverwijzing en houdt de runtime het antwoord op de achtergrond. De runtime start de respons, retourneert onmiddellijk een respons id en een status van queued, en haalt het resultaat op wanneer de taak is voltooid. U bevraagt de respons id totdat statuscompleted wordt en leest vervolgens de definitieve uitvoer.

De achtergrondmodus voor langlopende MCP-bewerkingen werkt met elk model dat ondersteuning biedt voor de achtergrondmodus, zoals gpt-5.4 of gpt-5.5.

Als uw agent gebruikmaakt van een model dat geen ondersteuning biedt voor de achtergrondmodus, worden MCP-hulpprogrammaaanroepen synchroon uitgevoerd en zijn ze onderworpen aan de time-out van 100 seconden.

Achtergrondmodus inschakelen in de Microsoft Foundry-portal

U kunt de achtergrondmodus voor een agent inschakelen in de playground van de Microsoft Foundry-portal, zonder code te schrijven:

  1. Open uw agent en selecteer het tabblad Speeltuin .

  2. Selecteer in de lijst Model een model dat ondersteuning biedt voor de achtergrondmodus, zoals gpt-5.4 of gpt-5.5.

  3. Selecteer het parameterspictogram naast het model en schakel de achtergrondmodus in.

  4. Voeg onder Hulpprogramma's een hulpprogramma toe waarvan de MCP-server MCP-taken ondersteunt, zoals een Fabric gegevensagent die is toegevoegd via het Fabric IQ-hulpprogramma. Zie Agents verbinden met Microsoft Fabric met Fabric IQ voor stappen.

  5. Een bericht verzenden. De agent start een achtergronduitvoering en geeft de voortgang weer terwijl de langlopende aanroep van het hulpprogramma is voltooid. Wanneer de uitvoering is voltooid, wordt het antwoord weergegeven in de chat.

Achtergrondmodus uitvoeren met code

In de volgende voorbeelden wordt een agent aangeroepen die al is geconfigureerd met een MCP-hulpprogramma, waarbij background is ingesteld op true, en wordt periodiek gecontroleerd totdat de respons is voltooid. Vervang de waarden van de tijdelijke aanduiding door uw eigen waarden.

from time import sleep
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient

PROJECT_ENDPOINT = "your_project_endpoint"
AGENT_NAME = "your_mcp_agent_name"

project = AIProjectClient(
    endpoint=PROJECT_ENDPOINT,
    credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()

# Start a background response. It returns immediately with status "queued".
response = openai.responses.create(
    extra_body={
        "agent_reference": {
            "name": AGENT_NAME,
            "type": "agent_reference",
        }
    },
    input="Run the long-running task and summarize the result.",
    background=True,
)

# Poll the response ID until the MCP tool call completes.
while response.status in ("queued", "in_progress"):
    sleep(5)
    response = openai.responses.retrieve(response.id)

print(response.output_text)
using Azure.Identity;
using Azure.AI.Projects;

var projectEndpoint = "your_project_endpoint";
var agentName = "your_mcp_agent_name";

AIProjectClient projectClient = new(
    endpoint: new Uri(projectEndpoint),
    tokenProvider: new DefaultAzureCredential());

ProjectResponsesClient responsesClient
    = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentName);

// Start a background response. It returns immediately with status "queued".
ResponseResult response = await responsesClient.CreateResponseAsync(
    new CreateResponseOptions
    {
        InputItems = { ResponseItem.CreateUserMessageItem(
            "Run the long-running task and summarize the result.") },
        Background = true,
    });

// Poll the response ID until the MCP tool call completes.
while (response.Status is "queued" or "in_progress")
{
    await Task.Delay(5000);
    response = await responsesClient.RetrieveResponseAsync(response.Id);
}
Console.WriteLine(response.GetOutputText());
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";

const PROJECT_ENDPOINT = "your_project_endpoint";
const AGENT_NAME = "your_mcp_agent_name";

const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
const openai = project.getOpenAIClient();

// Start a background response. It returns immediately with status "queued".
let response = await openai.responses.create(
  {
    input: "Run the long-running task and summarize the result.",
    background: true,
  },
  { body: { agent_reference: { name: AGENT_NAME, type: "agent_reference" } } },
);

// Poll the response ID until the MCP tool call completes.
while (response.status === "queued" || response.status === "in_progress") {
  await new Promise((r) => setTimeout(r, 5000));
  response = await openai.responses.retrieve(response.id);
}
console.log(response.output_text);
import com.azure.ai.agents.*;
import com.azure.ai.agents.models.AgentReference;
import com.azure.ai.agents.models.AzureCreateResponseOptions;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;

String projectEndpoint = "your_project_endpoint";
String agentName = "your_mcp_agent_name";

AgentsClientBuilder builder = new AgentsClientBuilder()
    .credential(new DefaultAzureCredentialBuilder().build())
    .endpoint(projectEndpoint);
ResponsesClient responsesClient = builder.buildResponsesClient();

AgentReference agentRef = new AgentReference(agentName);

// Start a background response. It returns immediately with status "queued".
Response response = responsesClient.createAzureResponse(
    new AzureCreateResponseOptions()
        .setAgentReference(agentRef)
        .setBackground(true),
    ResponseCreateParams.builder()
        .input("Run the long-running task and summarize the result."));

// Poll the response ID until the MCP tool call completes.
while (response.status().equals("queued") || response.status().equals("in_progress")) {
    Thread.sleep(5000);
    response = responsesClient.getAzureResponse(response.id());
}
System.out.println(response.output());

Maak een achtergrondantwoord. Het verzoek geeft onmiddellijk een reactie id en een status van queued terug:

curl -X POST "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -d '{
    "agent": {"type": "agent_reference", "name": "<AGENT_NAME>-mcp"},
    "input": "Run the long-running task and summarize the result.",
    "background": true
  }'

Kopieer id uit het resultaat en controleer het vervolgens herhaaldelijk totdat status gelijk is aan completed:

curl "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses/$RESPONSE_ID" \
  -H "Authorization: Bearer $AGENT_TOKEN"

Wanneer status is completed, bevat de output matrix het resultaat van de MCP-hulpprogramma-aanroep en het uiteindelijke assistentbericht.

Bekende beperkingen

Secundair pad - streaminggedrag: Bekijk deze limieten na de eerste geslaagde route als uw client reacties streamt of uw MCP-aanroep de synchrone time-out nadert.

  • Time-out voor niet-streaming MCP-hulpprogramma-oproepen: Niet-streaming MCP-hulpprogramma-oproepen hebben een time-out van 100 seconden. Als het langer dan 100 seconden duurt voordat uw MCP-server reageert, mislukt de oproep. Om time-outs te voorkomen, moet u ervoor zorgen dat uw MCP-server binnen deze limiet reageert. Als voor uw use-case langere verwerkingstijden zijn vereist, voert u de agent uit in de achtergrondmodus met een ondersteund model, optimaliseert u de logica aan de serverzijde of breekt u de bewerking op in kleinere stappen.
  • Voor privé-MCP is standaardagentinstallatie vereist: privé-MCP-serverconnectiviteit is alleen beschikbaar met Standard Agent Setup met privénetwerken (BYO VNet). De basisagentinstallatie biedt geen ondersteuning voor privé-MCP-eindpunten.
  • Private MCP-hosting: Azure Container Apps op een toegewezen MCP-subnet is de geteste configuratie voor privé-MCP-servers. Function Apps of App Services als de privé-MCP-serverhost mogelijk werken, maar intern niet gevalideerd zijn.

Veelgestelde vragen en fouten

De volgende veelvoorkomende problemen kunnen optreden wanneer u MCP-hulpprogramma's gebruikt met Foundry Agent Service:

  • "Ongeldig hulpprogrammaschema":

    Deze fout treedt meestal op als uw MCP-serverdefinitie meerdere typen waarden bevat anyOf of allOfals een parameter meerdere typen waarden accepteert. Werk de MCP-serverdefinitie bij en probeer het opnieuw.

  • 'Niet geautoriseerd' of 'Verboden' van de MCP-server:

    Controleer of de MCP-server uw verificatiemethode ondersteunt en controleer de referenties die zijn opgeslagen in uw projectverbinding. Gebruik voor GitHub tokens met minimale bevoegdheden en draai ze regelmatig. Controleer voor Azure DevOps MCP-server of de organisatie wordt ondersteund door een Microsoft Entra tenant en of u de verbindingsstroom van de organisatie in Foundry kunt voltooien. Zelfstandige Microsoft-account organisaties worden niet ondersteund.

  • Het model roept nooit uw MCP-hulpprogramma aan:

    Bevestig uw agentinstructies, moedig het gebruik van hulpprogramma's aan, en controleer server_label, server_url, en allowed_tools waarden. Als u deze optie instelt allowed_tools, controleert u of de naam van het hulpprogramma overeenkomt met wat de MCP-server beschikbaar maakt.

  • De agent gaat nooit verder na goedkeuring:

    Bevestig dat u een opvolgingsaanvraag verzendt die previous_response_id is ingesteld op de oorspronkelijke antwoord-id en dat u de item-id van de goedkeuringsaanvraag gebruikt als approval_request_id.

Een lokale MCP-server hosten

De Agent Service Runtime accepteert alleen een extern MCP-servereindpunt. Als u hulpprogramma's van een lokale MCP-server wilt toevoegen, moet u deze zelf hosten op Azure Container Apps of Azure Functions om een extern MCP-servereindpunt op te halen.

Het externe eindpunt kan een openbaar eindpunt of een privé-eindpunt binnen uw VNet zijn. Voor privé-MCP-servers implementeert u uw container-app met inkomend verkeer (--internal-only true) alleen intern in een toegewezen MCP-subnet. Zie Openbare en persoonlijke MCP-servereindpunten voor meer informatie over de installatie.

Houd rekening met de volgende factoren bij het hosten van lokale MCP-servers in de cloud:

Lokale MCP-server instellen Hosten in Azure Container Apps Hosting binnen Azure Functions
Vervoer HTTP POST/GET-eindpunten vereist. HTTP kan worden gestreamd.
Codewijzigingen Herbouw van container is vereist. Azure Functions-specifieke configuratiebestanden zijn vereist in de hoofdmap.
Verificatie Een aangepaste authenticatie-implementatie vereist. Enkel op basis van een sleutel. OAuth heeft API Management nodig.
Language Elke taal die wordt uitgevoerd in Linux-containers (Python, Node.js, .NET, TypeScript, Go). Python, Node.js, Java, alleen .NET.
Containervereisten Alleen Linux (linux/amd64). Geen bevoegde containers. Containerservers worden niet ondersteund.
Afhankelijkheden Alle afhankelijkheden moeten zich in de container image bevinden. Afhankelijkheden op besturingssysteemniveau (zoals Playwright) worden niet ondersteund.
Staat Alleen staatloos. Alleen staatloos.
UVX/NPX Ondersteund. Niet ondersteund. npx startopdrachten worden niet ondersteund.