Outlook MCP Server
Outlook MCP Server
一个模型上下文协议服务器,将 Claude 连接到 Microsoft Outlook + Teams(电子邮件、日历、联系人、任务、文件、Teams 会议录制 + 转录),部署在 Cloudflare Workers 上。
Fork 此仓库,部署到您自己的 Cloudflare 账户,注册一个 Microsoft Azure AD 应用,将 Claude.ai 指向您的 worker,Claude 即可通过自然语言读写您的 Microsoft 365 数据。
基于 @bashco/mcp-toolkit 构建 — OAuth、每客户端 bearer 令牌、速率限制、结构化日志、类型化工具分发均由共享库处理。
Claude 获得的能力 — 7 个领域的 39 个工具
邮件:列出邮件、阅读邮件、搜索、回复、转发、删除、发送、在文件夹之间移动、创建草稿、更新草稿、发送草稿、计划发送
日历:列出事件、列出事件发生次数、创建、更新、删除、取消事件、响应事件
联系人:列出联系人、创建联系人、更新联系人
任务:列出任务列表、列出任务、创建任务
文件:列出文件、共享文件
Teams 会议:列出最近的录制(发现起点 — 查找过去 N 天内有内容的会议,无需输入)、查找在线会议、列出会议录制、列出会议转录、获取转录内容。每个按会议划分的工具都接受
meeting_id、calendar_event_id或join_url中的任意一个 — 因此计划会议(通过事件解析)、临时 / 立即开会呼叫(通过从 Teams 聊天粘贴的 join URL 解析)以及直接 ID 查找均可工作。对话:获取对话(完整线程)
设置:获取邮箱设置、设置外出状态
部署后,完整实时目录位于 tools/list MCP 端点。
Related MCP server: MCP Outlook Server
认证方式
两层:
Claude.ai ↔ 您的 worker — 标准 MCP OAuth 2.0 + PKCE 流程。每个 Claude 客户端获得唯一的 bearer 令牌;您的
MCP_APPROVAL_CODE是您在/authorize粘贴一次以铸造该 bearer 的代码。您的 worker ↔ Microsoft Graph — 代理 OAuth。您通过访问已部署 worker 上的
/oauth/start一次性授权 Microsoft;刷新令牌以加密形式存储在 Cloudflare KV 中。刷新自动进行。
设置 — 部署您自己的副本
先决条件
一个 Cloudflare 账户(免费计划即可)
已安装并登录 Wrangler CLI(
wrangler login)Node.js 22+
一个 Microsoft 账户(个人、工作或学校),有权在 entra.microsoft.com 注册 Azure AD 应用
1. Fork 并克隆
git clone https://github.com/<your-username>/outlook-mcp
cd outlook-mcp
npm install2. 创建 KV 命名空间
wrangler kv:namespace create OAUTH_KVWrangler 会打印类似这样的内容:
🌀 Creating namespace with title "outlook-mcp-OAUTH_KV"
✨ Success! Add the following to your configuration file:
[[kv_namespaces]]
binding = "OAUTH_KV"
id = "abc123def456..."编辑 wrangler.jsonc,将 kv_namespaces 下现有的 id 替换为 wrangler 刚打印的内容。
wrangler.jsonc是有意提交的 — Wrangler 和 CI 部署都需要它,而且它不包含任何机密(只有您的 KV 命名空间 id、公共 Azure 客户端 id 和 worker URL)。wrangler.jsonc.example带有相同的结构,但使用占位符,如果您希望从干净副本开始。真正的机密通过wrangler secret put传递,永远不会出现在此文件中。
3. 注册 Microsoft Azure AD 应用
转到 entra.microsoft.com → Identity → Applications → App registrations → New registration
名称:任意(例如 "Claude Outlook MCP")
支持的账户类型:
如果您想限制为单个租户,选择 "仅此组织目录中的账户"
选择 "任何组织目录中的账户和个人 Microsoft 账户" 以获得最广泛的支持
重定向 URI:暂时留空 — 您将在第 6 步之后回来
点击注册
从应用的概览页面记录:
应用程序(客户端)ID → 这是您的
MICROSOFT_CLIENT_ID目录(租户)ID → 这是您的
MICROSOFT_TENANT_ID(或使用字符串common以支持多租户 + 个人账户)
API 权限 → 添加以下 Microsoft Graph 委派权限:
Mail.ReadWrite、Mail.SendCalendars.ReadWriteContacts.ReadWriteTasks.ReadWriteFiles.Read.All(如果您想要可写文件工具,则使用Files.ReadWrite.All)User.Readoffline_access(刷新令牌必需)MailboxSettings.ReadWriteSites.Read.AllOnlineMeetings.ReadOnlineMeetingRecording.Read.All— 需要管理员同意OnlineMeetingTranscript.Read.All— 需要管理员同意
添加两个
.Read.All权限后,在 API 权限页面上点击 "为 [租户名称] 授予管理员同意"。没有管理员同意,会议录制 / 转录工具将返回 403。证书和机密 → 新建客户端机密 → 记录值(保存在 1Password 中)。这是您的
MICROSOFT_CLIENT_SECRET。您只能看到一次 — 立即复制。
4. 更新 wrangler.jsonc
编辑 wrangler.jsonc 并替换以下两项:
vars.MICROSOFT_CLIENT_ID— 使用第 3.6 步的应用程序 IDvars.MICROSOFT_TENANT_ID— 使用第 3.6 步的目录 ID(或common)
5. 设置机密
生成一个新的批准代码:
openssl rand -base64 32将其存储在密码管理器中,然后推送到 Cloudflare:
wrangler secret put MCP_APPROVAL_CODE # paste the value from above
wrangler secret put MICROSOFT_CLIENT_SECRET # from Step 3.8机密 | 用途 |
| 您在 |
| 您的 Azure AD 应用的客户端机密。 |
| 可选。服务器端附加的电子邮件签名块 — 请参阅 电子邮件签名。 |
| 可选。签名徽标的公开可访问 HTTPS URL。 |
6. 首次部署(以了解 worker URL)
npm run deployWrangler 会打印您的 worker URL — 类似 https://outlook-mcp.<your-account>.workers.dev。保存它。
7. 更新 WORKER_URL 和 Microsoft 重定向 URI
需要两项更新:
a) 编辑 wrangler.jsonc — 在 vars 下,将 WORKER_URL 替换为第 6 步的 URL。
b) 在 Azure AD 应用中(entra.microsoft.com → 您的应用 → 身份验证 → 添加平台 → Web),将重定向 URI 设置为 <your-worker-url>/oauth/callback。没有此设置,Microsoft 将拒绝 OAuth 流程。
然后重新部署:
npm run deploy8. 连接 Microsoft(一次性)
在浏览器中访问 <your-worker-url>/oauth/start。粘贴您的 MCP_APPROVAL_CODE。您将被重定向到 Microsoft 登录并授予第 3.7 步的范围。同意后,您的加密上游令牌将存入 OAUTH_KV。此后自动刷新。
您可以通过访问 <your-worker-url>/oauth/status 确认连接 — 应显示 connected: true。
9. 连接 Claude.ai
在 Claude.ai 中,转到 设置 → 集成 → 添加 MCP 服务器
服务器 URL:
<your-worker-url>/mcpClaude.ai 将您重定向到您 worker 的
/authorize页面粘贴您的
MCP_APPROVAL_CODE并确认您已连接 — Claude 现在拥有 38 个 Outlook + Teams 工具可用
电子邮件签名
可选。配置后,Worker 在发送时附加您的签名,因此调用代理永远不必重现它 — 它不能被改写、截断或遗忘。
将 include_signature: true 传递给 send_email、schedule_send、reply_to_email、forward_email、create_draft、update_draft、create_reply_draft、create_reply_all_draft 或 create_forward_draft 中的任意一个。它默认为 false,因此现有调用者不受影响。
对于草稿,签名在草稿创建时注入,而不是在发送时 — send_draft 只接受一个 id,从不接触正文。这意味着您发送前审查的是带签名的正文。在 update_draft 上,该标志仅在您同时传递新的 body 时适用(否则没有要签名的内容,并且它会用仅签名的正文替换草稿);这种情况在响应的 notes 中报告,而不是静默清除草稿。
日历邀请
create_calendar_event 和 update_calendar_event 接受相同的 include_signature 标志,将签名附加到事件的描述中。它重用与电子邮件相同的 SIGNATURE_HTML 块 — 包括其营销行动号召按钮 — 因此它更适合面向客户的邀请,而不是内部会议;这就是为什么它是每个事件选择加入的。update_calendar_event 遵循与 update_draft 相同的保护:该标志仅在您同时传递新的 description 时适用。
设置
cp signature-block.example.html signature-block.html # then edit it
wrangler secret put SIGNATURE_HTML < signature-block.html
wrangler secret put SIGNATURE_LOGO_URL # paste your HTTPS logo URLsignature-block.html 有意被 gitignore。签名是部署配置,而不是源代码:继承了已提交签名的 fork 会发送带有他人姓名、电话号码和预订链接的邮件。只有占位符 signature-block.example.html 被提交。
SIGNATURE_HTML 中的 __LOGO_URL__ 令牌在运行时替换为 SIGNATURE_LOGO_URL。
徽标必须可通过 HTTPS 公开访问。 邮件客户端从收件人的机器获取它 — 它无法访问您的网络、您的 Worker 的绑定或您持有的任何凭据。私有、经过身份验证或 localhost URL 对所有人都会呈现为损坏的图像。如果 SIGNATURE_LOGO_URL 未设置,则完全删除 <img>,而不是发出损坏的 src。
如果 SIGNATURE_HTML 未设置,该标志是静默无操作 — 邮件以无签名方式发送。未配置的部署永远不会出错。
行为
强制 HTML。 纯文本正文中的签名会呈现为可见的原始标记,因此只要设置了该标志,
body_type就会被覆盖为html。当您显式传递body_type: "text"时,覆盖会在工具响应的notes中报告,绝不会静默应用。纯文本正文被转义,然后换行符变为
<br>,因此您的换行在强制 HTML 切换后仍然存在,杂散的<字符不会变成标记。幂等。 如果正文已经带有签名 — 通过 Worker 自己的标记或签名的独特文本识别 — 则不会附加两次。
回复和转发将签名放在引用的原始内容之上,而不是整个线程的底部。
空正文仅发送签名,没有前导空行。
安全说明
签名在调用者的正文被清理之后连接。这是有意且关键的:sanitizeOutboundHtml 会剥离每个 style= 属性(仅属性 XSS 接收器),而签名完全由内联样式构建,因此通过清理器会剥离徽标大小、分隔线和 CTA 按钮。
这两个字符串具有不同的信任级别。正文是代理提供的且不受信任,因此仍然完全清理。签名是通过 wrangler secret put 设置的操作员提供的部署配置 — 任何能设置该机密的人已经可以直接更改 Worker。请参阅 src/signature.ts。
本地开发
cp .dev.vars.example .dev.vars # fill in MCP_APPROVAL_CODE + MICROSOFT_CLIENT_SECRET; .dev.vars is gitignored
npm test # 171 tests via vitest with workers pool
npm run typecheck # tsc --noEmit
npm run dev # wrangler dev — local at http://localhost:8787端点
GET /.well-known/oauth-authorization-server— OAuth 元数据(公开)GET /.well-known/oauth-protected-resource— 资源元数据(公开)GET /authorize— 审批码粘贴页面(公开)POST /approve— 审批码提交(限流)POST /token— OAuth 令牌交换(限流)POST /register— 按 RFC 7591 进行动态客户端注册(限流)GET /oauth/start— 开始 Microsoft OAuth 流程(由 MCP_APPROVAL_CODE 控制)GET /oauth/callback— Microsoft OAuth 重定向目标GET /oauth/status— 检查连接状态(由 MCP_APPROVAL_CODE 控制)POST /mcp— JSON-RPC 工具分发(Bearer 保护,限流)
技术栈
Cloudflare Workers (compatibility_date
2025-04-28,nodejs_compat)TypeScript(严格模式)
Hono v4
Zod v4
Vitest 搭配
@cloudflare/vitest-pool-workers(171 个测试)@bashco/mcp-toolkit— 共享的 OAuth/加密/限流/分发基础组件
安全架构要点
两遍 HTML 清理器,对出站邮件预览进行实体规范化
SSRF 防护,对出站 HTTP 进行 32 位 IP 规范化
Microsoft Graph odata 错误信封解析,用于结构化错误返回
按域划分的工具文件位于
src/tools/下(mail、calendar、contacts、tasks、files、meetings、settings),便于审计
持续部署
.github/workflows/deploy.yml 在每次推送到 main 时运行 vitest run,然后部署到 Cloudflare。要在你的 fork 上启用,请设置两个仓库密钥:
CLOUDFLARE_API_TOKEN— 在 dash.cloudflare.com/profile/api-tokens 创建(使用"Edit Cloudflare Workers"模板)CLOUDFLARE_ACCOUNT_ID— 在 Cloudflare 仪表板右下角查找
贡献
欢迎在 github.com/doublebash/outlook-mcp 提交 Issue 和 PR。
如需修改底层 OAuth/加密/限流代码,工具包位于 github.com/doublebash/mcp-toolkit — 请在那里提交 Issue。
安全
发现漏洞?请不要公开提交 Issue。请在 GitHub 上打开私有安全公告。
许可证
MIT — Copyright (c) 2026 Bashar Basheer。
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityAmaintenanceA Model Context Protocol server that enables interaction with Microsoft 365 services (Excel, Calendar, Mail, OneDrive, Teams, etc.) through the Graph API, allowing AI assistants to manage Microsoft 365 resources via natural language.18841,593937MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with Microsoft Outlook via the Microsoft Graph API for managing emails and calendar events. It allows users to read and send emails, list messages, and create calendar appointments with automatic Teams links.1
- AlicenseBqualityCmaintenanceEnables AI assistants to manage Microsoft Outlook email and calendar through the Microsoft Graph API, including reading, sending, searching emails, and handling calendar events.4310025MIT
- FlicenseNot gradedqualityDmaintenanceEnables LLMs to manage your Microsoft 365 calendar, tasks, and email via Microsoft Graph API, acting as a personal secretary.
Related MCP Connectors
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Sidd-doshi/outlook-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server