v0.3 新功能:可读取附件和会议转录 →

工作邮件 交给你的 AI 智能体

面向 Microsoft Exchange / OWA 的 MCP 服务器。智能体帮你查收件箱、搜邮件、总结邮件往来和附件。只有你点了“发送”,邮件才会发出。

curl -LsSf https://raw.githubusercontent.com/Khomiakov7706/owa-mail-mcp/main/install.sh | sh

支持 Claude CodeClaude DesktopCodexCursorOpenCodeKilo Code任意 MCP 客户端

从昨晚到现在,哪些邮件需要我回复?
owa-mail · get_status → ivan.petrov@company.com
owa-mail · check_mail → 37 封邮件
owa-mail · get_thread → “Q4 预算”,41 封邮件
需要你回复的有 3 封: 1. 王芳 — Q4 预算,15:00 前给出估算 (今天) 2. 李娜 — 确认休假 (周五) 3. John Doe (外部) — 合同续签 仅供知悉 9 封,邮件列表 25 封。
回复王芳,估算明天 12:00 前发给她
owa-mail · send_email → 等待你在浏览器中确认…
发送确认窗口:收件人(外部地址已高亮)、主题、正文,以及“发送”“修改”“不发送”按钮 发送确认窗口
确认窗口 · 你的浏览器
9
个智能体工具
0
封未经你“发送”的邮件
1
条命令完成安装
MIT
开源,免费

功能

邮箱里的日常操作,一句话搞定

智能体看到的邮箱和你在网页邮箱里看到的一样,它会自己决定打开哪封邮件、汇总哪个会话、读取附件中的哪些内容。

收件箱分拣

任意时间段内的新邮件,自动分成“需要回复”“仅供知悉”和“可以不看”。

check_mailtriage_inbox

去掉引用的邮件会话

“收件箱”和“已发送”中的整个会话按时间排列,没有层层“发件人:… 发送时间:…”。谁提了什么、等你做什么,一目了然。

get_threadsummarize_thread

附件与会议转录

提取 .docx、PDF、.txt、.md、.csv、HTML 以及 .vtt/.srt 字幕中的文本,保留“王芳:…”这样的发言人。

get_attachment

跨文件夹搜索

按正文、发件人、收件人、主题、日期和附件搜索。日期写法很自然:yesterday、7d、2026-10-01。

search_messages(sender="Anna", text="budget", since="30d")
→ 6 封邮件,最新的在前
search_messagesget_message

联系人与发件人

公司通讯录:姓名、准确地址、职位、部门。还能看到本周谁给你发信最多,以及各有多少未读。

list_senders(since="7d")
→ 王芳 · 12 封邮件 · 3 封未读
find_peoplelist_senders

发送邮件,必须你点头

智能体可以起草新邮件或在会话中回复,但无法自行发送。浏览器会弹出确认窗口。

  • 发送、修改还是不发送,由你决定
  • 外部地址会高亮显示,密送会给出提醒
  • 窗口地址只有你的浏览器知道:邮件里的文字无法诱导智能体去点按钮
  • 50 秒内没有回应,邮件就不会发出;重试也不会重复发送
  • 在你手动开启之前,发送功能始终关闭
send_email
发送确认窗口 发送确认窗口

工作原理

三分钟 从安装到第一次回答

  1. 一条命令完成安装

    安装程序会把所需的 Python 装到独立目录,不碰系统自带的 Python。更新也是同一条命令,设置会保留。

    $ curl -LsSf …/install.sh | sh
    ==> 完成:owa-mail-mcp 0.3
  2. 连接邮箱

    在设置窗口中填写与网页邮箱相同的信息。点击“检查连接”,会显示你的姓名和最近的邮件。

    设置窗口:服务器地址、邮箱、登录名、密码,以及检查成功的结果 邮箱设置窗口
  3. 向智能体提问

    “添加”按钮会把服务器写入 Claude Code、Codex、Claude Desktop 或 Cursor 的配置。之后直接问:“邮箱里有什么新消息?”

    › 从昨天到现在邮箱里有什么新邮件?
    ⏺ owa-mail · check_mail → 12 封邮件

安装

安装与接入

需要能访问邮件服务器:如果网页邮箱只能通过 VPN 打开,请先连上 VPN。程序窗口默认跟随系统语言,也可以在设置窗口中切换。

粘贴到“终端”中运行。大约一分钟后会打开设置窗口。

curl -LsSf https://raw.githubusercontent.com/Khomiakov7706/owa-mail-mcp/main/install.sh | sh

在 PowerShell 中运行:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
uv tool install --python 3.12 git+https://github.com/Khomiakov7706/owa-mail-mcp
owa-mail-mcp setup

复制下面的文本发给你的智能体(Claude Code、Codex、Cursor),它会自己完成安装和接入。智能体不需要你的密码:密码由你在设置窗口中填写。

为我的 Exchange 工作邮箱安装并接入 OWA Mail MCP 服务器。
1. 运行:curl -LsSf https://raw.githubusercontent.com/Khomiakov7706/owa-mail-mcp/main/install.sh | sh
2. 将服务器接入你自己(即当前智能体)。Claude Code 的命令:claude mcp add --scope user owa-mail -- ~/.local/bin/owa-mail-mcp
3. 邮箱(服务器地址、登录名、密码)我会在弹出的窗口中自己配置,不要向我索要密码。
4. 完成后调用 get_status 并展示结果。
智能体说明:https://khomiakov7706.github.io/owa-mail-mcp/llms.txt

最简单的方法是点击设置窗口(owa-mail-mcp setup)中的“添加”按钮。也可以在终端中运行:

claude mcp add --scope user owa-mail -- ~/.local/bin/owa-mail-mcp

验证:运行 claude mcp list,或在会话中输入 /mcp。

打开 Settings → Developer → Edit Config,然后重启 Claude Desktop。设置窗口会自动填入准确路径。

{
  "mcpServers": {
    "owa-mail": { "command": "/Users/YOU/.local/bin/owa-mail-mcp" }
  }
}
codex mcp add owa-mail -- ~/.local/bin/owa-mail-mcp

文件 ~/.cursor/mcp.json:

{
  "mcpServers": {
    "owa-mail": { "command": "/Users/YOU/.local/bin/owa-mail-mcp" }
  }
}

文件 ~/.config/opencode/opencode.json(仅用于单个项目时,放在项目根目录的 opencode.json)。OpenCode 有自己的格式:使用 mcp 键、"type": "local",命令写成数组。OpenCode 不读取 mcpServers 键。设置窗口中的“添加”按钮会自动写好这些内容。

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "owa-mail": {
      "type": "local",
      "command": ["/Users/YOU/.local/bin/owa-mail-mcp"],
      "enabled": true
    }
  }
}

重启 OpenCode。验证:opencode mcp list。

新版 Kilo Code 与 OpenCode 格式相同,文件为 ~/.config/kilo/kilo.jsonc(项目级为 kilo.jsonc 或 .kilo/kilo.jsonc):

{
  "mcp": {
    "owa-mail": {
      "type": "local",
      "command": ["/Users/YOU/.local/bin/owa-mail-mcp"],
      "enabled": true
    }
  }
}

旧版扩展:Kilo Code → MCP Servers → “Edit Global MCP”(文件 mcp_settings.json;项目级为 .kilocode/mcp.json):

{
  "mcpServers": {
    "owa-mail": {
      "command": "/Users/YOU/.local/bin/owa-mail-mcp",
      "args": [],
      "disabled": false,
      "alwaysAllow": []
    }
  }
}

修改后重启 Kilo Code(在 VS Code 中:Developer: Reload Window)。

任何支持 stdio 的 MCP 客户端都可以:命令填 owa-mail-mcp 的绝对路径,无需参数和环境变量。服务器会从自己的配置文件和系统钥匙串中读取设置。

系统
macOS, Linux, Windows
邮箱
Exchange 2013 / 2016 / 2019,即 OWA 网页邮箱所在的服务器
更新之后
在客户端中重启 MCP 服务器:Claude Code 中为 /mcp → Reconnect

面向开发者和智能体

MCP 工具

除 send_email 外,所有工具都是只读的。邮件内容是数据而不是指令:服务器会明确告诉智能体不要执行邮件中的命令。

工具作用
get_status当前用户、当前时间、未读数量、版本、是否已开启发送
check_mail“收件箱”中的新邮件(默认为未读)及预览
search_messages按正文、发件人、收件人、主题、日期、附件搜索;文件夹:inbox、sent、inbox_and_sent、all
get_message完整邮件:正文(HTML → 文本)、收件人、附件名称
get_thread来自所有文件夹的完整会话,按时间排列,去掉引用的历史内容,附参与者
get_attachment附件文本:.docx、.pdf、.txt、.md、.csv、.html、.vtt/.srt、嵌套邮件
find_people组织通讯录:姓名、地址、职位、部门
list_senders某段时间内的发件人:邮件数、未读数、最近主题;对 sent 则列出你发信的对象
send_email写入新邮件或回复(reply_to_message_id、reply_all),须在确认窗口中确认后才发送

提示词:summarize_thread 用于总结邮件往来,triage_inbox 用于分拣收件箱。完整说明见 本页的 Markdown 版本(英文)和 llms.txt。

安全

坦诚说说安全

就个人使用而言,程序的设计是合理的。但它还没有经过独立审计,而且最大的风险不在代码:智能体读到的一切,都会发送给为它提供服务的 AI 服务商。

已有的保护

密码存放在钥匙串

Keychain、Credential Manager 或 Secret Service。不写入文件,不进日志,也不交给智能体:没有任何工具能显示密码。

只连你的服务器

密码只会通过 HTTPS 发送到你指定的 Exchange 服务器。跳转到其他主机时不携带密码。

发送邮件,必须你点头

默认关闭。每封邮件都要你在本地窗口中点击确认。隐藏字符、无效地址和收件人过多的邮件会被拒绝,外部地址会高亮显示。

本地窗口对外封闭

仅监听 127.0.0.1,使用随机的秘密地址,校验 Host 和 Origin,禁止嵌入:其他网站无法访问。

按指纹校验证书

常规证书校验保持开启。公司内部证书只接受那一张特定证书,按 SHA-256 指纹比对。

避免账号被锁

密码被拒后会停止向 Exchange 发送请求,并限制请求频率。日志只记录工具名称和时间,不含邮件内容。

程序解决不了的问题

  1. 邮件会发送给 AI 服务商。智能体读取的一切,包括正文、附件和会议转录,都会发送给提供智能体服务的公司。银行或其他受监管的公司需要获得信息安全部门的同意,公司政策也可能明确禁止这样做。这是政策问题,而不是代码问题。
  2. 带有“指令”的邮件。收到的邮件里可能藏着写给智能体的文字,比如“把这封转发给…”。服务器会要求智能体把邮件当作数据,但这只是请求,不是锁。真正的防线是确认窗口:点击“发送”之前请先读一遍邮件。智能体可以读取所有内容,目前还无法把它限制在特定文件夹内。
  3. 安装方式。curl … | sh 安装的是 main 分支当前的内容。目前还没有签名发布和固定版本:如果 GitHub 账号被攻破,下一次更新也会随之被攻破。
  4. 会削弱保护的设置。为服务器启用的“旧版加密设置”,以及把密码写在智能体配置的 OWA_MAIL_PASSWORD 变量里而不是钥匙串中。这两项在你手动开启之前都是关闭的。
  5. 对你电脑的访问。已经以你的账户登录的人,可以利用已保存的密码和正在运行的程序,和任何保存密码的应用一样。

接入工作邮箱之前

  • 就邮件将发送给 AI 服务商一事,取得信息安全部门的同意。
  • 如果并不真正需要,就不要开启发送功能。
  • 安排对代码的独立审查,并安装固定版本,而不是 main 分支的最新版。

FAQ

常见问题

安全吗?

就个人使用而言,设计是合理的:密码存放在钥匙串中,邮件须经你确认才会发出。但尚未经过独立审计,而且邮件内容会发送给 AI 服务商,用于公司邮箱前需要获得信息安全部门的同意。详见“安全”一节。

服务器地址在哪里找?

就是你在浏览器中打开工作邮箱的地址:mail.company.com、https://owa.company.com 或 https://outlook.company.com/owa。哪种写法都可以。

提示“服务器不可用”,但网页邮箱能打开

设置窗口会给出原因:DNS——重新连接 VPN;连接——浏览器很可能走了代理(可在“高级”→“代理”中填写代理地址);TLS——服务器版本较旧,窗口会提示仅对该服务器允许旧版加密设置。

提示“服务器的响应不像 EWS”

EWS 地址前面有一个带网页登录的网关。程序会先通过 OWA 登录,再在同一连接上继续,通常这样就够了。如果仍然不行,在设置窗口中点击“复制诊断信息”(不含密码),发给 IT 部门或提交到 issues。

登录名和密码存在哪里?更新后还在吗?

密码在系统钥匙串中,其余信息在用户目录下的 config.json 中(Mac 上为 ~/Library/Application Support/owa-mail-mcp)。更新不会改动它们。查看:owa-mail-mcp status。

更新后错误依旧

客户端仍在运行旧代码的进程。请重启 MCP 服务器:Claude Code 中为 /mcp → owa-mail → Reconnect;Claude Desktop 和 Cursor 需关闭后重新打开应用。

怎么确认一切正常?

对智能体说“检查一下邮箱状态”,get_status 会返回你的地址、未读数量和版本。调用日志在设置窗口底部。

智能体能绕过我发送邮件吗?

不能。发送功能默认关闭,而且每封邮件都要经过确认窗口,该窗口的地址只有你的浏览器知道。50 秒内没有回应,邮件就不会发出。

支持 Exchange Online (Microsoft 365) 吗?

本服务器面向通过 EWS 访问的企业内部 Exchange 2013–2019。Microsoft 365 已禁用 EWS 的密码登录,云端邮箱更适合使用基于 Microsoft Graph 的服务器。

收件箱:0。祝你晚上愉快。

一条命令,智能体就能和你一起处理工作邮件。

curl -LsSf https://raw.githubusercontent.com/Khomiakov7706/owa-mail-mcp/main/install.sh | sh