M365 Calendar
MS365 / Microsoft365 calendar automation via Microsoft Graph for Microsoft 365 (M365) Business (work
- Rating
- 3.8 (257 reviews)
- Downloads
- 35,170 downloads
- Version
- 1.0.0
Overview
MS365 / Microsoft365 calendar automation via Microsoft Graph for Microsoft 365 (M365) Business (work/school.
Complete Documentation
View Source →
M365 Calendar (Microsoft Graph)
Keep this skill lean: do the heavy lifting with the bundled scripts.
Installation / runtime requirements
- Requires Node.js (the scripts are Node ESM).
- This skill declares its npm dependency in
package.json. - After installing/updating the skill, install deps in the skill folder:
cd skills/m365-calendar
npm install
Security / boundaries
- Never commit or share token caches or client secrets.
- Default secret location (per machine):
~/.openclaw/secrets/m365-calendar/
Quick start
0) First question: do you want to connect M365 Business or M365 Home/Consumer?
- M365 Home/Consumer =
hotmail.com,outlook.com,live.com - M365 Business = Work/School account (Exchange Online)
1) Privacy / keys (important)
- No third-party API key required.
- Auth is done via your own Microsoft login (device code flow).
- Tokens are stored locally per profile on the machine running OpenClaw.
- By default, the setup flow does NOT request
offline_access(to avoid long-lived refresh tokens on disk). Use--offlineonly if you explicitly want background refresh.
2) You need an App (client) ID
You must pass--clientId.
- Home/Consumer: create an app registration that allows Personal Microsoft accounts, and enable public client flows.
- Business (users without IT admin rights): ask IT for a
clientId+ consent (see “Business note” below).
3) One-command setup (recommended)
# Consumer / home accounts (hotmail.com / outlook.com)
node skills/m365-calendar/scripts/setup.mjs \
--profile home \
--tenant consumers \
--email [email protected] \
--clientId <YOUR_APP_CLIENT_ID> \
--tz Europe/Vienna
# Business / work accounts
node skills/m365-calendar/scripts/setup.mjs \
--profile business \
--tenant organizations \
--email [email protected] \
--clientId <IT_PROVIDED_CLIENT_ID> \
--tz Europe/Vienna
2) Use
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"
2) List remaining events today (Europe/Vienna):
node skills/m365-calendar/scripts/list.mjs --profile tom-business --when today --tz Europe/Vienna
3) Search and show attendee responses:
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
4) Move an event to a new time:
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
Operational workflow (recommended)
When the user asks to change a meeting:
1) Identify the event deterministically (search by day-range + subject; confirm ID). 2) Read the event and report attendee response statuses. 3) Patch start/end. 4) Re-read the event and confirm the final start/end + any response resets.
Notes on Business vs Home (Consumer)
- Use
--tenant organizationsfor work/school accounts (most “business” tenants). - Use
--tenant consumersfor hotmail/outlook.com personal accounts. - Use
--tenant commononly if you explicitly want one profile that can log into either type.
Consumer (hotmail/outlook.com) requirements
Your app registration must:- Allow personal Microsoft accounts
- Enable public client flows (otherwise device-code can fail with errors like AADSTS70002)
Business note (users without IT admin rights)
Many tenants block:- creating app registrations as a normal user
- user consent to new apps
clientId for an app registration configured with:
- Account type: organizational accounts (or org+personal)
- Delegated Microsoft Graph permissions:
Calendars.Read,Calendars.ReadWrite,offline_access - Public client flows enabled (Device Code)
- (Often required) Admin consent granted for the above permissions
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.
Installation
openclaw install m365-calendar
💻Code Examples
npm install
## Security / boundaries
- Never commit or share token caches or client secrets.
- Default secret location (per machine): `~/.openclaw/secrets/m365-calendar/`
## Quick start
### 0) First question: do you want to connect **M365 Business** or **M365 Home/Consumer**?
- **M365 Home/Consumer** = `hotmail.com`, `outlook.com`, `live.com`
- **M365 Business** = Work/School account (Exchange Online)
### 1) Privacy / keys (important)
- **No third-party API key required.**
- Auth is done via **your own Microsoft login** (device code flow).
- Tokens are stored **locally per profile** on the machine running OpenClaw.
- By default, the setup flow does **NOT** request `offline_access` (to avoid long-lived refresh tokens on disk). Use `--offline` only if you explicitly want background refresh.
### 2) You need an **App (client) ID**
You must pass `--clientId`.
- **Home/Consumer:** create an app registration that allows **Personal Microsoft accounts**, and enable **public client flows**.
- **Business (users without IT admin rights):** ask IT for a `clientId` + consent (see “Business note” below).
### 3) One-command setup (recommended)# Consumer / home accounts (hotmail.com / outlook.com)
node skills/m365-calendar/scripts/setup.mjs \
--profile home \
--tenant consumers \
--email [email protected] \
--clientId <YOUR_APP_CLIENT_ID> \
--tz Europe/Vienna
# Business / work accounts
node skills/m365-calendar/scripts/setup.mjs \
--profile business \
--tenant organizations \
--email [email protected] \
--clientId <IT_PROVIDED_CLIENT_ID> \
--tz Europe/Viennanode 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"Tags
Quick Info
Ready to Install?
Get started with this skill in seconds
Related Skills
4claw
4claw — a moderated imageboard for AI agents.
Aap Passport
Agent Attestation Protocol - The Reverse Turing Test.
Adaptive Suite
A continuously adaptive skill suite that empowers Clawdbot.
Adversarial Prompting
Adversarial analysis to critique, fix.