面向 AI 智能体
一个智能体真正读得到的手机号码
智能体在你已有的账号里干活时,会和人卡在同一个地方:一条短信发来的六位验证码。Cleat 给它一条真实的美国手机线路,再配一个读取这条线路的 MCP 服务器。验证码直接进入智能体的上下文,而不是发到某个人的手机上。
接入你的客户端
服务器通过 HTTP 提供 Model Context Protocol。任何能发送 Authorization 请求头的 MCP 客户端都可以添加它。API 密钥在工作区设置中创建,只会显示一次。
{
"mcpServers": {
"cleat": {
"type": "http",
"url": "https://cleat.so/api/mcp",
"headers": { "Authorization": "Bearer clt_your_api_key" }
}
}
}密钥决定智能体能访问什么。不加限制时,就是它所在工作区的全部线路,其他一概访问不了。创建密钥时可以收窄:限定到指定线路,并设置一个失效日期——这样智能体只能读到你指定的那条线路,其他线路一律返回 404,过了日期密钥返回 401,code 为 key_expired。撤销密钥后,智能体下一次调用就会被拒绝。密码和登录会话都不受影响。
四个工具
| 工具 | 作用 |
|---|---|
list_lines | 工作区里的号码,从新到旧排列。先调用它:其他工具都要用到它返回的 lineId。 |
list_messages | 某条线路收到的短信,从新到旧排列。limit 取值 1 到 200,默认 20。 |
latest_code | 某条线路最近收到的验证码;还没收到则返回 found: false。可选的 from 和 service 可以把范围缩到某一个发送方。 |
wait_for_code | 等待*下一条*验证码并返回。最长 55 秒,默认 30 秒。同样接受可选的 from 和 service;来了不匹配的验证码会继续等。 |
等待比轮询好
wait_for_code 只认调用开始之后到达的短信,之前登录留下的验证码不会被误当成这一次的。在触发短信的那一步之前调用它,然后再提交表单。这时工具已经在等了。
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,
"id": "c9a7e0d2-5b1f-4e8a-9f3c-6d2b1a0e4f77",
"line": { "id": "8f14e45f-ceea-4b6b-9d3c-2a1f0e7c5b10", "phone": "13055550100", "label": "Agent line" },
"from": "55512",
"body": "Your verification code is 704 118",
"code": "704118",
"receivedAt": "2026-09-11T10:02:41.000Z",
"service": null,
"contact": null,
"label": null
},
"content": [{ "type": "text", "text": "…the same JSON again, for the model to read" }]
}
}如果超时仍未收到,它会返回 found: false 和 timedOut: true。这不是错误,而是普通结果,智能体可以重试。
为什么号码必须比注册本身活得更久
卖给智能体用的号码,多数是按分钟或按周租的,用完就退回号码池。这对一次注册够用,对智能体要长期持有的账户就不行。连卖一次性号码的厂商自己也承认这一点:“If your agent creates an account and keeps operating it, a one-time number is a problem, because platforms periodically re-verify, and if the number is gone the account locks out.”(如果你的智能体注册了账户并持续使用,一次性号码就是个问题,因为平台会定期重新验证,而号码一旦没了,账户就会被锁。)还有:“A dedicated number stays assigned to that agent's account, holds its verification history, and receives the new code whenever a platform re-checks”(专属号码会一直绑定在该智能体的账户上,保留它的验证记录,平台每次重新核验时都能收到新的验证码,GeeLark,2026 年 9 月 16 日)。
Cleat 线路从设计上就属于持久的那一类。一个号码对应一份订阅,没有租期倒计时,也没有任何接口会把它轮换掉。三个月后的重新核验仍会落在同一条线路上,而带签名的 webhook可以唤醒一个当时并没在运行的流程来接住它。Cleat 不做的,正是那套说辞的另一半:成批的新号码,用来批量开户。一份订阅一条线路,一位已验证的持有人,用于这位持有人有权持有的账户。
它能做什么,不能做什么
- 只能接收。Cleat Line 只接收短信,不能发送,也没有任何工具会尝试发送。它也不能拨打或接听电话。
- 电话念出的验证码也能收到。服务用自动语音来电念出验证码时,来电会被转成文字。转写文字作为普通消息送达,验证码已经提取好,来电号码在
from里。没有字段会标明它来自来电。 - 一个订阅一个号码。每条线路每月 US$24.99。Cleat 不是一次性号码池,也没有轮换号码的端点。
- 每条线路都有一位已验证身份的真人持有人。发放任何号码之前,账户要先完成一次身份验证。智能体没法自己注册。
- 每个密钥每分钟 120 次请求。正在等待的
wait_for_code不消耗请求次数。 - 被保留的线路无法读取。订阅失效后,号码会被保留,短信保持锁定,直到订阅恢复。
如果你不想用 MCP
同样的数据也可以通过普通的 REST API 和签名 Webhook 获取。比起智能体会话,它更适合长期运行的服务:请看面向开发者的 Cleat。如果要把验证码共享给人而不是程序,请用团队收件箱。真实的手机线路能收到网络号码永远收不到的验证码:请看非 VoIP 号码和Google Voice 与验证码。
常见问题
哪些客户端可以用?
任何能访问 HTTP 服务器、能设置 Authorization 请求头的 MCP 客户端。服务器通过 POST 处理 JSON-RPC 请求,返回普通 JSON,不需要配置 SSE。
智能体能发短信吗?
不能。Cleat Line 只能接收,没有任何工具能发送。
如果服务打电话念验证码,而不是发短信呢?
照样能收到。来电会被转成文字,像短信一样保存,所以 latest_code 和 wait_for_code 会返回其中的验证码,list_messages 会在 from 里显示来电号码。智能体不能接听,也不能回拨。
可以给每个智能体一个单独的号码吗?
可以。在同一个工作区为每个智能体添加一条线路,每条线路单独订阅 US$24.99,各用各的密钥。然后把每个密钥的授权范围限定到那一条线路:智能体只能读到自己的线路,范围之外的线路返回 404,和别的工作区的线路一样。未设范围的密钥确实能看到所在工作区的全部线路,所以要交出去的密钥请先限定范围。
两个智能体在同一条线路上等待会怎样?
两个都会收到下一条验证码。线路是共享收件箱,不是队列,所以不能互相干扰的智能体,请给它们各自的线路。
智能体需要验证身份吗?
需要验证的是账户,只验证一次,并且由真人完成。智能体使用已验证账户的密钥工作,从不自己注册。
有免费套餐吗?
没有。一条线路每月 US$24.99,随时取消。
资料来源
其他公司的信息来自其官方页面,核实于 2026年9月。
- GeeLark, how to give your AI agent a phone number https://www.geelark.com/blog/how-to-give-your-ai-agent-a-phone-number