Skip to main content
Glama
hidenorigoto

Sakura Cloud MCP Server

by hidenorigoto

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
NameRequiredDescriptionDefault
applianceIdYesThe ID of the appliance to retrieve

Implementation Reference

  • 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'] } },
  • 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(); }); }
  • 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.'); } }

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/hidenorigoto/sacloud-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server