Skip to content

Commit b3f848b

Browse files
authored
add mcp servers feature contribution (microsoft#254862)
1 parent 1dc489a commit b3f848b

File tree

1 file changed

+45
-1
lines changed

1 file changed

+45
-1
lines changed

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

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6+
import { MarkdownString } from '../../../../base/common/htmlContent.js';
67
import { IJSONSchema, IJSONSchemaMap } from '../../../../base/common/jsonSchema.js';
8+
import { Disposable } from '../../../../base/common/lifecycle.js';
79
import { localize } from '../../../../nls.js';
8-
import { IMcpCollectionContribution } from '../../../../platform/extensions/common/extensions.js';
10+
import { IExtensionManifest, IMcpCollectionContribution } from '../../../../platform/extensions/common/extensions.js';
11+
import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js';
12+
import { Registry } from '../../../../platform/registry/common/platform.js';
913
import { mcpSchemaId } from '../../../services/configuration/common/configuration.js';
1014
import { inputsSchema } from '../../../services/configurationResolver/common/configurationResolverSchema.js';
15+
import { Extensions, IExtensionFeaturesRegistry, IExtensionFeatureTableRenderer, IRenderedData, IRowData, ITableData } from '../../../services/extensionManagement/common/extensionFeatures.js';
1116
import { IExtensionPointDescriptor } from '../../../services/extensions/common/extensionsRegistry.js';
1217

1318
const mcpActivationEventPrefix = 'onMcpCollection:';
@@ -239,3 +244,42 @@ export const mcpContributionPoint: IExtensionPointDescriptor<IMcpCollectionContr
239244
}
240245
}
241246
};
247+
248+
class McpServerDefinitionsProviderRenderer extends Disposable implements IExtensionFeatureTableRenderer {
249+
250+
readonly type = 'table';
251+
252+
shouldRender(manifest: IExtensionManifest): boolean {
253+
return !!manifest.contributes?.mcpServerDefinitionProviders && Array.isArray(manifest.contributes.mcpServerDefinitionProviders) && manifest.contributes.mcpServerDefinitionProviders.length > 0;
254+
}
255+
256+
render(manifest: IExtensionManifest): IRenderedData<ITableData> {
257+
const mcpServerDefinitionProviders = manifest.contributes?.mcpServerDefinitionProviders ?? [];
258+
const headers = [localize('id', "ID"), localize('name', "Name")];
259+
const rows: IRowData[][] = mcpServerDefinitionProviders
260+
.map(mcpServerDefinitionProvider => {
261+
return [
262+
new MarkdownString().appendMarkdown(`\`${mcpServerDefinitionProvider.id}\``),
263+
mcpServerDefinitionProvider.label
264+
];
265+
});
266+
267+
return {
268+
data: {
269+
headers,
270+
rows
271+
},
272+
dispose: () => { }
273+
};
274+
}
275+
}
276+
277+
Registry.as<IExtensionFeaturesRegistry>(Extensions.ExtensionFeaturesRegistry).registerExtensionFeature({
278+
id: mcpConfigurationSection,
279+
label: localize('mcpServerDefinitionProviders', "MCP Servers"),
280+
access: {
281+
canToggle: false
282+
},
283+
renderer: new SyncDescriptor(McpServerDefinitionsProviderRenderer),
284+
});
285+

0 commit comments

Comments
 (0)