MCP OAuth認証

Bob Shellはユーザーデリゲートアクセスを必要とするMCPサーバー向けにOAuth 2.1をサポートしています。Bobはtokenのリフレッシュを含む認証フローを自動的に処理するため、手動でtokenを管理する必要はありません。

注:

MCPの一般的な設定については、MCPサーバーの設定を参照してください。

概要

一部のMCPサーバーは、たとえばGitHubリポジトリの読み取りやGoogle Driveファイルへのアクセスなど、ユーザーとして代理で操作する必要があります。これらのサーバーはOAuth 2.1を使用して、データにアクセスする前にユーザーの同意を求めます。

Bobは完全なOAuthフローを自動的に処理します。OAuthが必要なサーバーに接続すると、Bobはブラウザーで認証フローを開きます。認証後、Bobはtokenのストレージとリフレッシュを手動の操作なしで管理します。

これはheadersのBearerトークンやenvのAPIキーなどの静的認証方式とは異なり、静的認証方式はサービスアカウントや期限切れにならないtokenに適しています。以下の場合にOAuthを使用します:

  • サーバーがユーザーアカウントが所有するリソースにアクセスする必要がある場合
  • サーバーの認証サーバーがリフレッシュが必要な短命のtokenを発行する場合
  • MCPの設定ファイルに長命のシークレットを保存したくない場合

認証フローの仕組み

  1. OAuthが有効なMCPサーバーを設定ファイルに追加します(headersenvの認証情報は不要)
  2. Bobがサーバーに初めて接続するとき、サーバーのOAuth認証メタデータを検出します
  3. Bobはサインインしてコンセントするよるブラウザーベースの認証プロンプトを開きます
  4. 認証後、Bobはアクセスおよびリフレッシュtokenをセッション間で安全に保存します
  5. Bobはtokenが期限切れになる前に自動的にリフレッシュします。リフレッシュが失敗しない限り、再度プロンプトが表示されることはありません。
Bob Shell                   認証サーバー                  MCPサーバー
   |                                |                               |
   |-- サーバーに接続 ------------->|                               |
   |<-- OAuthメタデータ (401) ------|                               |
   |-- 認証プロンプトを開く ------->|                               |
   |   (ユーザーがサインインして同意)|                               |
   |<-- 認証コード -----------------|                               |
   |-- tokenと交換 ---------------->|                               |
   |<-- アクセス + リフレッシュtoken|                               |
   |-- 認証済みリクエスト ------------------------------------->    |
   |   (必要に応じて自動リフレッシュ)                               |

OAuth対応サーバーの設定

OAuth対応のMCPサーバーは認証要件を自動的にアドバタイズします。ほとんどの場合、サーバーURLのみが必要です。OAuthフィールドはオプションです。Bobは以下のオプションのOAuthプロパティもサポートしています:

  • oauth:サーバーのOAuthを無効にするにはfalseに、明示的に有効にするにはtrueに設定します
  • clientId:認証サーバーが必要とする場合のOAuth クライアントID
  • clientSecret:認証サーバーが必要とする場合のOAuthクライアントシークレット
  • scope:リクエストするOAuthスコープのスペース区切りリスト

~/.bob/mcp_settings.json(グローバル)または.bob/mcp.json(プロジェクト)の設定例

{
  "mcpServers": {
    "my-oauth-server": {
      "url": "https://your-server-url.com/mcp"
    }
  }
}

Bobは接続時にOAuth要件を検出してフローを開始します。headersenvの認証情報は不要です。

警告:

OAuth対応サーバーに静的なAuthorizationヘッダーを追加すると、自動OAuthが完全に無効になります。Bobはフローを試みません。逆に、OAuthがアクティブな場合、Bobはリクエストを送信する前に静的なAuthorizationヘッダーを削除します。どちらか一方の方法のみを使用してください。

プロンプト表示時の認証

Bobが初めてOAuth対応サーバーに接続するとき:

  1. ブラウザーウィンドウが開いて認証プロンプトが表示されます
  2. サーバーが要求しているパーミッションを確認します
  3. 必要なアカウントでサインインしてコンセントします
  4. Bobはtokenを保存し、接続を自動的に完了します

プロンプトはデフォルトのブラウザーで開きます。認証が完了すると、Bob Shellは自動的に接続を再開します。

トラブルシューティング

認証プロンプトが表示されない

  • 設定でサーバーが無効としてマークされていないか確認します
  • Bob Shellを再起動してサーバー接続を再開始します
  • ブラウザーが認証ページをブロックしていないか確認します

認証は成功したがサーバーへの接続が失敗する

  • サーバーURLが正しくアクセス可能であることを確認します
  • コンセントの手順で必要なすべてのパーミッションを付与したことを確認します
  • 追加のセットアップ要件についてサーバーのドキュメントを確認します

Tokenが頻繁に期限切れになり再認証が必要になる

  • 認証サーバーがリフレッシュtokenをサポートしているか確認します。一部のサーバーは短命のアクセス専用tokenを発行します。
  • システムクロックが正確であることを確認します。時刻のずれが早期のtoken期限切れを引き起こす場合があります

サインアウトまたはアカウントを切り替えたい

設定ファイルのサーバーエントリを削除または名前変更してから再追加します。これによりBobが新しいサーバーとして扱い、次の接続時に新しい認証プロンプトがトリガーされます。

このトピックはいかがですか?