diff --git a/web/app/components/workflow/nodes/_base/components/mcp-tool-availability.tsx b/web/app/components/workflow/nodes/_base/components/mcp-tool-availability.tsx index 8a2ab8fd9a..1bda3d0606 100644 --- a/web/app/components/workflow/nodes/_base/components/mcp-tool-availability.tsx +++ b/web/app/components/workflow/nodes/_base/components/mcp-tool-availability.tsx @@ -1,6 +1,6 @@ 'use client' import type { ReactNode } from 'react' -import { createContext, useContext } from 'react' +import { createContext, useContext, useMemo } from 'react' type MCPToolAvailabilityContextValue = { versionSupported?: boolean @@ -11,29 +11,27 @@ const MCPToolAvailabilityContext = createContext { - const parentContext = useContext(MCPToolAvailabilityContext) - const value = { - versionSupported: versionSupported !== undefined - ? versionSupported - : parentContext?.versionSupported, - sandboxEnabled: sandboxEnabled !== undefined - ? sandboxEnabled - : parentContext?.sandboxEnabled, - } +} + +export function MCPToolAvailabilityProvider({ + versionSupported, + sandboxEnabled, + children, +}: ProviderProps): ReactNode { + const parent = useContext(MCPToolAvailabilityContext) + + const value = useMemo(() => ({ + versionSupported: versionSupported ?? parent?.versionSupported, + sandboxEnabled: sandboxEnabled ?? parent?.sandboxEnabled, + }), [versionSupported, sandboxEnabled, parent]) + return ( {children} @@ -41,24 +39,21 @@ export const MCPToolAvailabilityProvider = ({ ) } -export const useMCPToolAvailability = (): MCPToolAvailability => { +export function useMCPToolAvailability(): MCPToolAvailability { const context = useContext(MCPToolAvailabilityContext) - if (context === undefined) + + if (!context) return { allowed: true } - const { versionSupported, sandboxEnabled } = context - const versionAllowed = versionSupported ?? true - const sandboxAllowed = sandboxEnabled ?? true + const versionAllowed = context.versionSupported ?? true + const sandboxAllowed = context.sandboxEnabled ?? true const allowed = versionAllowed && sandboxAllowed + let blockedBy: MCPToolAvailability['blockedBy'] if (!versionAllowed) blockedBy = 'version' else if (!sandboxAllowed) blockedBy = 'sandbox' - return { - allowed, - versionSupported, - sandboxEnabled, - blockedBy, - } + + return { allowed, blockedBy } }