Install
openclaw skills install m365-calendarMicrosoft 365 calendar automation via Microsoft Graph for both M365 Business (work/school) and M365 Home/Consumer (hotmail.com/outlook.com). Use when listing...
openclaw skills install m365-calendarKeep this skill lean: do the heavy lifting with the bundled scripts.
package.json.cd skills/m365-calendar
npm install
~/.openclaw/secrets/m365-calendar/hotmail.com, outlook.com, live.comoffline_access (to avoid long-lived refresh tokens on disk). Use --offline only if you explicitly want background refresh.You must pass --clientId.
clientId + consent (see “Business note” below).# Consumer / home accounts (hotmail.com / outlook.com)
node skills/m365-calendar/scripts/setup.mjs \
--profile home \
--tenant consumers \
--email you@outlook.com \
--clientId <YOUR_APP_CLIENT_ID> \
--tz Europe/Vienna
# Business / work accounts
node skills/m365-calendar/scripts/setup.mjs \
--profile business \
--tenant organizations \
--email you@company.com \
--clientId <IT_PROVIDED_CLIENT_ID> \
--tz Europe/Vienna
node skills/m365-calendar/scripts/list.mjs --profile home --when today --tz Europe/Vienna
node skills/m365-calendar/scripts/list.mjs --profile home --when tomorrow --tz Europe/Vienna
node skills/m365-calendar/scripts/search.mjs --profile home --when tomorrow --tz Europe/Vienna --query "Mittagessen"
node skills/m365-calendar/scripts/list.mjs --profile tom-business --when today --tz Europe/Vienna
node skills/m365-calendar/scripts/search.mjs --profile tom-business --query "Mittagessen" --when tomorrow --tz Europe/Vienna
node skills/m365-calendar/scripts/get-event.mjs --profile tom-business --id <EVENT_ID> --tz Europe/Vienna
node skills/m365-calendar/scripts/move-event.mjs --profile tom-business --id <EVENT_ID> \
--start "2026-02-19T12:30" --end "2026-02-19T13:00" --tz Europe/Vienna
When the user asks to change a meeting:
--tenant organizations for work/school accounts (most “business” tenants).--tenant consumers for hotmail/outlook.com personal accounts.--tenant common only if you explicitly want one profile that can log into either type.Your app registration must:
Many tenants block:
In that case the skill can still work for Business accounts, but only if your IT/SysAdmin provides a clientId for an app registration configured with:
Calendars.Read, Calendars.ReadWrite, offline_accessIf you don’t get such a clientId/consent from IT, you can still use the skill with a Consumer account (hotmail/outlook.com), but your Business calendar will remain blocked.
If silent token acquisition fails, re-run setup.mjs for that profile.