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 登录
两种方法的操作步骤如下:
- 打开一个无头浏览器,访问你的 OWA URL。
- 提交凭证。
- 等待 2FA 批准(最长 90 秒)。
- 将加密的会话 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.py 和 exchange_mcp/auth.py)是为特定的 2FA 流程(移动推送批准)编写的。如果你的 OWA 服务器使用不同的 2FA 方法或根本不使用 2FA,你需要修改或删除登录逻辑以适应你的环境。
🔒 安全说明
- 凭证和会话 cookie 使用 AES - 256 - Fernet 加密。
- 主密码从不存储。
- 使用 PBKDF2 进行 480,000 次迭代的密钥推导。
- 凭证和 cookie 文件的权限为
0600。 - 仅在内存中解密 cookie,从不以明文形式写入磁盘(通过 MCP 工具)。
- 会话 cookie 仅传输到你的 OWA 服务器。
微信扫一扫