Agentbuilder Outlook MCP 服务器

通过Microsoft Graph发送Outlook邮件的FastMCP服务器。此项目之所以存在,是因为Agent Builder的Outlook连接器不提供发送电子邮件的功能;MCP服务器通过提供一个单一的接口来填补这一缺失工具 send_outlook_mail 入口点,用于验证有效载荷、获取访问令牌并调用Graph(图API) sendMail 终端节点。
先决条件
- Python 3.10及以上版本
- 带有Microsoft Outlook/Graph账户的
Mail.Send权限(委托令牌或应用程序注册) uv(推荐)或pip
安装
uv pip install .环境变量
设置以下内容为 .env (从...创建 .env.example):
GRAPH_USER_ACCESS_TOKEN– 可选的委托承载令牌(例如,来自 Graph Explorer),用于快速测试。GRAPH_DEFAULT_SENDER– 发件邮箱,例如。,user@outlook.com。GRAPH_TENANT_ID,GRAPH_CLIENT_ID,GRAPH_CLIENT_SECRET– 仅在应用仅凭客户端凭据授权流程中需要。
在运行之前加载它们:
set -a; source .env; set +a本地使用
模拟运行(未发送邮件):
python3 - <<'PY'
from server import send_outlook_mail_impl
result = send_outlook_mail_impl(
subject="Dry Run",
body="Payload preview only.",
to=["recipient@example.com"],
dry_run=True,
)
print(result)
PY发送实时消息(dry_run=False) 一旦配置确认无误。为了让客户端访问MCP工具:
fastmcp run server.py远程部署
该服务器已部署在FastMCP上 https://agentbuilder-outlook-mcp.fastmcp.app/mcp使用此URL连接您的MCP兼容客户端(如Claude Desktop、Cursor等)。
在连接到远程服务器之前进行本地验证:
fastmcp run server.py多租户配置
这台服务器支持 多租户使用 当调用时,每个用户需提供自己的Microsoft凭据 send_outlook_mail 工具。服务器本身不存储任何凭据——所有身份验证都是在每次请求时进行的。
两种认证方法
MCP服务器通过两种不同的身份验证流程,支持个人微软账户和组织账户:
方法1:个人Microsoft账户(@outlook.com、@hotmail.com、@live.com)
最适合用于: 个人用户、测试、个人电子邮件自动化
认证: 带有用户登录的委托权限
设置步骤:
- 首选 Microsoft Graph 探索器
- 使用您的个人微软帐户登录
- 运行任何查询(例如,GET /me)
- 格兰特
Mail.Send当被提示时给予许可 - 点击 “访问令牌” 按制表键并复制令牌
- 在您的MCP客户端中使用该令牌:
send_outlook_mail(
subject="Test Email",
body="Hello from my personal account!",
to=["recipient@example.com"],
access_token="EwBIBMl6BAAU...", # Your Graph Explorer token
sender="your.personal@outlook.com"
)令牌格式: 非JWT专有格式(以...开头 EwB...,没有点) 到期日: 约1小时(需手动刷新) 权限: 委托(以已登录用户的身份操作)
注: 个人帐户令牌使用微软专有的加密格式。这是正常的,并且与Graph API正常工作,尽管它们不是标准的JWT。
______________________________________________________________________
方法2:组织帐户(Microsoft 365 / Azure AD)
最适合用于: 生产应用、服务账户、自动化工作流
认证: 客户端凭据(仅限应用,无需用户登录)
先决条件:
- 带有 Microsoft 365 的 Azure AD 租户
- Exchange Online邮箱已配置
- Azure AD 应用注册
设置步骤: 看 AZURE_SETUP.md 翻译为中文是:“AZURE 设置指南.md” 或 “AZURE 配置说明.md”(具体翻译可能根据上下文有所调整,但基本意思是指向一个关于 Azure 设置或配置的 Markdown 文件) 以获取详细说明
快速概要:
- 创建Azure AD应用程序注册
- 添加
Mail.Send应用程序权限 - 授予管理员同意
- 创建客户端密钥
- 在您的MCP客户端中使用凭据:
send_outlook_mail(
subject="Automated Email",
body="Sent via client credentials",
to=["recipient@example.com"],
tenant_id="your-tenant-id",
client_id="your-client-id",
client_secret="your-client-secret",
sender="user@company.com" # Must be valid organizational mailbox
)令牌格式: 标准JWT(以...开头 eyJ...(由点分隔的)有3个部分 过期日期: 由服务器自动刷新 权限: 应用程序(应用独立运行,不作为用户)
______________________________________________________________________
对比表
| 功能 | 个人账户 | 组织账户 | |
|---|---|---|---|
| 账户类型 | @outlook.com, @hotmail.com, @live.com | @company.com(Microsoft 365) | |
| 认证 | 授权(用户登录) | 应用程序(客户端凭据) | |
| 代币来源 | 图形资源管理器 | Azure AD 应用注册 | |
| 令牌格式 | 专有(EwB...) | JWT ( 翻译为中文是:) | JSON Web Token ((一种用于在网络应用间安全传递信息的开放标准)eyJ...) |
| 代币有效期 | 1小时 | 自动续期 | |
| 最适合/最适用于 | 测试,个人使用 | 生产,自动化 | |
| 成本 | 免费 | 需要M365许可证(约6美元/月) | |
| 设置复杂性 | 简单(2分钟) | 中等(15分钟) |
______________________________________________________________________
单租户回退(可选)
为了向后兼容,如果未提供任何凭据参数,服务器将回退到使用环境变量:
GRAPH_TENANT_IDGRAPH_CLIENT_IDGRAPH_CLIENT_SECRETGRAPH_DEFAULT_SENDERGRAPH_USER_ACCESS_TOKEN
这允许运行一个单租户服务器,其中所有用户共享同一个Outlook账户。 不建议用于多租户部署。
测试
uv pip install .[dev]
pytest单元测试涵盖了令牌获取和有效载荷构建。
部署说明
fastmcp.json被配置为fastmcp run以及FastMCP云。- 目标平台上的机密信息应通过环境变量提供。
- 看
todo.md对于剩余任务和部署检查清单。
