返回 MCP 目录
public公开dns本地运行

owa-exchange-mcp

OWA Exchange MCP服务器为任何Microsoft Exchange/OWA部署提供MCP协议支持,使LLM代理能够通过30个工具访问电子邮件、日历、目录搜索、文件夹、可用性和会议分析功能。支持本地或托管Exchange服务器,包含浏览器自动化登录、会话管理及加密凭证存储。

article

README

🚀 OWA Exchange MCP 服务器

OWA Exchange MCP 服务器是一个适用于任何 Microsoft Exchange / OWA(Outlook Web Access)部署的 MCP(模型上下文协议)服务器。它通过 30 个工具,让大语言模型(LLM)代理能够访问电子邮件、日历、目录搜索、文件夹、可用性和会议分析等功能。该服务器可与任何暴露 OWA 的本地或托管 Exchange 服务器配合使用。

🚀 快速开始

# 复制并使用你的 OWA URL 编辑 MCP 配置
cp .mcp.json.example .mcp.json

# 一次性操作:设置加密凭证
python3 login.py --setup

# 登录(打开无头浏览器,需要进行 2FA 验证)
python3 login.py

# 安装 MCP 服务器
pip install -e .

📦 安装指南

将其添加到你的 MCP 客户端配置中。将 https://owa.example.com 替换为你的 OWA URL。

Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "exchange": {
      "command": "uvx",
      "args": ["exchange-mcp-server"],
      "env": {
        "EXCHANGE_OWA_URL": "https://owa.example.com"
      }
    }
  }
}

Cursor.cursor/mcp.json):

{
  "mcpServers": {
    "exchange": {
      "command": "uvx",
      "args": ["exchange-mcp-server"],
      "env": {
        "EXCHANGE_OWA_URL": "https://owa.example.com"
      }
    }
  }
}

Claude Code.mcp.json):

{
  "mcpServers": {
    "exchange": {
      "command": "uvx",
      "args": ["exchange-mcp-server"],
      "env": {
        "EXCHANGE_OWA_URL": "https://owa.example.com"
      }
    }
  }
}

📚 详细文档

配置

| 属性 | 是否必需 | 详情 | |------|------|------| | EXCHANGE_OWA_URL | 是 | 你的 OWA 实例的基础 URL | | EXCHANGE_COOKIE_FILE | 否 | 会话 cookie 文件的路径(默认:session-cookies.txt) |

登录

选项 A:通过 MCP 工具(推荐)

login 工具可在 MCP 会话中处理凭证设置和身份验证,无需单独的终端。

首次使用(设置 + 登录):

login(master_password="...", username="user@example.com", password="...")

后续登录(解密存储的凭证):

login(master_password="...")

选项 B:通过命令行界面(CLI)

python3 login.py --setup   # 首次使用:保存加密凭证
python3 login.py            # 使用 2FA 登录

两种方法的操作步骤如下:

  1. 打开一个无头浏览器,访问你的 OWA URL。
  2. 提交凭证。
  3. 等待 2FA 批准(最长 90 秒)。
  4. 将加密的会话 cookie 保存到 session-cookies.txt

凭证和会话 cookie 在静态存储时使用 AES - 256(PBKDF2 密钥推导,480k 迭代)进行加密。

工具(30 个)

电子邮件(10 个)

| 工具 | 描述 | |------|------| | get_emails | 从文件夹中列出符合过滤条件的电子邮件 | | get_email | 根据 ID 获取完整的电子邮件内容 | | send_email | 发送新电子邮件 | | reply_email | 回复电子邮件 | | forward_email | 转发电子邮件 | | delete_email | 删除电子邮件 | | move_email | 将电子邮件移动到另一个文件夹 | | mark_email_read | 将电子邮件标记为已读/未读 | | download_attachments | 从电子邮件中下载文件附件 | | get_email_links | 从电子邮件正文中提取超链接 |

日历(7 个)

| 工具 | 描述 | |------|------| | get_calendar_events | 获取指定日期范围内的事件(支持重复事件扩展) | | create_meeting | 创建带有参会者的会议 | | update_meeting | 更新现有会议 | | cancel_meeting | 取消会议并通知参会者 | | respond_to_meeting | 接受、拒绝或暂定接受会议邀请 | | download_event_attachments | 从日历事件中下载文件附件 | | get_event_links | 从事件描述中提取超链接 |

目录(1 个)

| 工具 | 描述 | |------|------| | find_person | 在 Active Directory 中搜索人员 |

文件夹(7 个)

| 工具 | 描述 | |------|------| | get_folders | 列出带有未读邮件数量的邮件文件夹 | | create_folder | 创建新的邮件文件夹 | | rename_folder | 重命名现有文件夹 | | empty_folder | 清空文件夹中的所有项目 | | delete_folder | 删除邮件文件夹 | | move_folder | 将文件夹移动到不同的父文件夹 | | check_session | 检查 OWA 会话是否已通过身份验证 |

可用性(2 个)

| 工具 | 描述 | |------|------| | find_free_time | 在你的日历中查找空闲时段 | | find_meeting_time | 为多个人查找共同的空闲时段 |

分析(2 个)

| 工具 | 描述 | |------|------| | get_meeting_stats | 多人的会议数量统计 | | get_meeting_contacts | 联系矩阵 — 你与谁会面最多 |

身份验证(1 个)

| 工具 | 描述 | |------|------| | login | 对 OWA 进行身份验证(凭证设置 + 2FA 登录) |

文件结构

login.py                  # 基于浏览器的 2FA 登录(独立 CLI)
exchange_mcp/
  server.py               # FastMCP 服务器入口点
  owa_client.py           # OWA HTTP 客户端
  auth.py                 # 异步登录逻辑(MCP 工具共享)
  tools/
    email.py              # 电子邮件工具
    calendar.py           # 日历工具
    people.py             # 目录搜索
    folders.py            # 文件夹管理和会话检查
    availability.py       # 空闲时间/会议时间
    analytics.py          # 会议统计和联系人
    auth.py               # 登录工具
pyproject.toml            # 包配置

⚠️ 重要提示

每个 Exchange / OWA 部署都有自己的身份验证设置 — 有些需要 2FA(推送通知、TOTP、SMS),而其他的则使用单因素登录或 SSO。本项目中的登录逻辑(login.pyexchange_mcp/auth.py)是为特定的 2FA 流程(移动推送批准)编写的。如果你的 OWA 服务器使用不同的 2FA 方法或根本不使用 2FA,你需要修改或删除登录逻辑以适应你的环境。

🔒 安全说明

  • 凭证和会话 cookie 使用 AES - 256 - Fernet 加密。
  • 主密码从不存储。
  • 使用 PBKDF2 进行 480,000 次迭代的密钥推导。
  • 凭证和 cookie 文件的权限为 0600
  • 仅在内存中解密 cookie,从不以明文形式写入磁盘(通过 MCP 工具)。
  • 会话 cookie 仅传输到你的 OWA 服务器。
help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端