11import * as vscode from 'vscode' ;
2- import WebSocket from 'ws' ;
3- import { Server } from '@modelcontextprotocol/sdk/server/index.js' ;
4- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js' ;
5- import { CallToolRequestSchema , ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js' ;
6- import { MCPServerConfig , CommandExecutionResult , LogContext } from './types.js' ;
7- import { VSCodeCommandsTools } from './tools/vscode-commands.js' ;
2+ import * as WebSocket from 'ws' ;
3+ import { MCPServerConfig , CommandExecutionResult , LogContext } from './types' ;
4+ import { VSCodeCommandsTools } from './tools/vscode-commands' ;
5+
6+ // Dynamic imports for ES modules
7+ let Server : any ;
8+ let StdioServerTransport : any ;
9+ let CallToolRequestSchema : any ;
10+ let ListToolsRequestSchema : any ;
811
912export class MCPVSCodeServer {
1013 private server : any ;
@@ -22,10 +25,20 @@ export class MCPVSCodeServer {
2225 this . tools = new VSCodeCommandsTools ( this . config ) ;
2326 }
2427
25- private initializeServer ( ) : void {
28+ private async loadESModules ( ) : Promise < void > {
2629 if ( this . initialized ) return ;
2730
2831 try {
32+ // Dynamic import of ES modules
33+ const serverModule = await import ( '@modelcontextprotocol/sdk/server/index.js' ) ;
34+ const stdioModule = await import ( '@modelcontextprotocol/sdk/server/stdio.js' ) ;
35+ const typesModule = await import ( '@modelcontextprotocol/sdk/types.js' ) ;
36+
37+ Server = serverModule . Server ;
38+ StdioServerTransport = stdioModule . StdioServerTransport ;
39+ CallToolRequestSchema = typesModule . CallToolRequestSchema ;
40+ ListToolsRequestSchema = typesModule . ListToolsRequestSchema ;
41+
2942 // 初始化 MCP 服務器
3043 this . server = new Server ( {
3144 name : 'mcp-vscode-commands' ,
@@ -38,7 +51,7 @@ export class MCPVSCodeServer {
3851 this . initialized = true ;
3952 this . log ( 'info' , 'MCP VSCode Server 已初始化' ) ;
4053 } catch ( error ) {
41- this . log ( 'error' , 'Failed to initialize server ' , { error : String ( error ) } ) ;
54+ this . log ( 'error' , 'Failed to load ES modules ' , { error : String ( error ) } ) ;
4255 throw error ;
4356 }
4457 }
@@ -167,8 +180,8 @@ export class MCPVSCodeServer {
167180
168181 async start ( ) : Promise < void > {
169182 try {
170- // Initialize server
171- this . initializeServer ( ) ;
183+ // Load ES modules first
184+ await this . loadESModules ( ) ;
172185
173186 // 同時啟動 stdio 和 WebSocket transport
174187 await this . startStdioTransport ( ) ;
@@ -189,11 +202,11 @@ export class MCPVSCodeServer {
189202 }
190203
191204 private async startWebSocketServer ( ) : Promise < void > {
192- return new Promise ( async ( resolve , reject ) => {
205+ return new Promise ( ( resolve , reject ) => {
193206 try {
194207 // 創建 HTTP server
195- const { createServer } = await import ( 'http' ) ;
196- this . httpServer = createServer ( ) ;
208+ const http = require ( 'http' ) ;
209+ this . httpServer = http . createServer ( ) ;
197210
198211 // 創建 WebSocket server
199212 this . wsServer = new WebSocket . Server ( {
@@ -222,9 +235,9 @@ export class MCPVSCodeServer {
222235 }
223236
224237 private async handleWebSocketConnection ( ws : WebSocket . WebSocket ) : Promise < void > {
225- // Ensure server is initialized
238+ // Ensure ES modules are loaded
226239 if ( ! this . initialized ) {
227- this . initializeServer ( ) ;
240+ await this . loadESModules ( ) ;
228241 }
229242
230243 // 為每個 WebSocket 連接創建新的 server 實例
0 commit comments