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 のクイックスタート手順)
- GitHub Releases ページからお使いの OS/アーキテクチャ用のビルド済みバイナリをダウンロードします。
- 実行します——デフォルトで
127.0.0.1:4141でリッスンし、デフォルトの管理者パスワードadmin123を使用します(初回ログイン時に変更を強制されます)。 - ブラウザで
http://127.0.0.1:4141を開き、ログインして、Accounts ページを使用して Microsoft 365 認証情報で OAuth/PKCE フローを開始します。 - コールバック URL を UI に貼り付けた後、API Keys ページで API Key を作成します。
- 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_MODE–router(ゲートウェイがツールルーティングを決定)またはnative(上流の Copilot に処理を任せる)。- セッション関連の TTL(
M365_SESSION_TTL_MINUTES、M365_CONTEXT_TTL_MINUTES)。 - 自動クリーンアップ制御(
M365_AUTO_CLEANUP_*)。
典型的なユースケース
- 開発者:カスタムクライアントを記述せずに、既存の OpenAI SDK を使用して Microsoft 365 Copilot を実験したい場合。
- チーム:Copilot を呼び出す必要があるが、プロバイダー(OpenAI、Anthropic、M365)間で統一された API サーフェスを維持する必要がある内部エージェントを構築する場合。
- パワーユーザー:使用状況を監視し、複数の Microsoft アカウントをローテーションし、会話コンテキストをキャッシュしてトークン消費を減らすためのローカルダッシュボードが必要な場合。
制限事項と法的通知(著者による記載)
- このプロジェクトは公式の Microsoft 製品ではなく、Microsoft、OpenAI、Anthropic との提携もありません。
- サードパーティのアカウントやプロキシプールを通じて Copilot にアクセスすると、サービスの利用規約に違反する可能性があります。ユーザーはすべてのリスクを負います。
- 個人的な学習/研究のみを目的としています——商業的な再販や大規模な展開は禁止されています。
- アカウントの停止、データ損失、その他の損害について一切の責任を負いません。
上記の情報はすべてリポジトリの README から直接取得したものです。追加の機能は推測されていません。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト