فهرست منبع

feat: Add Refresh MCP Servers capability, fix state changes in MCP server management UI view (#4267)

* docs: update contributors list [skip ci]

* add refresh all mcp button & supporting logic

* fully working, clean up debug

* begin cleanup

* console debug logging cleanup

* more logging

* Revert "Update contributors list"

* cleanup

* add missing translations

* global and project level i18n strings

* refactor: move translations

* fix: improve MCP settings buttons layout for responsive design

- Add flexWrap to button container to allow wrapping on smaller screens
- Change buttons from fixed flex:1 to flex: 1 1 auto with minWidth
- Ensures buttons maintain minimum readable width of 120px
- Prevents button text from being truncated on narrow viewports

* fix: Add missing vscode mock method and execa mock for McpHub tests

- Added createTextEditorDecorationType to vscode mock in McpHub.test.ts
- Created execa mock to handle ESM module import issues
- Fixes test failure that was exposed by PR #4267's module loading changes

* fix: watch changes on project mcp settings file

---------

Co-authored-by: taylorwilsdon <[email protected]>
Co-authored-by: Daniel Riccio <[email protected]>
Co-authored-by: Matt Rubens <[email protected]>
Taylor Wilsdon 6 ماه پیش
والد
کامیت
3f54efca2d
58فایلهای تغییر یافته به همراه730 افزوده شده و 268 حذف شده
  1. 29 0
      src/__mocks__/execa.js
  2. 8 1
      src/core/webview/webviewMessageHandler.ts
  3. 0 11
      src/i18n/locales/ca/common.json
  4. 21 0
      src/i18n/locales/ca/mcp.json
  5. 0 11
      src/i18n/locales/de/common.json
  6. 21 0
      src/i18n/locales/de/mcp.json
  7. 0 11
      src/i18n/locales/en/common.json
  8. 21 0
      src/i18n/locales/en/mcp.json
  9. 0 11
      src/i18n/locales/es/common.json
  10. 21 0
      src/i18n/locales/es/mcp.json
  11. 0 11
      src/i18n/locales/fr/common.json
  12. 22 0
      src/i18n/locales/fr/mcp.json
  13. 1 12
      src/i18n/locales/hi/common.json
  14. 22 0
      src/i18n/locales/hi/mcp.json
  15. 0 11
      src/i18n/locales/it/common.json
  16. 22 0
      src/i18n/locales/it/mcp.json
  17. 0 11
      src/i18n/locales/ja/common.json
  18. 22 0
      src/i18n/locales/ja/mcp.json
  19. 0 11
      src/i18n/locales/ko/common.json
  20. 22 0
      src/i18n/locales/ko/mcp.json
  21. 0 11
      src/i18n/locales/nl/common.json
  22. 22 0
      src/i18n/locales/nl/mcp.json
  23. 0 11
      src/i18n/locales/pl/common.json
  24. 22 0
      src/i18n/locales/pl/mcp.json
  25. 0 11
      src/i18n/locales/pt-BR/common.json
  26. 22 0
      src/i18n/locales/pt-BR/mcp.json
  27. 0 11
      src/i18n/locales/ru/common.json
  28. 22 0
      src/i18n/locales/ru/mcp.json
  29. 0 11
      src/i18n/locales/tr/common.json
  30. 22 0
      src/i18n/locales/tr/mcp.json
  31. 0 11
      src/i18n/locales/vi/common.json
  32. 22 0
      src/i18n/locales/vi/mcp.json
  33. 0 11
      src/i18n/locales/zh-CN/common.json
  34. 22 0
      src/i18n/locales/zh-CN/mcp.json
  35. 0 11
      src/i18n/locales/zh-TW/common.json
  36. 22 0
      src/i18n/locales/zh-TW/mcp.json
  37. 260 41
      src/services/mcp/McpHub.ts
  38. 3 0
      src/services/mcp/__tests__/McpHub.test.ts
  39. 1 0
      src/shared/WebviewMessage.ts
  40. 19 3
      webview-ui/src/components/mcp/McpView.tsx
  41. 6 2
      webview-ui/src/context/ExtensionStateContext.tsx
  42. 2 2
      webview-ui/src/i18n/locales/ca/mcp.json
  43. 2 2
      webview-ui/src/i18n/locales/de/mcp.json
  44. 1 1
      webview-ui/src/i18n/locales/en/mcp.json
  45. 2 2
      webview-ui/src/i18n/locales/es/mcp.json
  46. 2 2
      webview-ui/src/i18n/locales/fr/mcp.json
  47. 2 2
      webview-ui/src/i18n/locales/hi/mcp.json
  48. 2 2
      webview-ui/src/i18n/locales/it/mcp.json
  49. 2 2
      webview-ui/src/i18n/locales/ja/mcp.json
  50. 2 2
      webview-ui/src/i18n/locales/ko/mcp.json
  51. 2 2
      webview-ui/src/i18n/locales/nl/mcp.json
  52. 2 2
      webview-ui/src/i18n/locales/pl/mcp.json
  53. 2 2
      webview-ui/src/i18n/locales/pt-BR/mcp.json
  54. 2 2
      webview-ui/src/i18n/locales/ru/mcp.json
  55. 2 2
      webview-ui/src/i18n/locales/tr/mcp.json
  56. 2 2
      webview-ui/src/i18n/locales/vi/mcp.json
  57. 2 2
      webview-ui/src/i18n/locales/zh-CN/mcp.json
  58. 2 2
      webview-ui/src/i18n/locales/zh-TW/mcp.json

+ 29 - 0
src/__mocks__/execa.js

@@ -0,0 +1,29 @@
+const execa = jest.fn().mockResolvedValue({
+	stdout: "",
+	stderr: "",
+	exitCode: 0,
+	failed: false,
+	killed: false,
+	signal: null,
+	timedOut: false,
+})
+
+class ExecaError extends Error {
+	constructor(message) {
+		super(message)
+		this.name = "ExecaError"
+		this.exitCode = 1
+		this.stdout = ""
+		this.stderr = message
+		this.failed = true
+		this.timedOut = false
+		this.isCanceled = false
+		this.killed = false
+		this.signal = null
+	}
+}
+
+module.exports = {
+	execa,
+	ExecaError,
+}

+ 8 - 1
src/core/webview/webviewMessageHandler.ts

@@ -505,7 +505,7 @@ export const webviewMessageHandler = async (provider: ClineProvider, message: We
 
 				await openFile(mcpPath)
 			} catch (error) {
-				vscode.window.showErrorMessage(t("common:errors.create_mcp_json", { error: `${error}` }))
+				vscode.window.showErrorMessage(t("mcp:errors.create_json", { error: `${error}` }))
 			}
 
 			break
@@ -578,6 +578,13 @@ export const webviewMessageHandler = async (provider: ClineProvider, message: We
 			await updateGlobalState("enableMcpServerCreation", message.bool ?? true)
 			await provider.postStateToWebview()
 			break
+		case "refreshAllMcpServers": {
+			const mcpHub = provider.getMcpHub()
+			if (mcpHub) {
+				await mcpHub.refreshAllConnections()
+			}
+			break
+		}
 		// playSound handler removed - now handled directly in the webview
 		case "soundEnabled":
 			const soundEnabled = message.bool ?? true

+ 0 - 11
src/i18n/locales/ca/common.json

@@ -27,11 +27,6 @@
 		"this_and_subsequent": "Aquest i tots els missatges posteriors"
 	},
 	"errors": {
-		"invalid_mcp_config": "Format de configuració MCP del projecte no vàlid",
-		"invalid_mcp_settings_format": "Format JSON de configuració MCP no vàlid. Si us plau, assegura't que la teva configuració segueix el format JSON correcte.",
-		"invalid_mcp_settings_syntax": "Format JSON de configuració MCP no vàlid. Si us plau, comprova si hi ha errors de sintaxi al teu fitxer de configuració.",
-		"invalid_mcp_settings_validation": "Format de configuració MCP no vàlid: {{errorMessages}}",
-		"failed_initialize_project_mcp": "Ha fallat la inicialització del servidor MCP del projecte: {{error}}",
 		"invalid_data_uri": "Format d'URI de dades no vàlid",
 		"checkpoint_timeout": "S'ha esgotat el temps en intentar restaurar el punt de control.",
 		"checkpoint_failed": "Ha fallat la restauració del punt de control.",
@@ -48,8 +43,6 @@
 		"delete_api_config": "Ha fallat l'eliminació de la configuració de l'API",
 		"list_api_config": "Ha fallat l'obtenció de la llista de configuracions de l'API",
 		"update_server_timeout": "Ha fallat l'actualització del temps d'espera del servidor",
-		"failed_update_project_mcp": "Ha fallat l'actualització dels servidors MCP del projecte",
-		"create_mcp_json": "Ha fallat la creació o obertura de .roo/mcp.json: {{error}}",
 		"hmr_not_running": "El servidor de desenvolupament local no està executant-se, l'HMR no funcionarà. Si us plau, executa 'npm run dev' abans de llançar l'extensió per habilitar l'HMR.",
 		"retrieve_current_mode": "Error en recuperar el mode actual de l'estat.",
 		"failed_delete_repo": "Ha fallat l'eliminació del repositori o branca associada: {{error}}",
@@ -75,10 +68,6 @@
 		"no_changes": "No s'han trobat canvis.",
 		"clipboard_copy": "Missatge del sistema copiat correctament al portapapers",
 		"history_cleanup": "S'han netejat {{count}} tasques amb fitxers que falten de l'historial.",
-		"mcp_server_restarting": "Reiniciant el servidor MCP {{serverName}}...",
-		"mcp_server_connected": "Servidor MCP {{serverName}} connectat",
-		"mcp_server_deleted": "Servidor MCP eliminat: {{serverName}}",
-		"mcp_server_not_found": "Servidor \"{{serverName}}\" no trobat a la configuració",
 		"custom_storage_path_set": "Ruta d'emmagatzematge personalitzada establerta: {{path}}",
 		"default_storage_path": "S'ha reprès l'ús de la ruta d'emmagatzematge predeterminada",
 		"settings_imported": "Configuració importada correctament.",

+ 21 - 0
src/i18n/locales/ca/mcp.json

@@ -0,0 +1,21 @@
+{
+	"errors": {
+		"invalid_settings_format": "Format JSON de configuració MCP no vàlid. Si us plau, assegura't que la teva configuració segueix el format JSON correcte.",
+		"invalid_settings_syntax": "Format JSON de configuració MCP no vàlid. Si us plau, comprova si hi ha errors de sintaxi al teu fitxer de configuració.",
+		"invalid_settings_validation": "Format de configuració MCP no vàlid: {{errorMessages}}",
+		"create_json": "Ha fallat la creació o obertura de .roo/mcp.json: {{error}}",
+		"failed_update_project": "Ha fallat l'actualització dels servidors MCP del projecte"
+	},
+	"info": {
+		"server_restarting": "Reiniciant el servidor MCP {{serverName}}...",
+		"server_connected": "Servidor MCP {{serverName}} connectat",
+		"server_deleted": "Servidor MCP eliminat: {{serverName}}",
+		"server_not_found": "Servidor \"{{serverName}}\" no trobat a la configuració",
+		"global_servers_active": "Servidors MCP globals actius: {{mcpServers}}",
+		"project_servers_active": "Servidors MCP del projecte actius: {{mcpServers}}",
+		"already_refreshing": "Els servidors MCP ja s'estan actualitzant.",
+		"refreshing_all": "Actualitzant tots els servidors MCP...",
+		"all_refreshed": "Tots els servidors MCP han estat actualitzats.",
+		"project_config_deleted": "Fitxer de configuració MCP del projecte eliminat. Tots els servidors MCP del projecte han estat desconnectats."
+	}
+}

+ 0 - 11
src/i18n/locales/de/common.json

@@ -23,11 +23,6 @@
 		"this_and_subsequent": "Diese und alle nachfolgenden Nachrichten"
 	},
 	"errors": {
-		"invalid_mcp_config": "Ungültiges MCP-Projekt-Konfigurationsformat",
-		"invalid_mcp_settings_format": "Ungültiges MCP-Einstellungen-JSON-Format. Bitte stelle sicher, dass deine Einstellungen dem korrekten JSON-Format entsprechen.",
-		"invalid_mcp_settings_syntax": "Ungültiges MCP-Einstellungen-JSON-Format. Bitte überprüfe deine Einstellungsdatei auf Syntaxfehler.",
-		"invalid_mcp_settings_validation": "Ungültiges MCP-Einstellungen-Format: {{errorMessages}}",
-		"failed_initialize_project_mcp": "Fehler beim Initialisieren des Projekt-MCP-Servers: {{error}}",
 		"invalid_data_uri": "Ungültiges Daten-URI-Format",
 		"checkpoint_timeout": "Zeitüberschreitung beim Versuch, den Checkpoint wiederherzustellen.",
 		"checkpoint_failed": "Fehler beim Wiederherstellen des Checkpoints.",
@@ -44,8 +39,6 @@
 		"delete_api_config": "Fehler beim Löschen der API-Konfiguration",
 		"list_api_config": "Fehler beim Abrufen der API-Konfigurationsliste",
 		"update_server_timeout": "Fehler beim Aktualisieren des Server-Timeouts",
-		"failed_update_project_mcp": "Fehler beim Aktualisieren der Projekt-MCP-Server",
-		"create_mcp_json": "Fehler beim Erstellen oder Öffnen von .roo/mcp.json: {{error}}",
 		"hmr_not_running": "Der lokale Entwicklungsserver läuft nicht, HMR wird nicht funktionieren. Bitte führen Sie 'npm run dev' vor dem Start der Erweiterung aus, um HMR zu aktivieren.",
 		"retrieve_current_mode": "Fehler beim Abrufen des aktuellen Modus aus dem Zustand.",
 		"failed_delete_repo": "Fehler beim Löschen des zugehörigen Shadow-Repositorys oder -Zweigs: {{error}}",
@@ -71,10 +64,6 @@
 		"no_changes": "Keine Änderungen gefunden.",
 		"clipboard_copy": "Systemnachricht erfolgreich in die Zwischenablage kopiert",
 		"history_cleanup": "{{count}} Aufgabe(n) mit fehlenden Dateien aus dem Verlauf bereinigt.",
-		"mcp_server_restarting": "MCP-Server {{serverName}} wird neu gestartet...",
-		"mcp_server_connected": "MCP-Server {{serverName}} verbunden",
-		"mcp_server_deleted": "MCP-Server gelöscht: {{serverName}}",
-		"mcp_server_not_found": "Server \"{{serverName}}\" nicht in der Konfiguration gefunden",
 		"custom_storage_path_set": "Benutzerdefinierter Speicherpfad festgelegt: {{path}}",
 		"default_storage_path": "Auf Standardspeicherpfad zurückgesetzt",
 		"settings_imported": "Einstellungen erfolgreich importiert.",

+ 21 - 0
src/i18n/locales/de/mcp.json

@@ -0,0 +1,21 @@
+{
+	"errors": {
+		"invalid_settings_format": "Ungültiges MCP-Einstellungen-JSON-Format. Bitte stelle sicher, dass deine Einstellungen dem korrekten JSON-Format entsprechen.",
+		"invalid_settings_syntax": "Ungültiges MCP-Einstellungen-JSON-Format. Bitte überprüfe deine Einstellungsdatei auf Syntaxfehler.",
+		"invalid_settings_validation": "Ungültiges MCP-Einstellungen-Format: {{errorMessages}}",
+		"create_json": "Fehler beim Erstellen oder Öffnen von .roo/mcp.json: {{error}}",
+		"failed_update_project": "Fehler beim Aktualisieren der Projekt-MCP-Server"
+	},
+	"info": {
+		"server_restarting": "MCP-Server {{serverName}} wird neu gestartet...",
+		"server_connected": "MCP-Server {{serverName}} verbunden",
+		"server_deleted": "MCP-Server gelöscht: {{serverName}}",
+		"server_not_found": "Server \"{{serverName}}\" nicht in der Konfiguration gefunden",
+		"global_servers_active": "Aktive globale MCP-Server: {{mcpServers}}",
+		"project_servers_active": "Aktive Projekt-MCP-Server: {{mcpServers}}",
+		"already_refreshing": "MCP-Server werden bereits aktualisiert.",
+		"refreshing_all": "Alle MCP-Server werden aktualisiert...",
+		"all_refreshed": "Alle MCP-Server wurden aktualisiert.",
+		"project_config_deleted": "Projekt-MCP-Konfigurationsdatei gelöscht. Alle Projekt-MCP-Server wurden getrennt."
+	}
+}

+ 0 - 11
src/i18n/locales/en/common.json

@@ -23,11 +23,6 @@
 		"this_and_subsequent": "This and all subsequent messages"
 	},
 	"errors": {
-		"invalid_mcp_config": "Invalid project MCP configuration format",
-		"invalid_mcp_settings_format": "Invalid MCP settings JSON format. Please ensure your settings follow the correct JSON format.",
-		"invalid_mcp_settings_syntax": "Invalid MCP settings JSON format. Please check your settings file for syntax errors.",
-		"invalid_mcp_settings_validation": "Invalid MCP settings format: {{errorMessages}}",
-		"failed_initialize_project_mcp": "Failed to initialize project MCP server: {{error}}",
 		"invalid_data_uri": "Invalid data URI format",
 		"checkpoint_timeout": "Timed out when attempting to restore checkpoint.",
 		"checkpoint_failed": "Failed to restore checkpoint.",
@@ -44,14 +39,12 @@
 		"delete_api_config": "Failed to delete api configuration",
 		"list_api_config": "Failed to get list api configuration",
 		"update_server_timeout": "Failed to update server timeout",
-		"create_mcp_json": "Failed to create or open .roo/mcp.json: {{error}}",
 		"hmr_not_running": "Local development server is not running, HMR will not work. Please run 'npm run dev' before launching the extension to enable HMR.",
 		"retrieve_current_mode": "Error: failed to retrieve current mode from state.",
 		"failed_delete_repo": "Failed to delete associated shadow repository or branch: {{error}}",
 		"failed_remove_directory": "Failed to remove task directory: {{error}}",
 		"custom_storage_path_unusable": "Custom storage path \"{{path}}\" is unusable, will use default path",
 		"cannot_access_path": "Cannot access path {{path}}: {{error}}",
-		"failed_update_project_mcp": "Failed to update project MCP servers",
 		"settings_import_failed": "Settings import failed: {{error}}.",
 		"mistake_limit_guidance": "This may indicate a failure in the model's thought process or inability to use a tool properly, which can be mitigated with some user guidance (e.g. \"Try breaking down the task into smaller steps\").",
 		"violated_organization_allowlist": "Failed to run task: the current profile violates your organization settings",
@@ -71,10 +64,6 @@
 		"no_changes": "No changes found.",
 		"clipboard_copy": "System prompt successfully copied to clipboard",
 		"history_cleanup": "Cleaned up {{count}} task(s) with missing files from history.",
-		"mcp_server_restarting": "Restarting {{serverName}} MCP server...",
-		"mcp_server_connected": "{{serverName}} MCP server connected",
-		"mcp_server_deleted": "Deleted MCP server: {{serverName}}",
-		"mcp_server_not_found": "Server \"{{serverName}}\" not found in configuration",
 		"custom_storage_path_set": "Custom storage path set: {{path}}",
 		"default_storage_path": "Reverted to using default storage path",
 		"settings_imported": "Settings imported successfully.",

+ 21 - 0
src/i18n/locales/en/mcp.json

@@ -0,0 +1,21 @@
+{
+	"errors": {
+		"invalid_settings_format": "Invalid MCP settings JSON format. Please ensure your settings follow the correct JSON format.",
+		"invalid_settings_syntax": "Invalid MCP settings JSON format. Please check your settings file for syntax errors.",
+		"invalid_settings_validation": "Invalid MCP settings format: {{errorMessages}}",
+		"create_json": "Failed to create or open .roo/mcp.json: {{error}}",
+		"failed_update_project": "Failed to update project MCP servers"
+	},
+	"info": {
+		"server_restarting": "Restarting {{serverName}} MCP server...",
+		"server_connected": "{{serverName}} MCP server connected",
+		"server_deleted": "Deleted MCP server: {{serverName}}",
+		"server_not_found": "Server \"{{serverName}}\" not found in configuration",
+		"global_servers_active": "Active Global MCP Servers: {{mcpServers}}",
+		"project_servers_active": "Active Project MCP Servers: {{mcpServers}}",
+		"already_refreshing": "MCP servers are already refreshing.",
+		"refreshing_all": "Refreshing all MCP servers...",
+		"all_refreshed": "All MCP servers have been refreshed.",
+		"project_config_deleted": "Project MCP configuration file deleted. All project MCP servers have been disconnected."
+	}
+}

+ 0 - 11
src/i18n/locales/es/common.json

@@ -23,11 +23,6 @@
 		"this_and_subsequent": "Este y todos los mensajes posteriores"
 	},
 	"errors": {
-		"invalid_mcp_config": "Formato de configuración MCP del proyecto no válido",
-		"invalid_mcp_settings_format": "Formato JSON de la configuración MCP no válido. Asegúrate de que tus ajustes sigan el formato JSON correcto.",
-		"invalid_mcp_settings_syntax": "Formato JSON de la configuración MCP no válido. Verifica si hay errores de sintaxis en tu archivo de configuración.",
-		"invalid_mcp_settings_validation": "Formato de configuración MCP no válido: {{errorMessages}}",
-		"failed_initialize_project_mcp": "Error al inicializar el servidor MCP del proyecto: {{error}}",
 		"invalid_data_uri": "Formato de URI de datos no válido",
 		"checkpoint_timeout": "Se agotó el tiempo al intentar restaurar el punto de control.",
 		"checkpoint_failed": "Error al restaurar el punto de control.",
@@ -44,8 +39,6 @@
 		"delete_api_config": "Error al eliminar la configuración de API",
 		"list_api_config": "Error al obtener la lista de configuraciones de API",
 		"update_server_timeout": "Error al actualizar el tiempo de espera del servidor",
-		"failed_update_project_mcp": "Error al actualizar los servidores MCP del proyecto",
-		"create_mcp_json": "Error al crear o abrir .roo/mcp.json: {{error}}",
 		"hmr_not_running": "El servidor de desarrollo local no está en ejecución, HMR no funcionará. Por favor, ejecuta 'npm run dev' antes de lanzar la extensión para habilitar HMR.",
 		"retrieve_current_mode": "Error al recuperar el modo actual del estado.",
 		"failed_delete_repo": "Error al eliminar el repositorio o rama asociada: {{error}}",
@@ -71,10 +64,6 @@
 		"no_changes": "No se encontraron cambios.",
 		"clipboard_copy": "Mensaje del sistema copiado correctamente al portapapeles",
 		"history_cleanup": "Se limpiaron {{count}} tarea(s) con archivos faltantes del historial.",
-		"mcp_server_restarting": "Reiniciando el servidor MCP {{serverName}}...",
-		"mcp_server_connected": "Servidor MCP {{serverName}} conectado",
-		"mcp_server_deleted": "Servidor MCP eliminado: {{serverName}}",
-		"mcp_server_not_found": "Servidor \"{{serverName}}\" no encontrado en la configuración",
 		"custom_storage_path_set": "Ruta de almacenamiento personalizada establecida: {{path}}",
 		"default_storage_path": "Se ha vuelto a usar la ruta de almacenamiento predeterminada",
 		"settings_imported": "Configuración importada correctamente.",

+ 21 - 0
src/i18n/locales/es/mcp.json

@@ -0,0 +1,21 @@
+{
+	"errors": {
+		"invalid_settings_format": "Formato JSON de la configuración MCP no válido. Asegúrate de que tus ajustes sigan el formato JSON correcto.",
+		"invalid_settings_syntax": "Formato JSON de la configuración MCP no válido. Verifica si hay errores de sintaxis en tu archivo de configuración.",
+		"invalid_settings_validation": "Formato de configuración MCP no válido: {{errorMessages}}",
+		"create_json": "Error al crear o abrir .roo/mcp.json: {{error}}",
+		"failed_update_project": "Error al actualizar los servidores MCP del proyecto"
+	},
+	"info": {
+		"server_restarting": "Reiniciando el servidor MCP {{serverName}}...",
+		"server_connected": "Servidor MCP {{serverName}} conectado",
+		"server_deleted": "Servidor MCP eliminado: {{serverName}}",
+		"server_not_found": "Servidor \"{{serverName}}\" no encontrado en la configuración",
+		"global_servers_active": "Servidores MCP globales activos: {{mcpServers}}",
+		"project_servers_active": "Servidores MCP del proyecto activos: {{mcpServers}}",
+		"already_refreshing": "Los servidores MCP ya se están actualizando.",
+		"refreshing_all": "Actualizando todos los servidores MCP...",
+		"all_refreshed": "Todos los servidores MCP han sido actualizados.",
+		"project_config_deleted": "Archivo de configuración MCP del proyecto eliminado. Todos los servidores MCP del proyecto han sido desconectados."
+	}
+}

+ 0 - 11
src/i18n/locales/fr/common.json

@@ -23,11 +23,6 @@
 		"this_and_subsequent": "Ce message et tous les messages suivants"
 	},
 	"errors": {
-		"invalid_mcp_config": "Format de configuration MCP du projet invalide",
-		"invalid_mcp_settings_format": "Format JSON des paramètres MCP invalide. Veuillez vous assurer que vos paramètres suivent le format JSON correct.",
-		"invalid_mcp_settings_syntax": "Format JSON des paramètres MCP invalide. Veuillez vérifier le syntaxe de votre fichier de paramètres.",
-		"invalid_mcp_settings_validation": "Format de paramètres MCP invalide : {{errorMessages}}",
-		"failed_initialize_project_mcp": "Échec de l'initialisation du serveur MCP du projet : {{error}}",
 		"invalid_data_uri": "Format d'URI de données invalide",
 		"checkpoint_timeout": "Expiration du délai lors de la tentative de rétablissement du checkpoint.",
 		"checkpoint_failed": "Échec du rétablissement du checkpoint.",
@@ -44,8 +39,6 @@
 		"delete_api_config": "Erreur lors de la suppression de la configuration API",
 		"list_api_config": "Erreur lors de l'obtention de la liste des configurations API",
 		"update_server_timeout": "Erreur lors de la mise à jour du délai d'attente du serveur",
-		"failed_update_project_mcp": "Échec de la mise à jour des serveurs MCP du projet",
-		"create_mcp_json": "Échec de la création ou de l'ouverture de .roo/mcp.json : {{error}}",
 		"hmr_not_running": "Le serveur de développement local n'est pas en cours d'exécution, HMR ne fonctionnera pas. Veuillez exécuter 'npm run dev' avant de lancer l'extension pour activer l'HMR.",
 		"retrieve_current_mode": "Erreur lors de la récupération du mode actuel à partir du state.",
 		"failed_delete_repo": "Échec de la suppression du repo fantôme ou de la branche associée : {{error}}",
@@ -71,10 +64,6 @@
 		"no_changes": "Aucun changement trouvé.",
 		"clipboard_copy": "Prompt système copié dans le presse-papiers",
 		"history_cleanup": "{{count}} tâche(s) avec des fichiers introuvables ont été supprimés de l'historique.",
-		"mcp_server_restarting": "Redémarrage du serveur MCP {{serverName}}...",
-		"mcp_server_connected": "Serveur MCP {{serverName}} connecté",
-		"mcp_server_deleted": "Serveur MCP supprimé : {{serverName}}",
-		"mcp_server_not_found": "Serveur \"{{serverName}}\" introuvable dans la configuration",
 		"custom_storage_path_set": "Chemin de stockage personnalisé défini : {{path}}",
 		"default_storage_path": "Retour au chemin de stockage par défaut",
 		"settings_imported": "Paramètres importés avec succès.",

+ 22 - 0
src/i18n/locales/fr/mcp.json

@@ -0,0 +1,22 @@
+{
+	"errors": {
+		"invalid_settings_format": "Format JSON des paramètres MCP invalide. Veuillez vous assurer que vos paramètres suivent le format JSON correct.",
+		"invalid_settings_syntax": "Format JSON des paramètres MCP invalide. Veuillez vérifier le syntaxe de votre fichier de paramètres.",
+		"invalid_settings_validation": "Format de paramètres MCP invalide : {{errorMessages}}",
+
+		"create_json": "Échec de la création ou de l'ouverture de .roo/mcp.json : {{error}}",
+		"failed_update_project": "Échec de la mise à jour des serveurs MCP du projet"
+	},
+	"info": {
+		"server_restarting": "Redémarrage du serveur MCP {{serverName}}...",
+		"server_connected": "Serveur MCP {{serverName}} connecté",
+		"server_deleted": "Serveur MCP supprimé : {{serverName}}",
+		"server_not_found": "Serveur \"{{serverName}}\" introuvable dans la configuration",
+		"global_servers_active": "Serveurs MCP globaux actifs : {{mcpServers}}",
+		"project_servers_active": "Serveurs MCP de projet actifs : {{mcpServers}}",
+		"already_refreshing": "Les serveurs MCP sont déjà en cours de rafraîchissement.",
+		"refreshing_all": "Rafraîchissement de tous les serveurs MCP...",
+		"all_refreshed": "Tous les serveurs MCP ont été rafraîchis.",
+		"project_config_deleted": "Fichier de configuration MCP du projet supprimé. Tous les serveurs MCP du projet ont été déconnectés."
+	}
+}

+ 1 - 12
src/i18n/locales/hi/common.json

@@ -23,11 +23,6 @@
 		"this_and_subsequent": "यह और सभी बाद के संदेश"
 	},
 	"errors": {
-		"invalid_mcp_config": "अमान्य प्रोजेक्ट MCP कॉन्फ़िगरेशन फॉर्मेट",
-		"invalid_mcp_settings_format": "अमान्य MCP सेटिंग्स JSON फॉर्मेट। कृपया सुनिश्चित करें कि आपकी सेटिंग्स सही JSON फॉर्मेट का पालन करती हैं।",
-		"invalid_mcp_settings_syntax": "अमान्य MCP सेटिंग्स JSON फॉर्मेट। कृपया अपनी सेटिंग्स फ़ाइल में सिंटैक्स त्रुटियों की जांच करें।",
-		"invalid_mcp_settings_validation": "अमान्य MCP सेटिंग्स फॉर्मेट: {{errorMessages}}",
-		"failed_initialize_project_mcp": "प्रोजेक्ट MCP सर्वर को प्रारंभ करने में विफल: {{error}}",
 		"invalid_data_uri": "अमान्य डेटा URI फॉर्मेट",
 		"checkpoint_timeout": "चेकपॉइंट को पुनर्स्थापित करने का प्रयास करते समय टाइमआउट हो गया।",
 		"checkpoint_failed": "चेकपॉइंट पुनर्स्थापित करने में विफल।",
@@ -44,8 +39,6 @@
 		"delete_api_config": "API कॉन्फ़िगरेशन हटाने में विफल",
 		"list_api_config": "API कॉन्फ़िगरेशन की सूची प्राप्त करने में विफल",
 		"update_server_timeout": "सर्वर टाइमआउट अपडेट करने में विफल",
-		"failed_update_project_mcp": "प्रोजेक्ट MCP सर्वर अपडेट करने में विफल",
-		"create_mcp_json": ".roo/mcp.json बनाने या खोलने में विफल: {{error}}",
 		"hmr_not_running": "स्थानीय विकास सर्वर चल नहीं रहा है, HMR काम नहीं करेगा। कृपया HMR सक्षम करने के लिए एक्सटेंशन लॉन्च करने से पहले 'npm run dev' चलाएँ।",
 		"retrieve_current_mode": "स्टेट से वर्तमान मोड प्राप्त करने में त्रुटि।",
 		"failed_delete_repo": "संबंधित शैडो रिपॉजिटरी या ब्रांच हटाने में विफल: {{error}}",
@@ -71,13 +64,9 @@
 		"no_changes": "कोई परिवर्तन नहीं मिला।",
 		"clipboard_copy": "सिस्टम प्रॉम्प्ट क्लिपबोर्ड पर सफलतापूर्वक कॉपी किया गया",
 		"history_cleanup": "इतिहास से गायब फाइलों वाले {{count}} टास्क साफ किए गए।",
-		"mcp_server_restarting": "{{serverName}} MCP सर्वर पुनः प्रारंभ हो रहा है...",
-		"mcp_server_connected": "{{serverName}} MCP सर्वर कनेक्टेड",
-		"mcp_server_deleted": "MCP सर्वर हटाया गया: {{serverName}}",
-		"mcp_server_not_found": "सर्वर \"{{serverName}}\" कॉन्फ़िगरेशन में नहीं मिला",
 		"custom_storage_path_set": "कस्टम स्टोरेज पाथ सेट किया गया: {{path}}",
 		"default_storage_path": "डिफ़ॉल्ट स्टोरेज पाथ का उपयोग पुनः शुरू किया गया",
-		"settings_imported": "सेटिंग्स सफलतापूर्वक इम्पोर्ट की गईं",
+		"settings_imported": "सेटिंग्स सफलतापूर्वक इम्पोर्ट की गईं.",
 		"share_link_copied": "साझा लिंक क्लिपबोर्ड पर कॉपी किया गया"
 	},
 	"answers": {

+ 22 - 0
src/i18n/locales/hi/mcp.json

@@ -0,0 +1,22 @@
+{
+	"errors": {
+		"invalid_settings_format": "अमान्य MCP सेटिंग्स JSON फॉर्मेट। कृपया सुनिश्चित करें कि आपकी सेटिंग्स सही JSON फॉर्मेट का पालन करती हैं।",
+		"invalid_settings_syntax": "अमान्य MCP सेटिंग्स JSON फॉर्मेट। कृपया अपनी सेटिंग्स फ़ाइल में सिंटैक्स त्रुटियों की जांच करें।",
+		"invalid_settings_validation": "अमान्य MCP सेटिंग्स फॉर्मेट: {{errorMessages}}",
+
+		"create_json": ".roo/mcp.json बनाने या खोलने में विफल: {{error}}",
+		"failed_update_project": "प्रोजेक्ट MCP सर्वर अपडेट करने में विफल"
+	},
+	"info": {
+		"server_restarting": "{{serverName}} MCP सर्वर पुनः प्रारंभ हो रहा है...",
+		"server_connected": "{{serverName}} MCP सर्वर कनेक्टेड",
+		"server_deleted": "MCP सर्वर हटाया गया: {{serverName}}",
+		"server_not_found": "सर्वर \"{{serverName}}\" कॉन्फ़िगरेशन में नहीं मिला",
+		"global_servers_active": "सक्रिय वैश्विक एमसीपी सर्वर: {{mcpServers}}",
+		"project_servers_active": "सक्रिय परियोजना एमसीपी सर्वर: {{mcpServers}}",
+		"already_refreshing": "एमसीपी सर्वर पहले से ही रीफ्रेश हो रहे हैं।",
+		"refreshing_all": "सभी एमसीपी सर्वर रीफ्रेश हो रहे हैं...",
+		"all_refreshed": "सभी एमसीपी सर्वर रीफ्रेश हो गए हैं।",
+		"project_config_deleted": "प्रोजेक्ट एमसीपी कॉन्फ़िगरेशन फ़ाइल हटा दी गई है। सभी प्रोजेक्ट एमसीपी सर्वर डिस्कनेक्ट कर दिए गए हैं।"
+	}
+}

+ 0 - 11
src/i18n/locales/it/common.json

@@ -23,11 +23,6 @@
 		"this_and_subsequent": "Questo e tutti i messaggi successivi"
 	},
 	"errors": {
-		"invalid_mcp_config": "Formato di configurazione MCP del progetto non valido",
-		"invalid_mcp_settings_format": "Formato JSON delle impostazioni MCP non valido. Assicurati che le tue impostazioni seguano il formato JSON corretto.",
-		"invalid_mcp_settings_syntax": "Formato JSON delle impostazioni MCP non valido. Verifica gli errori di sintassi nel tuo file delle impostazioni.",
-		"invalid_mcp_settings_validation": "Formato delle impostazioni MCP non valido: {{errorMessages}}",
-		"failed_initialize_project_mcp": "Impossibile inizializzare il server MCP del progetto: {{error}}",
 		"invalid_data_uri": "Formato URI dati non valido",
 		"checkpoint_timeout": "Timeout durante il tentativo di ripristinare il checkpoint.",
 		"checkpoint_failed": "Impossibile ripristinare il checkpoint.",
@@ -44,8 +39,6 @@
 		"delete_api_config": "Errore durante l'eliminazione della configurazione API",
 		"list_api_config": "Errore durante l'ottenimento dell'elenco delle configurazioni API",
 		"update_server_timeout": "Errore durante l'aggiornamento del timeout del server",
-		"failed_update_project_mcp": "Errore durante l'aggiornamento dei server MCP del progetto",
-		"create_mcp_json": "Impossibile creare o aprire .roo/mcp.json: {{error}}",
 		"hmr_not_running": "Il server di sviluppo locale non è in esecuzione, l'HMR non funzionerà. Esegui 'npm run dev' prima di avviare l'estensione per abilitare l'HMR.",
 		"retrieve_current_mode": "Errore durante il recupero della modalità corrente dallo stato.",
 		"failed_delete_repo": "Impossibile eliminare il repository o il ramo associato: {{error}}",
@@ -71,10 +64,6 @@
 		"no_changes": "Nessuna modifica trovata.",
 		"clipboard_copy": "Messaggio di sistema copiato con successo negli appunti",
 		"history_cleanup": "Pulite {{count}} attività con file mancanti dalla cronologia.",
-		"mcp_server_restarting": "Riavvio del server MCP {{serverName}}...",
-		"mcp_server_connected": "Server MCP {{serverName}} connesso",
-		"mcp_server_deleted": "Server MCP eliminato: {{serverName}}",
-		"mcp_server_not_found": "Server \"{{serverName}}\" non trovato nella configurazione",
 		"custom_storage_path_set": "Percorso di archiviazione personalizzato impostato: {{path}}",
 		"default_storage_path": "Tornato al percorso di archiviazione predefinito",
 		"settings_imported": "Impostazioni importate con successo.",

+ 22 - 0
src/i18n/locales/it/mcp.json

@@ -0,0 +1,22 @@
+{
+	"errors": {
+		"invalid_settings_format": "Formato JSON delle impostazioni MCP non valido. Assicurati che le tue impostazioni seguano il formato JSON corretto.",
+		"invalid_settings_syntax": "Formato JSON delle impostazioni MCP non valido. Verifica gli errori di sintassi nel tuo file delle impostazioni.",
+		"invalid_settings_validation": "Formato delle impostazioni MCP non valido: {{errorMessages}}",
+
+		"create_json": "Impossibile creare o aprire .roo/mcp.json: {{error}}",
+		"failed_update_project": "Errore durante l'aggiornamento dei server MCP del progetto"
+	},
+	"info": {
+		"server_restarting": "Riavvio del server MCP {{serverName}}...",
+		"server_connected": "Server MCP {{serverName}} connesso",
+		"server_deleted": "Server MCP eliminato: {{serverName}}",
+		"server_not_found": "Server \"{{serverName}}\" non trovato nella configurazione",
+		"global_servers_active": "Server MCP globali attivi: {{mcpServers}}",
+		"project_servers_active": "Server MCP di progetto attivi: {{mcpServers}}",
+		"already_refreshing": "I server MCP sono già in aggiornamento.",
+		"refreshing_all": "Aggiornamento di tutti i server MCP...",
+		"all_refreshed": "Tutti i server MCP sono stati aggiornati.",
+		"project_config_deleted": "File di configurazione MCP del progetto eliminato. Tutti i server MCP del progetto sono stati disconnessi."
+	}
+}

+ 0 - 11
src/i18n/locales/ja/common.json

@@ -23,11 +23,6 @@
 		"this_and_subsequent": "これ以降のすべてのメッセージ"
 	},
 	"errors": {
-		"invalid_mcp_config": "プロジェクトMCP設定フォーマットが無効です",
-		"invalid_mcp_settings_format": "MCP設定のJSONフォーマットが無効です。設定が正しいJSONフォーマットに従っていることを確認してください。",
-		"invalid_mcp_settings_syntax": "MCP設定のJSONフォーマットが無効です。設定ファイルの構文エラーを確認してください。",
-		"invalid_mcp_settings_validation": "MCP設定フォーマットが無効です:{{errorMessages}}",
-		"failed_initialize_project_mcp": "プロジェクトMCPサーバーの初期化に失敗しました:{{error}}",
 		"invalid_data_uri": "データURIフォーマットが無効です",
 		"checkpoint_timeout": "チェックポイントの復元を試みる際にタイムアウトしました。",
 		"checkpoint_failed": "チェックポイントの復元に失敗しました。",
@@ -44,8 +39,6 @@
 		"delete_api_config": "API設定の削除に失敗しました",
 		"list_api_config": "API設定リストの取得に失敗しました",
 		"update_server_timeout": "サーバータイムアウトの更新に失敗しました",
-		"failed_update_project_mcp": "プロジェクトMCPサーバーの更新に失敗しました",
-		"create_mcp_json": ".roo/mcp.jsonの作成または開くことに失敗しました:{{error}}",
 		"hmr_not_running": "ローカル開発サーバーが実行されていないため、HMRは機能しません。HMRを有効にするには、拡張機能を起動する前に'npm run dev'を実行してください。",
 		"retrieve_current_mode": "現在のモードを状態から取得する際にエラーが発生しました。",
 		"failed_delete_repo": "関連するシャドウリポジトリまたはブランチの削除に失敗しました:{{error}}",
@@ -71,10 +64,6 @@
 		"no_changes": "変更は見つかりませんでした。",
 		"clipboard_copy": "システムメッセージがクリップボードに正常にコピーされました",
 		"history_cleanup": "履歴から不足ファイルのある{{count}}個のタスクをクリーンアップしました。",
-		"mcp_server_restarting": "MCPサーバー{{serverName}}を再起動中...",
-		"mcp_server_connected": "MCPサーバー{{serverName}}が接続されました",
-		"mcp_server_deleted": "MCPサーバーが削除されました:{{serverName}}",
-		"mcp_server_not_found": "サーバー\"{{serverName}}\"が設定内に見つかりません",
 		"custom_storage_path_set": "カスタムストレージパスが設定されました:{{path}}",
 		"default_storage_path": "デフォルトのストレージパスに戻りました",
 		"settings_imported": "設定が正常にインポートされました。",

+ 22 - 0
src/i18n/locales/ja/mcp.json

@@ -0,0 +1,22 @@
+{
+	"errors": {
+		"invalid_settings_format": "MCP設定のJSONフォーマットが無効です。設定が正しいJSONフォーマットに従っていることを確認してください。",
+		"invalid_settings_syntax": "MCP設定のJSONフォーマットが無効です。設定ファイルの構文エラーを確認してください。",
+		"invalid_settings_validation": "MCP設定フォーマットが無効です:{{errorMessages}}",
+
+		"create_json": ".roo/mcp.jsonの作成または開くことに失敗しました:{{error}}",
+		"failed_update_project": "プロジェクトMCPサーバーの更新に失敗しました"
+	},
+	"info": {
+		"server_restarting": "MCPサーバー{{serverName}}を再起動中...",
+		"server_connected": "MCPサーバー{{serverName}}が接続されました",
+		"server_deleted": "MCPサーバーが削除されました:{{serverName}}",
+		"server_not_found": "サーバー\"{{serverName}}\"が設定内に見つかりません",
+		"global_servers_active": "アクティブなグローバルMCPサーバー: {{mcpServers}}",
+		"project_servers_active": "アクティブなプロジェクトMCPサーバー: {{mcpServers}}",
+		"already_refreshing": "MCPサーバーはすでに更新中です。",
+		"refreshing_all": "すべてのMCPサーバーを更新しています...",
+		"all_refreshed": "すべてのMCPサーバーが更新されました。",
+		"project_config_deleted": "プロジェクトMCP設定ファイルが削除されました。すべてのプロジェクトMCPサーバーが切断されました。"
+	}
+}

+ 0 - 11
src/i18n/locales/ko/common.json

@@ -23,11 +23,6 @@
 		"this_and_subsequent": "이 메시지와 모든 후속 메시지"
 	},
 	"errors": {
-		"invalid_mcp_config": "잘못된 프로젝트 MCP 구성 형식",
-		"invalid_mcp_settings_format": "잘못된 MCP 설정 JSON 형식입니다. 설정이 올바른 JSON 형식을 따르는지 확인하세요.",
-		"invalid_mcp_settings_syntax": "잘못된 MCP 설정 JSON 형식입니다. 설정 파일의 구문 오류를 확인하세요.",
-		"invalid_mcp_settings_validation": "잘못된 MCP 설정 형식: {{errorMessages}}",
-		"failed_initialize_project_mcp": "프로젝트 MCP 서버 초기화 실패: {{error}}",
 		"invalid_data_uri": "잘못된 데이터 URI 형식",
 		"checkpoint_timeout": "체크포인트 복원을 시도하는 중 시간 초과되었습니다.",
 		"checkpoint_failed": "체크포인트 복원에 실패했습니다.",
@@ -44,8 +39,6 @@
 		"delete_api_config": "API 구성 삭제에 실패했습니다",
 		"list_api_config": "API 구성 목록 가져오기에 실패했습니다",
 		"update_server_timeout": "서버 타임아웃 업데이트에 실패했습니다",
-		"failed_update_project_mcp": "프로젝트 MCP 서버 업데이트에 실패했습니다",
-		"create_mcp_json": ".roo/mcp.json 생성 또는 열기 실패: {{error}}",
 		"hmr_not_running": "로컬 개발 서버가 실행되고 있지 않아 HMR이 작동하지 않습니다. HMR을 활성화하려면 확장 프로그램을 실행하기 전에 'npm run dev'를 실행하세요.",
 		"retrieve_current_mode": "상태에서 현재 모드를 검색하는 데 오류가 발생했습니다.",
 		"failed_delete_repo": "관련 shadow 저장소 또는 브랜치 삭제 실패: {{error}}",
@@ -71,10 +64,6 @@
 		"no_changes": "변경 사항이 없습니다.",
 		"clipboard_copy": "시스템 프롬프트가 클립보드에 성공적으로 복사되었습니다",
 		"history_cleanup": "이력에서 파일이 누락된 {{count}}개의 작업을 정리했습니다.",
-		"mcp_server_restarting": "{{serverName}} MCP 서버를 재시작하는 중...",
-		"mcp_server_connected": "{{serverName}} MCP 서버 연결됨",
-		"mcp_server_deleted": "MCP 서버 삭제됨: {{serverName}}",
-		"mcp_server_not_found": "구성에서 서버 \"{{serverName}}\"을(를) 찾을 수 없습니다",
 		"custom_storage_path_set": "사용자 지정 저장 경로 설정됨: {{path}}",
 		"default_storage_path": "기본 저장 경로로 되돌아갔습니다",
 		"settings_imported": "설정이 성공적으로 가져와졌습니다.",

+ 22 - 0
src/i18n/locales/ko/mcp.json

@@ -0,0 +1,22 @@
+{
+	"errors": {
+		"invalid_settings_format": "잘못된 MCP 설정 JSON 형식입니다. 설정이 올바른 JSON 형식을 따르는지 확인하세요.",
+		"invalid_settings_syntax": "잘못된 MCP 설정 JSON 형식입니다. 설정 파일의 구문 오류를 확인하세요.",
+		"invalid_settings_validation": "잘못된 MCP 설정 형식: {{errorMessages}}",
+
+		"create_json": ".roo/mcp.json 생성 또는 열기 실패: {{error}}",
+		"failed_update_project": "프로젝트 MCP 서버 업데이트에 실패했습니다"
+	},
+	"info": {
+		"server_restarting": "{{serverName}} MCP 서버를 재시작하는 중...",
+		"server_connected": "{{serverName}} MCP 서버 연결됨",
+		"server_deleted": "MCP 서버 삭제됨: {{serverName}}",
+		"server_not_found": "구성에서 서버 \"{{serverName}}\"을(를) 찾을 수 없습니다",
+		"global_servers_active": "활성 글로벌 MCP 서버: {{mcpServers}}",
+		"project_servers_active": "활성 프로젝트 MCP 서버: {{mcpServers}}",
+		"already_refreshing": "MCP 서버가 이미 새로 고쳐지고 있습니다.",
+		"refreshing_all": "모든 MCP 서버를 새로 고치는 중...",
+		"all_refreshed": "모든 MCP 서버가 새로 고쳐졌습니다.",
+		"project_config_deleted": "프로젝트 MCP 구성 파일이 삭제되었습니다. 모든 프로젝트 MCP 서버가 연결 해제되었습니다."
+	}
+}

+ 0 - 11
src/i18n/locales/nl/common.json

@@ -23,11 +23,6 @@
 		"this_and_subsequent": "Dit en alle volgende berichten"
 	},
 	"errors": {
-		"invalid_mcp_config": "Ongeldig project MCP-configuratieformaat",
-		"invalid_mcp_settings_format": "Ongeldig MCP-instellingen JSON-formaat. Zorg ervoor dat je instellingen het juiste JSON-formaat volgen.",
-		"invalid_mcp_settings_syntax": "Ongeldig MCP-instellingen JSON-formaat. Controleer je instellingenbestand op syntaxfouten.",
-		"invalid_mcp_settings_validation": "Ongeldig MCP-instellingenformaat: {{errorMessages}}",
-		"failed_initialize_project_mcp": "Initialiseren van project MCP-server mislukt: {{error}}",
 		"invalid_data_uri": "Ongeldig data-URI-formaat",
 		"checkpoint_timeout": "Time-out bij het herstellen van checkpoint.",
 		"checkpoint_failed": "Herstellen van checkpoint mislukt.",
@@ -44,14 +39,12 @@
 		"delete_api_config": "Verwijderen van API-configuratie mislukt",
 		"list_api_config": "Ophalen van lijst met API-configuraties mislukt",
 		"update_server_timeout": "Bijwerken van server-timeout mislukt",
-		"create_mcp_json": "Aanmaken of openen van .roo/mcp.json mislukt: {{error}}",
 		"hmr_not_running": "Lokale ontwikkelserver draait niet, HMR werkt niet. Voer 'npm run dev' uit voordat je de extensie start om HMR in te schakelen.",
 		"retrieve_current_mode": "Fout: ophalen van huidige modus uit status mislukt.",
 		"failed_delete_repo": "Verwijderen van gekoppelde schaduwrepository of branch mislukt: {{error}}",
 		"failed_remove_directory": "Verwijderen van taakmap mislukt: {{error}}",
 		"custom_storage_path_unusable": "Aangepast opslagpad \"{{path}}\" is onbruikbaar, standaardpad wordt gebruikt",
 		"cannot_access_path": "Kan pad {{path}} niet openen: {{error}}",
-		"failed_update_project_mcp": "Bijwerken van project MCP-servers mislukt",
 		"settings_import_failed": "Importeren van instellingen mislukt: {{error}}.",
 		"mistake_limit_guidance": "Dit kan duiden op een fout in het denkproces van het model of het onvermogen om een tool correct te gebruiken, wat kan worden verminderd met gebruikersbegeleiding (bijv. \"Probeer de taak op te delen in kleinere stappen\").",
 		"violated_organization_allowlist": "Taak uitvoeren mislukt: het huidige profiel schendt de instellingen van uw organisatie",
@@ -71,10 +64,6 @@
 		"no_changes": "Geen wijzigingen gevonden.",
 		"clipboard_copy": "Systeemprompt succesvol gekopieerd naar klembord",
 		"history_cleanup": "{{count}} taak/taken met ontbrekende bestanden uit geschiedenis verwijderd.",
-		"mcp_server_restarting": "{{serverName}} MCP-server wordt opnieuw gestart...",
-		"mcp_server_connected": "{{serverName}} MCP-server verbonden",
-		"mcp_server_deleted": "MCP-server verwijderd: {{serverName}}",
-		"mcp_server_not_found": "Server \"{{serverName}}\" niet gevonden in configuratie",
 		"custom_storage_path_set": "Aangepast opslagpad ingesteld: {{path}}",
 		"default_storage_path": "Terug naar standaard opslagpad",
 		"settings_imported": "Instellingen succesvol geïmporteerd.",

+ 22 - 0
src/i18n/locales/nl/mcp.json

@@ -0,0 +1,22 @@
+{
+	"errors": {
+		"invalid_settings_format": "Ongeldig MCP-instellingen JSON-formaat. Zorg ervoor dat je instellingen het juiste JSON-formaat volgen.",
+		"invalid_settings_syntax": "Ongeldig MCP-instellingen JSON-formaat. Controleer je instellingenbestand op syntaxfouten.",
+		"invalid_settings_validation": "Ongeldig MCP-instellingenformaat: {{errorMessages}}",
+
+		"create_json": "Aanmaken of openen van .roo/mcp.json mislukt: {{error}}",
+		"failed_update_project": "Bijwerken van project MCP-servers mislukt"
+	},
+	"info": {
+		"server_restarting": "{{serverName}} MCP-server wordt opnieuw gestart...",
+		"server_connected": "{{serverName}} MCP-server verbonden",
+		"server_deleted": "MCP-server verwijderd: {{serverName}}",
+		"server_not_found": "Server \"{{serverName}}\" niet gevonden in configuratie",
+		"global_servers_active": "Actieve globale MCP-servers: {{mcpServers}}",
+		"project_servers_active": "Actieve project MCP-servers: {{mcpServers}}",
+		"already_refreshing": "MCP-servers worden al vernieuwd.",
+		"refreshing_all": "Alle MCP-servers worden vernieuwd...",
+		"all_refreshed": "Alle MCP-servers zijn vernieuwd.",
+		"project_config_deleted": "Project MCP-configuratiebestand verwijderd. Alle project MCP-servers zijn losgekoppeld."
+	}
+}

+ 0 - 11
src/i18n/locales/pl/common.json

@@ -23,11 +23,6 @@
 		"this_and_subsequent": "Tę i wszystkie kolejne wiadomości"
 	},
 	"errors": {
-		"invalid_mcp_config": "Nieprawidłowy format konfiguracji MCP projektu",
-		"invalid_mcp_settings_format": "Nieprawidłowy format JSON ustawień MCP. Upewnij się, że Twoje ustawienia są zgodne z poprawnym formatem JSON.",
-		"invalid_mcp_settings_syntax": "Nieprawidłowy format JSON ustawień MCP. Sprawdź, czy w pliku ustawień nie ma błędów składniowych.",
-		"invalid_mcp_settings_validation": "Nieprawidłowy format ustawień MCP: {{errorMessages}}",
-		"failed_initialize_project_mcp": "Nie udało się zainicjować serwera MCP projektu: {{error}}",
 		"invalid_data_uri": "Nieprawidłowy format URI danych",
 		"checkpoint_timeout": "Upłynął limit czasu podczas próby przywrócenia punktu kontrolnego.",
 		"checkpoint_failed": "Nie udało się przywrócić punktu kontrolnego.",
@@ -44,8 +39,6 @@
 		"delete_api_config": "Nie udało się usunąć konfiguracji API",
 		"list_api_config": "Nie udało się pobrać listy konfiguracji API",
 		"update_server_timeout": "Nie udało się zaktualizować limitu czasu serwera",
-		"failed_update_project_mcp": "Nie udało się zaktualizować serwerów MCP projektu",
-		"create_mcp_json": "Nie udało się utworzyć lub otworzyć .roo/mcp.json: {{error}}",
 		"hmr_not_running": "Lokalny serwer deweloperski nie jest uruchomiony, HMR nie będzie działać. Uruchom 'npm run dev' przed uruchomieniem rozszerzenia, aby włączyć HMR.",
 		"retrieve_current_mode": "Błąd podczas pobierania bieżącego trybu ze stanu.",
 		"failed_delete_repo": "Nie udało się usunąć powiązanego repozytorium lub gałęzi pomocniczej: {{error}}",
@@ -71,10 +64,6 @@
 		"no_changes": "Nie znaleziono zmian.",
 		"clipboard_copy": "Komunikat systemowy został pomyślnie skopiowany do schowka",
 		"history_cleanup": "Wyczyszczono {{count}} zadań z brakującymi plikami z historii.",
-		"mcp_server_restarting": "Ponowne uruchamianie serwera MCP {{serverName}}...",
-		"mcp_server_connected": "Serwer MCP {{serverName}} połączony",
-		"mcp_server_deleted": "Usunięto serwer MCP: {{serverName}}",
-		"mcp_server_not_found": "Serwer \"{{serverName}}\" nie znaleziony w konfiguracji",
 		"custom_storage_path_set": "Ustawiono niestandardową ścieżkę przechowywania: {{path}}",
 		"default_storage_path": "Wznowiono używanie domyślnej ścieżki przechowywania",
 		"settings_imported": "Ustawienia zaimportowane pomyślnie.",

+ 22 - 0
src/i18n/locales/pl/mcp.json

@@ -0,0 +1,22 @@
+{
+	"errors": {
+		"invalid_settings_format": "Nieprawidłowy format JSON ustawień MCP. Upewnij się, że Twoje ustawienia są zgodne z poprawnym formatem JSON.",
+		"invalid_settings_syntax": "Nieprawidłowy format JSON ustawień MCP. Sprawdź, czy w pliku ustawień nie ma błędów składniowych.",
+		"invalid_settings_validation": "Nieprawidłowy format ustawień MCP: {{errorMessages}}",
+
+		"create_json": "Nie udało się utworzyć lub otworzyć .roo/mcp.json: {{error}}",
+		"failed_update_project": "Nie udało się zaktualizować serwerów MCP projektu"
+	},
+	"info": {
+		"server_restarting": "Ponowne uruchamianie serwera MCP {{serverName}}...",
+		"server_connected": "Serwer MCP {{serverName}} połączony",
+		"server_deleted": "Usunięto serwer MCP: {{serverName}}",
+		"server_not_found": "Serwer \"{{serverName}}\" nie znaleziony w konfiguracji",
+		"global_servers_active": "Aktywne globalne serwery MCP: {{mcpServers}}",
+		"project_servers_active": "Aktywne serwery MCP projektu: {{mcpServers}}",
+		"already_refreshing": "Serwery MCP są już odświeżane.",
+		"refreshing_all": "Odświeżanie wszystkich serwerów MCP...",
+		"all_refreshed": "Wszystkie serwery MCP zostały odświeżone.",
+		"project_config_deleted": "Plik konfiguracyjny MCP projektu został usunięty. Wszystkie serwery MCP projektu zostały odłączone."
+	}
+}

+ 0 - 11
src/i18n/locales/pt-BR/common.json

@@ -27,11 +27,6 @@
 		"this_and_subsequent": "Esta e todas as mensagens subsequentes"
 	},
 	"errors": {
-		"invalid_mcp_config": "Formato de configuração MCP do projeto inválido",
-		"invalid_mcp_settings_format": "Formato JSON das configurações MCP inválido. Por favor, verifique se suas configurações seguem o formato JSON correto.",
-		"invalid_mcp_settings_syntax": "Formato JSON das configurações MCP inválido. Por favor, verifique se há erros de sintaxe no seu arquivo de configurações.",
-		"invalid_mcp_settings_validation": "Formato de configurações MCP inválido: {{errorMessages}}",
-		"failed_initialize_project_mcp": "Falha ao inicializar o servidor MCP do projeto: {{error}}",
 		"invalid_data_uri": "Formato de URI de dados inválido",
 		"checkpoint_timeout": "Tempo esgotado ao tentar restaurar o ponto de verificação.",
 		"checkpoint_failed": "Falha ao restaurar o ponto de verificação.",
@@ -48,8 +43,6 @@
 		"delete_api_config": "Falha ao excluir a configuração da API",
 		"list_api_config": "Falha ao obter a lista de configurações da API",
 		"update_server_timeout": "Falha ao atualizar o tempo limite do servidor",
-		"failed_update_project_mcp": "Falha ao atualizar os servidores MCP do projeto",
-		"create_mcp_json": "Falha ao criar ou abrir .roo/mcp.json: {{error}}",
 		"hmr_not_running": "O servidor de desenvolvimento local não está em execução, o HMR não funcionará. Por favor, execute 'npm run dev' antes de iniciar a extensão para habilitar o HMR.",
 		"retrieve_current_mode": "Erro ao recuperar o modo atual do estado.",
 		"failed_delete_repo": "Falha ao excluir o repositório ou ramificação associada: {{error}}",
@@ -75,10 +68,6 @@
 		"no_changes": "Nenhuma alteração encontrada.",
 		"clipboard_copy": "Prompt do sistema copiado com sucesso para a área de transferência",
 		"history_cleanup": "{{count}} tarefa(s) com arquivos ausentes foram limpas do histórico.",
-		"mcp_server_restarting": "Reiniciando o servidor MCP {{serverName}}...",
-		"mcp_server_connected": "Servidor MCP {{serverName}} conectado",
-		"mcp_server_deleted": "Servidor MCP excluído: {{serverName}}",
-		"mcp_server_not_found": "Servidor \"{{serverName}}\" não encontrado na configuração",
 		"custom_storage_path_set": "Caminho de armazenamento personalizado definido: {{path}}",
 		"default_storage_path": "Retornado ao caminho de armazenamento padrão",
 		"settings_imported": "Configurações importadas com sucesso.",

+ 22 - 0
src/i18n/locales/pt-BR/mcp.json

@@ -0,0 +1,22 @@
+{
+	"errors": {
+		"invalid_settings_format": "Formato JSON das configurações MCP inválido. Por favor, verifique se suas configurações seguem o formato JSON correto.",
+		"invalid_settings_syntax": "Formato JSON das configurações MCP inválido. Por favor, verifique se há erros de sintaxe no seu arquivo de configurações.",
+		"invalid_settings_validation": "Formato de configurações MCP inválido: {{errorMessages}}",
+
+		"create_json": "Falha ao criar ou abrir .roo/mcp.json: {{error}}",
+		"failed_update_project": "Falha ao atualizar os servidores MCP do projeto"
+	},
+	"info": {
+		"server_restarting": "Reiniciando o servidor MCP {{serverName}}...",
+		"server_connected": "Servidor MCP {{serverName}} conectado",
+		"server_deleted": "Servidor MCP excluído: {{serverName}}",
+		"server_not_found": "Servidor \"{{serverName}}\" não encontrado na configuração",
+		"global_servers_active": "Servidores MCP globais ativos: {{mcpServers}}",
+		"project_servers_active": "Servidores MCP de projeto ativos: {{mcpServers}}",
+		"already_refreshing": "Os servidores MCP já estão atualizando.",
+		"refreshing_all": "Atualizando todos os servidores MCP...",
+		"all_refreshed": "Todos os servidores MCP foram atualizados.",
+		"project_config_deleted": "Arquivo de configuração MCP do projeto excluído. Todos os servidores MCP do projeto foram desconectados."
+	}
+}

+ 0 - 11
src/i18n/locales/ru/common.json

@@ -23,11 +23,6 @@
 		"this_and_subsequent": "Это и все последующие сообщения"
 	},
 	"errors": {
-		"invalid_mcp_config": "Неверный формат конфигурации проекта MCP",
-		"invalid_mcp_settings_format": "Неверный формат JSON настроек MCP. Пожалуйста, убедитесь, что ваши настройки соответствуют правильному формату JSON.",
-		"invalid_mcp_settings_syntax": "Неверный формат JSON настроек MCP. Пожалуйста, проверьте ваш файл настроек на наличие синтаксических ошибок.",
-		"invalid_mcp_settings_validation": "Неверный формат настроек MCP: {{errorMessages}}",
-		"failed_initialize_project_mcp": "Не удалось инициализировать сервер проекта MCP: {{error}}",
 		"invalid_data_uri": "Неверный формат URI данных",
 		"checkpoint_timeout": "Превышено время ожидания при попытке восстановления контрольной точки.",
 		"checkpoint_failed": "Не удалось восстановить контрольную точку.",
@@ -44,14 +39,12 @@
 		"delete_api_config": "Не удалось удалить конфигурацию API",
 		"list_api_config": "Не удалось получить список конфигураций API",
 		"update_server_timeout": "Не удалось обновить таймаут сервера",
-		"create_mcp_json": "Не удалось создать или открыть .roo/mcp.json: {{error}}",
 		"hmr_not_running": "Локальный сервер разработки не запущен, HMR не будет работать. Пожалуйста, запустите 'npm run dev' перед запуском расширения для включения HMR.",
 		"retrieve_current_mode": "Ошибка: не удалось получить текущий режим из состояния.",
 		"failed_delete_repo": "Не удалось удалить связанный теневой репозиторий или ветку: {{error}}",
 		"failed_remove_directory": "Не удалось удалить директорию задачи: {{error}}",
 		"custom_storage_path_unusable": "Пользовательский путь хранения \"{{path}}\" непригоден, будет использован путь по умолчанию",
 		"cannot_access_path": "Невозможно получить доступ к пути {{path}}: {{error}}",
-		"failed_update_project_mcp": "Не удалось обновить серверы проекта MCP",
 		"settings_import_failed": "Не удалось импортировать настройки: {{error}}.",
 		"mistake_limit_guidance": "Это может указывать на сбой в процессе мышления модели или неспособность правильно использовать инструмент, что можно смягчить с помощью руководства пользователя (например, \"Попробуйте разбить задачу на более мелкие шаги\").",
 		"violated_organization_allowlist": "Не удалось выполнить задачу: текущий профиль нарушает настройки вашей организации",
@@ -71,10 +64,6 @@
 		"no_changes": "Изменения не найдены.",
 		"clipboard_copy": "Системный промпт успешно скопирован в буфер обмена",
 		"history_cleanup": "Очищено {{count}} задач(и) с отсутствующими файлами из истории.",
-		"mcp_server_restarting": "Перезапуск сервера MCP {{serverName}}...",
-		"mcp_server_connected": "Сервер MCP {{serverName}} подключен",
-		"mcp_server_deleted": "Удален сервер MCP: {{serverName}}",
-		"mcp_server_not_found": "Сервер \"{{serverName}}\" не найден в конфигурации",
 		"custom_storage_path_set": "Установлен пользовательский путь хранения: {{path}}",
 		"default_storage_path": "Возвращено использование пути хранения по умолчанию",
 		"settings_imported": "Настройки успешно импортированы.",

+ 22 - 0
src/i18n/locales/ru/mcp.json

@@ -0,0 +1,22 @@
+{
+	"errors": {
+		"invalid_settings_format": "Неверный формат JSON настроек MCP. Пожалуйста, убедитесь, что ваши настройки соответствуют правильному формату JSON.",
+		"invalid_settings_syntax": "Неверный формат JSON настроек MCP. Пожалуйста, проверьте ваш файл настроек на наличие синтаксических ошибок.",
+		"invalid_settings_validation": "Неверный формат настроек MCP: {{errorMessages}}",
+
+		"create_json": "Не удалось создать или открыть .roo/mcp.json: {{error}}",
+		"failed_update_project": "Не удалось обновить серверы проекта MCP"
+	},
+	"info": {
+		"server_restarting": "Перезапуск сервера MCP {{serverName}}...",
+		"server_connected": "Сервер MCP {{serverName}} подключен",
+		"server_deleted": "Удален сервер MCP: {{serverName}}",
+		"server_not_found": "Сервер \"{{serverName}}\" не найден в конфигурации",
+		"global_servers_active": "Активные глобальные MCP серверы: {{mcpServers}}",
+		"project_servers_active": "Активные MCP серверы проекта: {{mcpServers}}",
+		"already_refreshing": "MCP серверы уже обновляются.",
+		"refreshing_all": "Обновление всех MCP серверов...",
+		"all_refreshed": "Все MCP серверы обновлены.",
+		"project_config_deleted": "Файл конфигурации MCP проекта удален. Все MCP серверы проекта отключены."
+	}
+}

+ 0 - 11
src/i18n/locales/tr/common.json

@@ -23,11 +23,6 @@
 		"this_and_subsequent": "Bu ve sonraki tüm mesajları"
 	},
 	"errors": {
-		"invalid_mcp_config": "Geçersiz proje MCP yapılandırma formatı",
-		"invalid_mcp_settings_format": "Geçersiz MCP ayarları JSON formatı. Lütfen ayarlarınızın doğru JSON formatını takip ettiğinden emin olun.",
-		"invalid_mcp_settings_syntax": "Geçersiz MCP ayarları JSON formatı. Lütfen ayarlar dosyanızda sözdizimi hatalarını kontrol edin.",
-		"invalid_mcp_settings_validation": "Geçersiz MCP ayarları formatı: {{errorMessages}}",
-		"failed_initialize_project_mcp": "Proje MCP sunucusu başlatılamadı: {{error}}",
 		"invalid_data_uri": "Geçersiz veri URI formatı",
 		"checkpoint_timeout": "Kontrol noktasını geri yüklemeye çalışırken zaman aşımına uğradı.",
 		"checkpoint_failed": "Kontrol noktası geri yüklenemedi.",
@@ -44,8 +39,6 @@
 		"delete_api_config": "API yapılandırması silinemedi",
 		"list_api_config": "API yapılandırma listesi alınamadı",
 		"update_server_timeout": "Sunucu zaman aşımı güncellenemedi",
-		"failed_update_project_mcp": "Proje MCP sunucuları güncellenemedi",
-		"create_mcp_json": ".roo/mcp.json oluşturulamadı veya açılamadı: {{error}}",
 		"hmr_not_running": "Yerel geliştirme sunucusu çalışmıyor, HMR çalışmayacak. HMR'yi etkinleştirmek için uzantıyı başlatmadan önce lütfen 'npm run dev' komutunu çalıştırın.",
 		"retrieve_current_mode": "Mevcut mod durumdan alınırken hata oluştu.",
 		"failed_delete_repo": "İlişkili gölge depo veya dal silinemedi: {{error}}",
@@ -71,10 +64,6 @@
 		"no_changes": "Değişiklik bulunamadı.",
 		"clipboard_copy": "Sistem istemi panoya başarıyla kopyalandı",
 		"history_cleanup": "Geçmişten eksik dosyaları olan {{count}} görev temizlendi.",
-		"mcp_server_restarting": "{{serverName}} MCP sunucusu yeniden başlatılıyor...",
-		"mcp_server_connected": "{{serverName}} MCP sunucusu bağlandı",
-		"mcp_server_deleted": "MCP sunucusu silindi: {{serverName}}",
-		"mcp_server_not_found": "Yapılandırmada \"{{serverName}}\" sunucusu bulunamadı",
 		"custom_storage_path_set": "Özel depolama yolu ayarlandı: {{path}}",
 		"default_storage_path": "Varsayılan depolama yoluna geri dönüldü",
 		"settings_imported": "Ayarlar başarıyla içe aktarıldı.",

+ 22 - 0
src/i18n/locales/tr/mcp.json

@@ -0,0 +1,22 @@
+{
+	"errors": {
+		"invalid_settings_format": "Geçersiz MCP ayarları JSON formatı. Lütfen ayarlarınızın doğru JSON formatını takip ettiğinden emin olun.",
+		"invalid_settings_syntax": "Geçersiz MCP ayarları JSON formatı. Lütfen ayarlar dosyanızda sözdizimi hatalarını kontrol edin.",
+		"invalid_settings_validation": "Geçersiz MCP ayarları formatı: {{errorMessages}}",
+
+		"create_json": ".roo/mcp.json oluşturulamadı veya açılamadı: {{error}}",
+		"failed_update_project": "Proje MCP sunucuları güncellenemedi"
+	},
+	"info": {
+		"server_restarting": "{{serverName}} MCP sunucusu yeniden başlatılıyor...",
+		"server_connected": "{{serverName}} MCP sunucusu bağlandı",
+		"server_deleted": "MCP sunucusu silindi: {{serverName}}",
+		"server_not_found": "Yapılandırmada \"{{serverName}}\" sunucusu bulunamadı",
+		"global_servers_active": "Aktif Global MCP Sunucuları: {{mcpServers}}",
+		"project_servers_active": "Aktif Proje MCP Sunucuları: {{mcpServers}}",
+		"already_refreshing": "MCP sunucuları zaten yenileniyor.",
+		"refreshing_all": "Tüm MCP sunucuları yenileniyor...",
+		"all_refreshed": "Tüm MCP sunucuları yenilendi.",
+		"project_config_deleted": "Proje MCP yapılandırma dosyası silindi. Tüm proje MCP sunucuları bağlantısı kesildi."
+	}
+}

+ 0 - 11
src/i18n/locales/vi/common.json

@@ -23,11 +23,6 @@
 		"this_and_subsequent": "Tin nhắn này và tất cả tin nhắn tiếp theo"
 	},
 	"errors": {
-		"invalid_mcp_config": "Định dạng cấu hình MCP dự án không hợp lệ",
-		"invalid_mcp_settings_format": "Định dạng JSON của cài đặt MCP không hợp lệ. Vui lòng đảm bảo cài đặt của bạn tuân theo định dạng JSON chính xác.",
-		"invalid_mcp_settings_syntax": "Định dạng JSON của cài đặt MCP không hợp lệ. Vui lòng kiểm tra lỗi cú pháp trong tệp cài đặt của bạn.",
-		"invalid_mcp_settings_validation": "Định dạng cài đặt MCP không hợp lệ: {{errorMessages}}",
-		"failed_initialize_project_mcp": "Không thể khởi tạo máy chủ MCP của dự án: {{error}}",
 		"invalid_data_uri": "Định dạng URI dữ liệu không hợp lệ",
 		"checkpoint_timeout": "Đã hết thời gian khi cố gắng khôi phục điểm kiểm tra.",
 		"checkpoint_failed": "Không thể khôi phục điểm kiểm tra.",
@@ -44,8 +39,6 @@
 		"delete_api_config": "Không thể xóa cấu hình API",
 		"list_api_config": "Không thể lấy danh sách cấu hình API",
 		"update_server_timeout": "Không thể cập nhật thời gian chờ máy chủ",
-		"failed_update_project_mcp": "Không thể cập nhật máy chủ MCP của dự án",
-		"create_mcp_json": "Không thể tạo hoặc mở .roo/mcp.json: {{error}}",
 		"hmr_not_running": "Máy chủ phát triển cục bộ không chạy, HMR sẽ không hoạt động. Vui lòng chạy 'npm run dev' trước khi khởi chạy tiện ích mở rộng để bật HMR.",
 		"retrieve_current_mode": "Lỗi không thể truy xuất chế độ hiện tại từ trạng thái.",
 		"failed_delete_repo": "Không thể xóa kho lưu trữ hoặc nhánh liên quan: {{error}}",
@@ -71,10 +64,6 @@
 		"no_changes": "Không tìm thấy thay đổi nào.",
 		"clipboard_copy": "Lời nhắc hệ thống đã được sao chép thành công vào clipboard",
 		"history_cleanup": "Đã dọn dẹp {{count}} nhiệm vụ có tệp bị thiếu khỏi lịch sử.",
-		"mcp_server_restarting": "Đang khởi động lại máy chủ MCP {{serverName}}...",
-		"mcp_server_connected": "Máy chủ MCP {{serverName}} đã kết nối",
-		"mcp_server_deleted": "Đã xóa máy chủ MCP: {{serverName}}",
-		"mcp_server_not_found": "Không tìm thấy máy chủ \"{{serverName}}\" trong cấu hình",
 		"custom_storage_path_set": "Đã thiết lập đường dẫn lưu trữ tùy chỉnh: {{path}}",
 		"default_storage_path": "Đã quay lại sử dụng đường dẫn lưu trữ mặc định",
 		"settings_imported": "Cài đặt đã được nhập thành công.",

+ 22 - 0
src/i18n/locales/vi/mcp.json

@@ -0,0 +1,22 @@
+{
+	"errors": {
+		"invalid_settings_format": "Định dạng JSON của cài đặt MCP không hợp lệ. Vui lòng đảm bảo cài đặt của bạn tuân theo định dạng JSON chính xác.",
+		"invalid_settings_syntax": "Định dạng JSON của cài đặt MCP không hợp lệ. Vui lòng kiểm tra lỗi cú pháp trong tệp cài đặt của bạn.",
+		"invalid_settings_validation": "Định dạng cài đặt MCP không hợp lệ: {{errorMessages}}",
+
+		"create_json": "Không thể tạo hoặc mở .roo/mcp.json: {{error}}",
+		"failed_update_project": "Không thể cập nhật máy chủ MCP của dự án"
+	},
+	"info": {
+		"server_restarting": "Đang khởi động lại máy chủ MCP {{serverName}}...",
+		"server_connected": "Máy chủ MCP {{serverName}} đã kết nối",
+		"server_deleted": "Đã xóa máy chủ MCP: {{serverName}}",
+		"server_not_found": "Không tìm thấy máy chủ \"{{serverName}}\" trong cấu hình",
+		"global_servers_active": "Các máy chủ MCP toàn cầu đang hoạt động: {{mcpServers}}",
+		"project_servers_active": "Các máy chủ MCP dự án đang hoạt động: {{mcpServers}}",
+		"already_refreshing": "Các máy chủ MCP đã đang làm mới.",
+		"refreshing_all": "Đang làm mới tất cả các máy chủ MCP...",
+		"all_refreshed": "Tất cả các máy chủ MCP đã được làm mới.",
+		"project_config_deleted": "Tệp cấu hình MCP của dự án đã bị xóa. Tất cả các máy chủ MCP của dự án đã bị ngắt kết nối."
+	}
+}

+ 0 - 11
src/i18n/locales/zh-CN/common.json

@@ -23,11 +23,6 @@
 		"this_and_subsequent": "此消息及所有后续消息"
 	},
 	"errors": {
-		"invalid_mcp_config": "项目MCP配置格式无效",
-		"invalid_mcp_settings_format": "MCP设置JSON格式无效。请确保您的设置遵循正确的JSON格式。",
-		"invalid_mcp_settings_syntax": "MCP设置JSON格式无效。请检查您的设置文件是否有语法错误。",
-		"invalid_mcp_settings_validation": "MCP设置格式无效:{{errorMessages}}",
-		"failed_initialize_project_mcp": "初始化项目MCP服务器失败:{{error}}",
 		"invalid_data_uri": "数据URI格式无效",
 		"checkpoint_timeout": "尝试恢复检查点时超时。",
 		"checkpoint_failed": "恢复检查点失败。",
@@ -44,8 +39,6 @@
 		"delete_api_config": "删除API配置失败",
 		"list_api_config": "获取API配置列表失败",
 		"update_server_timeout": "更新服务器超时设置失败",
-		"failed_update_project_mcp": "更新项目MCP服务器失败",
-		"create_mcp_json": "创建或打开 .roo/mcp.json 失败:{{error}}",
 		"hmr_not_running": "本地开发服务器未运行,HMR将不起作用。请在启动扩展前运行'npm run dev'以启用HMR。",
 		"retrieve_current_mode": "从状态中检索当前模式失败。",
 		"failed_delete_repo": "删除关联的影子仓库或分支失败:{{error}}",
@@ -71,10 +64,6 @@
 		"no_changes": "未找到更改。",
 		"clipboard_copy": "系统消息已成功复制到剪贴板",
 		"history_cleanup": "已从历史记录中清理{{count}}个缺少文件的任务。",
-		"mcp_server_restarting": "正在重启{{serverName}}MCP服务器...",
-		"mcp_server_connected": "{{serverName}}MCP服务器已连接",
-		"mcp_server_deleted": "已删除MCP服务器:{{serverName}}",
-		"mcp_server_not_found": "在配置中未找到服务器\"{{serverName}}\"",
 		"custom_storage_path_set": "自定义存储路径已设置:{{path}}",
 		"default_storage_path": "已恢复使用默认存储路径",
 		"settings_imported": "设置已成功导入。",

+ 22 - 0
src/i18n/locales/zh-CN/mcp.json

@@ -0,0 +1,22 @@
+{
+	"errors": {
+		"invalid_settings_format": "MCP设置JSON格式无效。请确保您的设置遵循正确的JSON格式。",
+		"invalid_settings_syntax": "MCP设置JSON格式无效。请检查您的设置文件是否有语法错误。",
+		"invalid_settings_validation": "MCP设置格式无效:{{errorMessages}}",
+
+		"create_json": "创建或打开 .roo/mcp.json 失败:{{error}}",
+		"failed_update_project": "更新项目MCP服务器失败"
+	},
+	"info": {
+		"server_restarting": "正在重启{{serverName}}MCP服务器...",
+		"server_connected": "{{serverName}}MCP服务器已连接",
+		"server_deleted": "已删除MCP服务器:{{serverName}}",
+		"server_not_found": "在配置中未找到服务器\"{{serverName}}\"",
+		"global_servers_active": "活动的全局 MCP 服务器: {{mcpServers}}",
+		"project_servers_active": "活动的项目 MCP 服务器: {{mcpServers}}",
+		"already_refreshing": "MCP 服务器已在刷新中。",
+		"refreshing_all": "正在刷新所有 MCP 服务器...",
+		"all_refreshed": "所有 MCP 服务器已刷新。",
+		"project_config_deleted": "项目MCP配置文件已删除。所有项目MCP服务器已断开连接。"
+	}
+}

+ 0 - 11
src/i18n/locales/zh-TW/common.json

@@ -23,11 +23,6 @@
 		"this_and_subsequent": "這則訊息及所有後續訊息"
 	},
 	"errors": {
-		"invalid_mcp_config": "專案 MCP 設定格式無效",
-		"invalid_mcp_settings_format": "MCP 設定 JSON 格式無效。請確保您的設定遵循正確的 JSON 格式。",
-		"invalid_mcp_settings_syntax": "MCP 設定 JSON 格式無效。請檢查您的設定檔案是否有語法錯誤。",
-		"invalid_mcp_settings_validation": "MCP 設定格式無效:{{errorMessages}}",
-		"failed_initialize_project_mcp": "初始化專案 MCP 伺服器失敗:{{error}}",
 		"invalid_data_uri": "資料 URI 格式無效",
 		"checkpoint_timeout": "嘗試恢復檢查點時超時。",
 		"checkpoint_failed": "恢復檢查點失敗。",
@@ -44,8 +39,6 @@
 		"delete_api_config": "刪除 API 設定失敗",
 		"list_api_config": "取得 API 設定列表失敗",
 		"update_server_timeout": "更新伺服器超時設定失敗",
-		"failed_update_project_mcp": "更新專案 MCP 伺服器失敗",
-		"create_mcp_json": "建立或開啟 .roo/mcp.json 失敗:{{error}}",
 		"hmr_not_running": "本機開發伺服器沒有執行,HMR 將不起作用。請在啟動擴充套件前執行'npm run dev'以啟用 HMR。",
 		"retrieve_current_mode": "從狀態中檢索目前模式失敗。",
 		"failed_delete_repo": "刪除關聯的影子倉庫或分支失敗:{{error}}",
@@ -71,10 +64,6 @@
 		"no_changes": "沒有找到更改。",
 		"clipboard_copy": "系統訊息已成功複製到剪貼簿",
 		"history_cleanup": "已從歷史記錄中清理{{count}}個缺少檔案的工作。",
-		"mcp_server_restarting": "正在重啟{{serverName}}MCP 伺服器...",
-		"mcp_server_connected": "{{serverName}}MCP 伺服器已連接",
-		"mcp_server_deleted": "已刪除 MCP 伺服器:{{serverName}}",
-		"mcp_server_not_found": "在設定中沒有找到伺服器\"{{serverName}}\"",
 		"custom_storage_path_set": "自訂儲存路徑已設定:{{path}}",
 		"default_storage_path": "已恢復使用預設儲存路徑",
 		"settings_imported": "設定已成功匯入。",

+ 22 - 0
src/i18n/locales/zh-TW/mcp.json

@@ -0,0 +1,22 @@
+{
+	"errors": {
+		"invalid_settings_format": "MCP 設定 JSON 格式無效。請確保您的設定遵循正確的 JSON 格式。",
+		"invalid_settings_syntax": "MCP 設定 JSON 格式無效。請檢查您的設定檔案是否有語法錯誤。",
+		"invalid_settings_validation": "MCP 設定格式無效:{{errorMessages}}",
+
+		"create_json": "建立或開啟 .roo/mcp.json 失敗:{{error}}",
+		"failed_update_project": "更新專案 MCP 伺服器失敗"
+	},
+	"info": {
+		"server_restarting": "正在重啟{{serverName}}MCP 伺服器...",
+		"server_connected": "{{serverName}}MCP 伺服器已連接",
+		"server_deleted": "已刪除 MCP 伺服器:{{serverName}}",
+		"server_not_found": "在設定中沒有找到伺服器\"{{serverName}}\"",
+		"global_servers_active": "活動的全域 MCP 伺服器: {{mcpServers}}",
+		"project_servers_active": "活動的專案 MCP 伺服器: {{mcpServers}}",
+		"already_refreshing": "MCP 伺服器已在重新整理中。",
+		"refreshing_all": "正在重新整理所有 MCP 伺服器...",
+		"all_refreshed": "所有 MCP 伺服器已重新整理。",
+		"project_config_deleted": "專案MCP設定檔案已刪除。所有專案MCP伺服器已斷開連接。"
+	}
+}

+ 260 - 41
src/services/mcp/McpHub.ts

@@ -133,11 +133,12 @@ export class McpHub {
 	connections: McpConnection[] = []
 	isConnecting: boolean = false
 	private refCount: number = 0 // Reference counter for active clients
+	private configChangeDebounceTimers: Map<string, NodeJS.Timeout> = new Map()
 
 	constructor(provider: ClineProvider) {
 		this.providerRef = new WeakRef(provider)
 		this.watchMcpSettingsFile()
-		this.watchProjectMcpFile()
+		this.watchProjectMcpFile().catch(console.error)
 		this.setupWorkspaceFoldersWatcher()
 		this.initializeGlobalMcpServers()
 		this.initializeProjectMcpServers()
@@ -248,43 +249,116 @@ export class McpHub {
 		this.disposables.push(
 			vscode.workspace.onDidChangeWorkspaceFolders(async () => {
 				await this.updateProjectMcpServers()
-				this.watchProjectMcpFile()
+				await this.watchProjectMcpFile()
 			}),
 		)
 	}
 
+	/**
+	 * Debounced wrapper for handling config file changes
+	 */
+	private debounceConfigChange(filePath: string, source: "global" | "project"): void {
+		const key = `${source}-${filePath}`
+
+		// Clear existing timer if any
+		const existingTimer = this.configChangeDebounceTimers.get(key)
+		if (existingTimer) {
+			clearTimeout(existingTimer)
+		}
+
+		// Set new timer
+		const timer = setTimeout(async () => {
+			this.configChangeDebounceTimers.delete(key)
+			await this.handleConfigFileChange(filePath, source)
+		}, 500) // 500ms debounce
+
+		this.configChangeDebounceTimers.set(key, timer)
+	}
+
 	private async handleConfigFileChange(filePath: string, source: "global" | "project"): Promise<void> {
 		try {
 			const content = await fs.readFile(filePath, "utf-8")
-			const config = JSON.parse(content)
+			let config: any
+
+			try {
+				config = JSON.parse(content)
+			} catch (parseError) {
+				const errorMessage = t("mcp:errors.invalid_settings_syntax")
+				console.error(errorMessage, parseError)
+				vscode.window.showErrorMessage(errorMessage)
+				return
+			}
+
 			const result = McpSettingsSchema.safeParse(config)
 
 			if (!result.success) {
 				const errorMessages = result.error.errors
 					.map((err) => `${err.path.join(".")}: ${err.message}`)
 					.join("\n")
-				vscode.window.showErrorMessage(t("common:errors.invalid_mcp_settings_validation", { errorMessages }))
+				vscode.window.showErrorMessage(t("mcp:errors.invalid_settings_validation", { errorMessages }))
 				return
 			}
 
 			await this.updateServerConnections(result.data.mcpServers || {}, source)
 		} catch (error) {
-			if (error instanceof SyntaxError) {
-				vscode.window.showErrorMessage(t("common:errors.invalid_mcp_settings_format"))
+			// Check if the error is because the file doesn't exist
+			if (error.code === "ENOENT" && source === "project") {
+				// File was deleted, clean up project MCP servers
+				await this.cleanupProjectMcpServers()
+				await this.notifyWebviewOfServerChanges()
+				vscode.window.showInformationMessage(t("mcp:info.project_config_deleted"))
 			} else {
-				this.showErrorMessage(`Failed to process ${source} MCP settings change`, error)
+				this.showErrorMessage(t("mcp:errors.failed_update_project"), error)
 			}
 		}
 	}
 
-	private watchProjectMcpFile(): void {
+	private async watchProjectMcpFile(): Promise<void> {
+		// Skip if test environment is detected or VSCode APIs are not available
+		if (
+			process.env.NODE_ENV === "test" ||
+			process.env.JEST_WORKER_ID !== undefined ||
+			!vscode.workspace.createFileSystemWatcher
+		) {
+			return
+		}
+
+		// Clean up existing project MCP watcher if it exists
+		if (this.projectMcpWatcher) {
+			this.projectMcpWatcher.dispose()
+			this.projectMcpWatcher = undefined
+		}
+
+		if (!vscode.workspace.workspaceFolders?.length) {
+			return
+		}
+
+		const workspaceFolder = vscode.workspace.workspaceFolders[0]
+		const projectMcpPattern = new vscode.RelativePattern(workspaceFolder, ".roo/mcp.json")
+
+		// Create a file system watcher for the project MCP file pattern
+		this.projectMcpWatcher = vscode.workspace.createFileSystemWatcher(projectMcpPattern)
+
+		// Watch for file changes
+		const changeDisposable = this.projectMcpWatcher.onDidChange((uri) => {
+			this.debounceConfigChange(uri.fsPath, "project")
+		})
+
+		// Watch for file creation
+		const createDisposable = this.projectMcpWatcher.onDidCreate((uri) => {
+			this.debounceConfigChange(uri.fsPath, "project")
+		})
+
+		// Watch for file deletion
+		const deleteDisposable = this.projectMcpWatcher.onDidDelete(async () => {
+			// Clean up all project MCP servers when the file is deleted
+			await this.cleanupProjectMcpServers()
+			await this.notifyWebviewOfServerChanges()
+			vscode.window.showInformationMessage(t("mcp:info.project_config_deleted"))
+		})
+
 		this.disposables.push(
-			vscode.workspace.onDidSaveTextDocument(async (document) => {
-				const projectMcpPath = await this.getProjectMcpPath()
-				if (projectMcpPath && arePathsEqual(document.uri.fsPath, projectMcpPath)) {
-					await this.handleConfigFileChange(projectMcpPath, "project")
-				}
-			}),
+			vscode.Disposable.from(changeDisposable, createDisposable, deleteDisposable, this.projectMcpWatcher),
 		)
 	}
 
@@ -299,7 +373,7 @@ export class McpHub {
 			try {
 				config = JSON.parse(content)
 			} catch (parseError) {
-				const errorMessage = t("common:errors.invalid_mcp_settings_syntax")
+				const errorMessage = t("mcp:errors.invalid_settings_syntax")
 				console.error(errorMessage, parseError)
 				vscode.window.showErrorMessage(errorMessage)
 				return
@@ -315,21 +389,23 @@ export class McpHub {
 					.map((err) => `${err.path.join(".")}: ${err.message}`)
 					.join("\n")
 				console.error("Invalid project MCP settings format:", errorMessages)
-				vscode.window.showErrorMessage(t("common:errors.invalid_mcp_settings_validation", { errorMessages }))
+				vscode.window.showErrorMessage(t("mcp:errors.invalid_settings_validation", { errorMessages }))
 			}
 		} catch (error) {
-			this.showErrorMessage(t("common:errors.failed_update_project_mcp"), error)
+			this.showErrorMessage(t("mcp:errors.failed_update_project"), error)
 		}
 	}
 
 	private async cleanupProjectMcpServers(): Promise<void> {
-		const projectServers = this.connections.filter((conn) => conn.server.source === "project")
+		// Disconnect and remove all project MCP servers
+		const projectConnections = this.connections.filter((conn) => conn.server.source === "project")
 
-		for (const conn of projectServers) {
+		for (const conn of projectConnections) {
 			await this.deleteConnection(conn.server.name, "project")
 		}
 
-		await this.notifyWebviewOfServerChanges()
+		// Clear project servers from the connections list
+		await this.updateServerConnections({}, "project", false)
 	}
 
 	getServers(): McpServer[] {
@@ -375,14 +451,43 @@ export class McpHub {
 	}
 
 	private async watchMcpSettingsFile(): Promise<void> {
+		// Skip if test environment is detected or VSCode APIs are not available
+		if (
+			process.env.NODE_ENV === "test" ||
+			process.env.JEST_WORKER_ID !== undefined ||
+			!vscode.workspace.createFileSystemWatcher
+		) {
+			return
+		}
+
+		// Clean up existing settings watcher if it exists
+		if (this.settingsWatcher) {
+			this.settingsWatcher.dispose()
+			this.settingsWatcher = undefined
+		}
+
 		const settingsPath = await this.getMcpSettingsFilePath()
-		this.disposables.push(
-			vscode.workspace.onDidSaveTextDocument(async (document) => {
-				if (arePathsEqual(document.uri.fsPath, settingsPath)) {
-					await this.handleConfigFileChange(settingsPath, "global")
-				}
-			}),
-		)
+		const settingsUri = vscode.Uri.file(settingsPath)
+		const settingsPattern = new vscode.RelativePattern(path.dirname(settingsPath), path.basename(settingsPath))
+
+		// Create a file system watcher for the global MCP settings file
+		this.settingsWatcher = vscode.workspace.createFileSystemWatcher(settingsPattern)
+
+		// Watch for file changes
+		const changeDisposable = this.settingsWatcher.onDidChange((uri) => {
+			if (arePathsEqual(uri.fsPath, settingsPath)) {
+				this.debounceConfigChange(settingsPath, "global")
+			}
+		})
+
+		// Watch for file creation
+		const createDisposable = this.settingsWatcher.onDidCreate((uri) => {
+			if (arePathsEqual(uri.fsPath, settingsPath)) {
+				this.debounceConfigChange(settingsPath, "global")
+			}
+		})
+
+		this.disposables.push(vscode.Disposable.from(changeDisposable, createDisposable, this.settingsWatcher))
 	}
 
 	private async initializeMcpServers(source: "global" | "project"): Promise<void> {
@@ -399,18 +504,18 @@ export class McpHub {
 			const result = McpSettingsSchema.safeParse(config)
 
 			if (result.success) {
-				await this.updateServerConnections(result.data.mcpServers || {}, source)
+				await this.updateServerConnections(result.data.mcpServers || {}, source, false)
 			} else {
 				const errorMessages = result.error.errors
 					.map((err) => `${err.path.join(".")}: ${err.message}`)
 					.join("\n")
 				console.error(`Invalid ${source} MCP settings format:`, errorMessages)
-				vscode.window.showErrorMessage(t("common:errors.invalid_mcp_settings_validation", { errorMessages }))
+				vscode.window.showErrorMessage(t("mcp:errors.invalid_settings_validation", { errorMessages }))
 
 				if (source === "global") {
 					// Still try to connect with the raw config, but show warnings
 					try {
-						await this.updateServerConnections(config.mcpServers || {}, source)
+						await this.updateServerConnections(config.mcpServers || {}, source, false)
 					} catch (error) {
 						this.showErrorMessage(`Failed to initialize ${source} MCP servers with raw config`, error)
 					}
@@ -418,7 +523,7 @@ export class McpHub {
 			}
 		} catch (error) {
 			if (error instanceof SyntaxError) {
-				const errorMessage = t("common:errors.invalid_mcp_settings_syntax")
+				const errorMessage = t("mcp:errors.invalid_settings_syntax")
 				console.error(errorMessage, error)
 				vscode.window.showErrorMessage(errorMessage)
 			} else {
@@ -816,8 +921,11 @@ export class McpHub {
 	async updateServerConnections(
 		newServers: Record<string, any>,
 		source: "global" | "project" = "global",
+		manageConnectingState: boolean = true,
 	): Promise<void> {
-		this.isConnecting = true
+		if (manageConnectingState) {
+			this.isConnecting = true
+		}
 		this.removeAllFileWatchers()
 		// Filter connections by source
 		const currentConnections = this.connections.filter(
@@ -868,7 +976,9 @@ export class McpHub {
 			// If server exists with same config, do nothing
 		}
 		await this.notifyWebviewOfServerChanges()
-		this.isConnecting = false
+		if (manageConnectingState) {
+			this.isConnecting = false
+		}
 	}
 
 	private setupFileWatcher(
@@ -950,7 +1060,7 @@ export class McpHub {
 		const connection = this.findConnection(serverName, source)
 		const config = connection?.server.config
 		if (config) {
-			vscode.window.showInformationMessage(t("common:info.mcp_server_restarting", { serverName }))
+			vscode.window.showInformationMessage(t("mcp:info.server_restarting", { serverName }))
 			connection.server.status = "connecting"
 			connection.server.error = ""
 			await this.notifyWebviewOfServerChanges()
@@ -965,7 +1075,7 @@ export class McpHub {
 
 					// Try to connect again using validated config
 					await this.connectToServer(serverName, validatedConfig, connection.server.source || "global")
-					vscode.window.showInformationMessage(t("common:info.mcp_server_connected", { serverName }))
+					vscode.window.showInformationMessage(t("mcp:info.server_connected", { serverName }))
 				} catch (validationError) {
 					this.showErrorMessage(`Invalid configuration for MCP server "${serverName}"`, validationError)
 				}
@@ -978,6 +1088,73 @@ export class McpHub {
 		this.isConnecting = false
 	}
 
+	public async refreshAllConnections(): Promise<void> {
+		if (this.isConnecting) {
+			vscode.window.showInformationMessage(t("mcp:info.already_refreshing"))
+			return
+		}
+
+		this.isConnecting = true
+		vscode.window.showInformationMessage(t("mcp:info.refreshing_all"))
+
+		try {
+			const globalPath = await this.getMcpSettingsFilePath()
+			let globalServers: Record<string, any> = {}
+			try {
+				const globalContent = await fs.readFile(globalPath, "utf-8")
+				const globalConfig = JSON.parse(globalContent)
+				globalServers = globalConfig.mcpServers || {}
+				const globalServerNames = Object.keys(globalServers)
+				vscode.window.showInformationMessage(
+					t("mcp:info.global_servers_active", {
+						mcpServers: `${globalServerNames.join(", ") || "none"}`,
+					}),
+				)
+			} catch (error) {
+				console.log("Error reading global MCP config:", error)
+			}
+
+			const projectPath = await this.getProjectMcpPath()
+			let projectServers: Record<string, any> = {}
+			if (projectPath) {
+				try {
+					const projectContent = await fs.readFile(projectPath, "utf-8")
+					const projectConfig = JSON.parse(projectContent)
+					projectServers = projectConfig.mcpServers || {}
+					const projectServerNames = Object.keys(projectServers)
+					vscode.window.showInformationMessage(
+						t("mcp:info.project_servers_active", {
+							mcpServers: `${projectServerNames.join(", ") || "none"}`,
+						}),
+					)
+				} catch (error) {
+					console.log("Error reading project MCP config:", error)
+				}
+			}
+
+			// Clear all existing connections first
+			const existingConnections = [...this.connections]
+			for (const conn of existingConnections) {
+				await this.deleteConnection(conn.server.name, conn.server.source)
+			}
+
+			// Re-initialize all servers from scratch
+			// This ensures proper initialization including fetching tools, resources, etc.
+			await this.initializeMcpServers("global")
+			await this.initializeMcpServers("project")
+
+			await delay(100)
+
+			await this.notifyWebviewOfServerChanges()
+
+			vscode.window.showInformationMessage(t("mcp:info.all_refreshed"))
+		} catch (error) {
+			this.showErrorMessage("Failed to refresh MCP servers", error)
+		} finally {
+			this.isConnecting = false
+		}
+	}
+
 	private async notifyWebviewOfServerChanges(): Promise<void> {
 		// Get global server order from settings file
 		const settingsPath = await this.getMcpSettingsFilePath()
@@ -1020,10 +1197,40 @@ export class McpHub {
 		})
 
 		// Send sorted servers to webview
-		await this.providerRef.deref()?.postMessageToWebview({
-			type: "mcpServers",
-			mcpServers: sortedConnections.map((connection) => connection.server),
-		})
+		// Try to get the currently visible ClineProvider instance first
+		let targetProvider: ClineProvider | undefined = undefined
+		try {
+			// ClineProvider.getInstance() can focus the view if not visible,
+			// and returns a Promise<ClineProvider | undefined>
+			const instancePromise = ClineProvider.getInstance()
+			if (instancePromise) {
+				targetProvider = await instancePromise
+			}
+		} catch (error) {}
+
+		// Fallback to the providerRef if getInstance didn't yield a provider
+		if (!targetProvider) {
+			targetProvider = this.providerRef.deref()
+		}
+
+		if (targetProvider) {
+			const serversToSend = sortedConnections.map((connection) => connection.server)
+
+			const message = {
+				type: "mcpServers" as const,
+				mcpServers: serversToSend,
+			}
+
+			try {
+				await targetProvider.postMessageToWebview(message)
+			} catch (error) {
+				console.error("[McpHub] Error calling targetProvider.postMessageToWebview:", error)
+			}
+		} else {
+			console.error(
+				"[McpHub] No target provider available (neither from getInstance nor providerRef) - cannot send mcpServers message to webview",
+			)
+		}
 	}
 
 	public async toggleServerDisabled(
@@ -1217,9 +1424,9 @@ export class McpHub {
 				// Update server connections with the correct source
 				await this.updateServerConnections(config.mcpServers, serverSource)
 
-				vscode.window.showInformationMessage(t("common:info.mcp_server_deleted", { serverName }))
+				vscode.window.showInformationMessage(t("mcp:info.server_deleted", { serverName }))
 			} else {
-				vscode.window.showWarningMessage(t("common:info.mcp_server_not_found", { serverName }))
+				vscode.window.showWarningMessage(t("mcp:info.server_not_found", { serverName }))
 			}
 		} catch (error) {
 			this.showErrorMessage(`Failed to delete MCP server ${serverName}`, error)
@@ -1376,6 +1583,13 @@ export class McpHub {
 		}
 		console.log("McpHub: Disposing...")
 		this.isDisposed = true
+
+		// Clear all debounce timers
+		for (const timer of this.configChangeDebounceTimers.values()) {
+			clearTimeout(timer)
+		}
+		this.configChangeDebounceTimers.clear()
+
 		this.removeAllFileWatchers()
 		for (const connection of this.connections) {
 			try {
@@ -1387,6 +1601,11 @@ export class McpHub {
 		this.connections = []
 		if (this.settingsWatcher) {
 			this.settingsWatcher.dispose()
+			this.settingsWatcher = undefined
+		}
+		if (this.projectMcpWatcher) {
+			this.projectMcpWatcher.dispose()
+			this.projectMcpWatcher = undefined
 		}
 		this.disposables.forEach((d) => d.dispose())
 	}

+ 3 - 0
src/services/mcp/__tests__/McpHub.test.ts

@@ -49,6 +49,9 @@ jest.mock("vscode", () => ({
 		showErrorMessage: jest.fn(),
 		showInformationMessage: jest.fn(),
 		showWarningMessage: jest.fn(),
+		createTextEditorDecorationType: jest.fn().mockReturnValue({
+			dispose: jest.fn(),
+		}),
 	},
 	Disposable: {
 		from: jest.fn(),

+ 1 - 0
src/shared/WebviewMessage.ts

@@ -80,6 +80,7 @@ export interface WebviewMessage {
 		| "openMcpSettings"
 		| "openProjectMcpSettings"
 		| "restartMcpServer"
+		| "refreshAllMcpServers"
 		| "toggleToolAlwaysAllow"
 		| "toggleMcpServer"
 		| "updateMcpTimeout"

+ 19 - 3
webview-ui/src/components/mcp/McpView.tsx

@@ -119,10 +119,17 @@ const McpView = ({ onDone }: McpViewProps) => {
 						)}
 
 						{/* Edit Settings Buttons */}
-						<div style={{ marginTop: "10px", width: "100%", display: "flex", gap: "10px" }}>
+						<div
+							style={{
+								marginTop: "10px",
+								width: "100%",
+								display: "flex",
+								flexWrap: "wrap",
+								gap: "10px",
+							}}>
 							<Button
 								variant="secondary"
-								style={{ flex: 1 }}
+								style={{ flex: "1 1 auto", minWidth: "120px" }}
 								onClick={() => {
 									vscode.postMessage({ type: "openMcpSettings" })
 								}}>
@@ -131,13 +138,22 @@ const McpView = ({ onDone }: McpViewProps) => {
 							</Button>
 							<Button
 								variant="secondary"
-								style={{ flex: 1 }}
+								style={{ flex: "1 1 auto", minWidth: "120px" }}
 								onClick={() => {
 									vscode.postMessage({ type: "openProjectMcpSettings" })
 								}}>
 								<span className="codicon codicon-edit" style={{ marginRight: "6px" }}></span>
 								{t("mcp:editProjectMCP")}
 							</Button>
+							<Button
+								variant="secondary"
+								style={{ flex: "1 1 auto", minWidth: "120px" }}
+								onClick={() => {
+									vscode.postMessage({ type: "refreshAllMcpServers" })
+								}}>
+								<span className="codicon codicon-refresh" style={{ marginRight: "6px" }}></span>
+								{t("mcp:refreshMCP")}
+							</Button>
 						</div>
 						<div
 							style={{

+ 6 - 2
webview-ui/src/context/ExtensionStateContext.tsx

@@ -1,5 +1,4 @@
 import React, { createContext, useCallback, useContext, useEffect, useState } from "react"
-import { useEvent } from "react-use"
 
 import {
 	type ProviderSettings,
@@ -300,7 +299,12 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
 		[setListApiConfigMeta],
 	)
 
-	useEvent("message", handleMessage)
+	useEffect(() => {
+		window.addEventListener("message", handleMessage)
+		return () => {
+			window.removeEventListener("message", handleMessage)
+		}
+	}, [handleMessage])
 
 	useEffect(() => {
 		vscode.postMessage({ type: "webviewDidLaunch" })

+ 2 - 2
webview-ui/src/i18n/locales/ca/mcp.json

@@ -28,7 +28,6 @@
 	"emptyState": {
 		"noTools": "No s'han trobat eines",
 		"noResources": "No s'han trobat recursos",
-		"noLogs": "No s'han trobat registres",
 		"noErrors": "No s'han trobat errors"
 	},
 	"networkTimeout": {
@@ -54,5 +53,6 @@
 	"serverStatus": {
 		"retrying": "Tornant a intentar...",
 		"retryConnection": "Torna a intentar la connexió"
-	}
+	},
+	"refreshMCP": "Actualitza els servidors MCP"
 }

+ 2 - 2
webview-ui/src/i18n/locales/de/mcp.json

@@ -28,7 +28,6 @@
 	"emptyState": {
 		"noTools": "Keine Tools gefunden",
 		"noResources": "Keine Ressourcen gefunden",
-		"noLogs": "Keine Protokolle gefunden",
 		"noErrors": "Keine Fehler gefunden"
 	},
 	"networkTimeout": {
@@ -54,5 +53,6 @@
 	"serverStatus": {
 		"retrying": "Wiederhole...",
 		"retryConnection": "Verbindung wiederholen"
-	}
+	},
+	"refreshMCP": "MCP-Server aktualisieren"
 }

+ 1 - 1
webview-ui/src/i18n/locales/en/mcp.json

@@ -14,6 +14,7 @@
 	},
 	"editGlobalMCP": "Edit Global MCP",
 	"editProjectMCP": "Edit Project MCP",
+	"refreshMCP": "Refresh MCP Servers",
 	"learnMoreEditingSettings": "Learn more about editing MCP settings files",
 	"tool": {
 		"alwaysAllow": "Always allow",
@@ -28,7 +29,6 @@
 	"emptyState": {
 		"noTools": "No tools found",
 		"noResources": "No resources found",
-		"noLogs": "No logs found",
 		"noErrors": "No errors found"
 	},
 	"networkTimeout": {

+ 2 - 2
webview-ui/src/i18n/locales/es/mcp.json

@@ -28,7 +28,6 @@
 	"emptyState": {
 		"noTools": "No se encontraron herramientas",
 		"noResources": "No se encontraron recursos",
-		"noLogs": "No se encontraron registros",
 		"noErrors": "No se encontraron errores"
 	},
 	"networkTimeout": {
@@ -54,5 +53,6 @@
 	"serverStatus": {
 		"retrying": "Reintentando...",
 		"retryConnection": "Reintentar conexión"
-	}
+	},
+	"refreshMCP": "Actualizar Servidores MCP"
 }

+ 2 - 2
webview-ui/src/i18n/locales/fr/mcp.json

@@ -28,7 +28,6 @@
 	"emptyState": {
 		"noTools": "Aucun outil trouvé",
 		"noResources": "Aucune ressource trouvée",
-		"noLogs": "Aucun journal trouvé",
 		"noErrors": "Aucune erreur trouvée"
 	},
 	"networkTimeout": {
@@ -54,5 +53,6 @@
 	"serverStatus": {
 		"retrying": "Nouvelle tentative...",
 		"retryConnection": "Réessayer la connexion"
-	}
+	},
+	"refreshMCP": "Rafraîchir les serveurs MCP"
 }

+ 2 - 2
webview-ui/src/i18n/locales/hi/mcp.json

@@ -28,7 +28,6 @@
 	"emptyState": {
 		"noTools": "कोई टूल नहीं मिला",
 		"noResources": "कोई संसाधन नहीं मिला",
-		"noLogs": "कोई लॉग नहीं मिला",
 		"noErrors": "कोई त्रुटि नहीं मिली"
 	},
 	"networkTimeout": {
@@ -54,5 +53,6 @@
 	"serverStatus": {
 		"retrying": "फिर से कोशिश कर रहा है...",
 		"retryConnection": "कनेक्शन फिर से आज़माएँ"
-	}
+	},
+	"refreshMCP": "एमसीपी सर्वर रीफ्रेश करें"
 }

+ 2 - 2
webview-ui/src/i18n/locales/it/mcp.json

@@ -28,7 +28,6 @@
 	"emptyState": {
 		"noTools": "Nessuno strumento trovato",
 		"noResources": "Nessuna risorsa trovata",
-		"noLogs": "Nessun log trovato",
 		"noErrors": "Nessun errore trovato"
 	},
 	"networkTimeout": {
@@ -54,5 +53,6 @@
 	"serverStatus": {
 		"retrying": "Riprovo...",
 		"retryConnection": "Riprova connessione"
-	}
+	},
+	"refreshMCP": "Aggiorna server MCP"
 }

+ 2 - 2
webview-ui/src/i18n/locales/ja/mcp.json

@@ -28,7 +28,6 @@
 	"emptyState": {
 		"noTools": "ツールが見つかりません",
 		"noResources": "リソースが見つかりません",
-		"noLogs": "ログが見つかりません",
 		"noErrors": "エラーが見つかりません"
 	},
 	"networkTimeout": {
@@ -54,5 +53,6 @@
 	"serverStatus": {
 		"retrying": "再試行中...",
 		"retryConnection": "再接続"
-	}
+	},
+	"refreshMCP": "MCPサーバーを更新"
 }

+ 2 - 2
webview-ui/src/i18n/locales/ko/mcp.json

@@ -28,7 +28,6 @@
 	"emptyState": {
 		"noTools": "도구를 찾을 수 없음",
 		"noResources": "리소스를 찾을 수 없음",
-		"noLogs": "로그를 찾을 수 없음",
 		"noErrors": "오류를 찾을 수 없음"
 	},
 	"networkTimeout": {
@@ -54,5 +53,6 @@
 	"serverStatus": {
 		"retrying": "다시 시도 중...",
 		"retryConnection": "연결 다시 시도"
-	}
+	},
+	"refreshMCP": "MCP 서버 새로 고침"
 }

+ 2 - 2
webview-ui/src/i18n/locales/nl/mcp.json

@@ -28,7 +28,6 @@
 	"emptyState": {
 		"noTools": "Geen tools gevonden",
 		"noResources": "Geen bronnen gevonden",
-		"noLogs": "Geen logboeken gevonden",
 		"noErrors": "Geen fouten gevonden"
 	},
 	"networkTimeout": {
@@ -54,5 +53,6 @@
 	"serverStatus": {
 		"retrying": "Opnieuw proberen...",
 		"retryConnection": "Verbinding opnieuw proberen"
-	}
+	},
+	"refreshMCP": "MCP-servers vernieuwen"
 }

+ 2 - 2
webview-ui/src/i18n/locales/pl/mcp.json

@@ -28,7 +28,6 @@
 	"emptyState": {
 		"noTools": "Nie znaleziono narzędzi",
 		"noResources": "Nie znaleziono zasobów",
-		"noLogs": "Nie znaleziono logów",
 		"noErrors": "Nie znaleziono błędów"
 	},
 	"networkTimeout": {
@@ -54,5 +53,6 @@
 	"serverStatus": {
 		"retrying": "Ponawianie...",
 		"retryConnection": "Ponów połączenie"
-	}
+	},
+	"refreshMCP": "Odśwież serwery MCP"
 }

+ 2 - 2
webview-ui/src/i18n/locales/pt-BR/mcp.json

@@ -28,7 +28,6 @@
 	"emptyState": {
 		"noTools": "Nenhuma ferramenta encontrada",
 		"noResources": "Nenhum recurso encontrado",
-		"noLogs": "Nenhum log encontrado",
 		"noErrors": "Nenhum erro encontrado"
 	},
 	"networkTimeout": {
@@ -54,5 +53,6 @@
 	"serverStatus": {
 		"retrying": "Tentando novamente...",
 		"retryConnection": "Tentar reconectar"
-	}
+	},
+	"refreshMCP": "Atualizar Servidores MCP"
 }

+ 2 - 2
webview-ui/src/i18n/locales/ru/mcp.json

@@ -28,7 +28,6 @@
 	"emptyState": {
 		"noTools": "Инструменты не найдены",
 		"noResources": "Ресурсы не найдены",
-		"noLogs": "Логи не найдены",
 		"noErrors": "Ошибки не найдены"
 	},
 	"networkTimeout": {
@@ -54,5 +53,6 @@
 	"serverStatus": {
 		"retrying": "Повторная попытка...",
 		"retryConnection": "Повторить подключение"
-	}
+	},
+	"refreshMCP": "Обновить MCP серверы"
 }

+ 2 - 2
webview-ui/src/i18n/locales/tr/mcp.json

@@ -28,7 +28,6 @@
 	"emptyState": {
 		"noTools": "Araç bulunamadı",
 		"noResources": "Kaynak bulunamadı",
-		"noLogs": "Kayıt bulunamadı",
 		"noErrors": "Hata bulunamadı"
 	},
 	"networkTimeout": {
@@ -54,5 +53,6 @@
 	"serverStatus": {
 		"retrying": "Tekrar deneniyor...",
 		"retryConnection": "Bağlantıyı tekrar dene"
-	}
+	},
+	"refreshMCP": "MCP Sunucularını Yenile"
 }

+ 2 - 2
webview-ui/src/i18n/locales/vi/mcp.json

@@ -28,7 +28,6 @@
 	"emptyState": {
 		"noTools": "Không tìm thấy công cụ",
 		"noResources": "Không tìm thấy tài nguyên",
-		"noLogs": "Không tìm thấy nhật ký",
 		"noErrors": "Không tìm thấy lỗi"
 	},
 	"networkTimeout": {
@@ -54,5 +53,6 @@
 	"serverStatus": {
 		"retrying": "Đang thử lại...",
 		"retryConnection": "Thử kết nối lại"
-	}
+	},
+	"refreshMCP": "Làm mới Máy chủ MCP"
 }

+ 2 - 2
webview-ui/src/i18n/locales/zh-CN/mcp.json

@@ -28,7 +28,6 @@
 	"emptyState": {
 		"noTools": "未找到工具",
 		"noResources": "未找到资源",
-		"noLogs": "未找到日志",
 		"noErrors": "未找到错误"
 	},
 	"networkTimeout": {
@@ -54,5 +53,6 @@
 	"serverStatus": {
 		"retrying": "重试中...",
 		"retryConnection": "重试连接"
-	}
+	},
+	"refreshMCP": "刷新 MCP 服务器"
 }

+ 2 - 2
webview-ui/src/i18n/locales/zh-TW/mcp.json

@@ -28,7 +28,6 @@
 	"emptyState": {
 		"noTools": "找不到工具",
 		"noResources": "找不到資源",
-		"noLogs": "找不到日誌",
 		"noErrors": "找不到錯誤"
 	},
 	"networkTimeout": {
@@ -54,5 +53,6 @@
 	"serverStatus": {
 		"retrying": "重試中...",
 		"retryConnection": "重試連線"
-	}
+	},
+	"refreshMCP": "重新整理 MCP 伺服器"
 }