MCPサーバーは少数しか使っていません。確認は必要ですか?
2つの条件を見る。allowルールやエージェントのtools:リストに、__*を付けないmcp__名前という省略形があるか。そして、サーバー名にアンダースコアが含まれる、または別のサーバー名のプレフィックスになっていないか。どちらにも当てはまらなければ、この変更の影響はない。記事の最初のチェックコマンドを実行すればわかる。
アップグレード後にスキルが一覧から消えました。どうすればよいですか?
SKILL.mdの中身ではなく、ファイル名やフォルダ名を確認する。名前に隠し文字、文字の向きを変える文字、空白に見える文字(たとえば全角スペース)、または<、>が含まれていると、名前を変えるまで提供されず、frontmatterのname:も無視される。フォルダ名をきれいなものに変えて再読み込みすればよい。よくある原因は、Webページからコピーして貼り付けた名前だ。
プロンプトの内容を調べるUserPromptSubmitフックを書いています。アップグレード後に直す必要はありますか?
少なくとも再テストは必要だ。フックはスラッシュコマンドやスキルが展開される前に動くようになり、展開前の入力を見る。展開後のテキストに頼っていた照合ルールは合わなくなる可能性がある。良い点は、フックがプロンプトをブロックすれば、埋め込みのシェルコマンドももう実行されないことで、以前はここが抜け穴だった。最も早い確認方法は、展開されてシェルコマンドを含むカスタムスラッシュコマンドで試すことだ。
エンジニアではありません。この種の変更に警告が出ないのはなぜですか?
これらは挙動の変更だ。リリースノートには書かれているが、実行時にエラーは出ず、設定が効かなくなるだけだ。現実的な対応は、アップグレード後の初日に、メンバーの1人がよく使うスキルとMCPツールの一覧を実際に動かして確認することで、同僚から「スキルが消えた」「また権限を聞いてくる」と報告されるのを待たないことだ。チームで共通の設定ファイルを使っているなら、これらの項目はアップグレードのチェックリストに加える価値がある。
2026年10月14日に公開されたClaude Code v2.1.299のリリースノートには約131件の修正が並び、そのうちいくつかは「挙動の変更」だ。アップグレード後にエラーは出ないが、それまで動いていた設定が静かに効かなくなったり、動き方が変わったりする。以下の3点は公式リリースノートからの引用で、アップグレードの影響はClassmethodの整理も参考にした。
公式の記述は次のとおり。MCPのallowルールは、名指ししたサーバーにだけ届くようになり、mcp__aはa__bやa_という名前のサーバーをもう許可しない。mcp__<server>__*と書き、サーバーの正規化された完全な名前を使う。Classmethodが整理した以前の挙動は、mcp__aがa__bやa_も一緒に許可していた、というものだ。エージェントのtools:リストも同様に、名指ししたサーバーのツールだけを対象にするよう変わり、名前に__を含むサーバーはmcp__<完全な名前>__*と書く必要がある。
これは2つの方向に影響する。1つ目はallowが狭くなったこと。緩いプレフィックスで一群のサーバーをまとめて許可していた人は、アップグレード後にそれらのサーバーが権限プロンプトを出し始める(ヘッドレスでは拒否される場合もある)。2つ目は、v2.1.300のリリースノートに、正規化後の名前に二重アンダースコアを含むサーバーで、mcp__<server>のdenyとaskのルールが効いていなかったという修正が別に載っていること。この文から推論すると(リリースノートの言葉ではなく私の推論)、v2.1.300より前は、そうしたサーバーに設定したdenyルールは何も止めていなかったことになる。リリースノートは正規化のルールを説明していない。アンダースコアを含む名前のサーバーは、権限プロンプトやツール一覧に表示される完全な名前をそのままコピーする。
記述はこうだ。ファイル名やフォルダ名に、隠し文字、文字の向きを変える文字、空白に見える文字、または<、>を含むスキルやコマンドは、名前を変えるまで提供されなくなり、そのname:の値も無視される。つまりスキルはエラーにならず、一覧から消えるだけだ。リリースノートに理由は書かれていない。私の推測では、こうした文字は名前をAに見せかけて実はBにできるため、なりすましのリスクにあたる。
中国語・日本語のユーザーは特に注意したい。リリースノートは「空白に見える」文字の具体的な一覧を示しておらず、全角スペースもその中に入る可能性があるので、併せて確認するとよい。純粋な中国語や日本語の名前は、リリースノートが挙げる制限には入っていないが、下のチェックコマンドはASCII以外のすべての名前を表示するので、どれが不可視文字かは自分で判断する必要がある。
以前は、カスタムスラッシュコマンドが先に展開され、埋め込まれたシェルコマンドが実行されてからUserPromptSubmitフックが動いたため、フックがプロンプトをブロックしても、そのシェルコマンドは止められなかった。v2.1.299ではフックが先に動く。ブロックされれば、展開も埋め込みのシェルコマンドも実行されない。また、スキル自身のfrontmatterに書かれたUserPromptSubmitフックは、そのスキルを呼び出したプロンプトの次のプロンプトから最初に動くようになった。
実際の影響が2つある(1つ目は私の推論)。プロンプトの内容を調べるフックは、展開前の入力を見ることになるので、展開後のテキストに頼った照合ルールは再テストが必要だ。また、スキルの中に書いて、そのスキルを起動したまさにそのプロンプトを止めようとしたフックは、もう捕まえられない。
onFailure: "block"と同じ方向の変更だ。mcp__aをmcp__a__*と書き直す。二重アンダースコアのサーバーは完全な名前を使う。grep -rn "mcp__" ~/.claude/settings.json .claude/settings.json .claude/settings.local.json ~/.claude/agents .claude/agents 2>/dev/null
<、>を含むスキルとコマンドを一覧にし、それぞれに不可視文字や向きを変える文字がないか確認して、あればフォルダ名を変更する。find ~/.claude/skills ~/.claude/commands .claude/skills .claude/commands -print 2>/dev/null | LC_ALL=C grep -nP '[^\x20-\x7E]|[<>]'
UserPromptSubmitフックを書いているなら、展開されるスラッシュコマンドで一度テストし、展開前にプロンプトを捕まえられることを確認する。