内容
# outlook-mcp-rs
一款单一二进制文件的 [模型上下文协议](https://modelcontextprotocol.io) 服务器,通过驱动 Outlook 原生 Win32 COM 自动化 API,为 AI 助手提供对 **经典 Microsoft Outlook 桌面应用程序** 在 Windows 上的控制权 — 包括电子邮件、日历、任务和笔记。
无需 Python、无需 Node、无需云/Graph API,也无需运行时工具链:您只需编译一个 Windows `.exe` 文件,将您的 MCP 客户端指向它,它就可以与已经在机器上运行的 Outlook 副本进行通信,以您的身份登录。
## 亮点
- **单个自包含二进制文件。** 一个 `.exe` 文件,无需运行时依赖项 — 无需安装,无需解释器,无需托管服务。
- **与本地 Outlook 运行相同。** 它驱动桌面应用程序的原生 COM 自动化,因此它继承了您现有的会话、帐户和共享文件夹权限。无需管理令牌,也无需单独的身份验证步骤 — 如果您可以在 Outlook 中看到它,服务器也可以。
- **五大类 26 种工具** — 电子邮件、日历、附件、任务和笔记(完整列表见下文)。
- **慎重考虑副作用。** 少数真正发送邮件或会议回应的工具是显式的,并且需要选择启用,测试套件的设计确保不会意外发送任何内容(参见[安全性和副作用](#安全性和副作用))。
## 要求
- Windows
- 经典 Outlook 桌面应用程序已安装、正在运行,并登录到邮箱
> **注意:** 此驱动程序使用 *经典* 桌面客户端的 COM 对象模型。“新 Outlook”预览版和网页版 Outlook 不提供此类接口,因此不支持它们。
## 安装
从 [Releases](https://github.com/adamkopelman/outlook-mcp-rs/releases) 下载最新的 `outlook-mcp-rs.exe` 文件。这是一个独立的可执行文件 — 无需安装步骤,也无需添加运行时依赖项。
## 配置您的 MCP 客户端
`outlook-mcp-rs` 通过 stdio 使用 MCP,不接受任何参数,也不需要环境变量。任何支持 MCP 的客户端都可以指向可执行文件的路径。
例如,在 Claude Desktop 的 `claude_desktop_config.json` 中:
```json
{
"mcpServers": {
"outlook": {
"command": "C:\\path\\to\\outlook-mcp-rs.exe"
}
}
}
```
在编辑配置后重启客户端。服务器连接到已经运行的 Outlook 实例,下面列出的 26 种工具变得可用。
## 可用工具
26 种 MCP 工具,按类别分组:
**电子邮件**
- `list_folders` — 列出邮件文件夹(名称、路径、项目数量)
- `list_emails` — 在文件夹中查找电子邮件,附带可选的文本查询(匹配主题、发件人和正文)和筛选器(发件人、类别、日期范围、附件、标记、重要性)
- `get_email` — 获取单个电子邮件的完整正文和附件列表,依据 ID
- `send_email` — 立即发送新电子邮件
- `create_draft` — 创建草稿电子邮件而不发送
- `reply_email` — 回复电子邮件,可选地回复所有收件人,可选地作为草稿
- `update_email` — 修改现有电子邮件:移动到文件夹、标记为已读/未读、标记(跟进/完成/清除)、添加/删除类别、设置重要性
- `delete_email` — 删除电子邮件(移动到已删除项目)
**日历**
- `list_events` — 按日期范围、文本(主题/位置)、类别、显示方式、您的回应或与会者列出/搜索日历事件;查看仅会议或全天会议;或使用 `calendar_of` 打开其他人的共享日历
- `get_event` — 获取单个日历事件的完整详细信息,依据 ID
- `create_event` — 创建日历事件;支持两级与会者、类别、`show_as` 和重复设置,其中 `send` 控制是否实际发送邀请
- `update_event` — 修改现有事件(主题、时间、位置、正文、与会者、提醒、重复设置...);可选地通知与会者
- `respond_to_meeting` — 回应会议邀请(接受、拒绝或暂定)
- `delete_event` — 删除/取消事件(移动到已删除项目);可选地向与会者发送取消通知
- `check_availability` — 检查一个或多个人在时间窗口内的空闲/忙碌状态;返回每个人的每个时间段状态以及所有人空闲的时间窗口
**附件**
- `list_attachments` — 列出电子邮件的附件(文件名和大小)
- `save_attachments` — 将电子邮件的附件保存到本地目录
**任务**
- `list_tasks` — 列出 Outlook 任务(按类别、重要性或文本查询匹配主题或正文进行筛选)
- `create_task` — 创建新的 Outlook 任务
- `update_task` — 修改现有任务:标记为完成/重新打开、主题、正文、到期日期、开始日期、重要性、添加/删除类别、完成百分比、提醒时间
- `delete_task` — 删除任务(移动到已删除项目)
**笔记**
- `list_notes` — 列出 Outlook 笔记(按类别或正文的文本查询进行筛选)
- `get_note` — 获取单个笔记的完整正文,依据 ID
- `create_note` — 创建新的 Outlook 笔记(可选类别、颜色)
- `update_note` — 修改现有笔记:正文、添加/删除类别、颜色
- `delete_note` — 删除笔记(移动到已删除项目)
## 工作原理
服务器直接链接到 Windows COM / OLE 自动化 API(通过 [`windows`](https://crates.io/crates/windows) crate),并驱动与 Outlook VBA 宏相同的 `Outlook.Application` 对象模型。每个请求都针对实时桌面客户端运行,因此它看到的正是您的 Outlook 会话已经访问的文件夹、帐户和共享日历 — 除非您的 MCP 客户端选择发送到上游,否则不会有邮箱数据离开机器。
## 从源代码构建
在 Windows 上使用 [Rust 工具链](https://rustup.rs)(2024 版)构建需要:
```
cargo build --release
```
二进制文件生成在 `target/release/outlook-mcp-rs.exe`。
## 安全性和副作用
大多数工具都是只读或可逆的 — 删除会将项目移动到已删除项目,而不是销毁它们。少数工具具有实际的、向外的效果,并且在工具调用中显式:`send_email` 发送邮件;`respond_to_meeting` 通知组织者;`create_event`、`update_event` 和 `delete_event` 在发送/更新/取消标志设置时通知与会者。 [`TESTING.md`](TESTING.md) 详细说明了哪些行为被自动测试覆盖,哪些被手动验证,因为它们会发送真实邮件。
## 开发
参见 [`TESTING.md`](TESTING.md) 了解如何运行单元测试套件和本地实时 Outlook 系统测试。
## 许可证
MIT — 参见 [`LICENSE`](LICENSE)。