{"record":{"id":"f390e44678665c53","repo":"ruvnet/ruflo","slug":"tool-already-registered","errorCode":null,"errorMessage":"Tool already registered","messagePattern":"Tool already registered","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"v3/@claude-flow/mcp/src/tool-registry.ts","lineNumber":67,"sourceCode":"  private readonly tools: Map<string, ToolMetadata> = new Map();\n  private readonly categoryIndex: Map<string, Set<string>> = new Map();\n  private readonly tagIndex: Map<string, Set<string>> = new Map();\n  private defaultContext?: ToolContext;\n  private authorizer?: ToolAuthorizer;\n\n  private totalRegistrations = 0;\n  private totalLookups = 0;\n  private totalExecutions = 0;\n\n  constructor(private readonly logger: ILogger) {\n    super();\n  }\n\n  register(tool: MCPTool, options: ToolRegistrationOptions = {}): boolean {\n    const startTime = performance.now();\n\n    if (this.tools.has(tool.name) && !options.override) {\n      this.logger.warn('Tool already registered', { name: tool.name });\n      return false;\n    }\n\n    if (options.validate !== false) {\n      const validation = this.validateTool(tool);\n      if (!validation.valid) {\n        this.logger.error('Tool validation failed', {\n          name: tool.name,\n          errors: validation.errors,\n        });\n        return false;\n      }\n    }\n\n    const metadata: ToolMetadata = {\n      tool,\n      registeredAt: new Date(),\n      callCount: 0,","sourceCodeStart":49,"sourceCodeEnd":85,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/@claude-flow/mcp/src/tool-registry.ts#L49-L85","documentation":"Log warning in the MCP tool registry's register: a tool with the same name is already registered and options.override was not set, so the duplicate registration is refused and register returns false — a sentinel guard, not a thrown error.","triggerScenarios":"Thrown at v3/@claude-flow/mcp/src/tool-registry.ts:67 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Unregister the existing tool first or choose a different tool name; duplicate registration is rejected."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fa13ee4ad60ac2090b1480656eb233521790d640","analyzedAt":"2026-08-18T21:34:22.708Z","contentChangedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}