get_public_price
Retrieve public pricing details for Sakura Cloud services, enabling users to access cost information for infrastructure, servers, disks, and networks.
Instructions
Get public pricing information for Sakura Cloud services
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/server.ts:2217-2234 (handler)Executes the get_public_price tool by fetching public pricing data from the Sakura Cloud public API endpoint '/public/price' using the fetchFromSakuraCloud helper (with isPublicAPI=true, no auth). Returns JSON stringified response.} else if (request.params.name === 'get_public_price') { try { // No authentication needed for public price API const priceData = await fetchFromSakuraCloud('/public/price', true); return { content: [ { type: 'text', text: JSON.stringify(priceData, null, 2) } ] }; } catch (error) { console.error('Error calling tool:', error); throw error; } } else if (request.params.name === 'get_apprun_list') {
- src/server.ts:1217-1224 (schema)Tool schema registration in ListToolsRequestSchema handler: defines name, description, and empty input schema (no parameters required).{ name: 'get_public_price', description: 'Get public pricing information for Sakura Cloud services', inputSchema: { type: 'object', properties: {} } },
- src/server.ts:1426-1426 (registration)Registration of the CallToolRequestSchema handler, which dispatches to the specific get_public_price implementation based on request.params.name.server.setRequestHandler(CallToolRequestSchema, async (request) => {
- src/server.ts:20-72 (helper)Reusable helper function for making authenticated or public HTTPS requests to Sakura Cloud API. The tool uses it with isPublicAPI=true to skip auth for public pricing.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(); }); }