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 th
Add this skill
npx mdskills install littlebearapps/outlook-assistantComprehensive Outlook MCP server with 22 tools, safety controls, and excellent documentation

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
| Without Outlook Assistant | With Outlook Assistant |
|---|---|
| Switch between your AI tool and Outlook to manage email | Read, search, send, and export emails directly from your AI assistant |
| Manually search and export email threads | Full email tools including search, threading, and bulk export |
| Context-switch for calendar and contacts | Manage calendar events, contacts, and settings in one place |
| Copy-paste email content into conversations | Your AI assistant reads your emails natively with full context |
| No programmatic access to mailbox rules or categories | Create inbox rules, manage categories, configure auto-replies |
| Manually check each email for phishing red flags | Forensic header analysis — DKIM, SPF, DMARC, spam scores, and delivery chain in one call |
| Poll your inbox to check for new mail | Delta sync returns only changes since your last check, with tokens for continuous polling |
| Module | Tools | What You Can Do |
|---|---|---|
| 8 | search-emails (list/search/delta/conversations), read-email (content + forensic headers), send-email (with dry-run + mail tips), draft (create/update/send/delete/reply/forward), update-email (read status, flags), attachments, export, get-mail-tips | |
| Calendar | 3 | list-events, create-event, manage-event (decline/cancel/delete) |
| Contacts | 2 | manage-contact (list/search/get/create/update/delete), search-people |
| Categories | 3 | manage-category (CRUD), apply-category, manage-focused-inbox |
| Settings | 1 | mailbox-settings (get/set auto-replies/set working hours) |
| Folder | 1 | folders (list/create/move/stats/delete) |
| Rules | 1 | manage-rules (list/create/update/reorder/delete) |
| Advanced | 2 | access-shared-mailbox, find-meeting-rooms |
| Auth | 1 | auth (status/authenticate/about) |
22 tools total — consolidated from 55 for optimal AI performance. See the Tools Reference for complete parameter details.
| Format | Extension | When to Use It |
|---|---|---|
mime / eml | .eml | Legal holds, forensic preservation, importing into other mail clients |
mbox | .mbox | Archiving entire conversation threads, migrating between systems |
markdown | .md | Pasting into documents, feeding into AI workflows |
json | .json | Data analysis, pipeline processing, compliance reporting |
html | .html | Visual archival with formatting intact |
csv | .csv | Spreadsheet import, bulk metadata analysis, compliance audits |
Export individual emails, search results, or entire conversation threads — use target=messages with a search query to batch-export without manually collecting IDs.
Outlook Assistant works with both personal and work/school Microsoft accounts, but some features behave differently:
| Feature | Personal (Outlook.com) | Work/School (Microsoft 365) |
|---|---|---|
| Email read, send, search | Full support | Full support |
| Calendar events | Full support | Full support |
| Contacts CRUD | Full support | Full support |
| Inbox rules | Full support | Full support |
| Folders | Full support | Full support |
Free-text query search | Limited — use subject, from, to filters instead | Full KQL support |
| Categories | Full support | Full support |
| Mailbox settings | Full support | Full support |
| Focused Inbox | Not available | Full support |
| Shared mailboxes | Not available | Requires Mail.Read.Shared |
| Meeting room search | Not available | Requires Place.Read.All + admin consent |
Note: On personal accounts, Microsoft's
$searchAPI has limited support for free-text queries. Outlook Assistant handles this automatically with progressive search — if your query returns no results, it falls back through OData filters, boolean filters, and recent message listing to find your emails. For the most direct results on personal accounts, use the structured filter parameters (from,subject,to,receivedAfter).
$search API is limited, Outlook Assistant automatically falls back through up to 4 search strategies to find your emails. Most Graph API wrappers fail silently; this one adapts.Outlook Assistant is designed with safety-first principles for AI-driven email access:
Destructive action safeguards — Every tool carries MCP annotations (readOnlyHint, destructiveHint, idempotentHint) so AI clients can auto-approve safe reads and prompt for confirmation on destructive operations like sending email or deleting events.
Send-email protections — The send-email tool includes:
checkRecipients: true) — check recipients for out-of-office, mailbox full, delivery restrictions before sendingdryRun: true) — preview composed emails without sendingOUTLOOK_MAX_EMAILS_PER_SESSION (default: unlimited)OUTLOOK_ALLOWED_RECIPIENTSDraft protections — The draft tool shares send-email safety controls: dry-run preview, recipient allowlist, mail-tips validation, and rate limiting. The send action shares the send-email rate limit counter, preventing circumvention via the draft-then-send pathway.
Token-optimised architecture — Tools are consolidated using the STRAP (Single Tool, Resource, Action Pattern) approach. 22 tools instead of 55 reduces per-turn overhead by ~11,000 tokens (~64%), keeping more of the AI's context window available for your actual conversation. Fewer tools also means the AI selects the right tool more accurately — research shows tool selection degrades beyond ~40 tools.
Important: These safeguards are defence-in-depth measures that reduce risk, but they are not a guarantee against unintended actions. AI-driven access to your email is inherently sensitive — always review tool calls before approving, particularly for sends and deletes. No automated guardrail is foolproof, and you remain responsible for actions taken through your mailbox.
npm install -g @littlebearapps/outlook-assistant
Or run directly without installing:
npx @littlebearapps/outlook-assistant
You need a Microsoft Azure app registration to authenticate. See the Azure Setup Guide for a detailed walkthrough (including first-time Azure account creation), or if you've done this before:
nativeclient URIhttp://localhost:3333/auth/callback — only needed for browser auth flowAdd to your MCP client config:
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"outlook": {
"command": "npx",
"args": ["@littlebearapps/outlook-assistant"],
"env": {
"OUTLOOK_CLIENT_ID": "your-application-client-id",
"OUTLOOK_CLIENT_SECRET": "your-client-secret-VALUE"
}
}
}
}
Claude Code (CLI)
claude mcp add outlook -- npx @littlebearapps/outlook-assistant
Then set environment variables in your .env or shell.
Cursor (.cursor/mcp.json)
Or add manually to .cursor/mcp.json:
{
"mcpServers": {
"outlook": {
"command": "npx",
"args": ["@littlebearapps/outlook-assistant"],
"env": {
"OUTLOOK_CLIENT_ID": "your-application-client-id",
"OUTLOOK_CLIENT_SECRET": "your-client-secret-VALUE"
}
}
}
}
Windsurf (~/.codeium/windsurf/mcp_config.json)
{
"mcpServers": {
"outlook": {
"command": "npx",
"args": ["@littlebearapps/outlook-assistant"],
"env": {
"OUTLOOK_CLIENT_ID": "your-application-client-id",
"OUTLOOK_CLIENT_SECRET": "your-client-secret-VALUE"
}
}
}
}
outlook-assistant-auth (or npx @littlebearapps/outlook-assistant-auth)auth tool with action=authenticate to get an OAuth URLNote: The auth server needs
OUTLOOK_CLIENT_IDandOUTLOOK_CLIENT_SECRETenvironment variables. Your MCP client's"env"config only applies to the MCP server process — when running the auth server separately, ensure these are set in a.envfile or exported in your shell.
npm install -g @littlebearapps/outlook-assistant
git clone https://github.com/littlebearapps/outlook-assistant.git
cd outlook-assistant
npm install
First time with Azure? The Azure Setup Guide covers everything from creating an account to your first authentication, including billing setup and common pitfalls.
http://localhost:3333/auth/callbackoffline_access — refresh tokens between sessionsUser.Read — basic profileMail.Read, Mail.ReadWrite, Mail.Send — email operationsCalendars.Read, Calendars.ReadWrite — calendar operationsContacts.Read, Contacts.ReadWrite — contact managementMailboxSettings.ReadWrite — settings, auto-replies, categoriesPeople.Read — people searchMail.Read.Shared — shared mailbox accessPlace.Read.All — meeting room search (requires admin consent)Create a .env file from the example:
cp .env.example .env
Edit with your Azure credentials:
OUTLOOK_CLIENT_ID=your-application-client-id
OUTLOOK_CLIENT_SECRET=your-client-secret-VALUE
USE_TEST_MODE=false
Note: The server also accepts
MS_CLIENT_IDandMS_CLIENT_SECRETfor backwards compatibility.
See Quick Start — Configure Your MCP Client above for Claude Desktop, Claude Code, Cursor, and Windsurf configs.
If installed from source, use node instead of npx:
{
"mcpServers": {
"outlook": {
"command": "node",
"args": ["/path/to/outlook-assistant/index.js"],
"env": {
"OUTLOOK_CLIENT_ID": "your-application-client-id",
"OUTLOOK_CLIENT_SECRET": "your-client-secret-VALUE"
}
}
}
}
No auth server needed. Works everywhere, including remote/headless environments.
auth tool with action=authenticate)microsoft.com/devicelogin) on any browser, any deviceauth with action=device-code-complete)~/.outlook-assistant-tokens.json and refresh automaticallyPrerequisite: Enable "Allow public client flows" in Azure Portal > your app > Authentication > Advanced settings.
For localhost development or if you prefer the traditional OAuth flow:
npm run auth-server
This starts a local server on port 3333 to handle the OAuth callback.
auth tool with action=authenticate, method=browserNote: The auth server reads
OUTLOOK_CLIENT_IDandOUTLOOK_CLIENT_SECRETfrom environment variables. Your MCP client's"env"config only applies to the MCP server process, not a separately-started auth server.
outlook-assistant/
├── index.js # Main entry point (22 tools)
├── config.js # Configuration settings
├── outlook-auth-server.js # OAuth server (port 3333)
├── auth/ # Authentication module (1 tool)
├── email/ # Email module (7 tools)
│ ├── mail-tips.js # Pre-send recipient validation
│ ├── headers.js # Email header retrieval
│ ├── mime.js # Raw MIME/EML content
│ ├── conversations.js # Thread listing/export
│ ├── attachments.js # Attachment operations
│ └── ...
├── calendar/ # Calendar module (3 tools)
├── contacts/ # Contacts module (2 tools)
├── categories/ # Categories module (3 tools)
├── settings/ # Settings module (1 tool)
├── folder/ # Folder module (1 tool)
├── rules/ # Rules module (1 tool)
├── advanced/ # Advanced module (2 tools)
└── utils/
├── graph-api.js # Microsoft Graph API client (includes $batch)
├── safety.js # Rate limiting, recipient allowlist, dry-run
├── odata-helpers.js # OData query building
├── field-presets.js # Token-efficient field selections
├── response-formatter.js # Verbosity levels
└── mock-data.js # Test mode data
npm install
npx kill-port 3333
npm run auth-server
You're using the Secret ID instead of the Secret Value. Go to Azure Portal > Certificates & secrets and copy the Value column.
If using browser flow: start the auth server first with npm run auth-server. If using device code flow: visit microsoft.com/devicelogin instead.
Enable "Allow public client flows" in Azure Portal > App registrations > Authentication > Advanced settings.
Check authentication status with the auth tool (action=status). Tokens may have expired — re-authenticate if needed.
npm test # Jest unit tests
npm run inspect # MCP Inspector (interactive)
Run with mock data (no real API calls):
USE_TEST_MODE=true npm start
tasks/)index.jsTOOLS array in main index.jstest/docs/quickrefs/tools-reference.md| Guide | Description |
|---|---|
| Getting Started | Install, configure, and authenticate — start here |
| Azure Setup Guide | Azure account creation, app registration, permissions, and secrets |
| How-To Guides | 28 practical guides for email, calendar, contacts, and settings |
| Troubleshooting & FAQ | Common problems, re-authentication, and frequently asked questions |
| Tools Reference | All 22 tools with parameters |
| AI Agent Guide | Tool selection and workflow patterns for AI agents |
Full documentation: docs/
query and kqlQuery rely on Microsoft's $search API, which has limited support on personal Outlook.com accounts. Outlook Assistant mitigates this with progressive search fallback (trying OData filters automatically), but for the most direct results, use structured filters (from, subject, to, receivedAfter).Mail.Read.Shared permission and a work/school account.Place.Read.All permission with admin consent (work/school accounts only).savePath or outputDir to specify a different location.Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
For security concerns, please see our Security Policy. Do not open public issues for vulnerabilities.
See CHANGELOG.md for version history.
Built and maintained by Little Bear Apps. Outlook Assistant is open source under the MIT License.
Install via CLI
npx mdskills install littlebearapps/outlook-assistantOutlook Assistant is a free, open-source AI agent skill. 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 th
Install Outlook Assistant with a single command:
npx mdskills install littlebearapps/outlook-assistantThis downloads the skill files into your project and your AI agent picks them up automatically.
Outlook Assistant works with Claude Code, Claude Desktop, Cursor, Vscode Copilot, Windsurf, Continue Dev, Gemini Cli, Amp, Roo Code, Goose. Skills use the open SKILL.md format which is compatible with any AI coding agent that reads markdown instructions.