MCP OAuth認証
OAuth 2.1を使用して、ユーザー委任アクセスを必要とするMCPサーバーにBob Shellを接続します。Bob Shellが認証およびトークン更新プロセスを管理するため、手動でトークンを管理する必要はありません。
MCPの一般的な設定については、MCPサーバーの設定を参照してください。
概要
リポジトリ、クラウドリソース、エンタープライズサービスへのアクセスなど、ユーザーの代わりに動作するModel Context Protocol (MCP) サーバーにBob Shellを接続できます。これらのサーバーはOAuth 2.1を使用するため、サインインしてアクセスを承認できます。
Bob Shellは認証フローを直接管理します。OAuthを必要とするサーバーを設定すると、Bob Shellはデフォルトブラウザで認可ウィンドウを開きます。サインインして権限を承認すると、Bob Shellは手動で認証情報を処理する必要なく、アクセストークンを保存および更新します。
次の場合にOAuthを使用します:
- 個人またはエンタープライズのユーザーアカウントに関連付けられたリソースにアクセスする必要がある場合
- サーバーが自動トークン更新を必要とする短期間のトークンを使用する場合
- 設定ファイルから静的認証情報やシークレットを排除したい場合
期限切れにならない静的APIトークンまたはパーソナルアクセストークンが既にある場合は、代わりにheadersでBearerトークンを使用できます。
認証フローの仕組み
headersまたはenvの認証情報なしで、リモートMCPサーバーのURLを設定ファイルに追加します。- Bob Shellがサーバーに接続すると、Bob ShellはOAuth要件を検出します。
- Bob Shellはブラウザのサインインウィンドウを開き、要求された権限を確認してアクセスを承認します。
- Bob Shellは認証トークンを受信し、セッション間で安全に保存します。
- Bob Shellはトークンの有効期限が切れる前に自動的に更新するため、中断することなく作業できます。
Bob Shell Authorization Server MCP Server
| | |
|-- connect to server ---------->| |
|<-- OAuth metadata (401) -------| |
|-- open auth prompt ----------->| |
| (user signs in & consents) | |
|<-- authorization code ---------| |
|-- exchange for tokens -------->| |
|<-- access + refresh tokens ----| |
|-- authenticated requests ---------------------------------> |
| (auto-refresh when needed) |OAuth対応サーバーの設定
MCPサーバーは、グローバル設定 (~/.bob/mcp_settings.json) またはプロジェクト設定 (.bob/mcp.json) のいずれかで設定できます。
最小限の設定(自動検出)
MCPサーバーがOAuthメタデータの自動検出を提供している場合、urlを指定するだけで済みます:
{
"mcpServers": {
"my-oauth-server": {
"url": "https://mcp.example.com/mcp"
}
}
}Bob Shellは接続時にOAuth要件を検出し、ブラウザのサインインプロセスを案内します。
カスタムOAuthパラメータ
IDプロバイダーで事前登録されたクライアントID、カスタムスコープ、またはクライアントシークレットが必要な場合は、oauthオブジェクトを設定します:
{
"mcpServers": {
"my-oauth-server": {
"url": "https://mcp.example.com/mcp",
"oauth": {
"enabled": true,
"clientId": "your-client-id-from-idp",
"clientSecret": "your-client-secret-if-required",
"scope": "mcp:connect read:data"
}
}
}
}設定プロパティ
| プロパティ | タイプ | 説明 |
|---|---|---|
url | string | リモートMCPエンドポイントURL(必須)。 |
oauth.enabled | boolean | OAuthを無効にするにはfalseに設定し、OAuthを要求するにはtrueに設定します。Authorizationヘッダーが存在しない場合はデフォルトで有効になります。 |
oauth.clientId | string | IDプロバイダーによって発行された事前登録済みのOAuthクライアントID。 |
oauth.clientSecret | string | 認可サーバーが機密クライアント用に必要とする場合のOAuthクライアントシークレット。 |
oauth.scope | string | 要求するOAuthスコープのスペース区切りリスト。 |
MCPサーバー設定に静的なAuthorizationヘッダーを追加すると、OAuthが無効になります。Authorizationヘッダーが存在する場合、Bob ShellはOAuthフローを開始しません。OAuthがアクティブな場合、Bob Shellはリクエストを送信する前に静的なAuthorizationヘッダーを削除します。サーバーごとに1つの認証方法のみを使用してください。
IDプロバイダーへのBobの登録
接続する前にIDプロバイダー (IdP) でBobをクライアントアプリケーションとして登録する必要がある場合は、次のアプリケーション設定を使用します:
| 設定 | 値 |
|---|---|
| アプリケーションまたはクライアントタイプ | パブリック、ネイティブ、またはループバック(PKCE付き認可コード) |
| リダイレクトURI | http://127.0.0.1:33418/callback |
| 追加のリダイレクトURI | http://127.0.0.1:33419/callback から http://127.0.0.1:33427/callback(ポート33418が使用中の場合に推奨) |
| グラントタイプ | 認可コード (authorization_code) およびリフレッシュトークン (refresh_token) |
| スコープ | MCPサーバーのドキュメントで指定されているスコープ |
発行されたクライアントIDを設定ファイルのoauth.clientIdにコピーします。
プロンプトが表示されたら認証する
OAuth対応サーバーに初めて接続する場合:
- ブラウザウィンドウが開き、認証プロンプトが表示されます。
- サーバーが要求する権限を確認します。
- アカウントにサインインしてアクセスを承認します。
- Bob Shellは認証情報を保存し、サーバーツールに自動的に接続します。
トラブルシューティング
認証プロンプトが開かない
- 設定でサーバーが無効としてマークされていないことを確認します。
- 設定ファイルの
headersに静的なAuthorizationヘッダーが含まれていないことを確認します。 - Bob Shellを再起動して接続を再開始します。
- ブラウザまたはファイアウォールが
127.0.0.1でのローカルループバック接続をブロックしていないことを確認します。
IDプロバイダーがリダイレクトURIの不一致エラーを返す
- IDプロバイダーのクライアント登録に
http://127.0.0.1:33418/callbackが含まれていることを確認します。 - ポート33418が使用中の場合は、
33419から33427までの追加ポートを登録します。
認証は成功するがサーバーが接続に失敗する
- サーバーURLが正しく、ネットワークからアクセス可能であることを確認します。
- サインイン手順ですべての必要なスコープを承認したことを確認します。
- 前提条件となるユーザーロールまたは権限について、サーバーログまたはドキュメントを確認します。
トークンが頻繁に期限切れになり、再認証が必要
- 認可サーバーがリフレッシュトークンを発行することを確認します。
- トークンの早期失効を防ぐため、システムクロックが同期されていることを確認します。
サインアウトまたはアカウントの切り替えを希望する
設定ファイルのサーバーエントリを削除または名前変更してから再度追加します。Bob Shellはそれを新しいサーバーとして扱い、次回の接続時にサインインを求めます。