Microsoft Graph MCP服务器

为AI助手提供Microsoft 365集成的MCP服务器,支持访问Outlook、OneDrive、Calendar、Teams等服务并自动化工作流程。

  • by easynet-world
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 easynet-world/7160-microsoft-graph-mcp

使用说明

微软图形mcp

🚀 Microsoft Graph MCP Server

用于AI助手的Microsoft 365集成 -将Cursor、Claude Desktop和其他MCP兼容工具直接连接到Microsoft Graph。访问Outlook、OneDrive、日历、团队,并使用AI自动化工作流程。


✅ 我们提供什么(这个项目)

可交付成果 描述
支持AI的MCP服务器 将Microsoft Graph功能作为AI助手的MCP工具公开
用于Microsoft Graph的REST网关 本地HTTP API,带有位于的OpenAPI/Swagger /docs
预构建的Microsoft 365端点 用户、邮件(发送/回复/转发)、日历(CRUD事件)、文件/OneDrive(列表/上传/删除)、团队(团队/频道)、组(成员)、联系人、任务、订阅(Webhook)、应用程序、目录、组织、人员
通过Azure AD进行身份验证 应用程序注册流程使用 AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID
生产就绪脚手架 端口/配置管理、错误处理、健康检查、API信息、日志记录
经过测试的TypeScript实现 使用Jest测试覆盖所有端点的类型安全代码
开发人员用户体验 可复制粘贴 curl 例如,Swagger尝试一下,很容易在本地运行 npx
安全态势 使用应用程序权限;服务器未保存任何数据

📊 Microsoft图形概述

Microsoft Graph跨Microsoft 365服务(团队、日历、文件、邮件、人员、任务等)连接用户、他们的活动和内容。此MCP服务器为AI助手提供了直接访问此统一数据层的权限。


🚀 快速开始

安装方法

方法 命令 最适合
npx(推荐) npx microsoft-graph-mcp 快速测试,无需安装
npm全局 npm install -g microsoft-graph-mcp 频繁使用,全系统访问
npm本地 npm install microsoft-graph-mcp 项目特定集成
克隆和构建 git clone && npm install && npm run build 开发和定制

使用npx运行(推荐)

AZURE_CLIENT_ID=your-client-id \
AZURE_CLIENT_SECRET=your-client-secret \
AZURE_TENANT_ID=your-tenant-id \
npx microsoft-graph-mcp

就是这样! 服务器运行在:

服务 URL 备注
REST API http://localhost:8887 所有端点的基本URL
API文档(Swagger) http://localhost:8887/docs 交互式文档
MCP服务器 http://localhost:8888 模型上下文协议服务器

使用.env文件运行

创建一个 .env 文件:

AZURE_CLIENT_ID=your-client-id
AZURE_CLIENT_SECRET=your-client-secret
AZURE_TENANT_ID=your-tenant-id

然后运行:

npx microsoft-graph-mcp

📋 Azure配置

配置步骤概述

步骤 操作 查找位置 环境变量
1 创建应用程序注册 Azure门户 → Azure AD→ 应用程序注册 -
2 复制应用程序(客户端)ID 应用程序注册→ 概述 AZURE_CLIENT_ID
3 复制目录(租户)ID 应用程序注册→ 概述 AZURE_TENANT_ID
4 创建客户端密码 应用程序注册→ 证书和秘密 AZURE_CLIENT_SECRET
5 添加API权限 应用程序注册→ API权限 -
6 授予管理员同意 API权限→ 授予管理员同意 -

步骤1:创建Azure应用程序注册

  1. 首选 Azure门户
  2. 导航至 Azure Active Directory > 应用程序注册
  3. 点击 新注册
  4. 填写:
    • 名字:Microsoft Graph MCP服务器
    • 支持的帐户类型:仅此组织目录中的帐户(或多租户)
    • 点击 注册

步骤2:获取凭据

  1. 应用程序(客户端)ID → 将此复制为 AZURE_CLIENT_ID
  2. 目录(租户)ID → 将此复制为 AZURE_TENANT_ID
  3. 首选 证书和秘密 → 新客户机密
    • 复制 机密值 作为 AZURE_CLIENT_SECRET (只显示一次!)

步骤3:添加应用程序权限

  1. 首选 API权限 → 添加权限 → 微软图形 → 应用程序权限

  2. 添加这些权限:

    权限 类型 描述
    User.Read.All 应用程序 读取所有用户
    Mail.Read 应用程序 读取所有邮箱中的邮件
    Mail.Send 应用程序 以任何用户身份发送邮件
    Calendars.Read 应用程序 读取所有邮箱中的日历
    Files.Read.All 应用程序 读取所有文件
    Group.Read.All 应用程序 读取所有组
    Contacts.Read 应用程序 读取联系人
    Tasks.ReadWrite.All 应用程序 读写任务
    Organization.Read.All 应用程序 读取组织信息
    People.Read.All 应用程序 读取人员配置文件
    Application.Read.All 应用程序 读取应用程序
    Subscription.Read.All 应用程序 管理订阅
  3. ⚠️ 关键: 点击 授予[您的组织]管理员同意


💻 在Cursor/Claude桌面中使用

MCP客户端配置概述

客户端 配置位置 如何访问
光标 光标设置 设置→ 特性→ 模型上下文协议→ 编辑配置
克劳德台式机(Mac) 文件系统 ~/Library/Application Support/Claude/claude_desktop_config.json
克劳德桌面(Windows) 文件系统 %APPDATA%\Claude\claude_desktop_config.json
克劳德桌面(Linux) 文件系统 ~/.config/Claude/claude_desktop_config.json

配置步骤

对于光标

  1. 打开 光标设置 → 特性 → 模型上下文协议
  2. 点击 “编辑配置”
  3. 添加以下配置
  4. 保存并重新启动游标

适用于克劳德桌面

  1. 找到并打开配置文件(见上表)
  2. 添加以下配置
  3. 保存文件
  4. 重新启动克劳德桌面

配置JSON(所有客户端)

{
  "mcpServers": {
    "microsoft-graph-mcp": {
      "command": "npx",
      "args": ["-y", "microsoft-graph-mcp"],
      "env": {
        "AZURE_CLIENT_ID": "your-client-id",
        "AZURE_CLIENT_SECRET": "your-client-secret",
        "AZURE_TENANT_ID": "your-tenant-id"
      }
    }
  }
}

注: 替换 your-client-id, your-client-secret,以及 your-tenant-id 使用您的实际Azure凭据。


📡 使用REST API

服务器运行后,您可以通过REST端点完全访问Microsoft Graph。

🔍 交互式API文档

Swagger用户界面 (推荐-视觉界面):

http://localhost:8887/docs
  • 浏览所有端点
  • 直接在浏览器中尝试请求
  • 请参阅请求/响应模式

OpenAPI JSON:

http://localhost:8887/openapi.json
  • 导入Postman、Insomnia或任何与OpenAPI兼容的工具

📝 常见API示例

操作 方法 端点 示例
列出用户 得到 /graph/users curl "http://localhost:8887/graph/users?$top=10"
获取电子邮件 得到 /graph/mail curl "http://localhost:8887/graph/mail?userId=user@domain.com&$top=10"
发送邮件 职位 /graph/mail 请参阅下面的详细示例
获取日历 得到 /graph/calendar curl "http://localhost:8887/graph/calendar?userId=user@domain.com&$top=10"
创建活动 职位 /graph/calendar/events 请参阅下面的详细示例
列出文件 得到 /graph/files curl "http://localhost:8887/graph/files?userId=user@domain.com&$top=20"
组建团队 得到 /graph/teams curl http://localhost:8887/graph/teams

详细示例

发送电子邮件:

curl -X POST http://localhost:8887/graph/mail \
  -H "Content-Type: application/json" \
  -d '{
    "toRecipients": [{"emailAddress": {"address": "user@example.com"}}],
    "subject": "Hello from microsoft-graph-mcp!",
    "body": {"contentType": "text", "content": "This is a test message"}
  }'

创建日历事件:

curl -X POST http://localhost:8887/graph/calendar/events \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Team Meeting",
    "start": {"dateTime": "2024-01-15T10:00:00", "timeZone": "UTC"},
    "end": {"dateTime": "2024-01-15T11:00:00", "timeZone": "UTC"},
    "userId": "user@domain.com"
  }'

📚 所有可用端点

用户(6个端点)

方法 路径 描述
得到 /graph/users 获取用户列表(支持过滤、分页)
得到 /graph/users/:userId 按ID获取特定用户
职位 /graph/users 创建新用户
补丁 /graph/users/:userId 更新用户
删除 /graph/users/:userId 删除用户
得到 /graph/users/:userId/photo 获取用户照片

邮件(7个端点)

方法 路径 描述
得到 /graph/mail?userId=user@domain.com 获取电子邮件(支持过滤)
得到 /graph/mail/:messageId?userId=user@domain.com 获取特定消息
职位 /graph/mail 发送电子邮件
职位 /graph/mail/:messageId/reply?userId=user@domain.com 回复消息
职位 /graph/mail/:messageId/forward?userId=user@domain.com 转发消息
删除 /graph/mail/:messageId?userId=user@domain.com 删除邮件
得到 /graph/mail/folders?userId=user@domain.com 获取邮件文件夹

日历(5个端点)

方法 路径 描述
得到 /graph/calendar?userId=user@domain.com 获取日历事件(支持过滤)
得到 /graph/calendars?userId=user@domain.com 获取用户日历
职位 /graph/calendar/events 创建日历事件(正文中包含userId)
补丁 /graph/calendar/events/:eventId?userId=user@domain.com 更新日历事件
删除 /graph/calendar/events/:eventId?userId=user@domain.com 删除日历事件

文件/OneDrive(4个端点)

方法 路径 描述
得到 /graph/files?userId=user@domain.com 从OneDrive获取文件和文件夹
得到 /graph/drives?userId=user@domain.com 获取驱动器(OneDrive和SharePoint)
职位 /graph/files/upload 将文件上传到OneDrive(正文中包含用户ID)
删除 /graph/files/:itemId?userId=user@domain.com 删除文件或文件夹

组(3个端点)

方法 路径 描述
得到 /graph/groups 获取组列表
职位 /graph/groups 创建新组
得到 /graph/groups/:groupId/members 获取组成员

团队(2个端点)

方法 路径 描述
得到 /graph/teams 获取团队列表
得到 /graph/teams/:teamId/channels 获取团队频道

联系人(2个端点)

方法 路径 描述
得到 /graph/contacts?userId=user@domain.com 获取联系人
职位 /graph/contacts 创建联系人(在正文中包含userId)

任务(2个端点)

方法 路径 描述
得到 /graph/tasks?userId=user@domain.com 获取任务/待办事项
职位 /graph/tasks 创建任务(在正文中包含userId)

附加服务

方法 路径 描述
得到 /graph/applications 获取应用程序
得到 /graph/directory 获取目录对象
得到 /graph/organization 获取组织信息
得到 /graph/people?userId=user@domain.com 获取人员(同事和联系人)
得到 /graph/subscriptions 获取webhook订阅
职位 /graph/subscriptions 创建webhook订阅

系统

方法 路径 描述
得到 /health 健康检查
得到 /api-info API信息
得到 /openapi.json OpenAPI规范
得到 /docs Swagger用户界面文档

所有端点都会自动作为MCP工具公开,供AI代理使用。


⚙️ 高级配置

环境变量

变量 必填 默认 描述
AZURE_CLIENT_ID 是 - Azure AD应用程序(客户端)ID
AZURE_CLIENT_SECRET 是 - Azure AD客户端机密(值)
AZURE_TENANT_ID 是 - Azure AD目录(租户)ID
AZURE_SCOPE 没有 https://graph.microsoft.com/.default Microsoft图形范围
EASY_MCP_SERVER_PORT 没有 8887 REST API端口
EASY_MCP_SERVER_MCP_PORT 没有 8888 MCP服务器端口
EASY_MCP_SERVER_LOG_LEVEL 没有 info 日志记录级别

🎯 用例

按用户类型

用户类型 用例 查询/操作示例
AI助手用户 电子邮件管理 “从Outlook获取我的最新电子邮件”
日历安排 “为明天下午2点创建日历活动”
文件管理 “显示OneDrive中的文件”
团队协作 “列出组织中的所有Microsoft团队”
沟通 “发送电子邮件至john@example.com关于项目更新”
联系人查找 “我有哪些联系人?”
开发者 自定义集成 构建Microsoft 365工作流自动化
API测试 通过Swagger UI测试Microsoft Graph端点
应用程序开发 创建自定义M365应用程序
服务集成 将M365与第三方服务连接起来
IT管理员 用户管理 通过REST API列出和管理用户
审核和监控 跟踪电子邮件、日历和文件活动
资源调配 自动创建用户和组
报告 生成M365服务的使用情况报告

按界面

接口 最适合 接入点
MCP(人工智能代理) 自然语言查询、人工智能工作流 Cursor、Claude Desktop、MCP兼容工具
REST API 程序化访问、自动化脚本 http://localhost:8887/graph/*
Swagger用户界面 视觉探索、测试、文档编制 http://localhost:8887/docs

🔧 故障排除

问题 可能原因 解决方案
服务器无法启动 端口已在使用中 检查端口8887/8888是否未在使用中: lsof -i :8887
无效凭据 验证Azure凭据是否正确 .env
错误的Node.js版本 确保安装了Node.js>=22.0.0: node --version
身份验证错误 无效凭据 验证 AZURE_CLIENT_ID, AZURE_CLIENT_SECRET,以及 AZURE_TENANT_ID 是正确的
已过期的客户端密码 在Azure门户中创建新的客户端密码
缺少管理员同意 在Azure门户中单击“授予管理员同意”→ API权限
权限类型错误 确保权限为“应用程序权限”(未委派)
“权限不足” 缺少权限 验证是否在Azure门户中添加了所有必需的权限
未授予管理员同意 在Azure门户中授予管理员同意→ API权限
委派与应用程序 检查权限是否为应用程序权限(非委派)
MCP不工作 配置未加载 添加MCP配置后重新启动Cursor/Claude
服务器未运行 检查服务器是否正在运行: curl http://localhost:8887/health
环境变量错误 验证MCP配置中的环境变量是否正确
MCP连接失败 检查游标/克劳德日志中的MCP错误
API调用失败 身份验证问题 测试身份验证: curl http://localhost:8887/graph/users/me
找不到端点 检查Swagger UI:http://localhost:8887/docs
缺少权限 验证Azure应用程序是否具有所需的权限
服务器错误 查看服务器日志以了解详细的错误消息
速率限制 请求太多 实现指数退避,降低请求频率
超时错误 慢速网络/API 增加超时设置,检查网络连接

📖 了解更多

文档和资源

资源 描述 链接
Microsoft Graph API Microsoft Graph官方文档和API参考资料 learn.microsoft.com/graph
模型上下文协议 MCP规范和实施指南 模型上下文协议.io
Azure应用程序注册 创建和配置Azure AD应用程序的指南 learn.microsoft.com/zure
图形API权限 Microsoft Graph权限的完整列表 learn.microsoft.com/权限
简易mcp服务器 定制框架文档 github/易网世界

📦 包信息

资源 链接
npm包 微软图形mcp
GitHub存储库 7160微软图形微控制器
问题追踪器 GitHub问题
许可证 麻省理工学院
支持 info@easynet.world

🆘 需要帮助?

快速诊断检查表

步骤 检查 命令/操作
1 Swagger用户界面 打开http://localhost:8887/docs
2 服务器运行状况 curl http://localhost:8887/health
3 认证 curl http://localhost:8887/graph/users/me
4 Azure配置 回顾 Azure配置 章节
5 故障排除 检查 故障排除 上表
6 企业支持 联系人:info@easynet.world

🛠️ 发展

此MCP服务器是使用 简易mcp服务器 框架。

发展资料

主题 描述 链接
自定义端点 如何创建自定义API端点 简易mcp服务器文档
项目结构 架构和代码组织 简易mcp服务器文档
测试与调试 测试设置和调试提示 简易mcp服务器文档
贡献 捐款准则 简易mcp服务器文档
TypeScript 类型定义和编译 请参见 tsconfig.json 和 lib/ 目录

地方发展设置

步骤 命令 目的
  1. 克隆 | git clone https://github.com/easynet-world/7160-microsoft-graph-mcp.git |获取源代码
  2. 安装 | npm install |安装依赖项
  3. 配置 |复制 .env.example 到 .env |设置环境变量
  4. 构建 | npm run build |编译TypeScript
  5. 测试 | npm test |运行测试套件
  6. 开始 | npm start |启动开发服务器

由...驱动 简易mcp服务器 框架