{
  "id": 13616544,
  "title": "Claude Code's hook matcher mcp__lab fired 0 times in 42 calls, though the same string worked as a permission rule",
  "url": "https://urgent.news/2026/10/11/claude-codes-hook-matcher-mcp-lab-fired-0-times-in-42-calls-though",
  "topic": "ai",
  "section": "AI",
  "published": "2026-10-11T02:17:00.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/rulestack/claude-codes-hook-matcher-mcplab-fired-0-times-in-42-calls-though-the-same-string-worked-as-a-250o"
  },
  "original_language": "en",
  "account": "In 42 calls to Claude Code's server, the hook matcher \"mcp__lab\" fired 0 times, while \"mcp__lab__.*\" fired all 42 times. The same bare \"mcp__lab\" passed the \"allowedTools\" check for every covered call. Two other strings, \"mcp__lab (0 of 42)\" and the documented fix \"mcp__lab__.*\" when bundled in a plugin (0 of 9), also did not fire. The hook matcher in an MCP server usually logs calls or checks them before execution, but in this case, the matcher did not fire at all. The source material reveals that the matcher string does nothing when compared as an exact string and matches no tool. The documentation explains that a matcher that matches nothing does not break anything visible. They tested various plausible strings by creating a three-tool MCP server and registering 22 hook groups to see which ones fired for which tool. The documentation clarifies that the bare server prefix in a permission rule means the whole server, and that a wildcard \"*\" is used for glob matching. They also discovered that the matcher \"mcp__lab\" is an exact name that no tool has, while it is the whole server as a permission rule and an if condition according to the docs.",
  "summary": "Across 14 headless runs of Claude Code 2.1.289, a hook whose matcher was the server prefix mcp__lab fired 0 times in 42 calls to that server's tools, while mcp__lab__.* fired 42 of 42, and the same bare mcp__lab passed to --allowedTools approved every call it covered. Two more strings stayed silent: an if condition of mcp__lab (0 of 42), and the documented fix mcp__lab__.* itself once the same…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 3,
    "also_reported_by": [
      {
        "outlet": "XDA Developers",
        "title": "I ran this hidden Claude Code command on my setup, and apparently I've been giving it terrible instructions",
        "url": "https://urgent.news/2026/10/09/i-ran-this-hidden-claude-code-command-on-my-setup-and-apparently-ive",
        "published": "2026-10-09T16:30:16.000Z"
      },
      {
        "outlet": "Dev.to",
        "title": "Claude Code ran for 19 hours 53 minutes without stopping. Here's the setup that made it possible",
        "url": "https://urgent.news/2026/10/09/claude-code-ran-for-19-hours-53-minutes-without-stopping-heres-the",
        "published": "2026-10-09T18:25:30.000Z"
      }
    ]
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}