import { useState } from 'react';
import { Button } from '../ui/button';
import { Input } from '../ui/input';
import { Badge } from '../ui/badge';
import { Server, Plus, Edit3, Trash2, Terminal, Globe, Zap, X } from 'lucide-react';
import { useTranslation } from 'react-i18next';
const getTransportIcon = (type) => {
switch (type) {
case 'stdio': return ;
case 'sse': return ;
case 'http': return ;
default: return ;
}
};
// Claude MCP Servers
function ClaudeMcpServers({
servers,
onAdd,
onEdit,
onDelete,
onTest,
onDiscoverTools,
testResults,
serverTools,
toolsLoading,
}) {
const { t } = useTranslation('settings');
return (
{t('mcpServers.title')}
{t('mcpServers.description.claude')}
{servers.map(server => (
{getTransportIcon(server.type)}
{server.name}
{server.type}
{server.scope === 'local' ? t('mcpServers.scope.local') : server.scope === 'user' ? t('mcpServers.scope.user') : server.scope}
{server.type === 'stdio' && server.config?.command && (
{t('mcpServers.config.command')}: {server.config.command}
)}
{(server.type === 'sse' || server.type === 'http') && server.config?.url && (
{t('mcpServers.config.url')}: {server.config.url}
)}
{server.config?.args && server.config.args.length > 0 && (
{t('mcpServers.config.args')}: {server.config.args.join(' ')}
)}
{/* Test Results */}
{testResults?.[server.id] && (
{testResults[server.id].message}
)}
{/* Tools Discovery Results */}
{serverTools?.[server.id] && serverTools[server.id].tools?.length > 0 && (
{t('mcpServers.tools.title')} {t('mcpServers.tools.count', { count: serverTools[server.id].tools.length })}
{serverTools[server.id].tools.slice(0, 5).map((tool, i) => (
{tool.name}
))}
{serverTools[server.id].tools.length > 5 && (
{t('mcpServers.tools.more', { count: serverTools[server.id].tools.length - 5 })}
)}
)}
))}
{servers.length === 0 && (
{t('mcpServers.empty')}
)}
);
}
// Cursor MCP Servers
function CursorMcpServers({ servers, onAdd, onEdit, onDelete }) {
const { t } = useTranslation('settings');
return (
{t('mcpServers.title')}
{t('mcpServers.description.cursor')}
{servers.map(server => (
{server.name}
stdio
{server.config?.command && (
{t('mcpServers.config.command')}: {server.config.command}
)}
))}
{servers.length === 0 && (
{t('mcpServers.empty')}
)}
);
}
// Codex MCP Servers
function CodexMcpServers({ servers, onAdd, onEdit, onDelete }) {
const { t } = useTranslation('settings');
return (
{t('mcpServers.title')}
{t('mcpServers.description.codex')}
{servers.map(server => (
{server.name}
stdio
{server.config?.command && (
{t('mcpServers.config.command')}: {server.config.command}
)}
{server.config?.args && server.config.args.length > 0 && (
{t('mcpServers.config.args')}: {server.config.args.join(' ')}
)}
{server.config?.env && Object.keys(server.config.env).length > 0 && (
{t('mcpServers.config.environment')}: {Object.entries(server.config.env).map(([k, v]) => `${k}=${v}`).join(', ')}
)}
))}
{servers.length === 0 && (
{t('mcpServers.empty')}
)}
{/* Help Section */}
{t('mcpServers.help.title')}
{t('mcpServers.help.description')}
);
}
// Main component
export default function McpServersContent({ agent, ...props }) {
if (agent === 'claude') {
return ;
}
if (agent === 'cursor') {
return ;
}
if (agent === 'codex') {
return ;
}
return null;
}