Outlook
Read, search, and manage Outlook emails and calendar via Microsoft Graph API. Use when the user asks about emails, inbox, Outlook, Microsoft mail, calendar events, or scheduling.
Read, search, and manage Outlook emails and calendar via Microsoft Graph API. Use when the user asks about emails, inbox, Outlook, Microsoft mail, calendar events, or scheduling.
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Access Outlook/Hotmail email and calendar via Microsoft Graph API using OAuth2.
# Requires: Azure CLI, jq ./scripts/outlook-setup.sh
The setup script will:
~/.outlook-mcp/See
references/setup.md for step-by-step manual configuration via Azure Portal.
./scripts/outlook-token.sh refresh # Refresh expired token ./scripts/outlook-token.sh test # Test connection ./scripts/outlook-token.sh get # Print access token
./scripts/outlook-mail.sh inbox [count] # List latest emails (default: 10) ./scripts/outlook-mail.sh unread [count] # List unread emails ./scripts/outlook-mail.sh search "query" [count] # Search emails ./scripts/outlook-mail.sh from <email> [count] # List emails from sender ./scripts/outlook-mail.sh read <id> # Read email content ./scripts/outlook-mail.sh attachments <id> # List email attachments
./scripts/outlook-mail.sh mark-read <id> # Mark as read ./scripts/outlook-mail.sh mark-unread <id> # Mark as unread ./scripts/outlook-mail.sh flag <id> # Flag as important ./scripts/outlook-mail.sh unflag <id> # Remove flag ./scripts/outlook-mail.sh delete <id> # Move to trash ./scripts/outlook-mail.sh archive <id> # Move to archive ./scripts/outlook-mail.sh move <id> <folder> # Move to folder
./scripts/outlook-mail.sh send <to> <subj> <body> # Send new email ./scripts/outlook-mail.sh reply <id> "body" # Reply to email
./scripts/outlook-mail.sh folders # List mail folders ./scripts/outlook-mail.sh stats # Inbox statistics
./scripts/outlook-calendar.sh events [count] # List upcoming events ./scripts/outlook-calendar.sh today # Today's events ./scripts/outlook-calendar.sh week # This week's events ./scripts/outlook-calendar.sh read <id> # Event details ./scripts/outlook-calendar.sh calendars # List all calendars ./scripts/outlook-calendar.sh free <start> <end> # Check availability
./scripts/outlook-calendar.sh create <subj> <start> <end> [location] # Create event ./scripts/outlook-calendar.sh quick <subject> [time] # Quick 1-hour event
./scripts/outlook-calendar.sh update <id> <field> <value> # Update (subject/location/start/end) ./scripts/outlook-calendar.sh delete <id> # Delete event
Date format:
YYYY-MM-DDTHH:MM (e.g., 2026-01-26T10:00)
$ ./scripts/outlook-mail.sh inbox 3{ "n": 1, "subject": "Your weekly digest", "from": "digest@example.com", "date": "2026-01-25T15:44", "read": false, "id": "icYY6QAIUE26PgAAAA==" } { "n": 2, "subject": "Meeting reminder", "from": "calendar@outlook.com", "date": "2026-01-25T14:06", "read": true, "id": "icYY6QAIUE26PQAAAA==" }
$ ./scripts/outlook-mail.sh read "icYY6QAIUE26PgAAAA=="
{ "subject": "Your weekly digest", "from": { "name": "Digest", "address": "digest@example.com" }, "to": ["you@hotmail.com"], "date": "2026-01-25T15:44:00Z", "body": "Here's what happened this week..." }
$ ./scripts/outlook-mail.sh stats
{ "folder": "Inbox", "total": 14098, "unread": 2955 }
$ ./scripts/outlook-calendar.sh today
{ "n": 1, "subject": "Team standup", "start": "2026-01-25T10:00", "end": "2026-01-25T10:30", "location": "Teams", "id": "AAMkAGQ5NzE4YjQ3..." }
$ ./scripts/outlook-calendar.sh create "Lunch with client" "2026-01-26T13:00" "2026-01-26T14:00" "Restaurant"
{ "status": "event created", "subject": "Lunch with client", "start": "2026-01-26T13:00", "end": "2026-01-26T14:00", "id": "AAMkAGQ5NzE4YjQ3..." }
Access tokens expire after ~1 hour. Refresh with:
./scripts/outlook-token.sh refresh
~/.outlook-mcp/config.json - Client ID and secret~/.outlook-mcp/credentials.json - OAuth tokens (access + refresh)Mail.ReadWrite - Read and modify emailsMail.Send - Send emailsCalendars.ReadWrite - Read and modify calendar eventsoffline_access - Refresh tokens (stay logged in)User.Read - Basic profile infoid field shows the last 20 characters of the full message ID. Use this ID with commands like read, mark-read, delete, etc.outlook-token.sh refresh when you see auth errors.read, mark-read, etc. search the 100 most recent emails for the ID."Token expired" → Run
outlook-token.sh refresh
"Invalid grant" → Token invalid, re-run setup:
outlook-setup.sh
"Insufficient privileges" → Check app permissions in Azure Portal → API Permissions
"Message not found" → The email may be older than 100 messages. Use search to find it first.
"Folder not found" → Use exact folder name. Run
folders to see available folders.
outlook-calendar.sh)
Calendars.ReadWrite permissionmark-unread - Mark emails as unreadflag/unflag - Flag/unflag emails as importantdelete - Move emails to trasharchive - Archive emailsmove - Move emails to any folderfrom - Filter emails by senderattachments - List email attachmentsreply - Reply to emailssend - Better error handling and status outputmove - Case-insensitive folder names, shows available folders on errorto field in read outputNo automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.