CLI & MCP
Manage Wabery from your terminal, or wire it into an AI agent over MCP.
The Wabery CLI manages channels, flows, automations, and webhooks from your terminal. It also ships an MCP server, so you can hand Wabery to an AI coding agent (Claude, Codex, OpenCode) and build by describing the feature.
Install & sign in
Install it globally, then sign in:
npm i -g @wabery/cli
wabery loginpnpm add -g @wabery/cli
wabery loginbun add -g @wabery/cli
wabery loginwabery login authorizes the CLI in your browser (--no-open prints a URL
instead), asks you to choose a project, creates a key scoped to that project,
and saves it to your local CLI config — so the CLI and the MCP server are
authenticated with no copy-pasting. Run wabery doctor to confirm. To override,
set WABERY_API_KEY (and optionally WABERY_BASE_URL).
Run without installing
Prefer not to install globally? Run any wabery command on demand through your
package runner — handy for CI or a one-off wabery login:
npx wabery login
npx wabery doctorpnpm dlx wabery login
pnpm dlx wabery doctorbunx wabery login
bunx wabery doctorCommon commands
# verify your API key and base URL
wabery doctor
# confirm the project this key is scoped to
wabery projects list
# create a starter config, then validate it
wabery config init wabery.config.json --project-id "project_id"
wabery config validate wabery.config.json
# enroll a WhatsApp contact for testing (optionally with a language)
wabery contacts enroll --project-id "project_id" --phone "+14155550123" \
--preferred-language "es"
# update a contact's language or metadata later (metadata is shallow-merged)
wabery contacts update "contact_id" --preferred-language "id" \
--metadata '{"linked": true}'
# send a flow; use --config-key to pick the variant for the contact's language
wabery flows send "flow_id" --channel-id "channel_id" --contact-id "contact_id"
wabery flows send --config-key "lead_intake" --locale "es" \
--channel-id "channel_id" --contact-id "contact_id"MCP server
Print an MCP server config for your agent and drop it into its config file — Claude Code, Codex, and OpenCode are supported:
wabery mcp-config claude --raw
wabery mcp-config codex --raw
wabery mcp-config opencode --rawThen just describe what you want:
"Create a lead-intake flow and route submissions to our /leads webhook" —
the agent calls Wabery for you, end to end.
The MCP server exposes the same primitives as the API: channels, messages,
flows, automations, contacts, and webhooks. It starts read-only by default;
pass --write (or set WABERY_MCP_MODE=write) to allow mutations in a trusted
local session.