import type { Tool } from '@modelcontextprotocol/sdk/types.js';
import { AzureAdapter } from '../adapters/azure-adapter.js';
export const azureTools: Tool[] = [
{
name: 'azure_list_virtual_machines',
description: 'List all Virtual Machines in Azure',
inputSchema: {
type: 'object',
properties: {
subscriptionId: {
type: 'string',
description: 'Azure subscription ID',
},
location: {
type: 'string',
description: 'Azure location/region',
default: 'eastus',
},
},
},
},
{
name: 'azure_list_storage_accounts',
description: 'List all Storage Accounts in Azure',
inputSchema: {
type: 'object',
properties: {
subscriptionId: {
type: 'string',
description: 'Azure subscription ID',
},
location: {
type: 'string',
description: 'Azure location/region',
default: 'eastus',
},
},
},
},
];
export async function handleAzureTool(name: string, args: unknown): Promise<unknown> {
const params = args as Record<string, unknown>;
const subscriptionId = params.subscriptionId as string | undefined;
const location = (params.location as string) || 'eastus';
const adapter = new AzureAdapter(subscriptionId, location);
switch (name) {
case 'azure_list_virtual_machines': {
const vms = await adapter.listVirtualMachines();
return {
total: vms.length,
virtualMachines: vms.map((vm) => ({
id: vm.id,
name: vm.name,
resourceGroup: vm.resourceGroup,
location: vm.location,
vmSize: vm.vmSize,
osType: vm.osType,
status: vm.status,
privateIp: vm.privateIp,
publicIp: vm.publicIp,
})),
};
}
case 'azure_list_storage_accounts': {
const accounts = await adapter.listStorageAccounts();
return {
total: accounts.length,
storageAccounts: accounts.map((account) => ({
id: account.id,
name: account.accountName,
resourceGroup: account.resourceGroup,
location: account.location,
kind: account.kind,
sku: account.sku,
})),
};
}
default:
throw new Error(`Unknown Azure tool: ${name}`);
}
}