Chaba for AI agents
Chaba is automation for houses and farms: small relay devices wired to pumps, gates, geysers and lights, controlled by chat, schedules and a phone app. Any AI agent can connect over MCP — introduce Chaba, quote plans, sign farmers up, and (with an agent credential) control devices for existing customers.
Built in Botswana, runs anywhere, Chaba. It works.
Connect
Point your MCP client at https://mcp.chaba.me/mcp (transport: streamable HTTP). Client can set headers? Send your key as the Authorization: Bearer header. Client can't (Grok, ChatGPT-style connectors)? Just paste the URL — on connect, a Chaba sign-in page opens where you paste the key once.
{
"mcpServers": {
"chaba": {
"url": "https://mcp.chaba.me/mcp"
}
}
}
{
"mcpServers": {
"chaba": {
"url": "https://mcp.chaba.me/mcp",
"headers": {
"Authorization": "Bearer YOUR_CHABA_AGENT_KEY"
}
}
}
}
Apps like Grok's connectors take just a URL. On connect they are redirected to Chaba's sign-in page: paste your Chaba agent key there and the app holds a token from then on (it renews automatically). No key yet? Just exploring on the same page unlocks the public tier below.
The same shape works in Claude Desktop's claude_desktop_config.json, Cursor, and most MCP clients that support remote servers. Once connected, ask your agent to call about_chaba — it returns an always-current brief on what the agent can do and how onboarding works.
Access tiers
Every connected agent gets it: tap Just exploring on the sign-in page, or connect with any credential. Your agent can:
The public tier never touches a farmer's devices or data.
Send your key as the connection's Authorization: Bearer header — or, if your app can't set headers, paste the key once on the sign-in page — and every Chaba tool opens: devices, switching, schedules, command history, customer API keys, app access links, provisioning, and the live event stream. Every call is audited and rate-limited as your agent — signups you drive are attributed to you.
Request a credential on WhatsApp
Agent keys are a Chaba Pro feature: the farmer (Pro or Unlimited) asks Chaba on WhatsApp and Jax issues the key in the chat — scoped to their farm. Free keeps WhatsApp control and the app but cannot connect a separate agent. A key is revoked automatically if the subscription ends.
The surface
45 tools. Device labels work as well as IDs — "turn on Pump North" is enough.
about_chaba | What Chaba is and what this connection may do — start here |
list_subscription_plans | Plans, prices, payment links — never quote from memory |
signup_customer | Sign a farmer up; idempotent on their WhatsApp number |
list_devices · get_device_state | See a customer's devices and live telemetry |
wait_for_events | Block until a device changes, then return — your agent gets woken by the farm instead of polling for it |
list_device_state_history | Recorded state history for a device, so you can tell a fault from a scheduled run |
register_webhook · list_webhooks · update_webhook · rotate_webhook_secret · send_webhook_test · delete_webhook | Outbound webhooks: Chaba POSTs a signed event to your URL the moment a device changes — the reactive shape for automations that can expose a URL but can't hold a socket or poll usefully |
switch_on · switch_off | Drive any relay, with per-relay addressing |
send_app_message | Message a customer's app directly — lands in their inbox and pushes to their phone even with the app closed; rate-limited and audited to your agent credential |
voice_command | A spoken clip in, a control proposal out — transcribed and scoped to the farmer's own devices; you confirm, then act with the switch tools |
create_schedule · run_device_for_minutes · list_schedules · delete_schedule · disable_schedule · enable_schedule | Recurring on/off windows and run-now timers in the farm's local time |
list_command_history | Audit trail of what was switched, when |
enable_customer_api_key · list_customer_api_keys · rotate_customer_api_key · disable_customer_api_key | Customer API credentials for their own integrations |
issue_agent_key · list_agent_keys · revoke_agent_key | The farmer's own agent credential (Pro feature; Jax issues it in chat) |
create_system_agent_key · list_system_agent_keys · revoke_system_agent_key | Operator credentials (system-scoped; for Chaba's own agents) |
create_pwa_access_link | One-time magic link into the Chaba app |
create_customer · update_customer_wireguard | Full agent-mediated onboarding and installer completion |
provision_device · update_device_label · disable_device · enable_device | Device lifecycle |
create_virtual_device | A relay with no hardware — a simulated device for demos and testing; every new signup gets one automatically |
set_customer_timezone · register_session · touch_session | Housekeeping |
Woken by the farm
Every other Chaba tool is pull: your agent decides when to look. That works for a question — "is the pump on?" — and fails for a responsibility — "what do I do about a pump that just came on by itself at 2am?". For that, Chaba has wait_for_events.
It is an ordinary tool call that blocks until a device reports a change, then returns. No push channel, no plugins, nothing your MCP client has to support — because a language model is invoked, not an event loop, and a socket cannot wake one on its own.
Call it in a loop. The first call hands back the farm's current state as a baseline. Every answer includes a next_since value; pass it back as since and the next call blocks for the next change. That same cursor means changes you were too busy to see are replayed to you rather than lost — an event stream that quietly drops a pump's third flip of the night is worse than no stream at all.
One event tells you something moved. It does not tell you whether that was the schedule, a fault, or a relay cycling all day. list_device_state_history answers that from the recorded reports, and changes_only: true leaves just the transitions.
Automations that can't sit in a loop — a cron runner, a Zapier-style tool, anything that starts, acts and exits — get the third shape: register_webhook makes Chaba POST a signed event to your URL the moment a device changes. Heartbeats are never delivered; retries cover about a day; send_webhook_test proves the pipe before real events flow. Verify the Chaba-Signature header with the secret you're shown once at registration.
Events are filtered server-side to the key's farm. A key can never observe another farm's devices. Webhooks bind to the credential's own tenant — they take no phone parameter. On the free plan they point at demo devices only.
For agent builders
26771234567), call signup_customer. Chaba then messages the farmer from its business WhatsApp with the right link automatically.Farmers keep their assistant. You get the credit. The pump just obeys.
Built in Botswana, runs anywhere, Chaba. It works.