BusySMS

MCP for AI agents

SMS codes for AI agents: read verification codes through MCP

An agent that can sign in to a website still stops at the SMS code. The BusySMS MCP server removes that stop: the agent triggers the sign-in, calls wait_for_code, and receives the code that just arrived on a phone you own, with no human reading digits off a screen.

$5 per verified number per month · 7-day free trial · billed by Stripe on the web

On this page

What the MCP server gives an agent

BusySMS runs a remote MCP server at https://busysms.net/mcp over Streamable HTTP. Once connected, an agent can call tools that read your own verification codes. These matter most:

wait_for_code

Waits for the next code: about a minute by default, 90 seconds at most. It returns nothing rather than a stale code, because a used code costs a login attempt. Filters: phone, sender, service, deviceId.

get_latest_code

The newest code, checked once, with no waiting.

get_latest_sms

The newest SMS in full, for when the agent needs the whole text and not just the digits.

list_devices, diagnose_my_gateway

Which phones are enrolled, verified and online, and why codes may not be arriving.

test_my_gateway

Texts a test code to your own number and reports whether the phone forwarded it back.

The full list, including public tools that any assistant can call without an account, is on the MCP tools page and, machine-readable, at /.well-known/mcp.json.

Connect your agent

Sign-in is OAuth 2.1 with dynamic client registration: point the client at the URL, a browser window opens, you confirm with a code sent to your email (or to the phone on your account) and press Allow. There is no client ID or secret to paste.

claude mcp add --transport http busysms https://busysms.net/mcp

In the Claude app, open Customize → Connectors → + Add → Add custom connector, name it BusySMS and paste https://busysms.net/mcp. Other MCP clients, Grok included, add it as a remote HTTP server with the same URL. A client that cannot do OAuth can send a bsk_live_ API key as a Bearer token instead.

A typical agent flow

  1. 1

    Start the sign-in

    The agent fills in the login form or calls the service, and the service texts a code to your number.

  2. 2

    Wait for the code

    It calls wait_for_code straight away, passing phone or sender when you have several numbers.

  3. 3

    Use the code

    It types the code in and carries on. If nothing arrives, it gets nothing back and can retry or ask you, instead of guessing.

A prompt as plain as this works with any connected agent:

Prompt
Sign in to staging.example.com as +44 7700 900123.
When the site asks for the SMS code, call BusySMS wait_for_code
with phone 447700900123, enter the code, and tell me when you are in.

Several numbers, shared numbers, and when codes do not come

With more than one number on your account, or a number a teammate has shared with you, "the next code" is ambiguous. Pass phone with the receiving number so a code for another sign-in on another number is not returned, or sender with part of the sender's name. Shared numbers work like your own: once you accept a share, the code tools include its new codes.

If codes are not arriving at all, ask the agent to run diagnose_my_gateway: it compares what is enrolled, verified and online and suggests the next step. test_my_gateway goes further and proves the whole path end to end. Let the agent ask you first, because it sends a real SMS to your number.

Safety built into the tools

  • Your phones only. Every tool is scoped to your account and to numbers shared with you. An agent cannot read anyone else's messages.
  • No secret in the transcript. create_api_key makes a REST key but never returns it: you get a one-time link, valid for 15 minutes, that you open yourself. SMS text can carry instructions written by a stranger, so a long-lived key must never enter the agent's context.
  • Changes need a signed-in session. Tools that change things, such as testing your gateway, sharing a number or revoking a key, cannot be used with an API key at all.
  • Messages to yourself only. send_sms_to_me and send_email_to_me have no recipient argument; they can only reach the number and address on your own account.

What the agent needs on your side

  • A phone with the SIM: Android with the BusySMS app, or an iPhone with a Shortcuts automation.
  • The number verified in BusySMS.
  • An active trial or subscription. Without one, code-reading tools return a billing error, while list_devices keeps working so the agent can tell you why.

No account yet?

The public tools answer product questions without signing in (pricing, setup steps, device requirements, troubleshooting), so an assistant can tell you accurately what BusySMS does before you sign up. Reading codes needs an account: $5 per verified number per month after a 7-day free trial.

FAQ

Frequently asked questions

Is there an MCP server for SMS?

Yes. BusySMS runs one at https://busysms.net/mcp that reads verification codes received on phones you own. It does not send SMS and does not provide numbers.

Which AI clients work with it?

Any MCP client that supports remote HTTP servers: the Claude app, Claude Code, OpenAI Codex CLI, Grok and others.

Can the agent read all my messages?

Only what BusySMS captures: every text from an Android SIM set to Sync all texts (you choose at setup), and verification-style messages from the rest. Code tools return only codes, and the tools reach only your own numbers and numbers shared with you, which show codes only.

Can I connect without OAuth?

Yes: send a bsk_live_ API key as a Bearer token. Tools that change things stay unavailable to keys.

How long does wait_for_code wait?

60 seconds by default, up to 90 seconds. If nothing new arrives it returns no code, and the agent can call it again.

Does the agent ever see my API key?

No. If an agent creates a key for you, it gets a one-time link instead of the secret, and you collect the key yourself in your browser.

Blog

More from the blog

All articles

Keep reading

Related guides

All guides

Try it on a number you own

Install the app, verify your number and read your first code today. Every account starts with a 7-day free trial; after that it is $5 per verified number per month, and you can cancel any time.