Приём SMS для ИИ-агентов

Агент может купить номер и прочитать код без участия человека.

Личность предъявлять некому

Аккаунт — это seed-фраза, которую агент генерирует и хранит сам. Нечего подтверждать, нечего отдавать, некем быть.

Карта не нужна

Пополнение криптовалютой. Агент с кошельком платит за себя сам — ни номера карты, ни платёжного адреса, ни человека, утверждающего оплату.

Читать страницы не нужно

Каталог, цены, покупка и доставка — всё это вызовы инструментов. Ничему здесь не нужен ни браузер, ни скриншот.

Как подключить MCP-сервер?

Один эндпоинт, JSON-RPC 2.0 поверх streamable HTTP. Ключ API запрашивать не нужно, ставить нечего: инструменты каталога работают ещё до появления аккаунта, а seed нужен только тем, которые тратят деньги.

https://otpdrop.com/mcp

Claude Code

claude mcp add --transport http otpdrop https://otpdrop.com/mcp

Cursor, Windsurf, VS Code и большинство остальных

Клиенты, которые умеют HTTP сами, принимают этот же блок. Cursor и Windsurf называют ключ mcpServers; VS Code — servers.

{
  "mcpServers": {
    "otpdrop": {
      "type": "http",
      "url": "https://otpdrop.com/mcp"
    }
  }
}
КлиентГде лежит конфигурация
Claude Codeclaude mcp add или .mcp.json в проекте
Claude DesktopНастройки → Коннекторы → Добавить свой коннектор
Cursor~/.cursor/mcp.json или .cursor/mcp.json для проекта
VS Code.vscode/mcp.json, в разделе servers
Windsurf~/.codeium/windsurf/mcp_config.json

MCP-клиенты меняются быстро, и эти пути тоже. Если что-то не совпадает с тем, что видите вы, посмотрите документацию самого клиента — от нас здесь только адрес и транспорт.

А если клиент умеет только stdio?

Некоторые клиенты не открывают HTTP-сервер MCP напрямую. Пробросьте его локально:

{
  "mcpServers": {
    "otpdrop": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://otpdrop.com/mcp"]
    }
  }
}

А если MCP-клиента нет вовсе?

Сервер — обычный HTTP-эндпоинт, поэтому обратиться к нему может любой язык. Так выглядит список инструментов:

curl -s -X POST https://otpdrop.com/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Для инструментов, которым нужен аккаунт, добавьте Authorization: Bearer <seed>. Если говорить на JSON-RPC не хочется, те же операции доступны обычными REST-эндпоинтами в справочнике API.

Что агент может делать в OTPDrop?

ИнструментЧто делаетНужен seed
list_servicesВсе сервисы с кодом и категориейнет
list_countriesВсе страны с телефонным кодомнет
list_catalogПолный каталог с матрицей ценнет
quoteЦена для одной пары «сервис — страна»нет
agent_helpИнструкции по работе с этим сервером прямо в контекстенет
create_accountСоздать аккаунт и получить его seedнет
topupПолучить адрес и сумму пополнения для монетыда
topup_statusПроверить, зачислено ли пополнениеда
buy_numberКупить номер со списанием с балансада
get_orderДетали заказа и текущий статусда
get_smsКод подтверждения, как только он придётда

Для клиентов, которым так удобнее, каталог продублирован тремя ресурсами только для чтения: catalog://services, catalog://countries и catalog://pairs.

Как выглядит полный проход?

Пять вызовов от начала до конца. Внешнего мира ждёт только один шаг — подтверждение пополнения в сети.

  1. create_account — возвращает seed. Сохраните его: это единственный путь обратно в аккаунт, и сбросить его нельзя.
  2. topup — назовите монету и сумму, получите адрес, точную сумму к отправке и срок действия. Отправьте средства с кошелька агента.
  3. topup_status — опрашивайте, пока пополнение не зачислится на баланс.
  4. buy_number — назовите сервис и страну. Деньги списываются, номер выдаётся сразу: ни адреса на каждую покупку, ни второго ожидания.
  5. get_sms — опрашивайте, пока не придёт код. Если он не придёт до истечения заказа, цена вернётся на баланс автоматически.

Пополняйте один раз, покупайте много. Одного пополнения хватает на столько номеров, на сколько хватит баланса, поэтому ожидание подтверждения выпадает только на первую покупку в сессии.

Что стоит сказать своему агенту?

  • Seed невосстановим. Агент, который его сгенерировал и не сохранил, выбросил вместе с ним и баланс.
  • Пополнение зачисляется после подтверждения в сети, и это не мгновенно — опрашивайте topup_status, а не считайте успех состоявшимся.
  • Отправляйте только ту монету и в той сети, которые указаны в счёте. Перевод не в ту сеть вернуть нельзя.
  • Пришедший код завершает заказ и оплачивается, даже если сервис-получатель его отклонил. См. условия возврата.
  • Возвраты приходят на баланс OTPDrop, а не на кошелёк.

Пишете обычную интеграцию? Документация REST API описывает эндпоинты, авторизацию и коды ошибок.