Conectar agentes a servidores del Protocolo de Contexto de Modelo

Conecte los agentes de Foundry a los servidores del Protocolo de contexto de modelo (MCP) mediante la herramienta MCP. Esta conexión amplía las funcionalidades del agente con herramientas externas y orígenes de datos. Al conectarse a puntos de conexión de servidor MCP remotos, el modelo foundry del agente puede acceder a herramientas hospedadas por desarrolladores y organizaciones que pueden usar clientes compatibles con MCP, como Foundry Agent Service.

MCP es un estándar abierto que define cómo las aplicaciones proporcionan herramientas y datos contextuales a modelos de lenguaje grandes (LLM). Permite una integración coherente y escalable de herramientas externas en flujos de trabajo de modelo.

Sugerencia

Considere la posibilidad de agregar esta herramienta mediante un cuadro de herramientas. Mediante el uso de un cuadro de herramientas, puede reutilizar la herramienta entre agentes y entornos de ejecución, así como centralizar la administración de credenciales, el control de versiones y la aplicación de directivas a través de un punto de conexión de MCP administrado. Consulte el inicio rápido del cuadro de herramientas.

En este artículo, aprenderá a:

  • Agregue un servidor MCP remoto como herramienta.
  • Autentíquese en un servidor MCP mediante una conexión de proyecto.
  • Revise y apruebe las llamadas a la herramienta MCP.
  • Solución de problemas comunes de integración de MCP.

Si usa un agente de codificación como GitHub Copilot, la aptitud de Microsoft Foundry puede ayudar a configurar conexiones de herramientas de MCP, autenticación, comportamiento de aprobación y pasos de solución de problemas.

Requisitos previos

Antes de comenzar, asegúrese de que tiene:

  • Una suscripción Azure con un proyecto de Microsoft Foundry activo.

  • El rol de Usuario de Foundry en el proyecto de Foundry para crear y probar agentes. Si crea una conexión de proyecto para la autenticación MCP, también necesita el rol de Administrador de proyectos de Foundry en ese proyecto.

    Importante

    Recientemente se cambió el nombre de los roles RBAC de Foundry. Foundry User, Foundry Owner, Foundry Account Owner y Foundry Project Manager se llamaban anteriormente Usuario de Azure AI, Propietario de Azure AI, Propietario de la cuenta de Azure AI y Administrador de proyectos de Azure AI. Es posible que siga viendo los nombres anteriores en algunos lugares mientras se implementa el cambio de nombre. El cambio de nombre no modifica los identificadores de rol y los permisos principales.

  • El paquete del SDK más reciente para el idioma. El SDK de .NET está actualmente en versión preliminar. Para obtener más información sobre la instalación, consulte el inicio rápido.

  • Azure credenciales configuradas para la autenticación (como DefaultAzureCredential).

  • Acceso a un punto de conexión remoto del servidor MCP (por ejemplo, el servidor MCP de GitHub en https://api.githubcopilot.com/mcp).

Elegir una tarea

tarea Path
Conecta un agente y confirma la primera llamada exitosa a la herramienta Siga la ruta de conexión, aprobación, comprobación y limpieza.
Adición de credenciales o acceso basado en identidad Secundario:Configure la autenticación.
Conexión a un punto de conexión de MCP privado Secundario:Revise los requisitos de los puntos de conexión públicos y privados.
Ejecutar una operación larga en modo en segundo plano Secundario:Configurar operaciones de larga duración.
Comprenda el comportamiento del streaming y del tiempo de espera Secundario:Revise las limitaciones conocidas.
Configurar opciones de servidor o hospedar un servidor local Secundario:configure la conexión MCP o hospede un servidor MCP local.

Para obtener detalles conceptuales sobre cómo funciona la integración de MCP, consulte Funcionamiento.

Soporte de uso

En la tabla siguiente se muestra la compatibilidad con el SDK y la configuración de las conexiones MCP.

compatibilidad con Microsoft Foundry SDK de Python C# SDK SDK de JavaScript SDK de Java REST API Configuración básica del agente Configuración del agente estándar
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

Puntos de conexión de servidor MCP públicos y privados

El servicio del agente admite puntos de conexión de servidor MCP públicos y privados:

  • Puntos de conexión públicos: conéctese a cualquier servidor MCP remoto accesible públicamente. Esta opción funciona con las configuraciones básica y estándar del agente.
  • Puntos de conexión privados: conéctese a servidores MCP que no estén expuestos a la red pública de Internet. McP privado requiere la configuración de red privada y una subred MCP dedicada dentro de la red virtual.

En el caso de los servidores MCP privados, implemente el servidor MCP en Azure Container Apps con entrada solo interna en una subred MCP dedicada delegada en Microsoft.App/environments. Para empezar, use la plantilla 19-private-network-agents-tools-setup , que aprovisiona la infraestructura de red necesaria, incluida la subred MCP o 11-private-network-basic-project si no desea traer sus propios recursos.

Para más información sobre la compatibilidad de herramientas en entornos aislados de red, consulte Herramientas del agente con aislamiento de red.

Uso de Foundry Toolboxes como puntos de conexión de MCP

Los cuadros de herramientas de Foundry permiten agrupar varias herramientas ( como Búsqueda web, Intérprete de código, Búsqueda de archivos, Búsqueda de Azure AI, servidores MCP, herramientas de OpenAPI y conexiones de agente a agente, en un único punto de conexión compatible con MCP. En lugar de configurar cada herramienta por separado en cada agente, cree un cuadro de herramientas en Foundry y apunte el agente al punto de conexión del cuadro de herramientas mediante la configuración de herramientas estándar mcp (server_url y server_label).

Dado que el punto de conexión del cuadro de herramientas es compatible con MCP, cualquier entorno de ejecución que pueda consumir un servidor MCP también puede consumir un cuadro de herramientas. Esta compatibilidad incluye foundry Agent Service, Microsoft Agent Framework, LangGraph, GitHub Copilot SDK y otros clientes habilitados para MCP. Puede agregar, quitar o volver a configurar herramientas en el cuadro de herramientas sin cambiar el código del agente.

Para conocer los pasos de configuración, consulte Creación y uso de un cuadro de herramientas de Foundry.

El punto de conexión MCP de la caja de herramientas admite operaciones de larga duración mediante tareas de MCP, una característica actualmente en versión preliminar. Para usar herramientas de ejecución prolongada, asegúrese de que el entorno de ejecución del agente admite tareas de MCP.

Autenticación y configuración de Toolbox MCP

Cree una conexión de proyecto para el servidor MCP con el tipo de autenticación que coincida con el escenario y, a continuación, haga referencia a ella desde un archivo YAML de cuadro de herramientas mínimo.

Paso 1. Creación de la conexión

Exporte el punto de conexión del proyecto y establézcalo como el proyecto activo para los azd ai comandos:

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

Elija la variante de autenticación que necesita:

# 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 Indicadores adicionales
none
custom-keys --custom-key "Header=Value" (repetible)
oauth2 --authorization-url, --token-url, --client-id, , --client-secret, --scopes
user-entra-token --audience <entra-audience>
project-managed-identity --audience <entra-audience> (opcional)
agentic-identity --audience <entra-audience>

Para la autenticación basada en identidades (user-entra-token, project-managed-identity, agentic-identity), asigne a la identidad correspondiente el rol RBAC necesario en el recurso de destino antes de llamar a la caja de herramientas.

Paso 2. Definición del cuadro de herramientas

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

Paso 3. Creación del cuadro de herramientas

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

La primera vez que un usuario llama a un cuadro de herramientas con un MCP basado en OAuth en un proyecto, el punto de conexión de MCP devuelve un CONSENT_REQUIRED error (código -32006) con una dirección URL de consentimiento:

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

Este error es esperado. Abra la dirección URL de consentimiento en un explorador, complete el flujo de autorización de OAuth y vuelva a intentar la llamada al agente. Las llamadas posteriores se realizan correctamente sin volver a solicitarlas.

Autenticación

Ruta de acceso secundaria: Configure la autenticación después de la primera ruta correcta cuando el servidor MCP requiera credenciales o acceso basado en identidades.

Muchos servidores MCP requieren autenticación.

En Foundry Agent Service, use una conexión de proyecto para almacenar detalles de autenticación, como claves de API o tokens de portador, en lugar de credenciales de codificación rígida en la aplicación.

Para obtener información sobre las opciones de autenticación admitidas, incluidas las identidades basadas en claves, Microsoft Entra y el paso directo de identidad de OAuth, consulte MCP server authentication.

Nota

Establezca project_connection_id en el identificador de la conexión del proyecto.

Sugerencia

Al agregar el servidor MCP de Azure DevOps (versión preliminar) a través del Add Tools catálogo, se autentica en Azure DevOps durante el paso de conexión de la organización y se almacena la autenticación como una conexión de proyecto. Use el principio de privilegios mínimos y revise los permisos y ámbitos al conectar con la organización.

Cuando se usa un punto de conexión MCP de Foundry Toolbox, el Cuadro de herramientas administra de forma centralizada la autenticación. El Cuadro de herramientas controla la inserción de credenciales, la actualización de tokens y la aplicación de directivas en tiempo de ejecución para todas las herramientas de la agrupación. Los agentes se autentican en el propio punto de conexión del cuadro de herramientas mediante credenciales de Microsoft Entra, como DefaultAzureCredential y las credenciales de herramienta individuales no necesitan pasarse por cada agente. Para la configuración de autenticación del cuadro de herramientas, consulte Requisitos previos del cuadro de herramientas.

Consideraciones para usar servicios y servidores no pertenecientes a Microsoft

Está sujeto a los términos entre usted y el proveedor de servicios cuando use servicios conectados no de Microsoft. Cuando se conecta a un servicio que no es de Microsoft, pasa algunos de los datos, como el contenido del mensaje, al servicio que no es de Microsoft o la aplicación puede recibir datos del servicio que no es de Microsoft. Usted es responsable de su uso de servicios que no sean de Microsoft y de los datos, junto con cualquier cargo asociado con ese uso.

Terceros, no Microsoft, cree los servidores MCP remotos que decida usar con la herramienta MCP descrita en este artículo. Microsoft no prueba ni comprueba estos servidores. Microsoft no tiene responsabilidad alguna con respecto a su uso de servidores MCP remotos.

Revise cuidadosamente y haga un seguimiento de los servidores MCP que agregue al servicio de agente Foundry. Confíe en servidores hospedados por proveedores de servicios de confianza en lugar de servidores proxy.

La herramienta MCP permite pasar encabezados personalizados, como claves de autenticación o esquemas, que podría necesitar un servidor MCP remoto. Revise todos los datos que comparta con servidores MCP remotos y registre los datos con fines de auditoría. Tenga en cuenta las prácticas no Microsoft para la retención y la ubicación de los datos.

Nota

Los Foundry Toolboxes son diferentes de los servidores MCP de terceros. Los cuadros de herramientas son recursos controlados por la organización que se crean y administran en el proyecto de Microsoft Foundry. Sin embargo, sigue siendo responsable de la selección de herramientas, la gestión de datos y el cumplimiento al gestionar el contenido del cuadro de herramientas.

Procedimientos recomendados

Para obtener instrucciones generales sobre el uso de herramientas, consulte Prácticas más detalladas para usar herramientas en Microsoft Foundry Agent Service.

Al usar servidores MCP, siga estos procedimientos:

  • Use una lista de herramientas permitidas mediante allowed_tools.
  • Trate las descripciones de herramientas, las anotaciones y los resultados de los servidores MCP remotos como entrada que no es de confianza. Pueden contener instrucciones indirectas para la inyección de prompts.
  • Requerir aprobación para operaciones de alto riesgo, especialmente herramientas que escriben datos o cambian recursos.
  • Revise los argumentos y el nombre de la herramienta solicitados antes de aprobar.
  • Revise allowed_tools, la configuración de aprobación y los permisos de conexión cuando cambien el operador del servidor, las herramientas expuestas o el comportamiento.
  • Aprobaciones de registros y llamadas de herramientas para la auditoría y la solución de problemas.

Sugerencia

Al agregar el servidor MCP de Azure DevOps a través del catálogo Add Tools, la configuración de selección de herramientas se asigna al comportamiento descrito en este artículo. Seleccionar un subconjunto de herramientas en la interfaz de usuario del catálogo equivale a especificar una allowed_tools lista en el código.

Ruta de primer éxito: conectar, aprobar, verificar y limpiar

Utilice el ejemplo prompt-agent para el idioma que haya seleccionado. Cuando la muestra tenga pestañas del tipo agente, seleccione Prompt Agents. Esta ruta mantiene la primera ejecución centrada en una tarea: conecte un servidor MCP, invoque una herramienta e inspeccione el resultado.

  1. Conexión: Configure la herramienta MCP con require_approval establecido en always y adjúntela al agente.
  2. Aprobar: Ejecute el ejemplo, revise el servidor, la herramienta y los argumentos solicitados y apruebe solo la llamada esperada.
  3. Compruebe: Confirme que la respuesta final contiene información devuelta por la herramienta MCP, como se muestra en la salida esperada.
  4. Limpiar: Ejecute la operación de limpieza del ejemplo. Los ejemplos de prompt-agent eliminan la versión del agente y el ejemplo de TypeScript también elimina su conversación.

Creación de un agente en Python con la herramienta MCP

Use el ejemplo de código siguiente para crear un agente y llamar a la función . El SDK de .NET está actualmente en versión preliminar. Consulte el inicio rápido para obtener más información.

En el ejemplo siguiente se muestra cómo agregar el servidor MCP de GitHub a un cuadro de herramientas y adjuntar el cuadro de herramientas a un agente. Seleccione Prompt Agents para usar Azure AI Projects SDK y crear un agente de indicaciones del lado del servidor, o Hosted Agents para usar el Agent Framework FoundryChatClient y crear un agente efímero dentro del proceso.

Agentes rápidos

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

Salida esperada

En el ejemplo siguiente se muestra la salida esperada al ejecutar el ejemplo:

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

Agentes hospedados

En este ejemplo se usa FoundryChatClient desde Microsoft Agent Framework, se crea un cuadro de herramientas que contiene el servidor MCP de GitHub y, a continuación, se adjunta el punto de conexión del cuadro de herramientas al agente hospedado con FoundryToolbox. Instale los paquetes con pip install agent-framework-foundry, establezca las FOUNDRY_PROJECT_ENDPOINT variables de entorno y FOUNDRY_MODEL e inicie sesión con 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())

Salida esperada

El agente llama al servidor MCP de Microsoft Learn a través del punto de conexión del cuadro de herramientas y devuelve texto basado en documentación:

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

Para ver los patrones de agentes hospedados del cuadro de herramientas completo, consulte Uso de un cuadro de herramientas con un agente hospedado.


Creación de un agente con la herramienta MCP

En el ejemplo siguiente se muestra cómo agregar un servidor MCP remoto a un cuadro de herramientas y adjuntar el cuadro de herramientas a un agente. Seleccione Prompt Agents para usar el SDK de proyectos de IA de Azure para crear un agente de mensajes del lado servidor o Agentes hospedados para usar el marco del agente de Microsoft para crear un agente efímero en proceso.

Agentes rápidos

En el ejemplo se usan métodos sincrónicos para crear un agente. Para obtener métodos asincrónicos, consulte el código sample en el SDK de Azure para .NET repositorio en GitHub.

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

Salida esperada

En el ejemplo siguiente se muestra la salida esperada al ejecutar el ejemplo:

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.

Agentes hospedados

En este ejemplo se crea el cuadro de herramientas del servidor MCP con el SDK de proyectos de IA de Azure y, a continuación, se usa la integración de Microsoft Agent Framework AddFoundryToolboxes para exponer las herramientas del cuadro de herramientas al agente hospedado. Establezca las AZURE_AI_PROJECT_ENDPOINTvariables de entorno , AZURE_OPENAI_ENDPOINTy AZURE_AI_MODEL_DEPLOYMENT_NAME e inicie sesión con 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();

Salida esperada

Cuando se invoca, el agente alojado consulta el servidor MCP de Microsoft Learn a través del endpoint del conjunto de herramientas para obtener fragmentos de documentación y respuestas:

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` ...

Para obtener una integración mantenida de .NET Agent Framework, consulte Uso de un cuadro de herramientas con un agente hospedado.


Creación de un agente mediante la herramienta MCP con autenticación de conexión de proyecto

En este ejemplo, aprenderá a autenticarse en el servidor MCP de GitHub dentro de un cuadro de herramientas y, a continuación, asociar el punto de conexión mcP del cuadro de herramientas a un agente. En el ejemplo se usan métodos sincrónicos para crear el cuadro de herramientas y el agente. Para obtener métodos asincrónicos, consulte el código sample en el SDK de Azure para .NET repositorio en GitHub.

Configuración de la conexión del proyecto

Antes de ejecutar el ejemplo:

  1. Inicie sesión en el perfil de GitHub.
  2. Seleccione la imagen de perfil en la esquina superior derecha.
  3. Seleccione Configuración.
  4. En el panel izquierdo, seleccione Configuración de desarrollador y Tokens > de acceso personal (clásico) .
  5. En la parte superior, seleccione Generar nuevo token, escriba la contraseña y cree un token que pueda leer repositorios públicos.
    • Importante: Guarde el token o mantenga abierta la página como una vez cerrada la página, el token no se puede volver a mostrar.
  6. En el portal de Azure, abra Microsoft Foundry.
  7. Seleccione Administrar en la navegación superior derecha, seleccione Detalles del proyecto y, a continuación, seleccione la pestaña Recursos conectados.
  8. Cree una nueva conexión del tipo de claves personalizadas .
  9. Asígnele el nombre y agregue un par de valores de clave.
  10. Establezca el nombre de clave en Authorization y el valor debe tener una forma de Bearer your_github_token.

Ejemplo de código para crear el agente

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

Salida esperada

En el ejemplo siguiente se muestra la salida esperada al ejecutar el ejemplo:

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

Creación de un agente en TypeScript con la herramienta MCP

En el ejemplo de TypeScript siguiente se muestra cómo agregar un servidor MCP a un cuadro de herramientas, adjuntar el cuadro de herramientas a un agente, enviar solicitudes que desencadenan flujos de trabajo de aprobación de MCP, controlar solicitudes de aprobación y limpiar recursos. Para obtener una versión de JavaScript, consulte el código sample en el repositorio de SDK de Azure para JavaScript en GitHub.

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);
});

Salida esperada

En el ejemplo siguiente se muestra la salida esperada al ejecutar el ejemplo:

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!

Creación de un agente mediante la herramienta MCP con autenticación de conexión de proyecto

En el ejemplo de TypeScript siguiente se muestra cómo agregar un servidor MCP autenticado a un cuadro de herramientas, adjuntar el punto de conexión mcP del cuadro de herramientas a un agente, enviar solicitudes que desencadenan flujos de trabajo de aprobación de MCP, controlar solicitudes de aprobación y limpiar recursos. Para obtener una versión de JavaScript, consulte el código sample en el repositorio de SDK de Azure para JavaScript en GitHub.

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);
});

Salida esperada

En el ejemplo siguiente se muestra la salida esperada al ejecutar el ejemplo:

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!

Uso de herramientas de MCP en un agente de Java

Sugerencia

La mayoría de los agentes usan un cuadro de herramientas para agregar la herramienta de búsqueda de archivos y adjuntar el cuadro de herramientas al agente como una herramienta MCP. *Si usa el SDK de Java, todavía no está disponible una API para crear cuadros de herramientas. Crea una caja de herramientas mediante Python, la API de REST, C#, TypeScript o el portal de Foundry; después, haz referencia a su extremo de MCP desde tu agente de Java como un McpTool.

Agregue la dependencia a pom.xml:

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

Creación de un agente con la herramienta MCP

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

Salida esperada

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

Uso de la herramienta MCP con la API REST

En los ejemplos siguientes se muestra cómo crear un agente con la herramienta MCP y llamarlo mediante la API de respuestas. Si la respuesta incluye un elemento de salida con type establecido en mcp_approval_request, envíe una solicitud de seguimiento que incluya un elemento mcp_approval_response.

Requisitos previos

Establezca estas variables de entorno:

  • FOUNDRY_PROJECT_ENDPOINT: dirección URL del punto de conexión del proyecto.
  • FOUNDRY_MODEL_DEPLOYMENT_NAME: Su nombre de implementación del modelo.
  • AGENT_TOKEN: un token de portador para Foundry.
  • MCP_PROJECT_CONNECTION_NAME (opcional): el nombre de la conexión del proyecto MCP.

Obtención de un token de acceso:

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

Si el servidor MCP dentro del cuadro de herramientas no requiere autenticación, omita project_connection_id de la definición de la herramienta del cuadro de herramientas. La herramienta MCP del agente sigue usando project_connection_id para la conexión de herramienta remota con el punto de conexión de la caja de herramientas.

Nota

Para la API REST, use como project_connection_id en la herramienta MCP del agente el nombre de la conexión de proyecto de herramienta remota que cree para el punto de conexión de la caja de herramientas.

Sugerencia

Para más información sobre el esquema de la herramienta MCP y los elementos de aprobación, consulte la referencia de la API REST de Microsoft Foundry.

1. Crear un cuadro de herramientas con el servidor MCP

La manera recomendada de agregar un servidor MCP es a través de un cuadro de herramientas y, a continuación, adjuntar el cuadro de herramientas al agente como una herramienta MCP. Consulte ¿Qué es un cuadro de herramientas?

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"
      }
    ]
  }'

El cuadro de herramientas expone un punto de conexión compatible con MCP en $FOUNDRY_PROJECT_ENDPOINT/toolboxes/mcp-server-toolbox/versions/<version>/mcp?api-version=v1, donde <version> es la versión devuelta por la llamada anterior.

2. Crear una conexión de herramienta remota con el cuadro de herramientas

Cree una conexión de proyecto de herramienta remota que apunte al punto de conexión de la caja de herramientas. Use un token de Microsoft Entra del usuario para que se transmita la identidad del autor de la llamada (audiencia 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. Creación de un agente MCP

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"
        }
      ]
    }
  }'

Para usar un servidor MCP autenticado dentro del cuadro de herramientas, agregue "project_connection_id": "'$MCP_PROJECT_CONNECTION_NAME'" a la definición de la herramienta del cuadro de herramientas. Cambie server_url al punto de conexión de servidor autenticado (por ejemplo, https://api.githubcopilot.com/mcp).

4. Crear una respuesta

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"
  }'

Si la respuesta incluye un elemento de salida con type establecido en mcp_approval_request, copie el elemento de solicitud de aprobación id como APPROVAL_REQUEST_ID. Copie también la respuesta id de nivel superior como PREVIOUS_RESPONSE_ID.

5. Enviar una respuesta de aprobación

Si la herramienta MCP requiere aprobación, envíe una solicitud de seguimiento:

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. Limpieza de recursos

Elimine el agente:

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

Cómo funciona

Debe traer un servidor MCP remoto (un punto de conexión de servidor MCP existente) a Foundry Agent Service. Puede traer varios servidores MCP remotos agregándolos como herramientas. Para cada herramienta, debe proporcionar un valor único server_label dentro del mismo agente y un server_url valor que apunte al servidor MCP remoto. Asegúrese de revisar cuidadosamente qué servidores MCP añade al Servicio de Agente de Foundry.

Además de conectar servidores MCP remotos arbitrarios por dirección URL, algunos servidores MCP se pueden agregar directamente desde el catálogo Foundry Add Tools . Por ejemplo, Azure DevOps servidor MCP (versión preliminar) está disponible como entrada de catálogo. Las entradas del catálogo simplifican la configuración de la conexión y se alinean con los mismos mecanismos de aprobación y auditoría documentados en este artículo.

Para obtener más información sobre el uso de MCP, consulte:

Configuración de la conexión de MCP

Ruta de acceso secundaria: operaciones avanzadas: Use esta referencia después de la primera ruta correcta para restringir herramientas, cambiar el comportamiento de aprobación o agregar una conexión de proyecto.

En los pasos siguientes se describe cómo conectarse a un servidor MCP remoto desde foundry Agent Service:

  1. Busque el servidor MCP remoto al que desea conectarse, como el GitHub servidor MCP. Cree o actualice un agente de fábrica con la herramienta mcp mediante la siguiente información:
    1. server_url: la dirección URL del servidor MCP, como https://api.githubcopilot.com/mcp/.
    2. server_label: identificador único de este servidor MCP para el agente, como github.
    3. allowed_tools: una lista opcional de herramientas a las que este agente puede acceder y usar. Si no proporciona este valor, el valor predeterminado incluye todas las herramientas del servidor MCP.
    4. require_approval: opcionalmente, determine si se requiere aprobación. El valor predeterminado es always. Los valores admitidos son:
      • always: un desarrollador debe proporcionar aprobación para cada llamada. Si no proporciona un valor, este es el valor predeterminado.
      • never: no se requiere ninguna aprobación.
      • {"never":[<tool_name_1>, <tool_name_2>]}: proporciona una lista de herramientas que no requieren aprobación.
      • {"always":[<tool_name_1>, <tool_name_2>]}: proporciona una lista de herramientas que requieren aprobación.
  2. project_connection_id: identificador de conexión del proyecto que almacena la autenticación y otros detalles de conexión para el servidor MCP.
  3. Si el modelo intenta invocar una herramienta en el servidor MCP con la aprobación necesaria, obtendrá un tipo de elemento de salida de respuesta como mcp_approval_request. En el elemento de salida de respuesta, puede obtener más detalles sobre qué herramienta del servidor MCP se está llamando y qué argumentos se deben pasar. Revise la herramienta y los argumentos para que pueda tomar una decisión informada para su aprobación.
  4. Envíe la aprobación al agente mediante previous_response_id y establezca approve en true.

Conexión al servidor MCP de Azure DevOps

Azure DevOps Server MCP (en vista previa) está disponible como entrada de catálogo de Foundry. Para agregarlo:

  1. En el portal de Foundry, vaya a tu proyecto.
  2. Seleccione Agregar herramientas>Catalog y busque "Azure DevOps".
  3. Seleccione Azure DevOps SERVIDOR MCP (versión preliminar) y seleccione Crear.
  4. Escriba el nombre de la organización de Azure DevOps y seleccione Connect.
  5. Elija las herramientas de Azure DevOps que se van a exponer al agente. Puede seleccionar un subconjunto de herramientas para controlar exactamente a qué puede acceder el agente.

Esta configuración basada en catálogo crea la herramienta MCP para su uso por agentes sin necesidad de cambios de código. Puede validar la conectividad y el comportamiento de las herramientas en la experiencia de pruebas de chat de Foundry antes de integrar la herramienta en código de producción.

Sugerencia

Versionado del cuadro de herramientas: los cuadros de herramientas de Foundry admiten el versionado, por lo que puede iterar sobre una nueva versión sin afectar a los entornos de producción. Use el punto de conexión de consumidor ({project_endpoint}/toolboxes/{name}/mcp?api-version=v1) para los agentes de producción, ya que siempre usa la versión estable definitiva. Use el punto de conexión específico de la versión ({project_endpoint}/toolboxes/{name}/versions/{version}/mcp?api-version=v1) para probarlo antes de promocionarlo. Mantenga server_label único por agente, incluso al cambiar las versiones del Cuadro de herramientas. Para obtener más información, consulte Promover una versión a predeterminada.

Operaciones de larga duración (versión preliminar)

Ruta de acceso secundaria: modo de fondo: Use este modo solo cuando una operación de MCP no se pueda completar dentro del tiempo de espera sincrónico estándar.

Algunos servidores MCP exponen herramientas que tardan más que el tiempo de espera sincrónico estándar para devolver un resultado. Para admitir estas operaciones, ejecute el agente en modo en segundo plano. El modo en segundo plano ejecuta la respuesta de forma asincrónica, por lo que la llamada a la herramienta MCP puede continuar sin mantener una conexión abierta y sondea el estado de la respuesta hasta que se complete. Este enfoque permite que las llamadas a la herramienta MCP superen el tiempo de espera no de streaming de 100 segundos descrito en Limitaciones conocidas.

Nota

Las operaciones de MCP de larga duración están en versión preliminar. Las características en versión preliminar se proporcionan sin un contrato de nivel de servicio y no se recomiendan para cargas de trabajo de producción. El comportamiento y los modelos admitidos pueden cambiar.

Requisitos para el servidor MCP

El tiempo de ejecución del agente se basa en el servidor MCP para ejecutar la operación de forma asincrónica e informar del progreso. El servidor debe:

  • Implementar la capacidad de tareas del Protocolo de Contexto de Modelo para que una llamada a una herramienta pueda devolver una referencia a una tarea en lugar de bloquearse hasta que finalice el trabajo.
  • Devuelve un identificador de una tarea relacionada en los metadatos del resultado de la herramienta (el campo io.modelcontextprotocol/related-task con un taskId) cuando inicia una operación de larga ejecución.
  • Exponga una manera de que el tiempo de ejecución sondee el estado de la tarea y recupere el resultado final una vez completada la tarea.
  • Sea accesible como un punto de conexión de MCP remoto, igual que cualquier otra herramienta de MCP. Los servidores MCP locales deben estar autohospedados para proporcionar un punto de conexión remoto. Consulte Hospedaje de un servidor MCP local.

Cuando el entorno de ejecución del agente invoca una herramienta que inicia una operación de larga duración, el servidor devuelve la referencia de la tarea y el entorno de ejecución conserva la respuesta en segundo plano. El entorno de ejecución inicia la respuesta, devuelve inmediatamente una respuesta id y un status de queued, y recoge el resultado cuando finaliza la tarea. Consulta la respuesta id hasta que status sea completed, y luego lee la salida final.

El modo en segundo plano para las operaciones mcP de ejecución prolongada funciona con cualquier modelo que admita el modo en segundo plano, como gpt-5.4 o gpt-5.5.

Si el agente usa un modelo que no admite el modo en segundo plano, las llamadas a la herramienta MCP se ejecutan sincrónicamente y están sujetas al tiempo de espera de 100 segundos.

Habilitación del modo en segundo plano en el portal de Microsoft Foundry

Puede activar el modo de fondo de un agente en el área de juegos del portal de Microsoft Foundry, sin escribir código:

  1. Abre tu agente y selecciona la pestaña Playground.

  2. En la lista Modelo , seleccione un modelo que admita el modo en segundo plano, como gpt-5.4 o gpt-5.5.

  3. Seleccione el icono de parámetros situado junto al modelo y active el modo de fondo.

  4. En Herramientas, agregue una herramienta cuyo servidor MCP admita tareas MCP, como un agente de datos de Fabric agregado a través de la herramienta Fabric IQ. Para conocer los pasos, consulte Conexión de agentes a Microsoft Fabric con Fabric IQ.

  5. Enviar un mensaje. El agente inicia una ejecución en segundo plano y muestra su progreso mientras se completa la llamada a la herramienta de larga duración. Cuando finalice la ejecución, la respuesta aparecerá en el chat.

Ejecutar el modo en segundo plano con código

En los ejemplos siguientes se invoca un agente que ya está configurado con una herramienta MCP, se establece en backgroundtruey sondea hasta que se completa la respuesta. Reemplace los valores de los marcadores de posición por los suyos propios.

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

Cree una respuesta en segundo plano. La solicitud devuelve inmediatamente una respuesta id y un status de queued:

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
  }'

Copie la respuesta id del resultado y la copie, luego consúltela periódicamente hasta que status sea completed:

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

Cuando status es completed, la output matriz contiene el resultado de la llamada a la herramienta MCP y el mensaje final del asistente.

Limitaciones conocidas

Ruta secundaria: comportamiento de transmisión: Revise estos límites después de la ruta que produce el primer resultado correcto si el cliente transmite respuestas o si la llamada MCP se aproxima al tiempo de espera sincrónico.

  • Tiempo de espera de las llamadas no streaming de la herramienta MCP: las llamadas a la herramienta MCP no streaming tienen un tiempo de espera de 100 segundos. Si el servidor MCP tarda más de 100 segundos en responder, se produce un error en la llamada. Para evitar tiempos de espera, asegúrese de que el servidor MCP responde dentro de este límite. Si el caso de uso requiere tiempos de procesamiento más largos, ejecute el agente en modo en segundo plano con un modelo compatible, optimice la lógica del lado servidor o divida la operación en pasos más pequeños.
  • McP privado requiere la configuración del agente estándar: la conectividad del servidor MCP privado solo está disponible con el programa de instalación del agente estándar con redes privadas (red virtual BYO). La configuración básica del agente no admite puntos de conexión de MCP privados.
  • Private MCP hosting: Azure Container Apps en una subred MCP dedicada es la configuración probada para los servidores MCP privados. Las Function Apps o App Services como host de servidor MCP privado pueden funcionar, pero no están validadas de manera interna.

Preguntas y errores comunes

Es posible que se produzcan los siguientes problemas comunes al usar herramientas de MCP con el servicio del agente Foundry:

  • "Esquema de herramientas no válido":

    Este error suele ocurrir si la definición del servidor MCP incluye anyOf o allOf, o si un parámetro acepta varios tipos de valores. Actualice la definición del servidor MCP e inténtelo de nuevo.

  • "No autorizado" o "Prohibido" del servidor MCP:

    Confirme que el servidor MCP admite el método de autenticación y compruebe las credenciales almacenadas en la conexión del proyecto. Para GitHub, use tokens con privilegios mínimos y rotarlos con regularidad.

  • El modelo nunca invoca la herramienta MCP.

    Confirme que las instrucciones del agente fomentan el uso de las herramientas y verifique los valores de server_label, server_url y allowed_tools. Si establece allowed_tools, asegúrese de que el nombre de la herramienta coincide con lo que expone el servidor MCP.

  • El agente nunca continúa después de la aprobación:

    Confirme que envía una solicitud de seguimiento con previous_response_id establecida en el identificador de respuesta original y que usa el identificador de elemento de solicitud de aprobación como approval_request_id.

Hospedaje de un servidor MCP local

El entorno de ejecución del servicio del agente solo acepta un punto de conexión remoto del servidor MCP. Si desea agregar herramientas desde un servidor MCP local, debe hospedarla automáticamente en Azure Container Apps o Azure Functions para obtener un punto de conexión de servidor MCP remoto.

El punto de conexión remoto puede ser un punto de conexión público o un punto de conexión privado dentro de la red virtual. En el caso de los servidores MCP privados, implemente la aplicación contenedora con entrada solo interna (--internal-only true) en una subred MCP dedicada. Consulte Puntos de conexión de servidor MCP públicos y privados para obtener más información sobre la configuración.

Tenga en cuenta los siguientes factores al hospedar servidores MCP locales en la nube:

Configuración del servidor MCP local Hospedaje en Azure Container Apps Hospedaje en Azure Functions
Transporte Se requieren puntos de conexión HTTP POST/GET. Se requiere streaming HTTP.
Cambios de código Se requiere la recompilación del contenedor. Los archivos de configuración específicos de Azure Functions son necesarios en el directorio raíz.
Autenticación Se requiere la implementación de autenticación personalizada. Solo sistema basado en claves. OAuth necesita API Management.
Idioma Cualquier lenguaje que se ejecute en contenedores de Linux (Python, Node.js, .NET, TypeScript, Go). Python, Node.js, Java, .NET solamente.
Requisitos de contenedor Solo para Linux (linux/amd64). No hay contenedores con privilegios. No se admiten servidores en contenedores.
Dependencias Todas las dependencias deben estar en la imagen del contenedor. No se admiten las dependencias de nivel de sistema operativo (como Playwright).
Estado Solo sin estado. Solo sin estado.
UVX/NPX Soportado. No se admite. npx comandos de inicio no admitidos.