Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/platform/mcp/common/mcpGalleryManifest.ts
5313 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { Event } from '../../../base/common/event.js';
7
import { createDecorator } from '../../instantiation/common/instantiation.js';
8
9
export const enum McpGalleryResourceType {
10
McpServersQueryService = 'McpServersQueryService',
11
McpServerWebUri = 'McpServerWebUriTemplate',
12
McpServerVersionUri = 'McpServerVersionUriTemplate',
13
McpServerIdUri = 'McpServerIdUriTemplate',
14
McpServerLatestVersionUri = 'McpServerLatestVersionUriTemplate',
15
McpServerNamedResourceUri = 'McpServerNamedResourceUriTemplate',
16
PublisherUriTemplate = 'PublisherUriTemplate',
17
ContactSupportUri = 'ContactSupportUri',
18
PrivacyPolicyUri = 'PrivacyPolicyUri',
19
TermsOfServiceUri = 'TermsOfServiceUri',
20
ReportUri = 'ReportUri',
21
}
22
23
export type McpGalleryManifestResource = {
24
readonly id: string;
25
readonly type: string;
26
};
27
28
export interface IMcpGalleryManifest {
29
readonly version: string;
30
readonly url: string;
31
readonly resources: readonly McpGalleryManifestResource[];
32
}
33
34
export const enum McpGalleryManifestStatus {
35
Available = 'available',
36
Unavailable = 'unavailable'
37
}
38
39
export const IMcpGalleryManifestService = createDecorator<IMcpGalleryManifestService>('IMcpGalleryManifestService');
40
41
export interface IMcpGalleryManifestService {
42
readonly _serviceBrand: undefined;
43
44
readonly mcpGalleryManifestStatus: McpGalleryManifestStatus;
45
readonly onDidChangeMcpGalleryManifestStatus: Event<McpGalleryManifestStatus>;
46
readonly onDidChangeMcpGalleryManifest: Event<IMcpGalleryManifest | null>;
47
getMcpGalleryManifest(): Promise<IMcpGalleryManifest | null>;
48
}
49
50
export function getMcpGalleryManifestResourceUri(manifest: IMcpGalleryManifest, type: string): string | undefined {
51
const [name, version] = type.split('/');
52
for (const resource of manifest.resources) {
53
const [r, v] = resource.type.split('/');
54
if (r !== name) {
55
continue;
56
}
57
if (!version || v === version) {
58
return resource.id;
59
}
60
break;
61
}
62
return undefined;
63
}
64
65