{"name":"io.github.littlebearapps/outlook-assistant","slug":"littlebearapps-outlook-assistant","title":null,"description":"Microsoft Outlook MCP server — 22 tools for email, calendar, contacts, and mailbox management.","url":"https://mcp.market/server/littlebearapps-outlook-assistant","rating":null,"grade":"A","score":85,"certified":false,"status":"active","category":"email","tags":["email","productivity"],"presence":{"score":43,"stars":37,"forks":17,"downloads_week":328,"last_push_at":"2026-09-09T09:24:18.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/littlebearapps/outlook-assistant","website":null,"version":"3.11.1","remotes":[],"packages":[{"registryType":"npm","identifier":"@littlebearapps/outlook-assistant","version":"3.11.1","transport":{"type":"stdio"},"environmentVariables":[{"description":"Azure AD application client ID","isRequired":true,"format":"string","name":"OUTLOOK_CLIENT_ID"},{"description":"Azure AD application client secret value","isRequired":true,"format":"string","isSecret":true,"name":"OUTLOOK_CLIENT_SECRET"}]}],"tools":[{"name":"access-shared-mailbox","description":"List emails from a shared mailbox the signed-in user has been granted access to (read-only). Returns paged messages from the named `sharedMailbox` (or alias `email`) and `folder` (default `inbox`) with id/subject/from/receivedDateTime/preview — same shape as `search-emails` list mode. Requires that the shared mailbox has been delegated to the signed-in user in Exchange (admin-configured). Use `out","write_action":false,"price_micros":0,"input_schema":null},{"name":"apply-category","description":"Tag 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 via Graph `$bat","write_action":false,"price_micros":0,"input_schema":null},{"name":"attachments","description":"Inspect 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 to disk at `outputDir` (default system tmpdir, auto-created) and returns th","write_action":false,"price_micros":0,"input_schema":null},{"name":"auth","description":"Manage authentication with the Microsoft Graph API. action=`status` (default) returns the current auth state and auto-refreshes the access token if it's expired but the refresh token is still valid (~90-day window) — call this first to check before other tools. action=`authenticate` starts the OAuth flow: with `method: \"device-code\"` (default, works headlessly) it returns a code + URL for the user","write_action":false,"price_micros":0,"input_schema":null},{"name":"create-event","description":"Create 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. Times use the configured timezone (default Australia/Melbourne; override with `OUTLOOK_DEFAULT_TIMEZONE`); omit the `Z` suffix to send local time. Use `manage-event` act","write_action":true,"price_micros":0,"input_schema":null},{"name":"draft","description":"Full draft lifecycle for review-before-send workflows (destructive: covers `send` and `delete`). action=`create` saves a new draft in the Drafts folder and returns its id (use `dryRun: true` to preview without saving; `checkRecipients: true` runs mail-tips first). action=`update` patches an existing draft by `id` (only fields passed are changed). action=`send` dispatches an existing draft — shares","write_action":false,"price_micros":0,"input_schema":null},{"name":"export","description":"Export emails to file formats for archival, forensics, or programmatic processing. target=`message` (default) exports a single email by `id` to `savePath` — accepts `mime`/`eml`/`markdown`/`json`/`csv`. target=`messages` batch-exports either an explicit `emailIds` array or messages matching `searchQuery` (or `query` shortcut) into `outputDir` — accepts `markdown`/`json`/`csv`. target=`conversation","write_action":false,"price_micros":0,"input_schema":null},{"name":"find-meeting-rooms","description":"Discover 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","write_action":false,"price_micros":0,"input_schema":null},{"name":"folders","description":"Manage mail folders (tool-level destructiveHint=true because `delete` permanently removes a folder; `list` and `stats` are read-only sub-actions despite the annotation). Folders can be addressed by name, by a slash-separated PATH for nested folders (e.g. `Triage/Delete`, `Inbox/Clients/Acme`, case-insensitive), or by explicit ID; `list` output includes each folder's full path and `[id: …]`. A bare","write_action":false,"price_micros":0,"input_schema":null},{"name":"get-mail-tips","description":"Pre-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 ","write_action":false,"price_micros":0,"input_schema":null},{"name":"list-events","description":"List upcoming calendar events for the signed-in user (read-only). Returns an array of events with id, subject, start/end, attendees, location, organiser, and webLink. Use `count` (default 10, max 50) to control page size; this tool does not filter — use the Outlook UI or specific date ranges via Graph for filtered queries. Each start/end is returned as a canonical UTC ISO-8601 instant (e.g. `2026-","write_action":false,"price_micros":0,"input_schema":null},{"name":"mailbox-settings","description":"Read 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","write_action":false,"price_micros":0,"input_schema":null},{"name":"manage-category","description":"Manage 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","write_action":false,"price_micros":0,"input_schema":null},{"name":"manage-contact","description":"Full 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","write_action":false,"price_micros":0,"input_schema":null},{"name":"manage-event","description":"Manage an existing calendar event (destructive: covers update/decline/cancel/delete — use dryRun where supported to preview). action=`update` edits fields in place via PATCH (subject, start, end, attendees, body, location, isOnlineMeeting, sensitivity, showAs, importance, categories, reminderMinutesBeforeStart) — only fields you pass are changed; pass `dryRun: true` to preview the PATCH payload. a","write_action":false,"price_micros":0,"input_schema":null},{"name":"manage-focused-inbox","description":"Manage 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","write_action":false,"price_micros":0,"input_schema":null},{"name":"manage-rules","description":"Server-side inbox rule CRUD (destructive: covers `delete`; supports `dryRun` on create/update for preview). Rules run on the Exchange server regardless of which client is open. action=`list` (default) returns rules with id/name/sequence — pass `includeDetails: true` to expand conditions/actions/exceptions. action=`create` builds a new rule from condition params (12 supported: fromAddresses, contai","write_action":false,"price_micros":0,"input_schema":null},{"name":"read-email","description":"Read a single email by id (read-only). Default: returns the full message body (HTML stripped to text by default), subject, from/to/cc, receivedDateTime, conversationId, attachments metadata, and webLink as Markdown. With `headersMode: true`: returns RFC-822 forensic headers instead (DKIM, SPF, DMARC, Received chain, Message-ID, Authentication-Results) — pair with `importantOnly: true` for the secu","write_action":true,"price_micros":0,"input_schema":null},{"name":"search-emails","description":"Search, list, delta-sync, or thread-group emails — six modes selected by parameters (read-only). With no params: lists recent emails in `folder` (default `inbox`). With `query`/`from`/`to`/`subject`/date filters: full search (combines via OData filter). With `searchExpression` (deprecated alias `kqlQuery`): a raw Microsoft Graph `$search` expression for advanced server-side search. With `deltaMode","write_action":false,"price_micros":0,"input_schema":null},{"name":"search-people","description":"Relevance-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 — ideal for \"who is X?\" or \"who do I email about Y?\" lookups. Use `manage-contact` action=`search` instead when you specifically need entries","write_action":false,"price_micros":0,"input_schema":null},{"name":"send-email","description":"Compose and send an email immediately (destructive: sends external comms). Returns a confirmation with the saved-message id. Safety controls: `dryRun: true` returns the composed message for review without sending; `checkRecipients: true` runs `get-mail-tips` first to flag out-of-office / mailbox-full / delivery-restricted / external recipients; combine both for a full pre-send review. Subject to s","write_action":true,"price_micros":0,"input_schema":null},{"name":"update-email","description":"Update message state without modifying content (idempotent — safe to retry). action=`mark-read`/`mark-unread` toggles the `isRead` flag on a single message by `id`. action=`flag` sets a follow-up flag with optional `dueDateTime`/`startDateTime` (ISO 8601). action=`unflag` clears the flag. action=`complete` marks the flag as done. Flag/unflag/complete accept either `id` (single) or `ids` (batch arr","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":85,"grade":"A","scanned_at":"2026-09-19T20:59:45.206Z","report":{"scannerVersion":"0.1.7","scannedAt":"2026-09-19T20:59:45.122Z","components":{"code":{"score":25,"max":25,"notes":["58 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 10 days ago"]},"identity":{"score":9,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@littlebearapps/outlook-assistant","version":"3.11.1","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-09-09T09:24:55.593Z","repositoryUrl":"git+https://github.com/littlebearapps/outlook-assistant.git","weeklyDownloads":328}],"repo":{"found":true,"owner":"littlebearapps","repo":"outlook-assistant","archived":false,"pushedAt":"2026-09-09T09:24:18Z","stars":37,"forks":17,"openIssues":31,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/220834681?v=4","ownerCreatedAt":"2025-07-15T05:51:33Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/220834681?v=4&s=128","source":"github"},"presence":{"stars":37,"forks":17,"downloadsWeek":328,"license":"MIT","lastPushAt":"2026-09-09T09:24:18.000Z","score":43}}}},"grade_history":[],"reviews":[]}