Mintplex-Labs/anything-llm · error

MCP server name is required

Error message

MCP server name is required

What it means

#startMCPServer destructures { name, server } for each entry and throws immediately if name is falsy. Because entries are normally keyed by name from the MCP servers JSON, this guard mostly fires on programmatic calls or degenerate JSON where the key is an empty string.

Solutions

  1. Give every MCP server entry a unique non-empty name key
  2. Trim names when editing; avoid whitespace-only keys
  3. If calling programmatically, assert name is a non-empty string before invoking
  4. Re-boot MCP servers after fixing the JSON

Example fix

// before
{ "": { "command": "npx", "args": ["-y", "server-memory"] } }

// after
{ "memory": { "command": "npx", "args": ["-y", "server-memory"] } }
Defensive patterns

Strategy: validation

Validate before calling

function validateServerNames(servers) {
  for (const [name, server] of Object.entries(servers || {})) {
    if (!name || !name.trim()) throw new Error('Every MCP server needs a non-empty name');
  }
}

Type guard

function isNonEmptyName(name) {
  return typeof name === 'string' && name.trim().length > 0;
}

Try / catch

try {
  await hypervisor.bootMCPServers();
} catch (err) {
  if (err.message === 'MCP server name is required') {
    // find and remove/repair the empty-key entry in the JSON
  }
  throw err;
}

Prevention

When it happens

Trigger: An MCP servers JSON entry keyed as "" (empty string key), or calling the hypervisor's start API programmatically with a missing/empty name.

Common situations: Malformed hand-edited JSON with an empty key; automation scripts iterating entries and passing undefined names; whitespace-only names.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of Mintplex-Labs/anything-llm@3aec848f28 (2026-08-18). Data as JSON: /api/errors/cae9ebd231bc9ce9. Report an issue: GitHub.

Appendix: source

Thrown at server/utils/MCP/hypervisor/index.js:449

          },
        });
      default:
        return new SSEClientTransport(url, {
          requestInit: {
            headers: server.headers,
          },
        });
    }
  }

  /**
   * @private Start a single MCP server by its server definition from the JSON file
   * @param {string} name - The name of the MCP server to start
   * @param {Object} server - The server definition
   * @returns {Promise<boolean>}
   */
  async #startMCPServer({ name, server }) {
    if (!name) throw new Error("MCP server name is required");
    if (!server) throw new Error("MCP server definition is required");
    const serverType = this.#parseServerType(server);
    if (!serverType) throw new Error("MCP server command or url is required");

    this.#validateServerDefinitionByType(name, server, serverType);
    this.log(`Attempting to start MCP server: ${name}`);
    const mcp = new Client({ name: name, version: "1.0.0" });
    const transport = await this.#setupServerTransport(server, serverType);

    // Add connection event listeners
    transport.onclose = () => this.log(`${name} - Transport closed`);
    transport.onerror = (error) =>
      this.log(`${name} - Transport error:`, error);
    transport.onmessage = (message) =>
      this.log(`${name} - Transport message:`, message);

    // Connect and await the connection with a timeout
    this.mcps[name] = mcp;

View on GitHub (pinned to 3aec848f28)