import { Tool } from '@modelcontextprotocol/sdk/types.js';
import { Logger } from '../utils/logger.js';
import { LudusCliWrapper } from '../ludusMCP/cliWrapper.js';
export interface GetRangeStatusArgs {
user?: string;
help?: boolean;
}
export function createGetRangeStatusTool(logger: Logger, cliWrapper: LudusCliWrapper): Tool {
return {
name: 'get_range_status',
description: 'Get the current status and details of a Ludus range. Shows deployment state, VM information, and range configuration. Requires admin privileges to check other users\' ranges.',
inputSchema: {
type: 'object',
properties: {
user: {
type: 'string',
description: 'User ID to get range status for (admin only). If omitted, gets status for current user.'
},
help: {
type: 'boolean',
description: 'Show help information for the get_range_status command',
default: false
}
},
required: []
}
};
}
export async function handleGetRangeStatus(
args: GetRangeStatusArgs,
logger: Logger,
cliWrapper: LudusCliWrapper
): Promise<any> {
const { user, help = false } = args;
// Handle help request
if (help) {
logger.info('Getting help for get_range_status command', { user });
const result = await cliWrapper.executeArbitraryCommand('range', ['list', '--help']);
if (result.success) {
return {
success: true,
message: 'Help information for get_range_status command',
help: true,
content: result.rawOutput || result.message
};
} else {
throw new Error(`Failed to get help: ${result.message}`);
}
}
try {
logger.info('Getting range status', { user });
const statusResult = await cliWrapper.getRangeStatus(user);
if (!statusResult.success) {
throw new Error(`Failed to get range status: ${statusResult.message}`);
}
const targetUser = user || 'current user';
return {
success: true,
message: `Range status retrieved for ${targetUser}`,
user: targetUser,
status: statusResult.data,
rawOutput: statusResult.rawOutput
};
} catch (error: any) {
logger.error('Failed to get range status', {
user,
error: error.message
});
return {
success: false,
message: error.message,
user: user || 'current user',
troubleshooting: [
'Verify the user has a deployed range',
'Check if you have admin permissions (if querying other users)',
'Ensure your Ludus server connection is working',
'Try deploying a range first if none exists'
]
};
}
}