Skip to main content
Glama
YCloud-Developers

YCloud WhatsApp API MCP Server

wa_phone_register

Register a phone number with YCloud WhatsApp API by providing the WABA ID and phone number, enabling integration and interaction through the MCP server.

Instructions

Register a phone number

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
phoneNumberYes
wabaIdYes

Implementation Reference

  • Generic async handler that proxies the tool arguments to the corresponding YCloud WhatsApp API endpoint (whatsapp_phone_number_register) using axios, handles path params, query, body, and returns JSON response or error.
    async (args: Record<string, any>) => { try { // 解析URL中的路径参数 let url = `${apiBaseUrl}${path}`; Object.keys(args).forEach(key => { if (path.includes(`{${key}}`)) { url = url.replace(`{${key}}`, encodeURIComponent(String(args[key]))); delete args[key]; } }); // 提取请求体和查询参数 const { body, ...queryParams } = args as Record<string, any>; // 设置请求选项 const requestOptions: any = { url, method: method.toUpperCase(), headers: { 'Content-Type': 'application/json', ...headers }, params: Object.keys(queryParams).length > 0 ? queryParams : undefined, data: body, }; // 发送请求 const response = await axios(requestOptions); return { content: [{ type: 'text' as const, text: JSON.stringify(response.data, null, 2) }] }; } catch (error: unknown) { if (axios.isAxiosError(error) && error.response) { return { content: [{ type: 'text' as const, text: JSON.stringify({ error: true, status: error.response.status, message: error.response.data?.message || error.message, data: error.response.data }, null, 2) }] }; } return { content: [{ type: 'text' as const, text: JSON.stringify({ error: true, message: error instanceof Error ? error.message : String(error) }, null, 2) }] }; } }
  • Extracts Zod schemas for input parameters (path, query, body) from the OpenAPI operation definition, used to define the tool's input schema.
    function extractParamsSchema(operation: any): any { const properties: Record<string, any> = {}; const required: string[] = []; // 处理路径参数 if (operation.parameters) { operation.parameters.forEach((param: any) => { if (param.in === 'path' || param.in === 'query') { let schema; switch (param.schema?.type) { case 'string': schema = z.string(); break; case 'integer': schema = z.number().int(); break; case 'number': schema = z.number(); break; case 'boolean': schema = z.boolean(); break; default: schema = z.any(); } properties[param.name] = schema; if (param.required) { required.push(param.name); } } }); } // 处理请求体 if (operation.requestBody) { properties['body'] = z.any(); required.push('body'); } return properties; }
  • src/tools.ts:121-122 (registration)
    Maps the original verbose OpenAPI operationId to the concise MCP tool name 'wa_phone_register'.
    } else if (operationId.includes('whatsapp_phone_number_register')) { operationId = 'wa_phone_register';
  • src/tools.ts:156-219 (registration)
    Registers the MCP tool using server.tool() with name, description, input schema, and handler function within the dynamic loop over OpenAPI paths.
    server.tool( toolName, description, paramsSchema, async (args: Record<string, any>) => { try { // 解析URL中的路径参数 let url = `${apiBaseUrl}${path}`; Object.keys(args).forEach(key => { if (path.includes(`{${key}}`)) { url = url.replace(`{${key}}`, encodeURIComponent(String(args[key]))); delete args[key]; } }); // 提取请求体和查询参数 const { body, ...queryParams } = args as Record<string, any>; // 设置请求选项 const requestOptions: any = { url, method: method.toUpperCase(), headers: { 'Content-Type': 'application/json', ...headers }, params: Object.keys(queryParams).length > 0 ? queryParams : undefined, data: body, }; // 发送请求 const response = await axios(requestOptions); return { content: [{ type: 'text' as const, text: JSON.stringify(response.data, null, 2) }] }; } catch (error: unknown) { if (axios.isAxiosError(error) && error.response) { return { content: [{ type: 'text' as const, text: JSON.stringify({ error: true, status: error.response.status, message: error.response.data?.message || error.message, data: error.response.data }, null, 2) }] }; } return { content: [{ type: 'text' as const, text: JSON.stringify({ error: true, message: error instanceof Error ? error.message : String(error) }, null, 2) }] }; } } ); registeredTools.add(toolName); registeredToolsCount++; }
  • src/index.ts:43-43 (registration)
    Top-level call to registerYCloudTools function, which dynamically registers all tools including 'wa_phone_register'.
    await registerYCloudTools(server, openApiSpec, apiBaseUrl, headers);

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/YCloud-Developers/ycloud-whatsapp-mcp-server'

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