Skip to content

原文(日本語に翻訳)

複数のOAuth MCPサーバーを使用する際のmacOSキーチェーン破損を修正しました。大きなOAuthメタデータのブロブが security -i の標準入力バッファをオーバーフローさせ、古い資格情報が残ってしまい、繰り返し /login プロンプトが表示される原因になっていました

原文(英語)

Fixed macOS keychain corruption when using multiple OAuth MCP servers. Large OAuth metadata blobs could overflow the security -i stdin buffer, silently leaving stale credentials behind and causing repeated /login prompts.

概要

複数のOAuth対応MCPサーバーを同時に使用すると、各サーバーのOAuth認証情報がmacOSのキーチェーンに保存されますが、認証データが大きい場合に security -i コマンドの標準入力バッファをオーバーフローさせてしまうバグがありました。この結果、キーチェーンに古い(無効な)認証情報が残り続け、/login プロンプトが何度も表示されるという問題が発生していました。修正により、大きなOAuthデータも正しくキーチェーンに保存されるようになります。

基本的な使い方

この修正は自動的に適用されます。アップデート後、繰り返し表示されていた /login プロンプトが解消されます。

bash
# アップデート後に再ログインして認証情報をリセット
/login
# → 正しくキーチェーンに保存される
# → 次回からは /login プロンプトが繰り返し表示されない

実践例

複数のOAuth MCPサーバーを使用するケース

json
// .mcp.json の例
{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "oauth": true
    },
    "google-drive": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-gdrive"],
      "oauth": true
    },
    "slack": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-slack"],
      "oauth": true
    }
  }
}
bash
# 修正後は複数OAuthサーバーを同時使用しても
# キーチェーンが破損しなくなった
claude
# → 各サーバーの認証情報が正しく保存・管理される

破損した認証情報のクリーンアップ(修正前の問題への対処)

bash
# macOS キーチェーンから古い Claude Code の認証情報を削除
security delete-generic-password -s "claude-code-mcp-oauth" 2>/dev/null || true

# Claude Code を再起動して再認証
claude
/login

注意点

  • この問題はmacOS固有のバグです(Linux/Windowsでは発生しません)
  • 複数のOAuth MCPサーバーを使用していなかった場合は影響を受けません
  • アップデート後も /login プロンプトが続く場合は、一度キーチェーンの認証情報を手動で削除してから再認証してください
  • OAuthトークンのサイズは使用するサービスや設定によって異なります

関連情報