When you build an MCP server from a single OpenAPI description, the mapping is mechanical and mostly safe: a path becomes a tool, path parameters become required arguments, and query parameters become optional ones with their defaults preserved from a step-by-step conversion walkthrough. Tool names come from operationId when it exists, otherwise from the method and path with non-alphanumeric characters replaced by underscores.
That works until the second API arrives. Now create_invoice from the billing spec and create_invoice from the accounting spec both want the same name. MCP tools are identified by unique names, and a client that sees two identical names can refuse to connect at all; duplicate function names across servers have broken real MCP clients as reported in this LiteLLM issue. The fix proposed there is exactly the one this article builds on: prefix each tool with its server or upstream name.
There is a second, quieter problem. A single-spec server can assume one credential set, often read from the environment. A multi-API server serves several tenants against several upstreams, and now the credential depends on who is calling and which API the tool reaches. Those two concerns, naming and credentials, have to be designed together because both key off the same identifier: the upstream name.
A third problem is scale. Hosts that connect to many servers and accumulate hundreds of tools cannot load every definition into context; the MCP client guidance recommends switching to progressive discovery once tool definitions take up a meaningful share of the context window per the MCP client best practices. A clean prefix makes search and filtering across a large catalog far more effective, because a query for "billing" matches every billing tool without embedding tricks.



