{"record":{"id":"cae9ebd231bc9ce9","repo":"Mintplex-Labs/anything-llm","slug":"mcp-server-name-is-required","errorCode":null,"errorMessage":"MCP server name is required","messagePattern":"MCP server name is required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/utils/MCP/hypervisor/index.js","lineNumber":449,"sourceCode":"          },\n        });\n      default:\n        return new SSEClientTransport(url, {\n          requestInit: {\n            headers: server.headers,\n          },\n        });\n    }\n  }\n\n  /**\n   * @private Start a single MCP server by its server definition from the JSON file\n   * @param {string} name - The name of the MCP server to start\n   * @param {Object} server - The server definition\n   * @returns {Promise<boolean>}\n   */\n  async #startMCPServer({ name, server }) {\n    if (!name) throw new Error(\"MCP server name is required\");\n    if (!server) throw new Error(\"MCP server definition is required\");\n    const serverType = this.#parseServerType(server);\n    if (!serverType) throw new Error(\"MCP server command or url is required\");\n\n    this.#validateServerDefinitionByType(name, server, serverType);\n    this.log(`Attempting to start MCP server: ${name}`);\n    const mcp = new Client({ name: name, version: \"1.0.0\" });\n    const transport = await this.#setupServerTransport(server, serverType);\n\n    // Add connection event listeners\n    transport.onclose = () => this.log(`${name} - Transport closed`);\n    transport.onerror = (error) =>\n      this.log(`${name} - Transport error:`, error);\n    transport.onmessage = (message) =>\n      this.log(`${name} - Transport message:`, message);\n\n    // Connect and await the connection with a timeout\n    this.mcps[name] = mcp;","sourceCodeStart":431,"sourceCodeEnd":467,"githubUrl":"https://github.com/Mintplex-Labs/anything-llm/blob/3aec848f2885144aa8f1e53b9731a04310d5d558/server/utils/MCP/hypervisor/index.js#L431-L467","documentation":"#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.","triggerScenarios":"An MCP servers JSON entry keyed as \"\" (empty string key), or calling the hypervisor's start API programmatically with a missing/empty name.","commonSituations":"Malformed hand-edited JSON with an empty key; automation scripts iterating entries and passing undefined names; whitespace-only names.","solutions":["Give every MCP server entry a unique non-empty name key","Trim names when editing; avoid whitespace-only keys","If calling programmatically, assert name is a non-empty string before invoking","Re-boot MCP servers after fixing the JSON"],"exampleFix":"// before\n{ \"\": { \"command\": \"npx\", \"args\": [\"-y\", \"server-memory\"] } }\n\n// after\n{ \"memory\": { \"command\": \"npx\", \"args\": [\"-y\", \"server-memory\"] } }","handlingStrategy":"validation","validationCode":"function validateServerNames(servers) {\n  for (const [name, server] of Object.entries(servers || {})) {\n    if (!name || !name.trim()) throw new Error('Every MCP server needs a non-empty name');\n  }\n}","typeGuard":"function isNonEmptyName(name) {\n  return typeof name === 'string' && name.trim().length > 0;\n}","tryCatchPattern":"try {\n  await hypervisor.bootMCPServers();\n} catch (err) {\n  if (err.message === 'MCP server name is required') {\n    // find and remove/repair the empty-key entry in the JSON\n  }\n  throw err;\n}","preventionTips":["Generate or require a name in any UI that adds MCP servers","Trim and reject empty keys when editing mcp_servers.json","Lint the JSON for empty keys in CI"],"tags":["mcp","config-validation","required-field"],"backgroundTag":"missing-required-argument","analyzedSha":"3aec848f2885144aa8f1e53b9731a04310d5d558","analyzedAt":"2026-08-18T10:02:21.017Z","contentChangedAt":"2026-08-18T10:02:21.017Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}