mcpField
M
MCP Desktop - Microsoft Cloud Platform Desktop Client

MCP Desktop - Microsoft Cloud Platform Desktop Client

本地服务
github.com/Aanerud生产力5530 周前更新

关于 MCP Desktop - Microsoft Cloud Platform Desktop Client

这是一个本地运行的 MCP 服务,通过 Microsoft Graph 连接 Microsoft 365,包括邮件、日历、文件、Teams 等。适合需要让 AI 代理在测试租户中执行真实操作的团队。

主要功能

  1. 01覆盖 117 个工具,分为 12 个模块
  2. 02支持 Excel、Word、PowerPoint 文件操作
  3. 03多用户隔离,每位用户独立认证
  4. 04令牌加密存储,不经第三方服务器

适用场景

  1. 01在测试租户中发送邮件并安排会议
  2. 02通过 Excel 工具生成预算表
  3. 03查询 Teams 频道消息与会议记录

MCP 相关

该服务向 MCP 客户端暴露 Microsoft 365 相关工具。客户端经由本地适配器(MCP Adapter)连接服务,服务再调用 Microsoft Graph API。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

MseeP.ai Security Assessment Badge

MCP Microsoft Office

一个 MCP 服务。支持多位用户。在测试租户中产生真实的 Microsoft 365 流量。


问题

测试租户往往空空如也。静态测试数据无法模拟真实工作流。当你需要让 Agent 发送真实邮件、安排真实会议,并在真实的 Teams 频道中协作时,模拟对象和存根就无法满足需求。

解决方案

本项目通过 Graph API,将任何兼容 MCP 的 AI 客户端连接到 Microsoft 365。每个 Agent 都以不同的租户用户身份进行身份验证,并对真实数据执行实际操作。

  • 117 个工具,涵盖 12 个模块:邮件、日历、文件、Excel、Word、PowerPoint、Teams、联系人、待办事项、群组、人员、搜索
  • 多用户:一个服务支持整个团队,每位用户的数据相互隔离
  • 真实的 Graph API 调用:每项操作都会访问实际租户,而不是模拟环境
  • 安全:令牌在静态存储时经过加密,不会将凭据存储在第三方服务上

架构

                    ┌──────────────────┐
                    │  MCP Client      │
                    │  (Claude, etc.)  │
                    └────────┬─────────┘
                             │ JSON-RPC (stdin/stdout)
                    ┌────────▼─────────┐
                    │  MCP Adapter     │
                    │  (runs locally)  │
                    └────────┬─────────┘
                             │ HTTP + Bearer Token
                    ┌────────▼─────────┐
                    │  MCP Server      │
                    │  (local or       │
                    │   remote)        │
                    └────────┬─────────┘
                             │ Microsoft Graph API
                    ┌────────▼─────────┐
                    │  Microsoft 365   │
                    │  (your tenant)   │
                    └──────────────────┘

由三部分组成:

  1. MCP 客户端——你交互的 AI
  2. MCP 适配器——一个 Node.js 进程,用于将 MCP 协议转换为 HTTP 请求(与客户端运行在同一台机器上)
  3. MCP 服务——负责身份验证并调用 Microsoft Graph API(在本地或远程服务上运行)

权限

该服务需要 18 项 Microsoft Graph 委托权限。其中 12 项无需管理员同意即可使用,另外 6 项需要租户管理员授权。

无需管理员同意
权限解锁的工具
User.Read身份验证、用户个人资料
Mail.ReadWritereadMail、readMailDetails、markEmailRead、flagMail、getMailAttachments、addMailAttachment、removeMailAttachment
Mail.SendsendMail、replyToMail
Calendars.ReadWritegetEvents、createEvent、updateEvent、cancelEvent、acceptEvent、tentativelyAcceptEvent、declineEvent、getAvailability、findMeetingTimes、getRooms、getCalendars、addAttachment、removeAttachment
Files.ReadWrite.AlllistFiles、uploadFile、downloadFile、getFileMetadata、getFileContent、setFileContent、updateFileContent、createSharingLink、getSharingLinks、removeSharingPermission、listChannelFiles、uploadFileToChannel、readChannelFile、所有 Excel 工作簿工具、所有 Word/PowerPoint 工具
Contacts.ReadWritelistContacts、getContact、createContact、updateContact、deleteContact、searchContacts
Tasks.ReadWritelistTaskLists、getTaskList、createTaskList、updateTaskList、deleteTaskList、listTasks、getTask、createTask、updateTask、deleteTask、completeTask
Chat.ReadWritelistChats、createChat、getChatMessages、sendChatMessage
Channel.ReadBasic.AlllistTeamChannels、getChannelMessages
ChannelMessage.SendsendChannelMessage、replyToMessage
Channel.CreatecreateTeamChannel
OnlineMeetings.ReadWritecreateOnlineMeeting、getOnlineMeeting、listOnlineMeetings、getMeetingByJoinUrl
需要管理员同意
权限解锁的其他工具
User.Read.All解析 Teams 中的用户 ID、搜索人员
People.Read.AllfindPeople、getRelevantPeople、getPersonById
Group.Read.AlllistGroups、getGroup、listGroupMembers、listMyGroups
ChannelMember.ReadWrite.AlladdChannelMember
ChannelMessage.Read.All读取频道消息历史记录
OnlineMeetingTranscript.Read.AllgetMeetingTranscripts、getMeetingTranscriptContent

未获得管理员同意时,你可以使用邮件、日历、文件、Excel 工作簿、Word 文档、PowerPoint 演示文稿、联系人、待办事项、聊天和基本的 Teams 频道操作。获得管理员同意后,还可以使用人员目录搜索、群组、频道成员管理和会议转录。


快速开始

前置条件
  • Node.js 18+(下载)
  • Claude Desktop(下载)或其他 MCP 客户端
  • Microsoft 365 账户(工作、学校或个人账户)
步骤 1:注册 Azure 应用
  1. 前往 Azure Portal > Microsoft Entra ID > App registrations > New registration
  2. 将其命名为 MCP-Microsoft-Office,并使用你偏好的账户类型注册
  3. 复制 Application (client) ID 和 Directory (tenant) ID
  4. 前往 API permissions > Add a permission > Microsoft Graph > Delegated permissions
  5. 添加上方列出的 18 项权限
  6. 如果你是租户管理员,请点击 Grant admin consent
  7. 前往 Authentication > Add a platform > Web
    • 重定向 URI:http://localhost:3000/api/auth/callback
    • 启用 Allow public client flows
步骤 2:克隆并配置
git clone https://github.com/Aanerud/MCP-Microsoft-Office.git
cd MCP-Microsoft-Office
npm install

将 .env.example 复制为 .env,并填写你的 Azure 应用详情:

MICROSOFT_CLIENT_ID=your-client-id
MICROSOFT_TENANT_ID=your-tenant-id
步骤 3:启动服务并进行身份验证
npm run dev:web

在浏览器中打开 http://localhost:3000。点击 Login with Microsoft,登录并授予权限。然后点击 Generate MCP Token 并复制令牌。

步骤 4:配置 Claude Desktop

编辑 Claude Desktop 配置文件:

macOS:~/Library/Application Support/Claude/claude_desktop_config.json Windows:%APPDATA%\Claude\claude_desktop_config.json

Claude Desktop 对每个 MCP 服务实际最多支持约 55 个工具。此项目提供 117 个工具,因此我们将其拆分到三个共用同一适配器和后端的服务中:

{
  "mcpServers": {
    "microsoft-365": {
      "command": "node",
      "args": ["/path/to/MCP-Microsoft-Office/mcp-adapter.cjs"],
      "env": {
        "MCP_SERVER_URL": "http://localhost:3000",
        "MCP_BEARER_TOKEN": "paste-your-token-here",
        "MCP_MODULES": "search,mail,calendar,files,people,contacts,groups,query"
      }
    },
    "microsoft-365-teams": {
      "command": "node",
      "args": ["/path/to/MCP-Microsoft-Office/mcp-adapter.cjs"],
      "env": {
        "MCP_SERVER_URL": "http://localhost:3000",
        "MCP_BEARER_TOKEN": "paste-your-token-here",
        "MCP_MODULES": "teams,todo"
      }
    },
    "microsoft-365-office": {
      "command": "node",
      "args": ["/path/to/MCP-Microsoft-Office/mcp-adapter.cjs"],
      "env": {
        "MCP_SERVER_URL": "http://localhost:3000",
        "MCP_BEARER_TOKEN": "paste-your-token-here",
        "MCP_MODULES": "excel,word,powerpoint,files"
      }
    }
  }
}

MCP_MODULES 用于筛选适配器提供的模块。省略此项即可提供全部 117 个工具(适用于没有工具数量限制的客户端)。

在 env 块中设置 MCP_DEBUG=1,即可将诊断日志输出到 stderr,有助于排查工具分发问题。

重启 Claude Desktop。可以询问:“我今天的日历上有什么?” 或 “创建一个包含预算表的 Excel 工作簿。”


工具(117)

邮件(9)
工具描述
readMail读取收件箱邮件
sendMail发送邮件
replyToMail回复邮件
readMailDetails获取完整邮件内容
markEmailRead将邮件标记为已读或未读
flagMail为邮件添加或移除标记
getMailAttachments列出邮件附件
addMailAttachment为邮件添加附件
removeMailAttachment从邮件中移除附件
日历(13)
工具描述
getEvents获取日历事件
createEvent创建会议或事件
updateEvent修改现有事件
cancelEvent取消事件
acceptEvent接受会议邀请
tentativelyAcceptEvent暂时接受邀请
declineEvent拒绝会议邀请
getAvailability查看空闲和忙碌时段
findMeetingTimes查找合适的会议时段
getRooms查找会议室
getCalendars列出所有日历
addAttachment为事件添加附件
removeAttachment移除事件附件
文件(10)
工具描述
listFiles列出 OneDrive 文件
uploadFile上传文件
downloadFile下载文件
getFileMetadata获取文件信息
getFileContent读取文件内容
setFileContent写入文件内容
updateFileContent更新现有文件
createSharingLink创建共享链接
getSharingLinks列出共享链接
removeSharingPermission移除共享访问权限
Excel(30)

直接操作存储在 OneDrive 或 SharePoint 中的 Excel 工作簿,无需下载文件。所有操作都通过 Microsoft Graph 的工作簿 API 执行,并透明地管理会话。

工具描述
createWorkbookSession打开工作簿会话(持久或临时)
closeWorkbookSession关闭活动工作簿会话
listWorksheets列出工作簿中的所有工作表
addWorksheet添加新工作表
getWorksheet按名称或 ID 获取工作表
updateWorksheet重命名、调整位置或隐藏工作表
deleteWorksheet删除工作表
getRange读取单元格值、公式和格式
updateRange写入单元格区域的值
getRangeFormat获取格式(字体、填充、边框)
updateRangeFormat设置格式(粗体、颜色、数字格式)
sortRange对区域中的单元格排序
mergeRange合并单元格
unmergeRange取消合并单元格
listTables列出工作表中的所有表格
createTable根据区域创建表格
updateTable重命名表格或更改其样式
deleteTable删除表格
listTableRows列出表格中的所有行
addTableRow向表格添加一行
deleteTableRow按索引删除一行
listTableColumns列出表格中的所有列
addTableColumn向表格添加一列
deleteTableColumn删除一列
sortTable按列对表格排序
filterTable对表格列应用筛选器
clearTableFilter清除列筛选器
convertTableToRange将表格转换回普通区域
callWorkbookFunction调用 300 多个 Excel 函数(SUM、VLOOKUP、PMT 等)
calculateWorkbook重新计算所有公式
Word(5)

创建、读取和转换 Word 文档。文档根据结构化 JSON 创建并存储在 OneDrive 中。读取时会使用多库回退链:mammoth(为 .docx 生成最佳 HTML)→ word-extractor(同时处理 .doc 和 .docx)→ webUrl 回退。二进制下载使用 Graph beta /contentStream 端点,以确保可靠传输二进制内容。

工具描述
createWordDocument根据结构化内容(标题、段落、表格、列表、图片)创建 .docx
readWordDocument以 HTML 和纯文本形式读取文档
getWordDocumentMetadata获取标题、作者、日期和关键词
getWordDocumentAsHtml将文档内容转换为 HTML
convertDocumentToPdf将 Word 文档转换为 PDF

注意: 某些 SharePoint 租户会在 .docx 文件上传后的几秒内将其转换为 OLE2 二进制格式。发生这种情况时,客户端解析库无法读取该文件。服务器会妥善回退,返回 webUrl,以便用户在浏览器中打开文档。

PowerPoint(4)

创建、读取和转换 PowerPoint 演示文稿。演示文稿根据结构化幻灯片数据生成并存储在 OneDrive 中。读取时会使用 Graph HTML 转换,并在失败时回退到 jszip 提取每张幻灯片的文本。

工具描述
createPresentation创建包含标题、内容和空白幻灯片的 .pptx
readPresentation读取幻灯片内容(每张幻灯片的文本元素)
getPresentationMetadata获取标题、作者、幻灯片数量和日期
convertPresentationToPdf将演示文稿转换为 PDF
Teams(21)
工具描述
listChats列出 Teams 聊天
createChat创建新聊天
getChatMessages读取聊天消息
sendChatMessage发送聊天消息
listJoinedTeams列出你的团队
listTeamChannels列出团队频道
createTeamChannel创建频道
addChannelMember将成员添加到频道
getChannelMessages读取频道消息
sendChannelMessage在频道中发布消息
replyToMessage回复频道消息
listChannelFiles列出频道中的文件
uploadFileToChannel将文件上传到频道
readChannelFile读取频道文件
createOnlineMeeting创建 Teams 会议
getOnlineMeeting获取会议详情
listOnlineMeetings列出在线会议
getMeetingByJoinUrl根据加入链接查找会议
getMeetingTranscripts获取会议转录文本
getMeetingTranscriptContent读取转录文本内容

(注意:addChannelMember 仅适用于私人频道。标准频道会自动包含所有团队成员。)

联系人(6)
工具描述
listContacts列出联系人
getContact获取联系人详情
createContact创建联系人
updateContact更新联系人信息
deleteContact删除联系人
searchContacts搜索联系人
待办事项(11)
工具描述
listTaskLists列出任务列表
getTaskList获取任务列表
createTaskList创建任务列表
updateTaskList重命名任务列表
deleteTaskList删除任务列表
listTasks列出任务
getTask获取任务详情
createTask创建任务
updateTask更新任务
deleteTask删除任务
completeTask将任务标记为已完成
群组(4)
工具描述
listGroups列出 Microsoft 365 群组
getGroup获取群组详情
listGroupMembers列出群组成员
listMyGroups列出你的群组
人员(3)
工具描述
findPeople搜索目录
getRelevantPeople获取常用联系人
getPersonById获取人员详情
搜索(1)
工具描述
search跨邮件、文件、日历事件和聊天消息进行统一搜索

多用户

每位用户独立进行身份验证。服务会根据用户身份隔离所有数据。

  Alice ([email protected])          Bob ([email protected])
  ├─ Her own Microsoft tokens        ├─ His own Microsoft tokens
  ├─ Her own session                  ├─ His own session
  └─ Claude Desktop (her laptop)     └─ Claude Desktop (his PC)

              Complete data isolation.
         Alice never sees Bob's data.

要使用多个 Agent 进行自动化测试,请使用 ROPC(资源所有者密码凭据)流程以编程方式进行身份验证:

# Start the server
npm run dev:web

# Run the E2E test suite (authenticates 3 users via ROPC)
node tests/run-all.cjs

测试套件会对多个用户进行身份验证,然后测试 12 个模块中的全部 117 个工具,以及 5 个跨模块工作流。完整实现请参见 tests/。


端到端测试套件

项目包含全面的测试套件,涵盖全部 117 个工具。

# Run all tests (requires server running)
node tests/run-all.cjs

# Run a single module
node tests/run-all.cjs --bucket mail --buckets-only

# Run only workflows
node tests/run-all.cjs --workflows-only

测试结构:

tests/
  lib/           Shared auth, HTTP client, reporter
  buckets/       One file per module (12 files, 117 tools)
  workflows/     Cross-module tests (5 files)
  run-all.cjs    Master runner

测试通过 ROPC 进行身份验证(无需手动管理令牌),运行时间约为 100 秒。


环境变量

将 .env.example 复制为 .env 并进行配置:

变量必需描述
MICROSOFT_CLIENT_ID是Azure 应用客户端 ID
MICROSOFT_TENANT_ID是Azure 租户 ID
MICROSOFT_REDIRECT_URI否OAuth 回调 URL(默认值:http://localhost:3000/api/auth/callback)
DEVICE_REGISTRY_ENCRYPTION_KEY生产环境用于令牌存储的 32 字节加密密钥
JWT_SECRET生产环境用于签署 JWT 令牌的密钥
CORS_ALLOWED_ORIGINS生产环境以逗号分隔的允许来源
PORT否服务端口(默认值:3000)
NODE_ENV否development 或 production

部署

本地(推荐用于入门)
npm install
npm run dev:web
Azure App Service

请参阅 docs/azure-deployment.md,了解使用 GitHub Actions 进行 CI/CD 部署。


安全性

  • 加密存储:所有 Microsoft 令牌静态存储时均使用 AES-256 加密
  • 无客户端密钥:桌面身份验证使用公共客户端流程(PKCE)
  • 令牌隔离:每位用户的令牌分别存储,并使用不同的加密密钥
  • 速率限制:内置速率限制功能,可防止滥用
  • CORS 保护:生产环境中使用来源允许列表
  • 会话过期:会话在 24 小时后过期
生产环境检查清单
  • 设置 NODE_ENV=production
  • 设置 DEVICE_REGISTRY_ENCRYPTION_KEY(32 字节)
  • 设置 JWT_SECRET(强随机字符串)
  • 设置 CORS_ALLOWED_ORIGINS
  • 使用带有有效证书的 HTTPS

项目结构

MCP-Microsoft-Office/
├── mcp-adapter.cjs          MCP protocol adapter (runs locally with Claude Desktop)
├── src/
│   ├── api/                 Express routes and controllers
│   ├── auth/                MSAL authentication (OAuth2, ROPC, token exchange)
│   ├── core/                Services (cache, storage, tools, error handling)
│   ├── graph/               Microsoft Graph API services
│   │   ├── graph-client.cjs   HTTP client with retry, binary support, sessions
│   │   ├── files-service.cjs  OneDrive file operations
│   │   ├── excel-service.cjs  Workbook API (sessions, ranges, tables, functions)
│   │   ├── word-service.cjs   Word create/read (docx + mammoth + word-extractor)
│   │   └── powerpoint-service.cjs  PPT create/read (pptxgenjs + jszip)
│   └── modules/             Feature modules (mail, calendar, excel, word, powerpoint, etc.)
├── public/                  Web UI for authentication
└── tests/                   E2E test suite (gitignored)

贡献

  1. Fork 此仓库
  2. 创建功能分支
  3. 完成更改
  4. 提交拉取请求

许可证

MIT 许可证——详见 LICENSE 文件。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。