Outlook Email MCP Server

Outlook Email MCP Server

An MCP server that enables reading and managing Microsoft 365 / Outlook emails through Microsoft Graph API, allowing users to list, search, send, draft, and authenticate using device code flow.

Category
Visit Server

README

Outlook Email MCP Server

MCP Server cho Claude Desktop để đọc và quản lý email Microsoft 365 / Outlook qua Microsoft Graph API.

Tính năng

Tool Mô tả
auth_login Bắt đầu đăng nhập — trả về URL và mã xác thực
auth_confirm Hoàn tất đăng nhập sau khi xác thực trong browser
auth_status Kiểm tra trạng thái đăng nhập hiện tại
auth_logout Đăng xuất, xóa token đã lưu
list_emails Liệt kê email theo folder
read_email Đọc nội dung đầy đủ một email
search_emails Tìm kiếm email với nhiều điều kiện
create_draft Tạo email nháp mới
list_drafts Liệt kê tất cả email nháp
update_draft Sửa nội dung email nháp
delete_draft Xóa email nháp
send_draft Gửi email nháp đã tạo
send_email Soạn và gửi email ngay
mark_email_as_read Đánh dấu email đã đọc / chưa đọc

Yêu cầu

  • Python 3.11 trở lên
  • Claude Desktop
  • Tài khoản Microsoft 365 hoặc Outlook.com
  • Quyền truy cập Azure Portal (để đăng ký app)

Hướng dẫn cài đặt

Bước 1: Tải source code

Tải hoặc clone repo này về máy, ví dụ vào thư mục:

C:\Projects\mcp-server\

Ghi nhớ đường dẫn này — bạn sẽ dùng ở Bước 4.


Bước 2: Đăng ký Azure App

Bước này chỉ làm một lần duy nhất. Nếu đã có AZURE_CLIENT_ID, bỏ qua.

  1. Truy cập portal.azure.com và đăng nhập
  2. Tìm "App registrations" → nhấn "New registration"
  3. Điền thông tin:
    • Name: M365 MCP Server (hoặc tên bất kỳ)
    • Supported account types: chọn theo nhu cầu:
      • Accounts in any organizational directory and personal Microsoft accounts — nếu muốn dùng cả tài khoản cá nhân lẫn tổ chức
      • Accounts in this organizational directory only — nếu chỉ dùng trong nội bộ tổ chức
    • Redirect URI: để trống
  4. Nhấn Register
  5. Sau khi tạo xong, copy Application (client) ID — đây là AZURE_CLIENT_ID

Cấp quyền API

  1. Vào tab "API permissions" → "Add a permission" → "Microsoft Graph" → "Delegated permissions"
  2. Tìm và thêm các quyền sau:
    • Mail.Read
    • Mail.ReadWrite
    • Mail.Send
    • User.Read
    • offline_access
  3. Nhấn "Grant admin consent for [tên tổ chức]" nếu bạn là admin (tùy chọn — xem phần Troubleshooting nếu không có quyền này)

Bật Device Code Flow

  1. Vào tab "Authentication"
  2. Kéo xuống phần "Advanced settings"
  3. Bật "Allow public client flows" → Yes
  4. Nhấn Save

Bước 3: Cài đặt dependencies

Mở terminal, điều hướng vào thư mục project:

cd "C:\Projects\mcp-server"

Cách 1: Dùng uv (Khuyên dùng — tự quản lý virtual env)

# Cài uv nếu chưa có
pip install uv

# Cài dependencies
uv sync

Cách 2: Dùng pip thông thường

pip install "mcp[cli]" msal httpx python-dotenv html2text

Bước 4: Tạo file .env

Trong thư mục project, copy file mẫu:

# Windows
copy .env.example .env

# macOS / Linux
cp .env.example .env

Mở file .env và điền AZURE_CLIENT_ID lấy từ Bước 2:

AZURE_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
AZURE_TENANT_ID=common

Giá trị AZURE_TENANT_ID:

Giá trị Dùng khi
common Tài khoản cá nhân (Outlook.com) hoặc hỗn hợp
organizations Chỉ tài khoản tổ chức (work/school)
<tenant-id> Giới hạn đúng một tổ chức cụ thể

Bước 5: Cấu hình Claude Desktop

Mở file cấu hình Claude Desktop:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Thêm vào trong mcpServers (thay đường dẫn bằng đường dẫn thực tế trên máy bạn):

Cách 1: Dùng uv (Khuyên dùng)

{
  "mcpServers": {
    "outlook-email": {
      "command": "uv",
      "args": [
        "--directory",
        "C:\\Projects\\mcp-server",
        "run",
        "server.py"
      ]
    }
  }
}

Cách 2: Dùng python trực tiếp

{
  "mcpServers": {
    "outlook-email": {
      "command": "python",
      "args": [
        "C:\\Projects\\mcp-server\\server.py"
      ]
    }
  }
}

Lưu ý Windows: Dùng \\ thay vì \ trong đường dẫn JSON.

Restart Claude Desktop sau khi lưu file config.


Bước 6: Đăng nhập lần đầu

Sau khi restart Claude Desktop:

  1. Mở cuộc trò chuyện mới

  2. Kiểm tra biểu tượng MCP tools xuất hiện (icon công cụ)

  3. Yêu cầu Claude gọi tool auth_login:

    "Hãy đăng nhập vào Outlook email cho tôi"

  4. Claude sẽ trả về URL và mã xác thực ngay trong chat, ví dụ:

    1. Mở trình duyệt và truy cập: https://login.microsoft.com/device
    2. Nhập mã xác thực: ABCD1234
    3. Đăng nhập bằng tài khoản Microsoft của bạn
    4. Sau khi xác thực xong, gọi auth_confirm
    
  5. Thực hiện theo hướng dẫn trong chat, sau đó yêu cầu Claude gọi auth_confirm:

    "Tôi đã xác thực xong, hãy xác nhận đăng nhập"

  6. Claude thông báo đăng nhập thành công.

Token được lưu tại ~/.outlook-mcp-tokens.json và tự động refresh — có hiệu lực 90 ngày.


Sử dụng

Sau khi đăng nhập, bạn có thể dùng ngôn ngữ tự nhiên:

"Kiểm tra xem tôi đã đăng nhập chưa"
"Liệt kê 10 email mới nhất trong inbox"
"Tìm email từ boss@company.com"
"Tạo email nháp gửi cho colleague@company.com với tiêu đề Meeting tomorrow"
"Gửi email cho client@example.com nội dung cảm ơn hợp tác"
"Đánh dấu email vừa đọc là chưa đọc"

Troubleshooting

"Need admin approval" khi đăng nhập

Tài khoản tổ chức (work/school) yêu cầu admin của tổ chức phải grant consent cho app.

Nếu bạn là admin:

  1. Azure Portal → Enterprise Applications → tìm app → Permissions → Grant admin consent

Nếu bạn không phải admin:

  • Nhờ IT admin của tổ chức vào Azure Portal, tìm app theo tên, và grant consent
  • Hoặc admin nhấn "Have an admin account? Sign in with that account" ngay trên màn hình lỗi

Giới hạn người dùng (tùy chọn cho admin):

  • Azure Portal → Enterprise Applications → tên app → Properties → bật "Assignment required"
  • Sau đó vào Users and groups → chỉ add những người được phép dùng

MCP server không xuất hiện trong Claude Desktop

  • Kiểm tra đường dẫn trong claude_desktop_config.json có đúng không
  • Đảm bảo đã restart Claude Desktop hoàn toàn (thoát hẳn, không chỉ đóng cửa sổ)
  • Chạy thử python server.py trong terminal để kiểm tra lỗi

Lỗi sau khi gọi auth_confirm

  • Đảm bảo bạn đã hoàn thành xác thực trên browser trước khi gọi auth_confirm
  • Mã xác thực hết hạn sau ~15 phút — nếu quá thời gian, gọi lại auth_login để lấy mã mới

Token hết hạn

Token tự động refresh. Nếu bị lỗi xác thực sau 90 ngày, gọi lại auth_login để đăng nhập mới.


Cấu trúc dự án

mcp-server/
├── server.py           # Entry point
├── config.py           # Cấu hình và constants
├── pyproject.toml      # Dependencies
├── .env                # Biến môi trường (KHÔNG commit file này)
├── .env.example        # File mẫu
├── auth/               # Xác thực Microsoft
│   ├── device_flow.py  # MSAL Device Code Flow
│   ├── token_cache.py  # Lưu trữ token
│   ├── tools.py        # MCP tools: login/confirm/status/logout
│   └── __init__.py
├── graph/              # Microsoft Graph API client
│   ├── client.py       # HTTP client, pagination
│   └── __init__.py
├── mail/               # Email operations
│   ├── list_emails.py
│   ├── read_email.py
│   ├── search_emails.py
│   ├── drafts.py       # create/list/update/delete/send draft
│   ├── send_email.py
│   ├── mark_as_read.py
│   ├── folder_utils.py
│   └── __init__.py
└── utils/              # Tiện ích dùng chung
    ├── html_sanitizer.py
    └── formatting.py

Mở rộng

Để thêm tính năng mới (ví dụ Calendar):

  1. Tạo thư mục calendar/ với các file tương tự mail/
  2. Viết calendar/__init__.py với hàm register_calendar_tools(mcp)
  3. Thêm vào server.py:
    from calendar import register_calendar_tools
    register_calendar_tools(mcp)
    

Không cần thay đổi bất kỳ file nào khác.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured