get_appliance_info
Retrieve detailed information about a specific Sakura Cloud appliance by providing its ID to manage infrastructure components.
Instructions
Get detailed information about a specific appliance
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| applianceId | Yes | The ID of the appliance to retrieve |
Implementation Reference
- src/server.ts:1532-1555 (handler)Handler for the 'get_appliance_info' tool. Validates credentials, extracts applianceId (required) and optional zone (defaults to 'tk1v'), fetches data from Sakura Cloud API endpoint '/appliance/{applianceId}', and returns the JSON-stringified response as text content.} else if (request.params.name === 'get_appliance_info') { try { validateCredentials(); const applianceId = request.params.arguments?.applianceId as string; if (!applianceId) { throw new Error('Appliance ID is required'); } const zone = request.params.arguments?.zone as string || DEFAULT_ZONE; const applianceInfo = await fetchFromSakuraCloud(`/appliance/${applianceId}`, false, zone); return { content: [ { type: 'text', text: JSON.stringify(applianceInfo, null, 2) } ] }; } catch (error) { console.error('Error calling tool:', error); throw error; }
- src/server.ts:817-830 (registration)Registration of the 'get_appliance_info' tool in ListToolsRequestSchema handler, including its description and input schema (requires applianceId string).{ name: 'get_appliance_info', description: 'Get detailed information about a specific appliance', inputSchema: { type: 'object', properties: { applianceId: { type: 'string', description: 'The ID of the appliance to retrieve' } }, required: ['applianceId'] } },
- src/server.ts:20-72 (helper)Core helper function used by the tool to make authenticated HTTPS requests to Sakura Cloud API, constructing the path with zone, handling Basic Auth with env vars, parsing JSON response.async function fetchFromSakuraCloud(path: string, isPublicAPI: boolean = false, zone: string = DEFAULT_ZONE, method: string = 'GET', bodyData?: any): Promise<any> { return new Promise((resolve, reject) => { const basePath = isPublicAPI ? '/cloud/api/cloud/1.1' : `/cloud/zone/${zone}/api/cloud/1.1`; const options = { hostname: 'secure.sakura.ad.jp', port: 443, path: `${basePath}${path}`, method: method, headers: { 'Accept': 'application/json', 'Authorization': '', 'Content-Type': 'application/json' } }; // Add authorization for non-public APIs if (!isPublicAPI) { options.headers['Authorization'] = `Basic ${Buffer.from(`${SACLOUD_API_TOKEN}:${SACLOUD_API_SECRET}`).toString('base64')}`; } const req = https.request(options, (res) => { let data = ''; res.on('data', (chunk) => { data += chunk; }); res.on('end', () => { try { if (data) { const parsedData = JSON.parse(data); resolve(parsedData); } else { resolve({}); } } catch (err) { reject(new Error(`Failed to parse response: ${err}`)); } }); }); req.on('error', (error) => { reject(error); }); if (bodyData && (method === 'POST' || method === 'PUT')) { req.write(JSON.stringify(bodyData)); } req.end(); }); }
- src/server.ts:125-129 (helper)Helper function called by the handler to ensure API credentials are set in environment variables.function validateCredentials(): void { if (!SACLOUD_API_TOKEN || !SACLOUD_API_SECRET) { throw new Error('Missing API credentials. Set SACLOUD_API_TOKEN and SACLOUD_API_SECRET environment variables.'); } }