Skip to main content
Glama
hidenorigoto

Sakura Cloud MCP Server

by hidenorigoto

create_apprun

Generate and deploy a new AppRun application on Sakura Cloud by specifying the name, Docker image, plan ID, environment variables, and zone.

Instructions

Create a new AppRun application

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
descriptionNoDescription of the AppRun application
dockerImageYesDocker image to use for the AppRun application
environmentNoEnvironment variables for the AppRun application
nameYesName of the AppRun application
planIdYesPlan ID for the AppRun application
zoneNoThe zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.

Implementation Reference

  • Handler implementation for the 'create_apprun' tool. Validates input parameters, constructs the API request body, authenticates via environment variables, and calls the Sakura Cloud AppRun API to create a new application, returning the result as JSON.
    } else if (request.params.name === 'create_apprun') { try { validateCredentials(); const name = request.params.arguments?.name as string; const description = request.params.arguments?.description as string || ''; const dockerImage = request.params.arguments?.dockerImage as string; const planId = request.params.arguments?.planId as string; const environment = request.params.arguments?.environment as Array<{key: string, value: string}> || []; if (!name || !dockerImage || !planId) { throw new Error('Name, Docker image, and plan ID are required'); } const zone = request.params.arguments?.zone as string || DEFAULT_ZONE; const createBody = { name: name, description: description, planId: planId, image: dockerImage, environment: environment.map(env => ({ key: env.key, value: env.value })), }; const createResult = await fetchFromAppRunAPI('/applications', 'POST', createBody); return { content: [ { type: 'text', text: JSON.stringify(createResult, null, 2) } ] }; } catch (error) { console.error('Error calling tool:', error); throw error; }
  • Input schema definition for the 'create_apprun' tool, specifying parameters like name, description, dockerImage, planId, environment variables, and optional zone, with required fields enforced.
    name: 'create_apprun', description: 'Create a new AppRun application', inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'Name of the AppRun application' }, description: { type: 'string', description: 'Description of the AppRun application' }, dockerImage: { type: 'string', description: 'Docker image to use for the AppRun application' }, planId: { type: 'string', description: 'Plan ID for the AppRun application' }, environment: { type: 'array', description: 'Environment variables for the AppRun application', items: { type: 'object', properties: { key: { type: 'string' }, value: { type: 'string' } } } }, zone: { type: 'string', description: 'The zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.' } }, required: ['name', 'dockerImage', 'planId'] } },
  • src/server.ts:739-1424 (registration)
    Registration of the 'create_apprun' tool within the ListToolsRequestSchema handler, which lists all available tools including their names, descriptions, and input schemas for the MCP client.
    server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ { name: 'get_server_info', description: 'Get detailed information about a specific server', inputSchema: { type: 'object', properties: { serverId: { type: 'string', description: 'The ID of the server to retrieve' }, zone: { type: 'string', description: 'The zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.' } }, required: ['serverId'] } }, { name: 'get_server_list', description: 'Get list of servers', inputSchema: { type: 'object', properties: { zone: { type: 'string', description: 'The zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.' } }, } }, { 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.' } }, } }, { name: 'get_switch_info', description: 'Get detailed information about a specific switch', inputSchema: { type: 'object', properties: { switchId: { type: 'string', description: 'The ID of the switch to retrieve' }, zone: { type: 'string', description: 'The zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.' } }, required: ['switchId'] } }, { name: 'get_appliance_list', description: 'Get list of appliances', inputSchema: { type: 'object', properties: { zone: { type: 'string', description: 'The zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.' } }, } }, { 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'] } }, { name: 'get_disk_list', description: 'Get list of disks', inputSchema: { type: 'object', properties: { zone: { type: 'string', description: 'The zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.' } }, } }, { name: 'get_disk_info', description: 'Get detailed information about a specific disk', inputSchema: { type: 'object', properties: { diskId: { type: 'string', description: 'The ID of the disk to retrieve' }, zone: { type: 'string', description: 'The zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.' } }, required: ['diskId'] } }, { name: 'get_archive_list', description: 'Get list of archives', inputSchema: { type: 'object', properties: { }, } }, { name: 'get_archive_info', description: 'Get detailed information about a specific archive', inputSchema: { type: 'object', properties: { archiveId: { type: 'string', description: 'The ID of the archive to retrieve' } }, required: ['archiveId'] } }, { name: 'get_cdrom_list', description: 'Get list of ISO images', inputSchema: { type: 'object', properties: { }, } }, { name: 'get_cdrom_info', description: 'Get detailed information about a specific ISO image', inputSchema: { type: 'object', properties: { cdromId: { type: 'string', description: 'The ID of the ISO image to retrieve' } }, required: ['cdromId'] } }, { name: 'get_bridge_list', description: 'Get list of bridges', inputSchema: { type: 'object', properties: { }, } }, { name: 'get_bridge_info', description: 'Get detailed information about a specific bridge', inputSchema: { type: 'object', properties: { bridgeId: { type: 'string', description: 'The ID of the bridge to retrieve' } }, required: ['bridgeId'] } }, { name: 'get_router_list', description: 'Get list of routers', inputSchema: { type: 'object', properties: { }, } }, { name: 'get_router_info', description: 'Get detailed information about a specific router', inputSchema: { type: 'object', properties: { routerId: { type: 'string', description: 'The ID of the router to retrieve' } }, required: ['routerId'] } }, { name: 'get_interface_list', description: 'Get list of network interfaces', inputSchema: { type: 'object', properties: { }, } }, { name: 'get_interface_info', description: 'Get detailed information about a specific network interface', inputSchema: { type: 'object', properties: { interfaceId: { type: 'string', description: 'The ID of the interface to retrieve' } }, required: ['interfaceId'] } }, { name: 'get_icon_list', description: 'Get list of icons', inputSchema: { type: 'object', properties: { }, } }, { name: 'get_icon_info', description: 'Get detailed information about a specific icon', inputSchema: { type: 'object', properties: { iconId: { type: 'string', description: 'The ID of the icon to retrieve' } }, required: ['iconId'] } }, { name: 'get_note_list', description: 'Get list of notes and startup scripts', inputSchema: { type: 'object', properties: { }, } }, { name: 'get_note_info', description: 'Get detailed information about a specific note or startup script', inputSchema: { type: 'object', properties: { noteId: { type: 'string', description: 'The ID of the note to retrieve' } }, required: ['noteId'] } }, { name: 'get_sshkey_list', description: 'Get list of SSH keys', inputSchema: { type: 'object', properties: { }, } }, { name: 'get_sshkey_info', description: 'Get detailed information about a specific SSH key', inputSchema: { type: 'object', properties: { sshkeyId: { type: 'string', description: 'The ID of the SSH key to retrieve' } }, required: ['sshkeyId'] } }, { name: 'get_region_list', description: 'Get list of regions', inputSchema: { type: 'object', properties: { }, } }, { name: 'get_region_info', description: 'Get detailed information about a specific region', inputSchema: { type: 'object', properties: { regionId: { type: 'string', description: 'The ID of the region to retrieve' } }, required: ['regionId'] } }, { name: 'get_zone_list', description: 'Get list of zones', inputSchema: { type: 'object', properties: { }, } }, { name: 'get_zone_info', description: 'Get detailed information about a specific zone', inputSchema: { type: 'object', properties: { zoneId: { type: 'string', description: 'The ID of the zone to retrieve' } }, required: ['zoneId'] } }, { name: 'get_product_info', description: 'Get detailed information about specific product offerings', inputSchema: { type: 'object', properties: { productType: { type: 'string', description: 'The type of product to retrieve (server, disk, internet, license)', enum: ['server', 'disk', 'internet', 'license'] } }, required: ['productType'] } }, { name: 'get_commonserviceitem_list', description: 'Get list of common service items (DNS, Simple Monitor, etc.)', inputSchema: { type: 'object', properties: { }, } }, { name: 'get_commonserviceitem_info', description: 'Get detailed information about a specific common service item', inputSchema: { type: 'object', properties: { itemId: { type: 'string', description: 'The ID of the common service item to retrieve' } }, required: ['itemId'] } }, { name: 'get_license_list', description: 'Get list of licenses', inputSchema: { type: 'object', properties: { }, } }, { name: 'get_license_info', description: 'Get detailed information about a specific license', inputSchema: { type: 'object', properties: { licenseId: { type: 'string', description: 'The ID of the license to retrieve' } }, required: ['licenseId'] } }, { name: 'get_bill_info', description: 'Get billing information for a specific month', inputSchema: { type: 'object', properties: { year: { type: 'string', description: 'The year (YYYY) of the billing period' }, month: { type: 'string', description: 'The month (MM) of the billing period' } }, required: ['year', 'month'] } }, { name: 'get_bill_detail', description: 'Get detailed billing information for a specific month', inputSchema: { type: 'object', properties: { year: { type: 'string', description: 'The year (YYYY) of the billing period' }, month: { type: 'string', description: 'The month (MM) of the billing period' } }, required: ['year', 'month'] } }, { name: 'get_coupon_info', description: 'Get information about a specific coupon', inputSchema: { type: 'object', properties: { couponId: { type: 'string', description: 'The ID of the coupon to retrieve' } }, required: ['couponId'] } }, { name: 'get_privatehost_info', description: 'Get detailed information about a specific private host', inputSchema: { type: 'object', properties: { privateHostId: { type: 'string', description: 'The ID of the private host to retrieve' } }, required: ['privateHostId'] } }, { name: 'get_public_price', description: 'Get public pricing information for Sakura Cloud services', inputSchema: { type: 'object', properties: {} } }, { name: 'get_apprun_list', description: 'Get list of all AppRun applications', inputSchema: { type: 'object', properties: { zone: { type: 'string', description: 'The zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.' } } } }, { name: 'get_apprun_info', description: 'Get detailed information about a specific AppRun application', inputSchema: { type: 'object', properties: { appId: { type: 'string', description: 'The ID of the AppRun application to retrieve' }, zone: { type: 'string', description: 'The zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.' } }, required: ['appId'] } }, { name: 'create_apprun', description: 'Create a new AppRun application', inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'Name of the AppRun application' }, description: { type: 'string', description: 'Description of the AppRun application' }, dockerImage: { type: 'string', description: 'Docker image to use for the AppRun application' }, planId: { type: 'string', description: 'Plan ID for the AppRun application' }, environment: { type: 'array', description: 'Environment variables for the AppRun application', items: { type: 'object', properties: { key: { type: 'string' }, value: { type: 'string' } } } }, zone: { type: 'string', description: 'The zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.' } }, required: ['name', 'dockerImage', 'planId'] } }, { name: 'delete_apprun', description: 'Delete an AppRun application', inputSchema: { type: 'object', properties: { appId: { type: 'string', description: 'The ID of the AppRun application to delete' }, zone: { type: 'string', description: 'The zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.' } }, required: ['appId'] } }, { name: 'start_apprun', description: 'Start an AppRun application', inputSchema: { type: 'object', properties: { appId: { type: 'string', description: 'The ID of the AppRun application to start' }, zone: { type: 'string', description: 'The zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.' } }, required: ['appId'] } }, { name: 'stop_apprun', description: 'Stop an AppRun application', inputSchema: { type: 'object', properties: { appId: { type: 'string', description: 'The ID of the AppRun application to stop' }, zone: { type: 'string', description: 'The zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.' } }, required: ['appId'] } }, { name: 'update_apprun', description: 'Update an existing AppRun application', inputSchema: { type: 'object', properties: { appId: { type: 'string', description: 'The ID of the AppRun application to update' }, name: { type: 'string', description: 'New name of the AppRun application' }, description: { type: 'string', description: 'New description of the AppRun application' }, dockerImage: { type: 'string', description: 'New Docker image to use for the AppRun application' }, planId: { type: 'string', description: 'New plan ID for the AppRun application' }, environment: { type: 'array', description: 'New environment variables for the AppRun application', items: { type: 'object', properties: { key: { type: 'string' }, value: { type: 'string' } } } }, zone: { type: 'string', description: 'The zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.' } }, required: ['appId'] } }, { name: 'get_apprun_logs', description: 'Get logs from an AppRun application', inputSchema: { type: 'object', properties: { appId: { type: 'string', description: 'The ID of the AppRun application to get logs from' }, offset: { type: 'number', description: 'Offset to start fetching logs from (default: 0)' }, limit: { type: 'number', description: 'Maximum number of log entries to fetch (default: 100)' }, zone: { type: 'string', description: 'The zone to use (e.g., "tk1v", "is1a", "tk1a"). Defaults to "tk1v" if not specified.' } }, required: ['appId'] } } ] }; });
  • Helper function used by the 'create_apprun' handler to make authenticated HTTPS POST requests to the Sakura Cloud AppRun API endpoint.
    async function fetchFromAppRunAPI(path: string, method: string = 'GET', bodyData?: any): Promise<any> { return new Promise((resolve, reject) => { validateCredentials(); const options = { hostname: 'secure.sakura.ad.jp', port: 443, path: `/cloud/api/apprun/1.0/apprun/api${path}`, method: method, headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', '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 to validate that required Sakura Cloud API credentials are set in environment variables, called before AppRun API operations.
    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