← 2026-04-29
Claude Code GitHub 2026-04-29 Source →

Claude Code Tips — MCPのalwaysLoad活用と PostToolUseフックでツール出力を加工する

Claude Code Tips — MCPのalwaysLoad活用と PostToolUseフックでツール出力を加工する

v2.1.121 で追加された2つの機能 — MCP alwaysLoad オプションとPostToolUseフックの全ツール対応 — の実践的な使い方をまとめる。

MCP alwaysLoad — よく使うサーバーは常時ロードにする

問題

Claude Codeはデフォルトで多くのMCPツールを「遅延ロード(deferred)」として扱う。利用可能にするには ToolSearch を呼び出して明示的にスキーマを取得する必要があり、Claude が自動では使ってくれないことがある。

解決策

alwaysLoad: true を設定すると、そのサーバーのツールはセッション開始時から常に利用可能になる。

// ~/.claude/settings.json または .claude/settings.json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/project"],
      "alwaysLoad": true
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "your-token"
      },
      "alwaysLoad": true
    }
  }
}

いつ使うか

起動が若干重くなるトレードオフがあるため、たまにしか使わないサーバーはデフォルト(遅延ロード)のままにする方がよい。

PostToolUse フックでツール出力を加工する

できること

hookSpecificOutput.updatedToolOutput を返すことで、ツールの出力をClaudeが読み取る前に変換できる。

ユースケース1 — 機密情報のマスキング

// .claude/settings.json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/mask-secrets.sh"
          }
        ]
      }
    ]
  }
}
#!/bin/bash
# mask-secrets.sh
# stdinからツール出力を読み取り、機密情報をマスクしてstdoutに出力

input=$(cat)

# 例: AWS アクセスキーをマスク
masked=$(echo "$input" | sed 's/AKIA[A-Z0-9]\{16\}/[AWS_KEY_MASKED]/g')

echo "$masked"

フックがstdoutに出力した内容が updatedToolOutput として使われる。Claude にはマスク後の内容のみが渡される。

ユースケース2 — 長い出力の要約

ビルドログなど長大な出力を最初の50行 + 最後の20行に絞り込むフックを挟めば、コンテキストを節約できる。

#!/bin/bash
# trim-output.sh
input=$(cat)
line_count=$(echo "$input" | wc -l)

if [ "$line_count" -gt 100 ]; then
  head_lines=$(echo "$input" | head -50)
  tail_lines=$(echo "$input" | tail -20)
  echo "$head_lines"
  echo "... [中略: $((line_count - 70)) 行省略] ..."
  echo "$tail_lines"
else
  echo "$input"
fi

MCP ツールフックも利用可能

v2.1.118 から PostToolUse フックで type: "mcp_tool" が使えるようになっており、MCPツールの出力も同様に加工できる:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "mcp__my-server__my-tool",
        "hooks": [
          {
            "type": "mcp_tool",
            "server_name": "hooks-server",
            "tool_name": "process_output"
          }
        ]
      }
    ]
  }
}

alwaysLoad とPostToolUseフックはどちらも「Claude Code の動作を自分のワークフローに合わせて調整する」ための仕組み。特にチーム環境でコンプライアンス要件があるプロジェクトでは、フックによる出力サニタイズが実用的な解になると思われる。