diff --git a/client/src/Providers/BadgeRowContext.tsx b/client/src/Providers/BadgeRowContext.tsx index e54411ed84..26d6774917 100644 --- a/client/src/Providers/BadgeRowContext.tsx +++ b/client/src/Providers/BadgeRowContext.tsx @@ -2,27 +2,18 @@ import React, { createContext, useContext, useEffect, useRef } from 'react'; import { useSetRecoilState } from 'recoil'; import { Tools, Constants, LocalStorageKeys, AgentCapabilities } from 'librechat-data-provider'; import type { TAgentsEndpoint } from 'librechat-data-provider'; -import { - useSearchApiKeyForm, - useGetAgentsConfig, - useCodeApiKeyForm, - useToolToggle, - useMCPSelect, -} from '~/hooks'; -import { useGetStartupConfig } from '~/data-provider'; +import { useSearchApiKeyForm, useGetAgentsConfig, useCodeApiKeyForm, useToolToggle } from '~/hooks'; import { ephemeralAgentByConvoId } from '~/store'; interface BadgeRowContextType { conversationId?: string | null; agentsConfig?: TAgentsEndpoint | null; - mcpSelect: ReturnType; webSearch: ReturnType; artifacts: ReturnType; fileSearch: ReturnType; codeInterpreter: ReturnType; codeApiKeyForm: ReturnType; searchApiKeyForm: ReturnType; - startupConfig: ReturnType['data']; } const BadgeRowContext = createContext(undefined); @@ -119,12 +110,6 @@ export default function BadgeRowProvider({ } }, [key, isSubmitting, setEphemeralAgent]); - /** Startup config */ - const { data: startupConfig } = useGetStartupConfig(); - - /** MCPSelect hook */ - const mcpSelect = useMCPSelect({ conversationId }); - /** CodeInterpreter hooks */ const codeApiKeyForm = useCodeApiKeyForm({}); const { setIsDialogOpen: setCodeDialogOpen } = codeApiKeyForm; @@ -172,12 +157,10 @@ export default function BadgeRowProvider({ }); const value: BadgeRowContextType = { - mcpSelect, webSearch, artifacts, fileSearch, agentsConfig, - startupConfig, conversationId, codeApiKeyForm, codeInterpreter, diff --git a/client/src/components/Chat/Input/ToolsDropdown.tsx b/client/src/components/Chat/Input/ToolsDropdown.tsx index 60ad0156f1..3517df6c6b 100644 --- a/client/src/components/Chat/Input/ToolsDropdown.tsx +++ b/client/src/components/Chat/Input/ToolsDropdown.tsx @@ -10,11 +10,12 @@ import { PermissionTypes, defaultAgentCapabilities, } from 'librechat-data-provider'; -import { useLocalize, useHasAccess, useAgentCapabilities } from '~/hooks'; +import { useLocalize, useHasAccess, useAgentCapabilities, useMCPSelect } from '~/hooks'; import ArtifactsSubMenu from '~/components/Chat/Input/ArtifactsSubMenu'; import MCPSubMenu from '~/components/Chat/Input/MCPSubMenu'; import { useBadgeRowContext } from '~/Providers'; import { cn } from '~/utils'; +import { useGetStartupConfig } from '~/data-provider'; interface ToolsDropdownProps { disabled?: boolean; @@ -26,15 +27,16 @@ const ToolsDropdown = ({ disabled }: ToolsDropdownProps) => { const [isPopoverActive, setIsPopoverActive] = useState(false); const { webSearch, - mcpSelect, artifacts, fileSearch, agentsConfig, - startupConfig, codeApiKeyForm, codeInterpreter, searchApiKeyForm, } = useBadgeRowContext(); + const mcpSelect = useMCPSelect(); + const { data: startupConfig } = useGetStartupConfig(); + const { codeEnabled, webSearchEnabled, artifactsEnabled, fileSearchEnabled } = useAgentCapabilities(agentsConfig?.capabilities ?? defaultAgentCapabilities); diff --git a/client/src/hooks/MCP/useMCPServerManager.ts b/client/src/hooks/MCP/useMCPServerManager.ts index b6b782cdc4..6023bd2a2a 100644 --- a/client/src/hooks/MCP/useMCPServerManager.ts +++ b/client/src/hooks/MCP/useMCPServerManager.ts @@ -10,8 +10,8 @@ import { import type { TUpdateUserPlugins, TPlugin } from 'librechat-data-provider'; import type { ConfigFieldDetail } from '~/components/MCP/MCPConfigDialog'; import { useMCPConnectionStatusQuery } from '~/data-provider/Tools/queries'; -import { useBadgeRowContext } from '~/Providers'; -import { useLocalize } from '~/hooks'; +import { useGetStartupConfig } from '~/data-provider'; +import { useLocalize, useMCPSelect } from '~/hooks'; interface ServerState { isInitializing: boolean; @@ -24,7 +24,8 @@ interface ServerState { export function useMCPServerManager() { const localize = useLocalize(); const { showToast } = useToastContext(); - const { mcpSelect, startupConfig } = useBadgeRowContext(); + const mcpSelect = useMCPSelect(); + const { data: startupConfig } = useGetStartupConfig(); const { mcpValues, setMCPValues, mcpToolDetails, isPinned, setIsPinned } = mcpSelect; const queryClient = useQueryClient(); diff --git a/client/src/hooks/Plugins/useMCPSelect.ts b/client/src/hooks/Plugins/useMCPSelect.ts index 6a4973a432..89cf2d2577 100644 --- a/client/src/hooks/Plugins/useMCPSelect.ts +++ b/client/src/hooks/Plugins/useMCPSelect.ts @@ -5,6 +5,7 @@ import type { TPlugin } from 'librechat-data-provider'; import { useAvailableToolsQuery, useGetStartupConfig } from '~/data-provider'; import useLocalStorage from '~/hooks/useLocalStorageAlt'; import { ephemeralAgentByConvoId } from '~/store'; +import { useChatContext } from '~/Providers'; const storageCondition = (value: unknown, rawCurrentValue?: string | null) => { if (rawCurrentValue) { @@ -20,12 +21,14 @@ const storageCondition = (value: unknown, rawCurrentValue?: string | null) => { return Array.isArray(value) && value.length > 0; }; -interface UseMCPSelectOptions { - conversationId?: string | null; -} +export function useMCPSelect() { + const { conversation } = useChatContext(); + + const key = useMemo( + () => conversation?.conversationId ?? Constants.NEW_CONVO, + [conversation?.conversationId], + ); -export function useMCPSelect({ conversationId }: UseMCPSelectOptions) { - const key = conversationId ?? Constants.NEW_CONVO; const hasSetFetched = useRef(null); const [ephemeralAgent, setEphemeralAgent] = useRecoilState(ephemeralAgentByConvoId(key)); const { data: startupConfig } = useGetStartupConfig();