Hinzufügen von MCP-Apps zu deklarativen Agents in Microsoft 365 Copilot

MCP-Apps sind interaktive Ui-Widgets, die in Microsoft 365 Copilot ausgeführt werden, die von MCP-Servern (Model Context Protocol) unterstützt werden. Sie ermöglichen deklarativen Agents, über Textantworten hinauszugehen und umfassende, umsetzbare Erfahrungen direkt im Copilot-Chat bereitzustellen. Sie können MCP-Apps zu Ihren deklarativen Agents hinzufügen, indem Sie Ihrem Agent eine MCP-serverbasierte Aktion hinzufügen und die vom Agent verwendeten MCP-Tools erweitern, um die Benutzeroberfläche einzuschließen. Microsoft 365 Copilot unterstützt UI-Widgets, die mit den folgenden Methoden erstellt wurden.

  • MCP-Apps : Eine Erweiterung von MCP, die es MCP-Servern ermöglicht, interaktive Benutzeroberflächen für Hosts bereitzustellen.
  • OpenAI Apps SDK : Tools zum Erstellen von ChatGPT-Apps basierend auf dem MCP Apps-Standard mit zusätzlicher ChatGPT-Funktionalität.

Beispiele für MCP-Server-Plug-Ins finden Sie unter MCP-basierte interaktive UI-Beispiele für Microsoft 365 Copilot auf GitHub.

Ausführliche Informationen dazu, welche MCP Apps- oder OpenAI Apps SDK-Funktionen unterstützt werden, finden Sie unter Unterstützte MCP-Apps-Funktionen in Copilot.

Screenshot einer MCP-App, die ein Widget für Inline-Sprintaufgaben in Microsoft 365 Copilot

Screenshot einer MCP-App, die ein Sprint-Aufgabenwidget im Vollbildmodus in Microsoft 365 Copilot

Voraussetzungen für MCP-Apps

MCP-Serveranforderungen für MCP-Apps

  • Authentifizierung: OAuth 2.1 und Microsoft Entra einmaliges Anmelden (Single Sign-On, SSO) werden unterstützt. Die anonyme Authentifizierung wird für Entwicklungszwecke unterstützt. Ausführliche Informationen zur Authentifizierung finden Sie unter Konfigurieren der Authentifizierung für API-Plug-Ins in Agents.
  • Zulässige URLs : Die folgenden URLs sollten sowohl von Ihrem MCP-Server als auch von Ihrem Identitätsanbieter zugelassen werden.
    • Widgethost-URL für CORS: Copilot rendert die Widgetbenutzeroberfläche unter einem MCP-serverspezifischen Host mit der folgenden URL: {hashed-mcp-domain}.widget-renderer.usercontent.microsoft.com, wobei {hashed-mcp-domain} der SHA-256-Hash der Domäne Ihres MCP-Servers ist. Sie können den Widgethost-URL-Generator verwenden, um die Host-URL basierend auf ihrer MCP-Server-URL zu generieren.
    • OAuth 2.1-Umleitungs-URIs:
      • https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect für Copilot
      • https://vscode.dev/redirect für Visual Studio Code zum Abrufen von Tools mithilfe des Agents-Toolkits
    • Microsoft Entra SSO-Umleitungs-URIs:
      • https://teams.microsoft.com/api/platform/v1.0/oAuthConsentRedirect für Copilot
      • Visual Studio Code unterstützt derzeit SSO nicht zum Abrufen von Tools.
  • UI-Widgets : Ui-Widgets müssen gemäß den Anforderungen des MCP Apps- oder OpenAI Apps SDK implementiert werden.

Bewährte Methoden für MCP-Apps in Copilot

Design der Benutzeroberfläche

Ausführliche Informationen zu bewährten Methoden für den UX-Entwurf finden Sie unter Richtlinien zur Benutzererfahrung für MCP-Apps in deklarativen Agents für Microsoft 365 Copilot.

Überprüfen der API-Verfügbarkeit

Nicht alle window.openai.* APIs sind auf jeder Plattform oder jedem Host verfügbar. ApIs, die nicht unterstützt werden, sind undefined. Überprüfen Sie immer die API-Verfügbarkeit, und geben Sie einen Fallback an, wenn die API nicht verfügbar ist.

Beispiele

Dieses einfache Muster vermeidet Laufzeitfehler, indem vor dem Aufruf der API überprüft wird.

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

In diesem Beispiel wird eine Schaltfläche zum Wechseln in den Vollbildmodus nur gerendert, wenn der Host die requestDisplayMode API unterstützt.

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

Alternativ kann Ihr Widget die Verfügbarkeit aller APIs überprüfen, die es beim Start verwendet, und features entsprechend aktivieren/deaktivieren.

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
}

Erstellen eines deklarativen Agents

  1. Öffnen Sie Visual Studio Code, und wählen Sie in der linken Aktivitätsleiste das Symbol Microsoft 365 Agents Toolkit aus.

  2. Wählen Sie im Aufgabenbereich Agents Toolkit die Option Create a New Agent/App (Neuen Agent/Neue App erstellen) aus.

    Screenshot der Benutzeroberfläche des Agents-Toolkits

  3. Wählen Sie Deklarativer Agent aus.

  4. Wählen Sie Aktion hinzufügen und dann Mit einem MCP-Server starten aus. Wenn Sie dazu aufgefordert werden, wählen Sie Remote-MCP-Server aus.

  5. Geben Sie die URL zu Ihrem MCP-Server ein.

  6. Wählen Sie einen Speicherort für das Agent-Projekt aus.

  7. Geben Sie einen Namen für den Agent ein.

Wenn Sie diese Schritte ausführen, generiert das Agents-Toolkit die erforderlichen Dateien für den Agent und öffnet ein neues Visual Studio Code-Fenster mit geladenem Agent-Projekt.

Aktualisieren und Querladen des Agents

  1. Öffnen Sie die Datei .vscode/mcp.json . Wählen Sie im Datei-Editor die Schaltfläche Start aus.

  2. Wählen Sie im Datei-Editor die Schaltfläche ATK: Aktion aus MCP abrufen aus, und wählen Sie dann ai-plugin.json aus.

    Screenshot der Schaltflächen

  3. Wählen Sie die Tools aus, die der Agent verwenden soll, und klicken Sie auf OK. Achten Sie darauf, mindestens ein Tool auszuwählen, das über ein Ui-Widget verfügt.

  4. Wählen Sie den entsprechenden Authentifizierungstyp aus.

    Screenshot der Aufforderung zur Auswahl des Authentifizierungstyps

    Wichtig

    Wenn sich Ihr MCP-Server in der Entwicklung befindet und keine Authentifizierung implementiert, wird dieser Schritt übersprungen. Sie müssen Ihrem Manifest die Authentifizierung manuell hinzufügen, nachdem Sie ihrem Server die Authentifizierung hinzugefügt haben.

  5. Wählen Sie in der linken Aktivitätsleiste das Symbol Microsoft 365 Agents Toolkit aus.

  6. Wählen Sie im Bereich Konten die Option Bei Microsoft 365 anmelden aus. (Wenn Sie bereits angemeldet sind, fahren Sie mit dem nächsten Schritt fort.)

  7. Vergewissern Sie sich, dass sowohl benutzerdefinierter App-Upload aktiviert als auch Copilot-Zugriff aktiviert unter Ihrem Microsoft 365-Konto angezeigt werden. Wenn dies nicht der Fall ist, wenden Sie sich an Ihren organization Administrator. Ausführliche Informationen finden Sie unter Anforderungen für Copilot-Erweiterbarkeitsoptionen.

  8. Wählen Sie im Bereich Lebenszyklus die Option Bereitstellen aus.

  9. Wenn Sie dazu aufgefordert werden, fügen Sie Ihre Authentifizierungsdetails hinzu.

  10. Warten Sie, bis das Toolkit meldet, dass es die Bereitstellung abgeschlossen hat.

Testen des Agents

  1. Öffnen Sie Ihren Browser, und navigieren Sie zu https://m365.cloud.microsoft/chat.
  2. Wählen Sie in der linken Randleiste Ihren Agent aus. Wenn Ihr Agent nicht angezeigt wird, wählen Sie Alle Agents aus.
  3. Bitten Sie den Agent, etwas zu tun, das Ihren MCP-Server aufruft.
  4. Lassen Sie zu, dass der Agent eine Verbindung mit dem MCP-Server herstellt, wenn er dazu aufgefordert wird.
  5. Der Agent rendert das Ui-Widget.

Wenn das Widget nicht wie erwartet angezeigt wird oder sich nicht wie erwartet verhält, finden Sie weitere Informationen unter Problembehandlung für MCP-Apps in Microsoft 365 Copilot.

Unterstützte MCP-Apps-Funktionen in Copilot

Microsoft 365 Copilot unterstützt die folgenden Funktionen.

Komponentenbrücke

OpenAI Apps SDK MCP-Apps-Entsprechung Unterstützt?
window.openai.toolInput app.ontoolinput
window.openai.toolOutput app.ontoolresult
window.openai.toolResponseMetadata app.ontoolresultparams._meta
window.openai.widgetState
window.openai.setWidgetState(state) Nicht direkt verfügbar. Verwenden alternativer Mechanismen, einschließlich 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 }) ✅ (nur Im Vollbildmodus)
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()

Tooldeskriptor _meta Feldern

OpenAI Apps SDK MCP-Apps-Entsprechung Unterstützt?
_meta["openai/outputTemplate"] _meta.ui.resourceUri
_meta["openai/widgetAccessible"] _meta.ui.visibility (string[])
_meta["openai/visibility"] _meta.ui.visibility (string[])
_meta["openai/toolInvocation/invoking"]
_meta["openai/toolInvocation/invoked"]
_meta["openai/fileParams"]
_meta["securitySchemes"]

Tooldeskriptoranmerkungen

OpenAI Apps SDK MCP-Apps-Entsprechung Unterstützt?
readOnlyHint readOnlyHint
destructiveHint destructiveHint
openWorldHint openWorldHint
idempotentHint idempotentHint

Komponentenressourcen _meta Feldern

OpenAI Apps SDK MCP-Apps-Entsprechung Unterstützt?
_meta["openai/widgetDescription"]
_meta["openai/widgetPrefersBorder"] _meta.ui.prefersBorder
_meta["openai/widgetCSP"] _meta.ui.csp
_meta["openai/widgetDomain"] _meta.ui.domain
_meta.ui.permissions

Eigenschaften im CSP-Objekt

OpenAI Apps SDK MCP-Apps-Entsprechung Unterstützt?
connect_domains connectDomains
resource_domains resourceDomains
frame_domains frameDomains
redirect_domains
baseUriDomains

Vom Host bereitgestelltes Toolergebnis _meta Feldern

OpenAI Apps SDK MCP-Apps-Entsprechung Unterstützt?
_meta["openai/widgetSessionId"]

Vom Client bereitgestellte _meta Felder

OpenAI Apps SDK MCP-Apps-Entsprechung Unterstützt?
_meta["openai/locale"] _meta["openai/locale"]
_meta["openai/userAgent"] _meta["openai/userAgent"]
_meta["openai/userLocation"] _meta["openai/userLocation"]
_meta["openai/subject"]

Häufig gestellte Fragen zu MCP-Apps in Copilot

Was sind MCP-Apps?

MCP-Apps sind interaktive Benutzeroberflächenwidgets, die von MCP-Servern bereitgestellt werden und direkt in Microsoft 365 Copilot gerendert werden. Sie erweitern deklarative Agents über reine Textantworten hinaus und ermöglichen umfassende Funktionen wie Datenvisualisierungen, Formulare und Aufgabenverwaltungsschnittstellen.

Was ist der Unterschied zwischen MCP Apps und OpenAI Apps SDK?

MCP Apps ist eine offene Erweiterung des MCP-Standards, mit der MCP-Server interaktive Benutzeroberflächen an jeden kompatiblen Host bereitstellen können. Das OpenAI Apps SDK baut auf dem MCP Apps-Standard auf und fügt zusätzliche Funktionen speziell für ChatGPT hinzu. Microsoft 365 Copilot unterstützt beides, obwohl nicht alle Funktionen verfügbar sind. Weitere Informationen finden Sie unter Unterstützte MCP-Apps-Funktionen in Copilot .

Kann ich MCP-Apps ohne Authentifizierung während der Entwicklung verwenden?

Ja. Die anonyme Authentifizierung wird für Entwicklungszwecke unterstützt. Vor der Bereitstellung in der Produktion müssen Sie jedoch die Authentifizierung hinzufügen. OAuth 2.1 und Microsoft Entra einmaliges Anmelden (Single Sign-On, SSO) sind die unterstützten Authentifizierungsmethoden. Weitere Informationen finden Sie unter Konfigurieren der Authentifizierung für API-Plug-Ins in Agents.