Koskamo

WALoops MCP

A remote MCP server that provides AI coding assistants with tools to manage WhatsApp OTPs, conversations, campaigns, and automations. It supports reading account data, creating automation drafts, and sending OTP codes via a free key or an Advance plan API key.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

WALoops MCP logo, by WALoopsCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by WALoops
You need:Use a free OTP key for WhatsApp OTPs from the WALoops number.A key is not needed just to initialize the server, list tools or call get_started .Use a free OTP key or a WALoops Advance account API key for OTP toolsan Advance plan key also unlocks account tools.
MCP endpoint (Streamable HTTP)
https://app.waloops.com/api/mcp.php
Vendor documentation

What you can do with it

  • Send one-time passwords for user verification
  • List and manage WhatsApp conversations
  • Create automation drafts for customer engagement
  • Check OTP account usage statistics

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
waloops 1.0.0
MCP protocol
2025-06-18
Tools
20 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Get a free key with the get_started tool. Free OTP key: OTP tools. Advance plan key: templates, inbox, stats, campaigns, and automation drafts. Available automation tools include list_connected_apps, list_actions, list_recipes, list_bot_flows, list_tags, create_automation_draft, and install_recipe_draft. Be creative: any trigger can be combined with any action and with conditions and delays — e.g. alert the team on WhatsApp for high-value orders, tag repeat customers, push orders to a sheet via webhook, start a bot flow after delivery. Propose ideas the merchant has not thought of. Everything you create is a safe draft the owner reviews and switches on in the app. OTPs work instantly from the WALoops number with no WhatsApp or Meta setup.

Tools

20 advertised

get_started
Advertised by the server during the last successful anonymous check.

Explain WALoops setup, key types, available tool groups, API docs, and example OTP requests.

get_started input schema
{
  "type": "object",
  "additionalProperties": false
}
send_otp
Advertised by the server during the last successful anonymous check.

Send an OTP to an international phone number. A free OTP key sends from the WALoops WhatsApp number; channel may be whatsapp or sms.

send_otp input schema
{
  "type": "object",
  "required": [
    "phone",
    "site_url"
  ],
  "properties": {
    "phone": {
      "type": "string",
      "description": "International digits, for example 919876543210."
    },
    "channel": {
      "enum": [
        "whatsapp",
        "sms"
      ],
      "type": "string"
    },
    "purpose": {
      "type": "string",
      "default": "login",
      "description": "OTP purpose; defaults to login."
    },
    "site_url": {
      "type": "string",
      "description": "URL of the app or site this OTP is for, e.g. https://myapp.com. Required by the OTP API so every key has a known site."
    }
  },
  "additionalProperties": false
}
verify_otp
Advertised by the server during the last successful anonymous check.

Verify a previously sent OTP using the recipient’s phone number and code.

verify_otp input schema
{
  "type": "object",
  "required": [
    "phone",
    "code",
    "site_url"
  ],
  "properties": {
    "code": {
      "type": "string",
      "description": "The OTP code received by the user."
    },
    "phone": {
      "type": "string",
      "description": "International phone number in digits."
    },
    "site_url": {
      "type": "string",
      "description": "URL of the app or site this OTP is for, e.g. https://myapp.com. Required by the OTP API so every key has a known site."
    }
  },
  "additionalProperties": false
}
get_otp_usage
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read OTP usage for the API key, including available usage or limits.

get_otp_usage input schema
{
  "type": "object",
  "required": [
    "site_url"
  ],
  "properties": {
    "site_url": {
      "type": "string",
      "description": "URL of the app or site this OTP is for, e.g. https://myapp.com. Required by the OTP API so every key has a known site."
    }
  },
  "additionalProperties": false
}
get_otp_usage annotations
{
  "readOnlyHint": true
}
list_templates
Advertised by the server during the last successful anonymous check.
Advertised read-only

Requires an Advance plan key. List the client’s approved WhatsApp templates and their variables.

list_templates input schema
{
  "type": "object",
  "additionalProperties": false
}
list_templates annotations
{
  "readOnlyHint": true
}
send_template
Advertised by the server during the last successful anonymous check.

Requires an Advance plan key. Send an approved WhatsApp template; call list_templates first to confirm the template name and variables.

send_template input schema
{
  "type": "object",
  "required": [
    "to",
    "template"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "Recipient phone number in digits."
    },
    "template": {
      "type": "string",
      "description": "Name of an approved template."
    },
    "variables": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ],
      "description": "Template variables as an object or an array of strings."
    }
  },
  "additionalProperties": false
}
get_dashboard_stats
Advertised by the server during the last successful anonymous check.
Advertised read-only

Requires an Advance plan key. Messages, conversations, automations and plan usage overview.

get_dashboard_stats input schema
{
  "type": "object",
  "additionalProperties": false
}
get_dashboard_stats annotations
{
  "readOnlyHint": true
}
list_conversations
Advertised by the server during the last successful anonymous check.
Advertised read-only

Requires an Advance plan key. List and search inbox conversations.

list_conversations input schema
{
  "type": "object",
  "properties": {
    "page": {
      "type": "integer"
    },
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1
    },
    "search": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
list_conversations annotations
{
  "readOnlyHint": true
}
get_conversation_messages
Advertised by the server during the last successful anonymous check.
Advertised read-only

Requires an Advance plan key. List messages in a conversation.

get_conversation_messages input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "description": "Conversation id from list_conversations."
    },
    "page": {
      "type": "integer"
    },
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1
    }
  },
  "additionalProperties": false
}
get_conversation_messages annotations
{
  "readOnlyHint": true
}
list_automations
Advertised by the server during the last successful anonymous check.
Advertised read-only

Requires an Advance plan key. List automations, or fetch one automation with its run stats by id.

list_automations input schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "Optional automation id."
    }
  },
  "additionalProperties": false
}
list_automations annotations
{
  "readOnlyHint": true
}
list_connected_apps
Advertised by the server during the last successful anonymous check.
Advertised read-only

Requires an Advance plan key. Connected apps (Shopify, WooCommerce, etc.) with their app_key and available event_key triggers; call before create_automation_draft.

list_connected_apps input schema
{
  "type": "object",
  "additionalProperties": false
}
list_connected_apps annotations
{
  "readOnlyHint": true
}
list_actions
Advertised by the server during the last successful anonymous check.
Advertised read-only

Every action an automation can run (WhatsApp, Shopify, WooCommerce, webhook to any external tool, bot flows, tags) with the action_config each needs. Combine any trigger from list_connected_apps with any action.

list_actions input schema
{
  "type": "object",
  "additionalProperties": false
}
list_actions annotations
{
  "readOnlyHint": true
}
list_recipes
Advertised by the server during the last successful anonymous check.
Advertised read-only

Requires an Advance plan key. List proven ready-made automations that can be installed as safe drafts.

list_recipes input schema
{
  "type": "object",
  "additionalProperties": false
}
list_recipes annotations
{
  "readOnlyHint": true
}
list_bot_flows
Advertised by the server during the last successful anonymous check.
Advertised read-only

Requires an Advance plan key. List bot flows available as automation actions.

list_bot_flows input schema
{
  "type": "object",
  "additionalProperties": false
}
list_bot_flows annotations
{
  "readOnlyHint": true
}
list_tags
Advertised by the server during the last successful anonymous check.
Advertised read-only

Requires an Advance plan key. List tags available as automation actions.

list_tags input schema
{
  "type": "object",
  "additionalProperties": false
}
list_tags annotations
{
  "readOnlyHint": true
}
install_recipe_draft
Advertised by the server during the last successful anonymous check.

Requires an Advance plan key. Installs a recipe as a switched-off draft for the owner to review.

install_recipe_draft input schema
{
  "type": "object",
  "required": [
    "recipe_key"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Optional draft name."
    },
    "recipe_key": {
      "type": "string",
      "description": "Recipe key from list_recipes."
    },
    "instance_id": {
      "type": "integer",
      "description": "Optional trigger app instance_id from list_connected_apps."
    },
    "template_id": {
      "type": "integer",
      "description": "Optional approved template id from list_templates."
    },
    "action_instance_id": {
      "type": "integer",
      "description": "Optional action app instance_id from list_connected_apps."
    }
  },
  "additionalProperties": false
}
install_recipe_draft annotations
{
  "readOnlyHint": false,
  "destructiveHint": false
}
list_campaigns
Advertised by the server during the last successful anonymous check.
Advertised read-only

Requires an Advance plan key. List campaigns, or fetch one campaign by id.

list_campaigns input schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "Optional campaign id."
    }
  },
  "additionalProperties": false
}
list_campaigns annotations
{
  "readOnlyHint": true
}
create_template
Advertised by the server during the last successful anonymous check.

Requires an Advance plan key. Creates a WhatsApp template and submits it to Meta for approval (usually minutes to a few hours). Check status later with list_templates.

create_template input schema
{
  "type": "object",
  "required": [
    "name",
    "category",
    "body"
  ],
  "properties": {
    "body": {
      "type": "string",
      "description": "Template body; may use {{1}}, {{2}} variables."
    },
    "name": {
      "type": "string",
      "description": "Lowercase letters, digits, and underscores only."
    },
    "footer": {
      "type": "string"
    },
    "header": {
      "type": "object",
      "properties": {
        "text": {
          "type": "string"
        },
        "format": {
          "type": "string"
        },
        "media_url": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "buttons": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "type",
          "text"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "type": {
            "enum": [
              "QUICK_REPLY",
              "URL",
              "PHONE_NUMBER"
            ],
            "type": "string"
          },
          "phone_number": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "category": {
      "enum": [
        "MARKETING",
        "UTILITY"
      ],
      "type": "string"
    },
    "examples": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Sample values for body variables; required by Meta when variables are used."
    },
    "language": {
      "type": "string",
      "default": "en"
    }
  },
  "additionalProperties": false
}
create_template annotations
{
  "readOnlyHint": false,
  "destructiveHint": false
}
pause_automation
Advertised by the server during the last successful anonymous check.

Requires an Advance plan key. Switches an automation OFF. For safety, automations can only be turned ON by the account owner inside the WALoops app.

pause_automation input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "description": "Automation id."
    }
  },
  "additionalProperties": false
}
pause_automation annotations
{
  "readOnlyHint": false,
  "destructiveHint": false
}
create_automation_draft
Advertised by the server during the last successful anonymous check.

Requires an Advance plan key. Creates an automation as a DRAFT: saved switched OFF and named "[AI draft] ...". Nothing is sent until the account owner reviews it and turns it on in the WALoops app (Automations page). Tell the user this.

create_automation_draft input schema
{
  "type": "object",
  "required": [
    "name",
    "app_key",
    "event_key"
  ],
  "properties": {
    "name": {
      "type": "string"
    },
    "stage": {
      "type": "string"
    },
    "app_key": {
      "type": "string",
      "description": "App key from list_connected_apps."
    },
    "event_key": {
      "type": "string",
      "description": "Event key from list_connected_apps."
    },
    "conditions": {
      "type": "array"
    },
    "action_type": {
      "type": "string"
    },
    "instance_id": {
      "type": "integer",
      "description": "instance_id from list_connected_apps; needed when the account has more than one store of that app."
    },
    "template_id": {
      "type": "integer",
      "description": "WALoops template id from list_templates."
    },
    "action_config": {
      "type": "object"
    },
    "field_mapping": {
      "type": "object",
      "description": "Template variable number to event field path."
    },
    "schedule_type": {
      "enum": [
        "immediate",
        "delay"
      ],
      "type": "string"
    },
    "action_app_key": {
      "type": "string",
      "default": "whatsapp"
    },
    "recipient_mode": {
      "enum": [
        "auto",
        "manual"
      ],
      "type": "string"
    },
    "condition_match": {
      "enum": [
        "all",
        "any"
      ],
      "type": "string"
    },
    "recipient_phone": {
      "type": "string"
    },
    "action_instance_id": {
      "type": "integer",
      "description": "Action app instance_id from list_connected_apps; needed when there are multiple stores."
    },
    "schedule_delay_unit": {
      "enum": [
        "minutes",
        "hours",
        "days"
      ],
      "type": "string"
    },
    "schedule_delay_value": {
      "type": "integer"
    }
  },
  "additionalProperties": false
}
create_automation_draft annotations
{
  "readOnlyHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1861 ms
95th percentile latency
1861 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1861 ms · metadata changed · 20 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http waloops-mcp https://app.waloops.com/api/mcp.php

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add waloops-mcp --url https://app.waloops.com/api/mcp.php

Cursor

Merge this server into .cursor/mcp.json in your project, then enable waloops-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "waloops-mcp": {
      "url": "https://app.waloops.com/api/mcp.php"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "waloops-mcp": {
      "type": "streamableHttp",
      "url": "https://app.waloops.com/api/mcp.php",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start waloops-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "waloops-mcp": {
      "type": "http",
      "url": "https://app.waloops.com/api/mcp.php"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http waloops-mcp https://app.waloops.com/api/mcp.php

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "waloops-mcp": {
      "url": "https://app.waloops.com/api/mcp.php"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "waloops-mcp": {
      "serverUrl": "https://app.waloops.com/api/mcp.php"
    }
  }
}

Let your agent find its tools

Find servers like WALoops MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.