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 { Disposable } from '../../../base/common/lifecycle.js';
7
>
import * as nls from '../../../nls.js';
8
>
import { createCommandUri, IMarkdownString, MarkdownString } from '../../../base/common/htmlContent.js';
9
>
import { IConfigurationService } from '../../configuration/common/configuration.js';
10
>
import { Emitter } from '../../../base/common/event.js';
11
>
import { hasKey } from '../../../base/common/types.js';
12
>
import { checkMcpServerAllowed, getMcpServerMatchers, IMcpServerIdentity, McpServerAllowResult } from './allowedMcpServers.js';
13
>
import { IAllowedMcpServersService, IGalleryMcpServer, IInstallableMcpServer, ILocalMcpServer, mcpAccessConfig, mcpAllowedServersConfig, mcpDeniedServersConfig, McpAccessValue } from './mcpManagement.js';
14
>
import { McpServerType } from './mcpPlatformTypes.js';
15
>
16
>
export class AllowedMcpServersService extends Disposable implements IAllowedMcpServersService {
17
>
18
>
_serviceBrand: undefined;
19
>
20
>
private _onDidChangeAllowedMcpServers = this._register(new Emitter<void>());
21
>
readonly onDidChangeAllowedMcpServers = this._onDidChangeAllowedMcpServers.event;
22
>
23
>
constructor(
24
>
@IConfigurationService private readonly configurationService: IConfigurationService
25
>
) {
26
>
super();
27
>
this._register(this.configurationService.onDidChangeConfiguration(e => {
28
if (e.affectsConfiguration(mcpAccessConfig) || e.affectsConfiguration(mcpAllowedServersConfig) || e.affectsConfiguration(mcpDeniedServersConfig)) {
29
this._onDidChangeAllowedMcpServers.fire();
30
}
32
>
}
33
>
34
>
isAllowed(mcpServer: IGalleryMcpServer | ILocalMcpServer | IInstallableMcpServer): true | IMarkdownString {
35
return this.isServerAllowed(this.toIdentity(mcpServer));
36
}
38
>
isServerAllowed(identity: IMcpServerIdentity): true | IMarkdownString {
39
>
if (this.configurationService.getValue(mcpAccessConfig) === McpAccessValue.None) {
40
const settingsCommandLink = createCommandUri('workbench.action.openSettings', { query: `@id:${mcpAccessConfig}` }).toString();
41
return new MarkdownString(nls.localize('mcp servers are not allowed', "Model Context Protocol servers are disabled in the Editor. Please check your [settings]({0}).", settingsCommandLink));