Claude Code MCP Deep Dive (4): From Tools List to an Entry in the Tool List A developer's deep dive into Claude Code's MCP integration explains how MCP server tools are exposed to the model under namespaced callable names of the form mcp____, with plugin-bundled servers adding a further plugin scope. The namespace prevents collisions between identically named tools from different servers and between external and built-in tools, while the client adapts each server's JSON Schema input contract into its own tool surface and maps calls back to the owning server via tools/call. TL;DR: An MCP server can say, “I have a tool named create issue ,” but Claude Code does not simply put that bare name beside its built-in tools. It gives the tool a namespaced callable identity and adapts the server’s definition into the client’s tool surface. The namespace prevents collisions; the adapter makes a built-in action and an external action look like one coherent tool system to the model. The previous article https://dev.to/ 94be737e156beb4d74df2/claude-code-mcp-deep-dive-3-from-a-child-process-to-a-remote-service-49nb covered how bytes move between Claude Code and an MCP server. This article starts after the connection and initialization succeed: how does a tool declared by the server become something the model can actually call? Imagine two connected servers, jira and linear . Both happen to offer a tool called create issue . If a client placed two bare create issue entries in a shared tool list, the model would have no reliable way to select one. The collision can be even more confusing when a server declares a name that resembles a built-in tool. A call named Write should not ambiguously mean either “write a local file” or “invoke an unrelated external service.” Claude Code resolves this by constructing a callable name that records the tool's origin. For a normally configured server, the shape is: mcp