HEXUXIU/M365-Copilot2API

Microsoft 365 Copilot → OpenAI / Anthropic 兼容 API 网关。

M365 Copilot2API とは?

M365 Copilot2API は、Go で記述されたセルフホストゲートウェイであり、OpenAI 互換または Anthropic 互換の HTTP API(例:ChatGPT スタイルの SDK、Claude Code、Cursor、OpenCode)を期待する任意のクライアントを使用して Microsoft 365 Copilot と通信できるようにします。内部的には M365 Copilot サービスが使用するプライベートな ChatHub WebSocket プロトコルを使用し、それらのメッセージを OpenAI および Anthropic API で定義された標準的な JSON ペイロードに変換します。

存在理由

  • Microsoft 365 Copilot は商用サブスクリプションでのみ利用可能であり、その API は公開されていません。このゲートウェイは WebSocket プロトコルをリバースエンジニアリングし、使い慣れた REST インターフェースを公開します。
  • これにより、開発者はプロプライエタリなプロトコル用に書き直すことなく、既存のツール、ライブラリ、エージェントを再利用できます。
  • また、管理コンソール、API キー処理、マルチアカウントローテーション、プロキシプール、使用統計、キャッシュなど、通常は自分で構築しなければならない機能を追加します。

主な機能(README に記載されている通り)

機能 内容
OpenAI 互換の /v1/chat/completions 同じ JSON スキーマを受け入れ、ストリーミング(stream:true)と関数呼び出しをサポートします。
Anthropic 互換の /v1/messages Anthropic リクエスト形式を使用して Claude Code、Cursor などで動作します。
Responses エンドポイント(/v1/responses OpenAI の古い Responses プロトコル(例:Codex)との互換性。
SSE ストリーミング 公式 API と同様に、トークンごとのイベントを返します。
ツール呼び出し変換 OpenAI 関数呼び出しを M365 Copilot ツールプロトコルにマッピングします(2つの計画モード:router または native)。
コンテンツキーセッション再利用 同一の会話コンテキストがキャッシュされ、後続のリクエストは新しいメッセージのみを上流に送信し、トークンを節約します。
明示的セッションバインディング ヘッダー X-M365-Session-Id がリクエストを強制的に特定のクラウド会話に継続させます。
自動クリーンアップ 設定可能な TTL(デフォルト 2 時間)後または最大サイズ制限に達したときに、アイドル状態のクラウド会話が回収されます。
マルチアカウント管理 OAuth/PKCE フロー、ラウンドロビンリクエスト分散、およびアカウントが無効になった場合の自動フェイルオーバー。
API キー管理 クライアントが認証に使用するキーを作成、取り消し、表示するための Web UI。
プロキシプール ヘルスチェックと失敗時のクールダウンを備えた HTTP、HTTPS、SOCKS5 プロキシをサポートします。
使用統計 キーごと、アカウントごと、モデルごとの使用量を usage.jsonl に記録し、ダッシュボードにヒット率カウンターを表示します。
マルチモーダル入力 画像データ(base64 データ URL または公開 HTTPS URL)を受け入れ、M365 の UploadFile エンドポイントに転送してから、ファイル参照をチャットメッセージに注入します。
画像生成 OpenAI の画像 API を模倣する /v1/images/generations を公開します。
Web 管理コンソール ログイン、アカウント認証、キー管理、プロキシプール、会話ビュー、モデルテスト、設定用の完全な UI。

仕組み – 高レベルアーキテクチャ

OpenAI/Anthropic client  ──►  HTTP endpoint (/v1/…)  ──►  M365-Copilot2API (Go)
                                                   │
                                                   │  internal/chathub
                                                   ▼
                                            ChatHub WebSocket (private)
                                                   │
                                                   ▼
                                            Microsoft 365 Copilot (cloud)
  • internal/chathub:プライベート ChatHub プロトコルの低レベル WebSocket ハンドシェイク、ハートビート、イベントストリーム解析を処理します。
  • internal/web/session_resolver.go:リクエストをバインドする M365 アカウントとクラウド会話を決定し、コンテンツキー再利用ロジックを実装します。
  • アカウントローテーションとフェイルオーバー:リクエストがレート制限、認証エラー、またはその他の上流の障害にヒットした場合、ゲートウェイは次の健全なアカウントで自動的に再試行します。

はじめに(README のクイックスタート手順)

  1. GitHub Releases ページからお使いの OS/アーキテクチャ用のビルド済みバイナリをダウンロードします。
  2. 実行します——デフォルトで 127.0.0.1:4141 でリッスンし、デフォルトの管理者パスワード admin123 を使用します(初回ログイン時に変更を強制されます)。
  3. ブラウザで http://127.0.0.1:4141 を開き、ログインして、Accounts ページを使用して Microsoft 365 認証情報で OAuth/PKCE フローを開始します。
  4. コールバック URL を UI に貼り付けた後、API Keys ページで API Key を作成します。
  5. OpenAI 互換クライアントでゲートウェイを呼び出します。例:
    curl http://127.0.0.1:4141/v1/chat/completions \
         -H "Authorization: Bearer <YOUR_API_KEY>" \
         -H "Content-Type: application/json" \
         -d '{"model":"gpt-5.6-sol","messages":[{"role":"user","content":"你好"}]}'
    

設定のハイライト

すべての設定は環境変数です(.env.example が提供されています)。重要な設定項目は以下の通りです:

  • M365_LISTEN – バインドするアドレス/ポート。
  • M365_ADMIN_PASSWORD – 管理者ログインパスワード。
  • M365_PROXY_POOL – カンマ区切りのプロキシリスト。
  • M365_TOOL_PLANNING_MODErouter(ゲートウェイがツールルーティングを決定)または native(上流の Copilot に処理を任せる)。
  • セッション関連の TTL(M365_SESSION_TTL_MINUTESM365_CONTEXT_TTL_MINUTES)。
  • 自動クリーンアップ制御(M365_AUTO_CLEANUP_*)。

典型的なユースケース

  • 開発者:カスタムクライアントを記述せずに、既存の OpenAI SDK を使用して Microsoft 365 Copilot を実験したい場合。
  • チーム:Copilot を呼び出す必要があるが、プロバイダー(OpenAI、Anthropic、M365)間で統一された API サーフェスを維持する必要がある内部エージェントを構築する場合。
  • パワーユーザー:使用状況を監視し、複数の Microsoft アカウントをローテーションし、会話コンテキストをキャッシュしてトークン消費を減らすためのローカルダッシュボードが必要な場合。

制限事項と法的通知(著者による記載)

  • このプロジェクトは公式の Microsoft 製品ではなく、Microsoft、OpenAI、Anthropic との提携もありません。
  • サードパーティのアカウントやプロキシプールを通じて Copilot にアクセスすると、サービスの利用規約に違反する可能性があります。ユーザーはすべてのリスクを負います。
  • 個人的な学習/研究のみを目的としています——商業的な再販や大規模な展開は禁止されています。
  • アカウントの停止、データ損失、その他の損害について一切の責任を負いません。

上記の情報はすべてリポジトリの README から直接取得したものです。追加の機能は推測されていません。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト