Two things separate this from a thin Graph wrapper. The send path has actual safeguards — dry-run, a pre-send check for out-of-office and delivery restrictions, a session send cap and a recipient allowlist — which is what you want when an agent is composing on your behalf, and the draft-then-send route shares the same counter rather than routing around it. And search degrades gracefully on personal Outlook.com accounts, where Microsoft's $search API is limited, by falling back through OData and boolean filters instead of returning nothing.
An Outlook client over the Microsoft Graph API, consolidated into 22 tools that each take an action parameter instead of one tool per operation. Works with personal Outlook.com accounts and work or school Microsoft 365 accounts.
- Email search in six modes from one tool: recent list, filters on sender, subject and date, KQL query, delta sync, or grouped by conversation
- A message read in full with HTML stripped to text — or its raw headers, DKIM, SPF, DMARC, delivery chain, X-Mailer and X-Originating-IP, for a phishing or compliance look
- Sending with the brakes on: a dryRun preview, pre-send mail tips for out-of-office, full mailboxes and delivery restrictions, a per-session send cap, and a recipient allowlist
- The full draft lifecycle — create, update, send, delete, reply, forward — under those same controls
- Read state, flags and follow-up dates changed for one message or a batch
- Attachments listed and saved to disk
- Export to .eml, .mbox, Markdown, JSON, CSV or HTML: one message, a batch straight from a search query, or a whole conversation thread
- Calendar events listed, created with attendees, and updated, declined, cancelled or deleted
- Nested mail folders addressable by path such as Parent/Child, created, listed with item counts, and used as move targets
- Server-side inbox rules created, reordered and deleted — they run on Exchange whichever client you open next
- Colour categories managed and applied to messages, and Focused Inbox sender overrides set explicitly
- Contacts listed, searched, created and updated, plus relevance-ranked people search across the directory and recent correspondents
- Out-of-office replies, working hours and time zone set from mailbox settings
- Shared mailboxes read, and bookable meeting rooms found by building, floor and capacity, on work or school accounts
Node.js 18.0.0 or higher and your own Azure app registration — there is no shared app to borrow. Add the Microsoft Graph delegated permissions (offline_access, User.Read, the Mail, Calendars and Contacts scopes, MailboxSettings.ReadWrite, People.Read), turn on "Allow public client flows", and create a client secret, copying the Value rather than the Secret ID. Pass them as OUTLOOK_CLIENT_ID and OUTLOOK_CLIENT_SECRET. Authentication defaults to the device code flow, which needs no local server and works headless; tokens are written to ~/.outlook-assistant-tokens.json and refresh themselves, and the browser redirect flow on port 3333 is the alternative. Two settings are worth turning on from day one because both are off by default: OUTLOOK_MAX_EMAILS_PER_SESSION caps sends and OUTLOOK_ALLOWED_RECIPIENTS restricts who can receive them. Shared mailboxes need Mail.Read.Shared, and meeting-room search needs Place.Read.All with admin consent — work or school accounts only.
One command plus a key — npm install -g @littlebearapps/outlook-assistant, then supply credentials
