import { FolderOpen, Globe, X } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import { Button, Input } from '../../../../shared/view/ui'; import { MCP_PROVIDER_NAMES, MCP_SUPPORTED_SCOPES, MCP_SUPPORTED_TRANSPORTS, MCP_SUPPORTS_WORKING_DIRECTORY, } from '../../constants'; import { useMcpServerForm } from '../../hooks/useMcpServerForm'; import { formatKeyValueLines, parseKeyValueLines, parseListLines } from '../../utils/mcpFormatting'; import type { McpFormState, McpProject, McpProvider, McpScope, ProviderMcpServer } from '../../types'; type McpServerFormModalProps = { provider: McpProvider; isOpen: boolean; editingServer: ProviderMcpServer | null; currentProjects: McpProject[]; onClose: () => void; onSubmit: (formData: McpFormState, editingServer: ProviderMcpServer | null) => Promise; }; const getScopeLabel = (scope: McpScope): string => { if (scope === 'user') { return 'User (Global)'; } if (scope === 'local') { return 'Claude Local'; } return 'Project'; }; const getScopeDescription = (scope: McpScope): string => { if (scope === 'user') { return 'Available across all projects on your machine'; } if (scope === 'local') { return 'Stored in Claude user settings for the selected project'; } return 'Stored in the selected project workspace'; }; export default function McpServerFormModal({ provider, isOpen, editingServer, currentProjects, onClose, onSubmit, }: McpServerFormModalProps) { const { t } = useTranslation('settings'); const { formData, projectOptions, isEditing, isSubmitting, jsonValidationError, canSubmit, updateForm, updateScope, updateTransport, updateJsonInput, handleSubmit, } = useMcpServerForm({ provider, isOpen, editingServer, currentProjects, onSubmit, }); if (!isOpen) { return null; } const providerName = MCP_PROVIDER_NAMES[provider]; const showProjectSelector = formData.scope !== 'user'; const supportsHttpHeaders = formData.transport === 'http' || formData.transport === 'sse'; const supportsWorkingDirectory = MCP_SUPPORTS_WORKING_DIRECTORY[provider]; return (

{isEditing ? t('mcpForm.title.edit') : t('mcpForm.title.add')}

{!isEditing && (
)} {isEditing && (
{formData.scope === 'user' ? : } {getScopeLabel(formData.scope)} {formData.workspacePath && ( - {formData.workspacePath} )}

{t('mcpForm.scope.cannotChange')}

)} {!isEditing && (
{MCP_SUPPORTED_SCOPES[provider].map((scope) => ( ))}

{getScopeDescription(formData.scope)}

{showProjectSelector && (
{formData.workspacePath && (

{t('mcpForm.projectPath', { path: formData.workspacePath })}

)}
)}
)}
updateForm('name', event.target.value)} placeholder={t('mcpForm.placeholders.serverName')} required />
{formData.importMode === 'form' && (
)}
{formData.importMode === 'json' && (