--- name: microsoft365 description: تكامل كامل مع Microsoft 365 / Graph API — Outlook + Calendar + OneDrive + SharePoint + Tasks + Contacts. يستخدم Device Code Flow (آمن، لا secret). يدعم: قراءة وإرسال إيميلات، إدارة مواعيد، رفع/تنزيل ملفات OneDrive، البحث في SharePoint، To Do tasks. يحتاج Azure App Registration. مفعّل عبر MSAL + msgraph-sdk. license: MIT ---
Microsoft 365 — Full Integration for OpenClaw
تكامل عميق مع Microsoft 365 عبر Microsoft Graph API.
Stack
- MSAL (Microsoft Authentication Library) — OAuth 2.0 Device Code Flow
- msgraph-sdk — رسمي من Microsoft
- Token cache — في
~/.openclaw/m365_cache.json(مع refresh تلقائي)
When to Use
- 📧 قراءة/إرسال إيميل Outlook (شخصي + عمل KCPC)
- 📅 إدارة Calendar (مواعيد، اجتماعات Teams)
- 📂 OneDrive (تصفح، رفع، تنزيل، مشاركة)
- 🏢 SharePoint (وثائق KCPC الرسمية)
- ✅ To Do (مهام)
- 👥 Contacts (جهات الاتصال)
Environment Variables
bash
MS365_TENANT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
MS365_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
لا secret — Public client + Device Code Flow
Commands
Setup (مرة واحدة)
bash
python3 m365.py login # يفتح Device Code Flow
# يعطيك URL + code
# تفتح URL في المتصفح وتدخل الـ code
# توافق على permissions → done!
bash
python3 m365.py mail list --top 10
python3 m365.py mail read <message-id>
python3 m365.py mail send --to wael@kcpc.com.kw --subject "test" --body "hello"
python3 m365.py mail search "method statement"
Calendar
bash
python3 m365.py calendar list --days 7
python3 m365.py calendar create --subject "اجتماع KCPC" --start "2026-05-17T10:00" --end "2026-05-17T11:00"
OneDrive
bash
python3 m365.py drive ls [path]
python3 m365.py drive upload <local> <remote-path>
python3 m365.py drive download <remote-path> <local>
python3 m365.py drive search "method statement"
SharePoint
bash
python3 m365.py sharepoint sites
python3 m365.py sharepoint search "KCPC documents"
Tasks (To Do)
bash
python3 m365.py tasks lists
python3 m365.py tasks add "اجتماع غداً 10ص"
Status
bash
python3 m365.py me # معلوماتك
python3 m365.py whoami # نفس me
python3 m365.py logout # امسح cache
Scopes (Permissions)
عند الـ login يطلب:
- User.Read · Mail.Read · Mail.Send · Calendars.ReadWrite
- Files.ReadWrite.All · Sites.Read.All · Contacts.Read · Tasks.ReadWrite
- offline_access (للـ refresh tokens)
Token Refresh
MSAL يجدّد الـ access tokens تلقائياً باستخدام refresh token. لا تحتاج login مرة أخرى لأشهر.
Notes for KCPC
- إذا حسابك wanan@kcpc.com.kw، الـ permissions الخاصة بـ SharePoint قد تحتاج موافقة Admin من KCPC IT
- إن كنت Admin بنفسك في tenant، Grant admin consent من Azure Portal