import React, { useState, useEffect } from "react"; import { motion, AnimatePresence } from "framer-motion"; import { ArrowLeft, Network, Plus, Download, AlertCircle, Loader2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs"; import { Card } from "@/components/ui/card"; import { Toast, ToastContainer } from "@/components/ui/toast"; import { api, type MCPServer } from "@/lib/api"; import { MCPServerList } from "./MCPServerList"; import { MCPAddServer } from "./MCPAddServer"; import { MCPImportExport } from "./MCPImportExport"; interface MCPManagerProps { /** * Callback to go back to the main view */ onBack: () => void; /** * Optional className for styling */ className?: string; } /** * Main component for managing MCP (Model Context Protocol) servers * Provides a comprehensive UI for adding, configuring, and managing MCP servers */ export const MCPManager: React.FC = ({ onBack, className, }) => { const [activeTab, setActiveTab] = useState("servers"); const [servers, setServers] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [toast, setToast] = useState<{ message: string; type: "success" | "error" } | null>(null); // Load servers on mount useEffect(() => { loadServers(); }, []); /** * Loads all MCP servers */ const loadServers = async () => { try { setLoading(true); setError(null); console.log("MCPManager: Loading servers..."); const serverList = await api.mcpList(); console.log("MCPManager: Received server list:", serverList); console.log("MCPManager: Server count:", serverList.length); setServers(serverList); } catch (err) { console.error("MCPManager: Failed to load MCP servers:", err); setError("Failed to load MCP servers. Make sure Claude Code is installed."); } finally { setLoading(false); } }; /** * Handles server added event */ const handleServerAdded = () => { loadServers(); setToast({ message: "MCP server added successfully!", type: "success" }); setActiveTab("servers"); }; /** * Handles server removed event */ const handleServerRemoved = (name: string) => { setServers(prev => prev.filter(s => s.name !== name)); setToast({ message: `Server "${name}" removed successfully!`, type: "success" }); }; /** * Handles import completed event */ const handleImportCompleted = (imported: number, failed: number) => { loadServers(); if (failed === 0) { setToast({ message: `Successfully imported ${imported} server${imported > 1 ? 's' : ''}!`, type: "success" }); } else { setToast({ message: `Imported ${imported} server${imported > 1 ? 's' : ''}, ${failed} failed`, type: "error" }); } }; return (
{/* Header */}

MCP Servers

Manage Model Context Protocol servers

{/* Error Display */} {error && ( {error} )} {/* Main Content */} {loading ? (
) : (
Servers Add Server Import/Export {/* Servers Tab */} {/* Add Server Tab */} setToast({ message, type: "error" })} /> {/* Import/Export Tab */} setToast({ message, type: "error" })} />
)}
{/* Toast Notifications */} {toast && ( setToast(null)} /> )}
); };