Skip to main content
Glama
DaxianLee

Cocos Creator MCP Server Plugin

by DaxianLee
main.ts7.52 kB
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; } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DaxianLee/cocos-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server