
一句话:「明天下午3点在静安寺附近和客户开会,帮我查一下从徐家汇怎么去。」

AI 同时调了日历和地图——搜 POI、拿坐标、算三条路线(驾车/公交/骑行),最后创建了一个带定位的日历事件,告诉我「地铁 4 号线 6 站,8:20 出发就行;早高峰开车堵,不推荐」。用户只说了一句话。
这背后是两个MCP在配合:一个管时间(微软日历),一个管空间(高德地图)。缺一个都不行——光有日历,你得自己查路线;光有地图,AI没地方写日程。
Outlook移动端日历创建好了,事件详情里还嵌入了高德地图定位:

## 为什么是微软日历
给 AI 装 MCP,本质上是在问:你最希望它帮你管什么?
答案几乎所有人都一样——日程。但国内用户的约束很硬:国内直连、多端同步、Todo+日历合一。Apple 日历只能跑 macOS,Google 日历国内出局,滴答清单只有 Todo 没有日历事件,飞书生态太重个人用不起。
微软是唯一同时满足这三个条件的——Outlook 日历和 To Do 通过 Microsoft Graph API[1] 统一暴露,iOS/Windows/Web 全端可用,国内直连不需要翻墙。
但微软没有官方 MCP Server。API 很完整——日历事件[2]和待办事项[3]都有 REST 接口,MCP 层得自己搭。
MCP Server 用 FastMCP[4] 框架,核心是 Microsoft Graph API 的两个端点:
/me / todo / lists → 待办事项
/me / calendar / events → 日历事件
认证用 Azure AD Device Code Flow[5]。普通 OAuth 需要浏览器重定向,意味着你必须在有浏览器的环境里跑。Device Code 不一样:AI 给你一个代码,你在任意设备的浏览器里打开 microsoft.com/devicelogin,输入代码就行。服务器、CLI、甚至手机终端都能用。
# auth.py 核心逻辑
DELEGATED_SCOPES = [
"offline_access", # 刷新token必须
"User.Read",
"Tasks.ReadWrite",
"Calendars.ReadWrite",
]
Token 存 PostgreSQL,支持自动刷新。连接 Graph API 失败时自动重试两次。
「帮我把这周的安排都建到日历里:周三下午2点项目评审会,在公司3楼会议室;周四上午10点和设计师对需求,在杭州西湖银泰附近找个咖啡厅;周五全天去深圳出差,客户在南山科技园。」
AI 连续调用 create_calendar_event 三次。对于周四的咖啡厅需求,还会主动在高德上搜西湖银泰附近的咖啡馆:

「明天早上9点要在杭州钱江新城开会,我现在在杭州东站,帮我看看几点出门合适」
AI 把「钱江新城」和「杭州东站」都解析成坐标,同时调三种路线规划,最后告诉你:地铁 4 号线 6 站到市民中心站,步行 300 米,总共约 21 分钟,8:20 出发就行。早高峰开车堵得厉害,不推荐。

「看看我这周有什么安排,顺便查一下每个地方的天气」
AI 先拉取本周事件,然后对每个有定位的日程调用高德天气 API。出差要不要带伞,一目了然。

只要 AI 模型支持 vision,发一张活动海报截图,AI 识别出时间和内容,自动创建日程。
不能设 iOS 系统级提醒。 微软日历的 reminder 是推送通知,不是 iOS 闹钟。没法用来「8 点叫我起床」或「会前 15 分钟震动」。
没有子任务和重复任务。 复杂项目拆解和每周例会暂时做不到。
同步偶尔有延迟。 和 Apple 日历比体验没那么丝滑。它只是在「国内能用」这个约束下最现实的选择。
维度 | 微软日历(我的方案) | 滴答清单 | Apple日历 | Google日历 | 飞书 |
|---|---|---|---|---|---|
国内直连 | ✅ | ✅ | ✅ 本地 | ❌ 无法使用 | ✅ |
多端同步 | ✅ | ✅ | ⚠️ 黑盒 | ✅ | ✅ |
Todo+日历合一 | ✅ | ❌ 仅Todo | ❌ 仅日历 | ❌ 仅日历 | ⚠️ 分开 |
出行集成 | 高德MCP | 无 | 无 | 无 | 无 |
iOS提醒 | ❌ | ✅ | ✅ | ✅ | ✅ |
在国内,微软日历+高德是我目前找到的最优组合。一个管时间,一个管空间。如果你在海外,Google 日历 MCP 更好;如果只要 Todo,滴答清单功能最全;如果是 Apple 全家桶,本地 Apple 日历 MCP 体验最丝滑。
代码基于 FastMCP[4] + Azure AD Device Code[5] + Microsoft Graph API[1]。
相关文章:3个月搭了4个容器,然后1小时删了2个[6]——我是怎么从自建 agent 迁移到 Hermes 的。