Skip to main content

outlook-mcp

A small, self-hosted MCP server that gives an LLM (Claude Code, Claude Desktop, or any MCP client) read-only access to a personal Outlook.com mailbox (outlook.com / hotmail.com / live.com) through the Microsoft Graph API.

It authenticates against Microsoft's consumer OAuth endpoint (/consumers), which is what lets personal Microsoft accounts sign in. Most "Microsoft 365" connectors are registered as work/school-only apps and will reject a personal account — this one is built specifically for personal mailboxes.

Your data stays local. The server runs on your machine and caches your OAuth token in ~/.outlook-mcp/token.json (file permissions 600). Nothing is sent anywhere except directly to Microsoft Graph.

Tools

Tool Description
search_mail(query, max_results) Full-text search across the mailbox.
list_recent_mail(max_results, unread_only) Newest inbox messages.
get_message(message_id) Full content of one message.

All tools are read-only — the app requests only the Mail.Read scope. No send, no delete.


Setup

1. Register your own Azure app (free — no paid subscription needed)

Each user brings their own app registration, so no shared infrastructure or credentials.

  1. Go to https://entra.microsoft.com → App registrations → New registration.
  2. Name: anything, e.g. Outlook MCP.
  3. Supported account types: Personal Microsoft accounts only (or "any org directory and personal Microsoft accounts" if you also use work accounts).
  4. Redirect URI: platform Public client/native (mobile & desktop), value: http://localhost:8765/callback
  5. Register, then copy the Application (client) ID from the Overview page.
  6. Authentication → enable Allow public client flows → Save.
  7. API permissions → Add a permission → Microsoft Graph → Delegated → add Mail.Read (also offline_access and User.Read if not auto-added). No admin consent is required for a personal account.

2. Install

With uv (recommended):

# clone, then from the repo root:
uv sync

Or install into any environment with pip:

pip install .

3. Configure and sign in (one time)

# PowerShell
$env:OUTLOOK_MCP_CLIENT_ID = "<your-application-client-id>"
uv run outlook-mcp-auth
# bash / zsh
export OUTLOOK_MCP_CLIENT_ID="<your-application-client-id>"
uv run outlook-mcp-auth

A browser opens; sign in and approve. Your refresh token is cached and auto-renews after that.

4. Register with your MCP client

Claude Code:

claude mcp add --scope user outlook \
  --env OUTLOOK_MCP_CLIENT_ID=<client-id> \
  -- uv --directory /path/to/outlook-mcp run outlook-mcp

Claude Desktop / other clients — add to the MCP config file:

{
  "mcpServers": {
    "outlook": {
      "command": "uv",
      "args": ["--directory", "/path/to/outlook-mcp", "run", "outlook-mcp"],
      "env": { "OUTLOOK_MCP_CLIENT_ID": "<client-id>" }
    }
  }
}

A one-click Desktop Extension bundle (manifest.json) is also included — see Desktop Extension below.


Configuration

Env var Required Default Purpose
OUTLOOK_MCP_CLIENT_ID yes — Application (client) ID from your Azure app registration.
OUTLOOK_MCP_REDIRECT_PORT no 8765 Loopback port; must match the redirect URI port you registered.

Desktop Extension

manifest.json follows the MCP Bundle / Desktop Extension spec. It prompts the user for their client ID on install. To build the installable bundle:

npx @anthropic-ai/mcpb pack

Then open the resulting .mcpb file with Claude Desktop.

Re-authenticating

If the cached token is revoked or expires beyond refresh, just run the sign-in again:

uv run outlook-mcp-auth

Security notes

  • Read-only (Mail.Read) — the server cannot send, move, or delete mail.
  • Tokens never leave your machine; ~/.outlook-mcp/token.json is excluded from git.
  • Each user uses their own Azure app registration, so there is no shared client secret.

License

MIT — see LICENSE.

Metadata

Release files for outlook-personal-mcp 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for outlook-personal-mcp 0.1.0
File Size Uploaded Provenance Actions
outlook_personal_mcp-0.1.0.tar.gz 67.1 kB With provenance Details for outlook_personal_mcp-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for outlook-personal-mcp 0.1.0
File Interpreter ABI Platform Actions
outlook_personal_mcp-0.1.0-py3-none-any.whl Python 3 none any Details for outlook_personal_mcp-0.1.0-py3-none-any.whl

Total release size: 76.1 kB

Release files / outlook_personal_mcp-0.1.0.tar.gz

Download URL outlook_personal_mcp-0.1.0.tar.gz
Size 67.1 kB
Tags Source
SHA-256 checksum
How to use checksums
ebff1c5848cc66c3c4fca2a7c44f51c72b028f27531eec1b79522b5a1a9123ac
BLAKE2b-256 checksum
How to use checksums
ddd1e70c3ff1def518b0410463df54629c5f4ff70cb75430a806386dcc044b54
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 29, 2026.

Transparency log

Release files / outlook_personal_mcp-0.1.0-py3-none-any.whl

Download URL outlook_personal_mcp-0.1.0-py3-none-any.whl
Size 9.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6b392cf5dc2f29c417ac1f4f06e637d6dd7fbf86aacd430542b47c095e252c0f
BLAKE2b-256 checksum
How to use checksums
d176d548eb3261e056e57d2f8127a98c993f5eec35ff7f234d5380537b70eed7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 29, 2026.

Transparency log

Security for outlook-personal-mcp 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for outlook_personal_mcp-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 29, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page