@codingame/monaco-vscode-mcp-service-override 23.0.2 → 23.0.4
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/package.json +15 -15
- 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 +55 -55
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpElicitationService.js +18 -18
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpLanguageFeatures.js +18 -18
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpMigration.js +5 -5
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpResourceQuickAccess.js +7 -7
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServerActions.js +32 -32
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServerEditor.js +34 -34
- 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 +17 -17
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpWorkbenchService.js +8 -8
- package/vscode/src/vs/workbench/contrib/mcp/common/discovery/extensionMcpDiscovery.js +4 -4
- package/vscode/src/vs/workbench/contrib/mcp/common/discovery/nativeMcpDiscoveryAbstract.js +1 -1
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpContextKeys.js +4 -4
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpLanguageModelToolContribution.js +6 -6
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpRegistry.js +12 -12
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpSamplingLog.js +1 -1
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpSamplingService.js +11 -11
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpServer.js +9 -9
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpServerConnection.js +3 -3
- package/vscode/src/vs/workbench/services/authentication/browser/authenticationMcpService.js +9 -9
|
@@ -155,7 +155,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
155
155
|
const details = append(header, $('.details'));
|
|
156
156
|
const title = append(details, $('.title'));
|
|
157
157
|
const name = append(title, $('span.name.clickable', { role: 'heading', tabIndex: 0 }));
|
|
158
|
-
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), name, ( localize(
|
|
158
|
+
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), name, ( localize(8744, "Extension name"))));
|
|
159
159
|
const subtitle = append(details, $('.subtitle'));
|
|
160
160
|
const subTitleEntryContainers = [];
|
|
161
161
|
const publisherContainer = append(subtitle, $('.subtitle-entry'));
|
|
@@ -294,18 +294,18 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
294
294
|
this.currentIdentifier = extension.id;
|
|
295
295
|
}
|
|
296
296
|
if (extension.readmeUrl || extension.gallery?.readme) {
|
|
297
|
-
template.navbar.push(McpServerEditorTab.Readme, ( localize(
|
|
297
|
+
template.navbar.push(McpServerEditorTab.Readme, ( localize(8745, "Details")), ( localize(8746, "Extension details, rendered from the extension's 'README.md' file")));
|
|
298
298
|
}
|
|
299
299
|
if (extension.gallery || extension.local?.manifest) {
|
|
300
|
-
template.navbar.push(McpServerEditorTab.Manifest, ( localize(
|
|
300
|
+
template.navbar.push(McpServerEditorTab.Manifest, ( localize(8747, "Manifest")), ( localize(8748, "Server manifest details")));
|
|
301
301
|
}
|
|
302
302
|
if (extension.config) {
|
|
303
|
-
template.navbar.push(McpServerEditorTab.Configuration, ( localize(
|
|
303
|
+
template.navbar.push(McpServerEditorTab.Configuration, ( localize(8749, "Configuration")), ( localize(8750, "Server configuration details")));
|
|
304
304
|
}
|
|
305
305
|
this.transientDisposables.add(this.mcpWorkbenchService.onChange(e => {
|
|
306
306
|
if (e === extension) {
|
|
307
307
|
if (e.config && !( template.navbar.has(McpServerEditorTab.Configuration))) {
|
|
308
|
-
template.navbar.push(McpServerEditorTab.Configuration, ( localize(
|
|
308
|
+
template.navbar.push(McpServerEditorTab.Configuration, ( localize(8749, "Configuration")), ( localize(8750, "Server configuration details")), extension.readmeUrl ? 1 : 0);
|
|
309
309
|
}
|
|
310
310
|
if (!e.config && ( template.navbar.has(McpServerEditorTab.Configuration))) {
|
|
311
311
|
template.navbar.remove(McpServerEditorTab.Configuration);
|
|
@@ -504,7 +504,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
504
504
|
const layout = () => details.classList.toggle('narrow', this.dimension && this.dimension.width < 500);
|
|
505
505
|
layout();
|
|
506
506
|
this.contentDisposables.add(toDisposable(insert(this.layoutParticipants, { layout })));
|
|
507
|
-
const activeElement = await this.openMarkdown(extension, this.mcpServerReadme.get(), ( localize(
|
|
507
|
+
const activeElement = await this.openMarkdown(extension, this.mcpServerReadme.get(), ( localize(8751, "No README available.")), readmeContainer, WebviewIndex.Readme, ( localize(8752, "Readme")), token);
|
|
508
508
|
this.renderAdditionalDetails(additionalDetailsContainer, extension);
|
|
509
509
|
return activeElement;
|
|
510
510
|
}
|
|
@@ -544,7 +544,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
544
544
|
content.removeChild(content.firstChild);
|
|
545
545
|
}
|
|
546
546
|
const noManifestMessage = append(content, $('.no-manifest'));
|
|
547
|
-
noManifestMessage.textContent = ( localize(
|
|
547
|
+
noManifestMessage.textContent = ( localize(8753, "No manifest available for this MCP server."));
|
|
548
548
|
}
|
|
549
549
|
const scrollableContent = ( new DomScrollableElement(content, {}));
|
|
550
550
|
const layout = () => scrollableContent.scanDomNode();
|
|
@@ -557,29 +557,29 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
557
557
|
const config = mcpServer.config;
|
|
558
558
|
if (!config) {
|
|
559
559
|
const noConfigMessage = append(container, $('.no-config'));
|
|
560
|
-
noConfigMessage.textContent = ( localize(
|
|
560
|
+
noConfigMessage.textContent = ( localize(8754, "No configuration available for this MCP server."));
|
|
561
561
|
return;
|
|
562
562
|
}
|
|
563
563
|
const nameSection = append(container, $('.config-section'));
|
|
564
564
|
const nameLabel = append(nameSection, $('.config-label'));
|
|
565
|
-
nameLabel.textContent = ( localize(
|
|
565
|
+
nameLabel.textContent = ( localize(8755, "Name:"));
|
|
566
566
|
const nameValue = append(nameSection, $('.config-value'));
|
|
567
567
|
nameValue.textContent = mcpServer.name;
|
|
568
568
|
const typeSection = append(container, $('.config-section'));
|
|
569
569
|
const typeLabel = append(typeSection, $('.config-label'));
|
|
570
|
-
typeLabel.textContent = ( localize(
|
|
570
|
+
typeLabel.textContent = ( localize(8756, "Type:"));
|
|
571
571
|
const typeValue = append(typeSection, $('.config-value'));
|
|
572
572
|
typeValue.textContent = config.type;
|
|
573
573
|
if (config.type === McpServerType.LOCAL) {
|
|
574
574
|
const commandSection = append(container, $('.config-section'));
|
|
575
575
|
const commandLabel = append(commandSection, $('.config-label'));
|
|
576
|
-
commandLabel.textContent = ( localize(
|
|
576
|
+
commandLabel.textContent = ( localize(8757, "Command:"));
|
|
577
577
|
const commandValue = append(commandSection, $('code.config-value'));
|
|
578
578
|
commandValue.textContent = config.command;
|
|
579
579
|
if (config.args && config.args.length > 0) {
|
|
580
580
|
const argsSection = append(container, $('.config-section'));
|
|
581
581
|
const argsLabel = append(argsSection, $('.config-label'));
|
|
582
|
-
argsLabel.textContent = ( localize(
|
|
582
|
+
argsLabel.textContent = ( localize(8758, "Arguments:"));
|
|
583
583
|
const argsValue = append(argsSection, $('code.config-value'));
|
|
584
584
|
argsValue.textContent = config.args.join(' ');
|
|
585
585
|
}
|
|
@@ -587,7 +587,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
587
587
|
else if (config.type === McpServerType.REMOTE) {
|
|
588
588
|
const urlSection = append(container, $('.config-section'));
|
|
589
589
|
const urlLabel = append(urlSection, $('.config-label'));
|
|
590
|
-
urlLabel.textContent = ( localize(
|
|
590
|
+
urlLabel.textContent = ( localize(8759, "URL:"));
|
|
591
591
|
const urlValue = append(urlSection, $('code.config-value'));
|
|
592
592
|
urlValue.textContent = config.url;
|
|
593
593
|
}
|
|
@@ -604,13 +604,13 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
604
604
|
}
|
|
605
605
|
packages.push(pkg);
|
|
606
606
|
}
|
|
607
|
-
append(container, $('.manifest-section', undefined, $('.manifest-section-title', undefined, ( localize(
|
|
607
|
+
append(container, $('.manifest-section', undefined, $('.manifest-section-title', undefined, ( localize(8760, "Packages")))));
|
|
608
608
|
for (const [packageType, packages] of packagesByType) {
|
|
609
609
|
const packageSection = append(container, $('.package-section', undefined, $('.package-section-title', undefined, packageType.toUpperCase())));
|
|
610
610
|
const packagesGrid = append(packageSection, $('.package-details'));
|
|
611
611
|
for (let i = 0; i < packages.length; i++) {
|
|
612
612
|
const pkg = packages[i];
|
|
613
|
-
append(packagesGrid, $('.package-detail', undefined, $('.detail-label', undefined, ( localize(
|
|
613
|
+
append(packagesGrid, $('.package-detail', undefined, $('.detail-label', undefined, ( localize(8761, "Package:"))), $('.detail-value', undefined, pkg.identifier)));
|
|
614
614
|
if (pkg.packageArguments && pkg.packageArguments.length > 0) {
|
|
615
615
|
const argStrings = [];
|
|
616
616
|
for (const arg of pkg.packageArguments) {
|
|
@@ -627,7 +627,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
627
627
|
}
|
|
628
628
|
}
|
|
629
629
|
}
|
|
630
|
-
append(packagesGrid, $('.package-detail', undefined, $('.detail-label', undefined, ( localize(
|
|
630
|
+
append(packagesGrid, $('.package-detail', undefined, $('.detail-label', undefined, ( localize(8762, "Package Arguments:"))), $('code.detail-value', undefined, argStrings.join(' '))));
|
|
631
631
|
}
|
|
632
632
|
if (pkg.runtimeArguments && pkg.runtimeArguments.length > 0) {
|
|
633
633
|
const argStrings = [];
|
|
@@ -645,11 +645,11 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
645
645
|
}
|
|
646
646
|
}
|
|
647
647
|
}
|
|
648
|
-
append(packagesGrid, $('.package-detail', undefined, $('.detail-label', undefined, ( localize(
|
|
648
|
+
append(packagesGrid, $('.package-detail', undefined, $('.detail-label', undefined, ( localize(8763, "Runtime Arguments:"))), $('code.detail-value', undefined, argStrings.join(' '))));
|
|
649
649
|
}
|
|
650
650
|
if (pkg.environmentVariables && pkg.environmentVariables.length > 0) {
|
|
651
651
|
const envStrings = ( pkg.environmentVariables.map((envVar) => `${envVar.name}=${envVar.value ?? ''}`));
|
|
652
|
-
append(packagesGrid, $('.package-detail', undefined, $('.detail-label', undefined, ( localize(
|
|
652
|
+
append(packagesGrid, $('.package-detail', undefined, $('.detail-label', undefined, ( localize(8764, "Environment Variables:"))), $('code.detail-value', undefined, envStrings.join(' '))));
|
|
653
653
|
}
|
|
654
654
|
if (i < packages.length - 1) {
|
|
655
655
|
append(packagesGrid, $('.package-separator'));
|
|
@@ -658,16 +658,16 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
658
658
|
}
|
|
659
659
|
}
|
|
660
660
|
if (manifest.remotes && manifest.remotes.length > 0) {
|
|
661
|
-
const packageSection = append(container, $('.package-section', undefined, $('.package-section-title', undefined, ( localize(
|
|
661
|
+
const packageSection = append(container, $('.package-section', undefined, $('.package-section-title', undefined, ( localize(8765, "Remote")).toLocaleUpperCase())));
|
|
662
662
|
for (const remote of manifest.remotes) {
|
|
663
663
|
const packagesGrid = append(packageSection, $('.package-details'));
|
|
664
|
-
append(packagesGrid, $('.package-detail', undefined, $('.detail-label', undefined, ( localize(
|
|
664
|
+
append(packagesGrid, $('.package-detail', undefined, $('.detail-label', undefined, ( localize(8759, "URL:"))), $('.detail-value', undefined, remote.url)));
|
|
665
665
|
if (remote.type) {
|
|
666
|
-
append(packagesGrid, $('.package-detail', undefined, $('.detail-label', undefined, ( localize(
|
|
666
|
+
append(packagesGrid, $('.package-detail', undefined, $('.detail-label', undefined, ( localize(8766, "Transport:"))), $('.detail-value', undefined, remote.type)));
|
|
667
667
|
}
|
|
668
668
|
if (remote.headers && remote.headers.length > 0) {
|
|
669
669
|
const headerStrings = ( remote.headers.map((header) => `${header.name}: ${header.value ?? ''}`));
|
|
670
|
-
append(packagesGrid, $('.package-detail', undefined, $('.detail-label', undefined, ( localize(
|
|
670
|
+
append(packagesGrid, $('.package-detail', undefined, $('.detail-label', undefined, ( localize(8767, "Headers:"))), $('.detail-value', undefined, headerStrings.join(', '))));
|
|
671
671
|
}
|
|
672
672
|
}
|
|
673
673
|
}
|
|
@@ -742,7 +742,7 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
742
742
|
renderTags(container, extension) {
|
|
743
743
|
if (extension.gallery?.topics?.length) {
|
|
744
744
|
const categoriesContainer = append(container, $('.categories-container.additional-details-element'));
|
|
745
|
-
append(categoriesContainer, $('.additional-details-title', undefined, ( localize(
|
|
745
|
+
append(categoriesContainer, $('.additional-details-title', undefined, ( localize(8768, "Tags"))));
|
|
746
746
|
const categoriesElement = append(categoriesContainer, $('.categories'));
|
|
747
747
|
for (const category of extension.gallery.topics) {
|
|
748
748
|
append(categoriesElement, $('span.category', { tabindex: '0' }, category));
|
|
@@ -754,7 +754,7 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
754
754
|
const manifest = await this.mcpGalleryManifestService.getMcpGalleryManifest();
|
|
755
755
|
if (extension.repository) {
|
|
756
756
|
try {
|
|
757
|
-
resources.push([( localize(
|
|
757
|
+
resources.push([( localize(8769, "Repository")), ThemeIcon.fromId(Codicon.repo.id), ( URI.parse(extension.repository))]);
|
|
758
758
|
}
|
|
759
759
|
catch (error) { }
|
|
760
760
|
}
|
|
@@ -762,14 +762,14 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
762
762
|
const supportUri = getMcpGalleryManifestResourceUri(manifest, McpGalleryResourceType.ContactSupportUri);
|
|
763
763
|
if (supportUri) {
|
|
764
764
|
try {
|
|
765
|
-
resources.push([( localize(
|
|
765
|
+
resources.push([( localize(8770, "Contact Support")), ThemeIcon.fromId(Codicon.commentDiscussion.id), ( URI.parse(supportUri))]);
|
|
766
766
|
}
|
|
767
767
|
catch (error) { }
|
|
768
768
|
}
|
|
769
769
|
}
|
|
770
770
|
if (resources.length) {
|
|
771
771
|
const extensionResourcesContainer = append(container, $('.resources-container.additional-details-element'));
|
|
772
|
-
append(extensionResourcesContainer, $('.additional-details-title', undefined, ( localize(
|
|
772
|
+
append(extensionResourcesContainer, $('.additional-details-title', undefined, ( localize(8771, "Resources"))));
|
|
773
773
|
const resourcesElement = append(extensionResourcesContainer, $('.resources'));
|
|
774
774
|
for (const [label, icon, uri] of resources) {
|
|
775
775
|
const resourceElement = append(resourcesElement, $('.resource'));
|
|
@@ -782,32 +782,32 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
782
782
|
}
|
|
783
783
|
renderInstallInfo(container, extension) {
|
|
784
784
|
const installInfoContainer = append(container, $('.more-info-container.additional-details-element'));
|
|
785
|
-
append(installInfoContainer, $('.additional-details-title', undefined, ( localize(
|
|
785
|
+
append(installInfoContainer, $('.additional-details-title', undefined, ( localize(8772, "Installation"))));
|
|
786
786
|
const installInfo = append(installInfoContainer, $('.more-info'));
|
|
787
|
-
append(installInfo, $('.more-info-entry', undefined, $('div.more-info-entry-name', undefined, ( localize(
|
|
787
|
+
append(installInfo, $('.more-info-entry', undefined, $('div.more-info-entry-name', undefined, ( localize(8773, "Identifier"))), $('code', undefined, extension.name)));
|
|
788
788
|
if (extension.version) {
|
|
789
|
-
append(installInfo, $('.more-info-entry', undefined, $('div.more-info-entry-name', undefined, ( localize(
|
|
789
|
+
append(installInfo, $('.more-info-entry', undefined, $('div.more-info-entry-name', undefined, ( localize(8774, "Version"))), $('code', undefined, extension.version)));
|
|
790
790
|
}
|
|
791
791
|
}
|
|
792
792
|
renderMarketplaceInfo(container, extension) {
|
|
793
793
|
const gallery = extension.gallery;
|
|
794
794
|
const moreInfoContainer = append(container, $('.more-info-container.additional-details-element'));
|
|
795
|
-
append(moreInfoContainer, $('.additional-details-title', undefined, ( localize(
|
|
795
|
+
append(moreInfoContainer, $('.additional-details-title', undefined, ( localize(8775, "Marketplace"))));
|
|
796
796
|
const moreInfo = append(moreInfoContainer, $('.more-info'));
|
|
797
797
|
if (gallery) {
|
|
798
798
|
if (!extension.local) {
|
|
799
|
-
append(moreInfo, $('.more-info-entry', undefined, $('div.more-info-entry-name', undefined, ( localize(
|
|
799
|
+
append(moreInfo, $('.more-info-entry', undefined, $('div.more-info-entry-name', undefined, ( localize(8773, "Identifier"))), $('code', undefined, extension.name)));
|
|
800
800
|
if (gallery.version) {
|
|
801
|
-
append(moreInfo, $('.more-info-entry', undefined, $('div.more-info-entry-name', undefined, ( localize(
|
|
801
|
+
append(moreInfo, $('.more-info-entry', undefined, $('div.more-info-entry-name', undefined, ( localize(8774, "Version"))), $('code', undefined, gallery.version)));
|
|
802
802
|
}
|
|
803
803
|
}
|
|
804
804
|
if (gallery.lastUpdated) {
|
|
805
|
-
append(moreInfo, $('.more-info-entry', undefined, $('div.more-info-entry-name', undefined, ( localize(
|
|
805
|
+
append(moreInfo, $('.more-info-entry', undefined, $('div.more-info-entry-name', undefined, ( localize(8776, "Last Released"))), $('div', {
|
|
806
806
|
'title': ( ( new Date(gallery.lastUpdated)).toString())
|
|
807
807
|
}, fromNow(gallery.lastUpdated, true, true, true))));
|
|
808
808
|
}
|
|
809
809
|
if (gallery.publishDate) {
|
|
810
|
-
append(moreInfo, $('.more-info-entry', undefined, $('div.more-info-entry-name', undefined, ( localize(
|
|
810
|
+
append(moreInfo, $('.more-info-entry', undefined, $('div.more-info-entry-name', undefined, ( localize(8777, "Published"))), $('div', {
|
|
811
811
|
'title': ( ( new Date(gallery.publishDate)).toString())
|
|
812
812
|
}, fromNow(gallery.publishDate, true, true, true))));
|
|
813
813
|
}
|
|
@@ -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(8778, 'Icon of the MCP Server editor.')));
|
|
12
12
|
class McpServerEditorInput extends EditorInput {
|
|
13
13
|
static { this.ID = 'workbench.mcpServer.input2'; }
|
|
14
14
|
get typeId() {
|
|
@@ -29,7 +29,7 @@ class McpServerEditorInput extends EditorInput {
|
|
|
29
29
|
}
|
|
30
30
|
get mcpServer() { return this._mcpServer; }
|
|
31
31
|
getName() {
|
|
32
|
-
return localize(
|
|
32
|
+
return localize(8779, "MCP Server: {0}", this._mcpServer.label);
|
|
33
33
|
}
|
|
34
34
|
getIcon() {
|
|
35
35
|
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(8780, 'Icon used for the MCP server.')));
|
|
7
|
+
const mcpServerRemoteIcon = registerIcon('mcp-server-remote', Codicon.remote, ( localize(8781, 'Icon to indicate that an MCP server is for the remote user scope.')));
|
|
8
|
+
const mcpServerWorkspaceIcon = registerIcon('mcp-server-workspace', Codicon.rootFolder, ( localize(8782, 'Icon to indicate that an MCP server is for the workspace scope.')));
|
|
9
|
+
const mcpStarredIcon = registerIcon('mcp-server-starred', Codicon.starFull, ( localize(8783, 'Icon shown along with the starred status.')));
|
|
10
|
+
const mcpLicenseIcon = registerIcon('mcp-server-license', Codicon.law, ( localize(8784, 'Icon shown along with the license status.')));
|
|
11
11
|
|
|
12
12
|
export { mcpLicenseIcon, mcpServerIcon, mcpServerRemoteIcon, mcpServerWorkspaceIcon, mcpStarredIcon };
|
|
@@ -154,7 +154,7 @@ let PublisherWidget = class PublisherWidget extends McpServerWidget {
|
|
|
154
154
|
this.element.classList.toggle('clickable', !!this.mcpServer.gallery?.publisherUrl);
|
|
155
155
|
this.element.setAttribute('role', 'button');
|
|
156
156
|
this.element.tabIndex = 0;
|
|
157
|
-
this.containerHover = this.disposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.element, ( localize(
|
|
157
|
+
this.containerHover = this.disposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.element, ( localize(8785, "Publisher ({0})", this.mcpServer.publisherDisplayName))));
|
|
158
158
|
append(this.element, publisherDisplayName);
|
|
159
159
|
if (this.mcpServer.gallery?.publisherDomain?.verified) {
|
|
160
160
|
append(this.element, verifiedPublisher);
|
|
@@ -162,7 +162,7 @@ let PublisherWidget = class PublisherWidget extends McpServerWidget {
|
|
|
162
162
|
verifiedPublisher.tabIndex = 0;
|
|
163
163
|
verifiedPublisher.setAttribute('role', 'button');
|
|
164
164
|
this.containerHover.update(( localize(
|
|
165
|
-
|
|
165
|
+
8786,
|
|
166
166
|
"This publisher has verified ownership of {0}",
|
|
167
167
|
this.mcpServer.gallery?.publisherDomain.link
|
|
168
168
|
)));
|
|
@@ -296,12 +296,12 @@ let McpServerHoverWidget = class McpServerHoverWidget extends McpServerWidget {
|
|
|
296
296
|
let addSeparator = false;
|
|
297
297
|
if (this.mcpServer.local?.scope === LocalMcpServerScope.Workspace) {
|
|
298
298
|
markdown.appendMarkdown(`$(${mcpServerWorkspaceIcon.id}) `);
|
|
299
|
-
markdown.appendMarkdown(( localize(
|
|
299
|
+
markdown.appendMarkdown(( localize(8787, "Workspace MCP Server")));
|
|
300
300
|
addSeparator = true;
|
|
301
301
|
}
|
|
302
302
|
if (this.mcpServer.local?.scope === LocalMcpServerScope.RemoteUser) {
|
|
303
303
|
markdown.appendMarkdown(`$(${mcpServerRemoteIcon.id}) `);
|
|
304
|
-
markdown.appendMarkdown(( localize(
|
|
304
|
+
markdown.appendMarkdown(( localize(8788, "Remote MCP Server")));
|
|
305
305
|
addSeparator = true;
|
|
306
306
|
}
|
|
307
307
|
if (this.mcpServer.installState === McpServerInstallState.Installed) {
|
|
@@ -416,7 +416,7 @@ let McpServerStatusWidget = class McpServerStatusWidget extends McpServerWidget
|
|
|
416
416
|
McpServerStatusWidget = ( __decorate([
|
|
417
417
|
( __param(2, IMarkdownRendererService))
|
|
418
418
|
], McpServerStatusWidget));
|
|
419
|
-
const mcpStarredIconColor = registerColor('mcpIcon.starForeground', { light: '#DF6100', dark: '#FF8E00', hcDark: '#FF8E00', hcLight: textLinkForeground }, ( localize(
|
|
419
|
+
const mcpStarredIconColor = registerColor('mcpIcon.starForeground', { light: '#DF6100', dark: '#FF8E00', hcDark: '#FF8E00', hcLight: textLinkForeground }, ( localize(8789, "The icon color for mcp starred.")), false);
|
|
420
420
|
registerThemingParticipant((theme, collector) => {
|
|
421
421
|
const mcpStarredIconColorValue = theme.getColor(mcpStarredIconColor);
|
|
422
422
|
if (mcpStarredIconColorValue) {
|
|
@@ -106,7 +106,7 @@ let McpServersListView = class McpServersListView extends AbstractExtensionsList
|
|
|
106
106
|
return mcpServer?.label ?? '';
|
|
107
107
|
},
|
|
108
108
|
getWidgetAriaLabel() {
|
|
109
|
-
return localize(
|
|
109
|
+
return localize(8790, "MCP Servers");
|
|
110
110
|
}
|
|
111
111
|
},
|
|
112
112
|
overrideStyles: getLocationBasedViewColors(this.viewDescriptorService.getViewLocationById(this.id)).listOverrideStyles,
|
|
@@ -194,42 +194,42 @@ let McpServersListView = class McpServersListView extends AbstractExtensionsList
|
|
|
194
194
|
const iconElement = append(iconContainer, $('span'));
|
|
195
195
|
iconElement.className = ThemeIcon.asClassName(mcpServerIcon);
|
|
196
196
|
const title = append(welcomeContent, $('.mcp-welcome-title'));
|
|
197
|
-
title.textContent = ( localize(
|
|
198
|
-
const settingsCommandLink = ( markdownCommandLink({ id: 'workbench.action.openSettings', arguments: [`@id:${mcpGalleryServiceEnablementConfig}`], title: mcpGalleryServiceEnablementConfig, tooltip: ( localize(
|
|
197
|
+
title.textContent = ( localize(8791, "MCP Servers"));
|
|
198
|
+
const settingsCommandLink = ( markdownCommandLink({ id: 'workbench.action.openSettings', arguments: [`@id:${mcpGalleryServiceEnablementConfig}`], title: mcpGalleryServiceEnablementConfig, tooltip: ( localize(8792, "Open Settings")) }).toString());
|
|
199
199
|
const description = append(welcomeContent, $('.mcp-welcome-description'));
|
|
200
200
|
const markdownResult = this._register(this.markdownRendererService.render(( new MarkdownString(( localize(
|
|
201
|
-
|
|
201
|
+
8793,
|
|
202
202
|
"Browse and install [Model Context Protocol (MCP) servers](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) directly from VS Code to extend agent mode with extra tools for connecting to databases, invoking APIs and performing specialized tasks."
|
|
203
203
|
)), { isTrusted: { enabledCommands: ['workbench.action.openSettings'] } }))
|
|
204
204
|
.appendMarkdown('\n\n')
|
|
205
205
|
.appendMarkdown(( localize(
|
|
206
|
-
|
|
206
|
+
8794,
|
|
207
207
|
"This feature is currently in preview. You can disable it anytime using the setting {0}.",
|
|
208
208
|
settingsCommandLink
|
|
209
209
|
)))));
|
|
210
210
|
description.appendChild(markdownResult.element);
|
|
211
211
|
const buttonContainer = append(welcomeContent, $('.mcp-welcome-button-container'));
|
|
212
212
|
const button = this._register(( new Button(buttonContainer, {
|
|
213
|
-
title: ( localize(
|
|
213
|
+
title: ( localize(8795, "Enable MCP Servers Marketplace")),
|
|
214
214
|
...defaultButtonStyles
|
|
215
215
|
})));
|
|
216
|
-
button.label = ( localize(
|
|
216
|
+
button.label = ( localize(8795, "Enable MCP Servers Marketplace"));
|
|
217
217
|
this._register(button.onDidClick(async () => {
|
|
218
218
|
const { result } = await this.dialogService.prompt({
|
|
219
219
|
type: 'info',
|
|
220
|
-
message: ( localize(
|
|
220
|
+
message: ( localize(8796, "Enable MCP Servers Marketplace?")),
|
|
221
221
|
custom: {
|
|
222
222
|
markdownDetails: [{
|
|
223
223
|
markdown: ( new MarkdownString(( localize(
|
|
224
|
-
|
|
224
|
+
8794,
|
|
225
225
|
"This feature is currently in preview. You can disable it anytime using the setting {0}.",
|
|
226
226
|
settingsCommandLink
|
|
227
227
|
)), { isTrusted: true }))
|
|
228
228
|
}]
|
|
229
229
|
},
|
|
230
230
|
buttons: [
|
|
231
|
-
{ label: ( localize(
|
|
232
|
-
{ label: ( localize(
|
|
231
|
+
{ label: ( localize(8797, "Enable")), run: () => true },
|
|
232
|
+
{ label: ( localize(8798, "Cancel")), run: () => false }
|
|
233
233
|
]
|
|
234
234
|
});
|
|
235
235
|
if (result) {
|
|
@@ -249,7 +249,7 @@ let McpServersListView = class McpServersListView extends AbstractExtensionsList
|
|
|
249
249
|
}
|
|
250
250
|
else if (count === 0) {
|
|
251
251
|
this.bodyTemplate.messageSeverityIcon.className = '';
|
|
252
|
-
this.bodyTemplate.messageBox.textContent = ( localize(
|
|
252
|
+
this.bodyTemplate.messageBox.textContent = ( localize(8799, "No MCP Servers found."));
|
|
253
253
|
}
|
|
254
254
|
if (this.bodyTemplate.messageBox.textContent) {
|
|
255
255
|
alert(this.bodyTemplate.messageBox.textContent);
|
|
@@ -445,7 +445,7 @@ class McpServersViewsContribution extends Disposable {
|
|
|
445
445
|
( Registry.as(Extensions.ViewsRegistry)).registerViews([
|
|
446
446
|
{
|
|
447
447
|
id: InstalledMcpServersViewId,
|
|
448
|
-
name: ( localize2(
|
|
448
|
+
name: ( localize2(8800, "MCP Servers - Installed")),
|
|
449
449
|
ctorDescriptor: ( new SyncDescriptor(McpServersListView, [{}])),
|
|
450
450
|
when: ( ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext)),
|
|
451
451
|
weight: 40,
|
|
@@ -454,7 +454,7 @@ class McpServersViewsContribution extends Disposable {
|
|
|
454
454
|
},
|
|
455
455
|
{
|
|
456
456
|
id: 'workbench.views.mcp.default.marketplace',
|
|
457
|
-
name: ( localize2(
|
|
457
|
+
name: ( localize2(8801, "MCP Servers")),
|
|
458
458
|
ctorDescriptor: ( new SyncDescriptor(DefaultBrowseMcpServersView, [{}])),
|
|
459
459
|
when: ( ContextKeyExpr.and(DefaultViewsContext, ( HasInstalledMcpServersContext.toNegated()), ( ChatContextKeys.Setup.hidden.negate()), ( McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available)), ( ContextKeyExpr.or(( ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`)), ( ProductQualityContext.notEqualsTo('stable')), ( ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`)))))),
|
|
460
460
|
weight: 40,
|
|
@@ -463,13 +463,13 @@ class McpServersViewsContribution extends Disposable {
|
|
|
463
463
|
},
|
|
464
464
|
{
|
|
465
465
|
id: 'workbench.views.mcp.marketplace',
|
|
466
|
-
name: ( localize2(
|
|
466
|
+
name: ( localize2(8801, "MCP Servers")),
|
|
467
467
|
ctorDescriptor: ( new SyncDescriptor(McpServersListView, [{}])),
|
|
468
468
|
when: ( ContextKeyExpr.and(SearchMcpServersContext, ( McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available)), ( ContextKeyExpr.or(( ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`)), ( ProductQualityContext.notEqualsTo('stable')), ( ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`)))))),
|
|
469
469
|
},
|
|
470
470
|
{
|
|
471
471
|
id: 'workbench.views.mcp.default.welcomeView',
|
|
472
|
-
name: ( localize2(
|
|
472
|
+
name: ( localize2(8801, "MCP Servers")),
|
|
473
473
|
ctorDescriptor: ( new SyncDescriptor(DefaultBrowseMcpServersView, [{ showWelcome: true }])),
|
|
474
474
|
when: ( ContextKeyExpr.and(DefaultViewsContext, ( HasInstalledMcpServersContext.toNegated()), ( ChatContextKeys.Setup.hidden.negate()), ( McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available)), ( ( ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`)).negate()), ( ProductQualityContext.isEqualTo('stable')), ( ( ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`)).negate()))),
|
|
475
475
|
weight: 40,
|
|
@@ -478,7 +478,7 @@ class McpServersViewsContribution extends Disposable {
|
|
|
478
478
|
},
|
|
479
479
|
{
|
|
480
480
|
id: 'workbench.views.mcp.welcomeView',
|
|
481
|
-
name: ( localize2(
|
|
481
|
+
name: ( localize2(8801, "MCP Servers")),
|
|
482
482
|
ctorDescriptor: ( new SyncDescriptor(McpServersListView, [{ showWelcome: true }])),
|
|
483
483
|
when: ( ContextKeyExpr.and(SearchMcpServersContext, ( McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available)), ( ( ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`)).negate()), ( ProductQualityContext.isEqualTo('stable')), ( ( ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`)).negate()))),
|
|
484
484
|
}
|
|
@@ -366,7 +366,7 @@ let McpWorkbenchService = class McpWorkbenchService extends Disposable {
|
|
|
366
366
|
const existing = result.get(server.name);
|
|
367
367
|
if (existing) {
|
|
368
368
|
this.logService.warn(( localize(
|
|
369
|
-
|
|
369
|
+
8802,
|
|
370
370
|
"Overwriting mcp server '{0}' from {1} with {2}.",
|
|
371
371
|
server.name,
|
|
372
372
|
server.mcpResource.path,
|
|
@@ -379,7 +379,7 @@ let McpWorkbenchService = class McpWorkbenchService extends Disposable {
|
|
|
379
379
|
const existing = result.get(server.name);
|
|
380
380
|
if (existing) {
|
|
381
381
|
this.logService.warn(( localize(
|
|
382
|
-
|
|
382
|
+
8802,
|
|
383
383
|
"Overwriting mcp server '{0}' from {1} with {2}.",
|
|
384
384
|
server.name,
|
|
385
385
|
server.mcpResource.path,
|
|
@@ -392,7 +392,7 @@ let McpWorkbenchService = class McpWorkbenchService extends Disposable {
|
|
|
392
392
|
}
|
|
393
393
|
canInstall(mcpServer) {
|
|
394
394
|
if (!(mcpServer instanceof McpWorkbenchServer)) {
|
|
395
|
-
return ( new MarkdownString()).appendText(( localize(
|
|
395
|
+
return ( new MarkdownString()).appendText(( localize(8803, "The provided object is not an mcp server.")));
|
|
396
396
|
}
|
|
397
397
|
if (mcpServer.gallery) {
|
|
398
398
|
const result = this.mcpManagementService.canInstall(mcpServer.gallery);
|
|
@@ -409,7 +409,7 @@ let McpWorkbenchService = class McpWorkbenchService extends Disposable {
|
|
|
409
409
|
return result;
|
|
410
410
|
}
|
|
411
411
|
return ( new MarkdownString()).appendText(( localize(
|
|
412
|
-
|
|
412
|
+
8804,
|
|
413
413
|
"Cannot install the '{0}' MCP Server because it is not available in this setup.",
|
|
414
414
|
mcpServer.label
|
|
415
415
|
)));
|
|
@@ -512,7 +512,7 @@ let McpWorkbenchService = class McpWorkbenchService extends Disposable {
|
|
|
512
512
|
id: USER_CONFIG_ID,
|
|
513
513
|
key: 'userLocalValue',
|
|
514
514
|
target: ConfigurationTarget.USER_LOCAL,
|
|
515
|
-
label: ( localize(
|
|
515
|
+
label: ( localize(8805, 'Global in {0}', this.productService.nameShort)),
|
|
516
516
|
scope: StorageScope.PROFILE,
|
|
517
517
|
order: McpCollectionSortOrder.User,
|
|
518
518
|
uri: mcpResource,
|
|
@@ -671,7 +671,7 @@ let McpWorkbenchService = class McpWorkbenchService extends Disposable {
|
|
|
671
671
|
message: {
|
|
672
672
|
severity: Severity.Warning,
|
|
673
673
|
text: ( new MarkdownString(( localize(
|
|
674
|
-
|
|
674
|
+
8806,
|
|
675
675
|
"This MCP Server is disabled because MCP servers are configured to be disabled in the Editor. Please check your [settings]({0}).",
|
|
676
676
|
settingsCommandLink
|
|
677
677
|
))))
|
|
@@ -685,7 +685,7 @@ let McpWorkbenchService = class McpWorkbenchService extends Disposable {
|
|
|
685
685
|
message: {
|
|
686
686
|
severity: Severity.Warning,
|
|
687
687
|
text: ( new MarkdownString(( localize(
|
|
688
|
-
|
|
688
|
+
8807,
|
|
689
689
|
"This MCP Server is disabled because it is configured to be disabled in the Editor. Please check your [settings]({0}).",
|
|
690
690
|
settingsCommandLink
|
|
691
691
|
))))
|
|
@@ -699,7 +699,7 @@ let McpWorkbenchService = class McpWorkbenchService extends Disposable {
|
|
|
699
699
|
message: {
|
|
700
700
|
severity: Severity.Warning,
|
|
701
701
|
text: ( new MarkdownString(( localize(
|
|
702
|
-
|
|
702
|
+
8807,
|
|
703
703
|
"This MCP Server is disabled because it is configured to be disabled in the Editor. Please check your [settings]({0}).",
|
|
704
704
|
settingsCommandLink
|
|
705
705
|
))))
|
|
@@ -135,20 +135,20 @@ let ExtensionMcpDiscovery = ExtensionMcpDiscovery_1 = class ExtensionMcpDiscover
|
|
|
135
135
|
}
|
|
136
136
|
static _validate(user) {
|
|
137
137
|
if (!Array.isArray(user.value)) {
|
|
138
|
-
user.collector.error(( localize(
|
|
138
|
+
user.collector.error(( localize(8808, "Expected an array of MCP collections")));
|
|
139
139
|
return false;
|
|
140
140
|
}
|
|
141
141
|
for (const contribution of user.value) {
|
|
142
142
|
if (typeof contribution.id !== 'string' || isFalsyOrWhitespace(contribution.id)) {
|
|
143
|
-
user.collector.error(( localize(
|
|
143
|
+
user.collector.error(( localize(8809, "Expected 'id' to be a non-empty string.")));
|
|
144
144
|
return false;
|
|
145
145
|
}
|
|
146
146
|
if (typeof contribution.label !== 'string' || isFalsyOrWhitespace(contribution.label)) {
|
|
147
|
-
user.collector.error(( localize(
|
|
147
|
+
user.collector.error(( localize(8810, "Expected 'label' to be a non-empty string.")));
|
|
148
148
|
return false;
|
|
149
149
|
}
|
|
150
150
|
if (contribution.when !== undefined && (typeof contribution.when !== 'string' || isFalsyOrWhitespace(contribution.when))) {
|
|
151
|
-
user.collector.error(( localize(
|
|
151
|
+
user.collector.error(( localize(8811, "Expected 'when' to be a non-empty string.")));
|
|
152
152
|
return false;
|
|
153
153
|
}
|
|
154
154
|
}
|
|
@@ -83,7 +83,7 @@ let NativeFilesystemMcpDiscovery = class NativeFilesystemMcpDiscovery extends Fi
|
|
|
83
83
|
this.suffix = '';
|
|
84
84
|
if (remoteAuthority) {
|
|
85
85
|
this.suffix = ' ' + ( localize(
|
|
86
|
-
|
|
86
|
+
8812,
|
|
87
87
|
' on {0}',
|
|
88
88
|
labelService.getHostLabel(Schemas.vscodeRemote, remoteAuthority)
|
|
89
89
|
));
|
|
@@ -15,19 +15,19 @@ var McpContextKeys;
|
|
|
15
15
|
McpContextKeys.serverCount = ( new RawContextKey(
|
|
16
16
|
'mcp.serverCount',
|
|
17
17
|
undefined,
|
|
18
|
-
{ type: 'number', description: ( localize(
|
|
18
|
+
{ type: 'number', description: ( localize(8844, "Context key that has the number of registered MCP servers")) }
|
|
19
19
|
));
|
|
20
20
|
McpContextKeys.hasUnknownTools = ( new RawContextKey(
|
|
21
21
|
'mcp.hasUnknownTools',
|
|
22
22
|
undefined,
|
|
23
|
-
{ type: 'boolean', description: ( localize(
|
|
23
|
+
{ type: 'boolean', description: ( localize(8845, "Indicates whether there are MCP servers with unknown tools.")) }
|
|
24
24
|
));
|
|
25
25
|
McpContextKeys.hasServersWithErrors = ( new RawContextKey(
|
|
26
26
|
'mcp.hasServersWithErrors',
|
|
27
27
|
undefined,
|
|
28
|
-
{ type: 'boolean', description: ( localize(
|
|
28
|
+
{ type: 'boolean', description: ( localize(8846, "Indicates whether there are any MCP servers with errors.")) }
|
|
29
29
|
));
|
|
30
|
-
McpContextKeys.toolsCount = ( new RawContextKey('mcp.toolsCount', undefined, { type: 'number', description: ( localize(
|
|
30
|
+
McpContextKeys.toolsCount = ( new RawContextKey('mcp.toolsCount', undefined, { type: 'number', description: ( localize(8847, "Context key that has the number of registered MCP tools")) }));
|
|
31
31
|
})(McpContextKeys || (McpContextKeys = {}));
|
|
32
32
|
let McpContextKeysController = class McpContextKeysController extends Disposable {
|
|
33
33
|
static { this.ID = 'workbench.contrib.mcp.contextKey'; }
|
|
@@ -45,7 +45,7 @@ let McpLanguageModelToolContribution = class McpLanguageModelToolContribution ex
|
|
|
45
45
|
const source = mcpServerToSourceData(server);
|
|
46
46
|
const toolSet = store.add(this._toolsService.createToolSet(source, server.definition.id, server.definition.label, {
|
|
47
47
|
icon: Codicon.mcp,
|
|
48
|
-
description: ( localize(
|
|
48
|
+
description: ( localize(8848, "{0}: All Tools", server.definition.label))
|
|
49
49
|
}));
|
|
50
50
|
return { toolSet, source };
|
|
51
51
|
}));
|
|
@@ -138,14 +138,14 @@ let McpToolImplementation = class McpToolImplementation {
|
|
|
138
138
|
const tool = this._tool;
|
|
139
139
|
const server = this._server;
|
|
140
140
|
const mcpToolWarning = ( localize(
|
|
141
|
-
|
|
141
|
+
8849,
|
|
142
142
|
"Note that MCP servers or malicious conversation content may attempt to misuse '{0}' through tools.",
|
|
143
143
|
this._productService.nameShort
|
|
144
144
|
));
|
|
145
145
|
const title = tool.definition.annotations?.title || tool.definition.title || ('`' + tool.definition.name + '`');
|
|
146
146
|
const confirm = {};
|
|
147
147
|
if (!tool.definition.annotations?.readOnlyHint) {
|
|
148
|
-
confirm.title = ( new MarkdownString(( localize(
|
|
148
|
+
confirm.title = ( new MarkdownString(( localize(8850, "Run {0}", title))));
|
|
149
149
|
confirm.message = ( new MarkdownString(tool.definition.description, { supportThemeIcons: true }));
|
|
150
150
|
confirm.disclaimer = mcpToolWarning;
|
|
151
151
|
confirm.allowAutoConfirm = true;
|
|
@@ -155,9 +155,9 @@ let McpToolImplementation = class McpToolImplementation {
|
|
|
155
155
|
}
|
|
156
156
|
return {
|
|
157
157
|
confirmationMessages: confirm,
|
|
158
|
-
invocationMessage: ( new MarkdownString(( localize(
|
|
159
|
-
pastTenseMessage: ( new MarkdownString(( localize(
|
|
160
|
-
originMessage: ( localize(
|
|
158
|
+
invocationMessage: ( new MarkdownString(( localize(8851, "Running {0}", title)))),
|
|
159
|
+
pastTenseMessage: ( new MarkdownString(( localize(8852, "Ran {0} ", title)))),
|
|
160
|
+
originMessage: ( localize(8853, "{0} (MCP Server)", server.definition.label)),
|
|
161
161
|
toolSpecificData: {
|
|
162
162
|
kind: 'input',
|
|
163
163
|
rawInput: context.parameters
|