cleat.

Для ИИ-агентов

Номер телефона, который агент действительно может прочитать

Агент, который регистрируется в сервисах, спотыкается там же, где и человек: о шестизначный код из SMS. Cleat даёт ему настоящую мобильную линию США и MCP-сервер, чтобы её читать. Код попадает в контекст агента, а не на чей-то телефон.

Подключите клиент

Сервер работает по Model Context Protocol поверх HTTP. Его можно добавить в любой MCP-клиент, который умеет отправлять заголовок Authorization. API-ключ создаётся в настройках рабочего пространства и показывается только один раз.

mcp.json
{
  "mcpServers": {
    "cleat": {
      "type": "http",
      "url": "https://cleat.so/api/mcp",
      "headers": { "Authorization": "Bearer clt_your_api_key" }
    }
  }
}

Ключ определяет, что доступно агенту: линии его рабочего пространства, и больше ничего. Отзовите ключ, и при следующем вызове агент потеряет доступ. Пароли и сессии это не затрагивает.

Четыре инструмента

ИнструментЧто делает
list_linesНомера рабочего пространства, от новых к старым. С него и начинайте: остальные инструменты принимают lineId из его ответа.
list_messagesSMS, которые пришли на линию, от новых к старым. До 200.
latest_codeПоследний код подтверждения на линии или found: false, если кодов ещё не было.
wait_for_codeЖдёт *следующий* код и возвращает его. До 55 секунд, по умолчанию 30.
Если ключу что-то недоступно, инструмент возвращает понятную ошибку, а не падает, и модель может на неё отреагировать.

Ждать лучше, чем опрашивать

wait_for_code учитывает только SMS, пришедшие после начала вызова, поэтому код от прошлого входа не спутают с новым. Вызовите его прямо перед шагом, после которого придёт SMS, и только потом отправьте форму. Инструмент уже ждёт.

Ожидание следующего кода
curl https://cleat.so/api/mcp \
  -H "Authorization: Bearer $CLEAT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "wait_for_code",
      "arguments": { "lineId": "8f14e45f-ceea-4b6b-9d3c-2a1f0e7c5b10", "timeoutSeconds": 45 }
    }
  }'
Ответ
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "structuredContent": {
      "found": true,
      "from": "55512",
      "body": "Your verification code is 704 118",
      "code": "704118",
      "receivedAt": "2026-09-11T10:02:41.000Z"
    }
  }
}

Если за отведённое время ничего не пришло, он возвращает found: false с timedOut: true. Это не ошибка, а обычный результат: агент может просто повторить попытку.

Что это такое, а что нет

  • Только приём. Cleat Line принимает SMS. Отправлять их она не может, и инструмента для отправки нет. Звонить или отвечать на звонки она тоже не может.
  • Код, продиктованный по телефону, тоже доходит. Когда сервис диктует код автоматическим звонком, звонок расшифровывается. Расшифровка приходит как обычное сообщение: код уже извлечён, номер звонившего указан в from. Поля, которое помечало бы сообщение как звонок, нет.
  • Один номер на подписку. Каждая линия стоит 24,99 $ в месяц. Cleat — не пул одноразовых номеров, и эндпоинта для их ротации нет.
  • Каждой линией владеет человек, подтвердивший личность. Личность проверяется один раз на аккаунт, ещё до выдачи любого номера. Агент не может зарегистрироваться сам.
  • 120 запросов в минуту на ключ. Пока wait_for_code ждёт, запросы не расходуются.
  • Линию на удержании прочитать нельзя. Если подписка прервётся, номер удерживается, а его SMS остаются заблокированными, пока подписка не возобновится.

Если MCP вам не подходит

Те же данные доступны через обычный REST API с подписанными вебхуками. Он лучше подходит для долго работающего сервиса, чем для сессии агента: см. Cleat для разработчиков. Чтобы делиться кодами с людьми, а не с программами, используйте входящие, которые видит вся команда. Настоящая мобильная линия получает коды, которые интернет-номер не получит никогда: см. не-VoIP номера и Google Voice и коды подтверждения.

Вопросы

Какие клиенты подходят?

Любой MCP-клиент, который может обратиться к HTTP-серверу и задать заголовок Authorization. Сервер принимает JSON-RPC через POST и возвращает обычный JSON. Настраивать SSE не нужно.

Может ли агент отправить SMS?

Нет. Cleat Line работает только на приём, и ни один инструмент ничего не отправляет.

Что, если сервис диктует код по телефону, а не присылает SMS?

Код всё равно дойдёт. Звонок расшифровывается и сохраняется как SMS, поэтому latest_code и wait_for_code вернут его код, а list_messages покажет номер звонившего в from. Ответить на звонок или перезвонить агент не может.

Можно ли дать каждому агенту свой номер?

Да. Добавьте по линии на каждого агента в одном рабочем пространстве: у каждой своя подписка за 24,99 $ и свой ключ. Каждый ключ видит все линии своего рабочего пространства. Если агенты не должны видеть SMS друг друга, используйте отдельные рабочие пространства.

Что будет, если два агента ждут код на одной линии?

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

Нужно ли агенту подтверждать личность?

Проверку проходит аккаунт, один раз, и проходит её человек. Агенты работают по ключу проверенного аккаунта и никогда не регистрируются сами.

Есть ли бесплатный тариф?

Нет. Одна линия стоит 24,99 $ в месяц, отменить можно в любой момент.

Получите линию, которую сможет читать ваш агент.

24,99 $ в месяц · отменить можно в любой момент

  • Личность каждого владельца подтверждена
  • SMS видит только ваша команда
  • Отменить можно в любой момент