255 lines
7.3 KiB
TypeScript
Executable File
255 lines
7.3 KiB
TypeScript
Executable File
import { MCPServer } from './mcp-server';
|
|
import { readSettings, saveSettings } from './settings';
|
|
import { MCPServerSettings } from './types';
|
|
import { ToolManager } from './tools/tool-manager';
|
|
|
|
let mcpServer: MCPServer | null = null;
|
|
let toolManager: ToolManager;
|
|
|
|
/**
|
|
* @en Registration method for the main process of Extension
|
|
* @zh 为扩展的主进程的注册方法
|
|
*/
|
|
export const methods: { [key: string]: (...any: any) => any } = {
|
|
/**
|
|
* @en Open the MCP server panel
|
|
* @zh 打开 MCP 服务器面板
|
|
*/
|
|
openPanel() {
|
|
Editor.Panel.open('cocos-mcp-server');
|
|
},
|
|
|
|
|
|
|
|
/**
|
|
* @en Start the MCP server
|
|
* @zh 启动 MCP 服务器
|
|
*/
|
|
async startServer() {
|
|
if (mcpServer) {
|
|
// 确保使用最新的工具配置
|
|
const enabledTools = toolManager.getEnabledTools();
|
|
mcpServer.updateEnabledTools(enabledTools);
|
|
await mcpServer.start();
|
|
} else {
|
|
console.warn('[MCP插件] mcpServer 未初始化');
|
|
}
|
|
},
|
|
|
|
/**
|
|
* @en Stop the MCP server
|
|
* @zh 停止 MCP 服务器
|
|
*/
|
|
async stopServer() {
|
|
if (mcpServer) {
|
|
mcpServer.stop();
|
|
} else {
|
|
console.warn('[MCP插件] mcpServer 未初始化');
|
|
}
|
|
},
|
|
|
|
/**
|
|
* @en Get server status
|
|
* @zh 获取服务器状态
|
|
*/
|
|
getServerStatus() {
|
|
const status = mcpServer ? mcpServer.getStatus() : { running: false, port: 0, clients: 0 };
|
|
const settings = mcpServer ? mcpServer.getSettings() : readSettings();
|
|
return {
|
|
...status,
|
|
settings: settings
|
|
};
|
|
},
|
|
|
|
/**
|
|
* @en Update server settings
|
|
* @zh 更新服务器设置
|
|
*/
|
|
updateSettings(settings: MCPServerSettings) {
|
|
saveSettings(settings);
|
|
if (mcpServer) {
|
|
mcpServer.stop();
|
|
mcpServer = new MCPServer(settings);
|
|
mcpServer.start();
|
|
} else {
|
|
mcpServer = new MCPServer(settings);
|
|
mcpServer.start();
|
|
}
|
|
},
|
|
|
|
/**
|
|
* @en Get tools list
|
|
* @zh 获取工具列表
|
|
*/
|
|
getToolsList() {
|
|
return mcpServer ? mcpServer.getAvailableTools() : [];
|
|
},
|
|
|
|
getFilteredToolsList() {
|
|
if (!mcpServer) return [];
|
|
|
|
// 获取当前启用的工具
|
|
const enabledTools = toolManager.getEnabledTools();
|
|
|
|
// 更新MCP服务器的启用工具列表
|
|
mcpServer.updateEnabledTools(enabledTools);
|
|
|
|
return mcpServer.getFilteredTools(enabledTools);
|
|
},
|
|
/**
|
|
* @en Get server settings
|
|
* @zh 获取服务器设置
|
|
*/
|
|
async getServerSettings() {
|
|
return mcpServer ? mcpServer.getSettings() : readSettings();
|
|
},
|
|
|
|
/**
|
|
* @en Get server settings (alternative method)
|
|
* @zh 获取服务器设置(替代方法)
|
|
*/
|
|
async getSettings() {
|
|
return mcpServer ? mcpServer.getSettings() : readSettings();
|
|
},
|
|
|
|
// 工具管理器相关方法
|
|
async getToolManagerState() {
|
|
return toolManager.getToolManagerState();
|
|
},
|
|
|
|
async createToolConfiguration(name: string, description?: string) {
|
|
try {
|
|
const config = toolManager.createConfiguration(name, description);
|
|
return { success: true, id: config.id, config };
|
|
} catch (error: any) {
|
|
throw new Error(`创建配置失败: ${error.message}`);
|
|
}
|
|
},
|
|
|
|
async updateToolConfiguration(configId: string, updates: any) {
|
|
try {
|
|
return toolManager.updateConfiguration(configId, updates);
|
|
} catch (error: any) {
|
|
throw new Error(`更新配置失败: ${error.message}`);
|
|
}
|
|
},
|
|
|
|
async deleteToolConfiguration(configId: string) {
|
|
try {
|
|
toolManager.deleteConfiguration(configId);
|
|
return { success: true };
|
|
} catch (error: any) {
|
|
throw new Error(`删除配置失败: ${error.message}`);
|
|
}
|
|
},
|
|
|
|
async setCurrentToolConfiguration(configId: string) {
|
|
try {
|
|
toolManager.setCurrentConfiguration(configId);
|
|
return { success: true };
|
|
} catch (error: any) {
|
|
throw new Error(`设置当前配置失败: ${error.message}`);
|
|
}
|
|
},
|
|
|
|
async updateToolStatus(category: string, toolName: string, enabled: boolean) {
|
|
try {
|
|
const currentConfig = toolManager.getCurrentConfiguration();
|
|
if (!currentConfig) {
|
|
throw new Error('没有当前配置');
|
|
}
|
|
|
|
toolManager.updateToolStatus(currentConfig.id, category, toolName, enabled);
|
|
|
|
// 更新MCP服务器的工具列表
|
|
if (mcpServer) {
|
|
const enabledTools = toolManager.getEnabledTools();
|
|
mcpServer.updateEnabledTools(enabledTools);
|
|
}
|
|
|
|
return { success: true };
|
|
} catch (error: any) {
|
|
throw new Error(`更新工具状态失败: ${error.message}`);
|
|
}
|
|
},
|
|
|
|
async updateToolStatusBatch(updates: any[]) {
|
|
try {
|
|
console.log(`[Main] updateToolStatusBatch called with updates count:`, updates ? updates.length : 0);
|
|
|
|
const currentConfig = toolManager.getCurrentConfiguration();
|
|
if (!currentConfig) {
|
|
throw new Error('没有当前配置');
|
|
}
|
|
|
|
toolManager.updateToolStatusBatch(currentConfig.id, updates);
|
|
|
|
// 更新MCP服务器的工具列表
|
|
if (mcpServer) {
|
|
const enabledTools = toolManager.getEnabledTools();
|
|
mcpServer.updateEnabledTools(enabledTools);
|
|
}
|
|
|
|
return { success: true };
|
|
} catch (error: any) {
|
|
throw new Error(`批量更新工具状态失败: ${error.message}`);
|
|
}
|
|
},
|
|
|
|
async exportToolConfiguration(configId: string) {
|
|
try {
|
|
return { configJson: toolManager.exportConfiguration(configId) };
|
|
} catch (error: any) {
|
|
throw new Error(`导出配置失败: ${error.message}`);
|
|
}
|
|
},
|
|
|
|
async importToolConfiguration(configJson: string) {
|
|
try {
|
|
return toolManager.importConfiguration(configJson);
|
|
} catch (error: any) {
|
|
throw new Error(`导入配置失败: ${error.message}`);
|
|
}
|
|
},
|
|
|
|
async getEnabledTools() {
|
|
return toolManager.getEnabledTools();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* @en Method Triggered on Extension Startup
|
|
* @zh 扩展启动时触发的方法
|
|
*/
|
|
export function load() {
|
|
console.log('Cocos MCP Server extension loaded');
|
|
|
|
// 初始化工具管理器
|
|
toolManager = new ToolManager();
|
|
|
|
// 读取设置
|
|
const settings = readSettings();
|
|
mcpServer = new MCPServer(settings);
|
|
|
|
// 初始化MCP服务器的工具列表
|
|
const enabledTools = toolManager.getEnabledTools();
|
|
mcpServer.updateEnabledTools(enabledTools);
|
|
|
|
// 如果设置了自动启动,则启动服务器
|
|
if (settings.autoStart) {
|
|
mcpServer.start().catch(err => {
|
|
console.error('Failed to auto-start MCP server:', err);
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @en Method triggered when uninstalling the extension
|
|
* @zh 卸载扩展时触发的方法
|
|
*/
|
|
export function unload() {
|
|
if (mcpServer) {
|
|
mcpServer.stop();
|
|
mcpServer = null;
|
|
}
|
|
} |