feat: enhance MCP server management and system settings

- Added functionality to save MCP server configurations as templates in the MCP Manager.
- Implemented new hooks for managing system settings including Chinese response, Windows platform, and Codex CLI enhancements.
- Updated API calls to support fetching and toggling system settings.
- Introduced UI components for displaying and managing response language settings and system status.
- Enhanced error handling and notifications for server deletion and template saving actions.
- Updated localization files for new settings and descriptions in English and Chinese.
This commit is contained in:
catlog22
2026-02-07 21:17:18 +08:00
parent d29527ae16
commit 2094c1085b
52 changed files with 2061 additions and 602 deletions

View File

@@ -27,6 +27,7 @@ import {
createMcpServer,
updateMcpServer,
fetchMcpServers,
saveMcpTemplate,
type McpServer,
type McpProjectConfigType,
} from '@/lib/api';
@@ -95,6 +96,7 @@ export function McpServerDialog({
const [argsInput, setArgsInput] = useState('');
const [envInput, setEnvInput] = useState('');
const [configType, setConfigType] = useState<McpConfigType>('mcp-json');
const [saveAsTemplate, setSaveAsTemplate] = useState(false);
const projectConfigType: McpProjectConfigType = configType === 'claude-json' ? 'claude' : 'mcp';
// Initialize form from server prop (edit mode)
@@ -128,6 +130,7 @@ export function McpServerDialog({
setEnvInput('');
}
setSelectedTemplate('');
setSaveAsTemplate(false);
setErrors({});
}, [server, mode, open]);
@@ -261,6 +264,23 @@ export function McpServerDialog({
return;
}
// Save as template if checked
if (saveAsTemplate) {
try {
await saveMcpTemplate({
name: formData.name,
category: 'custom',
serverConfig: {
command: formData.command,
args: formData.args.length > 0 ? formData.args : undefined,
env: Object.keys(formData.env).length > 0 ? formData.env : undefined,
},
});
} catch {
// Template save failure should not block server creation
}
}
if (mode === 'add') {
createMutation.mutate({
server: {
@@ -501,6 +521,20 @@ export function McpServerDialog({
{formatMessage({ id: 'mcp.dialog.form.enabled' })}
</label>
</div>
{/* Save as Template */}
<div className="flex items-center gap-2">
<input
type="checkbox"
id="save-as-template"
checked={saveAsTemplate}
onChange={(e) => setSaveAsTemplate(e.target.checked)}
className="w-4 h-4"
/>
<label htmlFor="save-as-template" className="text-sm font-medium text-foreground cursor-pointer">
{formatMessage({ id: 'mcp.templates.actions.saveAsTemplate' })}
</label>
</div>
</div>
<DialogFooter>