Clippy - Microsoft 365 CLI
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/re…
Dreetje
@foeken
What This Skill Does
Browser-automation CLI for Microsoft 365 calendar and email. Manages Outlook events, sends/reads emails, and searches people/rooms through Playwright-based web automation without requiring Azure AD app registration.
Replaces manual Outlook web navigation and Graph API integrations by providing a scriptable CLI that works through browser automation with no Azure app registration needed.
When to Use It
- View today's Outlook calendar events from the terminal
- Create a new meeting with attendees and Teams link
- Find available meeting times across multiple colleagues
- Send an email with attachments and markdown body
- Search for a person or conference room in the organization
- Respond to pending meeting invitations with a message
Install
$ openclaw skills install @foeken/clippyClippy - Microsoft 365 CLI
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.
Install
git clone https://github.com/foeken/clippy.git
cd clippy && bun install
bun run src/cli.ts --help
Or link globally: bun link
Authentication
# Interactive login (opens browser, establishes session)
clippy login --interactive
# Check auth status
clippy whoami
Keepalive (recommended)
Keep a browser session alive to prevent token expiry:
# Start keepalive (keeps browser open, refreshes every 10min)
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.
Calendar
# Today's events
clippy calendar
# Specific day
clippy calendar --day tomorrow
clippy calendar --day monday
clippy calendar --day 2024-02-15
# Week view
clippy calendar --week
# With details (description, attendees)
clippy calendar --details
Create Events
clippy create-event "Title" 09:00 10:00
# Full options
clippy create-event "Meeting" 14:00 15:00 \
--day tomorrow \
--description "Meeting notes" \
--attendees "alice@company.com,bob@company.com" \
--teams \
--find-room
# Recurring
clippy create-event "Standup" 09:00 09:15 --repeat daily
clippy create-event "Sync" 14:00 15:00 --repeat weekly --days mon,wed,fri
Update/Delete Events
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"
Respond to Invitations
clippy respond # List pending
clippy respond accept --id <eventId>
clippy respond decline --id <eventId> --message "Conflict"
clippy respond tentative --id <eventId>
Find Meeting Times
clippy findtime
clippy findtime --attendees "alice@company.com,bob@company.com"
clippy findtime --duration 60 --days 5
# Inbox
clippy mail
clippy mail --unread
clippy mail -n 20
clippy mail --search "invoice"
# Other folders
clippy mail sent
clippy mail drafts
clippy mail archive
# Read email
clippy mail -r <number>
# Download attachments
clippy mail -d <number> -o ~/Downloads
Send Email
clippy send \
--to "recipient@example.com" \
--subject "Subject" \
--body "Message body"
# With CC, attachments, markdown
clippy send \
--to "alice@example.com" \
--cc "manager@example.com" \
--subject "Report" \
--body "**See attached**" \
--markdown \
--attach "report.pdf"
Reply/Forward
clippy mail --reply <number> --message "Thanks!"
clippy mail --reply-all <number> --message "Got it"
clippy mail --forward <number> --to-addr "colleague@example.com"
Email Actions
clippy mail --mark-read <number>
clippy mail --flag <number>
clippy mail --move <number> --to archive
People/Room Search
clippy find "john" # People
clippy find "conference" --rooms # Rooms
JSON Output
clippy calendar --json
clippy mail --json
Configuration
Profile directory can be overridden:
export CLIPPY_PROFILE_DIR=~/.config/clippy/my-profile
Top skills in this category
Humanizer
@biostartechnologyRemove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.
Slack
@steipeteUse when you need to control Slack from Clawdbot via the slack tool, including reacting to messages or pinning/unpinning items in Slack channels or DMs.
PollyReach
@pollyreachPollyReach gives every AI agent a phone number and the ability to get things done over the phone — finding contacts, making calls, and completing tasks. Just...
imap-smtp-email
@gzlicanyiRead and send email via IMAP/SMTP. Check for new/unread messages, fetch content, search mailboxes, mark as read/unread, and send emails with attachments. Supports multiple accounts. Works with any IMAP/SMTP server including Gmail, Outlook, 163.com, vip.163.com, 126.com, vip.126.com, 188.com, and vip
Answer Overflow
@rhyssullivanSearch indexed Discord community discussions via Answer Overflow. Find solutions to coding problems, library issues, and community Q&A that only exist in Discord conversations.