{"record":{"id":"a9df6c0785ffccd6","repo":"ruvnet/ruflo","slug":"mcp-composition-inspector-message","errorCode":null,"errorMessage":"[mcp-composition-inspector] ${message}","messagePattern":"\\[mcp-composition-inspector\\] (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"v3/@claude-flow/security/src/mcp-composition-inspector.ts","lineNumber":334,"sourceCode":" * what \"blocked\" means operationally; this function does not throw or abort\n * anything itself.\n */\nexport function evaluateToolComposition(\n  tools: readonly McpToolDescriptor[],\n  options: CompositionInspectorOptions = {},\n): CompositionGuardResult {\n  const result = inspectToolComposition(tools, options);\n  if (result.findings.length === 0) {\n    return { result, action: 'none', blocked: false };\n  }\n\n  const summary =\n    `MCP Composition Inspector: ${result.findings.length} suspicious cross-tool fragment(s) ` +\n    `across ${result.stats.toolsScanned} tools (${result.stats.pairsCompared} pairs compared)`;\n\n  if (isCompositionBlockEnabled()) {\n    const message = `${summary} — blocking chain (${COMPOSITION_BLOCK_ENV}=1)`;\n    console.warn(`[mcp-composition-inspector] ${message}`);\n    for (const f of result.findings) {\n      console.warn(`  - ${f.toolA} <-> ${f.toolB}: ${f.reason}`);\n    }\n    return { result, action: 'block', blocked: true, message };\n  }\n\n  console.warn(`[mcp-composition-inspector] ${summary}`);\n  for (const f of result.findings) {\n    console.warn(`  - ${f.toolA} <-> ${f.toolB}: ${f.reason}`);\n  }\n  return { result, action: 'warn', blocked: false, message: summary };\n}\n","sourceCodeStart":316,"sourceCodeEnd":347,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/@claude-flow/security/src/mcp-composition-inspector.ts#L316-L347","documentation":"Console warning emitted by evaluateToolComposition() when composition findings exist and blocking is enabled (COMPOSITION_BLOCK_ENV=1): suspicious cross-tool prompt-fragment reuse was detected across MCP tool descriptors and the call chain will be blocked by the guard.","triggerScenarios":"Thrown at v3/@claude-flow/security/src/mcp-composition-inspector.ts:334 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Review the composition inspector findings; remove or sandbox the conflicting tool combinations."],"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-14T00:17:10.932Z"}