Microsoft Outlook personal accounts: mail, calendar, contacts, to-do, drafts (51 tools).
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
MCP server for Microsoft Outlook personal accounts via Microsoft Graph API.
Personal Microsoft accounts only β
@outlook.com,@hotmail.com,@live.com. Work/school accounts (Entra ID) are not supported in v1.
Disclaimer: Independent open-source project. Not affiliated with, endorsed by, or supported by Microsoft Corporation. "Outlook" and "Microsoft Graph" are trademarks of Microsoft.
You'll like this if you're:
allow_categories, optional read_only mode, zero telemetryThis isn't for you if you need work/school M365 accounts (use Microsoft's official tooling β Entra ID auth and admin-consent flows are out of scope here), or if a basic mail-only client would suffice (this has 62 tools β way more than you need for "read my inbox").
This is the only first-class MCP server in the personal-Outlook space β most alternatives are bash scripts or skill-shaped CLI wrappers the agent shells out to. That distinction matters: the agent gets typed tool schemas with structured args/returns, not stdout it has to parse. Other things you won't find elsewhere: /$batch-optimized triage (10-20Γ faster on bulk ops), recursive folder ops with name resolution, granular per-category permissions, multi-account support, and full attachment write paths including >3MB upload sessions for drafts.
Give your AI agent full Outlook access. Example prompts that just work:
The server exposes 62 discrete tools so the agent can compose its own workflow β read, triage, write, schedule, track tasks β without hardcoded macros.
~/.claude/settings.json under mcpServersListed on the official MCP Registry as io.github.mpalermiti/outlook-mcp.
62 tools across 13 categories:
$batch, search (KQL), list folders, delta-sync inbox changes, composed "since last call" digest across mail/events/contactsDesign principles:
azure-identity (macOS Keychain, Windows Credential Store, Linux Secret Service).read_only: true in config to block all write operations.permanent: true.Two pure-code upgrades that make the same 57 tools cheaper and more recoverable for AI agents:
Concise mode β pass concise=True to the five high-volume read tools (outlook_list_inbox, outlook_read_message, outlook_search_mail, outlook_list_events, outlook_list_thread) to drop bulky fields: full message bodies, per-event attendee lists, quoted prior-message text in threads, body previews/categories on inbox listings. Typical payload reduction ~10Γ. Default concise=False preserves the existing response shape β strict backward compat.
Structured Graph errors β every tool wraps msgraph SDK exceptions into {code, message, action} responses with operator-friendly recovery hints: re-auth on 401, a link to the repo's ROADMAP dead-ends list on 403/ErrorAccessDenied, re-list on 404/ErrorItemNotFound, back-off on 429, retry on 503. OutlookMCPError subclasses and validation errors pass through unchanged.
You need to register a free Azure AD app to get a client ID.
Microsoft has deprecated app registration for personal accounts without an Azure AD tenant. You need to create a free Azure account first:
@outlook.com account. Requires a credit card for identity verification but won't charge you. This creates a proper Azure AD tenant.Go to App Registrations and sign in with your @outlook.com account.
Click "+ New registration" and fill in:
mp-outlook-mcp β names like "Outlook MCP" will be rejected)Click Register. Copy the Application (client) ID from the overview page.
Go to Authentication (Preview) β Settings tab β toggle "Allow public client flows" to Yes β Save.
Go to API permissions β Add a permission β Microsoft Graph β Delegated permissions β add:
Mail.ReadWrite, Mail.SendCalendars.ReadWriteContacts.ReadWrite, Tasks.ReadWriteUser.Read, offline_accessNo client secret is needed. The device code flow uses public client auth.
Option A β from PyPI (recommended):
Option B β from source:
Create ~/.outlook-mcp/config.json:
The only required field is client_id. Everything else has sensible defaults. Start with read_only: true β flip to false when you're comfortable.
If installed from PyPI:
If installed from source:
For OpenClaw, use the openclaw mcp CLI β it writes to mcp.servers in ~/.openclaw/openclaw.json for you:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/outlook-mcp-2)<a href="https://allmcps.com/mcp/outlook-mcp-2"><img src="https://allmcps.com/api/badge/outlook-mcp-2?style=directory" alt="Outlook MCP on AllMCPs" /></a>