mcpField
C
call4me

call4me

已认证精选远程服务
call4.me通信协作16今天更新

关于 call4me

call4me 是远程 MCP 服务,可让 AI Agent 致电商家并处理电话菜单和等待流程。它适用于自动办理预约或取消订阅等任务,并向 Agent 返回通话结果和文字记录。

主要功能

  1. 01代表 Agent 致电商家
  2. 02处理电话菜单和等待队列
  3. 03返回通话结果和文字记录
  4. 04可呼叫用户加入通话
  5. 05使用预付通话额度

适用场景

  1. 01通过电话预订餐厅
  2. 02预约牙医
  3. 03取消订阅或向商家咨询

MCP 相关

托管服务位于 `https://call4.me/mcp`,通过 Streamable HTTP 向 MCP 客户端提供拨打电话的工具。用户可通过浏览器或 API 密钥进行身份验证。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://call4.me/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

详细介绍

call4me:用于拨打电话的 MCP 服务

call4me 是一个用于拨打电话的远程 MCP 服务。将任意 MCP 客户端指向 https://call4.me/mcp (streamable HTTP),你的 Agent 就能替你给商家打电话。Claude Code 一行安装:

claude mcp add --scope user --transport http call4me https://call4.me/mcp

AllMCPs 已验证

https://call4.me

call4me 能让你的 AI Agent 替你拨打真实电话。你可以让 Claude、ChatGPT、Cursor、Codex 或自己的应用预订餐桌、预约牙医、取消订阅或向商家咨询问题。它会拨打电话、等待接通、通过电话菜单、与接听电话的人交谈,然后向你反馈结果和通话记录。它也可以给你打电话,让你加入通话。通话费用从预付余额中扣除,起价为 10 美元。

使用方法

托管的 MCP 服务地址为 https://call4.me/mcp(streamable HTTP)。你的 Agent 会通过浏览器使用 Google 或 X 登录。最简单的设置方法是将 call4.me/mcp 中的提示词粘贴到你的 Agent 中。手动添加方法:

claude code:     claude mcp add --scope user --transport http call4me https://call4.me/mcp   then /mcp, call4me, authenticate
codex:           codex mcp add call4me --url https://call4.me/mcp   then   codex mcp login call4me
claude desktop / claude.ai / chatgpt:  settings, connectors, add custom connector: https://call4.me/mcp
can't sign in?   create a key at https://call4.me/account and use https://call4.me/mcp/<key>, or send "Authorization: Bearer <key>" to /mcp

Cursor:将其添加到 ~/.cursor/mcp.json,并在 Cursor 提示时登录。

{
  "mcpServers": {
    "call4me": { "url": "https://call4.me/mcp" }
  }
}

在你自己的代码中,Vercel AI SDK package 可为 Agent 提供相同的工具:

npm install call4me-ai-sdk ai zod @ai-sdk/openai
import { call4meTools } from 'call4me-ai-sdk';
// with CALL4ME_API_KEY set (from https://call4.me/account):
// generateText({ model, prompt: 'Call ... and ask ...', tools: call4meTools() })

本 README 的其余部分介绍如何开发 call4me 本身或托管自己的副本。

调用的工作原理

agent ──MCP──▶ worker ──POST /v2/calls──▶ Telnyx ──PSTN──▶ business
                  ▲                          │ media stream (PCMU, bidirectional RTP)
                  │ webhooks                 ▼
                  └──────────────── VoiceSession (Durable Object) ◀──WS──▶ GPT-Live (gpt-live-1, audio/pcmu 8k)
                                                                           └─ back office (Responses model):
                                                                              end_call · ask_user · press_digits
  • src/server/voice/prompt.ts:告知来电者的内容。产品体验由此定义:不会在开场时主动说明身份,不会告知正在录音,也不会在通话结束时复述通话内容;如果有人真诚地询问是否为 AI,则如实回答。
  • src/server/voice/session.ts:音频中继和后台功能。
  • src/server/services/dialer.ts:拨打电话、分配各账户的号码、接听回拨。
  • src/server/services/numbers.ts:账户的 call4me 号码,以及经验证可用于拨出的用户自有号码。Telnyx 为我们的整个运营商账户维护一份已验证号码列表,因此 verified_numbers 会将每个号码关联到提交了最新验证码的唯一 call4me 账户;Telnyx 已列为已验证的号码绝不会分配给其他账户。使用自有号码(from)拨打时,只会接通该号码所在国家/地区的商家,用户仍会通过 call4me 号码接听。
  • src/server/mcp/server.ts:MCP 工具。

拨打或接听电话时,应用不会请求录音。通话结束后,可在登录状态下的通话页面播放或打开 Telnyx 存储的现有录音,也可通过 MCP 调用 call4me_get_recordings({ call_id }) 获取,或使用 Bearer 标头中的 call4me API 密钥或 OAuth 令牌请求 GET /api/calls/{call_id}/recordings。 这两种方式都会先检查账户所有权,再联系 Telnyx,并返回新的下载链接,但不会存储这些链接。结果为空可能表示录音仍在处理中,也可能表示没有保存录音。链接可能会过期,且只能分享给账户所有者。

中继录音使用通话分段 ID。单独的服务商 ID 表会通过经过验证的 Webhook 接收这些 ID;现有通话则通过与 Telnyx Webhook 历史记录中的控制 ID 完全匹配来解析。应用绝不会根据电话号码或时间戳猜测匹配项。如果服务商历史记录已过期,且未保存映射,则只能找到与控制 ID 直接关联的录音。

录音查询绝不会联系语音会话,也不会更改提示词、实时工具、音频或 Telnyx 录音设置。现有的通话状态和转录文本响应保持不变。

录音 API 的 OpenAPI 文档位于 /api/openapi.json。运行 npm run openapi:generate,可根据共享的 MCP 和 HTTP 架构重新生成 openapi.json。 CI 会检查生成的文件是否存在差异。通过 git 部署前,请运行 npm test、npm run check、npm run lint 和 npx wrangler deploy --dry-run。

菜单恢复机制会将新收到的电话提示与转录时间戳分开跟踪,并记住已接受的按键输入。重复菜单、无效输入和录音说明造成的死路,都可以在录音停止后重新启动现有后台流程。该机制会等待待处理工具及其后续操作完成,不会打断等待过程或正在接听的人员,并会让模型根据听到的选项选择受支持的路线,而不是盲目重放按键。

npm test 包含用于恢复机制及其时序竞争条件的服务商消息重放测试。要根据合成菜单场景评估配置的后台模型,请在设置 OPENAI_API_KEY(或使用本地 .dev.vars)后运行 npm run test:menu:live。此可选评估会调用 OpenAI 并检查建议的工具调用,但绝不会执行工具或拨打电话。

设置

  1. Telnyx:创建 Call Control 应用(其 ID 为 TELNYX_CONNECTION_ID),设置 Webhook URL https://<host>/webhooks/telnyx、API 密钥和账户的 Webhook 公钥。 每个账户的号码会在首次通话时购买,并关联到该应用。
  2. OpenAI:具有 GPT-Live 访问权限的 API 密钥。
  3. Stripe:为以下事件设置 Webhook 端点 https://<host>/webhooks/stripe:checkout.session.completed、 checkout.session.async_payment_succeeded、invoice.paid、customer.subscription.updated、 customer.subscription.deleted、charge.refunded。博客的支持者订阅也会发送到同一端点,并标记为 app=callbay, kind=supporter(参见 src/server/services/supporters.ts)。

额度

所有费用均预付。充值金额从 $10 起,默认情况下每月按相同金额自动充值(Stripe 订阅;invoice.paid 会增加额度)。拨号前,系统会通过一次条件插入预留通话的最高费用,确保并行通话不会超额消费;通话结束后,再按实际通话时长结算。 4. 密钥(wrangler secret put):参见 src/server/env.d.ts。

两个 Worker

通话会话在独立的 Worker call4me-voice(wrangler.voice.jsonc、src/server/voice/worker.ts)中运行,该 Worker 还会在 voice.call4.me 接收 Telnyx 的媒体流。部署 Worker 会重置其定义的 Durable Objects,因此将会话拆分出去后,网站可以自由部署而不会中断通话。CI 通过 scripts/deploy-voice.sh 部署语音 Worker:如果构建包没有变化,就跳过部署;否则会等待当前没有通话后再部署,并暂停接入新通话,直到新版本开始提供服务,同时再等待一分钟,让 Cloudflare 停用旧版本。切勿通过其他方式部署它或更改其密钥:这样都会重启所有正在进行的通话。语音 Worker 的密钥为 OPENAI_API_KEY、TELNYX_API_KEY、TELNYX_CONNECTION_ID、RAINDROP_WRITE_KEY 和 STREAM_SECRET(与网站的值相同):npx wrangler secret put <NAME> -c wrangler.voice.jsonc。

爬虫

/robots.txt 允许所有爬虫访问所有路径,包括 AI 搜索、问答和训练爬虫。 通配符涵盖当前和未来的爬虫,无需维护具名允许列表。 Cloudflare 的预期爬虫设置保存在 cloudflare.crawlers.json 中。运行 npm run crawlers 可进行审计,运行 npm run crawlers -- --apply 可应用并验证设置。该命令需要 CLOUDFLARE_API_TOKEN,并且该令牌对 call4.me 具有 Zone Read、Zone Settings Read and Write 以及 Bot Management Read and Write 权限。任何不可用或不匹配的设置都会导致命令失败。另请单独 审计 AI Crawl Control 和防火墙规则,检查是否拦截爬虫。Cloudflare 的自动 DDoS 防护仍保持启用。

如果账户令牌可以管理令牌,但缺少此区域所需的权限,请使用 npm run crawlers -- --apply --authorize 为 call4.me 添加必要权限。 该命令会从 Cloudflare 获取权限 ID,并保留现有权限和限制。 令牌编辑器将 Write 权限称为 Edit。某些机器人产品可能不支持账户令牌;如果 Cloudflare 拒绝了权限范围正确的账户令牌,请使用 My Profile 中的用户令牌。 要管理其他网站已提交的策略,请传入 --policy /path/to/cloudflare.crawlers.json。

公共页面交付

npm run build:site 会将现有 Hono 视图渲染为公共 HTML 和 Markdown,输出到 dist/site,复制公共资源,并为 CSS 和 JavaScript 生成指纹。Wrangler 会在本地开发、试运行和部署前自动运行此构建。CI 也会 在检查生成的路由清单和运行测试前进行构建。生成公共页面时不会使用数据库或凭据。付费文章不会纳入静态清单。

src/server/static-entry.ts 通过 Cloudflare 的缓存资源绑定提供这些文档,不会初始化应用或读取 D1。CSS、图片和脚本 会直接通过静态资源交付。原生页面过渡会渐进增强普通导航,并遵循减少动态效果的偏好设置。音频会保留用于定位播放的字节范围处理程序。

所有访客看到的公共内容都相同。账户导航、计数和转义后的博客评论会在页面绘制后,从私有、未缓存的实时端点加载。搜索、热门排序、 订阅反馈、经过身份验证的 MCP 设置、账户、付款、OAuth 和 所有写入操作仍使用现有服务器。禁用 JavaScript 或无法加载实时评论时,?live=1 会打开动态页面。首次触达 Cookie 仍按访客区分;付费 Reddit 落地页会在发放访问 Cookie 前记录其归因。

博客

/blog 下的内容是 src/content/blog 中的 Markdown 文件(每篇文章一个文件,在 index.ts 中列出,标题图片位于 public/static/blog/<slug>.svg),并提供 Atom 订阅源、点赞、评论、电子邮件简报(从 /admin/blog 发送给 ADMIN_EMAILS 账户)以及面向月度支持者的付费文章。

相关文章使用本地 CPU 嵌入向量,并根据编辑主题进行排序,相关逻辑位于 scripts/related-topics.ts。添加文章或修改文章的 SEO 标题、标签或主题后, 运行 npm run blog:related,检查 src/content/blog/related.generated.ts 中的匹配结果,并 提交索引。首次运行会下载固定版本的 EmbeddingGemma 模型;之后的运行会使用 ~/.cache/call4me/transformers。文章文本会保留在本地。网站提供生成的索引,不会执行模型推理。如果匹配结果 低于相似度阈值,文章的推荐数量可能少于 3 篇。npm test 会检查索引是否为最新状态,但不会下载模型。

自托管

Fork 此项目,创建自己的 D1 数据库(wrangler d1 create callbay),然后将其 ID 和你自己的主机名填入 wrangler.jsonc。

本地运行:使用包含相同密钥的 .dev.vars,然后执行 npm run db:migrate:local && npm run dev。

AI 监控

Raindrop 会监控实时对话(callbay_voice_call)、后台模型运行(callbay_back_office)以及挂断后的通话摘要(callbay_call_recap)。每个事件都使用账户 ID 作为用户 ID,使用通话 ID 作为对话 ID。事件中包含模型名称、耗时、状态和后台工具调用跨度。不会上传电话音频或录音 URL。

在本地将 RAINDROP_WRITE_KEY 添加到 .dev.vars,并通过 npx wrangler secret put RAINDROP_WRITE_KEY 将相同的密钥配置为 Cloudflare Worker 密钥。可选的 RAINDROP_PROJECT_ID 用于选择项目 slug;未设置时会使用写入密钥对应的默认项目。未提供写入密钥时,监控会被禁用。.dev.vars.example 列出了这些可选设置。

AI 输入和输出会使用 Raindrop 的 PII 脱敏功能,并先应用 call4me 现有的逐通话密钥屏蔽。工具参数和结果会显示在经过脱敏的后台 AI 输出中。工具调用跨度包含名称、耗时和通用失败状态,敏感负载不会进入未脱敏的跟踪属性。不会将账户名称和电子邮件地址作为用户特征发送。SDK 的 PII 脱敏基于模式,无法保证移除所有敏感信息。

监控独立于实时音频和工具运行。终止事件和排队的工具调用跨度会在 Worker 或 Durable Object 的生命周期内刷新。挂断时尚未完成的后台运行会标记为已中断;之后的工具结果不会重新打开已关闭的监控客户端。

通话结束后,在 Raindrop 中检查这三个事件名称,确认其中包含实际输入和输出、匹配的账户 ID 和通话 ID,以及工具名称和耗时。如果通话期间未调用后台模型,则不会有后台事件。当前通话流程没有对应的反馈控件或诊断工具,因此不会对反馈信号、音频附件和 Agent 自诊断进行埋点。

如需调查问题,请连接 Raindrop MCP 服务,并使用 npx skills add raindrop-ai/skills --skill raindrop-investigate 安装调查技能。在 Raindrop 中连接 Slack 以接收提醒。如有需要,请创建一个 Raindrop 账户。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。