mcpField
O
outlook-calendar-automation

outlook-calendar-automation

github.com/sickn33生产力48.7k965 次安装今天更新
代码仓库

关于 outlook-calendar-automation

outlook-calendar-automation 是通过 Composio 的 Outlook 工具包和 Rube MCP 操作 Outlook Calendar 的技能,适用于日程管理与会议协调。内容涵盖身份验证、时区、参会者通知及写入操作授权。

主要功能

  1. 01创建、更新和删除事件
  2. 02搜索事件及日历视图
  3. 03查找会议时间并查看日程
  4. 04管理邀请和参会者
  5. 05处理时区与重复事件
  6. 06对重要更改先取得批准

适用场景

  1. 01安排 Outlook 日历事件
  2. 02查找指定日期范围内的事件
  3. 03协调多位参会者的会议时间
  4. 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 服务。目标账户仍需通过返回的连接流程进行身份验证,并授予所需权限范围。

  1. 确认 RUBE_SEARCH_TOOLS 有响应,以验证 Rube MCP 已可用
  2. 调用 RUBE_MANAGE_CONNECTIONS,指定工具包为 outlook
  3. 如果连接状态不是 ACTIVE,请通过返回的身份验证链接完成 Microsoft OAuth
  4. 在运行任何工作流之前,确认连接状态显示为 ACTIVE

日历与通知权限

发现当前工具架构,并确定确切的邮箱、日历和事件实例。搜索或查询空闲/忙碌状态并不代表获准发送邀请、修改、取消或拒绝事件。在执行这些写入操作前,确认已获批准的收件人名单、内容以及操作范围是整个系列还是单个实例;这些操作可能会立即通知与会者。除非有意替换,否则请保留现有与会者和类别列表;如果无法确定创建或更新操作是否成功,请先核对,再重试。时区示例因适配器而异:请核实支持的时区、偏移量和夏令时边界;对于展开后的周期性事件实例和跨时段事件,请使用 calendarView。尽量减少共享的日历详情。

核心工作流

1. 创建日历事件

适用场景:用户想在 Outlook 日历上安排新事件

工具调用顺序:

  1. OUTLOOK_LIST_CALENDARS - 列出可用日历 [可选]
  2. 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,则设为 true
  • location:地点字符串
  • 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. 列出和搜索事件

使用场景:用户想查找日历中的事件

工具调用顺序:

  1. OUTLOOK_GET_MAILBOX_SETTINGS - 获取用户时区,以便进行准确查询 [前置条件]
  2. OUTLOOK_LIST_EVENTS - 使用筛选条件搜索事件 [必需]
  3. OUTLOOK_GET_EVENT - 获取特定事件的完整详情 [可选]
  4. 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. 更新事件

使用场景:用户想修改已有的日历事件

工具调用顺序:

  1. OUTLOOK_LIST_EVENTS - 查找要更新的事件 [前置条件]
  2. OUTLOOK_UPDATE_CALENDAR_EVENT - 更新事件 [必需]

关键参数:

  • event_id:唯一事件标识符(来自 LIST_EVENTS)
  • subject:新的事件标题(可选)
  • start_datetime/end_datetime:新的时间(可选)
  • time_zone:新时间所用的时区
  • attendees:更新后的参会者列表(提供后会替换现有列表)
  • body:更新后的描述,包含 contentType 和 content
  • location:更新后的位置

注意事项:

  • UPDATE 会将提供的字段与现有事件合并;未指定的字段会保留
  • 提供 attendees 会替换整个参会者列表;请包含所有需要的参会者
  • 提供 categories 会替换整个类别列表
  • 更新时间可能会触发向参会者重新发送通知
  • 必须提供 event_id;请先从 LIST_EVENTS 获取
4. 删除事件和拒绝邀请

使用场景:用户想删除事件或拒绝会议邀请

工具调用顺序:

  1. OUTLOOK_DELETE_EVENT - 删除事件 [可选]
  2. OUTLOOK_DECLINE_EVENT - 拒绝会议邀请 [可选]

关键参数:

  • event_id:要删除或拒绝的事件
  • send_notifications:是否向参会者发送取消通知(默认 true)
  • comment:拒绝原因(用于 DECLINE_EVENT)
  • proposedNewTime:拒绝时建议的替代时间

注意事项:

  • 删除时若 send_notifications=true,会发送取消邮件
  • 拒绝时可提议新时间,开始和结束时间须采用 ISO 8601 格式
  • 删除周期性事件主项会删除所有实例
  • DECLINE_EVENT 中的 sendResponse 控制是否通知组织者
5. 查找可用的会议时间

使用场景:用户希望为多人查找最佳会议时段

工具调用顺序:

  1. OUTLOOK_FIND_MEETING_TIMES - 获取会议时间建议【必需】
  2. 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_EVENTsubject, start_datetime, end_datetime, time_zone
列出事件OUTLOOK_LIST_EVENTSfilter, select, top, timezone
获取事件详情OUTLOOK_GET_EVENTevent_id
日历视图OUTLOOK_GET_CALENDAR_VIEWstart_datetime, end_datetime
更新事件OUTLOOK_UPDATE_CALENDAR_EVENTevent_id, subject, start_datetime
删除事件OUTLOOK_DELETE_EVENTevent_id, send_notifications
拒绝事件OUTLOOK_DECLINE_EVENTevent_id, comment
查找会议时间OUTLOOK_FIND_MEETING_TIMESattendees, meetingDuration
获取日程OUTLOOK_GET_SCHEDULESchedules, StartTime, EndTime
列出日历OUTLOOK_LIST_CALENDARSuser_id
邮箱设置OUTLOOK_GET_MAILBOX_SETTINGSselect

适用场景

当需要执行概述中所述的工作流或操作时,可使用此技能。

限制

  • 仅当任务明确符合上述范围时,才使用此技能。
  • 不要将输出视为环境特定验证、测试或专家审查的替代品。
  • 如果缺少必需的输入、权限、安全边界或成功标准,请暂停并请求澄清。

评论

支持 Markdown