内容
# @jbctechsolutions/mcp-office365
[](https://www.npmjs.com/package/@jbctechsolutions/mcp-office365)
[](https://opensource.org/licenses/MIT)
[](https://nodejs.org)
用于 Microsoft 365 的 MCP 服务器 - 邮件、日历、联系人、任务、团队、人员和计划。
一个 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 服务器,提供 **249 个工具**,用于通过 Microsoft Graph API 对 Microsoft 365 进行完全的读写访问。直接通过 MCP 管理您的电子邮件、日历事件、联系人、任务、OneNote 笔记、Teams 频道和聊天、人员目录和计划板。
## 功能概述
| 类别 | 工具 | 描述 |
|----------|------:|-------------|
| 邮件 - 读取 | 9 | 文件夹、搜索、增量同步、对话、未读计数 |
| 邮件 - 发送和草稿 | 16 | 发送、草稿、回复、转发,带有两步确认 |
| 邮件 - 签名 | 2 | 电子邮件签名管理 |
| 邮件 - 组织 | 24 | 已读/未读、标志、类别、重要性、移动、删除、批量操作 |
| 邮件 - 规则 | 4 | 收件箱规则管理 |
| 邮件 - 类别 | 4 | 主类别管理 |
| 邮件 - 重点收件箱 | 4 | 重点收件箱覆盖管理 |
| 邮件 - 设置和自动回复 | 4 | 自动回复、邮箱设置 |
| 邮件 - 提示和头部 | 3 | 邮件提示、消息头部、MIME 导出 |
| 附件 | 2 | 列出和下载电子邮件附件 |
| 日历 - 事件 | 11 | 列出、搜索、创建、更新、删除、RSVP、重复实例 |
| 日历 - 组 | 2 | 日历组管理 |
| 日历 - 权限 | 4 | 日历共享权限 |
| 日历 - 会议室 | 2 | 会议室列表和会议室 |
| 联系人和文件夹 | 13 | CRUD 联系人、联系人文件夹、照片 |
| 任务和任务列表 | 13 | 带有重复的待办任务、任务列表 |
| 检查列表项 | 5 | 待办任务的子任务 |
| 链接资源 | 4 | 待办任务的链接资源 |
| 任务附件 | 4 | 待办任务的文件附件 |
| OneNote | 6 | 浏览笔记本/章节/页面、搜索和创建页面 |
| 调度 | 2 | 空闲/忙碌可用性、会议时间建议 |
| 团队 - 频道 | 8 | 频道 CRUD、团队成员 |
| 团队 - 频道消息 | 6 | 读取和发送频道消息,带有回复 |
| 团队 - 聊天 | 6 | 1:1 和群聊、发送消息 |
| 人员和存在 | 8 | 人员搜索、组织图、存在状态 |
| 计划 | 18 | 计划、桶、任务、带有 ETag 的任务详情 |
| 共享邮箱 | 8 | 通过委托/共享访问读取另一个用户的邮箱、日历和 OneDrive |
| **总计** | **229** | |
## 快速入门
### 安装和运行
```bash
npx -y @jbctechsolutions/mcp-office365
```
服务器通过 **Microsoft Graph API**(跨平台、完全读写访问)连接到 Microsoft 365。
### 预认证(可选)
```bash
npx @jbctechsolutions/mcp-office365 auth
npx @jbctechsolutions/mcp-office365 auth --status
npx @jbctechsolutions/mcp-office365 auth --logout
```
### 服务器标志
在启动服务器时传递这些标志(在任何子命令之后),以限定暴露的工具表面:
| 标志 | 效果 |
| --- | --- |
| `--preset <names>` | 仅暴露列出的域(逗号分隔)。可重复。默认(或 `all`)暴露完整表面。 |
| `--read-only` | 仅暴露只读工具(`readOnlyHint: true`)。所有写入、`prepare_*`/`confirm_*` 和破坏性工具都被隐藏;调用其中一个将返回 `READ_ONLY_MODE` 错误。注意:`download_*` 和 `get_*_photo` 工具也被排除 - 它们将获取的字节写入本地磁盘,因此不是只读的。 |
| `--confirm <mode>` | 破坏性 `prepare_*` 如何寻求确认。`token`(默认)返回一个批准令牌,以传递给匹配的 `confirm_*` 工具。`elicit` 在线询问用户(MCP 诱导,~60s),并在批准后立即执行;如果客户端无法诱导,用户取消或超时,则回退到令牌流程。明确拒绝取消并使令牌无效。 |
有效预设:`mail`、`calendar`、`contacts`、`tasks`、`notes`、`teams`、`planner`、`files`、`sharepoint`、`excel`、`people`、`meetings`、`shared`(以及 `all`)。未知的预设名称将启动失败,并带有有效列表。
```bash
# 仅限邮件和日历,只读
npx @jbctechsolutions/mcp-office365 --preset mail,calendar --read-only
```
在客户端配置中,将它们添加到 `args`:
```json
{
"mcpServers": {
"office365": {
"command": "npx",
"args": ["-y", "@jbctechsolutions/mcp-office365", "--preset", "mail,calendar", "--read-only"]
}
}
}
```
### Claude Desktop 配置
添加到 `~/Library/Application Support/Claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"office365": {
"command": "npx",
"args": ["-y", "@jbctechsolutions/mcp-office365"]
}
}
}
```
### Claude Code 配置
**选项 1:插件(推荐)** - 添加到 `~/.claude/settings.json`:
```json
{
"extraKnownMarketplaces": {
"jbctechsolutions": {
"source": {
"source": "github",
"repo": "jbctechsolutions/mcp-office365"
}
}
},
"enabledPlugins": {
"office365@jbctechsolutions": true
}
}
```
**选项 2:手动** - 在项目中或全局添加到 `~/.claude/.mcp.json`:
```json
{
"mcpServers": {
"office365": {
"command": "npx",
"args": ["-y", "@jbctechsolutions/mcp-office365"]
}
}
}
```
## 身份验证
### 设备代码流(Graph API)
1. 服务器显示设备代码和 URL
2. 访问 https://microsoft.com/devicelogin
3. 输入代码并使用您的 Microsoft 帐户登录
4. 授予请求的权限
令牌存储在 `~/.outlook-mcp/tokens.json` 中,并自动刷新。
### Azure AD 应用注册(必需)
没有嵌入应用注册 - 设备代码登录需要一个属于您登录的租户的应用,因此您必须注册自己的应用并设置 `OUTLOOK_MCP_CLIENT_ID`(和 `OUTLOOK_MCP_TENANT_ID`,适用于单租户应用)。如果未设置 `OUTLOOK_MCP_CLIENT_ID`,服务器将快速失败并提供设置指南。
1. **注册** 在 [Azure 门户](https://portal.azure.com) > Azure Active Directory > 应用注册 > 新注册
- 名称:`Outlook MCP Server`
- 支持的帐户类型:单租户适用于一个组织,或多租户允许其他租户(多租户 + 个人帐户可能需要 Microsoft 发布者验证)
- 重定向 URI:留空
2. **添加 API 权限**(Microsoft Graph > 委托):参见下面的 [必需 Graph API 权限](#required-graph-api-permissions)
3. **启用公共客户端流**: 身份验证 > 高级设置 > 允许公共客户端流 > 是
4. **配置** 环境变量:
```json
{
"mcpServers": {
"office365": {
"command": "npx",
"args": ["-y", "@jbctechsolutions/mcp-office365"],
"env": {
"OUTLOOK_MCP_CLIENT_ID": "your-client-id-here",
"OUTLOOK_MCP_TENANT_ID": "common"
}
}
}
}
```
**租户选项:** `common`(所有帐户)、`organizations`(仅限工作/学校)、`consumers`(仅限个人)或特定的租户 ID。
## 远程连接器模式(claude.ai)
除了上述本地 stdio 模式外,服务器还可以作为 **远程 HTTP 连接器** 运行,以便可以将其作为自定义连接器添加到 claude.ai(web/desktop)- 多用户,每个调用者都使用自己的 Entra ID 进行身份验证,并通过 On-Behalf-Of 访问自己的 Microsoft 365 数据。
```bash
# 本地开发(仅限环回,无身份验证):
npx @jbctechsolutions/mcp-office365 serve --port 3000
# 已部署(需要身份验证):设置 OUTLOOK_MCP_CONNECTOR_URL 和 Entra 环境变量。
node dist/index.js serve --host 0.0.0.0 --port 8080
```
它在 `POST /mcp` 处提供无状态 Streamable HTTP,在 `GET /healthz` 处提供健康检查,在 `/.well-known/oauth-protected-resource` 处提供 RFC 9728 发现文档。 当设置了 `OUTLOOK_MCP_CONNECTOR_URL` 时,身份验证会自动打开;如果没有设置,服务器拒绝任何非环回绑定,因此它永远不会未经身份验证而暴露。
操作子命令(在部署主机上运行):
| 命令 | 目的 |
| --- | --- |
| `serve` | 运行远程连接器(标志:`--host`、`--port`,以及上述 `--preset`/`--read-only`/`--confirm` 表面标志,作为进程范围的绑定)。 |
| `revoke <oid>` | 下线用户:拒绝他们的 Entra oid + 清除他们的持久状态。`--readmit <oid>`、`--list`。 |
| `audit` | 读取写入/破坏性审计轨迹。`--user <oid>`、`--since <iso\|ms>`、`--limit <n>`。 |
远程模式添加 **每用户权限**(固定的工具表面,可按用户扩大)、**撤销** 和持久的 **审计日志**,记录每条写入。完整的设置、环境合同、部署要求、成本估算和用户指南位于 [`docs/remote/`](./docs/remote/):[部署](./docs/remote/deployment.md) · [配置](./docs/remote/provisioning.md) · [用户指南](./docs/remote/user-guide.md) · [试点运行手册](./docs/remote/pilot-runbook.md)。
## 工具参考
以下列出了全部 249 种工具。
<details>
<summary><strong>邮件 -- 阅读 (9)</strong></summary>
| 工具 | 描述 |
|------|-------------|
| `list_folders` | 列出所有邮件文件夹,并显示邮件数量和未读数量 |
| `list_emails` | 列出文件夹中的邮件,并支持分页 |
| `search_emails` | 按主题、发件人或内容搜索邮件 |
| `search_emails_advanced` | 使用 KQL(关键词查询语言)进行高级邮件搜索 *(Graph API)* |
| `check_new_emails` | 通过增量同步检查自上次检查以来是否有新的或更改的邮件 *(Graph API)* |
| `get_email` | 获取完整的邮件详情,包括邮件正文 |
| `get_emails` | 一次获取多个邮件的 ID(最多 25 个) |
| `list_conversation` | 列出电子邮件对话或线程中的所有消息 *(Graph API)* |
| `get_unread_count` | 获取未读邮件数量 |
</details>
<details>
<summary><strong>邮件 -- 发送与草稿 (16)</strong></summary>
| 工具 | 描述 |
|------|-------------|
| `send_email` | 发送电子邮件,可选 CC、BCC、附件和 HTML |
| `create_draft` | 创建草稿邮件,以便稍后编辑和发送 |
| `update_draft` | 更新现有的草稿邮件 |
| `add_draft_attachment` | 添加文件附件到草稿邮件 *(Graph API)* |
| `add_draft_inline_image` | 添加内联图片到草稿邮件的 HTML 正文 *(Graph API)* |
| `list_drafts` | 列出所有草稿邮件 |
| `prepare_send_draft` | 准备发送草稿邮件(两步确认) |
| `confirm_send_draft` | 确认并发送草稿邮件 |
| `prepare_send_email` | 准备立即发送邮件(两步确认) |
| `confirm_send_email` | 确认并发送邮件 |
| `prepare_reply_email` | 准备回复邮件(两步确认) |
| `confirm_reply_email` | 确认并发送回复邮件 |
| `prepare_forward_email` | 准备转发邮件(两步确认) |
| `confirm_forward_email` | 确认并转发邮件 |
| `reply_as_draft` | 创建可编辑的回复或转发草稿 |
| `forward_as_draft` | 创建可编辑的转发草稿 |
</details>
<details>
<summary><strong>邮件 -- 组织 (24)</strong></summary>
| 工具 | 描述 |
|------|-------------|
| `mark_email_read` | 将邮件标记为已读 |
| `mark_email_unread` | 将邮件标记为未读 |
| `set_email_flag` | 在邮件上设置跟进标记 |
| `clear_email_flag` | 清除邮件的跟进标记 |
| `set_email_categories` | 在邮件上设置类别 |
| `set_email_importance` | 设置邮件的重要性级别(低、正常、高) *(Graph API)* |
| `create_folder` | 创建新的邮件文件夹 |
| `rename_folder` | 重命名邮件文件夹 |
| `move_folder` | 将邮件文件夹移动到不同的父文件夹下 |
| `prepare_delete_email` | 准备删除邮件(两步确认) |
| `confirm_delete_email` | 确认删除邮件 |
| `prepare_move_email` | 准备将邮件移动到另一个文件夹(两步确认) |
| `confirm_move_email` | 确认邮件移动 |
| `prepare_archive_email` | 准备存档邮件(两步确认) |
| `confirm_archive_email` | 确认邮件存档 |
| `prepare_junk_email` | 准备将邮件标记为垃圾邮件(两步确认) |
| `confirm_junk_email` | 确认标记为垃圾邮件 |
| `prepare_delete_folder` | 准备删除邮件文件夹(两步确认) |
| `confirm_delete_folder` | 确认删除文件夹 |
| `prepare_empty_folder` | 准备清空文件夹(两步确认) |
| `confirm_empty_folder` | 确认清空文件夹 |
| `prepare_batch_delete_emails` | 准备批量删除多封邮件(两步确认) |
| `prepare_batch_move_emails` | 准备批量移动多封邮件(两步确认) |
| `confirm_batch_operation` | 确认批量删除或移动操作 |
</details>
<details>
<summary><strong>邮件 -- 规则 (4)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `list_mail_rules` | 列出所有收件箱邮件规则 |
| `create_mail_rule` | 创建具有条件和操作的收件箱规则 |
| `prepare_delete_mail_rule` | 准备删除邮件规则(两步确认) |
| `confirm_delete_mail_rule` | 确认删除邮件规则 |
</details>
<details>
<summary><strong>邮件 -- 类别 (4)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `list_categories` | 列出所有主类别 |
| `create_category` | 创建具有颜色预设的新主类别 |
| `prepare_delete_category` | 准备删除主类别(两步确认) |
| `confirm_delete_category` | 确认删除类别 |
</details>
<details>
<summary><strong>邮件 -- 焦点收件箱 (4)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `list_focused_overrides` | 列出所有焦点收件箱覆盖 |
| `create_focused_override` | 为发件人创建焦点收件箱覆盖 |
| `prepare_delete_focused_override` | 准备删除焦点收件箱覆盖(两步确认) |
| `confirm_delete_focused_override` | 确认删除焦点收件箱覆盖 |
</details>
<details>
<summary><strong>邮件 -- 设置与自动回复 (4)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `get_automatic_replies` | 获取自动回复(外出)设置 |
| `set_automatic_replies` | 设置自动回复(外出)设置 |
| `get_mailbox_settings` | 获取邮箱设置(语言、时区、格式、工作时间) |
| `update_mailbox_settings` | 更新邮箱设置(语言、时区、格式) |
</details>
<details>
<summary><strong>邮件 -- 提示与头部 (3)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `get_mail_tips` | 获取地址的邮件提示(自动回复、邮箱已满、限制) |
| `get_message_headers` | 获取互联网消息头部(SPF、DKIM、路由) |
| `get_message_mime` | 下载邮件的完整 MIME 内容(.eml) |
</details>
<details>
<summary><strong>附件 (2)</strong></summary>
| 工具 | 描述 |
|------|-------------|
| `list_attachments` | 列出邮件附件的元数据(名称、大小、类型) |
| `download_attachment` | 将邮件附件下载到磁盘 |
</details>
<details>
<summary><strong>日历 -- 事件 (11)</strong></summary>
| 工具 | 描述 |
|------|-------------|
| `list_calendars` | 列出所有日历文件夹 |
| `list_events` | 列出日历事件,并支持日期范围筛选 |
| `get_event` | 获取事件详情 |
| `search_events` | 按标题和/或日期范围搜索事件 |
| `create_event` | 创建日历事件(支持 Teams 在线会议) |
| `update_event` | 更新事件详情(单个实例或系列) |
| `respond_to_event` | 接受、拒绝或暂时接受邀请 |
| `delete_event` | 删除日历事件或循环系列 |
| `prepare_delete_event` | 准备删除日历事件(两步确认) *(Graph API)* |
| `confirm_delete_event` | 确认删除日历事件 |
| `list_event_instances` | 在日期范围内列出循环事件的实例 *(Graph API)* |
</details>
<details>
<summary><strong>日历 -- 群组 (2)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `list_calendar_groups` | 列出所有日历群组 |
| `create_calendar_group` | 创建新的日历群组 |
</details>
<details>
<summary><strong>日历 -- 权限 (4)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `list_calendar_permissions` | 列出日历的共享权限 |
| `create_calendar_permission` | 通过创建权限共享日历 |
| `prepare_delete_calendar_permission` | 准备删除日历权限(两步确认) |
| `confirm_delete_calendar_permission` | 确认删除日历权限 |
</details>
<details>
<summary><strong>日历 -- 会议室 (2)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `list_room_lists` | 列出所有会议室列表(建筑/楼层分组) |
| `list_rooms` | 列出会议室,可选按会议室列表筛选 |
</details>
<details>
<summary><strong>联系人与文件夹 (13)</strong></summary>
| 工具 | 描述 |
|------|-------------|
| `list_contacts` | 列出联系人,并支持分页 |
| `search_contacts` | 按姓名搜索联系人 |
| `get_contact` | 获取联系人详情 |
| `create_contact` | 创建新的联系人 *(Graph API)* |
| `update_contact` | 更新联系人详情 *(Graph API)* |
| `prepare_delete_contact` | 准备删除联系人(两步确认) *(Graph API)* |
| `confirm_delete_contact` | 确认删除联系人 |
| `get_contact_photo` | 下载联系人的照片 *(Graph API)* |
| `set_contact_photo` | 设置或更新联系人的照片 *(Graph API)* |
| `list_contact_folders` | 列出所有联系人文件夹 *(Graph API)* |
| `create_contact_folder` | 创建联系人文件夹 *(Graph API)* |
| `prepare_delete_contact_folder` | 准备删除联系人文件夹(两步确认) *(Graph API)* |
| `confirm_delete_contact_folder` | 确认删除联系人文件夹 |
</details>
<details>
<summary><strong>任务与任务列表 (13)</strong></summary>
| 工具 | 描述 |
|------|-------------|
| `list_task_lists` | 列出所有任务列表(Microsoft To Do) *(Graph API)* |
| `list_tasks` | 列出任务,并支持分页和筛选 |
| `search_tasks` | 按名称搜索任务 |
| `get_task` | 获取任务详情 |
| `create_task` | 创建具有可选重复的任务 *(Graph API)* |
| `update_task` | 更新任务详情,并支持可选重复 *(Graph API)* |
| `complete_task` | 将任务标记为已完成 *(Graph API)* |
| `create_task_list` | 创建新的任务列表 *(Graph API)* |
| `rename_task_list` | 重命名任务列表 *(Graph API)* |
| `prepare_delete_task` | 准备删除任务(两步确认) *(Graph API)* |
| `confirm_delete_task` | 确认删除任务 |
| `prepare_delete_task_list` | 准备删除任务列表(两步确认) *(Graph API)* |
| `confirm_delete_task_list` | 确认删除任务列表 |
</details>
<details>
<summary><strong>检查项 (5)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `list_checklist_items` | 列出 To Do 任务的检查项(子任务) |
| `create_checklist_item` | 在 To Do 任务上创建检查项 |
| `update_checklist_item` | 更新检查项(切换选中状态,重命名) |
| `prepare_delete_checklist_item` | 准备删除检查项(两步确认) |
| `confirm_delete_checklist_item` | 确认删除检查项 |
</details>
<details>
<summary><strong>链接资源 (4)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `list_linked_resources` | 列出 To Do 任务的链接资源 |
| `create_linked_resource` | 在 To Do 任务上创建链接资源 |
| `prepare_delete_linked_resource` | 准备删除链接资源(两步确认) |
| `confirm_delete_linked_resource` | 确认删除链接资源 |
</details>
<details>
<summary><strong>任务附件 (4)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `list_task_attachments` | 列出 To Do 任务的附件 |
| `create_task_attachment` | 将文件附加到 To Do 任务(base64 编码) |
| `prepare_delete_task_attachment` | 准备删除任务附件(两步确认) |
| `confirm_delete_task_attachment` | 确认删除任务附件 |
</details>
<details>
<summary><strong>OneNote (6)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `list_notebooks` | 列出当前用户的 OneNote 笔记本 |
| `list_note_sections` | 列出 OneNote 章节,可选限定在笔记本范围内 |
| `list_note_pages` | 列出 OneNote 页面,可选限定在章节范围内 |
| `get_note_page` | 获取 OneNote 页面的元数据和 HTML 内容 |
| `search_note_pages` | 按关键词搜索 OneNote 页面 |
| `create_note_page` | 在章节中创建新的 OneNote 页面 |
</details>
<details>
<summary><strong>调度 (2)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `check_availability` | 检查给定时间窗口内人员的空闲/忙碌可用性 |
| `find_meeting_times` | 为一组与会者查找可用的会议时间段 |
</details>
<details>
<summary><strong>邮件 -- 签名 (2)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `set_signature` | 保存自动附加到外发邮件的邮件签名 |
| `get_signature` | 获取当前存储的邮件签名 |
</details>
<details>
<summary><strong>Teams -- 频道 (8)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `list_teams` | 列出用户加入的所有 Microsoft Teams |
| `list_channels` | 列出团队中的所有频道 |
| `get_channel` | 获取特定频道的详情 |
| `create_channel` | 在团队中创建新的频道 |
| `update_channel` | 更新频道名称或描述 |
| `prepare_delete_channel` | 准备删除频道(两步确认) |
| `confirm_delete_channel` | 确认删除频道 |
| `list_team_members` | 列出团队的所有成员 |
</details>
<details>
<summary><strong>Teams -- 频道消息 (6)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `list_channel_messages` | 列出频道中的最近消息 |
| `get_channel_message` | 获取特定频道消息及其回复 |
| `prepare_send_channel_message` | 准备发送频道消息(两步确认) |
| `confirm_send_channel_message` | 确认发送频道消息 |
| `prepare_reply_channel_message` | 准备回复频道消息(两步确认) |
| `confirm_reply_channel_message` | 确认回复频道消息 |
</details>
<details>
<summary><strong>Teams -- 聊天 (6)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `list_chats` | 列出最近的 1:1 和群聊 |
| `get_chat` | 获取特定聊天的详情 |
| `list_chat_messages` | 列出聊天中的最近消息 |
| `prepare_send_chat_message` | 准备发送聊天消息(两步确认) |
| `confirm_send_chat_message` | 确认发送聊天消息 |
| `list_chat_members` | 列出聊天的成员 |
</details>
<details>
<summary><strong>人员与存在 (8)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `list_relevant_people` | 列出当前用户相关的 AI 排名人员 |
| `search_people` | 按姓名或电子邮件搜索人员 |
| `get_manager` | 获取当前用户的经理 |
| `get_direct_reports` | 获取当前用户的直接报告 |
| `get_user_profile` | 获取用户的个人资料信息 |
| `get_user_photo` | 获取用户的个人资料照片 |
| `get_user_presence` | 获取用户的存在/可用性状态 |
| `get_users_presence` | 批量获取多个用户的存在状态 |
</details>
<details>
<summary><strong>计划 (23)</strong> <em>(Graph API)</em></summary>
| 工具 | 描述 |
|------|-------------|
| `list_plans` | 列出用户可访问的所有计划 |
| `get_plan` | 获取特定计划的详情 |
| `create_plan` | 在 Microsoft 365 组中创建新的计划 |
| `update_plan` | 更新计划标题 |
| `list_buckets` | 列出计划中的所有桶 |
| `create_bucket` | 在计划中创建新的桶 |
| `update_bucket` | 更新计划桶名称 |
| `prepare_delete_bucket` | 准备删除计划桶(两步确认) |
| `confirm_delete_bucket` | 确认删除计划桶 |
| `list_planner_tasks` | 列出计划中的所有任务 |
| `list_my_planner_tasks` | 列出分配给登录用户的计划任务 |
| `get_planner_task` | 获取特定计划任务的详情 |
| `create_planner_task` | 在计划中创建新的任务 |
| `update_planner_task` | 更新计划任务 |
| `prepare_delete_planner_task` | 准备删除计划任务(两步确认) |
| `confirm_delete_planner_task` | 确认删除计划任务 |
| `get_planner_task_details` | 获取任务详情(描述、检查清单、引用) |
| `update_planner_task_details` | 更新任务详情(需要 get_planner_task_details 的 ETag) |
| `list_planner_task_messages` | 列出任务的聊天评论(评论选项卡) *(Graph API beta)* |
| `create_planner_task_message` | 发布任务评论,可选 @提及 *(Graph API beta; Tasks.ReadWrite)* |
| `update_planner_task_message` | 更新任务评论 *(Graph API beta; Tasks.ReadWrite)* |
| `prepare_delete_planner_task_message` | 准备删除任务评论(两步确认) *(Graph API beta)* |
| `confirm_delete_planner_task_message` | 确认删除任务评论 *(Graph API beta)* |
</details>
<details>
<summary><strong>共享邮箱 (8)</strong> <em>(Graph API)</em></summary>
读取其他用户的邮箱、日历或 OneDrive,需通过 `/users/{upn}/...` 接口,使用登录用户具有的代理/共享访问权限 (`Mail.Read.Shared` / `Calendars.Read.Shared` / `Files.Read.All`). 只读。返回 **原始 Graph ID** (不是耐用令牌,作用域限定在您自己的 `/me` 邮箱);将 `mailbox` 和原始 ID 传回匹配的 `get_*` 工具。
</details>
## 工具列表
| 工具 | 描述 |
| --- | --- |
| `list_shared_mailbox_folders` | 列出共享/委托邮箱的文件夹 |
| `list_shared_mailbox_emails` | 列出共享/委托邮箱中的电子邮件(可选,按文件夹) |
| `get_shared_mailbox_email` | 通过原始 Graph ID 获取共享/委托邮箱中的单个电子邮件 |
| `search_shared_mailbox_emails` | 对共享/委托邮箱进行全文搜索 |
| `list_shared_calendar_events` | 列出其他用户日历中的事件(可选,在时间范围内) |
| `get_shared_calendar_event` | 通过原始 Graph ID 获取其他用户日历中的单个事件 |
| `list_shared_user_drive_items` | 列出其他用户 OneDrive 中的项目(根目录或文件夹) |
| `search_shared_user_drive_items` | 搜索其他用户的 OneDrive |
</details>
## 架构
服务器通过 **Microsoft Graph API** 连接到 Microsoft 365 云服务。所有 249 个工具都具有完全的读写权限。不需要安装 Outlook。可在 macOS、Windows 和 Linux 上运行。
### 两步确认
破坏性操作(删除、发送、移动、转发等)使用准备/确认模式。`prepare_*` 调用返回预览和短时限确认令牌。`confirm_*` 调用仅在令牌有效时执行操作。这可以防止意外数据丢失。
### ID 缓存
服务器维护一个内部 ID 映射层,为 Graph API 资源分配稳定、持久的标识符令牌,这样工具调用者就不必跟踪原始 Graph 对象 ID。
### ETag 缓存
Planner 资源使用基于 ETag 的并发控制。服务器缓存读取操作中的 ETag,并在更新/删除请求中自动包含它们,以防止冲突。
### 源代码布局
```
src/
graph/ Microsoft Graph API 集成
auth/ MSAL 身份验证、设备代码流、令牌缓存
client/ 带有响应缓存的 Graph 客户端包装器
mappers/ Graph 到内部类型映射器
tools/ MCP 工具实现(mail-send、mailbox-organization 等)
types/ TypeScript 类型定义
utils/ 日期解析、错误处理、实用程序
```
## 所需的 Graph API 权限
这些委托权限通过 Microsoft Graph 请求:
| 权限 | 目的 |
| --- | --- |
| `Mail.ReadWrite` | 读取、创建和管理邮件及草稿 |
| `Mail.Send` | 以登录用户身份发送邮件 |
| `Calendars.ReadWrite` | 读取和管理日历事件 |
| `Contacts.ReadWrite` | 读取和管理联系人 |
| `Tasks.ReadWrite` | 读取和管理待办任务 |
| `User.Read` | 读取用户配置文件 |
| `offline_access` | 令牌刷新(保持访问权限) |
| `ChannelMessage.Read.All` | 读取 Teams 频道消息 |
| `ChannelMessage.Send` | 发送 Teams 频道消息 |
| `Channel.ReadBasic.All` | 读取 Teams 频道元数据 |
| `Team.ReadBasic.All` | 读取 Teams 元数据 |
| `Chat.ReadWrite` | 读取和发送 Teams 聊天消息 |
| `ChatMessage.Send` | 发送 Teams 聊天消息 |
| `People.Read` | 读取相关人员 |
| `User.ReadBasic.All` | 读取基本用户配置文件和照片 |
| `Presence.Read.All` | 读取用户存在/可用性 |
| `Group.Read.All` | 读取 Microsoft 365 组(适用于 Planner) |
| `Mail.Read.Shared` | 读取共享/委托邮箱中的邮件 |
| `Calendars.Read.Shared` | 读取共享/委托日历 |
| `Files.Read.All` | 读取其他用户的 OneDrive 文件(共享/委托访问) |
| `Sites.ReadWrite.All` | 读取和写入 SharePoint 站点和文档库 |
> **升级?** 这些是委托范围,因此对列表的任何更改都需要 **重新同意** — 重新运行 `npx @jbctechsolutions/mcp-office365 auth --force`,以便刷新令牌携带新的权限。如果发送或 SharePoint 写入失败,出现 `GRAPH_PERMISSION_DENIED`,则您的令牌早于 `Mail.Send` / `Sites.ReadWrite.All` 范围;请重新身份验证以获取它们。(通过 `OUTLOOK_MCP_CLIENT_ID` 的自定义应用程序注册也必须在 Azure AD 中添加这些委托权限 — `Sites.ReadWrite.All` 可能需要管理员同意。)
## 环境变量
| 变量 | 描述 | 默认值 |
| --- | --- | --- |
| `OUTLOOK_MCP_CLIENT_ID` | Azure AD 应用程序(客户端)ID | **(必填)** |
| `OUTLOOK_MCP_TENANT_ID` | Azure AD 租户 ID(单租户应用必填) | `common` |
## 贡献
我们欢迎贡献。请参阅我们的 [贡献指南](CONTRIBUTING.md) 以获取详细信息。
**支持政策:** 这是一个兼职、业余项目。响应时间是尽力而为(通常 1-2 周内回复 bug 报告)。请参阅 [SUPPORT.md](SUPPORT.md) 以获取详细信息。
该项目遵守我们的 [行为准则](CODE_OF_CONDUCT.md)。
## 支持该项目
- 给此仓库加星
- [GitHub 赞助者](https://github.com/sponsors/jbctechsolutions)
- [给我买杯咖啡](https://buymeacoffee.com/jbctechsolutions)
- [PayPal](https://paypal.me/jbctechsolutions)
## 许可证
MIT 许可证 -- Copyright (c) 2026 JBC Tech Solutions, LLC. 请参阅 [LICENSE](LICENSE) 以获取详细信息。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器