Outlook MCP服务器

一个连接Microsoft Graph API和自主AI代理的协议服务器,用于安全地操作Outlook邮箱和日历。

  • by Code-With-Anthony
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 Code-With-Anthony/outlook-mcp

使用说明

Outlook MCP服务器

此存储库包含用于Microsoft Outlook的模型上下文协议(MCP)服务器。它有效地弥合了Microsoft Graph API和自主人工智能代理(如Roo Code或Claude Desktop)之间的差距,使人工智能能够安全地在Outlook收件箱和日历中执行操作。

建筑

此服务器遵循双应用程序拓扑:

  • 快速HTTP服务器: 持续运行 localhost:3000 等待最终用户批准OAuth 2.0 Microsoft身份验证流程。
  • MCP服务器: 在本地运行 stdio 严格等待从任何连接的符合MCP的AI代理接收工具调用JSON-RPC模式。

设置和安装

1.注册Microsoft应用程序

在开始之前,您必须在 Azure门户:

  1. 姓名: Outlook MCP Server
  2. 账户类型: 组织间+个人帐户(如果使用标准outlook.com/hotmail.com,则需要)。
  3. 重定向URI: 选择 网络 并添加 http://localhost:3000/auth/callback.
  4. 创建一个 客户端密钥 (暂时保存)。
  5. 授予以下权利 委派 图形API权限:
    • User.Read
    • Mail.Read
    • Mail.Send
    • Calendars.Read
    • Calendars.ReadWrite

2.本地配置

克隆此仓库并配置您的 .env 基于Azure密钥的文件。

npm install

精确创建 .env 根:

AZURE_CLIENT_ID="your_client_id_here"
AZURE_CLIENT_SECRET="your_client_secret_here"
AZURE_TENANT_ID="common" # usually "common" for outlook.com personal accounts
REDIRECT_URI="http://localhost:3000/auth/callback"
PORT=3000

测试和使用(连接到VS代码/Roo代码)

  1. 启动本地服务器实例:
    node src/server.js
    
  2. 将您的web浏览器导航到 http://localhost:3000/login.
  3. 登录Microsoft并授予权限。系统将在内存中主动保存您的令牌,并自动请求静默刷新机制!
  4. VS代码链接: 在VS Code中,打开Roo代码扩展的MCP设置,并附加本地执行环境:
{
  "mcpServers": {
    "outlook-mcp": {
      "command": "node",
      "args": ["C:/absolute/path/to/repo/src/server.js"],
      "disabled": false,
      "autoApprove": []
    }
  }
}

注意:将上面的路径替换为您的绝对系统路径 src/server.js. 配置后,您可以向Roo Code询问以下内容:

"Hey Roo, show me the 3 latest emails I received." "What meetings do I have tomorrow? Create one with John at 3 PM UTC."


开发人员指南:添加新功能

如果您正在扩展此代码库以支持新的Microsoft端点(例如OneDrive或ToDo),则必须遵循标准协议实现步骤:

  1. 服务层(src/services/graphService.js): 将原始查询映射起草回 graphClient.js 本地。
  2. 工具定义(src/tools/outlookTools.js): 公开描述输入要求的JSON模式 TOOLS 注册表显式。将您的函数字符串块注册到 handleToolCall 代理有效载荷路由器。
  3. 重要限制: 从不使用 console.log() 跨代码库。当MCP通过Stdout流建立连接时,标准日志会致命地操纵JSON有效载荷并导致AI连接崩溃。 总是使用 console.error() 用于诊断调试。