- Separate MCP server metadata from connection spec for cleaner architecture
- Add comprehensive server entry fields: name, description, tags, homepage, docs
- Remove legacy format compatibility logic from extract_server_spec
- Implement data validation and filtering in get_servers_snapshot_for
- Add strict id consistency check in upsert_in_config_for
- Enhance import logic with defensive programming for corrupted data
- Simplify frontend by removing normalization logic (moved to backend)
- Improve error messages with contextual information
- Add comprehensive i18n support for new metadata fields
- Move MCP presets into Add modal, no auto-seeding into list
- Replace env-required presets with context7 (no env needed)
- Remove requiresEnv checks/prompts from list and form
- Keep Docs button; maintain clean list UI
- Remove sample presets from while preserving seeding/display logic
- Add inline notes for future preset/hidden strategy and per-client (claude/codex) split
- Make preset seeding a no-op with empty list; no behavior change elsewhere
- Verified
> cc-switch@3.4.0 typecheck /Users/jasonyoung/Code/cc-switch
> tsc --noEmit passes; UI reads/writes continue to work
- Show not-installed MCP presets directly in the list, consistent with existing UI (no modal)
- Toggle now supports enabling presets by writing to ~/.claude.json (mcpServers) and refreshing list
- Keep installed MCP entries unchanged (edit/delete/toggle)
fix(mcp): robust error handling and pre-submit validation
- Use extractErrorMessage in MCP panel and form to surface backend details
- Prevent pasting full config (with mcpServers) into single-server JSON field
- Add required-field checks: stdio requires non-empty command; http requires non-empty url
i18n: add messages for single-server validation and preset labels
chore: add data-only MCP presets file (no new dependencies)