diff --git a/client/src/components/SidePanel/Agents/MCPToolItem.tsx b/client/src/components/SidePanel/Agents/MCPToolItem.tsx
index b82fc11797..c2704956a8 100644
--- a/client/src/components/SidePanel/Agents/MCPToolItem.tsx
+++ b/client/src/components/SidePanel/Agents/MCPToolItem.tsx
@@ -1,5 +1,5 @@
import { useState } from 'react';
-import { Check, Clock, Code2, Info, Zap } from 'lucide-react';
+import { Check, Clock, Code2, Captions, Info, Zap } from 'lucide-react';
import type { AgentToolType } from 'librechat-data-provider';
import OptionToggle from './OptionToggle';
import { useLocalize } from '~/hooks';
@@ -11,13 +11,19 @@ interface MCPToolItemProps {
isDeferred: boolean;
isProgrammatic: boolean;
isBackground: boolean;
+ isIntent: boolean;
+ /** Intent labels never reach a programmatic-only tool (no card renders for
+ * calls made from code), so the toggle is shown inert with an explanation. */
+ intentDisabled: boolean;
deferredToolsEnabled: boolean;
programmaticToolsEnabled: boolean;
backgroundToolsEnabled: boolean;
+ toolIntentsEnabled: boolean;
onToggleSelect: () => void;
onToggleDefer: () => void;
onToggleProgrammatic: () => void;
onToggleBackground: () => void;
+ onToggleIntent: () => void;
}
const iconButton =
@@ -33,9 +39,13 @@ export default function MCPToolItem({
onToggleProgrammatic,
isBackground,
onToggleBackground,
+ isIntent,
+ intentDisabled,
+ onToggleIntent,
deferredToolsEnabled,
programmaticToolsEnabled,
backgroundToolsEnabled,
+ toolIntentsEnabled,
}: MCPToolItemProps) {
const localize = useLocalize();
const [expanded, setExpanded] = useState(false);
@@ -100,6 +110,19 @@ export default function MCPToolItem({
onToggle={onToggleBackground}
/>
)}
+ {toolIntentsEnabled && (
+
+ )}