mcpField
M
Microsoft 365 Calendar

Microsoft 365 Calendar

本地服务
github.com/mindstone生产力13今天更新

关于 Microsoft 365 Calendar

Microsoft 365 Calendar 是通过 Microsoft Graph 管理 Outlook 日历的 MCP 服务,提供事件操作与日程可用性查询,并复用 Microsoft 365 Mail 所管理的 OAuth 凭据。

主要功能

  1. 01列出并查看日历事件
  2. 02创建、更新、取消和删除事件
  3. 03接受或拒绝邀请
  4. 04查询忙闲并建议会议时间
  5. 05列出可访问的日历

适用场景

  1. 01查看指定日期范围内的事件
  2. 02查找参会者都有空的时段
  3. 03创建或调整日历会议

MCP 相关

向 MCP 客户端提供 Microsoft Graph 日历操作,包括事件管理、日历列表、忙闲查询和会议时间建议。身份验证由主机通过 Microsoft 365 Mail 处理;此服务读取生成的凭据。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"mindstone-mcp-server-microsoft-calendar": {
"command": "npx",
"args": [
"-y",
"@mindstone/mcp-server-microsoft-calendar"
],
"env": {
"MS_CLIENT_ID": "<MS_CLIENT_ID>",
"MS_CONFIG_DIR": "<MS_CONFIG_DIR>",
"MS_ACCOUNT_EMAIL": "<MS_ACCOUNT_EMAIL>",
"MS_MCP_PACKAGE_ID": "<MS_MCP_PACKAGE_ID>",
"MICROSOFT_REQUEST_TIMEOUT_MS": "<MICROSOFT_REQUEST_TIMEOUT_MS>"
}
}
}
}
启动命令npx -y @mindstone/mcp-server-microsoft-calendar
需要配置的环境变量
MS_CLIENT_IDMicrosoft Entra (Azure AD) application client ID
MS_CONFIG_DIRPath to the per-user Microsoft config directory (credentials/, accounts.json)
MS_ACCOUNT_EMAILAccount email when running in multi-account per-instance mode (falls back to the first account in accounts.json)
MS_MCP_PACKAGE_IDLogical package ID surfaced in error responses
MICROSOFT_REQUEST_TIMEOUT_MSOverride the upstream Microsoft Graph request timeout in milliseconds (max 300000 = 5 min)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@mindstone/mcp-server-microsoft-calendar0.2.0

工具

10

收录的工具列表 · 更新于 2 周前

参数类型必填说明
topinteger否返回的事件数上限(默认值:50)
calendarIdstring否日历 ID(默认值:主日历)
returnTextboolean否返回易读的日程文本,而不是 JSON(默认值:false)
endDateTimeany否ISO 格式的结束日期/时间(默认值:从现在起 7 天后)
startDateTimestring否ISO 格式的开始日期/时间(默认值:现在)
deviceTimezonestring否系统提示词中的用户设备 IANA 时区(例如 "Europe/London")。当日历设置不可用时用作备用时区,并用于检测时区不匹配。

详细介绍

@mindstone/mcp-server-microsoft-calendar

npm version License: FSL-1.1-MIT

Microsoft 365 Outlook Calendar MCP 服务——通过 Microsoft Graph API 列出、获取、创建、更新、删除、取消和响应事件,检查空闲/忙碌状态、查找会议时间并列出日历。

Microsoft 365 日历 MCP,采用群组式模式。复用由 @mindstone/mcp-server-microsoft-mail 管理的 OAuth 接入层,因此主机只需登录一次,即可使用同一组凭据访问日历、邮件、文件、Teams 和 SharePoint。

状态

为什么要构建此项目

2026 年 5 月将其移植过来时,Microsoft 自家的 Graph MCP 产品线尚未推出独立的 Outlook Calendar 服务,而当时的社区方案都将日历视为独立的登录入口——每个连接器都要单独进行 OAuth 授权流程,并保存各自的刷新令牌副本。我们将 MindstoneRebel 中打包的连接器拆分出来,按 1:1 方式移植,以便同一组包含五个连接器的 Microsoft 365 服务(邮件、日历、文件、Teams、SharePoint)共享一组凭据、一个用于令牌持久化和请求超时的共享库包,以及主机已知如何处理的结构化 auth_required 封装。日历复用 @mindstone/mcp-server-microsoft-mail 的 authenticate_microsoft_account 工具,而不是自行声明该工具。

交互示例

“我今天下午的日历安排是什么?另外,找一个明天我和 Alice 都有空的 30 分钟时段。”

主机调用的工具:

  1. list_events — 查询涵盖今天剩余时间的日期范围。
  2. find_meeting_times — 建议明天 Alice 和用户都有空的时段。

响应(节选):

{
  "today": [
    { "id": "AA...=", "subject": "Q3 review", "start": "2026-05-19T15:00:00Z", "end": "2026-05-19T16:00:00Z" }
  ],
  "tomorrow_suggestions": [
    { "start": "2026-05-20T10:00:00", "end": "2026-05-20T10:30:00" },
    { "start": "2026-05-20T14:30:00", "end": "2026-05-20T15:00:00" }
  ]
}

要求

  • Node.js 20+
  • npm
  • 能执行 Microsoft OAuth 流程并将每个账户的令牌文件写入 ${MS_CONFIG_DIR}/credentials/${sanitised-email}.token.json,并写入 ${MS_CONFIG_DIR}/accounts.json 索引的主机应用。此服务会读取这些文件;它本身不会发起 OAuth 流程。

一键安装

添加到 Cursor 添加到 VS Code 添加到 VS Code Insiders

点击按钮后,宿主将提示你填写:MS_CLIENT_ID、MS_CONFIG_DIR、MS_MCP_PACKAGE_ID、MICROSOFT_REQUEST_TIMEOUT_MS。

Claude Desktop / Claude Code / Goose / Continue.dev 手动配置(Microsoft 365 Calendar)
{
  "mcpServers": {
    "Microsoft 365 Calendar": {
      "command": "npx",
      "args": [
        "-y",
        "@mindstone/mcp-server-microsoft-calendar"
      ],
      "env": {
        "MS_CLIENT_ID": "",
        "MS_CONFIG_DIR": "",
        "MS_MCP_PACKAGE_ID": "Microsoft365Calendar",
        "MICROSOFT_REQUEST_TIMEOUT_MS": "60000"
      }
    }
  }
}

快速入门

安装与构建
cd <path-to-repo>/connectors/microsoft-calendar
npm install
npm run build
npx(发布后使用)
npx -y @mindstone/mcp-server-microsoft-calendar
本地
node dist/index.js

配置

此服务与负责 Microsoft 365 OAuth 流程的宿主应用协同运行。宿主会将凭据写入磁盘;此服务会读取这些凭据。

必需的环境变量
名称说明
MS_CLIENT_IDMicrosoft Entra(Azure AD)应用客户端 ID。
MS_CONFIG_DIR每用户 Microsoft 配置目录的路径(credentials/、accounts.json)。
可选环境变量
名称说明默认值
MS_ACCOUNT_EMAIL在每个实例对应多个帐户的模式下运行时使用的帐户电子邮件地址。accounts.json 中的第一个帐户。
MS_MCP_PACKAGE_ID错误响应中显示的逻辑包 ID。Microsoft365Calendar
MICROSOFT_REQUEST_TIMEOUT_MS覆盖上游 Microsoft Graph 请求超时时间(最长 300000 ms)。60000
MICROSOFT_DISABLE_REFRESH设置为 1 可在此界面禁用令牌刷新。工具将以结构化的 auth_required 响应安全失败,以便宿主处理重新授权。云端界面会将其设为 1。未设置

宿主配置示例

Claude Desktop / Cursor
{
  "mcpServers": {
    "Microsoft365Calendar": {
      "command": "npx",
      "args": ["-y", "@mindstone/mcp-server-microsoft-calendar"],
      "env": {
        "MS_CLIENT_ID": "your-entra-application-client-id",
        "MS_CONFIG_DIR": "/absolute/path/to/microsoft-config"
      }
    }
  }
}

请先通过 @mindstone/mcp-server-microsoft-mail 的 authenticate_microsoft_account 登录;随后日历工具会复用其写入 ${MS_CONFIG_DIR}/ 的凭据。

本地开发(无需发布到 npm)
{
  "mcpServers": {
    "Microsoft365Calendar": {
      "command": "node",
      "args": ["<path-to-repo>/connectors/microsoft-calendar/dist/index.js"],
      "env": {
        "MS_CLIENT_ID": "your-entra-application-client-id",
        "MS_CONFIG_DIR": "/absolute/path/to/microsoft-config"
      }
    }
  }
}

工具(10)

工具描述
list_events列出指定日期范围内的日历事件(JSON 格式,包含每位与会者的 RSVP 状态;也可采用议程式文本)。当 Graph 还有更多分页时,会报告 truncated: true——请缩小日期范围或提高 top(最大值为 100)。
get_event获取特定日历事件的详细信息(可选择包含附件元数据;attachmentsTruncated 表示还有更多分页)。
create_event创建新的日历事件(可选择添加 Teams 会议和重复安排)。
update_event更新现有日历事件(包括添加或移除与会者以及修改重复安排)。
delete_event删除日历事件。
cancel_event以组织者身份取消会议,并可选择向与会者发送消息。
respond_to_event接受、拒绝或暂定接受活动邀请。
get_free_busy查看用户的忙闲状态。
find_meeting_times推荐所有指定与会者都有空的时段。只有在确认每位请求的与会者的日程可用性后,才会推荐时段;否则会在 unresolvableAttendees 中列出无法确认的与会者。
list_calendars列出用户有权访问的所有日历。

安全说明

  • 此服务不提供自己的身份验证工具;登录由 @mindstone/mcp-server-microsoft-mail 负责,从而让整个套件共用一个 OAuth 接口。
  • 令牌文件由宿主以 0600 权限写入;此服务通过套件共享库读取文件,遇到格式错误的文件时会安全失败。
  • 在云端环境中,默认启用 MICROSOFT_DISABLE_REFRESH=1,以确保桌面会话是唯一的刷新令牌授权方。
  • 各工具的 Graph 调用使用由调用方超时信号与套件超时信号组合而成的信号。
  • 所有来自 Graph 的文本都封装在 <untrusted-content> 中;只有符合其文档规定的封闭格式的结构化字段(ID、URL、类似枚举的值、时间戳)才会原样传递,否则会进行封装。供应商错误消息在传递给模型前也会进行封装。
  • 在发出任何 Graph 请求前,工具输入都会经过安全失败式验证(电子邮件地址、ISO 日期时间、有界数值、严格的重复安排对象)。
  • 在插入 Graph 请求路径前,会对事件/日历 ID 进行安全失败式验证(拒绝 ?、#、%、\、空白字符以及 ./.. 路径段),并在插入位置进行 URL 编码,以防精心构造的 ID 重新路由已通过身份验证的请求。
  • Graph 分页不会被静默丢弃:列表端点会报告 truncated / attachmentsTruncated,而不会跟随供应商提供的延续 URL。

许可证

FSL-1.1-MIT — Functional Source License,Version 1.1,未来转为 MIT 许可证。允许免费用于非竞争用途;在 LICENSE 中指定的转换日期转为 MIT 许可证。

评论

支持 Markdown

第一次接触 MCP?

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

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