Blog

Your AI agent can now send Canadian SMS

HonkIO now ships a Model Context Protocol server, so Claude, Cursor and Copilot can send SMS, verify phone numbers and check CASL consent directly, with no SDK and no glue code.

Sending an SMS takes a few lines of code. The work is everything around it: which number do you send from, does this recipient have CASL consent on file, is the number even Canadian, and what happens when the carrier rejects it.

So we built the HonkIO MCP server. It is published on npm as @honkio/mcp, and it gives an AI coding agent direct access to your HonkIO account: 41 tools covering messaging, phone verification, number provisioning, CASL compliance and webhooks.

Setting it up

There is nothing to install. Add this to Claude Code, Claude Desktop or Cursor, and npx fetches the server the first time your agent uses it. There is now a hosted endpoint as well, which lets an agent sign in instead of carrying a key; see the later post about it. This is the local route:

json
{
  "mcpServers": {
    "honkio": {
      "command": "npx",
      "args": ["-y", "@honkio/mcp"],
      "env": { "HONKIO_API_KEY": "mk_test_YOUR_KEY" }
    }
  }
}

Grab a key from your dashboard first. Start with a test key: it works before your first top-up, and sends and verifications are simulated for free, messages come back as delivered. That means an agent can explore most of the surface without spending a cent; buying or releasing a number, changing webhooks and running erasure still need a live key.

What it looks like in practice

Once it is connected, you stop writing API calls and start describing outcomes:

"Find an available 416 number, tell me what it costs, and don't buy anything yet."
"Check whether this number has valid CASL consent, and if it does, text them that their appointment is confirmed for 2pm tomorrow."
"Show me any webhook deliveries that failed and ended up in the dead-letter queue."

The compliance rules still apply. The agent is talking to the same API as everyone else, so a send without consent on file is refused exactly as it would be from curl. Nothing about the MCP server loosens CASL enforcement. It just means your agent gets told about it in plain language rather than a 451 status code.

The tools

  • Messaging: send SMS, list messages, read delivery status
  • Phone verification: start a one-time code, check it, list attempts
  • Numbers: search, buy and release Canadian numbers
  • CASL compliance: record and check consent, handle opt-outs
  • Webhooks: manage endpoints, inspect deliveries, replay failures
  • Account: balance, usage and API key management

Account tools resolve your account from the API key, so an agent never has to ask you for an account ID it has no way to discover.

One caution

On a live key, buying a number and sending messages spend real money, and agents act on instructions that can be vaguer than you intended. "Text everyone who signed up this week" is a sentence with a bill attached. Explore with a test key, and switch to live once you know what your agent actually does.

Getting started

Create a free account, copy a test key from the dashboard, and paste the config above into your editor. The full tool reference is on npm, and the API documentation covers the same ground for anyone who would rather call the REST endpoints directly.

Send your first message this afternoon.