The openclaw/openclaw project’s merged Code Mode change now gives node-backed MCP servers the same typed namespace as gateway servers. That makes a familiar name such as docs a concrete provenance problem when one agent can see a gateway’s tools and the tools of several connected nodes.
The fresh openclaw/openclaw change addresses that pressure. Gateway-hosted MCP servers already had a typed call surface such as MCP.<server>.<tool>(). Node-backed MCP servers travelled through a generic tool path instead. The difference was more than cosmetic: an agent could encounter two sources of tools with different ways to inspect and invoke them, while a repeated server name had no single public story.
One namespace, with the source left visible
The merged implementation gives node-backed MCP tools the same Code Mode namespace and generated TypeScript-style declarations as gateway MCP tools. It also carries node identity into the metadata used to build that namespace. A unique node-backed server can keep its familiar name. When names collide, the code derives a stable identifier from the node id and adds a numeric suffix only if it must.
The point is not prettier naming. It is to keep a route such as MCP.nodeBDocs.searchC() from quietly pretending to be the same authority as another docs server. The project’s focused tests cover both a gateway/node collision and two node-backed servers with the same name; they also check that a call travels through the expected node forwarding path.
The alias that did not survive
OpenClaw made another revealing choice: in Code Mode, node-backed MCP tools leave the generic ALL_TOOLS and tools.* surfaces. The PR calls this intentional. Rather than teach an agent two ways to reach the same external capability during a transition, it wants one canonical MCP surface with an ownership hint in the preamble and declaration files.
That can be a sharper operator contract. If a connected node exposes a ticket search or document search service, the useful question is no longer only “can the model find a tool called search?” It is “which machine supplied this server, which declaration describes its inputs, and does the visible name still tell the operator where a call will go?”
The evidence is appropriately bounded. The PR describes focused suites, changed-code gates, and CI, but says no paired-node live fixture was supplied; the forwarding in the tests is mocked. It also says policy and forwarding outside Code Mode are unchanged. So this is not a claim that federated MCP is solved. It is a source-level decision to make a crowded tool catalog less ambiguous before an agent gets to act.
The next signal is a public live paired-node fixture—or a real operational report—that tests whether those generated names remain understandable once a user, not just a test harness, has several similarly named servers in front of an agent.