Claude Media
claude mcp login/logoutでMCPサーバーの認証をCLIから操作する

claude mcp login/logoutでMCPサーバーの認証をCLIから操作する

MCPサーバーのOAuth認証を/mcpパネルを開かずCLIだけで完結させるclaude mcp loginとlogoutの使い方と、対応できない環境の見分け方をまとめました。

claude mcp login/logoutとは

claude mcp login <name> は、設定済みのMCPサーバーのOAuth認証フローを、Claude Codeセッション内の /mcp パネルを開かずにシェルから直接実行するコマンドです。claude mcp logout <name> はその逆で、保存済みのOAuth認証情報だけを消去します。どちらもClaude Code v2.1.186以降が必要です。

対応するのはHTTP・SSE方式のリモートサーバーとclaude.aiのコネクタです。対応していない相手が2種類あり、この記事の後半で扱います。ひとつはMicrosoft 365・Gmail・Google CalendarのようにAnthropicがホストするコネクタ(ローカルOAuth自体に非対応)、もうひとつはクラウドセッションへ配信されるコネクタ(認証がすでにclaude.ai側で完結している)です。

OAuthフロー自体の仕組み(401起点の認可サーバー発見からPKCE付きトークン取得までの流れ)はリモートMCPのOAuth認証の仕組みで扱っています。本記事は claude mcp login / logout コマンドの使い方に絞り、claude mcp login が追加されたClaude Code v2.1.186のリリースノートでは他の同時変更点(bash出力への応答など)も含めて確認できます。

前提条件: 対象のMCPサーバーがすでに claude mcp add で登録されていること。未登録のサーバー名を指定すると、そもそもログイン先が存在せずコマンドは失敗します。プロジェクト単位で読み込むサーバーを固定したい場合は、--mcp-configと--strict-mcp-configの使い分けで登録経路を先に整理しておくとログイン対象を取り違えにくくなります。

ステップ1: 認証が必要なサーバーを確認する

claude mcp list を実行すると、登録済みサーバーごとに接続状態が表示されます。

claude mcp list

! Needs authentication と表示されたサーバーが、ログインが必要な相手です。✔ Connected はすでに認証済み、✘ Failed to connect は認証以外の接続失敗(URL誤りやネットワーク不通など)なので、ログインしても解消しません。

注意が要るのは、設定ファイルの headersAuthorization を自分で設定したサーバーです。このタイプは401・403が返っても「認証が必要」にはならず、✘ Failed to connect の接続失敗として扱われます。直すべき資格情報はClaude Code側ではなく設定側にあるため、OAuthへは自動フォールバックしません。設定したトークンがそのエンドポイントに対してまだ有効か確認するか、headers.Authorization を削除してOAuthフローに任せます。

ステップ2: claude mcp loginでOAuthフローを実行する

対象サーバー名を指定して実行します。

claude mcp login sentry

ローカルにブラウザが検出できれば、Claude Codeが自動でブラウザを開き、認証後にターミナルへ戻ります。認証情報は安全に保存され、以降のセッションで自動的に使われます。認証が完了すると、そのサーバーが公開するツールに加えて、MCPのPrompts仕様に対応したサーバーならスラッシュコマンドとして呼び出せるプロンプトも利用可能になります。

ステップ3: ブラウザを開けない環境ではURLを手動で開く

SSH接続先や、ディスプレイサーバーのないLinux環境では、ブラウザを自動起動できません。v2.1.191以降はこの状況を自動検知し、認証URLをそのまま表示するようになりました。表示されたURLを手元のマシンで開いて認証し、ブラウザのアドレスバーに出るリダイレクトURL全体をコピーして、ターミナルのプロンプトに貼り戻します。

貼り付けの手順には対話的なターミナルが必要なので、SSH接続は -t オプション付きで行います。

ssh -t user@host
claude mcp login sentry --no-browser

--no-browser を明示的に付けると、ローカルにブラウザが検出できる環境でも強制的にURL表示モードに切り替わります。ヘッドレスサーバーでの自動化スクリプトに組み込む際に有効です。

認証情報を消すときはclaude mcp logout

サーバーの設定は残したまま認証情報だけをクリアしたいときは、claude mcp logout を使います。

claude mcp logout sentry

似たコマンドに claude mcp remove がありますが、挙動が異なります。logout はサーバー定義を .mcp.json や設定ファイルに残したまま、OAuthトークンだけを削除します。別アカウントで入り直したいときや、トークンの有効期限切れを疑うときに向いています。一方 remove はサーバー定義ごと削除し、そのサーバーに紐づくOAuthトークンとクライアント登録もまとめて消えます。設定自体を作り直したいときは remove を使います。

claude mcp 系のサブコマンドは秘密情報の扱いにも改修が入っており、Claude Code v2.1.161では管理コマンドの出力からトークンなどの秘密情報が伏せ字化されています。ログイン後に claude mcp get <name> で状態を確認する際、認証情報そのものが画面に出ない設計になっているのはこの流れの延長です。

使い分け早見表

状況使うコマンド補足
対話セッション内で素早くログインしたい使うコマンド/mcp パネル補足ブラウザ操作込みで完結、コマンド不要
スクリプト・cron・非対話バッチから認証したい使うコマンドclaude mcp login <name>補足対話ターミナルでの貼り付けが必要なため、完全な無人実行はできない
SSH越し・ヘッドレス環境使うコマンドclaude mcp login <name> --no-browser補足ssh -t で接続しURLを手動で開く
認証情報だけリセットしたい使うコマンドclaude mcp logout <name>補足サーバー定義は保持される
サーバーごと作り直したい使うコマンドclaude mcp remove <name>補足OAuthトークンも道連れで削除
Microsoft 365・Gmail・Google Calendar等のコネクタ使うコマンドclaude.ai側で再接続補足ローカルOAuth非対応(次節で詳述)

401エラーが出るたびにログインし直す必要はない

認証済みのサーバーへのリクエストが 401 Unauthorized を返しても、毎回 claude mcp login を打つ必要はありません。Claude Codeは保存済みトークンをまず自動更新し、再接続してリクエストを1回だけリトライします。それでも失敗したときにだけ claude mcp list の表示が ! Needs authentication に変わります。逆に言えば、その表示が出ていない間は認証が効いている証拠なので、症状が接続エラー(URL誤り・ネットワーク不通)なのか認証切れなのかを見分ける目安になります。

ただし自動更新が効くのは、更新自体が一時的な理由で失敗したときだけです。サーバーが保存済みのリフレッシュトークン自体を拒否した場合は自動リトライでは直らず、Claude Codeはその場で /mcp を案内する通知を出します。通知を受けたら /mcp を開き、対象サーバーで「Re-authenticate」を選んでサインインし直します。放置すると次のツール呼び出しが失敗します。

v2.1.206より前は、この見分けが不完全でした。ネットワークエラーなどトークン更新自体が一時的な理由で失敗しただけの場合でも、リフレッシュトークンがまだ有効なままそのセッション中ずっと「認証が必要」の表示が残り続けるバグがありました。

/mcp パネルのサーバーごとのメニューにある「Clear authentication」は、CLIの claude mcp logout と同じ処理(保存済みOAuthトークンの失効)をGUI側から行うものです。対話セッション内にいるなら /mcp から、スクリプトや自動化フローの中で完結させたいなら claude mcp logout から、と使う場面で選べます。またClaude Code v2.1.193以降は、認証が必要なサーバーが1つでもあると起動時に通知を出すため、/mcp を開かなくても対象を把握できます(サインインをClaude Code側から完結できるサーバーだけが対象です)。

よくあるつまずき

claude.aiコネクタが「session token rejected」と表示される: claude.aiのコネクタでは、401 の原因が「サーバー側の認証切れ」ではなく「Claude Code自体のログインセッションがclaude.aiに拒否された」ことがあります。この場合 /mcp は通常の「認証が必要」ではなく connected · session token rejected という別の状態を示し、claude mcp login でコネクタを再認証しても直りません。原因はClaude Codeへのログイン自体が失効していることなので、/login でサインインし直したうえで、/mcp からコネクタを再接続します。

認証情報の貼り付けでログインが通らない: --no-browser フローでリダイレクトURLを手動で貼り付ける際、コピー元によっては先頭・末尾に見えない空白や改行が混ざることがあります。トークンやURLの前後の空白は自動では除去されないため、貼り付け後にログインが失敗する場合は、値の前後に余計な文字が入っていないか目視で確認します。

「Incompatible auth server」や認証が進まない: 一部のMCPサーバーはDynamic Client Registration(認証時にクライアントを自動登録する仕組み)に対応しておらず、claude mcp login だけでは解決しません。サーバー提供元の開発者ポータルでクライアントID・シークレットを事前登録し、claude mcp add --client-id の形で追加し直す必要があります。

Anthropicがホストするコネクタでログインが失敗する: Microsoft 365・Gmail・Google Calendarのようなコネクタは、上流のIDプロバイダーがclaude.aiの登録済みリダイレクトURLしか受け付けないため、claude mcp login/mcp からのローカルOAuthに対応していません。is Anthropic-hosted and doesn't support local OAuth というエラーが出たら、claude mcp remove でローカルの登録を外し、claude.ai/customize/connectors 側で接続し直します。接続が完了すると、そのコネクタはClaude Code側に自動的に反映されます。

クラウドセッションでコネクタのログイン画面が出ない: クラウド上で動くセッションに配信されるコネクタは、claude.aiで付与した認可をプロキシ経由でそのまま使うため、Claude Code側でサインインフローを実行しません。認証をやり直したいときは、セッション側ではなくclaude.aiのconnectors設定から再接続します。

claude mcp login を実行したのにサーバーがまだ「認証が必要」のまま: 対象サーバー名が claude mcp list の表示と完全一致しているか確認します。同名サーバーを複数スコープ(ローカル / プロジェクト / ユーザー)に定義していると、OAuthのサインインはエンドポイントごとに個別管理されるため、想定と違うスコープの定義に対してログインしてしまっている場合があります。原因の切り分けには claude mcp get <name> が有効で、接続失敗時は Issue: の行にHTTPステータスやサーバー側のエラー文言が表示されます(認証情報らしき文字列は自動で伏せ字化されます)。

非対話モード(claude -p)でMCPサーバーの認証を求められる: /mcp パネルが存在しない非対話実行では、その場でOAuthフローを完了できません。v2.1.196以降は、未認証のサーバーがある場合にツールが使えない旨がClaudeに伝わるようになったため、少なくとも「どのサーバーが未認証か」は応答から分かります。認証自体は別の対話セッションで /mcpclaude mcp login <name> を実行して先に済ませておく必要があります。

まとめ

claude mcp login <name>claude mcp logout <name> は、MCPサーバーのOAuth認証をセッションの外から操作するための一対のコマンドです(Claude Code v2.1.186以降)。ブラウザが開ける通常の開発環境では /mcp パネルの方が手軽ですが、SSH越しの作業や認証だけをスクリプトから事前に済ませておきたい場面ではCLI経由が有効です。ただし対話的な貼り付け操作が要る都合上、完全な無人自動化はできません。Microsoft 365のようなAnthropicホスト型コネクタは対象外で、claude.ai側での再接続が唯一の手段になる点も覚えておくと、エラーに遭遇したときに迷わずに済みます。

この記事を共有:XはてブLinkedIn