Skip to main content
Glama
YCloud-Developers

YCloud WhatsApp API MCP Server

wa_template_list

Retrieve WhatsApp message templates from YCloud API using name and language filters to manage business communications.

Instructions

List templates

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filter.nameYes
filter.languageYes

Implementation Reference

  • The execution logic for the 'wa_template_list' tool. This generic handler parses arguments into path params, query params, and body, then makes an axios request to the corresponding YCloud WhatsApp API endpoint (likely /whatsapp/.../templates list), returning the 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 input schema from OpenAPI operation parameters (path/query) and requestBody for the 'wa_template_list' 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:123-124 (registration)
    Renaming logic that maps original OpenAPI operationId containing 'whatsapp_template_list' to the MCP tool name 'wa_template_list'.
    } else if (operationId.includes('whatsapp_template_list')) {
      operationId = 'wa_template_list';
  • src/tools.ts:155-219 (registration)
    The server.tool() call within the OpenAPI path traversal loop that registers the 'wa_template_list' tool (and others) with name, description, schema, and handler.
    if (!registeredTools.has(toolName)) {
      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, which processes the OpenAPI spec and registers the 'wa_template_list' tool.
    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