mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-02-19 00:48:08 +01:00
72 lines
2.1 KiB
TypeScript
72 lines
2.1 KiB
TypeScript
|
|
import React from 'react';
|
||
|
|
import UninitializedMCPTool from './UninitializedMCPTool';
|
||
|
|
import UnconfiguredMCPTool from './UnconfiguredMCPTool';
|
||
|
|
import { useAgentPanelContext } from '~/Providers';
|
||
|
|
import { useLocalize } from '~/hooks';
|
||
|
|
import MCPTool from './MCPTool';
|
||
|
|
|
||
|
|
export default function MCPTools({
|
||
|
|
agentId,
|
||
|
|
mcpServerNames,
|
||
|
|
setShowMCPToolDialog,
|
||
|
|
}: {
|
||
|
|
agentId: string;
|
||
|
|
mcpServerNames?: string[];
|
||
|
|
setShowMCPToolDialog: React.Dispatch<React.SetStateAction<boolean>>;
|
||
|
|
}) {
|
||
|
|
const localize = useLocalize();
|
||
|
|
const { mcpServersMap } = useAgentPanelContext();
|
||
|
|
|
||
|
|
return (
|
||
|
|
<div className="mb-4">
|
||
|
|
<label className="text-token-text-primary mb-2 block font-medium">
|
||
|
|
{localize('com_ui_mcp_servers')}
|
||
|
|
</label>
|
||
|
|
<div>
|
||
|
|
<div className="mb-1">
|
||
|
|
{/* Render servers with selected tools */}
|
||
|
|
{mcpServerNames?.map((mcpServerName) => {
|
||
|
|
const serverInfo = mcpServersMap.get(mcpServerName);
|
||
|
|
if (!serverInfo?.isConfigured) {
|
||
|
|
return (
|
||
|
|
<UnconfiguredMCPTool
|
||
|
|
key={`${mcpServerName}-${agentId}`}
|
||
|
|
serverName={mcpServerName}
|
||
|
|
/>
|
||
|
|
);
|
||
|
|
}
|
||
|
|
if (!serverInfo) {
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (serverInfo.isConnected) {
|
||
|
|
return (
|
||
|
|
<MCPTool key={`${serverInfo.serverName}-${agentId}`} serverInfo={serverInfo} />
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
return (
|
||
|
|
<UninitializedMCPTool
|
||
|
|
key={`${serverInfo.serverName}-${agentId}`}
|
||
|
|
serverInfo={serverInfo}
|
||
|
|
/>
|
||
|
|
);
|
||
|
|
})}
|
||
|
|
</div>
|
||
|
|
<div className="mt-2">
|
||
|
|
<button
|
||
|
|
type="button"
|
||
|
|
onClick={() => setShowMCPToolDialog(true)}
|
||
|
|
className="btn btn-neutral border-token-border-light relative h-9 w-full rounded-lg font-medium"
|
||
|
|
aria-haspopup="dialog"
|
||
|
|
>
|
||
|
|
<div className="flex w-full items-center justify-center gap-2">
|
||
|
|
{localize('com_assistants_add_mcp_server_tools')}
|
||
|
|
</div>
|
||
|
|
</button>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
);
|
||
|
|
}
|