Guides/For developers

You want to send a broadcast, check a report, or reply to a customer just by chatting with your own AI assistant (Claude, ChatGPT, Cursor), without opening the portal.

WACO MCP: plug WACO into your AI agent via the Model Context Protocol. The agent can compose a broadcast from plain text (WACO handles templates & Meta approval), show a preview, and send only after you approve. 9 min read

MCP (Model Context Protocol) is the standard way AI agents use outside services. WACO runs an MCP server at https://waco.id/mcp. Install it once in your agent app, then just talk: "Send to everyone labelled member: Hi {Nama}, weekend promo 20% off until Sunday." The agent does the rest — and never sends before you have seen a preview and approved it.

What the agent can do

Tool reference

ToolPurpose
kontak_ringkasConsenting contact count, labels with counts, data columns that can fill variables.
kontak_imporPut a customer list (number, name, other columns) into Contacts under one label.
template_daftarMeta-approved templates, for reuse.
blast_siapkanPlain text with {Nama} → template built & submitted to Meta; optional image header via URL.
blast_dari_templatePrepare a broadcast from an existing approved template.
blast_daftar / blast_statusBroadcast list and approval status; counts of queued, sent, delivered, read, replied, failed.
blast_pratinjauRecipients from a label or numbers, three filled-in samples, a 30-minute token. Required before sending.
blast_kirimSend, only with a preview token you approved. Max 5 per minute.
blast_penerimaPer-person list: who failed (reason & meaning), sent, delivered, read, replied.
kirim_pesanReply to one customer with free text (24-hour window).
pesan_status / pesan_riwayatWhatsApp status of one message ID; 30-day log for one number (incoming, outgoing statuses, API sends).
AI Operator — teach, tidy, and test the bot by chatting (needs the AI Operator subscription; top-ups and new brains stay in the dashboard)
asisten_ringkasBrains you have, on/off, knowledge counts, pending suggestions, remaining quota with a breakdown of what it was spent on, account switches.
asisten_pengetahuan_daftar / _tambah / _ubah / _hapusKnowledge cards: list, teach one fact, edit or approve a draft, delete.
asisten_pengetahuan_dari_sumberA website URL or pasted text distilled into inactive draft cards — you approve the ones you want.
asisten_pelajari_riwayatReads the team's chat history; the result becomes suggestions, never cards directly.
asisten_usulan_daftar / asisten_usulan_putuskanQuestions the bot handed to a human and the human's answer; accept as knowledge or reject.
asisten_aturBot name, tone (ramah/formal/santai), custom style guide, on/off.
asisten_kanalWhich channels (WhatsApp, live chat, Instagram) the bot answers.
asisten_sakelar_akunFollow-up for quiet leads and new-customer alerts to the owner.
asisten_ujiAsk the bot as if you were a customer and see the answer before switching it on.

REST equivalents for every tool are in the API documentation (Blast & contacts, Messages).

Installing in claude.ai, step by step

  1. Open Settings → Connectors, press Add custom connector.
  2. Fill in Name: WACO. Fill in Remote MCP server URL: https://waco.id/mcp. Claude reads the settings from the WACO server and marks several options "Detected".
  3. Authentication: leave Always required (the one marked Detected). WACO requires sign-in for every tool.
  4. OAuth client: either option works with WACO — Use Anthropic's hosted client metadata (Anthropic's recommendation, no registration) or No client ID — register one automatically (marked Detected). Do not pick Use your own OAuth client.
  5. Additional request headers: leave empty. Advanced: leave as is.
  6. Press Add. WACO appears in the connector list; press Connect.
  7. A WACO window opens: sign in with your portal account, then press Allow. The window closes itself and the connector shows as connected.
  8. Try it in a new chat: "How many WACO contacts do I have per label?" — Claude calls kontak_ringkas. The portal's Developer menu now lists a key named "MCP: Claude"; revoke it there to disconnect.

ChatGPT: Settings → Connectors (or Apps) → add an MCP connector with the same URL; the WACO sign-in appears on first use. The remaining steps are alike.

New tools not showing? claude.ai stores the tool list when the connector is connected. Whenever WACO adds a tool, open Settings → Connectors → WACO → Disconnect then Connect again (remove and re-add if needed), then start a new chat.

Installing with an API key

For clients without OAuth sign-in, create an API key in the portal → Developer. Then:

Claude Code (terminal):

claude mcp add --transport http waco https://waco.id/mcp   --header "Authorization: Bearer YOUR_API_KEY"

Cursor / Windsurf / JSON-configured clients:

{
  "mcpServers": {
    "waco": {
      "url": "https://waco.id/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

Claude Desktop (via the mcp-remote bridge):

{
  "mcpServers": {
    "waco": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://waco.id/mcp",
               "--header", "Authorization: Bearer YOUR_API_KEY"]
    }
  }
}

n8n: the MCP Client node, HTTP Streamable transport, the URL above, an Authorization header.

Example conversation

  1. "How many contacts are labelled returning-customers?" → the agent calls kontak_ringkas.
  2. "Send them: Hi {Nama}, your service renews automatically this month. Reply here with any questions." → blast_siapkan; the template is submitted; the agent says it is waiting for Meta.
  3. A few minutes later: "Approved yet? If so, show me the preview." → blast_status, then blast_pratinjau: 412 recipients, 3 samples, estimated cost.
  4. "OK, send it." → blast_kirim with the preview token. Done; the report follows via blast_status.

Teaching the AI Operator through the agent

If you subscribe to the AI Operator, the same agent can look after your bot without opening the Assistant page. The daily routine benefits most: questions the bot handed to a human, together with the answer your team gave, wait for your decision one by one. Through the agent that becomes a five-minute conversation.

  1. "What couldn't the bot answer yesterday?" → the agent calls asisten_usulan_daftar and shows each customer question with the human answer.
  2. "Turn 1 and 3 into knowledge, drop 2." → asisten_usulan_putuskan three times. Accepted answers become active knowledge cards immediately.
  3. "Teach the bot: the office is closed on Saturdays and Sundays, chats are answered on Monday." → asisten_pengetahuan_tambah, one fact per card.
  4. "Read the pricing page on my website and turn it into knowledge." → asisten_pengetahuan_dari_sumber. The cards are created inactive; the agent shows their content and you choose which to activate (asisten_pengetahuan_ubah). Nothing is learned silently.
  5. "Ask the bot: what time do you open?" → asisten_uji. You see the exact answer a customer would get, or a note that the bot chose to hand over to a human, before anything is switched on.
  6. "Make the tone more casual and call customers 'Kak'." → asisten_atur. Tone and knowledge are kept apart on purpose: tone is how it answers, knowledge is what it may answer.

What stays in the dashboard: adding another assistant and topping up quota, since both are billing. Switches such as turning the bot on, choosing channels, or quiet-lead follow-up are only changed by the agent when you clearly ask for it.

An API key gives the agent the same rights you have in the API. Keep it in your personal agent app and never share it. Broadcast sends are limited to 5 per minute per key and always go through a preview token; every message carries Meta's template rate.
Connector sign-in uses OAuth 2.1 with PKCE. Every app you allow gets its own key, so revoking Claude does not cut off ChatGPT. One account can allow several apps.
Still stuck after following this guide? Contact us from the dashboard — attach a screenshot if you have one, it speeds everything up.