DocsWebsitePricingSupportConsole
Get started

AI agents (MCP)

Let Claude, Cursor or another AI agent send SMS and OTPs, and read your messages, prices and balance, through the Model Context Protocol (MCP).

MCP server
https://api.siellabs.com/mcp

An agent connects in one of two ways. It can sign in: you approve it in the web app, and choose what it may do. Or it can use one of your API keys, as your own code does. Either way, every tool is an API request: the same checks, limits and prices as the endpoint behind it. The server speaks MCP over HTTP (Streamable HTTP), with no sessions.

An agent that may send can spend your balance. Give it only the permissions it needs: with only Read, it can look at messages, prices and the balance, and send nothing.

Connect by signing in#

Add the server to your agent with the address above and no key. When you connect, the agent opens the web app: sign in as you always do, tick what the agent may do, and approve.

  • Send messages: send SMS, charged to your balance.
  • OTP: send and check one-time codes.
  • Read: messages, the balance, prices and sender IDs.

The agent then shows on the API keys page as a connected app. Change what it may do there, or disconnect it. Its sign-in renews itself every hour; if it goes unused for 30 days, approve it again. Your account's users get an email each time an app is connected.

Claude (claude.ai and Claude Desktop)#

In Settings, Connectors, add a custom connector with the address https://api.siellabs.com/mcp, then connect it and approve it. Connectors added on claude.ai work in Claude Desktop and the mobile apps too.

ChatGPT#

Add a custom connector (in Settings, Apps and Connectors, with developer mode on) with the address https://api.siellabs.com/mcp and OAuth as its authentication, then connect it and approve it.

Claude Code#

Terminal
claude mcp add --transport http --scope user siel https://api.siellabs.com/mcp

Then type /mcp in Claude Code, pick siel and choose Authenticate.

Connect with an API key#

For agents that can send a header, and for one that should keep working without anyone signing in. Create a key on the API keys page, with only the permissions the agent needs (see Limiting a key), then add the server to your agent with the key in place of YOUR_API_KEY.

Claude Code#

Terminal
claude mcp add --transport http --scope user siel https://api.siellabs.com/mcp --header "Authorization: Bearer YOUR_API_KEY"

Cursor#

In ~/.cursor/mcp.json, or .cursor/mcp.json in a project:

mcp.json
{
  "mcpServers": {
    "siel": {
      "url": "https://api.siellabs.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

VS Code#

In .vscode/mcp.json. VS Code asks for the key once and keeps it out of the file:

.vscode/mcp.json
{
  "servers": {
    "siel": {
      "type": "http",
      "url": "https://api.siellabs.com/mcp",
      "headers": { "Authorization": "Bearer ${input:siel-key}" }
    }
  },
  "inputs": [
    { "type": "promptString", "id": "siel-key", "description": "Siel API key", "password": true }
  ]
}

Windsurf#

In ~/.codeium/windsurf/mcp_config.json:

mcp_config.json
{
  "mcpServers": {
    "siel": {
      "serverUrl": "https://api.siellabs.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

Other agents#

Any agent that speaks MCP over HTTP and can send a header works: the address https://api.siellabs.com/mcp and the header Authorization: Bearer YOUR_API_KEY. One that speaks MCP's sign-in (OAuth 2.1 with PKCE and its own registration) can leave the header out and sign in instead.

Tools#

ToolWhat it doesPermission
send_smsSends one SMS. Send a messageSend messages
get_messageA message's status, price and receipts. Retrieve a messageRead
list_messagesYour latest messages, newest first. List messagesRead
get_pricesWhat you pay in one country, by network. PricesRead
get_balanceYour balance and what you can still spend. BalanceRead
list_sender_idsYour sender IDs and their review. Sender IDsRead
send_otpSends an OTP by Telegram or SMS. Send a codeOTP
check_otpChecks the code a person typed. Check a codeOTP
get_otpAn OTP's status, never its code. Look a code upOTP

An agent sees only the tools its key's permissions allow. A refused call comes back to the agent with the API's error code and message, so it can tell you what to change. There is no batch tool: an agent sends one message per call, and campaigns stay in the web app.

Most agents ask you before each tool call. Keep that on for send_sms and send_otp: each call is charged and can't be undone.

Things to ask#

  • "What's my balance, and how many messages did I send today?"
  • "Why did my last message to +447700900123 fail?"
  • "How much is an SMS to Germany?"
  • "Send 'Your table is ready' to +447700900123 from YourBrand."

Without an agent#

Each request is one JSON-RPC message in a POST, answered with one JSON answer. Tool results carry the API's JSON as text and as structured content.

List the tools
curl https://api.siellabs.com/mcp \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'