](https://mseep.ai/app/cam10001110101-mcp-server-outlook-email)
电子邮件处理MCP服务器
一个跨平台的MCP服务器,处理Microsoft Outlook电子邮件,使用Ollama生成向量嵌入,并提供语义搜索功能。工作在 视窗, macOS,以及 通过Microsoft Graph API的任何平台.
服务器符合 模型上下文协议(MCP)2025-06-18规范 并使用官方的MCP SDK。
特性
核心能力
- 使用日期范围筛选处理来自Outlook的电子邮件
- 通过适当的连接管理将电子邮件存储在SQLite数据库中
- 使用Ollama生成向量嵌入(nomic嵌入文本)
- 通过MongoDB矢量存储跨电子邮件内容进行语义搜索
- 支持多邮箱和多账户
- 支持收件箱、已发送邮件和可选的已删除邮件文件夹
与跨平台支持
- 视窗:通过pywin32实现本机Outlook COM自动化
- macOS:AppleScript与Outlook for Mac的集成
- 任何平台:用于基于云的访问的Microsoft Graph API(Windows、macOS、Linux、容器)
MCP 2025-06-18合规性
- 结构化工具结果:工具返回正确键入、验证的Pydantic模型
- HTTP传输:支持STDIO和HTTP(流式HTTP)传输
- 协议协商:在握手过程中声明协议版本
- 增强元数据:用于更好地集成UI的工具标题和描述
可用工具(12+)
| 类别 | 工具 |
|---|---|
| 电子邮件处理 | process_emails |
| 搜索与分析 | search_emails, analyze_email_sentiment, find_actionable_items |
| 数据导出 | export_email_data (CSV、JSON、HTML、Excel) |
| 文件夹管理 | list_outlook_folders, get_folder_statistics, organize_emails_by_rules |
| 联系人管理 | extract_contacts |
| 统计数据 | get_email_statistics, check_data_consistency |
先决条件
必需(所有平台)
- Python 3.10或更高版本
- Ollama在当地跑步
nomic-embed-text模型 - MongoDB服务器(用于存储嵌入)
平台特定要求
| 平台 | 要求 |
|---|---|
| Windows | 已安装Microsoft Outlook+pywin32 |
| macOS | 已安装Microsoft Outlook for Mac |
| 图形API | Azure AD应用程序注册邮件。读取权限 |
安装
1.安装uv(如果尚未安装)
pip install uv2.创建并激活虚拟环境
uv venv .venv
# Windows
.venv\Scripts\activate
# macOS/Linux
source .venv/bin/activate3.安装依赖项
核心安装(必需):
uv pip install -e .平台特定附加功能:
# Windows (adds pywin32 for COM automation)
uv pip install -e ".[windows]"
# Graph API support (cross-platform cloud access)
uv pip install -e ".[graph]"
# All optional dependencies
uv pip install -e ".[all]"4.安装Ollama嵌入模型
ollama pull nomic-embed-text5.(仅限Graph API)注册Azure AD应用程序
如果使用Microsoft Graph API,则需要在Azure AD中注册应用程序:
- 首选 Azure门户 → Azure Active Directory→ 应用程序注册
- 点击“新建注册”
- 命名您的应用程序并选择“仅此组织目录中的帐户”
- 创建后,请注意 应用程序(客户端)ID 和 目录(租户)ID
- 转到“证书和机密”→ “新客户机密”→ 注意秘密值
- 转到“API权限”→ “添加权限”→ “Microsoft Graph”→ “应用程序权限”
- 添加:
Mail.Read,User.Read.All(用于多帐户发现) - 点击“授予管理员同意”
配置
将服务器添加到您的Claude for Desktop配置文件中:
- 视窗:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
环境变量
| 变量 | 描述 | 必填 |
|---|---|---|
MONGODB_URI | MongoDB连接字符串 | 是 |
SQLITE_DB_PATH | SQLite数据库文件的路径 | 是 |
EMBEDDING_BASE_URL | Ollama服务器URL(默认值:http://localhost:11434) | 没有 |
EMBEDDING_MODEL | 嵌入模型名称(默认:nomic嵌入文本) | 否 |
COLLECTION_NAME | MongoDB集合名称 | 是 |
PROCESS_DELETED_ITEMS | 处理已删除邮件文件夹(默认:“false”) | 否 |
OUTLOOK_PROVIDER | 提供商: auto, windows, mac, graph (默认:“自动”) | 否 |
LOCAL_TIMEZONE | 日期时区(默认值:“UTC”,例如“美洲/芝加哥”) | 否 |
图形API变量(当 OUTLOOK_PROVIDER=graph):
| 变量 | 描述 |
|---|---|
GRAPH_CLIENT_ID | Azure AD应用程序(客户端)ID |
GRAPH_CLIENT_SECRET | Azure AD客户端机密 |
GRAPH_TENANT_ID | Azure AD租户ID |
GRAPH_USER_EMAILS | 邮箱:逗号分隔列表或“全部”用于自动发现 |
______________________________________________________________________
Windows配置(COM自动化)
通过pywin32使用本机Outlook COM自动化。
{
"mcpServers": {
"outlook-email": {
"command": "C:/path/to/.venv/Scripts/python",
"args": ["C:/path/to/src/mcp_server.py"],
"env": {
"MONGODB_URI": "mongodb://localhost:27017/MCP?authSource=admin",
"SQLITE_DB_PATH": "C:\\path\\to\\data\\emails.db",
"EMBEDDING_BASE_URL": "http://localhost:11434",
"EMBEDDING_MODEL": "nomic-embed-text",
"COLLECTION_NAME": "outlook-emails",
"OUTLOOK_PROVIDER": "windows",
"LOCAL_TIMEZONE": "America/Chicago"
}
}
}
}macOS配置(AppleScript)
使用AppleScript与Outlook for Mac通信。
{
"mcpServers": {
"outlook-email": {
"command": "/path/to/.venv/bin/python",
"args": ["/path/to/src/mcp_server.py"],
"env": {
"MONGODB_URI": "mongodb://localhost:27017/MCP?authSource=admin",
"SQLITE_DB_PATH": "/path/to/data/emails.db",
"EMBEDDING_BASE_URL": "http://localhost:11434",
"EMBEDDING_MODEL": "nomic-embed-text",
"COLLECTION_NAME": "outlook-emails",
"OUTLOOK_PROVIDER": "mac",
"LOCAL_TIMEZONE": "America/Los_Angeles"
}
}
}
}图形API配置(跨平台)
适用于任何具有Azure AD凭据的平台。支持单个或多个邮箱。
单个邮箱或特定邮箱:
{
"mcpServers": {
"outlook-email": {
"command": "python",
"args": ["src/mcp_server.py"],
"env": {
"MONGODB_URI": "mongodb://localhost:27017/MCP",
"SQLITE_DB_PATH": "/data/emails.db",
"EMBEDDING_BASE_URL": "http://localhost:11434",
"EMBEDDING_MODEL": "nomic-embed-text",
"COLLECTION_NAME": "outlook-emails",
"OUTLOOK_PROVIDER": "graph",
"GRAPH_CLIENT_ID": "your-azure-ad-client-id",
"GRAPH_CLIENT_SECRET": "your-client-secret",
"GRAPH_TENANT_ID": "your-tenant-id",
"GRAPH_USER_EMAILS": "user1@example.com,user2@example.com"
}
}
}
}租户中的所有邮箱(自动发现):
{
"mcpServers": {
"outlook-email": {
"command": "python",
"args": ["src/mcp_server.py"],
"env": {
"MONGODB_URI": "mongodb://localhost:27017/MCP",
"SQLITE_DB_PATH": "/data/emails.db",
"EMBEDDING_BASE_URL": "http://localhost:11434",
"EMBEDDING_MODEL": "nomic-embed-text",
"COLLECTION_NAME": "outlook-emails",
"OUTLOOK_PROVIDER": "graph",
"GRAPH_CLIENT_ID": "your-azure-ad-client-id",
"GRAPH_CLIENT_SECRET": "your-client-secret",
"GRAPH_TENANT_ID": "your-tenant-id",
"GRAPH_USER_EMAILS": "All"
}
}
}
}提供商自动检测
当 OUTLOOK_PROVIDER 设置为 auto (默认),服务器会自动选择最佳提供商:
| 平台 | 自动选择提供程序 |
|---|---|
| 窗户 | windows (COM自动化) |
| macOS | mac (AppleScript) |
| Linux/其他 | graph (需要Azure AD设置) |
HTTP传输(符合2025-06-18标准)
对于HTTP传输,请使用以下命令运行服务器 --http 标志:
python src/mcp_server.py --http这将在以下位置启动服务器 http://localhost:8000/mcp 完全符合2025-06-18协议,包括:
- 协议版本协商
- 结构化输出模式
- HTTP标头验证
- 正确的错误处理
HTTP传输支持有状态和无状态操作模式。
______________________________________________________________________
可用工具
1.处理邮件
处理指定日期范围内的电子邮件并返回结构化结果:
输入:
{
"start_date": "2024-01-01", # ISO format date (YYYY-MM-DD)
"end_date": "2024-02-15", # ISO format date (YYYY-MM-DD)
"mailboxes": ["All"] # List of mailbox names or ["All"] for all mailboxes
}输出(结构化):
{
"success": true,
"processed_count": 150,
"retrieved_count": 200,
"stored_count": 180,
"failed_count": 20,
"message": "Successfully processed 150 emails (retrieved: 200, stored: 180, failed: 20)",
"error": null
}该工具将:
- 连接到指定的Outlook邮箱
- 从收件箱和已发送邮件文件夹(以及已删除邮件,如果启用)中检索电子邮件
- 将电子邮件存储在SQLite数据库中
- 使用Olama生成嵌入
- MongoDB中用于语义搜索的存储嵌入
- 返回具有详细统计信息的结构化结果
Claude中的示例用法
"Process emails from February 1st to February 17th from all mailboxes"建筑
基于提供者的连接器设计
服务器使用 基于提供者的抽象 对于跨平台电子邮件访问:
src/connectors/
├── base.py # OutlookConnectorBase (abstract interface)
├── factory.py # create_connector() with auto-detection
├── windows_connector.py # Windows COM via pywin32
├── mac_connector.py # macOS AppleScript via osascript
└── graph_connector.py # Microsoft Graph API (cross-platform)所有连接器实现相同的接口,返回标准化 EmailMetadata 无论平台如何。
双数据库架构
服务器使用混合存储方法:
SQLite数据库:
- 主电子邮件存储和元数据
- 全文搜索功能
- 处理状态跟踪
- 日期范围和文件夹筛选
- 快速结构化查询
MongoDB:
- 矢量嵌入存储(768维)
- 语义相似度搜索
- 元数据与嵌入一起存储
- 启用AI驱动的搜索
错误处理
服务器为常见问题提供详细的错误消息:
- 日期格式无效
- 与Outlook的连接问题
- MongoDB错误
- 用重试逻辑嵌入生成失败
- SQLite存储错误
- Ollama服务器连接问题,自动重试
资源管理
服务器实施了适当的资源管理以防止出现问题:
- 数据库连接(SQLite和MongoDB)在服务器的生命周期内保持打开状态,以防止“无法在关闭的数据库上操作”错误
- 仅当服务器关闭时,使用atexit处理程序关闭连接
- 破坏者和上下文管理器被用作回退,以确保在对象被垃圾回收时连接关闭
- 连接管理旨在平衡资源使用与操作可靠性
- Ollama等外部服务的强大重试逻辑,用于处理临时连接问题
MCP 2025-06-18合规性
此服务器已升级为符合MCP 2025-06-18规范:
协议特性
- 协议版本:声明
protocolVersion: "2025-06-18"握手时 - 结构化输出:所有工具都返回键入、验证的Pydantic模型
- HTTP传输:支持具有适当标头验证的流式HTTP
- 工具元数据:通过标题和模式增强工具描述
- 错误处理:带有详细信息的结构化错误响应
运输支持
- 工作室:传统stdin/stdout通信(默认)
- 超文本传输协议:本地主机上的流式HTTP:8000/mcp,带标头验证
- 协议头:验证MCP协议版本和源标头
- 单消息JSON-RPC:根据2025-06-18规范,不支持批量请求
结构化输出
这 process_emails 工具返回结构化 ProcessEmailsResult 与:
success:布尔值表示操作成功processed_count:成功处理的电子邮件数量retrieved_count:从Outlook检索到的电子邮件总数stored_count:SQLite中存储的电子邮件数量failed_count:处理失败的电子邮件数量message:人类可读的状态消息error:操作失败时的错误详细信息
安全说明
- 服务器仅处理来自指定邮箱的电子邮件
- 所有数据都存储在本地(SQLite)和MongoDB中
- 除了对本地Ollama服务器(以及使用该提供程序的Microsoft Graph)的调用外,没有外部API调用
- 电子邮件处理需要明确的用户批准
- MCP接口不会暴露敏感电子邮件数据
- 为了安全起见,HTTP传输仅绑定到localhost
- Graph API使用带有Azure AD的OAuth 2.0客户端凭据流
- 安全地存储Azure AD凭据(环境变量,不在代码中)
调试
如果您遇到问题:
- 验证电子邮件是否已成功处理(检查process_emails响应)
- 确保Ollama服务器正在运行以进行嵌入式生成
- 检查SQLite数据库是否可访问
- 验证MongoDB连接是否正常工作
- 使用
check_data_consistency用于验证SQLite/MongoDB同步的工具
平台特定调试
窗户:
- 确保Outlook正在运行且可访问
- 检查是否安装了pywin32:
pip show pywin32 - 验证COM自动化是否正常工作:
python -c "import win32com.client; print('OK')"
macOS:
- 确保已安装Outlook for Mac(而不仅仅是“新Outlook”web应用程序)
- 测试AppleScript访问:
osascript -e 'tell application "Microsoft Outlook" to get name' - 在系统首选项中授予终端/IDE权限→ 安全与隐私→ 自动化
图形API:
- 验证Azure AD应用程序是否具有正确的权限(Mail.Read、User.Read.All)
- 检查是否已授予管理员同意
- 测试令牌获取:启动时记录凭据
- 验证
GRAPH_USER_EMAILS设置正确(“全部”或逗号分隔的电子邮件)
平台限制
| 平台 | 限制 |
|---|---|
| Windows | 需要运行Outlook桌面应用程序 |
| macOS | “新Outlook”可能对AppleScript的支持有限;使用Graph API作为回退 |
| Graph API | 需要Azure AD设置;强制执行30天的最大日期范围 |
| 全部 | 每个请求最多可处理30天 |
即将推出的功能
- 使用LLM进行电子邮件摘要
- 自动电子邮件分类
- 可定制的电子邮件报告
- Outlook正在起草电子邮件回复
- Outlook规则建议
- 通过Neo4j和ChromaDB集成扩展数据库选项
