Files
cocos-mcp/source/main.ts
2025-07-17 18:12:56 +08:00

119 lines
3.1 KiB
TypeScript
Executable File

import { MCPServer } from './mcp-server';
import { readSettings, saveSettings } from './settings';
import { MCPServerSettings } from './types';
let mcpServer: MCPServer | null = null;
/**
* @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) {
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() {
return mcpServer ? mcpServer.getStatus() : { running: false, port: 0, clients: 0 };
},
/**
* @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() : [];
},
/**
* @en Get server settings
* @zh 获取服务器设置
*/
getServerSettings() {
return mcpServer ? mcpServer.getSettings() : readSettings();
}
};
/**
* @en Method Triggered on Extension Startup
* @zh 扩展启动时触发的方法
*/
export function load() {
console.log('[MCP Plugin] Loading MCP server plugin...');
try {
const settings = readSettings();
console.log('[MCP Plugin] Settings loaded:', settings);
mcpServer = new MCPServer(settings);
// 如果设置了自动启动,则启动服务器
if (settings.autoStart) {
console.log('[MCP Plugin] Auto-starting MCP server...');
mcpServer.start().catch(error => {
console.error('[MCP Plugin] Failed to auto-start server:', error);
});
} else {
console.log('[MCP Plugin] MCP server created but not started (autoStart=false)');
console.log('[MCP Plugin] Use the MCP panel or call startServer() to start the server');
}
} catch (error) {
console.error('[MCP Plugin] Failed to load MCP server:', error);
}
}
/**
* @en Method triggered when uninstalling the extension
* @zh 卸载扩展时触发的方法
*/
export function unload() {
if (mcpServer) {
mcpServer.stop();
mcpServer = null;
}
}