Skip to main content
Glama
YCloud-Developers

YCloud WhatsApp API MCP Server

wa_phone_register

Register a phone number with YCloud WhatsApp API to enable messaging capabilities for business accounts.

Instructions

Register a phone number

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
wabaIdYes
phoneNumberYes

Implementation Reference

  • Generic handler function used for all YCloud WhatsApp API tools, including 'wa_phone_register'. It constructs and sends an HTTP request to the corresponding API endpoint based on the OpenAPI path and method, handles path/query/body params, and returns the response or error as text.
    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)
          }]
        };
      }
    }
  • Helper function to extract input schema (parameters and request body) from OpenAPI operation object using Zod schemas. Used to define the input schema for the 'wa_phone_register' tool.
    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 OpenAPI operationId containing 'whatsapp_phone_number_register' to the shortened MCP tool name 'wa_phone_register'.
    } else if (operationId.includes('whatsapp_phone_number_register')) {
      operationId = 'wa_phone_register';
  • src/tools.ts:156-216 (registration)
    Registers the MCP tool named 'toolName' (which is 'wa_phone_register' for the matching operation) with description, input schema, and the generic HTTP handler.
    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)
            }]
          };
        }
      }
    );

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