关于 outlook-calendar-automation
outlook-calendar-automation 是通过 Composio 的 Outlook 工具包和 Rube MCP 操作 Outlook Calendar 的技能,适用于日程管理与会议协调。内容涵盖身份验证、时区、参会者通知及写入操作授权。
主要功能
- 01创建、更新和删除事件
- 02搜索事件及日历视图
- 03查找会议时间并查看日程
- 04管理邀请和参会者
- 05处理时区与重复事件
- 06对重要更改先取得批准
适用场景
- 01安排 Outlook 日历事件
- 02查找指定日期范围内的事件
- 03协调多位参会者的会议时间
- 04谨慎处理事件更新或取消通知
MCP 相关
它通过 https://rube.app/mcp 使用 Rube MCP 来发现并调用 Composio Outlook 工具。工作流开始前需要 RUBE_SEARCH_TOOLS 可用,并建立有效的 Outlook 连接。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill outlook-calendar-automation安装后在 Claude Code 中输入/outlook-calendar-automation确认已加载。
详细介绍
通过 Rube MCP 自动化 Outlook 日历
通过 Rube MCP 使用 Composio 的 Outlook 工具包自动执行 Outlook 日历操作。
前提条件
- 必须已连接 Rube MCP(RUBE_SEARCH_TOOLS 可用)
- 通过
RUBE_MANAGE_CONNECTIONS建立有效的 Outlook 连接,工具包为outlook - 始终先调用
RUBE_SEARCH_TOOLS,以获取当前工具架构
设置
获取 Rube MCP:在客户端配置中将 https://rube.app/mcp 添加为 MCP 服务。目标账户仍需通过返回的连接流程进行身份验证,并授予所需权限范围。
- 确认
RUBE_SEARCH_TOOLS有响应,以验证 Rube MCP 已可用 - 调用
RUBE_MANAGE_CONNECTIONS,指定工具包为outlook - 如果连接状态不是 ACTIVE,请通过返回的身份验证链接完成 Microsoft OAuth
- 在运行任何工作流之前,确认连接状态显示为 ACTIVE
日历与通知权限
发现当前工具架构,并确定确切的邮箱、日历和事件实例。搜索或查询空闲/忙碌状态并不代表获准发送邀请、修改、取消或拒绝事件。在执行这些写入操作前,确认已获批准的收件人名单、内容以及操作范围是整个系列还是单个实例;这些操作可能会立即通知与会者。除非有意替换,否则请保留现有与会者和类别列表;如果无法确定创建或更新操作是否成功,请先核对,再重试。时区示例因适配器而异:请核实支持的时区、偏移量和夏令时边界;对于展开后的周期性事件实例和跨时段事件,请使用 calendarView。尽量减少共享的日历详情。
核心工作流
1. 创建日历事件
适用场景:用户想在 Outlook 日历上安排新事件
工具调用顺序:
OUTLOOK_LIST_CALENDARS- 列出可用日历 [可选]OUTLOOK_CALENDAR_CREATE_EVENT- 创建事件 [必需]
关键参数:
subject:事件标题start_datetime:ISO 8601 开始时间(例如,'2025-01-03T10:00:00')end_datetime:ISO 8601 结束时间(必须晚于开始时间)time_zone:IANA 或 Windows 时区(例如,'America/New_York'、'Pacific Standard Time')attendees_info:电子邮件地址字符串或与会者对象数组body:事件描述(纯文本或 HTML)is_html:如果 body 包含 HTML,则设为 truelocation:地点字符串is_online_meeting:设为 true 以生成 Teams 会议链接online_meeting_provider:用于 Teams 集成的 'teamsForBusiness'show_as:'free'、'tentative'、'busy'、'oof'
注意事项:
- start_datetime 必须早于 end_datetime
- time_zone 为必填项,且必须是有效的 IANA 或 Windows 时区名称
- 添加与会者可能会立即触发邀请邮件
- 要生成 Teams 会议链接,必须同时设置 is_online_meeting=true 和 online_meeting_provider='teamsForBusiness'
- user_id 默认为 'me';访问其他用户的日历时,请使用电子邮件地址或 UUID
2. 列出和搜索事件
使用场景:用户想查找日历中的事件
工具调用顺序:
OUTLOOK_GET_MAILBOX_SETTINGS- 获取用户时区,以便进行准确查询 [前置条件]OUTLOOK_LIST_EVENTS- 使用筛选条件搜索事件 [必需]OUTLOOK_GET_EVENT- 获取特定事件的完整详情 [可选]OUTLOOK_GET_CALENDAR_VIEW- 获取某个时间段内的事件 [替代方案]
关键参数:
filter:OData 筛选字符串(例如:"start/dateTime ge '2024-07-01T00:00:00Z'")select:要返回的属性数组orderby:排序条件(例如:['start/dateTime desc'])top:每页结果数(1-999)timezone:结果的显示时区start_datetime/end_datetime:用于 CALENDAR_VIEW 的时间范围(UTC,后缀为 Z)
注意事项:
- OData 筛选条件中的日期时间值必须使用单引号,且以 Z 结尾
- 筛选事件开始时间时使用 'start/dateTime',而非 'receivedDateTime'(后者用于邮件)
- 'createdDateTime' 支持 orderby/select,但不支持筛选
- 分页:持续跟进 @odata.nextLink,直到收集完所有页面
- 对于“今天日历上有什么”这类查询,CALENDAR_VIEW 更合适(包括跨越该时段的事件)
- 对于关键词/类别筛选,LIST_EVENTS 更合适
- 响应中的事件开始和结束时间分别嵌套在 start.dateTime 和 end.dateTime 中
3. 更新事件
使用场景:用户想修改已有的日历事件
工具调用顺序:
OUTLOOK_LIST_EVENTS- 查找要更新的事件 [前置条件]OUTLOOK_UPDATE_CALENDAR_EVENT- 更新事件 [必需]
关键参数:
event_id:唯一事件标识符(来自 LIST_EVENTS)subject:新的事件标题(可选)start_datetime/end_datetime:新的时间(可选)time_zone:新时间所用的时区attendees:更新后的参会者列表(提供后会替换现有列表)body:更新后的描述,包含 contentType 和 contentlocation:更新后的位置
注意事项:
- UPDATE 会将提供的字段与现有事件合并;未指定的字段会保留
- 提供 attendees 会替换整个参会者列表;请包含所有需要的参会者
- 提供 categories 会替换整个类别列表
- 更新时间可能会触发向参会者重新发送通知
- 必须提供 event_id;请先从 LIST_EVENTS 获取
4. 删除事件和拒绝邀请
使用场景:用户想删除事件或拒绝会议邀请
工具调用顺序:
OUTLOOK_DELETE_EVENT- 删除事件 [可选]OUTLOOK_DECLINE_EVENT- 拒绝会议邀请 [可选]
关键参数:
event_id:要删除或拒绝的事件send_notifications:是否向参会者发送取消通知(默认 true)comment:拒绝原因(用于 DECLINE_EVENT)proposedNewTime:拒绝时建议的替代时间
注意事项:
- 删除时若 send_notifications=true,会发送取消邮件
- 拒绝时可提议新时间,开始和结束时间须采用 ISO 8601 格式
- 删除周期性事件主项会删除所有实例
- DECLINE_EVENT 中的 sendResponse 控制是否通知组织者
5. 查找可用的会议时间
使用场景:用户希望为多人查找最佳会议时段
工具调用顺序:
OUTLOOK_FIND_MEETING_TIMES- 获取会议时间建议【必需】OUTLOOK_GET_SCHEDULE- 查看特定人员的空闲/忙碌情况【替代方案】
关键参数:
attendees:与会者对象数组,包含邮箱和类型meetingDuration:ISO 8601 时长(例如,1 小时用 'PT1H',30 分钟用 'PT30M')timeConstraint:要在其中搜索的时间段minimumAttendeePercentage:最低置信度阈值(0-100)Schedules:用于 GET_SCHEDULE 的邮箱数组StartTime/EndTime:查询日程的时间范围(最长 62 天)
注意事项:
- FIND_MEETING_TIMES 默认在工作时间内搜索;如需全天候搜索,请使用 activityDomain='unrestricted'
- 时间约束中的时段必须为开始和结束时间都指定 dateTime 和 timeZone
- GET_SCHEDULE 查询时段不得超过 62 天
- 会议建议会考虑与会者的空闲情况,但面对复杂群组时,返回的时间可能不是最优选项
常见模式
事件 ID 解析
1. Call OUTLOOK_LIST_EVENTS with time-bound filter
2. Find target event by subject or other criteria
3. Extract event id (e.g., 'AAMkAGI2TAAA=')
4. Use in UPDATE, DELETE, or GET_EVENT calls
日历的 OData 筛选语法
时间范围筛选:
filter: "start/dateTime ge '2024-07-01T00:00:00Z' and start/dateTime le '2024-07-31T23:59:59Z'"
主题包含:
filter: "contains(subject, 'Project Review')"
组合筛选:
filter: "contains(subject, 'Review') and categories/any(c:c eq 'Work')"
时区处理
- 获取用户时区:使用 select=['timeZone'] 调用
OUTLOOK_GET_MAILBOX_SETTINGS - 筛选条件中的日期时间值使用统一时区
- 日历视图要求使用带 Z 后缀的 UTC 时间戳
- LIST_EVENTS 筛选条件接受日期时间值中的时区
创建在线会议
1. Set is_online_meeting: true
2. Set online_meeting_provider: 'teamsForBusiness'
3. Create event with OUTLOOK_CALENDAR_CREATE_EVENT
4. Teams join link available in response onlineMeeting field
5. Or retrieve via OUTLOOK_GET_EVENT for the full join URL
已知注意事项
日期时间格式:
- 必须使用 ISO 8601 格式:'2025-01-03T10:00:00'
- 日历视图要求使用带 Z 的 UTC 时间:'2025-01-03T10:00:00Z'
- 筛选值需要使用单引号:"'2025-01-03T00:00:00Z'"
- 时区不匹配会导致事件边界偏移;请务必先解析用户时区
OData 筛选错误:
- 400 Bad Request 通常表示筛选语法有误
- 并非所有事件属性都支持筛选(createdDateTime 不支持)
- 遇到 400 错误时,请调整语法或范围后重试
- 有效的筛选字段:start/dateTime、end/dateTime、subject、categories、isAllDay
与会者管理:
- 添加与会者会触发邀请邮件
- 更新与会者会替换整个列表;请包含所有需要的与会者
- 与会者类型:'required'、'optional'、'resource'
- 日历委派会影响可访问的日历
响应结构:
- 事件嵌套于 response.data.value
- 事件时间位于 event.start.dateTime 和 event.end.dateTime
- 日历视图可能嵌套于 data.results[i].response.data.value
- 请使用针对不同嵌套层级的回退方案进行稳健解析
快速参考
| 任务 | 工具标识 | 关键参数 |
|---|---|---|
| 创建事件 | OUTLOOK_CALENDAR_CREATE_EVENT | subject, start_datetime, end_datetime, time_zone |
| 列出事件 | OUTLOOK_LIST_EVENTS | filter, select, top, timezone |
| 获取事件详情 | OUTLOOK_GET_EVENT | event_id |
| 日历视图 | OUTLOOK_GET_CALENDAR_VIEW | start_datetime, end_datetime |
| 更新事件 | OUTLOOK_UPDATE_CALENDAR_EVENT | event_id, subject, start_datetime |
| 删除事件 | OUTLOOK_DELETE_EVENT | event_id, send_notifications |
| 拒绝事件 | OUTLOOK_DECLINE_EVENT | event_id, comment |
| 查找会议时间 | OUTLOOK_FIND_MEETING_TIMES | attendees, meetingDuration |
| 获取日程 | OUTLOOK_GET_SCHEDULE | Schedules, StartTime, EndTime |
| 列出日历 | OUTLOOK_LIST_CALENDARS | user_id |
| 邮箱设置 | OUTLOOK_GET_MAILBOX_SETTINGS | select |
适用场景
当需要执行概述中所述的工作流或操作时,可使用此技能。
限制
- 仅当任务明确符合上述范围时,才使用此技能。
- 不要将输出视为环境特定验证、测试或专家审查的替代品。
- 如果缺少必需的输入、权限、安全边界或成功标准,请暂停并请求澄清。