Teams MCP
Teams MCP
Ein Model Context Protocol (MCP)-Server, der eine nahtlose Integration mit Microsoft Graph-APIs bietet und es KI-Assistenten ermöglicht, mit Microsoft Teams, Benutzern, Chats, Dateien und Organisationsdaten zu interagieren.
📦 Installation
Um diesen MCP-Server in Cursor/Claude/VS Code zu verwenden, fügen Sie die folgende Konfiguration hinzu:
{
"mcpServers": {
"teams-mcp": {
"command": "npx",
"args": ["-y", "@floriscornel/teams-mcp@latest"]
}
}
}Related MCP server: Meeting BaaS MCP Server
🚀 Funktionen
🔐 Authentifizierung
OAuth 2.0-Gerätecode-Authentifizierungsablauf mit Microsoft Graph
Sichere Token-Verwaltung, Cache-Persistenz und Erneuerung von Refresh-Tokens
Überprüfung des Authentifizierungsstatus und Unterstützung für Abmeldungen
Schreibgeschützter Modus mit reduzierten Berechtigungsbereichen (Scopes)
Direkte
AUTH_TOKEN-Unterstützung für vorab ausgestellte Microsoft Graph-Zugriffstokens
👥 Benutzerverwaltung
Informationen zum aktuellen Benutzer abrufen
Suche nach Benutzern per Name oder E-Mail
Detaillierte Benutzerprofile abrufen
Zugriff auf Daten des Organisationsverzeichnisses
🏢 Microsoft Teams-Integration
Teams-Verwaltung
Liste der Teams, denen der Benutzer beigetreten ist
Zugriff auf Teamdetails und Metadaten
Kanal-Operationen
Liste der Kanäle innerhalb von Teams
Abrufen von Kanalnachrichten und Antworten
Senden von Nachrichten an Teamkanäle
Antworten auf bestehende Kanal-Threads
Bearbeiten und logisches Löschen von Kanalnachrichten und Antworten
Unterstützung für Nachrichtenwichtigkeitsstufen (
normal,high,urgent)Unterstützung für Inline-Bildanhänge via URL oder Base64-Daten
Teammitglieder
Liste der Teammitglieder und deren Rollen
Zugriff auf Mitgliederinformationen
Suche nach Benutzern für
@mentions
💬 Chat & Messaging
1:1- und Gruppen-Chats
Liste der Chats des Benutzers
Erstellen neuer 1:1- oder Gruppenunterhaltungen
Abrufen des Chat-Nachrichtenverlaufs mit Filtern, Sortierung und Paginierung
Abrufen aller verfügbaren Nachrichten via
@odata.nextLink-PaginierungSenden von Nachrichten an bestehende Chats
Bearbeiten zuvor gesendeter Chat-Nachrichten
Logisches Löschen von Chat-Nachrichten
✏️ Nachrichtenverwaltung
Bearbeiten & Löschen
Aktualisieren (Bearbeiten) gesendeter Nachrichten in Chats und Kanälen
Logisches Löschen von Nachrichten in Chats und Kanälen (wird als gelöscht markiert, ohne dauerhafte Entfernung)
Nur Nachrichtenabsender können ihre eigenen Nachrichten aktualisieren/löschen
Unterstützung für Markdown-Formatierung, Erwähnungen und Wichtigkeitsstufen bei Bearbeitungen
📎 Medien & Anhänge
Gehostete Inhalte
Herunterladen gehosteter Inhalte (Bilder, Dateien) aus Chat- und Kanalnachrichten
Zugriff auf Inline-Bilder und Anhänge, die in Unterhaltungen geteilt wurden
Optionales direktes Speichern gehosteter Inhalte auf der Festplatte
Datei-Upload
Hochladen und Senden beliebiger Dateitypen (PDF, DOCX, XLSX, ZIP, Bilder usw.) an Kanäle und Chats
Unterstützung für große Dateien (>4 MB) über fortsetzbare Upload-Sitzungen
Kanal-Uploads erfolgen in SharePoint, Chat-Uploads in OneDrive
Optionaler Nachrichtentext, benutzerdefinierter Dateiname, Formatierung und Wichtigkeitsstufen
🔍 Erweiterte Suche & Erkennung
Nachrichtensuche
Suche über alle Teams-Kanäle und Chats hinweg unter Verwendung der Microsoft Search API
Unterstützung für KQL (Keyword Query Language)-Syntax
Filtern nach Absender, Erwähnungen, Anhängen, Lesestatus und Datumsbereichen
Abrufen aktueller Nachrichten mit erweiterten Filteroptionen
Finden von Nachrichten, die den aktuellen Benutzer erwähnen
Unterstützung für Rich-Message-Formatierung
Die folgenden Tools unterstützen Rich-Message-Formatierung in Teams-Kanälen und Chats:
send_channel_messagesend_chat_messagereply_to_channel_messageupdate_channel_messageupdate_chat_messagesend_file_to_channelsend_file_to_chat
Formatierungsoptionen
Sie können den Parameter format angeben, um die Nachrichtenformatierung zu steuern:
text(Standard): Klartextmarkdown: Markdown-Formatierung (fett, kursiv, Listen, Links, Code usw.), die in bereinigtes HTML konvertiert wird
Wenn format auf markdown gesetzt ist, wird der Nachrichteninhalt mithilfe eines sicheren Markdown-Parsers in HTML konvertiert und bereinigt, um potenziell gefährliche Inhalte zu entfernen, bevor sie an Teams gesendet werden.
Wenn format nicht angegeben ist, wird die Nachricht als Klartext gesendet.
Beispielanwendung
{
"teamId": "...",
"channelId": "...",
"message": "**Bold text** and _italic text_\n\n- List item 1\n- List item 2\n\n[Link](https://example.com)",
"format": "markdown",
"importance": "high"
}{
"chatId": "...",
"message": "Simple plain text message",
"format": "text"
}Sicherheitsfunktionen
HTML-Bereinigung: Alle Markdown-Inhalte werden in HTML konvertiert und bereinigt, um potenziell gefährliche Elemente (Skripte, Event-Handler usw.) zu entfernen
Erlaubte Tags: Nur sichere HTML-Tags sind zulässig (p, strong, em, a, ul, ol, li, h1-h6, code, pre usw.)
Sichere Attribute: Nur sichere Attribute sind erlaubt
XSS-Prävention: Inhalte werden automatisch bereinigt, um Cross-Site-Scripting-Angriffe zu verhindern
Unterstützte Markdown-Funktionen
Textformatierung: Fett (
**text**), kursiv (_text_), durchgestrichen (~~text~~)Links:
[text](url)Listen: Mit Aufzählungszeichen (
- item) und nummeriert (1. item)Code: Inline
`code`und Code-BlöckeÜberschriften:
# H1bis###### H6Blockzitate:
> quoted textTabellen: GitHub-flavored Markdown-Tabellen
LLM-freundliches Inhaltsformat
Nachrichten, die von der Microsoft Graph API abgerufen werden, werden als rohes HTML mit Teams-spezifischen Tags zurückgegeben. Um diesen Inhalt für KI-Assistenten besser verwertbar zu machen, unterstützen die folgenden Tools eine automatische HTML-zu-Markdown-Konvertierung:
get_chat_messagesget_channel_messagesget_channel_message_repliessearch_messagesget_my_mentions
Optionen für das Inhaltsformat
Verwenden Sie den Parameter contentFormat, um zu steuern, wie der Nachrichteninhalt zurückgegeben wird:
markdown(Standard): Konvertiert Teams-HTML in sauberes Markdown, optimiert für die LLM-Verarbeitungraw: Gibt das ursprüngliche HTML von der Microsoft Graph API zurück
Was konvertiert wird
HTML-Element | Markdown-Ausgabe |
|
|
|
|
|
|
|
|
|
|
|
|
| GFM Markdown-Tabelle |
|
|
| (entfernt) |
|
|
| Zu einfachen Zeichen dekodiert |
Anhang-Metadaten
Nachrichten, die Dateianhänge oder Inline-Bilder enthalten, beinhalten ein attachments-Array in der Antwort mit Metadaten für jeden Anhang (id, name, contentType, contentUrl, thumbnailUrl). Die Inline-Marker {attachment:id} im Markdown-Inhalt korrelieren mit Einträgen in diesem Array, was es Konsumenten ermöglicht, Anhänge über download_message_hosted_content oder download_chat_hosted_content zu identifizieren und herunterzuladen.
Beispielanwendung
{
"chatId": "19:meeting_...",
"limit": 10,
"contentFormat": "markdown"
}Um das ursprüngliche HTML zu erhalten:
{
"chatId": "19:meeting_...",
"limit": 10,
"contentFormat": "raw"
}📦 Installation
# Install dependencies
npm install
# Build the project
npm run build
# Set up authentication
npm run auth🔧 Konfiguration
Voraussetzungen
Node.js 18+
Microsoft 365-Konto mit entsprechenden Berechtigungen
Delegierte Microsoft Graph-Berechtigungen für die unten aufgeführten Scopes
Erforderliche Microsoft Graph-Berechtigungen
Vollständiger Modus (Standard):
User.Read- Benutzerprofil lesenUser.ReadBasic.All- Basis-Benutzerinformationen lesenTeam.ReadBasic.All- Teaminformationen lesenChannel.ReadBasic.All- Kanalinformationen lesenChannelMessage.Read.All- Kanalnachrichten lesenChannelMessage.Send- Kanalnachrichten und Antworten sendenChannelMessage.ReadWrite- Kanalnachrichten bearbeiten und löschenChat.Read- Chatnachrichten lesen (enthalten über schreibgeschützte Scopes)Chat.ReadWrite- Chats erstellen und verwalten, Chatnachrichten senden/bearbeiten/löschen (ersetztChat.Read)TeamMember.Read.All- Teammitglieder lesenFiles.ReadWrite.All- Erforderlich für Datei-Uploads in Kanäle und Chats
Schreibgeschützter Modus (TEAMS_MCP_READ_ONLY=true) — nur diese Scopes werden angefordert:
User.ReadUser.ReadBasic.AllTeam.ReadBasic.AllChannel.ReadBasic.AllChannelMessage.Read.AllTeamMember.Read.AllChat.Read
Authentifizierungsmodi
Vollzugriff:
npx @floriscornel/teams-mcp@latest authenticateSchreibgeschützter Zugriff:
npx @floriscornel/teams-mcp@latest authenticate --read-onlyDirekte Token-Injektion mit einem bestehenden Microsoft Graph JWT:
{
"mcpServers": {
"teams-mcp": {
"command": "npx",
"args": ["-y", "@floriscornel/teams-mcp@latest"],
"env": {
"AUTH_TOKEN": "<jwt-for-https://graph.microsoft.com>"
}
}
}
}Token-Speicherung
Auth-Metadaten werden lokal unter
~/.msgraph-mcp-auth.jsongespeichertToken-Cache wird lokal unter
~/.teams-mcp-token-cache.jsongespeichert
🛠️ Verwendung
Starten des Servers
# Development mode with hot reload
npm run dev
# Production mode
npm run build && node dist/index.js
# Start in read-only mode (disables all write tools)
TEAMS_MCP_READ_ONLY=true node dist/index.jsCLI-Befehle
npx @floriscornel/teams-mcp@latest authenticate # Authenticate with full scopes
npx @floriscornel/teams-mcp@latest authenticate --read-only # Authenticate with read-only scopes
npx @floriscornel/teams-mcp@latest check # Check authentication status
npx @floriscornel/teams-mcp@latest logout # Clear authentication
npx @floriscornel/teams-mcp@latest auth # Alias for authenticate
npx @floriscornel/teams-mcp@latest # Start MCP server (default)Umgebungsvariablen
TEAMS_MCP_READ_ONLY=true- Startet den MCP-Server im schreibgeschützten ModusAUTH_TOKEN=<jwt>- Verwendet ein bereits vorhandenes Microsoft Graph-Zugriffstoken anstelle des MSAL-Logins
Schreibgeschützter Modus
Der Server unterstützt einen schreibgeschützten Modus, der alle Schreibvorgänge deaktiviert (Nachrichten senden, Chats erstellen, Dateien hochladen, Nachrichten bearbeiten/löschen) und nur Lese-Berechtigungen von Microsoft Graph anfordert.
Schreibgeschützten Modus aktivieren entweder über:
Umgebungsvariable:
TEAMS_MCP_READ_ONLY=trueCLI-Flag:
--read-only
Authentifizierung mit reduzierten Scopes:
npx @floriscornel/teams-mcp@latest authenticate --read-onlyMCP-Serverkonfiguration (schreibgeschützt):
{
"mcpServers": {
"teams-mcp": {
"command": "npx",
"args": ["-y", "@floriscornel/teams-mcp@latest"],
"env": {
"TEAMS_MCP_READ_ONLY": "true"
}
}
}
}Moduswechsel: Beim Wechsel vom schreibgeschützten in den Vollmodus erkennt der Server die Diskrepanz bei den Scopes und warnt Sie, sich erneut zu authentifizieren:
npx @floriscornel/teams-mcp@latest authenticateSchreibgeschützte Tools (16):
auth_status, get_current_user, search_users, get_user, list_teams, list_channels, get_channel_messages, get_channel_message_replies, list_team_members, search_users_for_mentions, download_message_hosted_content, list_chats, get_chat_messages, download_chat_hosted_content, search_messages, get_my_mentions
Schreib-Tools im schreibgeschützten Modus deaktiviert (10):
send_channel_message, reply_to_channel_message, update_channel_message, delete_channel_message, send_file_to_channel, send_chat_message, create_chat, update_chat_message, delete_chat_message, send_file_to_chat
Verfügbare MCP-Tools
Authentifizierung
auth_status- Aktuellen Authentifizierungsstatus prüfen
Benutzeroperationen
get_current_user- Informationen zum authentifizierten Benutzer abrufensearch_users- Nach Benutzern per Name oder E-Mail suchenget_user- Detaillierte Benutzerinformationen per ID oder E-Mail abrufen
Teams-Operationen
list_teams- Liste der Teams, denen der Benutzer beigetreten istlist_channels- Liste der Kanäle in einem bestimmten Teamget_channel_messages- Nachrichten aus einem Teamkanal abrufen, inklusive Zusammenfassungen von Anhängen und Auswahl des Inhaltsformatsget_channel_message_replies- Antworten auf eine bestimmte Kanalnachricht abrufensend_channel_message- Nachricht an einen Teamkanal senden, mit optionalen Erwähnungen, Wichtigkeit und Bildanh
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Appeared in Searches
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/floriscornel/teams-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server