Skip to main content
Glama
hidenorigoto

Sakura Cloud MCP Server

by hidenorigoto

get_switch_list

Retrieve a list of network switches to manage connectivity and network configurations in Sakura Cloud infrastructure.

Instructions

Get list of switches

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
zoneNoThe zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.

Implementation Reference

  • The core handler logic for the 'get_switch_list' tool within the CallToolRequestSchema handler. It validates credentials, extracts optional zone parameter (defaults to 'tk1v'), calls fetchFromSakuraCloud to GET /switch endpoint, and returns the JSON response as text content.
    } else if (request.params.name === 'get_switch_list') { try { validateCredentials(); const zone = request.params.arguments?.zone as string || DEFAULT_ZONE; const switchList = await fetchFromSakuraCloud(`/switch`, false, zone); return { content: [ { type: 'text', text: JSON.stringify(switchList, null, 2) } ] }; } catch (error) { console.error('Error calling tool:', error); throw error; }
  • The tool schema definition including name, description, and input schema (optional zone parameter), provided in response to ListToolsRequestSchema.
    name: 'get_switch_list', description: 'Get list of switches', inputSchema: { type: 'object', properties: { zone: { type: 'string', description: 'The zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.' } }, } },
  • Core helper function fetchFromSakuraCloud used by get_switch_list handler to perform authenticated HTTPS GET requests to Sakura Cloud API endpoints.
    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(); }); }
  • validateCredentials helper called by the get_switch_list handler to ensure API credentials are set.
    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