Microsoft 365 / Outlook CLI for calendar and email. Use when managing Outlook calendar (view, create, update, delete events, find meeting times, respond to invitations), sending/reading emails, or searching for people/rooms in the organization.
Source: https://github.com/foeken/clippy
Works through the M365 web UI via browser automation (Playwright), not the Graph API. No Azure AD app registration required - just login with your browser.
```bash
git clone https://github.com/foeken/clippy.git
cd clippy && bun install
bun run src/cli.ts --help
```
Or link globally: `bun link`
```bash
clippy login --interactive
clippy whoami
```
Keep a browser session alive to prevent token expiry:
```bash
clippy keepalive --interval 10
```
For persistent operation, set up as a launchd service (macOS) or systemd (Linux).
**Health monitoring:** Keepalive writes to `~/.config/clippy/keepalive-health.txt` on each successful refresh. Check if this file is stale (>15min) to detect failures.
```bash
clippy calendar
clippy calendar --day tomorrow
clippy calendar --day monday
clippy calendar --day 2024-02-15
clippy calendar --week
clippy calendar --details
```
```bash
clippy create-event "Title" 09:00 10:00
clippy create-event "Meeting" 14:00 15:00 \
--day tomorrow \
--description "Meeting notes" \
--attendees "[email protected],[email protected]" \
--teams \
--find-room
clippy create-event "Standup" 09:00 09:15 --repeat daily
clippy create-event "Sync" 14:00 15:00 --repeat weekly --days mon,wed,fri
```
```bash
clippy update-event 1 --title "New Title"
clippy update-event 1 --start 10:00 --end 11:00
clippy delete-event 1
clippy delete-event 1 --message "Need to reschedule"
```
```bash
clippy respond # List pending
clippy respond accept --id <eventId>
clippy respond decline --id <eventId> --message "Conflict"
clippy respond tentative --id <eventId>
```
```bash
clippy findtime
clippy findtime --attendees "[email protected],[email protected]"
clippy findtime --duration 60 --days 5
```
```bash
clippy mail
clippy mail --unread
clippy mail -n 20
clippy mail --search "invoice"
clippy mail sent
clippy mail drafts
clippy mail archive
clippy mail -r <number>
clippy mail -d <number> -o ~/Downloads
```
```bash
clippy send \
--to "[email protected]" \
--subject "Subject" \
--body "Message body"
clippy send \
--to "[email protected]" \
--cc "[email protected]" \
--subject "Report" \
--body "**See attached**" \
--markdown \
--attach "report.pdf"
```
```bash
clippy mail --reply <number> --message "Thanks!"
clippy mail --reply-all <number> --message "Got it"
clippy mail --forward <number> --to-addr "[email protected]"
```
```bash
clippy mail --mark-read <number>
clippy mail --flag <number>
clippy mail --move <number> --to archive
```
```bash
clippy find "john" # People
clippy find "conference" --rooms # Rooms
```
```bash
clippy calendar --json
clippy mail --json
```
Profile directory can be overridden:
```bash
export CLIPPY_PROFILE_DIR=~/.config/clippy/my-profile
```
Leave a review
No reviews yet. Be the first to review this skill!