Добавление приложений MCP к декларативным агентам в Microsoft 365 Copilot

Приложения MCP — это интерактивные мини-приложения пользовательского интерфейса, работающие внутри Microsoft 365 Copilot на платформе серверов протокола контекста модели (MCP). Они позволяют декларативным агентам выходить за рамки текстовых ответов и предоставлять обширные и полезные интерфейсы непосредственно в чате Copilot. Вы можете добавить приложения MCP к своим декларативным агентам, добавив подключаемый модуль на основе сервера MCP , инструменты которого возвращают интерактивный пользовательский интерфейс. Microsoft 365 Copilot поддерживает мини-приложения пользовательского интерфейса, созданные с помощью следующих методов.

  • MCP-приложения — расширение MCP, позволяющее MCP-серверам предоставлять интерактивные пользовательские интерфейсы узлам.
  • OpenAI Apps SDK — инструменты для создания приложений ChatGPT на основе стандарта MCP Apps с дополнительной функциональностью ChatGPT.

Например, см. примеры подключаемых модулей сервера MCP, см. примеры интерактивного пользовательского интерфейса на основе MCP для Microsoft 365 Copilot на GitHub.

Подробнее о том, какие приложения MCP или возможности пакета SDK приложений OpenAI поддерживаются, см. в разделе Поддерживаемые возможности приложений MCP в Copilot.

Снимок экрана: приложение MCP, отображающее мини-приложение встроенных задач спринта в Microsoft 365 Copilot

Снимок экрана: приложение MCP, отображающее мини-приложение задач спринта в полноэкранном режиме в Microsoft 365 Copilot

Предварительные требования для приложений MCP

Требования к серверу MCP для приложений MCP

  • Проверка подлинности - Copilot поддерживает OAuth 2.1 и единый вход (SSO) Microsoft Entra. В целях разработки Copilot поддерживает анонимную проверку подлинности с помощью параметра "Нет " в наборе средств агентов. Дополнительные сведения об аутентификации см. в разделе Настройка аутентификации для плагинов API в агентах.
  • Разрешенные URL-адреса . Как сервер MCP, так и поставщик удостоверений должны разрешить следующие URL-адреса.
    • URL-адрес узла мини-приложений для CORS — Copilot отображает пользовательский интерфейс мини-приложения под узлом, специфичным для сервера MCP, со следующим URL-адресом: {hashed-mcp-domain}.widget-renderer.usercontent.microsoft.comгде {hashed-mcp-domain} — хэш SHA-256 домена сервера MCP. Генератор URL-адресов узлов мини-приложений можно использовать для создания URL-адреса узла на основе URL-адреса сервера MCP.
    • URI перенаправления OAuth 2.1:
      • https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect для Copilot
      • https://vscode.dev/redirectдля получения инструментов Visual Studio Code с помощью набора средств агентов
    • URI перенаправления единого входа Microsoft Entra:
      • https://teams.microsoft.com/api/platform/v1.0/oAuthConsentRedirect для Copilot
      • В настоящее время Visual Studio Code не поддерживает единый вход для средств получения
  • Мини-приложения пользовательского интерфейса — реализуйте мини-приложения пользовательского интерфейса в соответствии с требованиями MCP Apps или OpenAI Apps SDK.

Рекомендации по приложениям MCP в Copilot

Дизайн пользовательского опыта

Дополнительные сведения о рекомендациях по проектированию UX см. в руководстве по взаимодействию с пользователем для приложений MCP в декларативных агентах для Microsoft 365 Copilot.

Проверка доступности API

Не все window.openai.* API доступны на каждой платформе или узле. Неподдерживаемые API .undefined Всегда проверка доступность API и предоставлять резервные варианты, если API недоступен.

Примеры

Этот простой шаблон позволяет избежать ошибок во время выполнения за счет проверки перед вызовом 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.
}

В этом примере кнопка перехода в полноэкранный режим отображается только в том случае, если узел поддерживает 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>
  );
}

Кроме того, мини-приложение может проверка доступность всех API, которые оно использует при запуске, и соответствующим образом включать или отключать функции.

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
}

Создание и загрузка неопубликованного агента

Создание декларативного агента из сервера MCP, настройка проверки подлинности и загрузка неопубликованного приложения — это одно и то же, независимо от того, возвращает ли сервер мини-приложения пользовательского интерфейса или нет. Полное руководство см. в статье Создание подключаемого модуля для декларативного агента из сервера MCP.

При выполнении этого руководства учитывайте следующие рекомендации для приложений MCP.

  • Сервер MCP должен возвращать мини-приложения пользовательского интерфейса в соответствии с требованиями MCP Apps или OpenAI Apps SDK. См. требования к серверу MCP для приложений MCP.
  • По умолчанию агент использует динамическое обнаружение средств и разрешает средства сервера, включая инструменты, возвращающие мини-приложения пользовательского интерфейса, во время выполнения, поэтому вам не нужно добавлять инструменты вручную. Если вместо этого вы закрепили фиксированный набор инструментов, обязательно включите хотя бы одно средство, которое возвращает мини-приложение пользовательского интерфейса.
  • Если сервер MCP все еще находится в разработке и проверка подлинности не реализуется, выберите тип проверки подлинности "Нет ". Добавьте проверку подлинности перед развертыванием в рабочую среду.

Протестируйте агент

  1. В браузере перейдите по адресу https://m365.cloud.microsoft/chat.
  2. Выберите агента на левой боковой панели. Если агент не отображается, выберите "Все агенты".
  3. Попросите агента выполнить действие, вызывающее сервер MCP.
  4. Разрешите агенту подключиться к серверу MCP при появлении соответствующего запроса.
  5. Убедитесь, что агент отрисовывает мини-приложение пользовательского интерфейса.

Если мини-приложение не отображается или не работает должным образом, см. статью Устранение неполадок с приложениями MCP в Microsoft 365 Copilot.

Поддерживаемые возможности приложений MCP в Copilot

Microsoft 365 Copilot поддерживает следующие возможности.

Компонентный мост

SDK приложений OpenAI Эквивалент приложений MCP Поддержка
window.openai.toolInput app.ontoolinput ✅
window.openai.toolOutput app.ontoolresult ✅
window.openai.toolResponseMetadata app.ontoolresult → params._meta ✅
window.openai.widgetState — ✅
window.openai.setWidgetState(state) Недоступно напрямую. Используйте альтернативные механизмы, включая app.updateModelContext() ✅
window.openai.callTool(name, args) app.callServerTool({ name, arguments }) ✅
window.openai.sendFollowUpMessage({ prompt }) app.sendMessage({ ... }) ✅
window.openai.uploadFile(file) — ❌
window.openai.getFileDownloadUrl({ fileId }) — ❌
window.openai.requestDisplayMode(...) app.requestDisplayMode({ mode }) ✅ (только во весь экран)
window.openai.requestModal(...) — ❌
window.openai.notifyIntrinsicHeight(...) app.sendSizeChanged({ width, height }) ✅
window.openai.openExternal({ href }) app.openLink({ url }) ✅
window.openai.setOpenInAppUrl({ href }) — ✅
window.openai.theme app.getHostContext()?.theme ✅
window.openai.displayMode app.getHostContext()?.displayMode ✅
window.openai.maxHeight app.getHostContext()?.viewport?.maxHeight ✅
window.openai.safeArea app.getHostContext()?.safeAreaInsets ✅
window.openai.view — ✅
window.openai.userAgent app.getHostContext()?.userAgent ✅
window.openai.locale app.getHostContext()?.locale ✅
— app.ontoolinputpartial ❌
— app.ontoolcancelled ❌
— app.getHostContext()?.availableDisplayModes ❌
— app.getHostContext()?.toolInfo ❌
— app.onhostcontextchanged ❌
— app.onteardown ❌
— app.sendLog({ level, data }) ❌
— app.getHostVersion() ❌
— app.getHostCapabilities() ✅

Дескриптор инструмента _meta поля

SDK приложений OpenAI Эквивалент приложений MCP Поддержка
_meta["openai/outputTemplate"] _meta.ui.resourceUri ✅
_meta["openai/widgetAccessible"] _meta.ui.visibility (строка[]) ❌
_meta["openai/visibility"] _meta.ui.visibility (строка[]) ✅
_meta["openai/toolInvocation/invoking"] — ❌
_meta["openai/toolInvocation/invoked"] — ❌
_meta["openai/fileParams"] — ❌
_meta["securitySchemes"] — ❌

Аннотации дескрипторов инструментов

SDK приложений OpenAI Эквивалент приложений MCP Поддержка
readOnlyHint readOnlyHint ✅
destructiveHint destructiveHint ❌
openWorldHint openWorldHint ❌
idempotentHint idempotentHint ❌

Поля _meta ресурсов компонента

SDK приложений OpenAI Эквивалент приложений MCP Поддержка
_meta["openai/widgetDescription"] — ❌
_meta["openai/widgetPrefersBorder"] _meta.ui.prefersBorder ❌
_meta["openai/widgetCSP"] _meta.ui.csp ✅
_meta["openai/widgetDomain"] _meta.ui.domain ❌
— _meta.ui.permissions ❌

Свойства в объекте CSP

SDK приложений OpenAI Эквивалент приложений MCP Поддержка
connect_domains connectDomains ✅
resource_domains resourceDomains ✅
frame_domains frameDomains ❌
redirect_domains — ❌
— baseUriDomains ❌

Поля результатов _meta средства, предоставленные организатором

SDK приложений OpenAI Эквивалент приложений MCP Поддержка
_meta["openai/widgetSessionId"] — ❌

Поля _meta, предоставляемые клиентом

SDK приложений OpenAI Эквивалент приложений MCP Поддержка
_meta["openai/locale"] _meta["openai/locale"] ✅
_meta["openai/userAgent"] _meta["openai/userAgent"] ✅
_meta["openai/userLocation"] _meta["openai/userLocation"] ✅
_meta["openai/subject"] — ❌

Вопросы и ответы о приложениях MCP в Copilot

Что такое приложения MCP?

Приложения MCP — это интерактивные мини-приложения пользовательского интерфейса, предоставляемые серверами MCP, которые отображаются непосредственно в Microsoft 365 Copilot. Они расширяют возможности декларативных агентов, выходя за рамки текстовых ответов, обеспечивая широкие возможности, такие как визуализация данных, формы и интерфейсы управления задачами.

В чем разница между приложениями MCP и пакетом SDK приложений OpenAI?

Приложения MCP — это открытое расширение стандарта MCP, позволяющее серверам MCP доставлять интерактивные пользовательские интерфейсы на любой совместимый узел. SDK приложений OpenAI основан на стандарте MCP Apps и добавляет дополнительные функции, специфичные для ChatGPT. Microsoft 365 Copilot поддерживает оба решения, хотя не все возможности доступны. Подробные сведения см. в разделе "Поддерживаемые возможности приложений MCP" в Copilot .

Можно ли использовать приложения MCP без проверки подлинности во время разработки?

Да. Анонимная проверка подлинности поддерживается для целей разработки. Однако перед развертыванием в рабочей среде необходимо добавить проверку подлинности. В качестве поддерживаемых методов проверки подлинности OAuth 2.1 и единого входа (SSO) Microsoft Entra можно использовать следующие методы проверки подлинности. Подробнее см. в разделе Настройка аутентификации для плагинов API в агентах.