Outlook
Give your agents full Outlook access via Microsoft Graph API. Read, search, send, and manage emails.
Usage
Option 1: Import directly
Option 2: Copy and customize
Quick Start
Setup
Authenticate with Microsoft:
Your agent can now read and manage Outlook emails.
Switch accounts? Run co auth microsoft again to connect a different Microsoft account.
CLI: co outlook
You don't need an agent to use your mailbox — the same Outlook connection powers a CLI. After co auth microsoft, work with your email directly from the terminal:
Send options
--cc, --bcc
CC / BCC recipients (comma-separated for multiple)
--attach, -a
Attach a local file — images, screenshots, PDFs. Repeat the flag for multiple files. Microsoft Graph caps the total at about 3 MB.
--at
Schedule delivery: +30m, +2h, or a UTC ISO time like 2026-07-06T15:30:00Z. Uses Exchange deferred delivery, so the email waits server-side even if your machine goes offline.
message = '-'
Read the email body from stdin — pipe in command output or a file.
Manage scheduled sends
Scheduled emails sit in Drafts until delivery time. See what's queued — and cancel before Exchange sends it:
cancel deletes the pending message so it never goes out. Some Exchange work/school tenants reject the delete with 403 — there, use Outlook's own "Cancel Send". On personal outlook.com accounts cancel works normally.
Agent Methods
Reading Emails
read_inbox(last=10, unread=False)
Read emails from inbox
last- Number of emails (default: 10)unread- Only unread emails (default: False)
get_sent_emails(max_results=10)
Get emails you sent
get_email_body(email_id)
Get full email content with headers
Search
search_emails(query, max_results=10)
Search emails using Microsoft Graph search
Example queries:
- "quarterly report"
- "meeting notes"
- "invoice"
Sending Emails
send(to, subject, body, cc=None, bcc=None)
Send email via Microsoft Graph API
to- Recipient email (comma-separated for multiple)subject- Email subjectbody- Email body (plain text)cc- Optional CC recipientsbcc- Optional BCC recipients
reply(email_id, body)
Reply to an existing email
Actions
mark_read(email_id)
Mark email as read
mark_unread(email_id)
Mark email as unread
archive_email(email_id)
Move email to archive folder
Stats
count_unread()
Count unread emails in inbox
get_my_email()
Get connected Microsoft email address
Complete Example
Customizing
Need to modify Outlook's behavior? Copy the source to your project:
Then import from your local copy:
Troubleshooting
Missing Microsoft Mail scopes
Run co auth microsoft
Credentials not found
Run co auth microsoft
Token expired
Tokens auto-refresh. If issues persist, run co auth microsoft again.
ConnectOnion