项目简介
EWS MCP Server是一个功能全面的应用后端,它实现了Model Context Protocol (MCP) 规范。通过该服务器,AI助手可以无缝地与Microsoft Exchange Web Services (EWS) 交互,从而执行一系列邮件、日历、联系人、任务和文件夹管理操作。它支持多种认证方式(OAuth2, Basic Auth, NTLM),并提供了丰富的工具集,让AI能够处理企业级的协作和信息管理任务。
主要功能点
- 邮件管理: 发送、读取、搜索、删除、移动和复制邮件,支持附件操作和内容提取。
- 日历管理: 创建、更新、删除会议,响应会议邀请,并能智能查找最佳会议时间。
- 联系人管理: 全面的联系人增删改查,支持在全局地址列表 (GAL) 和邮件历史中智能搜索联系人,分析沟通模式和网络关系。
- 任务管理: 创建、获取、更新、完成和删除Exchange任务。
- 文件夹管理: 创建、删除、重命名和移动邮箱文件夹。
- 高级搜索: 支持会话线程搜索、全文搜索、多条件组合搜索。
- 外出回复 (OOF): 配置和管理自动外出回复设置。
- 多认证支持: 支持OAuth2 (推荐用于Office 365)、Basic Auth 和 NTLM。
- 内容提取: 可从PDF、DOCX、XLSX、TXT等附件中提取文本内容。
安装步骤 (使用Docker简化部署)
此服务器推荐通过Docker进行部署,方便快捷。
使用预构建Docker镜像 (最简单):
-
拉取最新镜像:
docker pull ghcr.io/azizmazrou/ews-mcp:latest -
创建环境变量文件 ('.env'): 您需要根据您的Exchange环境选择认证方式。
-
如果您使用Basic Authentication (适用于测试或本地Exchange):
# 创建 .env 文件 cat > .env <<EOF EWS_SERVER_URL=https://mail.company.com/EWS/Exchange.asmx [email protected] EWS_AUTODISCOVER=false EWS_AUTH_TYPE=basic [email protected] EWS_PASSWORD=your-password TIMEZONE=UTC LOG_LEVEL=INFO EOF # 替换其中的 mail.company.com, [email protected], your-password 为您的实际信息。 -
如果您使用OAuth2 Authentication (推荐用于Office 365):
# 使用预配置的OAuth2模板 cp .env.oauth2.example .env # 然后编辑 .env 文件,替换以下信息为您的Azure AD 应用注册凭据: # EWS_CLIENT_ID=<您的Azure AD应用客户端ID> # EWS_CLIENT_SECRET=<您的Azure AD应用客户端Secret> # EWS_TENANT_ID=<您的Azure AD租户ID> # EWS_EMAIL=<要连接的Exchange邮箱地址> # EWS_SERVER_URL=https://outlook.office365.com/EWS/Exchange.asmx # EWS_AUTH_TYPE=oauth2 # TIMEZONE=UTC # LOG_LEVEL=INFO(请参考仓库的README文件,其中有详细的Azure AD应用注册步骤)。
-
-
运行Docker容器:
docker run -d \ --name ews-mcp-server \ --env-file .env \ -v $(pwd)/logs:/app/logs \ ghcr.io/azizmazrou/ews-mcp:latest -
查看日志 (确认连接成功):
docker logs -f ews-mcp-server # 查找 "✓ Successfully connected to Exchange" 信息,表示服务器已成功连接到Exchange。
服务器配置 (供MCP客户端使用)
MCP客户端(如Claude Desktop)需要知道如何启动并连接到此服务器。以下是配置示例:
使用预构建的Docker镜像 (推荐给MCP客户端):
{ "mcpServers": { "ews": { "command": "docker", "args": [ "run", "-i", "--rm", "--env-file", "/absolute/path/to/.env", // 替换为您的 .env 文件的绝对路径 "ghcr.io/azizmazrou/ews-mcp:latest" ], "description": "连接到Microsoft Exchange邮箱,提供邮件、日历、联系人、任务、文件夹等管理工具,赋能AI助手高效处理企业协作和信息管理任务。" } } }
注意: '"/absolute/path/to/.env"' 必须是MCP客户端能够访问到的宿主机上的 '.env' 文件的绝对路径。
如果您是在本地Python环境运行 (开发用途):
{ "mcpServers": { "ews": { "command": "python", "args": ["-m", "src.main"], "cwd": "/path/to/ews-mcp", // 替换为您的 ews-mcp 仓库的绝对路径 "env": { "EWS_EMAIL": "[email protected]", // 您的Exchange邮箱 "EWS_AUTH_TYPE": "oauth2", // 或 "basic" / "ntlm" "EWS_CLIENT_ID": "your-client-id", // OAuth2需要,Basic/NTLM不需要 "EWS_CLIENT_SECRET": "your-secret", // OAuth2需要,Basic/NTLM不需要 "EWS_TENANT_ID": "your-tenant" // OAuth2需要,Basic/NTLM不需要 // 其他环境变量如 EWS_SERVER_URL, EWS_USERNAME, EWS_PASSWORD 等也在此处配置 }, "description": "连接到Microsoft Exchange邮箱,提供邮件、日历、联系人、任务、文件夹等管理工具 (本地Python运行版)。" } } }
注意: 在本地开发环境中,您也可以将所有环境变量写入到 'cwd' 目录下的 '.env' 文件中,然后省略 'env' 字段。
基本使用方法 (AI助手交互)
一旦MCP服务器启动并被MCP客户端配置,AI助手就可以通过调用服务器提供的“工具”来与Exchange进行交互。
示例 (AI助手发送邮件): AI助手可能会根据用户请求,生成类似以下调用 'send_email' 工具的指令:
{ "tool_name": "send_email", "args": { "to": ["[email protected]"], "subject": "关于项目会议的更新", "body": "您好,项目会议已定于周三上午10点。请查收日历邀请。谢谢!", "importance": "High" } }
示例 (AI助手查找联系人): AI助手可能会调用 'find_person' 工具来查找一个联系人:
{ "tool_name": "find_person", "args": { "query": "John Doe", "search_scope": "all", "include_stats": true } }
AI助手会接收到服务器返回的结果,并根据结果继续与用户交互或执行后续操作。
信息
分类
通信与社交