Compartir a través de


Adición de widgets de interfaz de usuario interactivos a agentes declarativos

Puede agregar widgets de interfaz de usuario interactivos a los agentes declarativos agregando una acción basada en servidor del Protocolo de contexto de modelo (MCP) al agente y ampliando las herramientas de MCP que usa el agente para incluir la interfaz de usuario. Microsoft 365 Copilot admite widgets de interfaz de usuario creados mediante el SDK de OpenAI Apps.

Por ejemplo, complementos de servidor MCP, consulte ejemplos de interfaz de usuario interactiva basada en MCP para Microsoft 365 Copilot en GitHub.

Nota:

El soporte técnico para aplicaciones MCP estará disponible próximamente.

Para obtener más información sobre qué funcionalidades del SDK de OpenAI Apps se admiten, consulte Funcionalidades admitidas.

Captura de pantalla del widget de tareas sprint en Microsoft 365 Copilot

Captura de pantalla del widget de tareas sprint en modo de pantalla completa en Microsoft 365 Copilot

Requisitos previos

Requisitos del servidor MCP

  • Autenticación: se admiten OAuth 2.1 y Microsoft Entra inicio de sesión único (SSO). La autenticación anónima se admite con fines de desarrollo. Para obtener más información sobre la autenticación, consulte Configuración de la autenticación para complementos de API en agentes.
  • Direcciones URL permitidas : el servidor MCP y el proveedor de identidades deben permitir las siguientes direcciones URL.
    • Dirección URL del host de widget para CORS: Copilot representa la interfaz de usuario del widget en un host específico del servidor MCP con la siguiente dirección URL: {hashed-mcp-domain}.widget-renderer.usercontent.microsoft.com, donde {hashed-mcp-domain} es el hash SHA-256 del dominio del servidor MCP. Puede usar el generador de direcciones URL del host de widget para generar la dirección URL del host en función de la dirección URL del servidor MCP.
    • URI de redireccionamiento de OAuth 2.1:
      • https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect para Copilot
      • https://vscode.dev/redirectpara Visual Studio Code para capturar herramientas mediante el kit de herramientas de agentes
    • Microsoft Entra URI de redireccionamiento de SSO:
      • https://teams.microsoft.com/api/platform/v1.0/oAuthConsentRedirect para Copilot
      • Visual Studio Code no admite actualmente el inicio de sesión único para capturar herramientas
  • Widgets de interfaz de usuario : los widgets de la interfaz de usuario se deben implementar de acuerdo con los requisitos del SDK de aplicaciones de MCP o OpenAI Apps.

Procedimientos recomendados

Para obtener más información sobre los procedimientos recomendados de diseño de experiencia de usuario, consulte Instrucciones de experiencia del usuario para widgets interactivos de interfaz de usuario en agentes declarativos.

Comprobación de la disponibilidad de la API

No todas las window.openai.* API están disponibles en todas las plataformas o hosts. Las API que no son compatibles son undefined. Compruebe siempre la disponibilidad de la API y proporcione una reserva si la API no está disponible.

Ejemplos

Este patrón simple evita errores en tiempo de ejecución comprobando antes de llamar a la API.

if (window.openai.callTool) {
  const result = await window.openai.callTool({ name: 'myTool', params: {} });
} else {
  // Handle unsupported case — show fallback UI, skip the feature, etc.
}

En este ejemplo, solo se representa un botón para entrar en modo de pantalla completa si el host admite la requestDisplayMode API.

function FullScreenButton() {
  // Don't render the button if the host doesn't support it
  if (!window.openai.requestDisplayMode) {
    return null;
  }

  return (
    <button onClick={() => window.openai.requestDisplayMode({ mode: 'fullscreen' })}>
      Enter Fullscreen
    </button>
  );
}

Como alternativa, el widget puede comprobar la disponibilidad de todas las API que usa en el inicio y habilitar o deshabilitar las características en consecuencia.

interface PlatformCapabilities {
  canCallTools: boolean;
  canChangeDisplayMode: boolean;
  canSendMessages: boolean;
}

function detectCapabilities(): PlatformCapabilities {
  return {
    canCallTools: !!window.openai.callTool,
    canChangeDisplayMode: !!window.openai.requestDisplayMode,
    canSendMessages: !!window.openai.sendMessage,
  };
}

// Use at widget startup
const capabilities = detectCapabilities();

if (!capabilities.canCallTools) {
  // Show a reduced-functionality experience
}

Creación de un agente declarativo

  1. Abra Visual Studio Code y seleccione el icono Microsoft 365 Agents Toolkit (Kit de herramientas de agentes de Microsoft 365) en la barra de actividad de la izquierda.

  2. Seleccione Crear un nuevo agente o aplicación en el panel de tareas Kit de herramientas de agentes.

    Captura de pantalla de la interfaz del kit de herramientas de agentes

  3. Seleccione Agente declarativo.

  4. Seleccione Agregar una acción y, a continuación, seleccione Iniciar con un servidor MCP. Si se le solicita, elija Servidor MCP remoto.

  5. Escriba la dirección URL al servidor MCP.

  6. Elija una ubicación para el proyecto del agente.

  7. Escriba un nombre para el agente.

Cuando complete estos pasos, Agents Toolkit genera los archivos necesarios para el agente y abre una nueva ventana Visual Studio Code con el proyecto del agente cargado.

Actualización y transferencia local del agente

  1. Abra el archivo .vscode/mcp.json . Seleccione el botón Iniciar en el editor de archivos.

  2. Seleccione el botón ATK: Capturar acción de MCP en el editor de archivos y, a continuación, seleccione ai-plugin.json.

    Captura de pantalla de los botones

  3. Seleccione las herramientas para que el agente use y seleccione Aceptar. Asegúrese de seleccionar al menos una herramienta que tenga un widget de interfaz de usuario.

  4. Seleccione el tipo de autenticación aplicable.

    Captura de pantalla del símbolo del sistema para elegir el tipo de autenticación

    Importante

    Si el servidor MCP está en desarrollo y no implementa la autenticación, se omite este paso. Debe agregar manualmente la autenticación al manifiesto una vez que agregue la autenticación al servidor.

  5. Abra mcp-tools.json y reemplace el valor existente por el tools/list JSON de respuesta del servidor MCP. Use una herramienta de prueba como MCP Inspector para obtener la respuesta del servidor.

    Nota:

    Este paso es temporal. Agents Toolkit se actualizará para que este paso no sea necesario en el futuro.

  6. Seleccione el icono microsoft 365 Agents Toolkit en la barra de actividad de la izquierda.

  7. En el panel Cuentas , seleccione Iniciar sesión en Microsoft 365. (Si ya ha iniciado sesión, continúe con el paso siguiente).

  8. Confirme que tanto la carga de aplicaciones personalizadas habilitada comoel acceso de Copilot habilitado se muestran en su cuenta de Microsoft 365. Si no lo hacen, consulte con el administrador de la organización. Consulte Requisitos para las opciones de extensibilidad de Copilot para obtener más información.

  9. En el panel Ciclo de vida , seleccione Aprovisionar.

  10. Si se le solicita, agregue los detalles de autenticación.

  11. Espere a que el kit de herramientas informe de que finaliza el aprovisionamiento.

Prueba del agente

  1. Abra el explorador y vaya a https://m365.cloud.microsoft/chat.
  2. Seleccione el agente en la barra lateral izquierda. Si no ve el agente, seleccione Todos los agentes.
  3. Pida al agente que haga algo que invoque el servidor MCP.
  4. Permitir que el agente se conecte al servidor MCP cuando se le solicite.
  5. El agente representa el widget de interfaz de usuario.

Funciones admitidas

Microsoft 365 Copilot admite las siguientes funcionalidades.

Puente de componentes

OpenAI Apps SDK ¿Se admite?
window.openai.toolInput
window.openai.toolOutput
window.openai.toolResponseMetadata
window.openai.widgetState
window.openai.setWidgetState(state)
window.openai.callTool(name, args)
window.openai.sendFollowUpMessage({ prompt })
window.openai.uploadFile(file)
window.openai.getFileDownloadUrl({ fileId })
window.openai.requestDisplayMode(...) ✅ (solo pantalla completa)
window.openai.requestModal(...)
window.openai.notifyIntrinsicHeight(...)
window.openai.openExternal({ href })
window.openai.setOpenInAppUrl({ href })
window.openai.theme
window.openai.displayMode
window.openai.maxHeight
window.openai.safeArea
window.openai.view
window.openai.userAgent
window.openai.locale

Campos de _meta del descriptor de herramientas

OpenAI Apps SDK ¿Se admite?
_meta["openai/outputTemplate"]
_meta["openai/widgetAccessible"]
_meta["openai/visibility"]
_meta["openai/toolInvocation/invoking"]
_meta["openai/toolInvocation/invoked"]
_meta["openai/fileParams"]
_meta["securitySchemes"]

Anotaciones de descriptor de herramientas

OpenAI Apps SDK ¿Se admite?
readOnlyHint
destructiveHint
openWorldHint
idempotentHint

Campos de _meta de recursos de componente

OpenAI Apps SDK ¿Se admite?
_meta["openai/widgetDescription"]
_meta["openai/widgetPrefersBorder"]
_meta["openai/widgetCSP"]
_meta["openai/widgetDomain"]

Propiedades del objeto CSP

OpenAI Apps SDK ¿Se admite?
connect_domains
resource_domains
frame_domains
redirect_domains

Resultados de la herramienta proporcionados por el host _meta campos

OpenAI Apps SDK ¿Se admite?
_meta["openai/widgetSessionId"]

Campos de _meta proporcionados por el cliente

OpenAI Apps SDK ¿Se admite?
_meta["openai/locale"]
_meta["openai/userAgent"]
_meta["openai/userLocation"]
_meta["openai/subject"]