-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Expand file tree
/
Copy pathMcpExtensionToolLoader.tsx
More file actions
61 lines (55 loc) · 1.88 KB
/
Copy pathMcpExtensionToolLoader.tsx
File metadata and controls
61 lines (55 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import { ComponentType } from 'react'
import { MCPTool, MCPToolComponentProps } from '@janhq/core'
import { useToolAvailable } from '@/hooks/useToolAvailable'
import { useThreads } from '@/hooks/useThreads'
interface McpExtensionToolLoaderProps {
tools: MCPTool[]
hasActiveMCPServers: boolean
selectedModelHasTools: boolean
initialMessage?: boolean
MCPToolComponent?: ComponentType<MCPToolComponentProps> | null
}
export const McpExtensionToolLoader = ({
tools,
hasActiveMCPServers,
selectedModelHasTools,
initialMessage,
MCPToolComponent,
}: McpExtensionToolLoaderProps) => {
// Get tool management hooks
const { isToolDisabled, setToolDisabledForThread, setDefaultDisabledTools, getDefaultDisabledTools } = useToolAvailable()
const { getCurrentThread } = useThreads()
const currentThread = getCurrentThread()
// Handle tool toggle for custom component
const handleToolToggle = (toolName: string, enabled: boolean) => {
if (initialMessage) {
const currentDefaults = getDefaultDisabledTools()
if (enabled) {
setDefaultDisabledTools(currentDefaults.filter((name) => name !== toolName))
} else {
setDefaultDisabledTools([...currentDefaults, toolName])
}
} else if (currentThread?.id) {
setToolDisabledForThread(currentThread.id, toolName, enabled)
}
}
const isToolEnabled = (toolName: string): boolean => {
if (initialMessage) {
return !getDefaultDisabledTools().includes(toolName)
} else if (currentThread?.id) {
return !isToolDisabled(currentThread.id, toolName)
}
return false
}
// Only render if we have the custom MCP component and conditions are met
if (!selectedModelHasTools || !hasActiveMCPServers || !MCPToolComponent) {
return null
}
return (
<MCPToolComponent
tools={tools}
isToolEnabled={isToolEnabled}
onToolToggle={handleToolToggle}
/>
)
}