// 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 && (
)}
)}
{/* 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 */}
);
}