Outlook MCP Server
Outlook MCP Server
Ein Model Context Protocol-Server, der Claude mit Microsoft Outlook + Teams verbindet (E-Mail, Kalender, Kontakte, Aufgaben, Dateien, Teams-Besprechungsaufzeichnungen + Transkripte), bereitgestellt auf Cloudflare Workers.
Forken Sie dieses Repository, stellen Sie es auf Ihrem eigenen Cloudflare-Konto bereit, registrieren Sie eine Microsoft Azure AD-App, richten Sie Claude.ai auf Ihren Worker aus, und Claude kann Ihre Microsoft 365-Daten über natürliche Sprache lesen und schreiben.
Basiert auf @bashco/mcp-toolkit – OAuth, Bearer-Tokens pro Client, Ratenbegrenzung, strukturierte Protokollierung und typisierte Tool-Verteilung werden alle von der gemeinsamen Bibliothek übernommen.
Was Claude bekommt – 39 Tools in 7 Bereichen
E-Mail: E-Mails auflisten, E-Mail lesen, suchen, antworten, weiterleiten, löschen, senden, zwischen Ordnern verschieben, Entwurf erstellen, Entwurf aktualisieren, Entwurf senden, geplantes Senden
Kalender: Ereignisse auflisten, Ereignisvorkommen auflisten, erstellen, aktualisieren, löschen, Ereignis abbrechen, auf Ereignis antworten
Kontakte: auflisten, Kontakt erstellen, Kontakt aktualisieren
Aufgaben: Aufgabenlisten auflisten, Aufgaben auflisten, Aufgabe erstellen
Dateien: Dateien auflisten, Datei teilen
Teams-Besprechungen: aktuelle Aufzeichnungen auflisten (der Ausgangspunkt für die Erkennung – findet Besprechungen mit Inhalten in den letzten N Tagen, keine Eingaben erforderlich), Online-Besprechung finden, Besprechungsaufzeichnungen auflisten, Besprechungstranskripte auflisten, Transkriptinhalt abrufen. Jedes besprechungsbezogene Tool akzeptiert
meeting_id,calendar_event_idoderjoin_url– so funktionieren geplante Besprechungen (über Ereignis aufgelöst), Ad-hoc-/Meet-now-Anrufe (über die aus dem Teams-Chat eingefügte Join-URL aufgelöst) und direkte ID-Suchen.Unterhaltung: Unterhaltung abrufen (vollständiger Thread)
Einstellungen: Postfacheinstellungen abrufen, Abwesenheit festlegen
Vollständiger Live-Katalog am MCP-Endpunkt tools/list nach der Bereitstellung.
Related MCP server: MCP Outlook Server
So funktioniert die Authentifizierung
Zwei Ebenen:
Claude.ai ↔ Ihr Worker – Standard-MCP-OAuth-2.0- und PKCE-Ablauf. Jeder Claude-Client erhält ein eindeutiges Bearer-Token; Ihr
MCP_APPROVAL_CODEist das, was Sie einmal unter/authorizeeinfügen, um dieses Bearer-Token zu erzeugen.Ihr Worker ↔ Microsoft Graph – proxied OAuth. Sie autorisieren Microsoft einmal, indem Sie
/oauth/startauf Ihrem bereitgestellten Worker besuchen; Aktualisierungstokens werden verschlüsselt in Cloudflare KV gespeichert. Die Aktualisierung erfolgt automatisch.
Einrichtung – Stellen Sie Ihre eigene Kopie bereit
Voraussetzungen
Ein Cloudflare-Konto (kostenloser Plan funktioniert)
Wrangler-CLI installiert und angemeldet (
wrangler login)Node.js 22+
Ein Microsoft-Konto (privat, geschäftlich oder schulisch) mit Zugriff zur Registrierung von Azure-AD-Apps unter entra.microsoft.com
1. Forken und klonen
git clone https://github.com/<your-username>/outlook-mcp
cd outlook-mcp
npm install2. Den KV-Namespace erstellen
wrangler kv:namespace create OAUTH_KVWrangler gibt etwa Folgendes aus:
🌀 Creating namespace with title "outlook-mcp-OAUTH_KV"
✨ Success! Add the following to your configuration file:
[[kv_namespaces]]
binding = "OAUTH_KV"
id = "abc123def456..."
wrangler.jsoncist absichtlich eingecheckt – sowohl Wrangler als auch die CI-Bereitstellung benötigen es, und es enthält keine Geheimnisse (nur Ihre KV-Namespace-ID, die öffentliche Azure-Client-ID und die Worker-URL).wrangler.jsonc.examplehat dieselbe Struktur mit Platzhaltern, falls Sie lieber mit einer sauberen Kopie beginnen möchten. Echte Geheimnisse werden überwrangler secret putgesetzt und erscheinen nie in dieser Datei.
3. Eine Microsoft Azure AD-App registrieren
Gehen Sie zu entra.microsoft.com → Identity → Applications → App registrations → New registration
Name: beliebig (z. B. „Claude Outlook MCP")
Unterstützte Kontotypen:
„Nur Konten in diesem Organisationsverzeichnis", wenn Sie auf einen Mandanten beschränken möchten
„Konten in einem beliebigen Organisationsverzeichnis und persönliche Microsoft-Konten" für die breiteste Unterstützung
Redirect-URI: vorerst leer lassen – Sie kommen nach Schritt 6 zurück
Klicken Sie auf Registrieren
Notieren Sie auf der Übersichtsseite der App:
Anwendungs-ID (Client-ID) → dies ist Ihre
MICROSOFT_CLIENT_IDVerzeichnis-ID (Mandanten-ID) → dies ist Ihre
MICROSOFT_TENANT_ID(oder verwenden Sie die Zeichenfolgecommonfür Multi-Mandanten- und persönliche Kontounterstützung)
API-Berechtigungen → Fügen Sie die folgenden delegierten Microsoft-Graph-Berechtigungen hinzu:
Mail.ReadWrite,Mail.SendCalendars.ReadWriteContacts.ReadWriteTasks.ReadWriteFiles.Read.All(oderFiles.ReadWrite.All, wenn Sie schreibfähige Datei-Tools möchten)User.Readoffline_access(erforderlich für Aktualisierungstokens)MailboxSettings.ReadWriteSites.Read.AllOnlineMeetings.ReadOnlineMeetingRecording.Read.All— Administratorzustimmung erforderlichOnlineMeetingTranscript.Read.All— Administratorzustimmung erforderlich
Nach dem Hinzufügen der beiden
.Read.All-Berechtigungen klicken Sie auf der Seite „API-Berechtigungen" auf „Administratorzustimmung für [Mandantennamen] erteilen". Ohne Administratorzustimmung geben die Besprechungsaufzeichnungs-/Transkript-Tools 403 zurück.Zertifikate & Geheimnisse → Neues Client-Geheimnis → notieren Sie den Wert (in 1Password). Dies ist Ihr
MICROSOFT_CLIENT_SECRET. Sie können ihn nur einmal sehen – kopieren Sie ihn sofort.
4. wrangler.jsonc aktualisieren
Bearbeiten Sie wrangler.jsonc und ersetzen Sie beide:
vars.MICROSOFT_CLIENT_ID– mit der Anwendungs-ID aus Schritt 3.6vars.MICROSOFT_TENANT_ID– mit der Verzeichnis-ID aus Schritt 3.6 (odercommon)
5. Geheimnisse festlegen
Generieren Sie einen neuen Genehmigungscode:
openssl rand -base64 32Speichern Sie ihn in einem Passwortmanager und übertragen Sie ihn dann an Cloudflare:
wrangler secret put MCP_APPROVAL_CODE # paste the value from above
wrangler secret put MICROSOFT_CLIENT_SECRET # from Step 3.8Secret | Zweck |
| Einmaliger Code, den Sie unter |
| Das Client-Geheimnis Ihrer Azure-AD-App. |
| Optional. E-Mail-Signaturblock, serverseitig angehängt – siehe E-Mail-Signatur. |
| Optional. Öffentlich erreichbare HTTPS-URL des Signaturlogos. |
6. Erste Bereitstellung (um die Worker-URL zu erfahren)
npm run deployWrangler gibt Ihre Worker-URL aus – etwa https://outlook-mcp.<your-account>.workers.dev. Speichern Sie sie.
7. WORKER_URL und die Microsoft-Redirect-URI aktualisieren
Zwei Aktualisierungen sind erforderlich:
a) Bearbeiten Sie wrangler.jsonc – ersetzen Sie unter vars die WORKER_URL durch die URL aus Schritt 6.
b) In der Azure-AD-App (entra.microsoft.com → Ihre App → Authentifizierung → Plattform hinzufügen → Web) setzen Sie die Redirect-URI auf <your-worker-url>/oauth/callback. Ohne diese lehnt Microsoft den OAuth-Ablauf ab.
Stellen Sie dann erneut bereit:
npm run deploy8. Microsoft verbinden (einmalig)
Besuchen Sie in Ihrem Browser <your-worker-url>/oauth/start. Fügen Sie Ihren MCP_APPROVAL_CODE ein. Sie werden zu Microsoft weitergeleitet, um sich anzumelden und die Berechtigungen aus Schritt 3.7 zu erteilen. Nach der Zustimmung landen Ihre verschlüsselten Upstream-Tokens in OAUTH_KV. Die Aktualisierung erfolgt danach automatisch.
Sie können die Verbindung bestätigen, indem Sie <your-worker-url>/oauth/status besuchen – dort sollte connected: true stehen.
9. Claude.ai verbinden
Gehen Sie in Claude.ai zu Einstellungen → Integrationen → MCP-Server hinzufügen
Server-URL:
<your-worker-url>/mcpClaude.ai leitet Sie zur
/authorize-Seite Ihres Workers weiterFügen Sie Ihren
MCP_APPROVAL_CODEein und bestätigen SieSie sind verbunden – Claude hat jetzt die 38 Outlook- und Teams-Tools zur Verfügung
E-Mail-Signatur
Optional. Wenn konfiguriert, hängt der Worker Ihre Signatur beim Senden an, sodass der aufrufende Agent sie nie reproduzieren muss – sie kann nicht umschrieben, gekürzt oder vergessen werden.
Übergeben Sie include_signature: true an eines der Tools send_email, schedule_send,
reply_to_email, forward_email, create_draft, update_draft,
create_reply_draft, create_reply_all_draft oder create_forward_draft. Der Standardwert ist
false, sodass bestehende Aufrufer nicht betroffen sind.
Bei Entwürfen wird die Signatur zum Zeitpunkt der Entwurfserstellung eingefügt, nicht beim Senden –
send_draft akzeptiert nur eine ID und berührt den Textkörper nie. Das bedeutet, dass
der signierte Textkörper das ist, was Sie vor dem Senden überprüfen. Bei update_draft gilt das Flag nur,
wenn Sie auch einen neuen body übergeben (sonst gibt es nichts zu signieren, und
es würde den Entwurf durch einen nur aus Signatur bestehenden Textkörper ersetzen); dieser Fall wird in
den notes der Antwort gemeldet, anstatt den Entwurf stillschweigend zu löschen.
Kalendereinladungen
create_calendar_event und update_calendar_event akzeptieren dasselbe
include_signature-Flag und hängen die Signatur an die Beschreibung des Ereignisses an.
Es verwendet denselben SIGNATURE_HTML-Block wie E-Mail – einschließlich der Marketing-
Call-to-Action-Buttons –, sodass es eher für eine kundenorientierte Einladung geeignet ist als für eine
interne Besprechung; deshalb ist es pro Ereignis optional. update_calendar_event
folgt derselben Absicherung wie update_draft: Das Flag gilt nur, wenn Sie auch
eine neue description übergeben.
Einrichtung
cp signature-block.example.html signature-block.html # then edit it
wrangler secret put SIGNATURE_HTML < signature-block.html
wrangler secret put SIGNATURE_LOGO_URL # paste your HTTPS logo URLsignature-block.html ist absichtlich gitignored. Die Signatur ist
Bereitstellungskonfiguration, kein Quellcode: Ein Fork, der eine eingecheckte Signatur geerbt hat,
würde E-Mails mit dem Namen, der Telefonnummer und den Buchungslinks einer anderen Person senden.
Nur der Platzhalter signature-block.example.html ist eingecheckt.
Das __LOGO_URL__-Token in SIGNATURE_HTML wird zur Laufzeit durch
SIGNATURE_LOGO_URL ersetzt.
Das Logo muss über HTTPS öffentlich erreichbar sein. E-Mail-Clients laden es vom
Empfängergerät – es hat keinen Zugriff auf Ihr Netzwerk, die Bindungen Ihres Workers
oder auf Anmeldeinformationen, die Sie besitzen. Eine private, authentifizierte oder
localhost-URL wird für alle als defektes Bild angezeigt. Wenn
SIGNATURE_LOGO_URL nicht gesetzt ist, wird das <img> vollständig entfernt, anstatt
ein defektes src auszugeben.
Wenn SIGNATURE_HTML nicht gesetzt ist, ist das Flag ein stiller No-op – die E-Mail wird
ohne Signatur gesendet. Eine nicht konfigurierte Bereitstellung verursacht nie Fehler.
Verhalten
Erzwingt HTML. Eine Signatur in einem Klartext-Textkörper wird als sichtbares rohes Markup gerendert, daher wird
body_typeaufhtmlüberschrieben, wenn das Flag gesetzt ist. Wenn Sie explizitbody_type: "text"übergeben haben, wird die Überschreibung in dennotesder Tool-Antwort gemeldet, nie stillschweigend angewendet.Klartext-Textkörper werden maskiert, dann werden Zeilenumbrüche zu
<br>, sodass Ihre Zeilen- umbrüche den erzwungenen HTML-Wechsel überstehen und einzelne<-Zeichen nicht zu Markup werden können.Idempotent. Wenn der Textkörper die Signatur bereits enthält – erkannt durch den eigenen Marker des Workers oder durch den markanten Text der Signatur – wird sie nicht doppelt angehängt.
Antworten und Weiterleitungen platzieren die Signatur über dem zitierten Original, nicht am Ende des gesamten Threads.
Leerer Textkörper sendet nur die Signatur, ohne führende Leerzeilen.
Sicherheitshinweis
Die Signatur wird nach der Bereinigung des Aufrufer-Textkörpers angehängt.
Dies ist beabsichtigt und tragend: sanitizeOutboundHtml entfernt jedes
style=-Attribut (eine reine Attribut-XSS-Senke), und die Signatur besteht
vollständig aus Inline-Stilen. Würde man sie durch den Bereiniger schicken, würden
die Logogröße, der Trenner und die CTA-Buttons entfernt.
Die beiden Zeichenfolgen haben unterschiedliche Vertrauensstufen. Der Textkörper wird vom Agenten geliefert und ist
nicht vertrauenswürdig, daher wird er weiterhin vollständig bereinigt. Die Signatur ist eine vom Betreiber gelieferte
Bereitstellungskonfiguration, die über wrangler secret put gesetzt wird – jeder, der dieses
Geheimnis setzen kann, kann den Worker bereits vollständig ändern. Siehe src/signature.ts.
Lokale Entwicklung
cp .dev.vars.example .dev.vars # fill in MCP_APPROVAL_CODE + MICROSOFT_CLIENT_SECRET; .dev.vars is gitignored
npm test # 171 tests via vitest with workers pool
npm run typecheck # tsc --noEmit
npm run dev # wrangler dev — local at http://localhost:8787Endpunkte
GET /.well-known/oauth-authorization-server— OAuth-Metadaten (öffentlich)GET /.well-known/oauth-protected-resource— Ressourcen-Metadaten (öffentlich)GET /authorize— Seite zum Einfügen des Genehmigungscodes (öffentlich)POST /approve— Übermittlung des Genehmigungscodes (ratenbegrenzt)POST /token— OAuth-Token-Austausch (ratenbegrenzt)POST /register— Dynamische Client-Registrierung gemäß RFC 7591 (ratenbegrenzt)GET /oauth/start— Microsoft-OAuth-Flow starten (durch MCP_APPROVAL_CODE geschützt)GET /oauth/callback— Microsoft-OAuth-UmleitungszielGET /oauth/status— Verbindungsstatus prüfen (durch MCP_APPROVAL_CODE geschützt)POST /mcp— JSON-RPC-Tool-Dispatch (durch Bearer-Token geschützt, ratenbegrenzt)
Stack
Cloudflare Workers (compatibility_date
2025-04-28,nodejs_compat)TypeScript (strict)
Hono v4
Zod v4
Vitest mit
@cloudflare/vitest-pool-workers(171 Tests)@bashco/mcp-toolkit— gemeinsame Infrastruktur für OAuth, Krypto, Ratenbegrenzung und Dispatch
Highlights der Sicherheitsarchitektur
Zweistufiger HTML-Sanitiser mit Entitätsnormalisierung bei ausgehenden E-Mail-Vorschauen
SSRF-Schutz mit 32-Bit-IP-Normalisierung bei ausgehendem HTTP
Parsing der Microsoft-Graph-odata-Fehlerhüllen für strukturierte Fehlerrückgaben
Domänenspezifische Tool-Dateien unter
src/tools/(mail, calendar, contacts, tasks, files, meetings, settings) für Auditierbarkeit
Kontinuierliche Bereitstellung
.github/workflows/deploy.yml führt bei jedem Push auf main vitest run aus und stellt anschließend auf Cloudflare bereit. Um dies in Ihrem Fork zu aktivieren, legen Sie zwei Repository-Secrets fest:
CLOUDFLARE_API_TOKEN— erstellen Sie unter dash.cloudflare.com/profile/api-tokens (verwenden Sie die Vorlage „Edit Cloudflare Workers")CLOUDFLARE_ACCOUNT_ID— finden Sie unten rechts in Ihrem Cloudflare-Dashboard
Mitwirken
Issues und PRs sind willkommen unter github.com/doublebash/outlook-mcp.
Für Änderungen am zugrunde liegenden OAuth-/Krypto-/Ratenbegrenzungs-Code: Das Toolkit befindet sich unter github.com/doublebash/mcp-toolkit — reichen Sie Issues dort ein.
Sicherheit
Eine Schwachstelle gefunden? Bitte kein öffentliches Issue eröffnen. Eröffnen Sie stattdessen eine private Security Advisory auf GitHub.
Lizenz
MIT — Copyright (c) 2026 Bashar Basheer.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityAmaintenanceA Model Context Protocol server that enables interaction with Microsoft 365 services (Excel, Calendar, Mail, OneDrive, Teams, etc.) through the Graph API, allowing AI assistants to manage Microsoft 365 resources via natural language.18841,593937MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with Microsoft Outlook via the Microsoft Graph API for managing emails and calendar events. It allows users to read and send emails, list messages, and create calendar appointments with automatic Teams links.1
- AlicenseBqualityCmaintenanceEnables AI assistants to manage Microsoft Outlook email and calendar through the Microsoft Graph API, including reading, sending, searching emails, and handling calendar events.4310025MIT
- FlicenseNot gradedqualityDmaintenanceEnables LLMs to manage your Microsoft 365 calendar, tasks, and email via Microsoft Graph API, acting as a personal secretary.
Related MCP Connectors
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Sidd-doshi/outlook-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server