Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/platform/mcp/common/mcpService.ts
13401 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 type { Event, McpGateway, McpServerDefinition } from 'vscode';
7
import { createServiceIdentifier } from '../../../util/common/services';
8
import { Emitter } from '../../../util/vs/base/common/event';
9
import { DisposableStore, IDisposable } from '../../../util/vs/base/common/lifecycle';
10
import { URI } from '../../../util/vs/base/common/uri';
11
12
export const IMcpService = createServiceIdentifier<IMcpService>('IMcpService');
13
14
export interface IMcpService {
15
readonly _serviceBrand: undefined;
16
readonly mcpServerDefinitions: readonly McpServerDefinition[];
17
readonly onDidChangeMcpServerDefinitions: Event<void>;
18
startMcpGateway(resource: URI): Promise<McpGateway | undefined>;
19
}
20
21
export abstract class AbstractMcpService implements IMcpService {
22
declare readonly _serviceBrand: undefined;
23
abstract readonly mcpServerDefinitions: readonly McpServerDefinition[];
24
abstract readonly onDidChangeMcpServerDefinitions: Event<void>;
25
abstract startMcpGateway(resource: URI): Promise<McpGateway | undefined>;
26
}
27
28
export class NullMcpService extends AbstractMcpService implements IDisposable {
29
private readonly disposables = new DisposableStore();
30
31
readonly mcpServerDefinitions: McpServerDefinition[] = [];
32
readonly onDidChangeMcpServerDefinitions: Event<void> = this.disposables.add(new Emitter<void>()).event;
33
async startMcpGateway(_resource: URI): Promise<McpGateway | undefined> {
34
return undefined;
35
}
36
public dispose() {
37
this.disposables.dispose();
38
}
39
}
40
41