mushcode-mcp-server
Version:
A specialized Model Context Protocol server for MUSHCODE development assistance. Provides AI-powered code generation, validation, optimization, and examples for MUD development.
156 lines • 6.09 kB
JavaScript
/**
* optimize_mushcode tool implementation
* Optimizes MUSHCODE for performance and maintainability
*/
import { MushcodeOptimizer } from '../engines/optimizer.js';
import { ValidationError } from '../utils/errors.js';
// Tool definition
export const optimizeMushcodeTool = {
name: 'optimize_mushcode',
description: 'Optimize MUSHCODE for performance, readability, and maintainability',
inputSchema: {
type: 'object',
properties: {
code: {
type: 'string',
description: 'MUSHCODE to optimize',
minLength: 1,
maxLength: 50000
},
optimization_goals: {
type: 'array',
description: 'Specific optimization goals to focus on',
items: {
type: 'string',
enum: ['performance', 'readability', 'maintainability', 'security']
},
uniqueItems: true,
default: ['performance', 'readability', 'maintainability']
},
server_type: {
type: 'string',
description: 'Target MUD server type for optimization',
enum: ['PennMUSH', 'TinyMUSH', 'RhostMUSH', 'TinyMUX', 'MUX']
},
preserve_functionality: {
type: 'boolean',
description: 'Ensure optimizations maintain original functionality',
default: true
},
aggressive_optimization: {
type: 'boolean',
description: 'Enable more aggressive optimizations that may change code structure significantly',
default: false
}
},
required: ['code']
}
};
/**
* Tool handler for optimize_mushcode
*/
export async function optimizeMushcodeHandler(args, knowledgeBase) {
try {
// Validate and extract arguments
const request = validateAndExtractArgs(args);
// Create optimizer instance
const optimizer = new MushcodeOptimizer(knowledgeBase);
// Perform optimization
const result = await optimizer.optimize(request);
const toolResult = {
optimized_code: result.optimizedCode,
improvements: result.improvements,
performance_impact: result.performanceImpact,
explanation: result.explanation,
optimization_summary: {
original_size: result.originalSize,
optimized_size: result.optimizedSize,
compression_ratio: result.compressionRatio,
functionality_preserved: result.functionalityPreserved
}
};
if (result.warnings && result.warnings.length > 0) {
toolResult.warnings = result.warnings;
}
return toolResult;
}
catch (error) {
if (error instanceof ValidationError) {
throw error;
}
throw new Error(`Code optimization failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
}
}
/**
* Validate and extract arguments from the tool call
*/
function validateAndExtractArgs(args) {
// Validate required fields
if (args['code'] === undefined || args['code'] === null) {
throw new ValidationError('code is required');
}
if (typeof args['code'] !== 'string') {
throw new ValidationError('code is required and must be a string');
}
const code = args['code'].trim();
if (code.length === 0) {
throw new ValidationError('code cannot be empty');
}
if (code.length > 50000) {
throw new ValidationError('code is too long (max 50000 characters)');
}
// Validate optional fields
let optimizationGoals = undefined;
if (args['optimization_goals'] !== undefined) {
if (!Array.isArray(args['optimization_goals'])) {
throw new ValidationError('optimization_goals must be an array');
}
const validGoals = ['performance', 'readability', 'maintainability', 'security'];
optimizationGoals = [];
for (let i = 0; i < args['optimization_goals'].length; i++) {
const goal = args['optimization_goals'][i];
if (typeof goal !== 'string') {
throw new ValidationError(`optimization_goals[${i}] must be a string`);
}
if (!validGoals.includes(goal)) {
throw new ValidationError(`optimization_goals[${i}] must be one of: ${validGoals.join(', ')}`);
}
if (!optimizationGoals.includes(goal)) {
optimizationGoals.push(goal);
}
}
}
let serverType = undefined;
if (args['server_type'] !== undefined) {
if (typeof args['server_type'] !== 'string') {
throw new ValidationError('server_type must be a string');
}
const validServerTypes = ['PennMUSH', 'TinyMUSH', 'RhostMUSH', 'TinyMUX', 'MUX'];
if (!validServerTypes.includes(args['server_type'])) {
throw new ValidationError(`server_type must be one of: ${validServerTypes.join(', ')}`);
}
serverType = args['server_type'];
}
let preserveFunctionality = true; // default value
if (args['preserve_functionality'] !== undefined) {
if (typeof args['preserve_functionality'] !== 'boolean') {
throw new ValidationError('preserve_functionality must be a boolean');
}
preserveFunctionality = args['preserve_functionality'];
}
let aggressiveOptimization = false; // default value
if (args['aggressive_optimization'] !== undefined) {
if (typeof args['aggressive_optimization'] !== 'boolean') {
throw new ValidationError('aggressive_optimization must be a boolean');
}
aggressiveOptimization = args['aggressive_optimization'];
}
return {
code,
optimizationGoals,
serverType,
preserveFunctionality,
aggressiveOptimization
};
}
//# sourceMappingURL=optimize.js.map