@codingame/monaco-vscode-mcp-service-override 37.2.0 → 37.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common.d.ts +2 -0
- package/common.js +56 -0
- package/index.d.ts +1 -2
- package/index.js +1 -52
- package/package.json +10 -2
- package/session.d.ts +1 -0
- package/session.js +2 -0
- package/vscode/src/vs/platform/mcp/common/allowedMcpServersService.js +3 -3
- package/vscode/src/vs/platform/mcp/common/mcpGalleryService.js +8 -8
- package/vscode/src/vs/platform/mcp/common/mcpResourceScannerService.js +7 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadMcp.js +18 -18
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcp.contribution.js +3 -3
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpAddContextContribution.js +2 -2
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpCommands.js +108 -108
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpElicitationService.js +47 -47
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpGatewayService.js +4 -4
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpLanguageFeatures.js +37 -37
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpMigration.js +20 -16
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpResourceQuickAccess.js +52 -50
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServerEditor.js +45 -43
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServerEditorInput.js +2 -2
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServerIcons.js +5 -5
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServerWidgets.js +5 -5
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServersView.js +18 -18
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpWorkbenchService.js +14 -14
- package/vscode/src/vs/workbench/contrib/mcp/common/discovery/extensionMcpDiscovery.js +8 -6
- package/vscode/src/vs/workbench/contrib/mcp/common/discovery/nativeMcpDiscoveryAbstract.js +1 -1
- package/vscode/src/vs/workbench/contrib/mcp/common/discovery/nativeMcpDiscoveryAdapters.js +2 -2
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpContextKeys.js +13 -13
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpGatewayToolBrokerChannel.js +4 -4
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpLanguageModelToolContribution.js +7 -7
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpRegistry.js +25 -25
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpResourceFilesystem.js +1 -1
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpSamplingLog.js +1 -1
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpSamplingService.js +28 -24
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpSandboxService.js +6 -6
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpServerConnection.js +3 -3
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpServerRequestHandler.js +1 -1
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpService.js +13 -11
- package/vscode/src/vs/workbench/services/authentication/browser/authenticationMcpService.js +13 -18
- package/vscode/src/vs/workbench/services/authentication/browser/authenticationMcpUsageService.js +3 -1
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpDevMode.service.d.ts +0 -6
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpDevMode.service.js +0 -6
|
@@ -49,11 +49,13 @@ let McpConfigMigrationContribution = class McpConfigMigrationContribution extend
|
|
|
49
49
|
try {
|
|
50
50
|
const userMcpConfig = await this.parseMcpConfig(this.userDataProfileService.currentProfile.settingsResource);
|
|
51
51
|
if (userMcpConfig && userMcpConfig.servers && ( Object.keys(userMcpConfig.servers)).length > 0) {
|
|
52
|
-
await Promise.all(
|
|
53
|
-
name,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
await Promise.all(
|
|
53
|
+
Object.entries(userMcpConfig.servers).map(([name, config], index) => this.mcpManagementService.install({
|
|
54
|
+
name,
|
|
55
|
+
config,
|
|
56
|
+
inputs: index === 0 ? userMcpConfig.inputs : undefined
|
|
57
|
+
}))
|
|
58
|
+
);
|
|
57
59
|
await this.removeMcpConfig(this.userDataProfileService.currentProfile.settingsResource);
|
|
58
60
|
}
|
|
59
61
|
} catch (error) {
|
|
@@ -65,13 +67,15 @@ let McpConfigMigrationContribution = class McpConfigMigrationContribution extend
|
|
|
65
67
|
try {
|
|
66
68
|
const userRemoteMcpConfig = await this.parseMcpConfig(remoteEnvironment.settingsPath);
|
|
67
69
|
if (userRemoteMcpConfig && userRemoteMcpConfig.servers && ( Object.keys(userRemoteMcpConfig.servers)).length > 0) {
|
|
68
|
-
await Promise.all(
|
|
69
|
-
name,
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
70
|
+
await Promise.all(
|
|
71
|
+
Object.entries(userRemoteMcpConfig.servers).map(([name, config], index) => this.mcpManagementService.install({
|
|
72
|
+
name,
|
|
73
|
+
config,
|
|
74
|
+
inputs: index === 0 ? userRemoteMcpConfig.inputs : undefined
|
|
75
|
+
}, {
|
|
76
|
+
target: ConfigurationTarget.USER_REMOTE
|
|
77
|
+
}))
|
|
78
|
+
);
|
|
75
79
|
await this.removeMcpConfig(remoteEnvironment.settingsPath);
|
|
76
80
|
}
|
|
77
81
|
} catch (error) {
|
|
@@ -98,16 +102,16 @@ let McpConfigMigrationContribution = class McpConfigMigrationContribution extend
|
|
|
98
102
|
}
|
|
99
103
|
showMcpConfigErrorNotification(isRemote) {
|
|
100
104
|
const message = isRemote ? ( localize(
|
|
101
|
-
|
|
105
|
+
16069,
|
|
102
106
|
"MCP servers should no longer be configured in remote user settings. Use the dedicated MCP configuration instead."
|
|
103
107
|
)) : ( localize(
|
|
104
|
-
|
|
108
|
+
16070,
|
|
105
109
|
"MCP servers should no longer be configured in user settings. Use the dedicated MCP configuration instead."
|
|
106
110
|
));
|
|
107
|
-
const openConfigLabel = isRemote ? ( localize(
|
|
111
|
+
const openConfigLabel = isRemote ? ( localize(16071, "Open Remote User MCP Configuration")) : ( localize(16072, "Open User MCP Configuration"));
|
|
108
112
|
const commandId = isRemote ? McpCommandIds.OpenRemoteUserMcp : McpCommandIds.OpenUserMcp;
|
|
109
113
|
this.notificationService.prompt(Severity.Error, message, [{
|
|
110
|
-
label: ( localize(
|
|
114
|
+
label: ( localize(16073, "Update Now")),
|
|
111
115
|
run: async () => {
|
|
112
116
|
await this.migrateMcpConfig();
|
|
113
117
|
await this.commandService.executeCommand(commandId);
|
|
@@ -74,7 +74,7 @@ let McpResourcePickHelper = class McpResourcePickHelper extends Disposable {
|
|
|
74
74
|
id: resource.template.template,
|
|
75
75
|
label: resource.title || resource.name,
|
|
76
76
|
description: resource.description,
|
|
77
|
-
detail: ( localize(
|
|
77
|
+
detail: ( localize(16089, "Resource template: {0}", resource.template.template)),
|
|
78
78
|
iconPath
|
|
79
79
|
};
|
|
80
80
|
}
|
|
@@ -138,7 +138,7 @@ let McpResourcePickHelper = class McpResourcePickHelper extends Disposable {
|
|
|
138
138
|
if (currentResources) {
|
|
139
139
|
this.addCurrentMCPQuickPickItemLevel(server, currentResources);
|
|
140
140
|
}
|
|
141
|
-
const childResources =
|
|
141
|
+
const childResources = stat.children.map(child => {
|
|
142
142
|
const mcpUri = McpResourceURI.fromServer(server.definition, ( child.resource.toString()));
|
|
143
143
|
return {
|
|
144
144
|
uri: mcpUri,
|
|
@@ -150,7 +150,7 @@ let McpResourcePickHelper = class McpResourcePickHelper extends Disposable {
|
|
|
150
150
|
sizeInBytes: child.size,
|
|
151
151
|
icons: McpIcons.fromParsed(undefined)
|
|
152
152
|
};
|
|
153
|
-
})
|
|
153
|
+
});
|
|
154
154
|
this._inDirectory.set({
|
|
155
155
|
server,
|
|
156
156
|
resources: childResources
|
|
@@ -221,7 +221,7 @@ let McpResourcePickHelper = class McpResourcePickHelper extends Disposable {
|
|
|
221
221
|
return uri;
|
|
222
222
|
}
|
|
223
223
|
this._notificationService.warn(( localize(
|
|
224
|
-
|
|
224
|
+
16090,
|
|
225
225
|
"The resource {0} was not found.",
|
|
226
226
|
(McpResourceURI.toServer(uri).resourceURL.toString())
|
|
227
227
|
)));
|
|
@@ -266,13 +266,13 @@ let McpResourcePickHelper = class McpResourcePickHelper extends Disposable {
|
|
|
266
266
|
}
|
|
267
267
|
}
|
|
268
268
|
let placeholder = ( localize(
|
|
269
|
-
|
|
269
|
+
16091,
|
|
270
270
|
"Value for ${0} in {1}",
|
|
271
271
|
variable.name.toUpperCase(),
|
|
272
272
|
rt.template.resolve(variablesWithPlaceholders).replaceAll("%24", "$")
|
|
273
273
|
));
|
|
274
274
|
if (variable.optional) {
|
|
275
|
-
placeholder += " (" + ( localize(
|
|
275
|
+
placeholder += " (" + ( localize(16092, "Optional")) + ")";
|
|
276
276
|
}
|
|
277
277
|
input.placeholder = placeholder;
|
|
278
278
|
input.value = "";
|
|
@@ -280,10 +280,10 @@ let McpResourcePickHelper = class McpResourcePickHelper extends Disposable {
|
|
|
280
280
|
input.show();
|
|
281
281
|
const currentID = generateUuid();
|
|
282
282
|
const setItems = (value, completed = []) => {
|
|
283
|
-
const items =
|
|
283
|
+
const items = completed.filter(c => c !== value).map(c => ({
|
|
284
284
|
id: c,
|
|
285
285
|
label: c
|
|
286
|
-
}))
|
|
286
|
+
}));
|
|
287
287
|
if (value) {
|
|
288
288
|
items.unshift({
|
|
289
289
|
id: currentID,
|
|
@@ -292,7 +292,7 @@ let McpResourcePickHelper = class McpResourcePickHelper extends Disposable {
|
|
|
292
292
|
} else if (variable.optional) {
|
|
293
293
|
items.unshift({
|
|
294
294
|
id: currentID,
|
|
295
|
-
label: ( localize(
|
|
295
|
+
label: ( localize(16093, "<Empty>"))
|
|
296
296
|
});
|
|
297
297
|
}
|
|
298
298
|
input.items = items;
|
|
@@ -391,45 +391,47 @@ let McpResourcePickHelper = class McpResourcePickHelper extends Disposable {
|
|
|
391
391
|
}, undefined);
|
|
392
392
|
};
|
|
393
393
|
const servers = ( new Map());
|
|
394
|
-
Promise.all(
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
394
|
+
Promise.all(
|
|
395
|
+
(this.explicitServers || this._mcpService.servers.get()).map(async server => {
|
|
396
|
+
let cap = server.capabilities.get();
|
|
397
|
+
const rec = {
|
|
398
|
+
templates: ( new DeferredPromise()),
|
|
399
|
+
resourcesSoFar: [],
|
|
400
|
+
resources: ( new DeferredPromise())
|
|
401
|
+
};
|
|
402
|
+
servers.set(server, rec);
|
|
403
|
+
if (cap === undefined) {
|
|
404
|
+
cap = await ( new Promise(resolve => {
|
|
405
|
+
server.start().then(state => {
|
|
406
|
+
if (state.state === McpConnectionState.Kind.Error || state.state === McpConnectionState.Kind.Stopped) {
|
|
407
|
+
resolve(undefined);
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
this._register(cts.token.onCancellationRequested(() => resolve(undefined)));
|
|
411
|
+
this._register(autorun(reader => {
|
|
412
|
+
const cap2 = server.capabilities.read(reader);
|
|
413
|
+
if (cap2 !== undefined) {
|
|
414
|
+
resolve(cap2);
|
|
415
|
+
}
|
|
416
|
+
}));
|
|
415
417
|
}));
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
}
|
|
432
|
-
|
|
418
|
+
}
|
|
419
|
+
if (cap && (cap & McpCapability.Resources)) {
|
|
420
|
+
await Promise.all([
|
|
421
|
+
rec.templates.settleWith(server.resourceTemplates(cts.token).catch(() => [])).finally(publish),
|
|
422
|
+
rec.resources.settleWith((async () => {
|
|
423
|
+
for await (const page of server.resources(cts.token)) {
|
|
424
|
+
rec.resourcesSoFar = rec.resourcesSoFar.concat(page);
|
|
425
|
+
publish();
|
|
426
|
+
}
|
|
427
|
+
})())
|
|
428
|
+
]);
|
|
429
|
+
} else {
|
|
430
|
+
rec.templates.complete([]);
|
|
431
|
+
rec.resources.complete([]);
|
|
432
|
+
}
|
|
433
|
+
})
|
|
434
|
+
).finally(() => {
|
|
433
435
|
isBusyLoadingPicks = false;
|
|
434
436
|
publish();
|
|
435
437
|
});
|
|
@@ -463,7 +465,7 @@ let AbstractMcpResourceAccessPick = class AbstractMcpResourceAccessPick {
|
|
|
463
465
|
picker.keepScrollPosition = true;
|
|
464
466
|
const store = ( new DisposableStore());
|
|
465
467
|
const goBackId = "_goback_";
|
|
466
|
-
const attachButton = ( localize(
|
|
468
|
+
const attachButton = ( localize(16094, "Attach to chat"));
|
|
467
469
|
const helper = store.add(this._instantiationService.createInstance(McpResourcePickHelper));
|
|
468
470
|
if (this._scopeTo) {
|
|
469
471
|
helper.explicitServers = [this._scopeTo];
|
|
@@ -491,7 +493,7 @@ let AbstractMcpResourceAccessPick = class AbstractMcpResourceAccessPick {
|
|
|
491
493
|
if (helper.checkIfNestedResources()) {
|
|
492
494
|
const goBackItem = {
|
|
493
495
|
id: goBackId,
|
|
494
|
-
label: ( localize(
|
|
496
|
+
label: ( localize(16095, "Go back ↩")),
|
|
495
497
|
alwaysShow: true
|
|
496
498
|
};
|
|
497
499
|
items.push(goBackItem);
|
|
@@ -573,7 +575,7 @@ let McpResourceQuickPick = class McpResourceQuickPick extends AbstractMcpResourc
|
|
|
573
575
|
const qp = store.add(this._quickInputService.createQuickPick({
|
|
574
576
|
useSeparators: true
|
|
575
577
|
}));
|
|
576
|
-
qp.placeholder = ( localize(
|
|
578
|
+
qp.placeholder = ( localize(16096, "Search for resources"));
|
|
577
579
|
store.add(this.applyToPick(qp, token));
|
|
578
580
|
store.add(qp.onDidHide(() => store.dispose()));
|
|
579
581
|
qp.show();
|
|
@@ -45,7 +45,7 @@ import { fromNow } from '@codingame/monaco-vscode-api/vscode/vs/base/common/date
|
|
|
45
45
|
import { IContextMenuService } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextview/browser/contextView.service';
|
|
46
46
|
|
|
47
47
|
var McpServerEditor_1;
|
|
48
|
-
registerCss(mcpServerEditor);
|
|
48
|
+
registerCss(mcpServerEditor, 1);
|
|
49
49
|
var McpServerEditorTab;
|
|
50
50
|
(function(McpServerEditorTab) {
|
|
51
51
|
McpServerEditorTab["Readme"] = "readme";
|
|
@@ -192,7 +192,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
192
192
|
tabIndex: 0
|
|
193
193
|
}));
|
|
194
194
|
this._register(
|
|
195
|
-
this.hoverService.setupManagedHover(getDefaultHoverDelegate("mouse"), name, ( localize(
|
|
195
|
+
this.hoverService.setupManagedHover(getDefaultHoverDelegate("mouse"), name, ( localize(16128, "Extension name")))
|
|
196
196
|
);
|
|
197
197
|
const subtitle = append(details, $(".subtitle"));
|
|
198
198
|
const subTitleEntryContainers = [];
|
|
@@ -256,7 +256,9 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
256
256
|
label: true
|
|
257
257
|
});
|
|
258
258
|
actionBar.setFocusable(true);
|
|
259
|
-
this._register(Event.any(
|
|
259
|
+
this._register(Event.any(
|
|
260
|
+
...actions.map(a => Event.filter(a.onDidChange, e => e.enabled !== undefined))
|
|
261
|
+
)(() => {
|
|
260
262
|
actionBar.setFocusable(false);
|
|
261
263
|
actionBar.setFocusable(true);
|
|
262
264
|
}));
|
|
@@ -284,11 +286,11 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
284
286
|
for (const disposable of [...actions, ...widgets, ...otherContainers, mcpServerContainers]) {
|
|
285
287
|
this._register(disposable);
|
|
286
288
|
}
|
|
287
|
-
const onError = Event.chain(actionBar.onDidRun, $ =>
|
|
289
|
+
const onError = Event.chain(actionBar.onDidRun, $ => $.map((
|
|
288
290
|
{
|
|
289
291
|
error
|
|
290
292
|
}
|
|
291
|
-
) => error)
|
|
293
|
+
) => error).filter(error => !!error));
|
|
292
294
|
this._register(onError(this.onError, this));
|
|
293
295
|
const body = append(root, $(".body"));
|
|
294
296
|
const navbar = ( new NavBar(body));
|
|
@@ -352,18 +354,18 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
352
354
|
this.currentIdentifier = extension.id;
|
|
353
355
|
}
|
|
354
356
|
if (extension.readmeUrl || extension.gallery?.readme) {
|
|
355
|
-
template.navbar.push(McpServerEditorTab.Readme, ( localize(
|
|
357
|
+
template.navbar.push(McpServerEditorTab.Readme, ( localize(16129, "Details")), ( localize(16130, "Extension details, rendered from the extension's 'README.md' file")));
|
|
356
358
|
}
|
|
357
359
|
if (extension.gallery || extension.local?.manifest) {
|
|
358
|
-
template.navbar.push(McpServerEditorTab.Manifest, ( localize(
|
|
360
|
+
template.navbar.push(McpServerEditorTab.Manifest, ( localize(16131, "Manifest")), ( localize(16132, "Server manifest details")));
|
|
359
361
|
}
|
|
360
362
|
if (extension.config) {
|
|
361
|
-
template.navbar.push(McpServerEditorTab.Configuration, ( localize(
|
|
363
|
+
template.navbar.push(McpServerEditorTab.Configuration, ( localize(16133, "Configuration")), ( localize(16134, "Server configuration details")));
|
|
362
364
|
}
|
|
363
365
|
this.transientDisposables.add(this.mcpWorkbenchService.onChange(e => {
|
|
364
366
|
if (e === extension) {
|
|
365
367
|
if (e.config && !( template.navbar.has(McpServerEditorTab.Configuration))) {
|
|
366
|
-
template.navbar.push(McpServerEditorTab.Configuration, ( localize(
|
|
368
|
+
template.navbar.push(McpServerEditorTab.Configuration, ( localize(16133, "Configuration")), ( localize(16134, "Server configuration details")), extension.readmeUrl ? 1 : 0);
|
|
367
369
|
}
|
|
368
370
|
if (!e.config && ( template.navbar.has(McpServerEditorTab.Configuration))) {
|
|
369
371
|
template.navbar.remove(McpServerEditorTab.Configuration);
|
|
@@ -591,7 +593,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
591
593
|
this.contentDisposables.add(toDisposable(insert(this.layoutParticipants, {
|
|
592
594
|
layout
|
|
593
595
|
})));
|
|
594
|
-
const activeElement = await this.openMarkdown(extension, this.mcpServerReadme.get(), ( localize(
|
|
596
|
+
const activeElement = await this.openMarkdown(extension, this.mcpServerReadme.get(), ( localize(16135, "No README available.")), readmeContainer, WebviewIndex.Readme, ( localize(16136, "Readme")), token);
|
|
595
597
|
this.renderAdditionalDetails(additionalDetailsContainer, extension);
|
|
596
598
|
return activeElement;
|
|
597
599
|
}
|
|
@@ -640,7 +642,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
640
642
|
content.removeChild(content.firstChild);
|
|
641
643
|
}
|
|
642
644
|
const noManifestMessage = append(content, $(".no-manifest"));
|
|
643
|
-
noManifestMessage.textContent = ( localize(
|
|
645
|
+
noManifestMessage.textContent = ( localize(16137, "No manifest available for this MCP server."));
|
|
644
646
|
}
|
|
645
647
|
const scrollableContent = ( new DomScrollableElement(content, {}));
|
|
646
648
|
const layout = () => scrollableContent.scanDomNode();
|
|
@@ -657,36 +659,36 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
657
659
|
const config = mcpServer.config;
|
|
658
660
|
if (!config) {
|
|
659
661
|
const noConfigMessage = append(container, $(".no-config"));
|
|
660
|
-
noConfigMessage.textContent = ( localize(
|
|
662
|
+
noConfigMessage.textContent = ( localize(16138, "No configuration available for this MCP server."));
|
|
661
663
|
return;
|
|
662
664
|
}
|
|
663
665
|
const nameSection = append(container, $(".config-section"));
|
|
664
666
|
const nameLabel = append(nameSection, $(".config-label"));
|
|
665
|
-
nameLabel.textContent = ( localize(
|
|
667
|
+
nameLabel.textContent = ( localize(16139, "Name:"));
|
|
666
668
|
const nameValue = append(nameSection, $(".config-value"));
|
|
667
669
|
nameValue.textContent = mcpServer.name;
|
|
668
670
|
const typeSection = append(container, $(".config-section"));
|
|
669
671
|
const typeLabel = append(typeSection, $(".config-label"));
|
|
670
|
-
typeLabel.textContent = ( localize(
|
|
672
|
+
typeLabel.textContent = ( localize(16140, "Type:"));
|
|
671
673
|
const typeValue = append(typeSection, $(".config-value"));
|
|
672
674
|
typeValue.textContent = config.type;
|
|
673
675
|
if (config.type === McpServerType.LOCAL) {
|
|
674
676
|
const commandSection = append(container, $(".config-section"));
|
|
675
677
|
const commandLabel = append(commandSection, $(".config-label"));
|
|
676
|
-
commandLabel.textContent = ( localize(
|
|
678
|
+
commandLabel.textContent = ( localize(16141, "Command:"));
|
|
677
679
|
const commandValue = append(commandSection, $("code.config-value"));
|
|
678
680
|
commandValue.textContent = config.command;
|
|
679
681
|
if (config.args && config.args.length > 0) {
|
|
680
682
|
const argsSection = append(container, $(".config-section"));
|
|
681
683
|
const argsLabel = append(argsSection, $(".config-label"));
|
|
682
|
-
argsLabel.textContent = ( localize(
|
|
684
|
+
argsLabel.textContent = ( localize(16142, "Arguments:"));
|
|
683
685
|
const argsValue = append(argsSection, $("code.config-value"));
|
|
684
686
|
argsValue.textContent = config.args.join(" ");
|
|
685
687
|
}
|
|
686
688
|
if (config.env && ( Object.keys(config.env)).length > 0) {
|
|
687
689
|
const envSection = append(container, $(".config-section"));
|
|
688
690
|
const envLabel = append(envSection, $(".config-label"));
|
|
689
|
-
envLabel.textContent = ( localize(
|
|
691
|
+
envLabel.textContent = ( localize(16143, "Environment:"));
|
|
690
692
|
const envValue = append(envSection, $(".config-value"));
|
|
691
693
|
for (const [key, value] of Object.entries(config.env)) {
|
|
692
694
|
append(envValue, $("code.env-entry", undefined, `${key}=${value ?? ""}`));
|
|
@@ -695,20 +697,20 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
695
697
|
if (config.envFile) {
|
|
696
698
|
const envFileSection = append(container, $(".config-section"));
|
|
697
699
|
const envFileLabel = append(envFileSection, $(".config-label"));
|
|
698
|
-
envFileLabel.textContent = ( localize(
|
|
700
|
+
envFileLabel.textContent = ( localize(16144, "Environment File:"));
|
|
699
701
|
const envFileValue = append(envFileSection, $("code.config-value"));
|
|
700
702
|
envFileValue.textContent = config.envFile;
|
|
701
703
|
}
|
|
702
704
|
} else if (config.type === McpServerType.REMOTE) {
|
|
703
705
|
const urlSection = append(container, $(".config-section"));
|
|
704
706
|
const urlLabel = append(urlSection, $(".config-label"));
|
|
705
|
-
urlLabel.textContent = ( localize(
|
|
707
|
+
urlLabel.textContent = ( localize(16145, "URL:"));
|
|
706
708
|
const urlValue = append(urlSection, $("code.config-value"));
|
|
707
709
|
urlValue.textContent = config.url;
|
|
708
710
|
if (config.headers && ( Object.keys(config.headers)).length > 0) {
|
|
709
711
|
const headersSection = append(container, $(".config-section"));
|
|
710
712
|
const headersLabel = append(headersSection, $(".config-label"));
|
|
711
|
-
headersLabel.textContent = ( localize(
|
|
713
|
+
headersLabel.textContent = ( localize(16146, "Headers:"));
|
|
712
714
|
const headersValue = append(headersSection, $(".config-value"));
|
|
713
715
|
for (const [key, value] of Object.entries(config.headers)) {
|
|
714
716
|
append(headersValue, $("code.env-entry", undefined, `${key}: ${value ?? ""}`));
|
|
@@ -731,7 +733,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
731
733
|
append(container, $(
|
|
732
734
|
".manifest-section",
|
|
733
735
|
undefined,
|
|
734
|
-
$(".manifest-section-title", undefined, ( localize(
|
|
736
|
+
$(".manifest-section-title", undefined, ( localize(16147, "Packages")))
|
|
735
737
|
));
|
|
736
738
|
for (const [packageType, packages] of packagesByType) {
|
|
737
739
|
const packageSection = append(container, $(
|
|
@@ -744,7 +746,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
744
746
|
const pkg = packages[i];
|
|
745
747
|
append(
|
|
746
748
|
packagesGrid,
|
|
747
|
-
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(
|
|
749
|
+
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(16148, "Package:"))), $(".detail-value", undefined, pkg.identifier))
|
|
748
750
|
);
|
|
749
751
|
if (pkg.packageArguments && pkg.packageArguments.length > 0) {
|
|
750
752
|
const argStrings = [];
|
|
@@ -764,7 +766,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
764
766
|
}
|
|
765
767
|
append(
|
|
766
768
|
packagesGrid,
|
|
767
|
-
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(
|
|
769
|
+
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(16149, "Package Arguments:"))), $("code.detail-value", undefined, argStrings.join(" ")))
|
|
768
770
|
);
|
|
769
771
|
}
|
|
770
772
|
if (pkg.runtimeArguments && pkg.runtimeArguments.length > 0) {
|
|
@@ -785,14 +787,14 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
785
787
|
}
|
|
786
788
|
append(
|
|
787
789
|
packagesGrid,
|
|
788
|
-
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(
|
|
790
|
+
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(16150, "Runtime Arguments:"))), $("code.detail-value", undefined, argStrings.join(" ")))
|
|
789
791
|
);
|
|
790
792
|
}
|
|
791
793
|
if (pkg.environmentVariables && pkg.environmentVariables.length > 0) {
|
|
792
|
-
const envStrings =
|
|
794
|
+
const envStrings = pkg.environmentVariables.map(envVar => `${envVar.name}=${envVar.value ?? ""}`);
|
|
793
795
|
append(
|
|
794
796
|
packagesGrid,
|
|
795
|
-
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(
|
|
797
|
+
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(16151, "Environment Variables:"))), $("code.detail-value", undefined, envStrings.join(" ")))
|
|
796
798
|
);
|
|
797
799
|
}
|
|
798
800
|
if (i < packages.length - 1) {
|
|
@@ -805,25 +807,25 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
805
807
|
const packageSection = append(container, $(
|
|
806
808
|
".package-section",
|
|
807
809
|
undefined,
|
|
808
|
-
$(".package-section-title", undefined, ( localize(
|
|
810
|
+
$(".package-section-title", undefined, ( localize(16152, "Remote")).toLocaleUpperCase())
|
|
809
811
|
));
|
|
810
812
|
for (const remote of manifest.remotes) {
|
|
811
813
|
const packagesGrid = append(packageSection, $(".package-details"));
|
|
812
814
|
append(
|
|
813
815
|
packagesGrid,
|
|
814
|
-
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(
|
|
816
|
+
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(16145, "URL:"))), $(".detail-value", undefined, remote.url))
|
|
815
817
|
);
|
|
816
818
|
if (remote.type) {
|
|
817
819
|
append(
|
|
818
820
|
packagesGrid,
|
|
819
|
-
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(
|
|
821
|
+
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(16153, "Transport:"))), $(".detail-value", undefined, remote.type))
|
|
820
822
|
);
|
|
821
823
|
}
|
|
822
824
|
if (remote.headers && remote.headers.length > 0) {
|
|
823
|
-
const headerStrings =
|
|
825
|
+
const headerStrings = remote.headers.map(header => `${header.name}: ${header.value ?? ""}`);
|
|
824
826
|
append(
|
|
825
827
|
packagesGrid,
|
|
826
|
-
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(
|
|
828
|
+
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(16146, "Headers:"))), $(".detail-value", undefined, headerStrings.join(", ")))
|
|
827
829
|
);
|
|
828
830
|
}
|
|
829
831
|
}
|
|
@@ -902,7 +904,7 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
902
904
|
const categoriesContainer = append(container, $(".categories-container.additional-details-element"));
|
|
903
905
|
append(
|
|
904
906
|
categoriesContainer,
|
|
905
|
-
$(".additional-details-title", undefined, ( localize(
|
|
907
|
+
$(".additional-details-title", undefined, ( localize(16154, "Tags")))
|
|
906
908
|
);
|
|
907
909
|
const categoriesElement = append(categoriesContainer, $(".categories"));
|
|
908
910
|
for (const category of extension.gallery.topics) {
|
|
@@ -917,14 +919,14 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
917
919
|
const manifest = await this.mcpGalleryManifestService.getMcpGalleryManifest();
|
|
918
920
|
if (extension.repository) {
|
|
919
921
|
try {
|
|
920
|
-
resources.push([( localize(
|
|
922
|
+
resources.push([( localize(16155, "Repository")), ThemeIcon.fromId(Codicon.repo.id), ( URI.parse(extension.repository))]);
|
|
921
923
|
} catch (error) {}
|
|
922
924
|
}
|
|
923
925
|
if (manifest) {
|
|
924
926
|
const supportUri = getMcpGalleryManifestResourceUri(manifest, McpGalleryResourceType.ContactSupportUri);
|
|
925
927
|
if (supportUri) {
|
|
926
928
|
try {
|
|
927
|
-
resources.push([( localize(
|
|
929
|
+
resources.push([( localize(16156, "Contact Support")), ThemeIcon.fromId(Codicon.commentDiscussion.id), ( URI.parse(supportUri))]);
|
|
928
930
|
} catch (error) {}
|
|
929
931
|
}
|
|
930
932
|
}
|
|
@@ -932,7 +934,7 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
932
934
|
const extensionResourcesContainer = append(container, $(".resources-container.additional-details-element"));
|
|
933
935
|
append(
|
|
934
936
|
extensionResourcesContainer,
|
|
935
|
-
$(".additional-details-title", undefined, ( localize(
|
|
937
|
+
$(".additional-details-title", undefined, ( localize(16157, "Resources")))
|
|
936
938
|
);
|
|
937
939
|
const resourcesElement = append(extensionResourcesContainer, $(".resources"));
|
|
938
940
|
for (const [label, icon, uri] of resources) {
|
|
@@ -952,20 +954,20 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
952
954
|
const installInfoContainer = append(container, $(".more-info-container.additional-details-element"));
|
|
953
955
|
append(
|
|
954
956
|
installInfoContainer,
|
|
955
|
-
$(".additional-details-title", undefined, ( localize(
|
|
957
|
+
$(".additional-details-title", undefined, ( localize(16158, "Installation")))
|
|
956
958
|
);
|
|
957
959
|
const installInfo = append(installInfoContainer, $(".more-info"));
|
|
958
960
|
append(installInfo, $(
|
|
959
961
|
".more-info-entry",
|
|
960
962
|
undefined,
|
|
961
|
-
$("div.more-info-entry-name", undefined, ( localize(
|
|
963
|
+
$("div.more-info-entry-name", undefined, ( localize(16159, "Identifier"))),
|
|
962
964
|
$("code", undefined, extension.name)
|
|
963
965
|
));
|
|
964
966
|
if (extension.version) {
|
|
965
967
|
append(installInfo, $(
|
|
966
968
|
".more-info-entry",
|
|
967
969
|
undefined,
|
|
968
|
-
$("div.more-info-entry-name", undefined, ( localize(
|
|
970
|
+
$("div.more-info-entry-name", undefined, ( localize(16160, "Version"))),
|
|
969
971
|
$("code", undefined, extension.version)
|
|
970
972
|
));
|
|
971
973
|
}
|
|
@@ -975,7 +977,7 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
975
977
|
const moreInfoContainer = append(container, $(".more-info-container.additional-details-element"));
|
|
976
978
|
append(
|
|
977
979
|
moreInfoContainer,
|
|
978
|
-
$(".additional-details-title", undefined, ( localize(
|
|
980
|
+
$(".additional-details-title", undefined, ( localize(16161, "Marketplace")))
|
|
979
981
|
);
|
|
980
982
|
const moreInfo = append(moreInfoContainer, $(".more-info"));
|
|
981
983
|
if (gallery) {
|
|
@@ -983,14 +985,14 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
983
985
|
append(moreInfo, $(
|
|
984
986
|
".more-info-entry",
|
|
985
987
|
undefined,
|
|
986
|
-
$("div.more-info-entry-name", undefined, ( localize(
|
|
988
|
+
$("div.more-info-entry-name", undefined, ( localize(16159, "Identifier"))),
|
|
987
989
|
$("code", undefined, extension.name)
|
|
988
990
|
));
|
|
989
991
|
if (gallery.version) {
|
|
990
992
|
append(moreInfo, $(
|
|
991
993
|
".more-info-entry",
|
|
992
994
|
undefined,
|
|
993
|
-
$("div.more-info-entry-name", undefined, ( localize(
|
|
995
|
+
$("div.more-info-entry-name", undefined, ( localize(16160, "Version"))),
|
|
994
996
|
$("code", undefined, gallery.version)
|
|
995
997
|
));
|
|
996
998
|
}
|
|
@@ -999,7 +1001,7 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
999
1001
|
append(moreInfo, $(
|
|
1000
1002
|
".more-info-entry",
|
|
1001
1003
|
undefined,
|
|
1002
|
-
$("div.more-info-entry-name", undefined, ( localize(
|
|
1004
|
+
$("div.more-info-entry-name", undefined, ( localize(16162, "Last Released"))),
|
|
1003
1005
|
$("div", {
|
|
1004
1006
|
"title": ( ( new Date(gallery.lastUpdated)).toString())
|
|
1005
1007
|
}, fromNow(gallery.lastUpdated, true, true, true))
|
|
@@ -1009,7 +1011,7 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
1009
1011
|
append(moreInfo, $(
|
|
1010
1012
|
".more-info-entry",
|
|
1011
1013
|
undefined,
|
|
1012
|
-
$("div.more-info-entry-name", undefined, ( localize(
|
|
1014
|
+
$("div.more-info-entry-name", undefined, ( localize(16163, "Published"))),
|
|
1013
1015
|
$("div", {
|
|
1014
1016
|
"title": ( ( new Date(gallery.publishDate)).toString())
|
|
1015
1017
|
}, fromNow(gallery.publishDate, true, true, true))
|
|
@@ -8,7 +8,7 @@ import { join } from '@codingame/monaco-vscode-api/vscode/vs/base/common/path';
|
|
|
8
8
|
import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
|
|
9
9
|
import { registerIcon } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/iconRegistry';
|
|
10
10
|
|
|
11
|
-
const MCPServerEditorIcon = registerIcon("mcp-server-editor-icon", Codicon.mcp, ( localize(
|
|
11
|
+
const MCPServerEditorIcon = registerIcon("mcp-server-editor-icon", Codicon.mcp, ( localize(16164, "Icon of the MCP Server editor.")));
|
|
12
12
|
class McpServerEditorInput extends EditorInput {
|
|
13
13
|
static {
|
|
14
14
|
this.ID = "workbench.mcpServer.input2";
|
|
@@ -33,7 +33,7 @@ class McpServerEditorInput extends EditorInput {
|
|
|
33
33
|
return this._mcpServer;
|
|
34
34
|
}
|
|
35
35
|
getName() {
|
|
36
|
-
return localize(
|
|
36
|
+
return localize(16165, "MCP Server: {0}", this._mcpServer.label);
|
|
37
37
|
}
|
|
38
38
|
getIcon() {
|
|
39
39
|
return MCPServerEditorIcon;
|
|
@@ -3,10 +3,10 @@ import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codi
|
|
|
3
3
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
4
4
|
import { registerIcon } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/iconRegistry';
|
|
5
5
|
|
|
6
|
-
const mcpServerIcon = registerIcon("mcp-server", Codicon.mcp, ( localize(
|
|
7
|
-
const mcpServerRemoteIcon = registerIcon("mcp-server-remote", Codicon.remote, ( localize(
|
|
8
|
-
const mcpServerWorkspaceIcon = registerIcon("mcp-server-workspace", Codicon.rootFolder, ( localize(
|
|
9
|
-
const mcpStarredIcon = registerIcon("mcp-server-starred", Codicon.starFull, ( localize(
|
|
10
|
-
const mcpLicenseIcon = registerIcon("mcp-server-license", Codicon.law, ( localize(
|
|
6
|
+
const mcpServerIcon = registerIcon("mcp-server", Codicon.mcp, ( localize(16166, "Icon used for the MCP server.")));
|
|
7
|
+
const mcpServerRemoteIcon = registerIcon("mcp-server-remote", Codicon.remote, ( localize(16167, "Icon to indicate that an MCP server is for the remote user scope.")));
|
|
8
|
+
const mcpServerWorkspaceIcon = registerIcon("mcp-server-workspace", Codicon.rootFolder, ( localize(16168, "Icon to indicate that an MCP server is for the workspace scope.")));
|
|
9
|
+
const mcpStarredIcon = registerIcon("mcp-server-starred", Codicon.starFull, ( localize(16169, "Icon shown along with the starred status.")));
|
|
10
|
+
const mcpLicenseIcon = registerIcon("mcp-server-license", Codicon.law, ( localize(16170, "Icon shown along with the license status.")));
|
|
11
11
|
|
|
12
12
|
export { mcpLicenseIcon, mcpServerIcon, mcpServerRemoteIcon, mcpServerWorkspaceIcon, mcpStarredIcon };
|