Outlook Assistant MCP server
io.github.littlebearapps/outlook-assistant·v3.14.1·39 starsMicrosoft Outlook MCP server — 22 tools for email, calendar, contacts, and mailbox management.
39 stars500 downloads/wk
Reviews
Write oneNobody has reviewed Outlook Assistant yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
Outlook Assistant tools (22, 4 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
access-shared-mailboxList emails or folders in a shared mailbox the signed-in user can access (read-only). Returns messages from `sharedMailbox` (alias `email`) and `folder` (default `inbox`) with id/subject/from/receivedDateTime/preview, the same shape as `search-emails` list mode. `folder` takes a well-known name (inbox, sent, archive…), a custom/localized display name (e.g. `Archiv`), a nested path (e.g. `Inbox/Ven
apply-categoryTag or untag email messages with master categories (those created via `manage-category`). action=`set` (default) replaces the message's category set with the supplied `categories` array. action=`add` appends categories to whatever's already on the message. action=`remove` removes only the named categories, leaving the rest. Accepts either `messageId` (single) or `messageIds` (batch: one request pe
attachmentsInspect or retrieve email attachments. action=`list` (default) returns metadata for all attachments on `messageId` (id, name, contentType, size, isInline) — read-only. action=`view` returns inline content for text/JSON/XML attachments via `attachmentId`; binary types require download. action=`download` saves the attachment under a new, unique name in `outputDir` (default system temp directory, aut
authManage authentication with the Microsoft Graph API. action=`status` (default) returns the current auth state, refreshing an expired access token while the refresh token is still valid (~90 days); call it first to check before other tools. action=`authenticate` starts sign-in: `method: "device-code"` (default, works headlessly) returns a code + URL for the user to visit; `method: "browser"` uses th
create-eventwrite actionCreate a new calendar event on the signed-in user's default calendar. Returns the created event with its `id`, `webLink`, and (if attendees are present) an auto-generated online-meeting URL — attendees receive invitations on save, so pass `dryRun: true` first to preview who would be invited (and how many are external) without creating anything. When `OUTLOOK_ALLOWED_RECIPIENTS` is set, every atten
draftDraft lifecycle for review-before-send workflows (destructive: covers `send` and `delete`). action=`create` saves a new draft and returns its id (`dryRun: true` previews without saving; `checkRecipients: true` runs mail-tips first). action=`update` patches a draft by `id` (only fields passed change). action=`send` sends a draft and counts against the `send-email` session limit (0 refuses every sen
exportExport emails to files. target=`message` (default) exports one email by `id` (mime/eml/markdown/json/csv) to `savePath`: a directory (or a path ending in `/`, created if missing) gets a new, unique file name; a file path is created new and an existing file is replaced only with `overwrite: true`. target=`messages` batch-exports `emailIds`, or matches for `searchQuery`/`query`, into `outputDir`, at
find-meeting-roomsDiscover bookable meeting rooms in the user's organisation via the Graph rooms endpoint (read-only). Returns room resources with displayName, emailAddress, building, floor, capacity, and bookingType — suitable for piping into `create-event` as attendees. Filter by `query` (matches name/email), `building`, `floor`, or minimum `capacity`. Returns empty list on personal accounts (the rooms endpoint i
foldersManage mail folders. Address a folder by name, by slash-separated path for nested folders (e.g. `Inbox/Clients/Acme`, case-insensitive) or by ID; a bare name matches a unique top-level folder first, then nested ones (an ambiguous name returns the candidates). action=`list` (default) returns the tree with each folder's path and id (`includeItemCounts`, `includeChildren`). action=`create` makes `nam
get-mail-tipsPre-send recipient validation via Graph `POST /me/getMailTips` (read-only; uses the existing `Mail.Read` scope — no extra permissions). Returns per-recipient tips covering automatic replies (out-of-office), mailbox full status, custom admin mail tips, delivery restrictions, moderation requirements, external-vs-internal scope, max message size, and group member counts (total + external). Use ahead
list-eventsList calendar events for the signed-in user (read-only). By default returns upcoming events (start ≥ now). Optional `startAfter`, `startBefore` and `subject` filters find past, current or specifically-named events; supplying any of them replaces the default "now" lower bound and the filters are AND-ed together. Results are oldest first, except when the search only looks backwards (`startBefore` wi
mailbox-settingsRead or update mailbox-level settings (idempotent — safe to retry; sets are PATCH-style and merge with existing state). action=`get` (default) returns settings — use `section` to filter (`language`, `timeZone`, `workingHours`, `automaticRepliesSetting`, or `all`). action=`set-auto-replies` configures out-of-office: `enabled` true/false, optional `startDateTime`/`endDateTime` (ISO 8601) for schedul
manage-categoryManage the user's master category list (the colour-coded labels available across mail/calendar/contacts). action=`list` (default) returns categories with id/displayName/color. action=`create` adds a new category — `displayName` required, `color` optional (preset0-preset24, e.g. preset0=Red, preset7=Blue). action=`update` (alias `set` — deprecated) changes name/colour by `id`. action=`delete` remov
manage-contactFull CRUD over the signed-in user's personal Outlook contacts (destructive: covers `delete` action). action=`list` (default) returns contacts with pagination via `skip`/`count` (default 50). action=`search` returns contacts matching `query` against name/email (default 25). action=`get` returns full contact detail by `id`. action=`create` adds a new contact and returns its `id`. action=`update` pat
manage-eventManage an existing calendar event. `dryRun: true` previews any action without changing or sending anything: who would be emailed, with an external count (update also: who is added or removed, and the PATCH body). action=`update` edits fields via PATCH (subject, start, end, attendees, body, location, isOnlineMeeting, sensitivity, showAs, importance, categories, reminderMinutesBeforeStart); only fie
manage-focused-inboxManage Focused Inbox sender overrides — explicit rules that force messages from a given sender into Focused or Other regardless of the ML classifier. action=`list` (default) returns existing overrides with id/sender/classifyAs. action=`set` creates or updates an override for `emailAddress` (optional `name`), routing future mail to `focused` (default) or `other`. action=`delete` removes the overrid
manage-rulesServer-side inbox rules (destructive: covers `delete`; `dryRun` previews create/update). Rules run on the Exchange server whichever client is open. action=`list` (default) returns rules with id/name/sequence; `includeDetails: true` adds conditions/actions/exceptions. action=`create` builds a rule from condition params (12, e.g. fromAddresses, containsSubject, bodyContains, hasAttachments, importan
read-emailwrite actionRead a single email by id (read-only). Returns subject, from/to/cc, date and the body as Markdown (HTML stripped to text): up to 2,000 characters by default, up to 40,000 with `outputVerbosity: full`; a cut body ends with a note on how to get the rest. With `headersMode: true`: returns RFC-822 forensic headers in place of the body (DKIM, SPF, DMARC, Received chain, Message-ID, Authentication-Resul
search-emailsSearch, list, delta-sync or thread-group emails (read-only); parameters set the mode. No params: recent emails in `folder` (default `inbox`). `query`/`from`/`to`/`subject`/date filters: search, combined as an OData filter. `searchExpression` (deprecated alias `kqlQuery`): a raw Graph `$search` expression. `deltaMode: true`: current state plus a `deltaToken` to pass back next time for changes only.
search-peopleRelevance-ranked search across personal contacts, organisation directory, and recent communications via the Microsoft Graph People API (read-only). Returns people objects with `displayName`, `emailAddresses`, `companyName`, `jobTitle`, and relevance metadata, for "who is X?" or "who do I email about Y?" lookups. For entries from your personal contact store only, use `manage-contact` action=`search
send-emailwrite actionCompose and send an email immediately (destructive: sends external comms). Returns a confirmation. Safety controls: `dryRun: true` returns the composed message for review without sending; `checkRecipients: true` runs `get-mail-tips` first and returns its warnings. If the tips show an out-of-office reply, a full mailbox, a delivery restriction or external recipients, the send is refused until repea
update-emailwrite actionUpdate message state without modifying content (idempotent — safe to retry). action=`mark-read`/`mark-unread` sets `isRead` on a single message by `id`. action=`flag` sets a follow-up flag with optional `dueDateTime`/`startDateTime`: ISO 8601 with a time, kept as that exact instant when it has `Z` or a ±hh:mm offset and read in OUTLOOK_DEFAULT_TIMEZONE when it has none; date-only or unparseable va
Public scan report
scanner v0.1.10 · 2026-10-15 · same rubric, same numbers if you re-run it
- Code scan70 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitystatic API keys via environment variables6/15
- Maintenancelast push 2 days ago15/15
- Maintainer identityregistry namespace matches repository owner; GitHub account older than a year9/10
How Outlook Assistant compares
Against every graded Email MCP server, from our own scans and uptime checks. Updated after each scan run.
- Safety score
- 85/100
- higher than 78% of 916 Email servers
- Tools
- 22
- the typical Email server has 7
- Tools that change things
- 18%
- typical: 25%. Fewer write tools means less an agent can break
- GitHub stars
- 39
- more than 92% of 493 Email servers
- Downloads a week
- 500
- more than 84% of 235 Email servers with a package
What its tools let an agent do: 17 read · 1 create · 2 change · 1 send or post · 1 run or deploy
Release history: 5 versions in the registry since 2026-09-09, latest 2026-10-05, typically one every 2 days.
Install Outlook Assistant in Claude Code, Cursor or VS Code
Runs npx -y @littlebearapps/outlook-assistant on your machine. Read the scan report first; the gateway never runs local packages.
claude mcp add outlook-assistant -- npx -y @littlebearapps/outlook-assistant
What the publisher says
From the Outlook Assistant repository's README, as published. We do not edit it. Read it on GitHub
Outlook Assistant
MCP server for Outlook email, calendar, and contacts — let your AI assistant manage your inbox directly from the conversation.
Outlook Assistant connects AI assistants to your Microsoft Outlook account through the Model Context Protocol. Ask your AI assistant to search your inbox, send emails, schedule meetings, manage contacts, and configure mailbox settings — without leaving the conversation. Works with Claude, Cursor, Windsurf, and any MCP-compatible client.
Works with personal Outlook.com and work/school Microsoft 365 accounts.
Search inbox → read & summarise → draft a reply — all from the conversation
What you can do
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
Outlook Assistant: common questions
- Is Outlook Assistant MCP server safe?
- Yes, by our scan: it is graded A (85/100). Read the Outlook Assistant safety report
- How do I install Outlook Assistant?
- It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
- Does Outlook Assistant need an API key?
- Yes. The registry entry asks for
OUTLOOK_CLIENT_SECRET. - Is Outlook Assistant maintained?
- The last commit was 22 days ago (2026-10-13). The latest release is v3.14.1.
- What can I use instead of Outlook Assistant?
- Servers from other publishers that do the same job: Mailoo - Email MCP Server, Outlook MCP server and MCPEmails MCP server. Compare all Outlook Assistant alternatives.
- How does Outlook Assistant compare with other Email MCP servers?
- safety score 85/100 (higher than 78% of 916 Email servers); tools 22 (the typical Email server has 7); tools that change things 18% (typical: 25%. Fewer write tools means less an agent can break). Full comparison.
Alternatives to Outlook Assistant
Same job from other publishers: the closest match first, then the best rated.
- Mailoo - Email MCP ServerEmail MCP server for AI agents: IMAP/SMTP, Gmail, Outlook, calendar, ManageSieve, AI triage, OAuth2.5.0(1)GrowingA
- Outlook MCPMicrosoft Outlook personal accounts: mail, rules, calendar, contacts, to-do, drafts (77 tools).not reviewedEstablishedA
- MCPEmailsNever-stored live email: read, send and triage Gmail, Outlook / Microsoft 365, or any IMAP mailbox.not reviewedGrowingA
- OutlookOutlook & OneDrive MCP: personal & enterprise tools for mail, calendar, contacts, tasks, filesnot reviewedGrowingA
- Microsoft 365 CalendarMicrosoft 365 Outlook calendar via Graph: list, get, create, update, respond, free/busy.not reviewedGrowingA