Skip to main content
Glama
DaxianLee

Cocos Creator MCP Server Plugin

by DaxianLee
preferences-tools.ts13 kB
import { ToolDefinition, ToolResponse, ToolExecutor } from '../types'; export class PreferencesTools implements ToolExecutor { getTools(): ToolDefinition[] { return [ { name: 'open_preferences_settings', description: 'Open preferences settings panel', inputSchema: { type: 'object', properties: { tab: { type: 'string', description: 'Preferences tab to open (optional)', enum: ['general', 'external-tools', 'data-editor', 'laboratory', 'extensions'] }, args: { type: 'array', description: 'Additional arguments to pass to the tab' } } } }, { name: 'query_preferences_config', description: 'Query preferences configuration', inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'Plugin or category name', default: 'general' }, path: { type: 'string', description: 'Configuration path (optional)' }, type: { type: 'string', description: 'Configuration type', enum: ['default', 'global', 'local'], default: 'global' } }, required: ['name'] } }, { name: 'set_preferences_config', description: 'Set preferences configuration', inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'Plugin name' }, path: { type: 'string', description: 'Configuration path' }, value: { description: 'Configuration value' }, type: { type: 'string', description: 'Configuration type', enum: ['default', 'global', 'local'], default: 'global' } }, required: ['name', 'path', 'value'] } }, { name: 'get_all_preferences', description: 'Get all available preferences categories', inputSchema: { type: 'object', properties: {} } }, { name: 'reset_preferences', description: 'Reset preferences to default values', inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'Specific preference category to reset (optional)' }, type: { type: 'string', description: 'Configuration type to reset', enum: ['global', 'local'], default: 'global' } } } }, { name: 'export_preferences', description: 'Export current preferences configuration', inputSchema: { type: 'object', properties: { exportPath: { type: 'string', description: 'Path to export preferences file (optional)' } } } }, { name: 'import_preferences', description: 'Import preferences configuration from file', inputSchema: { type: 'object', properties: { importPath: { type: 'string', description: 'Path to import preferences file from' } }, required: ['importPath'] } } ]; } async execute(toolName: string, args: any): Promise<ToolResponse> { switch (toolName) { case 'open_preferences_settings': return await this.openPreferencesSettings(args.tab, args.args); case 'query_preferences_config': return await this.queryPreferencesConfig(args.name, args.path, args.type); case 'set_preferences_config': return await this.setPreferencesConfig(args.name, args.path, args.value, args.type); case 'get_all_preferences': return await this.getAllPreferences(); case 'reset_preferences': return await this.resetPreferences(args.name, args.type); case 'export_preferences': return await this.exportPreferences(args.exportPath); case 'import_preferences': return await this.importPreferences(args.importPath); default: throw new Error(`Unknown tool: ${toolName}`); } } private async openPreferencesSettings(tab?: string, args?: any[]): Promise<ToolResponse> { return new Promise((resolve) => { const requestArgs = []; if (tab) { requestArgs.push(tab); } if (args && args.length > 0) { requestArgs.push(...args); } (Editor.Message.request as any)('preferences', 'open-settings', ...requestArgs).then(() => { resolve({ success: true, message: `Preferences settings opened${tab ? ` on tab: ${tab}` : ''}` }); }).catch((err: Error) => { resolve({ success: false, error: err.message }); }); }); } private async queryPreferencesConfig(name: string, path?: string, type: string = 'global'): Promise<ToolResponse> { return new Promise((resolve) => { const requestArgs = [name]; if (path) { requestArgs.push(path); } requestArgs.push(type); (Editor.Message.request as any)('preferences', 'query-config', ...requestArgs).then((config: any) => { resolve({ success: true, data: { name: name, path: path, type: type, config: config } }); }).catch((err: Error) => { resolve({ success: false, error: err.message }); }); }); } private async setPreferencesConfig(name: string, path: string, value: any, type: string = 'global'): Promise<ToolResponse> { return new Promise((resolve) => { (Editor.Message.request as any)('preferences', 'set-config', name, path, value, type).then((success: boolean) => { if (success) { resolve({ success: true, message: `Preference '${name}.${path}' updated successfully` }); } else { resolve({ success: false, error: `Failed to update preference '${name}.${path}'` }); } }).catch((err: Error) => { resolve({ success: false, error: err.message }); }); }); } private async getAllPreferences(): Promise<ToolResponse> { return new Promise((resolve) => { // Common preference categories in Cocos Creator const categories = [ 'general', 'external-tools', 'data-editor', 'laboratory', 'extensions', 'preview', 'console', 'native', 'builder' ]; const preferences: any = {}; const queryPromises = categories.map(category => { return Editor.Message.request('preferences', 'query-config', category, undefined, 'global') .then((config: any) => { preferences[category] = config; }) .catch(() => { // Ignore errors for categories that don't exist preferences[category] = null; }); }); Promise.all(queryPromises).then(() => { // Filter out null entries const validPreferences = Object.fromEntries( Object.entries(preferences).filter(([_, value]) => value !== null) ); resolve({ success: true, data: { categories: Object.keys(validPreferences), preferences: validPreferences } }); }).catch((err: Error) => { resolve({ success: false, error: err.message }); }); }); } private async resetPreferences(name?: string, type: string = 'global'): Promise<ToolResponse> { return new Promise((resolve) => { if (name) { // Reset specific preference category Editor.Message.request('preferences', 'query-config', name, undefined, 'default').then((defaultConfig: any) => { return (Editor.Message.request as any)('preferences', 'set-config', name, '', defaultConfig, type); }).then((success: boolean) => { if (success) { resolve({ success: true, message: `Preference category '${name}' reset to default` }); } else { resolve({ success: false, error: `Failed to reset preference category '${name}'` }); } }).catch((err: Error) => { resolve({ success: false, error: err.message }); }); } else { resolve({ success: false, error: 'Resetting all preferences is not supported through API. Please specify a preference category.' }); } }); } private async exportPreferences(exportPath?: string): Promise<ToolResponse> { return new Promise((resolve) => { this.getAllPreferences().then((prefsResult: ToolResponse) => { if (!prefsResult.success) { resolve(prefsResult); return; } const prefsData = JSON.stringify(prefsResult.data, null, 2); const path = exportPath || `preferences_export_${Date.now()}.json`; // For now, return the data - in a real implementation, you'd write to file resolve({ success: true, data: { exportPath: path, preferences: prefsResult.data, jsonData: prefsData, message: 'Preferences exported successfully' } }); }).catch((err: Error) => { resolve({ success: false, error: err.message }); }); }); } private async importPreferences(importPath: string): Promise<ToolResponse> { return new Promise((resolve) => { resolve({ success: false, error: 'Import preferences functionality requires file system access which is not available in this context. Please manually import preferences through the Editor UI.' }); }); } }

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