A hook is a command or action you configure to run automatically at set points while Claude Code works. An mcp_tool hook calls a tool on an MCP server, which is an outside service connected to Claude Code through the Model Context Protocol.
When an mcp_tool hook targets a tool on the account memory server, Claude Code now checks whether that tool is available in the current session's mode. If it is not, the hook is refused and its result is an error marked withheld: true, with a message saying the tool is not available to a hook in this session. When the call is allowed, it is sent with a _meta marker set to "worker". _meta is a block of extra information attached to MCP requests.
Before, hooks could call any tool on any connected server without this check.
This closes a way for hooks to reach memory tools that the session itself is not allowed to use. If you have a hook that calls the account memory server, it may now return this error in some session modes.
The entry above is what we published on the day. These lines were added later, as Anthropic's own pages caught up, and they sit beside the original rather than replacing it.
* `"type": "mcp_tool"`: call a tool on a configured MCP server. See [MCP tool hooks](/docs/en/hooks#mcp-tool-hook-fields).hooks-guide see the edit
* **[MCP tool hooks](#mcp-tool-hook-fields)** (`type: "mcp_tool"`): call a tool on a configured [MCP server](/docs/en/mcp). The tool's text output is treated like command-hook stdout.hooks see the edit
Which session modes make which memory tools unavailable is not stated.
Anthropic's documentation has since written up mcp_tool, on Hooks reference.