Microsoft 365 Calendar について
Microsoft 365 Calendar は、Microsoft Graph 経由で Outlook カレンダーを操作する MCP サーバーです。イベント管理や空き時間の確認に対応し、Microsoft 365 Mail のホストが管理する OAuth 認証情報を再利用します。
主な機能
- 01イベントの一覧表示と詳細取得
- 02イベントの作成、更新、キャンセル、削除
- 03招待の承諾または辞退
- 04空き状況の確認と会議時間の提案
- 05アクセス可能なカレンダーの一覧表示
活用シーン
- 01指定期間のイベント確認
- 02参加者全員が空いている時間の検索
- 03カレンダー会議の作成や変更
MCP 対応
Microsoft Graph のカレンダー操作を MCP クライアントに提供し、イベント管理、カレンダー一覧、空き状況の確認、会議時間の提案に対応します。認証はホストが Microsoft 365 Mail 経由で行い、このサーバーは保存済みの認証情報を読み取ります。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @mindstone/mcp-server-microsoft-calendarMS_CLIENT_IDMicrosoft Entra (Azure AD) application client IDMS_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 responsesMICROSOFT_REQUEST_TIMEOUT_MSOverride the upstream Microsoft Graph request timeout in milliseconds (max 300000 = 5 min)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
10掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| top | integer | いいえ | 返すイベントの最大数(デフォルト:50) |
| calendarId | string | いいえ | カレンダー ID(デフォルト:メインカレンダー) |
| returnText | boolean | いいえ | JSON ではなく、読みやすい予定テキストを返します(デフォルト:false) |
| endDateTime | any | いいえ | ISO 形式の終了日時(デフォルト:今から 7 日後) |
| startDateTime | string | いいえ | ISO 形式の開始日時(デフォルト:現在) |
| deviceTimezone | string | いいえ | システムプロンプトにあるユーザーのデバイスの IANA タイムゾーン(例:"Europe/London")。カレンダー設定を利用できない場合のフォールバックとして使用し、タイムゾーンの不一致検出にも使用します。 |
詳細
@mindstone/mcp-server-microsoft-calendar
Microsoft 365 Outlook Calendar MCP サーバーです。Microsoft Graph API 経由で、イベントの一覧表示、取得、作成、更新、削除、キャンセル、返信、空き時間の確認、会議時間の検索、カレンダーの一覧表示を行えます。
コホート形式の Microsoft 365 カレンダー MCP です。認証には @mindstone/mcp-server-microsoft-mail が管理する OAuth の仕組みを再利用するため、ホストで一度サインインすれば、同じ認証情報でカレンダー、メール、ファイル、Teams、SharePoint を利用できます。
ステータス
- バージョン: 0.2.0 · npm
- 認証: OAuth(ホストがオーケストレーション。認証は
mcp-server-microsoft-mailと共有)(MS_CLIENT_ID) - ツール: 10(イベント、カレンダー、空き時間、スケジュール調整)
- サーフェス: cloud-api
- 機械可読データ:
STATUS.json - 共有ライブラリ:
@mindstone/mcp-server-microsoft-shared
開発の背景
2026年5月にこのサーバーを移植した時点では、Microsoft の Graph MCP のラインアップに、単独で利用できる Outlook Calendar サーバーはまだありませんでした。また、当時のコミュニティ製の選択肢では、カレンダーが独立した認証対象として扱われており、コネクターごとに別々の OAuth 認証を行い、更新トークンも個別に保存する必要がありました。そこで、MindstoneRebel に含まれていたコネクターを 1 対 1 で移植し、5 つの Microsoft 365 コネクター(メール、カレンダー、ファイル、Teams、SharePoint)で一組の認証情報と、トークンの永続化およびリクエストタイムアウトを扱う共有ライブラリパッケージを共用できるようにしました。また、ホストがすでに復旧処理に対応している構造化された auth_required エンベロープも共用します。カレンダーでは独自のツールを定義せず、@mindstone/mcp-server-microsoft-mail の authenticate_microsoft_account ツールを再利用します。
やり取りの例
「今日の午後の予定を確認して、明日、Alice と私の両方が空いている 30 分の時間枠を探してください。」
ホストが呼び出すツール:
list_events— 今日の残りの時間を含む日付範囲を指定します。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 自体は開始しません。
ワンクリックインストール
ボタンをクリックすると、ホストから 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_ID | Microsoft 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、またはアジェンダ形式のテキスト)。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 | ユーザーがアクセスできるすべてのカレンダーを一覧表示します。 |
セキュリティに関する注意事項
- 独自の認証ツールはありません。コホート内で OAuth の窓口を一本化するため、サインインは
@mindstone/mcp-server-microsoft-mailに委任されます。 - トークンファイルはホストによってモード
0600で書き込まれます。このサーバーはコホート共有ライブラリ経由でトークンファイルを読み取り、不正な形式のファイルは安全側に倒して拒否します。 - クラウド環境では、デスクトップセッションのみがリフレッシュトークンを更新できるよう、
MICROSOFT_DISABLE_REFRESH=1がデフォルトで設定されています。 - ツールごとの Graph 呼び出しには、呼び出し元とコホートのタイムアウトシグナルを合成したものが適用されます。
- Graph 由来のテキストはすべて
<untrusted-content>エンベロープ内で返されます。構造化されているように見えるフィールド(ID、URL、列挙型のような値、タイムスタンプ)は、文書化された制約形式に一致する場合のみそのまま渡され、それ以外はエンベロープに格納されます。モデルに届く前に、ベンダーのエラーメッセージもエンベロープに格納されます。 - Graph リクエストを行う前に、ツール入力(メールアドレス、ISO 形式の日付時刻、範囲が制限された数値、厳格な繰り返しオブジェクト)を検証し、不正な入力は安全側に倒して拒否します。
- Graph リクエストパスに組み込まれるイベント/カレンダー ID は、ネットワークリクエストの前に検証し、不正な ID は安全側に倒して拒否します(
?、#、%、\、空白、./..セグメントを拒否)。組み込み箇所では URL エンコードするため、細工された ID によって認証済みリクエストの送信先が変更されることはありません。 - Graph のページネーション結果を黙って破棄することはありません。一覧表示エンドポイントは、ベンダー指定の継続 URL をたどる代わりに
truncated/attachmentsTruncatedを報告します。
ライセンス
FSL-1.1-MIT — Functional Source License バージョン 1.1。将来的に MIT ライセンスとなります。競合しない用途では無料で利用でき、LICENSE に記載された変換日に MIT ライセンスへ再ライセンスされます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。