Skip to content

Commit c20ffd0

Browse files
authored
1 parent af59930 commit c20ffd0

File tree

4 files changed

+23
-1
lines changed

4 files changed

+23
-1
lines changed

src/vs/workbench/contrib/mcp/browser/mcpServersView.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,13 +231,14 @@ export class McpServersListView extends ViewPane {
231231

232232
const onDidChangeModel = disposables.add(new Emitter<IPagedModel<IWorkbenchMcpServer>>());
233233
let servers = await this.mcpWorkbenchService.queryLocal();
234-
disposables.add(Event.debounce(Event.filter(this.mcpWorkbenchService.onChange, e => e?.installState === McpServerInstallState.Installed), () => undefined)(async () => {
234+
disposables.add(Event.debounce(Event.filter(this.mcpWorkbenchService.onChange, e => e?.installState === McpServerInstallState.Installed), () => undefined)(() => {
235235
const mergedMcpServers = this.mergeAddedMcpServers(servers, [...this.mcpWorkbenchService.local]);
236236
if (mergedMcpServers) {
237237
servers = mergedMcpServers;
238238
onDidChangeModel.fire(new PagedModel(servers));
239239
}
240240
}));
241+
disposables.add(this.mcpWorkbenchService.onReset(() => onDidChangeModel.fire(new PagedModel([...this.mcpWorkbenchService.local]))));
241242
return { model: new PagedModel(servers), onDidChangeModel: onDidChangeModel.event, disposables };
242243
}
243244

src/vs/workbench/contrib/mcp/browser/mcpWorkbenchService.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,9 @@ export class McpWorkbenchService extends Disposable implements IMcpWorkbenchServ
151151
private readonly _onChange = this._register(new Emitter<IWorkbenchMcpServer | undefined>());
152152
readonly onChange = this._onChange.event;
153153

154+
private readonly _onReset = this._register(new Emitter<void>());
155+
readonly onReset = this._onReset.event;
156+
154157
constructor(
155158
@IMcpGalleryService private readonly mcpGalleryService: IMcpGalleryService,
156159
@IWorkbenchMcpManagementService private readonly mcpManagementService: IWorkbenchMcpManagementService,
@@ -169,10 +172,17 @@ export class McpWorkbenchService extends Disposable implements IMcpWorkbenchServ
169172
this._register(this.mcpManagementService.onDidInstallMcpServersInCurrentProfile(e => this.onDidInstallMcpServers(e)));
170173
this._register(this.mcpManagementService.onDidUpdateMcpServersInCurrentProfile(e => this.onDidUpdateMcpServers(e)));
171174
this._register(this.mcpManagementService.onDidUninstallMcpServerInCurrentProfile(e => this.onDidUninstallMcpServer(e)));
175+
this._register(this.mcpManagementService.onDidChangeProfile(e => this.onDidChangeProfile()));
172176
this.queryLocal().then(() => this.syncInstalledMcpServers());
173177
urlService.registerHandler(this);
174178
}
175179

180+
private async onDidChangeProfile() {
181+
await this.queryLocal();
182+
this._onChange.fire(undefined);
183+
this._onReset.fire();
184+
}
185+
176186
private onDidUninstallMcpServer(e: DidUninstallMcpServerEvent) {
177187
if (e.error) {
178188
return;

src/vs/workbench/contrib/mcp/common/mcpTypes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,7 @@ export const IMcpWorkbenchService = createDecorator<IMcpWorkbenchService>('IMcpW
607607
export interface IMcpWorkbenchService {
608608
readonly _serviceBrand: undefined;
609609
readonly onChange: Event<IWorkbenchMcpServer | undefined>;
610+
readonly onReset: Event<void>;
610611
readonly local: readonly IWorkbenchMcpServer[];
611612
queryLocal(): Promise<IWorkbenchMcpServer[]>;
612613
queryGallery(options?: IQueryOptions, token?: CancellationToken): Promise<IWorkbenchMcpServer[]>;

src/vs/workbench/services/mcp/common/mcpWorkbenchManagementService.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export interface IWorkbenchMcpManagementService extends IMcpManagementService {
5252
readonly onDidUpdateMcpServersInCurrentProfile: Event<readonly IWorkbenchMcpServerInstallResult[]>;
5353
readonly onUninstallMcpServerInCurrentProfile: Event<UninstallMcpServerEvent>;
5454
readonly onDidUninstallMcpServerInCurrentProfile: Event<DidUninstallMcpServerEvent>;
55+
readonly onDidChangeProfile: Event<void>;
5556

5657
getInstalled(): Promise<IWorkbenchLocalMcpServer[]>;
5758
install(server: IInstallableMcpServer, options?: IWorkbencMcpServerInstallOptions): Promise<IWorkbenchLocalMcpServer>;
@@ -93,6 +94,9 @@ class WorkbenchMcpManagementService extends Disposable implements IWorkbenchMcpM
9394
private readonly _onDidUninstallMcpServerInCurrentProfile = this._register(new Emitter<DidUninstallMcpServerEvent>());
9495
readonly onDidUninstallMcpServerInCurrentProfile = this._onDidUninstallMcpServerInCurrentProfile.event;
9596

97+
private readonly _onDidChangeProfile = this._register(new Emitter<void>());
98+
readonly onDidChangeProfile = this._onDidChangeProfile.event;
99+
96100
private readonly workspaceMcpManagementService: IMcpManagementService;
97101
private readonly remoteMcpManagementService: IMcpManagementService | undefined;
98102

@@ -194,6 +198,12 @@ class WorkbenchMcpManagementService extends Disposable implements IWorkbenchMcpM
194198
}
195199
}));
196200
}
201+
202+
this._register(userDataProfileService.onDidChangeCurrentProfile(e => {
203+
if (!this.uriIdentityService.extUri.isEqual(e.previous.mcpResource, e.profile.mcpResource)) {
204+
this._onDidChangeProfile.fire();
205+
}
206+
}));
197207
}
198208

199209
private handleInstallMcpServerResultsFromEvent(e: readonly InstallMcpServerResult[], emitter: Emitter<readonly InstallMcpServerResult[]>, currentProfileEmitter: Emitter<readonly InstallMcpServerResult[]>): void {

0 commit comments

Comments
 (0)