Microsoft 365邮件日历管理服务

通过Microsoft Graph API提供对Microsoft 365邮件(Outlook)和日历的访问,支持邮件读取、发送、搜索以及日历事件管理。

  • by ronaldzuniga
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 ronaldzuniga/ms365-mcp-server

使用说明

微软365 MCP服务器

一个MCP服务器,允许Claude Desktop和Claude Code通过Microsoft Graph API访问您的Microsoft 365电子邮件(Outlook)和日历。

快速入门概述

设置此MCP服务器需要两个主要步骤:

  1. Azure AD安装程序 (5-10分钟,一次性):在Azure中创建应用程序注册以获取凭据
  2. 本地安装 (5分钟):安装服务器并配置Claude Desktop或Claude Code

下面详细介绍了这两种方法,并附有分步说明。

包含的工具

工具 说明
ms365_list_emails 列出来自任何文件夹(收件箱、已发送等)的电子邮件
ms365_read_email 按ID阅读完整的电子邮件内容
ms365_search_emails 按关键字搜索电子邮件
ms365_send_email 发送电子邮件
ms365_create_draft 创建电子邮件草稿而不发送
ms365_reply_email 回复电子邮件
ms365_list_mail_folders 列出所有具有计数的邮件文件夹
ms365_list_events 列出日期范围内的日历事件
ms365_get_event 获取完整的活动详细信息
ms365_list_calendars 列出所有日历
ms365_find_free_time 查看人们的忙/闲
ms365_get_profile 获取您的Microsoft 365个人资料

Azure AD安装程序(首先需要)

在使用此MCP服务器之前,您需要创建Azure AD应用程序注册以获取您的 MS_CLIENT_ID 和 MS_TENANT_ID这只需要做一次。

步骤1:创建应用程序注册

  1. 转到Azure门户

  2. 访问应用程序注册

    • 在顶部搜索栏中,键入“应用程序注册”
    • 点击 应用程序注册 从搜索结果中
  3. 创建新注册

    • 点击 “+新注册” 顶部的按钮
    • 填写登记表:
      • 名字: MS365 MCP Server (或您喜欢的任何名称)
      • 支持的帐户类型:选择 “仅此组织目录中的帐户(单个租户)”
      • 重定向URI:
        • 选择 “移动和桌面应用程序” 从下拉列表中
        • 输入: http://localhost
    • 点击 “注册” 按钮
  4. 复制您的凭据

    • 您将被带到应用程序的概述页面
    • 复制并保存这两个值(稍后您将需要它们):
      • 应用程序(客户端)ID → 这是你的 MS_CLIENT_ID
      • 目录(租户)ID → 这是你的 MS_TENANT_ID
    • 请将这些值放在手边——您将在下面的设置步骤中使用它们

第2步:设置API权限

  1. 导航到API权限

    • 在左侧边栏中,单击 “API权限”
  2. 添加Microsoft图形权限

    • 点击 “+添加权限”
    • 选择 “Microsoft Graph”
    • 选择 “委托权限”
  3. 添加所需权限

    • 搜索并添加以下每个权限:
      • ✅ 邮件。阅读 -阅读您的电子邮件
      • ✅ 邮件。读写 -创建和管理电子邮件草稿
      • ✅ 邮件。发送 -从您的帐户发送电子邮件
      • ✅ 日历。阅读 -阅读您的日历
      • ✅ 用户。阅读 -读取基本配置文件信息
    • 点击 “添加权限” 完成后
  4. 授予管理员同意

    • 返回API权限页,查找 “授予[您的组织]管理员同意” 按钮
    • 如果你是管理员:单击按钮并确认
    • 如果你不是管理员:请您的IT管理员同意
    • 您应该在“状态”列下看到所有权限的绿色复选标记

步骤3:验证您的设置

当您具备以下条件时,您的Azure配置即告完成:

  • ✅ 已复制应用程序(客户端)ID
  • ✅ 目录(租户)ID已复制
  • ✅ 已添加和授予的所有五个权限(绿色复选标记)

现在,您已准备好继续进行本地安装!


本地安装

先决条件

  • Python 3.10+
  • 已安装克劳德桌面或克劳德代码CLI
  • MS_CLIENT_ID 和 MS_tennal_ID 从上面的Azure设置

步骤1:克隆或下载项目

复制 ms365-mcp-server 将文件夹移动到计算机上的永久位置:

# Example: put it in your home directory
cp -r ms365-mcp-server ~/ms365-mcp-server
cd ~/ms365-mcp-server

步骤2:创建虚拟环境并安装依赖项

cd ~/ms365-mcp-server
python3 -m venv .venv
source .venv/bin/activate       # macOS/Linux
# .venv\Scripts\activate        # Windows

pip install -r requirements.txt

步骤3:首次身份验证

手动运行服务器一次以完成交互式Microsoft登录:

cd ~/ms365-mcp-server
source .venv/bin/activate

export MS_CLIENT_ID="your-client-id-here"
export MS_TENANT_ID="your-tenant-id-here"

python server.py

这将打开您的浏览器进行Microsoft登录。登录并授予权限。 一旦完成,a token_cache.json 文件已创建——该文件存储您的刷新令牌,因此您不需要再次登录(令牌自动续订约90天)。

按 Ctrl+C 登录成功后停止服务器。

步骤4:配置Claude桌面

打开Claude Desktop的配置文件:

重要:使用 MS_CLIENT_ID 和 MS_TENANT_ID 您是从上面的Azure设置中复制的。

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 视窗: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json

添加MCP服务器配置。将路径和凭据替换为您自己的:

{
  "mcpServers": {
    "ms365": {
      "command": "/Users/YOURUSER/ms365-mcp-server/.venv/bin/python",
      "args": [
        "/Users/YOURUSER/ms365-mcp-server/server.py"
      ],
      "env": {
        "MS_CLIENT_ID": "your-client-id-here",
        "MS_TENANT_ID": "your-tenant-id-here"
      }
    }
  }
}

重要提示: 在虚拟环境中使用Python二进制文件的完整路径,而不仅仅是 python3.

找到你的Python路径:

# macOS/Linux
source ~/ms365-mcp-server/.venv/bin/activate
which python
# Outputs something like: /Users/youruser/ms365-mcp-server/.venv/bin/python

# Windows
# Usually: C:\Users\YOURUSER\ms365-mcp-server\.venv\Scripts\python.exe

步骤5:重新启动克劳德桌面

完全退出Claude Desktop并重新打开它。您应该看到🔌 图标或开始对话时可用的MCP工具。


Claude代码(CLI)的设置

如果您使用的是Claude Code(命令行工具),请按照以下步骤操作:

先决条件

  • Python 3.10+
  • 已安装Claude Code CLI
  • Azure AD应用程序注册(MS_CLIENT_ID和MS_TENANT_ID)

步骤1-3:与克劳德桌面相同

按照上述Claude Desktop设置中的步骤1-3进行操作(克隆、创建venv、首次身份验证)。

步骤4:配置克劳德代码MCP设置

打开或创建Claude Code MCP配置文件:

重要:使用 MS_CLIENT_ID 和 MS_TENANT_ID 您是从上面的Azure设置中复制的。

  • macOS/Linux: ~/.claude/mcp_settings.json
  • 视窗: %USERPROFILE%\.claude\mcp_settings.json

添加MCP服务器配置:

{
  "mcpServers": {
    "ms365": {
      "command": "/Users/YOURUSER/ms365_mcp_server/.venv/bin/python",
      "args": [
        "/Users/YOURUSER/ms365_mcp_server/server.py"
      ],
      "env": {
        "MS_CLIENT_ID": "your-client-id-here",
        "MS_TENANT_ID": "your-tenant-id-here"
      }
    }
  }
}

重要提示: 在虚拟环境中使用Python二进制文件的完整路径。

步骤5:测试连接

启动Claude Code并验证MCP服务器是否已加载:

claude-code

ms365工具应该在您的会话中可用。


使用示例

配置后,只需与Claude Desktop自然聊天:

  • “阅读我最新的电子邮件”
  • “在我的电子邮件中搜索马里奥关于密尔沃基工具的消息”
  • “这周我的日程表上有什么?”
  • “找我和你之间的空闲时间mario@qualitara.com明天”
  • “发送电子邮件至john@example.com主题为“会议记录”。.."
  • “回复最后一封电子邮件,说我下午3点会到”

故障排除

“身份验证已过期”错误

删除 token_cache.json 并运行 python server.py 再次进行重新认证。

工具未显示在Claude Desktop中

  1. 检查配置文件路径是否正确
  2. 确保Python路径指向venv的Python(不是系统Python)
  3. 完全重新启动Claude Desktop(退出,而不仅仅是关闭窗口)
  4. 检查Claude Desktop日志是否有错误

Microsoft Graph的权限错误

返回到Azure AD应用程序注册→ API权限并确保 Mail.Read, Mail.ReadWrite, Mail.Send, Calendars.Read,以及 User.Read 均经管理员同意。

令牌缓存位置

这 token_cache.json 与保存在同一目录中 server.py。请确保该进程具有对该文件夹的写入权限。


文件结构

ms365-mcp-server/
├── server.py           # Main MCP server with all tools
├── auth.py             # MSAL authentication (token acquire + cache)
├── graph_client.py     # Microsoft Graph API client
├── requirements.txt    # Python dependencies
├── token_cache.json    # Auto-generated after first login (DO NOT COMMIT)
└── README.md           # This file

安全说明

  • 不需要客户机密。 这使用了SOAP PublicClientApplication 使用交互式身份验证——微软推荐的桌面/CLI应用程序方法。
  • token_cache.json 包含您的刷新令牌。把它当作密码。不要将其提交给版本控制。
  • 刷新令牌每次使用会自动更新约90天。