项目简介

这是一个基于 Model Context Protocol (MCP) 标准实现的后端服务器,旨在通过 Microsoft Graph API 集成 Microsoft Outlook 的各项功能(如邮件、日历、邮件规则、文件夹管理),使其可被支持 MCP 的大型语言模型(LLM)客户端调用,作为其获取上下文信息和执行外部操作的工具。

主要功能点

  • 身份认证: 通过 OAuth 2.0 与 Microsoft Graph API 进行安全认证,获取访问令牌。
  • 邮件管理: 支持列出、搜索、阅读、发送邮件,并可按文件夹操作。
  • 日历管理: 能够列出即将到来的日历事件,创建新事件,以及接受、拒绝、取消或删除现有事件。
  • 文件夹管理: 支持列出 Outlook 邮箱中的文件夹,创建新文件夹,并将邮件移动到指定文件夹。
  • 邮件规则管理: 允许列出、创建和修改收件箱规则的执行顺序。
  • 模块化设计: 代码结构清晰,功能按模块划分(认证、邮件、日历、规则、文件夹),易于扩展和维护。

安装步骤

  1. 安装 Node.js: 确保您的系统已安装 Node.js (推荐 LTS 版本)。
  2. 克隆仓库: 从 GitHub 克隆此仓库到您的本地机器。
    git clone https://github.com/ryaker/outlook-mcp.git
    cd outlook-mcp
  3. 安装依赖: 在仓库根目录运行命令安装所有 Node.js 依赖。
    npm install
  4. Azure 应用注册:
    • 前往 Azure Portal (https://portal.azure.com/)。
    • 搜索并进入 "App registrations" (应用注册)。
    • 点击 "New registration" (新建注册),填写应用名称(如 "Outlook MCP Server")。
    • 选择支持的账户类型(例如 "Accounts in any organizational directory and personal Microsoft accounts")。
    • 在 "Redirect URI" (重定向 URI) 部分,选择 "Web",并填写 'http://localhost:3333/auth/callback'。
    • 注册完成后,记录下 "Application (client) ID""Directory (tenant) ID"
    • 在应用设置页面的 "API permissions" (API 权限) 中,点击 "Add a permission" (添加权限),选择 "Microsoft Graph",然后选择 "Delegated permissions" (委托的权限)。根据需要添加以下权限(至少包括邮件和日历相关权限):'offline_access', 'User.Read', 'Mail.Read', 'Mail.Send', 'Calendars.Read', 'Calendars.ReadWrite', 'Contacts.Read'。添加后,确保点击 "Grant admin consent for..." (为...授予管理员同意)。
    • 在应用设置页面的 "Certificates & secrets" (证书和机密) 中,创建新的客户端机密 (Client secret),记录下 Secret value(不是 Secret ID)。
  5. 配置环境变量: 创建 '.env' 文件在仓库根目录,并填入您在 Azure 注册的应用信息。
    MS_CLIENT_ID=您的应用(客户端)ID
    MS_CLIENT_SECRET=您的客户端机密值
    OUTLOOK_CLIENT_ID=您的应用(客户端)ID
    OUTLOOK_CLIENT_SECRET=您的客户端机密值
    USE_TEST_MODE=false # 如果需要连接真实的 Outlook,请确保设置为 false
    (注意:仓库代码中 MS_CLIENT_ID/SECRET 用于 auth server,而 OUTLOOK_CLIENT_ID/SECRET 用于主 MCP server 的 config,建议保持一致)
  6. 令牌存储: 认证令牌将默认存储在用户主目录下的 '.outlook-mcp-tokens.json' 文件中。

服务器配置(供 MCP 客户端参考)

MCP 客户端(如 Claude Desktop)需要配置如何启动此 MCP 服务器。以下是配置示例,请根据您的实际安装路径修改 'args' 中的 'index.js' 路径。

请注意,MCP 服务器本身通过标准输入/输出 (Stdio) 与客户端通信,但需要一个单独的本地 HTTP 服务器('outlook-auth-server.js')来处理 OAuth 认证流程。您需要先手动启动此认证服务器。

示例 MCP 服务器配置 (JSON 格式):

{
  // 服务器的内部标识名称,与 config.js 中的 SERVER_NAME 对应
  "name": "outlook-assistant",
  
  // 启动 MCP 服务器进程的命令
  // 此处使用 node 命令执行 index.js 文件
  "command": "node",
  
  // 传递给 command 的参数列表
  // 数组中的第一个元素是脚本文件的路径
  // **请将 "path/to/your/outlook-mcp/index.js" 替换为您实际的 index.js 文件路径**
  "args": ["path/to/your/outlook-mcp/index.js"],
  
  // 声明此服务器支持的 MCP 能力,此处声明支持 tools(工具)
  // 具体的工具列表会在客户端连接后通过 "tools/list" 请求获取
  "capabilities": {
    "tools": {} 
  }
  
  // 其他可能的 MCP 配置项,如 timeout 等...
}

基本使用方法

  1. 启动认证服务器: 在仓库根目录运行命令启动用于 OAuth 认证的本地服务器。
    node outlook-auth-server.js
    此服务器默认运行在 'http://localhost:3333'。让其保持运行。
  2. 配置并启动 MCP 客户端:
    • 根据上一节的“服务器配置”示例,在您的 MCP 客户端中添加或更新此 MCP 服务器的配置。请务必将 'index.js' 的路径替换为您本地仓库中的实际路径。
    • 启动或重启您的 MCP 客户端,使其连接到配置的 'outlook-assistant' 服务器。
  3. 进行认证: 在 MCP 客户端中,使用 'authenticate' 工具启动 Microsoft Graph API 认证流程。
    • 根据 MCP 客户端的提示(通常会在聊天界面中显示一个链接),点击链接在浏览器中完成 Microsoft 账户的登录和授权。
    • 授权成功后,浏览器将重定向到本地认证服务器,并显示成功信息。认证令牌将保存在您的本地文件系统中。
  4. 使用工具: 认证成功后,您就可以在 MCP 客户端中使用 Outlook 相关工具了,例如:
    • 使用 'list-emails' 列出收件箱邮件。
    • 使用 'read-email' 并提供邮件 ID 阅读邮件详情。
    • 使用 'list-events' 查看日历事件。
    • 使用 'send-email' 发送新邮件。
    • 使用 'list-folders' 查看文件夹列表。
    • 使用 'list-rules' 查看已设置的邮件规则。
    • 探索其他可用的工具及其用法。

故障排除

  • 如果在认证过程中遇到问题,请检查 'outlook-auth-server.js' 的控制台输出,以及 '.env' 文件中的 'MS_CLIENT_ID' 和 'MS_CLIENT_SECRET' 是否正确。
  • 如果工具调用失败(例如提示“Authentication required”),可能需要重新运行 'authenticate' 工具或检查 '.outlook-mcp-tokens.json' 文件是否存在且有效。
  • API 调用相关的错误,请查看 MCP 服务器('index.js' 进程)的标准错误输出,通常会有详细的错误日志。

信息

分类

生产力应用