Token导航 LogoToken导航TokenDH.com
Msgraph Email Calendar MCP logo
办公协作stdio官方级别未说明来源级核验

Msgraph Email Calendar MCP

MCP Server

通过Microsoft Graph API为AI助手提供Outlook邮件和日历全面访问权限的协议服务器,支持本地和云端部署。

工具数

30

提示词数

0

GitHub Stars

0

资源数

0
邮件管理PythonClaude日程管理Claude DesktopClaudeCursorVS Code

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

jspv

提供方

jspv

最后核验

2026/5/17 20:21

运行时

Python

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

uv run msgraph-mcp

详细介绍

msgraph mcp

特性

26工具 跨邮件、日历、联系人和日程安排:

邮件

  • 阅读 --列出文件夹、邮件、搜索(OData $search),附件(1.5 MB以下的文件采用内联base64)
  • 编排 --默认情况下,发送、回复、全部回复、转发带有模拟预览
  • 草稿 --创建、更新、附加文件,然后在准备就绪时发送
  • 组织 --标记已读/未读、标记、分类、移动到文件夹、软删除或硬删除
  • 批量 --多通道过滤操作(删除、标记已读/未读、移动),带模拟运行预览,每次通话最多1000条消息
  • 文件夹和别名 --创建邮件文件夹,列出发件人地址

日历

  • 阅读 --列出日历、事件(默认窗口:昨天到14天后)、完整的事件详细信息
  • --创建、更新、删除/取消包含与会者、正文、位置和全天支持的事件
  • 共享日历 --通过以下方式对其他用户的日历进行完全读/写访问 user_id 参数
  • 调度 --检查多个用户的忙/闲状态,或让Graph建议最佳会议时间
  • 回复 --接受、拒绝或暂时接受会议邀请

联系人

  • 人物搜索 -使用人员API将显示名称解析为电子邮件地址

认证

  • 设备代码流 --交互式三步认证(start_auth → 用户批准→ finish_auth)
  • 多账户 --缓存并在多个Microsoft帐户之间切换
  • 框架模式 --通过环境变量接受预认证令牌以进行无服务器部署

工具参考

区域工具描述
认证auth_status显示配置和缓存帐户
认证start_auth开始设备代码流(返回URL+代码)
认证finish_auth用户批准后完成设备代码流
邮件list_folders列出包含项目/未读计数的邮件文件夹
邮件list_messages列出文件夹中的邮件(限制50封)
邮件get_message完整的消息详细信息,包括正文
邮件search_messages通过OData搜索 $search (限值50)
邮件list_attachments列出邮件的附件元数据
邮件get_attachments下载单个附件
邮件send_message发送新电子邮件(默认情况下为模拟运行)
邮件reply_to_message回复或全部回复(默认为模拟运行)
邮件forward_message转发消息(默认情况下为模拟运行)
邮件create_draft创建草稿而不发送
邮件manage_draft更新或发送现有草稿
邮件add_attachment_to_draft将文件附加到草稿中
邮件update_message标记已读/未读、标记或分类
邮件move_message移动到文件夹(支持知名名称)
邮件delete_message软删除或永久删除
邮件bulk_manage_messages干运行批量过滤操作(限制1000)
邮件create_folder创建新邮件文件夹
邮件list_aliases列出电子邮件别名/发件人地址
日历list_calendars列出日历(自己的或通过共享 user_id)
日历list_events列出时间范围内的事件(限制100)
日历get_event与会者的完整活动详情
日历create_event创建日历事件
日历update_event更新现有事件
日历delete_event删除或取消事件
日历respond_to_event接受、拒绝或暂时接受
日历check_availability忙/闲查询或会议时间建议
联系人search_people按姓名搜索联系人(限制50个)

先决条件

  • Python 3.11+
  • Azure应用程序注册 具有委派的Microsoft Graph权限(见下文)
  • 紫外线 (推荐)或pip

Azure应用程序注册

在中创建应用程序注册 微软Entra管理中心 (Azure AD)。

1.支持的账户类型

选择一个:

  • 仅此组织目录中的帐户 --单租户
  • 任何组织目录中的帐户 --多租户工作/学校账户

2.身份验证

  • 启用 允许公共客户端流 (设备代码流所需)

3.API权限

添加 委派 Microsoft图形权限:

许可目的
User.Read读取已登录的用户配置文件
Mail.ReadWrite读取、移动、标记、分类、删除邮件
Mail.Send发送邮件、回复、转发
Calendars.ReadWrite读取和写入日历事件
Calendars.ReadWrite.Shared访问共享/委派日历
People.Read按姓名搜索联系人

对于 只读 使用、更换 Mail.ReadWriteMail.SendMail.Read,以及 Calendars.ReadWrite / Calendars.ReadWrite.SharedCalendars.Read写入工具将返回权限错误,但其他一切正常。

4.管理员同意

如果组织的政策要求,授予租户管理员同意。

配置

复制 .env.example.env 并填写您的值:

cp .env.example .env
变量默认值描述
MICROSOFT_CLIENT_ID*(必填)*Azure应用程序注册客户端ID
MICROSOFT_TENANT_IDcommonorganizations (仅限工作/学校), common (任何)或特定租户GUID
MICROSOFT_SCOPESUser.Read Mail.ReadWrite Mail.Send Calendars.ReadWrite Calendars.ReadWrite.Shared People.Read以空格分隔的委派权限
MICROSOFT_TOKEN_CACHE_PATH.data/msal_token_cache.json本地WAVEtoken缓存的路径
MAX_ATTACHMENT_INLINE_SIZE1572864内联base64的最大附件大小(字节)(默认1.5 MB)

建议租户值:

  • organizations --仅限工作/学校账户(最常见于企业)
  • 特定租户GUID--锁定单个组织的身份验证
  • common --任何Microsoft帐户(工作、学校或个人)

部署

本地(stdio)

默认传输是stdio,适用于桌面MCP客户端,如Claude Code、Claude desktop、Cursor和VS Code。

# Install dependencies
uv sync

# Run the server
uv run msgraph-mcp

或者使用pip:

pip install -e .
msgraph-mcp

MCP客户端配置

添加到MCP客户端的配置中(例如Claude Desktop claude_desktop_config.json, .mcp.json 克劳德代码等):

{
  "mcpServers": {
    "msgraph-mcp": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "msgraph-mcp"],
      "env": {
        "MICROSOFT_CLIENT_ID": "your-client-id",
        "MICROSOFT_TENANT_ID": "your-tenant-id"
      }
    }
  }
}

如果你使用 .env 项目目录中的文件 env 块可以省略。

云——带有mcp Lambda包装器的AWS Lambda(ChatGPT,Claude.ai)

用于 远程MCP客户端 与ChatGPT和Claude.ai一样,此服务器可以使用以下方式部署为无服务器AWS Lambda函数 mcp云包装该框架将任何基于stdio的MCP服务器封装在Amazon Bedrock AgentCore网关后面,并提供完整的OAuth 2.0和动态客户端注册(RFC 7591)支持——此项目中不需要更改代码。

框架提供了什么:

  • 无服务器部署 --将此MCP服务器作为AgentCore网关后面的Lambda子进程运行
  • 每用户OAuth --每个用户使用自己的Microsoft帐户进行身份验证;令牌存储在AWS Secrets Manager中,并自动刷新
  • 呼叫者身份验证 --Cognito JWT验证所有入站请求
  • 动态客户端注册 --MCP客户端(ChatGPT、Claude.ai)通过标准进行自我注册 /register 端点
  • 零闲置成本 --Lambda函数按需启动

它是如何工作的:

  1. MCP客户端向AgentCore网关端点发送工具调用
  2. 该框架验证调用者的JWT,提取他们的身份,并从Secrets Manager加载他们的Microsoft Graph OAuth令牌
  3. 令牌被注入为 GRAPH_ACCESS_TOKEN 进入此服务器的环境
  4. 此服务器作为子进程运行,读取令牌,并对Microsoft Graph执行该工具
  5. 如果用户尚未进行身份验证, start_auth 返回框架的OAuth URL,而不是设备代码

该项目被用作 参考示例服务 在mcp lambda包装器中——请参见 infra/lambda/services/msgraph/ 在该仓库中查看完整配置。

快速部署(来自mcp lambda包装器仓库):

# One-time: deploy shared infrastructure (Cognito, DCR, OAuth callback)
make deploy-shared

# Create the Azure app secret
aws secretsmanager create-secret \
  --name mcp-wrappers-msgraph-service-secrets \
  --secret-string '{"MICROSOFT_CLIENT_ID": "your-client-id"}'

# Generate tool definitions and deploy
make gen-tools SERVICE=msgraph
make deploy-service SERVICE=msgraph

框架环境变量

在框架内运行时,此服务器通过这些注入的环境变量自动检测Lambda模式:

变量描述
GRAPH_ACCESS_TOKEN预认证的Microsoft Graph访问令牌(每个用户)
OAUTH_AUTHENTICATED设置为 true 身份验证完成时
OAUTH_USER_ID经过身份验证的用户标识符
OAUTH_AUTH_URLOAuth授权URL(当用户需要进行身份验证时显示)
SERVICE_NAME框架的服务标识符

在此模式下:

  • 绕过了SWATdevice代码流——令牌由框架注入
  • 不使用本地令牌缓存(与Lambda等只读文件系统兼容 /var/task)
  • auth_status 报告框架管理的令牌状态
  • start_auth / finish_auth 返回通过框架的OAuth流进行身份验证的指导

码头工人

虽然不包含Dockerfile,但服务器可以容器化:

FROM python:3.12-slim
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir .
ENV MICROSOFT_CLIENT_ID=""
ENV MICROSOFT_TENANT_ID="organizations"
EXPOSE 8000
CMD ["msgraph-mcp"]

对于持久身份验证,请为令牌缓存挂载一个卷:

docker run -v msgraph-data:/app/.data \
  -e MICROSOFT_CLIENT_ID=your-id \
  -e MICROSOFT_TENANT_ID=your-tenant \
  msgraph-mcp

安全默认值

写入操作默认为安全行为:

功能默认值注释
send_messagedry_run=True创建临时草稿以供预览,然后将其删除
reply_to_messagedry_run=True发送前预览
forward_messagedry_run=True发送前预览
bulk_manage_messagesdry_run=True显示匹配项而不执行
delete_messagepermanent=False移动到已删除邮件(可恢复)

安全

  • 路径段验证 --在URL插值之前,所有用户提供的ID都会根据安全字符模式进行验证,从而阻止路径遍历
  • 下一环节强化 --分页仅遵循配置的Graph主机上的HTTPS URL
  • 搜索净化 --从OData中删除双引号 $search 查询
  • 使用回退重试 --HTTP 429和暂时性5xx错误的自动重试(3次尝试,各方面 Retry-After)
  • 翻译错误 -原始Graph API有效负载从不向调用方公开
  • 令牌缓存权限 --缓存文件 0600,父目录 0700,符号链接被拒绝

安全\_ REVIEW.md 对于完整的威胁模型和剩余风险。

发展

# Install with dev dependencies
uv sync --dev

# Run tests
uv run pytest

# Or with pip
pip install -e '.[dev]'
pytest

烟雾测试线束

用于在没有完整MCP客户端的情况下进行手动测试的CLI线束:

# Auth
python3 scripts/smoke_test.py status
python3 scripts/smoke_test.py start-auth
python3 scripts/smoke_test.py finish-auth
python3 scripts/smoke_test.py list-accounts

# Mail
python3 scripts/smoke_test.py list-folders
python3 scripts/smoke_test.py list-messages --folder inbox --limit 5
python3 scripts/smoke_test.py get-message MESSAGE_ID
python3 scripts/smoke_test.py search-messages "search term"
python3 scripts/smoke_test.py mark-message-read MESSAGE_ID
python3 scripts/smoke_test.py move-message MESSAGE_ID archive
python3 scripts/smoke_test.py delete-message MESSAGE_ID
python3 scripts/smoke_test.py bulk-manage-messages --sender-contains "newsletters" --limit 50

# Calendar
python3 scripts/smoke_test.py list-calendars
python3 scripts/smoke_test.py list-events --limit 10
python3 scripts/smoke_test.py get-event EVENT_ID

许可证

许可证 了解详情。

目录标签

目录标签

邮件管理PythonClaude日程管理本地部署日历管理联系人搜索微软Graph集成AI助手工具

支持客户端

Claude DesktopClaudeCursorVS Code

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

oauth

运行时(runtime,运行环境)

Python

工具数量(toolCount,工具数)

30

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiooauth部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP