MCP のツールを permissions で自動許可する書き方:mcp__ 記法とワイルドカードの制限

Claude Code 公開:

settings.json の allow に mcp__サーバー名 や mcp__サーバー名__ツール名 を書いて MCP ツールの確認を省く方法と、allow のワイルドカードには mcp__<サーバー>__ の前置きが要る理由、括弧付きルールが読み飛ばされる点を解説します。

検証日 2026年9月29日 仕様変更が早い分野です。最新の公式ドキュメントも併せてご確認ください。
目次
  1. 3 つの書き方
  2. allow のワイルドカードには前置きが要る
  3. deny と ask は書き方が違う
  4. 書く場所と、反映されない書き方
  5. まとめ

MCP サーバーを追加すると、そのツールを呼ぶたびに確認を求められます。読み取り専用のツールまで毎回止まるのは手間です。

結論として、settings.json の permissions.allow に mcp__<サーバー名> と書けばそのサーバーのツール全体を、mcp__<サーバー名>__<ツール名> と書けば個別のツールを自動許可できます。ただし allow のワイルドカードには mcp__<サーバー名>__ という前置きが必須 で、mcp__* のような書き方は読み飛ばされます。

サーバーの追加方法そのものは Claude Code に MCP サーバーを追加する方法 を参照してください。

KEY POINT

この記事で分かること

  • サーバー単位・ワイルドカード・ツール単位の 3 つの書き方
  • allow のワイルドカードに前置きが要る理由と、deny・ask との違い
  • 括弧付きの mcp__ ルールが読み飛ばされること

3 つの書き方

公式ドキュメントによると、MCP のルールは「Claude Code に登録したサーバー名を使い、必要ならそのサーバーのツール名を続ける」形式です。

ルール一致するもの
mcp__puppeteerpuppeteer サーバーが提供するすべてのツール
mcp__puppeteer__*同上(ワイルドカード記法)
mcp__puppeteer__puppeteer_navigatepuppeteer サーバーの puppeteer_navigate ツールだけ

settings.json には次のように書きます。

{
  "permissions": {
    "allow": [
      "mcp__puppeteer",
      "mcp__github__get_issue",
      "mcp__github__list_pull_requests"
    ]
  }
}

サーバー名は、claude mcp add で付けた名前か .mcp.json のキー名です。区切りは アンダースコア 2 つ で、サーバー名とツール名の間も 2 つです。

用語解説

サーバー名(server name): claude mcp add <名前> ... で自分が決めた名前です。同じサーバーでも登録名を変えればルールも変わるため、チームで .claude/settings.json を共有する場合は .mcp.json の名前を揃えておきます。

allow のワイルドカードには前置きが要る

ここが間違えやすい点です。公式ドキュメントには、allow ルールのツール名ワイルドカードは、リテラルの mcp__<サーバー名>__ という前置きの後ろでしか使えないと書かれています。サーバーの部分はワイルドカードを含まない、具体的なサーバー名でなければなりません。

書き方allow での結果
mcp__puppeteer__*有効。puppeteer のすべてのツールに一致する
mcp__github__get_*有効。github の get_ で始まるツールに一致する
mcp__*読み飛ばされる。警告が出て、何も自動許可しない
* / B*読み飛ばされる。同上

つまり「MCP ツールは全部許可」を allow で一括指定することはできません。サーバーごとに 1 行ずつ書く必要があります。

{
  "permissions": {
    "allow": [
      "mcp__puppeteer__*",
      "mcp__github__get_*",
      "mcp__linear__*"
    ]
  }
}

deny と ask は書き方が違う

deny と ask はツール名の位置にワイルドカードを使えます。パターンはツール名全体に一致する必要があり、"*" はすべてのツールに、"mcp__*" は全サーバーのすべての MCP ツールに一致します。

{
  "permissions": {
    "deny": [
      "mcp__*"
    ]
  }
}

評価の順序は deny → ask → allow で、最初に一致したルールが結果を決めます。ルールの具体性は順序を変えません。広い deny は、より狭い allow があっても優先されます。allow で deny に例外を作ることはできません。

目的書く場所と内容
サーバーのツールを全部許可allow に mcp__<サーバー名>
危険なツールだけ止めるdeny に mcp__<サーバー名>__<ツール名>
全 MCP ツールを禁止deny に mcp__*
毎回確認させるask に同じ形式のパターン

deny がツール名だけ(Bash のような裸の名前)の場合、そのツールは Claude の文脈から取り除かれ、Claude からは見えなくなります。括弧で絞ったルールはツールを残したまま、一致した呼び出しだけを止めます。

なお、deny や ask のルールが既知のどのツールにも一致しない場合は、打ち間違いを捕まえるために起動時の警告が出ます。ただし _ や * を含むツール名はこのチェックの対象外です。mcp__ から始まる名前はすべて該当するため、サーバー名を打ち間違えても警告は出ません。

書く場所と、反映されない書き方

ルールは settings.json に書き、/permissions で確認します。ダイアログには全ルールと、それぞれがどの settings.json から来たかが表示されます。Claude の作業中でも開けて、ルールを足し引きすると同じターンの次のツール呼び出しから反映されます(v2.1.234 以降)。設定ファイルの場所と優先順位は Claude Code の settings.json で権限を設定する、ダイアログの操作は /permissions コマンドの使い方 にまとめています。

括弧付きの mcp__ ルールは読み飛ばされる

Bash(npm run build) のように括弧で引数を絞る書き方は、MCP ツールには使えません。設定ファイルを読み込むとき、Claude Code は 括弧が付いた mcp__ ルールを読み飛ばします。読み飛ばされたルールは、対話セッション開始時の invalid-settings ダイアログと claude doctor の出力に一覧されます。MCP ツールをパラメータで絞りたい場合は、--disallowedTools に deny ルールを渡します。

もう 1 つ、allow を書いても効かない場合があります。組織が claude.ai のコネクタのツールを ask に設定し、その設定がセッションに届いている場合、そのツールへの allow ルールは効きません。auto モードでも bypassPermissions モードでも毎回確認されます。確認を出さない dontAsk モードでは、代わりに拒否されます。Claude Code 自身が取得したコネクタのツールは mcp__claude_ai_<サーバー名>__<ツール名> という名前で現れます。

まとめ

  • allow に mcp__<サーバー名> でサーバー全体、mcp__<サーバー名>__<ツール名> で個別のツールを自動許可する
  • allow のワイルドカードは mcp__<サーバー名>__ の後ろだけ。mcp__* や * は警告付きで読み飛ばされる
  • deny と ask はツール名全体のワイルドカードを使える。deny の mcp__* で全 MCP ツールを禁止できる
  • 評価順は deny → ask → allow。具体性に関係なく、最初に一致したものが決まる
  • 括弧付きの mcp__ ルールは設定ファイルから読み飛ばされる。パラメータで絞るなら --disallowedTools

よくある質問

MCP サーバーのツールをまとめて許可するには?
settings.json の permissions.allow に "mcp__サーバー名" と書きます。"mcp__サーバー名__*" も同じ意味です。サーバー名は Claude Code に登録した名前です。
allow に "mcp__*" と書いても効きません。
allow のワイルドカードは mcp__<サーバー名>__ という前置きの後ろでしか使えません。"mcp__*" のようにサーバー名を含まないパターンは警告付きで読み飛ばされ、何も自動許可しません。
mcp__github__create_issue(title:*) のような書き方はできますか?
できません。設定ファイルを読み込むとき、Claude Code は括弧が付いた mcp__ ルールを読み飛ばします。MCP ツールのパラメータで絞るには --disallowedTools に deny ルールを渡します。
すべての MCP ツールを禁止するには?
permissions.deny に "mcp__*" と書きます。deny と ask はツール名の位置にワイルドカードを使えるため、この書き方が有効です。

参考にした一次情報

この記事は公式ドキュメントを基に AI が下書きを作成し、運営者が内容を確認して公開しています。誤りを見つけた場合は お問い合わせからお知らせください。