AI エージェントの情報漏洩は、権限の設定だけでは防ぎきれません。OS が強制するサンドボックスと組み合わせて、ようやく止まります。筆者が Claude Code 2.1.295 で試したところ、permissions.deny で .env を拒否しても、cat .env は止まる一方で、Python のスクリプト経由ではダミーのキーがそのまま読めました。サンドボックスを有効にすると、同じコマンドが Operation not permitted で失敗しました。この記事では、Claude Code と OpenAI の Codex CLI を開発で使うときに、ソースコード・シークレット(.env、API キー、認証情報)・社内データを外に出さない設定を、「読ませない・外に出させない・ツールに渡さない・残さない」の 4 つの層で解説します。設定はすべて公式ドキュメントで確認し、手元で動かせるものは動かしました(内容は 2026 年 10 月時点)。
AI エージェントの情報漏洩は、大きく 4 つの経路で起きます。チャットの AI と違い、エージェントは自分でファイルを読み、コマンドを実行し、外部のツールを呼ぶからです。
AI エージェントの情報漏洩の 4 つの経路(読む・外に送る・ツールに渡す・残る)と、それぞれを止める Claude Code と Codex CLI の設定の対応 図: 筆者作成
読む : .env や ~/ .ssh、環境変数のトークンを読むと、その中身は会話(コンテキスト)に入り、モデルの提供者に送られます
外に送る : curl や git push、Web の取得で、データが外部のサーバーに届きます。読み込んだ Web ページやファイルに仕込まれた指示(プロンプトインジェクション)に誘導されることもあります
ツールに渡す : MCP(Model Context Protocol)サーバーなどの外部ツールにデータが渡ります。外部の内容を取ってくるサーバーは、インジェクションの入り口にもなります1
残る・学習される : 送ったプロンプトは、提供者の保持期間のあいだ保存されます。プランによっては学習にも使われます。手元にも会話の記録が平文で残ります2
生成されたコードに脆弱性が入る問題は、この記事では扱いません。そちらは「AI 生成コードのセキュリティ対策 」にまとめています。この記事は、エージェントが動く手元の環境から何が漏れるか に絞ります。
開発の現場で AI エージェントに任せる範囲が広がり、「何を読ませてよいか」が実務の問題になっています。日本の技術記事でも関心が高まっています。Qiita でストック 5 以上の記事を直近 14 日とその前の 14 日で比べると、「情報漏洩」タグは 0 件から 3 件、「MCP」は 1 件から 4 件、「Security」は 12 件から 20 件に増えました3 。
Qiita のタグ別記事数(ストック 5 以上、14 日ごと) データを表で見る Qiita のタグ別記事数(ストック 5 以上、14 日ごと) タグ 2026-09-11〜09-24(件) 2026-09-25〜10-08(件) 情報漏洩 0 3 MCP 1 4 Security 12 20
出典: 筆者集計(元データ: Qiita API v2 の記事検索。各期間でストック 5 以上の記事を最大 300 件取得し、タグごとに数えた。2026-10-09 取得)
ツールの側の設定も細かくなっています。Claude Code のサンドボックスには、シェルコマンドから認証情報のファイルや環境変数を隠す credentials の設定があります4 。Codex CLI は、承認ポリシーのうち untrusted を廃止し、on-request か never を使うよう案内しています5 。古い記事の設定をそのまま写すと動かないこともあるため、この記事では 2026 年 10 月時点の公式ドキュメントに合わせています。
対策は 1 つでは足りません。層ごとに「何を止められて、何を止められないか」が違うからです。
層 Claude Code Codex CLI 止められないもの 読ませない(権限) permissions.deny の Read(...)管理者の deny_read、shell_environment_policy スクリプトが自分で開くファイル(Claude Code の deny) 外に出させない(OS) sandbox(ファイル・ネットワーク・環境変数)sandbox_mode = "workspace-write"許可したドメインを経由した持ち出し ツールに渡さない .mcp.json の承認、allowedMcpServersenabled_tools、承認モード信頼したサーバー自体の不正 残さない・学習させない 法人プラン、hooks、cleanupPeriodDays 法人プラン、history.persistence 送った内容の保持期間中の保存
いちばん効くのは 2 層目のサンドボックスです。権限のルールは Claude Code がコマンドの文字列を見て判断します。一方、サンドボックスは実行中のプロセスに OS が制限をかけるので、モデルが何を実行しても境界が保たれます4 。以下、Claude Code から順に設定します。
まず、Claude Code の組み込みツールに機密ファイルを読ませないようにします。プロジェクトの .claude/ settings.json に permissions.deny を書きます。
{
"permissions" : {
"deny" : [
"Read(./.env)" ,
"Read(./.env.*)" ,
"Read(./secrets/**)" ,
"Read(~/.ssh/**)" ,
"Read(~/.aws/**)"
]
}
}
ルールは deny → ask → allow の順に評価され、deny に一致したものは allow で上書きできません6 。パスの書き方は gitignore と同じ形で、先頭の記号で起点が変わります6 。
書き方 起点 例 / / pathファイルシステムのルート(絶対パス) Read(/ / Users/ alice/ secrets/ **)~/ pathホームディレクトリ Read(~/ .aws/ **)/ path設定ファイルを置いた場所 Edit(/ src/ **/ *.ts)./ path または pathカレントディレクトリ Read(./ .env)
/ Users/ alice/ file のように書くと絶対パスにならない点に注意します。絶対パスは / / で始めます6 。
実際に claude -p(非対話モード)で試しました。Read ツールで .env を開くよう頼むと拒否され、permission_denials に Read が記録されました。bypassPermissions モードで cat .env を実行させても拒否されました。公式ドキュメントにも、Read の deny は cat・head・tail など Claude Code が認識するコマンドに効くと書かれています6 。
ただし、同じ設定のまま python3 -c "print(open('.e'+'nv').read())" を実行させると、.env の中身(検証用のダミー値)がそのまま表示されました。ドキュメントにも、grep -r のようにファイル名を書かずに読むコマンドや、Python・Node のスクリプトが自分で開くファイルには deny が効かないとあります6 。deny は「うっかり読む」を防ぐ層で、「どうにかして読む」は止めません 。そこで次のサンドボックスを重ねます。
Claude Code のサンドボックスは、Bash などのシェルコマンドと、そこから起動したプロセスに OS の制限をかけます。macOS は Seatbelt、Linux と WSL2 は bubblewrap を使います4 。既定では無効なので、/ sandbox を実行するか、設定で sandbox.enabled を true にします4 。
既定の範囲は次のとおりです4 。読み取りは既定で広く、~/ .ssh も読める ので、守りたいものは自分で列挙します。
種類 既定 書き込み 作業ディレクトリ、ユーザーごとの一時ディレクトリ、追加したディレクトリ 読み取り マシンのほぼ全体(~/ .ssh や ~/ .aws/ credentials を含む) ネットワーク 直接は出られない。手元のプロキシがホスト名を許可リストと照合する(許可リストは空から始まる) 環境変数 Claude Code の環境変数を引き継ぐ(中のシークレットも含む)
手順 1 の設定に、サンドボックスを足します。
{
"permissions" : {
"deny" : [
"Read(./.env)" ,
"Read(./.env.*)" ,
"Read(./secrets/**)" ,
"Read(~/.ssh/**)" ,
"Read(~/.aws/**)"
]
} ,
"sandbox" : {
"enabled" : true ,
"allowUnsandboxedCommands" : false ,
"credentials" : {
"envVars" : [
{ "name" : "GITHUB_TOKEN" , "mode" : "deny" } ,
{ "name" : "NPM_TOKEN" , "mode" : "deny" }
]
} ,
"network" : {
"allowedDomains" : [ "registry.npmjs.org" ]
}
}
}
設定の意味は次のとおりです。
Read の deny がサンドボックスにも入る : permissions の Read・Edit の deny は、サンドボックスの設定にマージされます4 。手順 1 のルールが、OS のレベルでも効くようになります
allowUnsandboxedCommands: false : サンドボックスで失敗したコマンドを、Claude がサンドボックスの外で再実行する逃げ道を閉じます4
credentials.envVars : 指定した環境変数を、サンドボックス内のコマンドを実行する前に消します。ファイルは credentials.files に { "path": "~/ .ssh", "mode": "deny" } の形で書けます4
network.allowedDomains : 許可するホストです。ここに無いホストへの接続は、手動モードなら確認が出て、dontAsk モードなら拒否されます4
bypassPermissions モードでは、許可リストに無いホストにも確認なしでつながります4 。どのモードでも拒否したい場合は network.strictAllowlist: true を使います。ただしこれは、ユーザー設定(~/ .claude/ settings.json)か managed settings、--settings フラグでしか効きません。リポジトリの .claude/ settings.json に書いても無視されます4 。
この設定で、Claude Code(Haiku、claude -p、既定の権限モード)に 3 つのコマンドを実行させました。
permissions.deny だけでは Python 経由で .env のダミーキーが表示され、サンドボックスを有効にすると .env の読み取り・GITHUB_TOKEN・example.com への接続がすべて止まり、UserPromptSubmit hook がキーを含むプロンプトを送信前に止める様子 筆者の環境(macOS、Claude Code 2.1.295)で実行した出力を再生。コマンドの一部は省略
コマンド deny だけ deny + サンドボックス python3 -c "print(open('.e'+'nv').read())"ダミーのキーが表示された PermissionError: [Errno 1] Operation not permitted: '.env'echo "GITHUB_TOKEN=${GITHUB_TOKEN:-<unset>}"(未検証) GITHUB_TOKEN=<unset>curl https:/ / example.com(未検証) deny network-outbound example.com:443
strictAllowlist を --settings で渡した bypassPermissions モードでも、.env の読み取りと example.com への接続は同じように止まりました。
サンドボックスが囲むのはシェルコマンドだけです。次のものは外で動きます4 。
Read・Edit・WebFetch などの組み込みツール(permissions のルールに従う。denyRead は Read ツールを止めない)
hooks、ローカルの MCP サーバー、ステータスライン、apiKeyHelper
自分で ! から打ったコマンド、excludedCommands に一致したコマンド
また、公式ドキュメントは「github.com のような広いドメインを許可すると、データの持ち出し経路になりうる」と警告しています4 。プロキシはホスト名だけを見て判断し、既定では TLS の中身を検査しないためです。許可リストは必要なドメインだけにします。
Claude Code の外側も含めて囲みたいときは、公式の dev container を使えます。参照用のコンテナには、外向きの通信を許可した宛先だけに絞る init-firewall.sh が入っています7 。ただし、--dangerously-skip-permissions で動かすと、コンテナ内の Claude Code の認証情報まで持ち出されうるので、信頼できるリポジトリでだけ使うよう書かれています7 。
人がうっかり API キーをプロンプトに貼るのも、よくある漏れ方です。Claude Code の UserPromptSubmit hook は、プロンプトが Claude に届く前に実行されます。スクリプトが終了コード 2 で終わると、プロンプトはブロックされ、Claude に届きません8 。
.claude/ hooks/ block-secret-prompt.sh を作ります。前提は jq が入っていることです。
#!/bin/bash
PROMPT=$(jq -r '.prompt // ""' )
PATTERN='(sk_(live|test)_[0-9A-Za-z]{10,}|AKIA[0-9A-Z]{16}|gh[pousr]_[0-9A-Za-z]{30,}|xox[baprs]-[0-9A-Za-z-]{10,}|-----BEGIN [A-Z ]*PRIVATE KEY-----)'
if printf '%s' "$PROMPT " | grep -qE "$PATTERN " ; then
echo "Blocked: プロンプトに API キーや秘密鍵らしき文字列があります。値を伏せてから送り直してください。" >&2
exit 2
fi
exit 0
chmod +x で実行権限を付け、.claude/ settings.json に登録します。
{
"hooks" : {
"UserPromptSubmit" : [
{
"hooks" : [
{
"type" : "command" ,
"command" : "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-secret-prompt.sh"
}
]
}
]
}
}
sk_live_ で始まるダミーのキーを含むプロンプトを claude -p に渡すと、UserPromptSubmit operation blocked by hook と表示されて止まりました。結果の JSON では total_cost_usd が 0 で、モデルは呼ばれていません。キーを含まないプロンプトでは、スクリプトは終了コード 0 を返しました。
注意点が 1 つあります。公式ドキュメントによると、ブロックしたプロンプトもセッションの記録やプロンプトの履歴などローカルのファイルには残ることがあります8 。hook は「提供者に送らない」ための層で、「ディスクに残さない」ためのものではありません。
ツールの呼び出しを止めたいときは PreToolUse hook を使い、permissionDecision に "deny" を返します8 。hooks の基本と PreToolUse の例は「Claude Code の hooks 入門 」で扱っています。
Codex CLI では、~/ .codex/ config.toml の sandbox_mode と approval_policy で境界を決めます。公式が勧めるのは workspace-write と on-request の組み合わせです9 。
approval_policy = "on-request"
sandbox_mode = "workspace-write"
web_search = "cached"
[sandbox_workspace_write]
network_access = false
[shell_environment_policy]
inherit = "core"
ignore_default_excludes = false
[shell_environment_policy.filters]
"AWS_*" = "exclude"
"AZURE_*" = "exclude"
sandbox_mode の値は 3 つです10 。
値 意味 read-onlyファイルは読めるが、承認なしでは編集もコマンド実行もできない workspace-writeワークスペース内の編集と、そこでのコマンド実行ができる danger-full-accessサンドボックスの制限なし
approval_policy で使える値は on-request と never です。untrusted は使えなくなり、on-failure は非推奨です5 。CLI の --dangerously-bypass-approvals-and-sandbox(別名 --yolo)は、外側で守られた環境の中でだけ使うよう書かれています9 。
Codex CLI 0.139.0(macOS)の codex sandbox コマンドで、workspace-write のサンドボックスに入れたコマンドを直接実行しました。このコマンドはモデルを呼ばないので、料金はかかりません。
codex sandbox -c sandbox_mode='"workspace-write"' -- cat .env
codex sandbox -c sandbox_mode='"workspace-write"' -- curl -sS -m 5 https://example.com -o /dev/null
codex sandbox -c sandbox_mode='"workspace-write"' -- sh -c 'echo x > ~/codex-sandbox-test.txt'
試したこと 結果 ワークスペース内の .env を読む 読めた (ダミー値が表示された)~/ .ssh の一覧を見る見られた curl https:/ / example.comCould not resolve host(通信できない)ホームディレクトリに書き込む Operation not permittedワークスペース内に書き込む 書けた 環境変数 FAKE_API_KEY を読む(既定の設定) 値が見えた 同じく ignore_default_excludes = false のとき FAKE_API_KEY・GITHUB_TOKEN・MY_SECRET が消えた
上の config.toml を置いた状態で同じように試すと、FAKE_API_KEY・GITHUB_TOKEN と AWS_ で始まる変数が消え、通信とホームへの書き込みも止まりました。
ここから分かるのは 2 点です。
Codex の workspace-write は「書かせない・通信させない」層で、「読ませない」層ではない 。ワークスペース内の .env は読めます。ネットワークを閉じておけば外へは出せませんが、読んだ内容はモデルに送られます
シークレットの環境変数は既定で子プロセスに渡る 。公式ドキュメントにも、ignore_default_excludes の既定は true で、KEY・SECRET・TOKEN を含む変数を自動では外さない、と書かれています5 。false を明示します
.env を読ませたくない場合、Codex では管理者が requirements.toml の deny_read で指定します(後述)11 。最新版は 0.162.0(2026-10-08 公開)なので、手元の挙動はバージョンで変わる可能性があります12 。
MCP サーバーは、自分で書いたものか、信頼できる提供元のものだけを使います。Claude Code の公式ドキュメントは「接続する前に各サーバーを信頼できるか確かめる。外部の内容を取ってくるサーバーはプロンプトインジェクションの危険を持ち込む」と警告しています1 。Anthropic はディレクトリに載せるコネクタを審査しますが、MCP サーバーのセキュリティ監査はしていないとも明記しています13 。
Claude Code で押さえる設定は次のとおりです。
リポジトリの .mcp.json は承認制 : 対話モードでは、プロジェクトの .mcp.json にあるサーバーを使う前に確認が出ます。ただし claude -p や Agent SDK では、確認なしで読み込まれます1 。CI で使うときは --strict-mcp-config や disabledMcpjsonServers で絞ります
使ってよいサーバーを組織で決める : managed settings に allowedMcpServers と deniedMcpServers を書きます。deny が優先されます1
{
"allowManagedMcpServersOnly" : true ,
"allowedMcpServers" : [
{ "serverName" : "github" }
]
}
MCP ツールも権限で絞る : mcp__github__* のように、サーバーやツール単位で allow・deny を書けます6
Web の内容については、Claude Code の WebFetch はページを別のモデル呼び出しで処理し、Claude には生のページではなくその結果を渡します13 。それでも、公式のベストプラクティスは「信頼できない内容を Claude に直接パイプしない」「外部の Web サービスとやり取りするスクリプトは VM の中で動かす」です13 。信頼できない文書を読むだけの作業は、ツールを絞ったサブエージェントに任せる手もあります(「Claude Code のサブエージェント入門 」)。
Codex CLI では、[mcp_servers.<名前>] ごとに enabled_tools(使ってよいツール)と disabled_tools、default_tools_approval_mode(承認の要否)を設定できます14 。
[mcp_servers.docs]
url = "https://mcp.example.com/mcp"
enabled_tools = ["search" ]
default_tools_approval_mode = "prompt"
Web 検索は web_search = "cached" が既定で、OpenAI が管理するインデックスを使います。公式ドキュメントは、cached はライブの内容からのプロンプトインジェクションに触れる機会を減らす、Web の結果は信頼できないものとして扱う、と書いています9 。
送った内容がどう扱われるかは、ツールではなく契約しているプラン で決まります。会社のコードを扱うなら、法人向けのプランか API で使います。
契約 学習への利用 提供者側の保持 Claude Free / Pro / Max 設定で許可していれば使われる 許可していれば 5 年、していなければ 30 日 Claude Team / Enterprise / API 既定で使われない 標準で 30 日。条件を満たす Enterprise はゼロデータ保持(ZDR)も可 ChatGPT 個人プラン(Codex を含む) 設定「Improve the model for everyone」を切れば使われない 本記事では未確認 ChatGPT Business / Enterprise / Edu、API 既定で使われない Business・Enterprise は管理者が決める。API は最大 30 日
出典: Claude は Claude Code の Data usage2 、OpenAI はヘルプセンターとエンタープライズプライバシーのページ15 16 (2026 年 10 月時点)。
見落としやすい点が 3 つあります。
Codex には別の学習設定がある : Codex の設定にある「Include environments」は、環境全体を学習に使うかの設定です。ChatGPT 側の設定を変えても、こちらは変わりません15
Codex はサインイン方法でデータの扱いが変わる : ChatGPT でサインインすると、そのワークスペースの保持の設定に従います。API キーでサインインすると、API の組織の設定に従います17
フィードバックは別扱い : Claude Code の / feedback(/ bug)で送った会話はコードを含めて送られ、5 年保持されます2 。組織で止めるなら環境変数 DISABLE_FEEDBACK_COMMAND=1 を設定します2
手元に残る記録も減らせます。Claude Code は ~/ .claude/ projects/ に会話を平文で既定 30 日保存し、cleanupPeriodDays で日数を変えられます2 。Codex は [history] persistence = "none" で履歴を保存しなくなり、--ephemeral を付けるとセッションのファイルを書きません5 。
テレメトリ(利用状況の送信)は Claude Code の場合、コードやプロンプト、ファイルパスを含まないと書かれています。止めるなら DISABLE_TELEMETRY=1、エラー報告は DISABLE_ERROR_REPORTING=1 です2 。
個人の設定は、本人がいつでも外せます。組織で守らせたい設定は、管理者が配る設定に書きます。
Claude Code は managed settings が最も優先され、どの層で deny したツールも、ほかの層で allow できません18 。置き場所は macOS が / Library/ Application Support/ ClaudeCode/ managed-settings.json、Linux・WSL が / etc/ claude-code/ managed-settings.json です18 。公式の例をもとに、サンドボックスも強制する形にすると次のようになります。
{
"permissions" : {
"deny" : [
"Read(./.env)" ,
"Read(./secrets/**)"
] ,
"disableBypassPermissionsMode" : "disable"
} ,
"allowManagedPermissionRulesOnly" : true ,
"sandbox" : {
"enabled" : true ,
"failIfUnavailable" : true ,
"allowUnsandboxedCommands" : false ,
"network" : {
"allowManagedDomainsOnly" : true ,
"allowedDomains" : [ "github.com" , "*.npmjs.org" ]
}
}
}
disableBypassPermissionsMode: bypassPermissions モードと --dangerously-skip-permissions を使えなくします6
allowManagedPermissionRulesOnly: ユーザーやプロジェクトの allow・deny を無視し、managed のルールだけを使います18
failIfUnavailable: サンドボックスを起動できないとき、サンドボックスなしで動かず終了します4
Claude for Teams・Enterprise では、claude.ai の管理画面から設定を配る server-managed settings も使えます。ただし公式は、管理していない端末では利用者が迂回できる「クライアント側の制御」であり、セキュリティの境界ではないと書いています18 。
Codex CLI は / etc/ codex/ requirements.toml(Windows は %ProgramData%\OpenAI\Codex\requirements.toml)で、利用者が選べる値を制限します11 。
allowed_approval_policies = ["on-request" ]
allowed_sandbox_modes = ["read-only" , "workspace-write" ]
[permissions.filesystem]
deny_read = [
"/**/*.env" ,
"~/.ssh" ,
]
deny_read があると、完全アクセス(danger-full-access)は拒否されます。ただし、ネイティブの Windows では、シェルのサブプロセスからの読み取りにはこのルールが効きません11 。
deny を書いたのに Python で読めた : 仕様どおりです。Read の deny は組み込みツールと、Claude Code が認識するコマンドにしか効きません6 。サンドボックスを有効にします
サンドボックスが効いていない : 依存が足りないと、Claude Code はサンドボックスなしでコマンドを実行します4 。Linux は bubblewrap と socat を入れ、/ sandbox で状態を確かめます。確実に止めたいなら failIfUnavailable: true にします
strictAllowlist を書いたのに確認が出る : リポジトリの .claude/ settings.json に書いても効きません。ユーザー設定か managed settings に書きます4
npm や git が通信できない : 許可リストは空から始まります。allowedDomains に必要なホストだけを足します。広いドメインは持ち出しの経路になりえます4
Codex の設定で起動しない : approval_policy = "untrusted" は使えなくなりました。on-request にするか、プロジェクトの trust_level = "untrusted" を使います9 5
Codex のプロファイルが読まれない : 0.134.0 以降、プロファイルは ~/ .codex/ <名前>.config.toml の別ファイルになりました5
CI で .mcp.json のサーバーが勝手に動く : claude -p では確認が出ません1 。--strict-mcp-config で、使うサーバーを明示します
AI エージェントの情報漏洩は、読む・外に送る・ツールに渡す・残る、の 4 つの経路で起きます
Claude Code の permissions.deny は「うっかり」を防ぐ層です。スクリプト経由の読み取りは止めないので、サンドボックス(denyRead・credentials・allowedDomains)を重ねます
Codex CLI は workspace-write でネットワークを閉じ、ignore_default_excludes = false でシークレットの環境変数を外します。.env を読ませないなら管理者の deny_read を使います
会社のコードは法人プランか API で扱い、MCP サーバーは信頼できるものだけを許可リストに入れます
次にやること: 手元のプロジェクトで / sandbox を有効にし、この記事のコマンドで .env が読めないことを確かめてから、managed settings でチームに配りましょう
守れません。Read ツールや cat .env は止まりますが、Python などのスクリプトが自分でファイルを開く場合は止まりません6 。筆者の検証でも、deny だけの設定ではスクリプト経由でダミーのキーが表示されました。サンドボックスを有効にすると、OS のレベルで Operation not permitted になります。
自動承認(auto-allow)のモードでは、サンドボックス内で動くコマンドは確認なしで実行されます4 。通信が必要なツールは allowedDomains に、書き込みが必要な場所は filesystem.allowWrite に足します。docker のように中で動かないコマンドは excludedCommands で外せますが、外したコマンドは全権限で動きます4 。
読まれます。workspace-write は書き込みと通信を制限するモードで、ワークスペース内のファイルの読み取りは止めません。筆者の環境(Codex CLI 0.139.0)でも cat .env は成功しました。読ませたくない場合は、管理者が requirements.toml の deny_read で指定します11 。
法人向けの契約なら、既定では学習に使われません。Claude は Team・Enterprise・API で、ChatGPT は Business・Enterprise・Edu と API で、既定で学習に使わないと明記されています2 15 。個人プランでは設定次第なので、業務では法人プランを使い、設定を確かめます。
あります。MCP サーバーには会話のデータが渡り、外部の内容を取ってくるサーバーはプロンプトインジェクションの入り口にもなります1 。また、ローカルの MCP サーバーは Claude Code のサンドボックスの外で動きます4 。信頼できるサーバーだけを allowedMcpServers に入れ、ツールも必要なものだけ許可します。