import React, { useState, useCallback } from 'react'; import { Button } from '@librechat/client'; import { RefreshCw, Link } from 'lucide-react'; import { useLocalize, useMCPServerInitialization } from '~/hooks'; interface ServerInitializationSectionProps { serverName: string; requiresOAuth: boolean; } export default function ServerInitializationSection({ serverName, requiresOAuth, }: ServerInitializationSectionProps) { const localize = useLocalize(); const [oauthUrl, setOauthUrl] = useState(null); // Use the shared initialization hook const { initializeServer, isLoading, connectionStatus, cancelOAuthFlow, isCancellable } = useMCPServerInitialization({ onOAuthStarted: (name, url) => { // Store the OAuth URL locally for display setOauthUrl(url); }, onSuccess: () => { // Clear OAuth URL on success setOauthUrl(null); }, }); const serverStatus = connectionStatus[serverName]; const isConnected = serverStatus?.connectionState === 'connected'; const canCancel = isCancellable(serverName); const handleInitializeClick = useCallback(() => { setOauthUrl(null); initializeServer(serverName); }, [initializeServer, serverName]); const handleCancelClick = useCallback(() => { setOauthUrl(null); cancelOAuthFlow(serverName); }, [cancelOAuthFlow, serverName]); // Show subtle reinitialize option if connected if (isConnected) { return (
); } return (
{requiresOAuth ? localize('com_ui_mcp_not_authenticated', { 0: serverName }) : localize('com_ui_mcp_not_initialized', { 0: serverName })}
{/* Only show authenticate button when OAuth URL is not present */} {!oauthUrl && ( )}
{/* OAuth URL display */} {oauthUrl && (
{localize('com_ui_auth_url')}

{localize('com_ui_oauth_flow_desc')}

)}
); }