mcpField
O
outlook-calendar-automation

outlook-calendar-automation

github.com/davepoon生産性3.7k153 回インストール2 日前に更新
リポジトリ

outlook-calendar-automation について

Outlook カレンダーを使うユーザー向けに、Rube MCP と Composio の Outlook ツールキット経由で予定を操作するスキルです。予定管理や複数人の会議時間検索に対応します。

主な機能

  1. 01予定の作成・更新・削除
  2. 02予定検索と期間表示
  3. 03複数人の会議時間検索
  4. 04招待と返信の処理
  5. 05Teams オンライン会議の設定

活用シーン

  1. 01参加者を含む Outlook 予定の登録
  2. 02日時やキーワードによる予定検索
  3. 03参加者間の会議時間調整
  4. 04予定のキャンセルや招待の辞退

MCP 対応

Rube MCP を通じて Composio の Outlook ツールキットを呼び出します。利用前にクライアントで Outlook アカウントを接続し、最新のツールスキーマを取得します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/davepoon/buildwithclaude --skill outlook-calendar-automation

インストール後、Claude Code で/outlook-calendar-automationを入力して読み込まれたか確認します。

詳細

Rube MCP による Outlook カレンダーの自動化

Rube MCP を通じて Composio の Outlook ツールキットを利用し、Outlook カレンダーの操作を自動化します。

ツールキットのドキュメント:composio.dev/toolkits/outlook

前提条件

  • Rube MCP が接続されていること(RUBE_SEARCH_TOOLS を利用可能であること)
  • outlook ツールキットを指定した RUBE_MANAGE_CONNECTIONS による Outlook 接続が有効であること
  • 現在のツールスキーマを取得するため、必ず最初に RUBE_SEARCH_TOOLS を呼び出してください

セットアップ

Rube MCP を入手する:クライアント設定で https://rube.app/mcp を MCP サーバーとして追加します。API キーは不要です。エンドポイントを追加するだけで動作します。

  1. RUBE_SEARCH_TOOLS が応答することを確認し、Rube MCP が利用可能であることを確かめます
  2. ツールキット outlook を指定して RUBE_MANAGE_CONNECTIONS を呼び出します
  3. 接続が ACTIVE でない場合は、返された認証リンクに従って Microsoft OAuth を完了します
  4. ワークフローを実行する前に、接続ステータスが ACTIVE であることを確認します

主なワークフロー

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:本文に HTML が含まれる場合は true に設定します
  • location:物理的な場所を示す文字列
  • is_online_meeting:Teams 会議のリンクを設定する場合は true にします
  • 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 の期間指定用(末尾に Z を付けた UTC)

注意点:

  • 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 はデフォルトで勤務時間内を検索します。24 時間対応にするには 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 を使用します
  • フィルターの日時値には一貫したタイムゾーンを使用します
  • Calendar View では、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

既知の落とし穴

DateTime の形式:

  • 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

Composio を利用

コメント