Skip to main content
Glama
outlook-mcp-server

outlook-mcp-server

by dhtim135

outlook-mcp-server

A lightweight Model Context Protocol (MCP) server for personal Microsoft Outlook / Hotmail accounts. It connects Claude (or any MCP-compatible AI) to your inbox via the Microsoft Graph API, using OAuth 2.0 device-code flow — no service account or admin consent required.

Tools

Tool

Parameters

Description

search_emails

query, max_results

Search your inbox using KQL (Keyword Query Language). Supports filtering by sender, subject, date, attachment presence, and more.

read_email

message_id

Fetch the full body (plain text + HTML) and headers of a specific email.

list_attachments

message_id

List all attachments on an email, including their IDs, names, sizes, and content types.

download_attachment

message_id, attachment_id, save_path

Download an attachment and save it to a local file path.

mark_as_read

message_id, read

Mark an email as read or unread.

move_email

message_id, folder

Move an email to a folder by well-known name (e.g. inbox, deleteditems, archive) or folder ID.

These tools compose naturally for email-automation workflows — for example: search by sender → read body → download attachments → mark read → move to archive.

Related MCP server: Outlook Email MCP Server

Setup

1. Azure App Registration (one-time)

Personal Microsoft accounts still require an Azure App Registration to call Graph.

  1. Go to https://portal.azure.com → Microsoft Entra ID → App registrations → New registration.

  2. Name: outlook-mcp-server (or anything).

  3. Supported account types: choose "Personal Microsoft accounts only".

  4. Redirect URI: leave blank for now.

  5. After creation, copy the Application (client) ID — this is your OUTLOOK_MCP_CLIENT_ID.

  6. Open Authentication → enable "Allow public client flows" = Yes → Save.

  7. Open API permissions → Add a permission → Microsoft Graph → Delegated permissions → check Mail.ReadWrite → Add. (No admin consent needed for personal accounts.)

2. Install

git clone https://github.com/dhtim135/outlook-mcp-server
cd outlook-mcp-server
uv sync

3. Authenticate (one-time)

export OUTLOOK_MCP_CLIENT_ID="<your-client-id>"
uv run python login.py

Follow the device code prompt — visit the URL in any browser, enter the code, sign in with your Hotmail/Outlook.com account, and approve the Mail.ReadWrite permission.

The token is cached at ~/.config/outlook-mcp/token-cache.json (mode 0600). Refresh tokens are rotated automatically as long as the server is used at least every ~90 days.

4. Register with Claude Code

claude mcp add outlook \
  --env OUTLOOK_MCP_CLIENT_ID="<your-client-id>" \
  -- uv --directory /path/to/outlook-mcp-server run python server.py

Or add manually to your MCP config:

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

KQL search examples

from:amazon.com
subject:invoice
from:receipts@uber.com received>=2026-01-01
hasattachment:yes from:doordash.com

Multiple terms are AND-ed. Quote phrases with spaces.

Re-authentication

If you see Token refresh failed, just re-run uv run python login.py.

Available Tools

6 tools
download_attachmentB

Download an attachment to save_path (absolute path; parent dirs auto-created).

Returns {path, bytes_written, name}.

Inputs: message_id (required), attachment_id (required), save_path (required).

list_attachmentsB

List attachments on a message. Returns list of {id, name, contentType, size}.

Inputs: message_id (required). Returns: result

mark_as_readA

Mark a message as read (default) or unread. Returns {id, isRead}.

Inputs: message_id (required), read.

move_emailA

Move a message to a folder.

folder = well-known name (archive, inbox, deleteditems, junkemail, sentitems, drafts) or a folder ID returned by another Graph call. Returns {id, parentFolderId}.

Inputs: message_id (required), folder (required).

read_emailB

Read full body + headers of one message.

Returns {id, subject, from, to, received, body, body_type, hasAttachments}.

Inputs: message_id (required).

search_emailsA

Search emails using Graph KQL syntax.

Examples: 'from:amazon.com', 'subject:invoice', 'from:receipts@x.com received>=2026-01-01'.
Returns list of {id, subject, from, received, snippet, hasAttachments, isRead}.

Inputs: query (required), max_results. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.8/5.0

    Scored across 6 tools

    Disambiguation5/5

    Each tool targets a distinct operation (downloading, listing, marking, moving, reading, searching) with no overlap. The resource (email or attachment) and action are clearly separated.

    Naming Consistency5/5

    All tools follow a consistent verb_noun pattern in snake_case (download_attachment, list_attachments, etc.), making it predictable and easy to navigate.

    Tool Count5/5

    6 tools is a well-scoped number for an email client MCP server. It covers the essential operations without being bloated or too sparse.

    Completeness4/5

    The set covers reading, searching, moving, marking read, and attachment handling. Missing send/compose and delete operations, which are common but not critical for a read-focused server.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      Lightweight MCP server that enables AI agents to manage Microsoft Outlook email, calendar, and files using PKCE authentication with only a Client ID.
      46
      MIT
    • F
      license
      A
      quality
      C
      maintenance
      Local MCP server for personal Outlook.com/Hotmail/Live accounts, enabling email triage, folder management, bulk operations, and newsletter unsubscribe via Microsoft Graph.
      21
      1
      -
    • A
      license
      A
      quality
      D
      maintenance
      A local stdio MCP server that enables reading, sending, and searching emails, as well as listing calendar events via Microsoft Graph API, using device-code authentication.
      10
      86 npm
      MIT