// MCP tab with server management and connection functionality import { useState } from 'react'; import { useMCP } from '@/contexts/MCPContext'; import { MCPMessageMonitor } from './MCPMessageMonitor'; export function MCPTab() { const { connections, addMcpServer, removeMcpServer, reconnectServer, isLoading } = useMCP(); const [showAddForm, setShowAddForm] = useState(false); const [newServerName, setNewServerName] = useState(''); const [newServerUrl, setNewServerUrl] = useState(''); // Collapsible section states const [showSummary, setShowSummary] = useState(true); const [showAddServers, setShowAddServers] = useState(true); const [showServerList, setShowServerList] = useState(true); const handleAddExampleServer = async () => { try { await addMcpServer({ name: 'Example Server', url: 'https://example-server.modelcontextprotocol.io/sse', }); } catch (error) { console.error('Failed to add example server:', error); } }; const handleAddCustomServer = async (e: React.FormEvent) => { e.preventDefault(); if (!newServerName.trim() || !newServerUrl.trim()) return; try { await addMcpServer({ name: newServerName, url: newServerUrl, }); // Reset form setNewServerName(''); setNewServerUrl(''); setShowAddForm(false); } catch (error) { console.error('Failed to add custom server:', error); } }; const getStatusColor = (status: string) => { switch (status) { case 'connected': return 'text-green-600 dark:text-green-400'; case 'connecting': return 'text-yellow-600 dark:text-yellow-400'; case 'failed': return 'text-red-600 dark:text-red-400'; default: return 'text-gray-600 dark:text-gray-400'; } }; const getStatusIcon = (status: string) => { switch (status) { case 'connected': return '🟢'; case 'connecting': return '🟡'; case 'failed': return '🔴'; default: return '⚪'; } }; const connectedServers = connections.filter(conn => conn.status === 'connected'); const allTools = connections.flatMap(conn => conn.tools); return (
{/* Summary */}
{showSummary && (

{connectedServers.length} servers connected

{allTools.length} tools available

)}
{/* Add Servers Section */}
{showAddServers && (
{/* Example Server Button */} {/* Custom Server Form Toggle */} {/* Custom Server Form */} {showAddForm && (
setNewServerName(e.target.value)} placeholder="My MCP Server" className="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500 focus:border-blue-500" required />
setNewServerUrl(e.target.value)} placeholder="https://your-server.com/sse" className="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500 focus:border-blue-500" required />
)}
)}
{/* Server List */}
{showServerList && (
{connections.length === 0 ? (

No MCP servers configured. Add a server above to get started.

) : (
{connections.map((connection) => (
{getStatusIcon(connection.status)}

{connection.name}

{connection.url === 'local' && ( In-Memory )}

{connection.status}

{connection.error && (

{connection.error}

)}

{connection.url}

{(connection.status === 'failed' || connection.status === 'disconnected') && ( )}
{connection.tools.length > 0 && (

Tools ({connection.tools.length}):

{connection.tools.slice(0, 3).map((tool, index) => ( {tool.function.name.split('__').pop()} ))} {connection.tools.length > 3 && ( +{connection.tools.length - 3} more )}
)}
))}
)}
)}
{/* Message Monitor */}
); }