outlook
Outlook Email & Calendar
Access Microsoft 365 Outlook email and calendar via Microsoft Graph API.
Prerequisites
- Credentials configured in
~/.outlook/(run setup if not done) - Azure CLI, jq, curl installed
Note: Tokens are automatically refreshed when needed. No manual intervention required.
Email Operations
Reading Email
# List inbox (default 10 messages)
~/.claude/skills/outlook/scripts/outlook-mail.sh inbox
# List more messages
~/.claude/skills/outlook/scripts/outlook-mail.sh inbox 25
# Unread only
~/.claude/skills/outlook/scripts/outlook-mail.sh unread
# Focused inbox only
~/.claude/skills/outlook/scripts/outlook-mail.sh focused
# List sent items (your sent emails)
~/.claude/skills/outlook/scripts/outlook-mail.sh sent
~/.claude/skills/outlook/scripts/outlook-mail.sh sent 25
# List messages from any folder by name (searches recursively)
~/.claude/skills/outlook/scripts/outlook-mail.sh folder "Chawton Hector" 20
# Filter by sender
~/.claude/skills/outlook/scripts/outlook-mail.sh from "john@example.com"
# Search emails
~/.claude/skills/outlook/scripts/outlook-mail.sh search "project update"
# Read full message (use ID from list)
~/.claude/skills/outlook/scripts/outlook-mail.sh read <message-id>
# Quick preview (subject, from, date, body preview)
~/.claude/skills/outlook/scripts/outlook-mail.sh preview <message-id>
Sending Email
# Create plain text draft
~/.claude/skills/outlook/scripts/outlook-mail.sh draft "recipient@example.com" "Subject" "Body text"
# Create markdown-formatted draft (converts to HTML)
~/.claude/skills/outlook/scripts/outlook-mail.sh mddraft "recipient@example.com" "Subject" "**Bold** and _italic_ text"
# Send a draft (use draft ID)
~/.claude/skills/outlook/scripts/outlook-mail.sh send <draft-id>
# Reply to a message (plain text - creates draft)
~/.claude/skills/outlook/scripts/outlook-mail.sh reply <message-id> "Reply body"
# Reply with markdown formatting (converts to HTML - creates draft)
~/.claude/skills/outlook/scripts/outlook-mail.sh mdreply <message-id> "**Bold** reply with _formatting_"
# Send reply draft
~/.claude/skills/outlook/scripts/outlook-mail.sh send <reply-draft-id>
# Follow up on your own sent email (chaser)
~/.claude/skills/outlook/scripts/outlook-mail.sh followup <sent-message-id>
~/.claude/skills/outlook/scripts/outlook-mail.sh followup <sent-message-id> "Custom follow-up body in **markdown**"
# Update an existing draft
~/.claude/skills/outlook/scripts/outlook-mail.sh update <draft-id> subject "New subject line"
~/.claude/skills/outlook/scripts/outlook-mail.sh update <draft-id> body "Plain text body"
~/.claude/skills/outlook/scripts/outlook-mail.sh update <draft-id> mdbody "**Markdown** body"
~/.claude/skills/outlook/scripts/outlook-mail.sh update <draft-id> to "new-recipient@example.com"
~/.claude/skills/outlook/scripts/outlook-mail.sh update <draft-id> cc "cc@example.com"
~/.claude/skills/outlook/scripts/outlook-mail.sh update <draft-id> bcc "bcc@example.com"
# List drafts
~/.claude/skills/outlook/scripts/outlook-mail.sh drafts
Note: mddraft, mdreply, and update mdbody require pandoc for markdown conversion. Install with brew install pandoc (macOS) or apt install pandoc (Linux).
IMPORTANT: Always prefer mdreply over reply for professional emails - plain text replies look poorly formatted in Outlook.
Attachments
Reading attachments:
# List attachments on a message
~/.claude/skills/outlook/scripts/outlook-mail.sh attachments <message-id>
# Download ALL attachments to ./inbox/
~/.claude/skills/outlook/scripts/outlook-mail.sh download <message-id>
# Download specific attachment
~/.claude/skills/outlook/scripts/outlook-mail.sh download <message-id> <attachment-id>
Adding attachments to drafts:
# Add attachment to a draft (supports files up to 150MB)
~/.claude/skills/outlook/scripts/outlook-mail.sh attach <draft-id> <file-path>
Upload method is automatic based on file size:
- Small files (< 3MB): Direct base64 upload - instant
- Large files (3MB - 150MB): Chunked upload with progress indicator
Multiple attachments can be added by calling attach multiple times on the same draft.
Email Management
# Mark as read
~/.claude/skills/outlook/scripts/outlook-mail.sh markread <message-id>
# Mark as unread
~/.claude/skills/outlook/scripts/outlook-mail.sh markunread <message-id>
# Delete
~/.claude/skills/outlook/scripts/outlook-mail.sh delete <message-id>
# Archive
~/.claude/skills/outlook/scripts/outlook-mail.sh archive <message-id>
# Move to any folder (searches by name, supports nested folders)
~/.claude/skills/outlook/scripts/outlook-mail.sh move <message-id> "Projects"
~/.claude/skills/outlook/scripts/outlook-mail.sh move <message-id> "Clients/Acme"
Folder Management
# List top-level folders
~/.claude/skills/outlook/scripts/outlook-mail.sh folders
# List subfolders of a folder (default: inbox)
~/.claude/skills/outlook/scripts/outlook-mail.sh subfolders
~/.claude/skills/outlook/scripts/outlook-mail.sh subfolders "Important"
# Create a new top-level folder
~/.claude/skills/outlook/scripts/outlook-mail.sh mkdir "Projects"
# Create a subfolder under an existing folder
~/.claude/skills/outlook/scripts/outlook-mail.sh mkdir "Acme" "Clients"
~/.claude/skills/outlook/scripts/outlook-mail.sh mkdir "Urgent" inbox
# Inbox statistics (total, unread counts)
~/.claude/skills/outlook/scripts/outlook-mail.sh stats
Calendar Operations
Viewing Calendar
# Upcoming events (default 10)
~/.claude/skills/outlook/scripts/outlook-calendar.sh events
# Today's events
~/.claude/skills/outlook/scripts/outlook-calendar.sh today
# This week
~/.claude/skills/outlook/scripts/outlook-calendar.sh week
# Read event details
~/.claude/skills/outlook/scripts/outlook-calendar.sh read <event-id>
# List calendars
~/.claude/skills/outlook/scripts/outlook-calendar.sh calendars
Creating Events
# Create event (dates in YYYY-MM-DDTHH:MM format)
~/.claude/skills/outlook/scripts/outlook-calendar.sh create "Meeting subject" "2025-02-05T14:00" "2025-02-05T15:00" "Conference Room A"
# Quick 1-hour event
~/.claude/skills/outlook/scripts/outlook-calendar.sh quick "Team standup" "2025-02-05T09:00"
Availability
# Check free/busy
~/.claude/skills/outlook/scripts/outlook-calendar.sh free "2025-02-05T09:00" "2025-02-05T17:00"
Workflow: Capturing Email to Brain
When user wants to capture an email:
- List emails to find the one to capture
- Read the full message content
- Check for attachments with
attachmentscommand - Download any attachments (goes to
./inbox/) - Create markdown file in brain's
inbox/directory:
# Email: [Subject]
**From:** sender@example.com
**Date:** YYYY-MM-DD HH:MM
**Captured:** YYYY-MM-DD
## Content
[Email body]
## Attachments
- [[inbox/filename.pdf]] (captured)
## Notes
[User's annotations]
Workflow: Processing Email Attachments
When user wants to grab attachments from an email:
- Find the email:
inbox,search, orfromcommands - List attachments:
attachments <message-id> - Download:
download <message-id>(all) ordownload <message-id> <attachment-id>(specific) - Files land in
./inbox/for processing - User allocates files to appropriate areas during review
Workflow: Sending Email
Always draft first, confirm, then send:
- Create draft with
draftormddraftcommand - Show user the draft content
- Wait for "send it" or change requests
- Update draft if needed
- Send with
sendcommand only after explicit approval
Workflow: Sending Email with Attachments
- Create draft with
draftormddraftcommand - Add attachments with
attach <draft-id> <file-path>(repeat for multiple files) - Show user the draft details and attached files
- Wait for confirmation
- Send with
sendcommand only after explicit approval
Example:
# Create draft
~/.claude/skills/outlook/scripts/outlook-mail.sh draft "bob@example.com" "Q4 Report" "Please find the report attached."
# Output: Draft ID: xxxxxxxxxxxxxxxxxxxx
# Attach files (can be called multiple times)
~/.claude/skills/outlook/scripts/outlook-mail.sh attach xxxxxxxxxxxxxxxxxxxx /path/to/report.pdf
~/.claude/skills/outlook/scripts/outlook-mail.sh attach xxxxxxxxxxxxxxxxxxxx /path/to/data.xlsx
# Send after user confirms
~/.claude/skills/outlook/scripts/outlook-mail.sh send xxxxxxxxxxxxxxxxxxxx
Workflow: Sending Follow-up / Chaser Emails
When user wants to follow up on an email they sent:
- List sent items with
sentcommand to find the original email - Create follow-up with
followup <sent-id>(uses default message) or provide custom body - Show user the draft content
- Wait for confirmation or changes
- Send with
sendcommand only after explicit approval
Example:
# Find the original sent email
~/.claude/skills/outlook/scripts/outlook-mail.sh sent 20
# Create follow-up draft (default body)
~/.claude/skills/outlook/scripts/outlook-mail.sh followup abc123xyz
# Or with custom message
~/.claude/skills/outlook/scripts/outlook-mail.sh followup abc123xyz "Hi, just checking in on this. Would be great to get your thoughts when you have a moment."
# Send after user confirms
~/.claude/skills/outlook/scripts/outlook-mail.sh send <draft-id>
Workflow: Creating Calendar Events
Always confirm before creating:
- Parse user's request for: subject, start time, end time, location
- Show proposed event details to user
- Wait for confirmation or adjustments
- Create event only after explicit "yes" / approval
Error Handling
- Token expired: Automatically refreshed on next call
- Permission denied: Re-run setup to re-consent
- Network error: Check connectivity, retry
Setup
If not configured, run:
~/.claude/skills/outlook/scripts/outlook-setup.sh
See references/setup.md for manual setup instructions.
More from dandcg/claude-skills
web-clipper
Clip web pages to clean markdown for later reading and search. Use when needing to save a URL, bookmark an article, clip a page, build a read-later collection, or archive web content. Trigger on phrases like "clip this", "save this page", "bookmark", "read later", "web clip", "save article".
24humanize
Rewrite AI-generated text to sound natural and human. Use for humanizing text, making AI writing undetectable, rewriting to pass AI detectors. Trigger on phrases like "humanize", "make this sound human", "rewrite naturally", "humanize text", "sound more natural", "pass AI detection".
5trello
Manage Trello boards, lists, and cards. Trigger on phrases like "trello", "my boards", "shopping list", "create card", "move card", "sort cards".
3flaresolverr
Use when any URL returns 403, a Cloudflare challenge page, or "Just a moment..." - bypasses anti-bot protection via a real browser in Docker. Trigger on phrases like "scrape", "fetch blocked", "403", "cloudflare", "can't access site".
2email-search
Process email archives (PST files) into a searchable ChromaDB vector database with automatic semantic embeddings. Ingest, classify, search, analyse, and export to markdown. Trigger on phrases like "email archive", "ingest pst", "search emails", "email analytics", "export contacts", "email timeline".
2repo-search
Semantic search and summarisation across a document corpus (markdown, PDF, DOCX, XLSX). Use when needing to find information across many files, build timelines, aggregate knowledge, or answer questions about content. Trigger on phrases like "search brain", "find in my notes", "what do I know about", "summarise", "timeline of", "aggregate".
2