claude mcp reset-project-choicesで.mcp.jsonの承認を取り消す手順
claude mcp reset-project-choicesは.mcp.jsonサーバーの承認と拒否を戻すコマンド。消える範囲、消えない承認、症状別の使いどころをv2.1.295の実行結果で示します。
claude mcp reset-project-choicesは、.mcp.jsonに書かれたプロジェクトスコープのMCPサーバーについて、これまでの承認と拒否を白紙に戻すコマンドです。実行後は、次にclaudeを起動したときに承認ダイアログが出直します。
ただし「全部が消える」わけではありません。共有の.claude/settings.jsonやユーザー設定に書かれた承認は残り、そのサーバーは確認なしで接続され続けます。この記事では、v2.1.295で実際に実行した出力をもとに、消える範囲と症状別の使いどころをまとめます。
reset-project-choicesが戻すもの
--helpには「このプロジェクトで承認または拒否したプロジェクトスコープ(.mcp.json)のサーバーをすべてリセットする」と書かれています。対象は現在のプロジェクトだけで、別のプロジェクトの承認には触れません。
背景にあるのは、.mcp.jsonが他人の書いた設定を取り込む入口になる点です。リポジトリをcloneしただけで任意のコマンドを起動するサーバーが走らないよう、Claude Codeは対話セッションで承認を求めます。承認の結果は設定ファイルに残ります。
| 操作 | 書き込まれるキー | 書き込み先 |
|---|---|---|
| サーバーを個別に承認 | 書き込まれるキーenabledMcpjsonServers | 書き込み先.claude/settings.local.json |
| すべて承認 | 書き込まれるキーenableAllProjectMcpServers | 書き込み先.claude/settings.local.json |
| サーバーを拒否 | 書き込まれるキーdisabledMcpjsonServers | 書き込み先.claude/settings.local.json |
リセットは、この3つのキーを取り除く操作だと考えると分かりやすくなります。
実行して何が起きたか
空の設定ディレクトリと使い捨てのプロジェクトで試しました。.mcp.jsonにサーバーを1つ書き、.claude/settings.local.jsonに3つのキーと無関係なpermissionsを入れた状態から始めています。
claude mcp reset-project-choicesProject-scoped (.mcp.json) server approvals and rejections stored for this project have been reset.
You will be prompted for approval next time you start Claude Code.実行後の.claude/settings.local.jsonからは、enabledMcpjsonServers・disabledMcpjsonServers・enableAllProjectMcpServersの3つが消え、permissionsはそのまま残りました。続けてclaude mcp listを打つと、サーバーは次の表示に戻っています。
demo-docs: https://example.com/mcp (HTTP) - ⏸ Pending approval (run `claude` to approve)つまりリセットは、settings.local.json全体を消すのではなく、承認に関わるキーだけを外します。権限ルールなど他の設定は巻き込まれません。
症状別に見る使いどころ
誤って「すべて承認」を選んだとき
承認ダイアログで「すべて承認」を選ぶと、enableAllProjectMcpServers: trueが.claude/settings.local.jsonに書かれます。以後、その.mcp.jsonに後から足されたサーバーも、確認なしで接続されます。
メンバーが.mcp.jsonにサーバーを追加するたびにプルで入ってくる運用では、この状態は意図より広い許可になりがちです。リセットでtrueを外し、次の起動で1つずつ見直せます。
enableAllProjectMcpServersは、複数のファイルにまたがると優先関係が絡みます。信頼済みのフォルダーでは、優先順位の高いファイルのfalseが、低いファイルのtrueを上書きします。信頼前のフォルダーでは、読み込まれるファイルのどれかにtrueがあれば承認として働きます。リセット後も承認が残るときは、どのファイルにtrueが書かれているかを探します。
拒否したサーバーを使いたくなったとき
拒否したサーバーはdisabledMcpjsonServersに入り、claude mcp get <名前>で✘ Rejected (see disabledMcpjsonServers in settings)と表示されます。このキーは承認よりも優先されるため、enabledMcpjsonServersに入れ直しても拒否が勝ちます。
拒否を解きたいときは、リセットが最短です。個別に直すなら、settings.local.jsonの配列から該当の名前だけを消す方法もあります。
混同しやすいのが、/mcpパネルで無効にしたサーバーです。こちらは~/.claude.jsonのdisabledMcpServersにプロジェクトごとに記録され、claude mcp getでは⊘ Disabled for this project (re-enable via /mcp)と表示されます。.mcp.jsonの承認を管理するdisabledMcpjsonServersとは別のキーで、reset-project-choicesはこちらを戻す手段ではありません。表示がRejectedなら承認側の話、Disabled for this projectなら/mcpパネルで入れ直す、と見分けられます。
承認ダイアログで選ぶと何が書かれるか
承認ダイアログでは、サーバーを1つずつ承認する、すべて承認する、拒否する、のいずれかを選びます。選択ごとに前掲の表のキーが.claude/settings.local.jsonへ書かれるので、後から何を選んだかはこのファイルを開けば追えます。
.mcp.jsonに新しいサーバーが追加された場合、扱いは選択によって分かれます。すべて承認を選んでいれば、enableAllProjectMcpServers: trueの効果で、新しいサーバーも問い合わせなしで接続されます。個別承認ではenabledMcpjsonServersに載った名前だけが承認済みで、載っていない名前は未承認のままなので、対話起動で改めて確認する流れになります。拒否した名前は、新しいサーバーが増えてもdisabledMcpjsonServersに残り続けます。
claude mcp getの表示から状態を読む
claude mcp get <名前>は、承認状態を接続の試行なしで表示します。⏸ Pending approvalは未承認、✘ RejectedはdisabledMcpjsonServersによる拒否、⊘ Disabled for this projectは/mcpでの無効化です。これらのどれでもなければ、承認は通っていて、接続結果が表示されます。リセットの前後で見比べると、どのキーが効いていたかが分かります。なおRejectedはclaude mcp listには出ず、getでだけ確認できます。
listでPending approvalのまま進まないとき
⏸ Pending approvalは、.mcp.jsonのサーバーが未承認という状態を示します。この表示はリセットで解消するものではなく、claudeを対話起動して承認すれば消えます。
リセットが役立つのは、承認したはずなのにPendingに戻った場合の切り分けです。承認がsettings.local.jsonに書かれていたのか、別のファイルにあったのかを、次の章の方法で確かめられます。
リセットしても残る承認
ここが実行結果でいちばん差の出た点です。.claude/settings.jsonにenabledMcpjsonServers、ユーザー設定のsettings.jsonにenableAllProjectMcpServers: trueを置いて実行すると、次のメッセージが出ました。
Project-scoped (.mcp.json) server approvals and rejections stored for this project have been reset.
1 server (demo-docs) is still approved by other settings and will connect automatically without prompting.2つのファイルの中身は実行前後で変わっていません。サーバーは引き続き承認済みの扱いで、claude mcp listでもPendingには戻りませんでした。リセットが消すのは.claude/settings.local.jsonにある分だけで、ほかの設定ファイルの記述は対象外です。
| 承認が書かれている場所 | reset-project-choicesで消えるか |
|---|---|
.claude/settings.local.json(ダイアログが書いたもの) | reset-project-choicesで消えるか消える |
.claude/settings.json(リポジトリ共有) | reset-project-choicesで消えるか消えない |
ユーザー設定 ~/.claude/settings.json | reset-project-choicesで消えるか消えない |
管理設定や--settingsで渡した承認は、信頼前のフォルダーでも有効な承認元として扱われます。それ以外の設定源に承認が残っているかどうかも、リセット後の出力の2行目で判別できます。
「リセットしたのに確認が出ない」ときは、出力の2行目をまず読みます。still approved by other settingsと出ていれば、残っているのは別ファイルの承認です。そのファイルを開いて、enabledMcpjsonServersかenableAllProjectMcpServersを手で外します。
承認が効かない場面
リセットで承認を戻しても、承認ダイアログが出ない実行形態があります。
claude -pの非対話実行- Agent SDKのセッション
- クラウドセッション
skipDangerousModePermissionPromptを設定した状態でbypassPermissionsモードで始めたセッション
これらではプロンプトを出せないため、プロジェクトスコープのサーバーが確認なしで読み込まれます。リセットしても挙動は変わりません。Routinesで承認エラーが出る側の事情はClaude Code RoutinesでMCP承認エラーが出る原因と対処法にあります。
こうした環境でも特定のサーバーだけは入れたくないとき、次の手段があります。
{
"disabledMcpjsonServers": ["filesystem"]
}disabledMcpjsonServersは、どの権限モードでもサーバーを止めます。ほかに、--setting-sourcesでプロジェクト設定を読まない方法と、--strict-mcp-configで--mcp-configのサーバーだけを使う方法があります。--strict-mcp-configで起動すると、読み込まない側のプロジェクトスコープのサーバーについては承認待ちも省かれます。この省略はv2.1.246以降の挙動で、それより前はバックグラウンドのセッションが起動時に承認待ちで止まることがありました。使い分けは--mcp-configと--strict-mcp-configの使い分けで扱っています。
ワークスペース信頼との関係
v2.1.196以降、claude mcp listとclaude mcp getは、信頼ダイアログを受け入れる前のフォルダーでは、リポジトリにチェックインされた設定の承認を読みません。cloneしたリポジトリが.claude/settings.jsonにenableAllProjectMcpServersを書いても、自分自身を承認できないようにするためです。
この場合、サーバーは⏸ Pending approvalのまま接続もヘルスチェックもされません。ユーザー設定・管理設定・--settingsで渡した設定の承認は、信頼前でも有効です。settings.local.jsonは、gitで追跡されていないことが確認できるまで、信頼前のフォルダーでは待たされます。
settings.local.jsonの待ちには例外があります。ホームディレクトリや、CLAUDE_CONFIG_DIRに指定した設定ホームのフォルダーでは、信頼前でもこのファイルの承認が使われます。またv2.1.207より前は、一度も信頼していないフォルダーでもsettings.local.jsonの承認が適用されていました。古いバージョンと新しいバージョンでclaude mcp listの表示が食い違うときは、この変更が原因です。
そのため、cloneした直後のclaude mcp listでPendingが出るのは、reset-project-choicesとは無関係に起こります。まずclaudeを起動して信頼ダイアログを通す、が手順の最初です。settings.local.jsonが追跡対象外になる仕組みはsettings.local.jsonがgitignoreなしで除外される仕組みを参照してください。
承認をやり直す手順
承認のやり直し
- 1
現状を一覧で確認する
claude mcp listで、対象サーバーがPending approval・Rejected・接続済みのどれかを見ます。 - 2
リセットを実行する
プロジェクトのルートで
claude mcp reset-project-choicesを実行し、出力の2行目にstill approved by other settingsが出ていないか読みます。 - 3
残った承認を手で外す
出ていれば、
.claude/settings.jsonやユーザー設定のenabledMcpjsonServersなどを編集して取り除きます。 - 4
対話起動して選び直す
claudeを起動し、サーバーごとに承認か拒否を選びます。選択は.claude/settings.local.jsonに書き直されます。
承認の内容を選び直すとき、最初から全部を許可する必要はありません。使うサーバーだけ個別に承認し、疑わしいものは拒否にしておけば、disabledMcpjsonServersが書かれて以後は問い合わせも出なくなります。
使い分けの目安
- 全体を白紙に戻したいなら
reset-project-choices - 1サーバーだけ直したいなら
settings.local.jsonの配列を編集 - チーム全員で止めたいなら
.claude/settings.jsonのdisabledMcpjsonServers - Pendingの原因が信頼前のフォルダーなら、リセットではなく信頼ダイアログ
承認と拒否は、サーバーの接続可否だけでなく、そのサーバーが公開するツールを権限判定に乗せる入口でもあります。MCP全体の攻撃面と対策はMCPのセキュリティガイドに、接続できないときの切り分けはMCP接続のトラブルシューティングにまとめています。