extension.ts•3.29 kB
import * as vscode from 'vscode';
import { MCPServer } from './mcpServer';
import { Logger } from './logger';
let server: MCPServer | undefined;
let statusBarItem: vscode.StatusBarItem;
let logger: Logger;
export function activate(context: vscode.ExtensionContext) {
logger = new Logger();
logger.info('VSCode MCP Language Server extension activating...');
// Create status bar item
statusBarItem = vscode.window.createStatusBarItem(
vscode.StatusBarAlignment.Right,
100
);
statusBarItem.command = 'vscodeMcpLs.showStatus';
context.subscriptions.push(statusBarItem);
// Start server if enabled
const config = vscode.workspace.getConfiguration('vscodeMcpLs');
if (config.get('enabled', true)) {
startServer();
}
// Register commands
context.subscriptions.push(
vscode.commands.registerCommand('vscodeMcpLs.restart', () => {
logger.info('Restarting MCP server...');
stopServer();
startServer();
vscode.window.showInformationMessage('MCP Language Server restarted');
})
);
context.subscriptions.push(
vscode.commands.registerCommand('vscodeMcpLs.showStatus', () => {
const status = server?.isRunning() ? 'Running' : 'Stopped';
const port = vscode.workspace.getConfiguration('vscodeMcpLs').get('port', 3100);
vscode.window.showInformationMessage(
`MCP Language Server: ${status} on port ${port}`
);
})
);
// Watch for configuration changes
context.subscriptions.push(
vscode.workspace.onDidChangeConfiguration((e) => {
if (e.affectsConfiguration('vscodeMcpLs')) {
const config = vscode.workspace.getConfiguration('vscodeMcpLs');
if (config.get('enabled', true) && !server?.isRunning()) {
startServer();
} else if (!config.get('enabled', true) && server?.isRunning()) {
stopServer();
}
}
})
);
logger.info('VSCode MCP Language Server extension activated');
}
export function deactivate() {
logger?.info('VSCode MCP Language Server extension deactivating...');
stopServer();
statusBarItem?.dispose();
}
function startServer() {
try {
const config = vscode.workspace.getConfiguration('vscodeMcpLs');
const port = config.get('port', 3100);
const logLevel = config.get('logLevel', 'info');
logger.setLevel(logLevel as 'debug' | 'info' | 'warn' | 'error');
server = new MCPServer(port, logger);
server.start();
statusBarItem.text = `$(plug) MCP LS:${port}`;
statusBarItem.tooltip = `MCP Language Server running on port ${port}`;
statusBarItem.show();
logger.info(`MCP Language Server started on port ${port}`);
} catch (error) {
logger.error('Failed to start MCP server:', error);
vscode.window.showErrorMessage(
`Failed to start MCP Language Server: ${error}`
);
}
}
function stopServer() {
if (server) {
server.stop();
server = undefined;
statusBarItem.hide();
logger.info('MCP Language Server stopped');
}
}