邮件操作服务器

一个基于Python的Microsoft 365 Outlook邮件操作模型上下文协议(MCP)服务器,使用OAuth 2.0客户端凭证流进行认证,适用于自主代理和服务器到服务器场景。

  • by thedevopsstore
  • Python
  • 混合部署
  • 更新于
在 GitHub 查看 thedevopsstore/email-mcp-server

使用说明

MS365电子邮件MCP服务器

用于Microsoft 365 Outlook电子邮件操作的基于Python的模型上下文协议(MCP)服务器。此服务器使用 OAuth 2.0客户端凭据流 对于身份验证,使其成为自主代理和服务器到服务器场景的理想选择。

内置 FastMCP 为了简化服务器实现,请遵循 AWS API MCP服务器.

特性

此MCP服务器提供以下电子邮件操作:

  • 列出邮件 -列出收件箱或特定文件夹中的邮件
  • 列出邮件文件夹 -列出所有邮件文件夹
  • 列出邮件文件夹邮件 -列出特定文件夹中的邮件
  • 获取邮件消息 -按ID获取特定邮件
  • 发送邮件 -发送电子邮件
  • 删除邮件 -删除邮件
  • 创建电子邮件草稿 -创建电子邮件草稿
  • 移动邮件 -将邮件移动到另一个文件夹

认证

此服务器使用 OAuth 2.0客户端凭据流 (仅限应用程序的身份验证),非常适合自主代理和后台服务。不需要用户交互。

参考: Microsoft Graph-无需用户即可访问

先决条件

1.Azure应用程序注册

您需要在Azure AD中注册一个应用程序 应用程序权限 (未授权):

  1. 首选 Azure门户 → Azure Active Directory→ 应用程序注册
  2. 创建新注册
  3. 记下:
    • 应用程序(客户端)ID
    • 目录(租户)ID
  4. 创建一个 客户端密钥:
    • 转到证书和机密→ 新客户机密
    • 立即复制机密值(不会再次显示)
  5. 配置 API权限:
    • 转到API权限→ 添加权限→ Microsoft Graph
    • 选择 应用程序权限 (未授权)
    • 添加以下权限:
      • Mail.Read -读取用户邮件
      • Mail.ReadWrite -读写用户邮件
      • Mail.Send -以用户身份发送邮件
    • 授予管理员同意 (应用程序权限所需)

重要:应用程序权限需要管理员同意。应用程序必须获得同意才能使用这些权限。

参考: Microsoft Graph-配置权限

2.环境变量

MS365_CLIENT_ID=your-azure-ad-client-id
MS365_CLIENT_SECRET=your-azure-ad-client-secret
MS365_TENANT_ID=your-tenant-id
# Optional: For Government Cloud
MS365_CLOUD_TYPE=gov  # Options: "commercial" (default), "gov", "government", "usgov"
# Optional: For shared mailboxes (required for Client Credentials Flow)
MS365_USER_IDENTIFIER=user@domain.com  # UserPrincipalName or Graph ID of the shared mailbox

对于共享邮箱很重要:使用客户端凭据流(仅应用程序身份验证)时,您 必须 提供 MS365_USER_IDENTIFIER 因为 /me/ 没有登录用户,端点无法工作。使用UserPrincipalName(例如。, shared-mailbox@domain.com)或共享邮箱的图形ID。

地方发展

此项目使用 紫外线 对于依赖关系管理,类似于 AWS API MCP服务器.

1.安装UV

# Install UV using pip
pip install uv

# Or using Homebrew (macOS)
brew install uv

# Or using the official installer
curl -LsSf https://astral.sh/uv/install.sh | sh

2.安装依赖项

# Install project dependencies
uv sync

# Or install in development mode with dev dependencies
uv sync --dev

3.设置环境变量

export MS365_CLIENT_ID="your-client-id"
export MS365_CLIENT_SECRET="your-client-secret"
export MS365_TENANT_ID="your-tenant-id"
export PORT="8100"  # Optional, defaults to 8100
export HOST="0.0.0.0"  # Optional, defaults to 0.0.0.0
export LOG_LEVEL="INFO"  # Optional, defaults to INFO
export STATELESS_HTTP="true"  # Optional, defaults to true

4.运行服务器

使用紫外线(推荐):

# Run using UV
uv run ms365-email-mcp-server

# Or run directly with Python (after uv sync)
python -m ms365_email_mcp_server.server

服务器将于启动 http://localhost:8100 与:

  • SSE端点: http://localhost:8100/message
  • 健康检查: http://localhost:8100/health

Docker使用

构建Docker镜像

Dockerfile使用UV进行依赖管理:

docker build -t email-mcp-server .

运行容器

docker run -d \
  -p 8100:8100 \
  -e MS365_CLIENT_ID="your-client-id" \
  -e MS365_CLIENT_SECRET="your-client-secret" \
  -e MS365_TENANT_ID="your-tenant-id" \
  -e MS365_CLOUD_TYPE="commercial" \
  email-mcp-server

使用Docker Compose

创建一个 .env 文件:

MS365_CLIENT_ID=your-client-id
MS365_CLIENT_SECRET=your-client-secret
MS365_TENANT_ID=your-tenant-id
MS365_CLOUD_TYPE=commercial

然后运行:

docker-compose up

或者在分离模式下:

docker-compose up -d

MCP客户端配置

HTTP/SSE端点

服务器作为HTTP/SSE服务器运行。使用以下方式连接到它:

  • SSE端点: http://localhost:8100/message
  • 健康检查: http://localhost:8100/health

与MCP客户端一起使用

选项1:HTTP/SSE传输(推荐)

对于支持HTTP/SSE传输的客户端,请配置:

{
  "mcpServers": {
    "ms365-email": {
      "url": "http://localhost:8100/message",
      "transport": "sse"
    }
  }
}

选项2:使用紫外线(用于stdio传输)

如果您想使用UV运行服务器(类似于AWS API MCP服务器),您可以配置:

{
  "mcpServers": {
    "ms365-email": {
      "command": "uvx",
      "args": [
        "ms365-email-mcp-server@latest"
      ],
      "env": {
        "MS365_CLIENT_ID": "your-client-id",
        "MS365_CLIENT_SECRET": "your-client-secret",
        "MS365_TENANT_ID": "your-tenant-id",
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

备注:这需要将包发布到PyPI。对于本地开发,请使用选项1或手动运行服务器 uv run ms365-email-mcp-server.

API 参考

使用的Microsoft Graph API端点

  • 列出邮件: 获取/我/消息
  • 发送邮件: POST/me/sendMail
  • 获取消息: GET /me/messages/{id}
  • 删除邮件: DELETE /me/messages/{id}
  • 创建草稿: POST /me/messages
  • 移动消息: POST /me/messages/{id}/move
  • 列出文件夹: GET /me/mailFolders

政府云支持

对于Azure政府云,设置:

export MS365_CLOUD_TYPE="gov"

这将使用:

  • 权限: https://login.microsoftonline.us
  • 图形API: https://graph.microsoft.us

安全说明

  • 永远不要将客户端机密提交给版本控制
  • 使用环境变量或秘密管理系统
  • 定期轮换客户端机密
  • 考虑在Azure中使用托管身份进行生产
  • 应用程序权限需要管理员同意

故障排除

“获取令牌失败”

  • 验证您的 MS365_CLIENT_ID, MS365_CLIENT_SECRET,以及 MS365_TENANT_ID 是正确的
  • 确保已授予应用程序权限的管理员同意
  • 检查客户端密码是否未过期

“权限不足”

  • 验证是否已授予所有必需权限的管理员同意
  • 检查您是否正在使用 应用程序权限 (非委托权限)

“无效租户”

  • 验证您的 MS365_TENANT_ID 是正确的
  • 对于政府云,确保 MS365_CLOUD_TYPE 设置为 "gov"

许可证

麻省理工学院