teams-migration について
TeamsMigration は、Microsoft Teams のチャット内容を移行・エクスポートするスキルです。チャットをチームチャネルにコピーしたりバックアップしたりする用途向けで、送信者情報、タイムスタンプ、画像、添付ファイルを保持します。読み取りには `teams-mcp`、一括投稿には Microsoft Graph API を使います。
主な機能
- 01チャット内容をチームチャネルへ移行
- 02チャットメッセージを JSON に出力
- 03ページネーションで全メッセージを取得
- 04送信者と時刻の情報を保持
- 05Graph API でレート制限付き一括投稿
活用シーン
- 01会議チャットをチームチャネルへ移行
- 02グループチャットや会議チャットを保存
- 03多数のチャットメッセージを一括投稿
- 04移行した件数と内容を確認
MCP 対応
`teams-mcp` MCP サーバーで Teams のチャットメッセージを読み取ります。大量投稿は Microsoft Graph API を直接使用します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ julianobarbosa/ claude-code-skills --skill teams-migrationインストール後、Claude Code で/teams-migrationを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
Tools/MigrateChat.mjsWorkflows/ExportChat.mdMigrateChat.md詳細
カスタマイズ
実行前に、次の場所にユーザー設定があるか確認してください:
~/.claude/skills/PAI/USER/SKILLCUSTOMIZATIONS/TeamsMigration/
このディレクトリが存在する場合は、そこにある PREFERENCES.md、設定、またはリソースを読み込んで適用してください。これらはデフォルトの動作より優先されます。ディレクトリが存在しない場合は、スキルのデフォルト設定に従ってください。
音声通知
このスキルが呼び出されたら、ほかの操作を行う前に、必ずこの通知を送信してください。
-
音声通知を送信:
curl -s -X POST http://localhost:8888/notify \ -H "Content-Type: application/json" \ -d '{"message": "Running the WORKFLOWNAME workflow in the TeamsMigration skill to ACTION"}' \ > /dev/null 2>&1 & -
テキスト通知を出力:
Running the **WorkflowName** workflow in the **TeamsMigration** skill to ACTION...
TeamsMigration
Teams の会議チャットまたはグループチャットの内容をチームチャネルに移行し、送信者の帰属、タイムスタンプ、画像、添付ファイルを保持します。読み取りには teams-mcp MCP サーバーを使用し、大量の投稿には Microsoft Graph API を直接使用します。トークンの自動更新とレート制限に対応しています。
ワークフローの振り分け
| ワークフロー | トリガー | ファイル |
|---|---|---|
| MigrateChat | 「チャットを移行」「チャットをチャネルにコピー」「メッセージを移動」 | Workflows/MigrateChat.md |
| ExportChat | 「チャットをエクスポート」「チャットをバックアップ」「メッセージをダウンロード」 | Workflows/ExportChat.md |
例
例 1:会議チャットをチームチャネルに移行する
User: "Migrate the Teams meeting chat to the DevOps channel"
--> Invokes MigrateChat workflow
--> Verifies auth, fetches all messages with pagination
--> Filters system/deleted messages, reverses to chronological order
--> Posts each message with sender + timestamp attribution
--> Verifies count parity and spot-checks content
例 2:チャットメッセージをローカルファイルにエクスポートする
User: "Export all messages from our DevOps chat"
--> Invokes ExportChat workflow
--> Fetches all messages with full pagination
--> Saves to JSON file with metadata
クイックリファレンス
- MCP サーバー:
@floriscornel/teams-mcp(npm) - 認証ファイル:
~/.msgraph-mcp-auth.json - トークンキャッシュ:
~/.teams-mcp-token-cache.json - 認証コマンド:
npx @floriscornel/teams-mcp@latest authenticate - 移行ツール:
Tools/MigrateChat.mjs(Node.js、依存関係なし)
主な知見
- Graph API は
descending: falseに対応していません -- 降順で取得し、配列を逆順にします download_message_hosted_contentはチャネルメッセージでのみ機能し、チャットメッセージでは機能しません- トークンの自動更新 は
~/.teams-mcp-token-cache.json内の MSAL 更新トークンを介して行われます - レート制限 は、429 応答の
Retry-Afterヘッダーに従って処理されます - 一括投稿(50 件以上のメッセージ)には、 MCP ツール呼び出しではなく、Graph API を直接使用する
Tools/MigrateChat.mjsを使います - アカウントには Teams ライセンスが必要です -- ライセンスがないと
Chat.*エンドポイントは失敗します(403)
注意点
- Graph API はチャットメッセージで
descending: falseを無視します: エンドポイントは常に降順で返しますが、エラーは通知されません。必ず降順で取得し、ローカルで配列を逆順にしてください。昇順だと仮定すると、移行先にメッセージが新しい順で投稿されます。 download_message_hosted_contentはチャネルメッセージでのみ機能し、チャットメッセージでは機能しません: 会議チャットやグループチャット内の画像には、/chats/{id}/messages/{id}/hostedContentsを経由する別のコードパスが必要です。チャットメッセージに対してこれを呼び出すと、「content not found」という誤解を招くメッセージとともに 404 が返されます。~/.teams-mcp-token-cache.json内の MSAL 更新トークンは、90 日間使用しないと有効期限が切れます: 長期間空いた後の最初の移行はAADSTS700082で失敗します。npx @floriscornel/teams-mcp@latest authenticateを再実行してください。トークンの更新は、失敗するまではサイレントに行われます。Chat.*Graph エンドポイントには、呼び出し元アカウントの Teams ライセンスが必要です: ライセンスのないサービスアカウントは、ライセンスではなく権限に言及するテキストとともに 403 を返します。Graph のスコープを調べる前に、az ad user show --id <upn> --query assignedLicensesで確認してください。- MCP ツール呼び出しには、毎秒約 50 メッセージのレート制限があります: MCP レイヤー経由の一括移行は、スロットリングによって数時間かかることがあります。50 件以上のメッセージでは、MCP を介さずに
Tools/MigrateChat.mjsを使い、Retry-Afterに対応したうえで Graph に直接接続してください。 - 投稿時、送信者名はメタデータではなく本文に保持されます: 移行先のチャネルでは移行ボットが投稿者として表示され、元の送信者はメッセージ本文に埋め込まれます。投稿者を基準とするコンプライアンス/eDiscovery クエリでは、移行されたコンテンツがまったく見つかりません。