内容
# 工具列表
[](./LICENSE)
[](https://github.com/CallMCP/callmcp/stargazers)
CallMCP 是一个单一的 [模型上下文协议](https://modelcontextprotocol.io) 服务器,定义了一个工具合约——14种工具,相同的模式,相同的错误形状——用于外发/内发电信:呼叫、短信、录音、转录和电话号码生命周期。将其指向托管后端、完全本地后端或自带密钥组合后端,您的代理代码不会改变。变化的是哪些工具存在(通过能力门控动态发现),而不会改变已存在的工具的形状。
规范参考是 [`SPEC.md`](./SPEC.md)。本README是宣传;规范是合约。
```bash
npx -y @callmcp/server
```
在 [`examples/`](./examples) 中查看适用于以下三个分支的即刻粘贴的 Claude Desktop / Claude Code 配置:
---
## 三个结构化声明
这不是“带有营销页面的Twilio包装器”。实际上,合约中内置了三个东西:
### 1. 提供者中立、多后端合约
每个驱动程序(托管、本地或自带密钥)都实现 [`SPEC.md`](./SPEC.md) 中定义的相同14种工具。驱动程序特定的行为仅存在于命名空间 `options.<driver_id>` 直通对象中。没有 `make_call_twilio` 或 `make_call_kaicalls`。工具要么存在于您的配置驱动程序中(并完全按照规范工作),要么从 `tools/list` 中缺失——从不出现但损坏。交换呼叫后端是配置更改,而不是重写。
### 2. x402资助的自主配置到生产
`search_numbers`、`buy_number`、`configure_number` 和 `list_numbers` **从不** 需要人工审批——它们不与第三方联系,而是与您自己的提供者账户联系。这包括在使用需要预付款的驱动程序时通过 [x402](https://www.x402.org/) 机器支付结算成本(`INSUFFICIENT_FUNDS` 嵌入了完整的x402挑战,代理可以结算并重试)。代理可以搜索号码、支付号码、配置号码并在生产中上线——自主地,使用真实货币——而无需人类点击任何内容。这与供应商MCP的自主/自助服务路径形成鲜明对比,后者仅限于试用或沙盒范围。
### 3. 设计中的人工干预外发审批作为合规架构
`make_call` 和 `send_sms` —— 任何联系电话号码(不是呼叫代理自己的基础设施)—— 在结构上需要有效的 `approval_id` 或一个常驻的允许列表匹配才能执行。这不是一个策略建议层叠在上面;它在服务器核心中强制执行,因此没有驱动程序实现可以绕过它。主要路径是MCP引出;对于非引出客户端,备用方案是单次使用的带外审批URL——该门设计为永远不会无声地阻塞 * 和永远不会无声地打开。读取为TCPA合规姿态:合约使“谁批准联系此号码,何时”成为一等公民的可审计对象(`request_call_approval` / `list_approvals`),而不是您必须自己做对的假设内置于应用程序代码中。
---
## CallMCP 与单一供应商MCP与DIY的比较
| 功能 | **CallMCP** | Vapi MCP | Telnyx MCP | AgentPhone MCP | DIY(Twilio + 您自己的胶水) |
| --- | --- | --- | --- | --- | --- |
| 工具合约 | 一个模式,14种工具,跨后端可移植 | 单一供应商,仅Vapi | 单一供应商,仅Telnyx | 单一供应商,仅AgentPhone | 无合约 - 您编写并维护它 |
| 无需重写代理代码即可更换呼叫后端 | 是 - 仅驱动程序交换 | 否 | 否 | 否 | 否 |
| 可自我托管/完全本地选项 | 是(Dograh驱动程序) | (未经验证,请重新检查) | (未经验证,请重新检查) | (未经验证,请重新检查) | 是,但您拥有整个堆栈 |
| 将您自己的前沿模型作为呼叫的“大脑” | 是(BYOK驱动程序:任何传输 + 任何LLM) | (未经验证,请重新检查) | (未经验证,请重新检查) | (未经验证,请重新检查) | 是,完全手动集成 |
| 自主的、**有资金支持的**、生产范围的号码配置(x402) | 是 - `search_numbers`/`buy_number`/`configure_number` 无门控,x402可支付 | (未经验证,请重新检查) | 公共自我服务文档读取为试用范围自主性,不是资金支持的生产自主性(未经验证,请重新检查) | (未经验证,请重新检查) | 否 - 手动控制台购买,手动合规 |
| 外发审批/合规门控结构在模式中 | 是 - `make_call`/`send_sms` 需要 `approval_id` 或允许列表匹配,由服务器端强制执行 | (未经验证,请重新检查) | (未经验证,请重新检查) | (未经验证,请重新检查) | 否 - 您构建和维护自己的门控 |
| 独立短信(不仅限于代理中介) | 按驱动程序能力门控,诚实报告 - 从不声称实际代理中介 | (未经验证,请重新检查) | 是,原生 | (未经验证,请重新检查) | 是,原生Twilio API |
| 呼叫录音 | 按驱动程序能力门控,诚实报告 | (未经验证,请重新检查) | (未经验证,请重新检查) | (未经验证,请重新检查) | 是,原生Twilio API |
| 实时转录流 | 按驱动程序能力门控,可订阅资源(当支持时) | (未经验证,请重新检查) | (未经验证,请重新检查) | (未经验证,请重新检查) | DIY - 您构建捕获/组装层 |
| 源可用性 | MIT许可服务器 + Apache-2.0 规范,公共monorepo | (未经验证,请重新检查) | (未经验证,请重新检查) | (未经验证,请重新检查) | 不适用 - 这是您自己的代码 |
| 底层运营商成本的markup | OSS服务器中为零 - 它按成本路由;KaiCalls托管层是一个可选的便利层,不是必需品 | (未经验证,请重新检查) | (未经验证,请重新检查) | (未经验证,请重新检查) | 零markup,100%的集成成本是您自己的 |
每个“(未经验证,请重新检查)”单元格都是一个占位符,而不是声明 - 我们不会在没有引用支持的情况下,在此表中放置数字或关于竞争对手产品的事实。如果您在重新检查发生之前阅读此内容,请将这些单元格视为未知,而不是“否”。
---
## 谁构建此内容,什么是真正免费的
CallMCP 由 [CallMCP](https://github.com/CallMCP) / [KaiCalls](https://kaicalls.com) 构建和维护。完全透明,因为隐藏这些会比声明它们损失更多的可信度:
- **此OSS服务器不是一个损失领导者漏斗,真正的功功能被锁定在付墙后面。** 它路由到任何配置的驱动程序 - 托管,本地或自带密钥 - 没有markup和没有人为的能力门控。 自托管的Dograh驱动程序或自带密钥的Twilio + LLM驱动程序获得与KaiCalls驱动程序相同的14种工具合约。
- **KaiCalls是托管默认** - 如果您想要一个呼叫后端在几分钟内启动并运行,而无需自我托管,则是最简单的路径。 它不是 **唯一** 支持的路径,并且规范和一致性套件存在正是为了确保当驱动程序生态系统增长时,该声明仍然成立。
- **驱动程序接口是公开的,一致性套件在CI中运行。** 任何驱动程序 - 包括我们没有编写的驱动程序 - 都可以声明一致性,并且社区PR按照与KaiCalls自己的驱动程序相同的标准进行审查(参见 [`SPEC.md` §6](./SPEC.md#6-conformance))。
如果以上任何一个陈述不再成立,那么这是README中的一个错误,而不是一个隐藏的星号 - 请打开一个问题。
---
## 驱动程序能力矩阵
能力通过 **存在** 而不是运行时错误来表达(参见 [`SPEC.md` §2.2](./SPEC.md#22-dynamic-toolslist-behavior))。此表格镜像规范的降级附录([`SPEC.md` §7](./SPEC.md#7-degradation-appendix))- 规范编写时(2026-07-09)的更广泛的后端景观的诚实状态,而不是CallMCP本身可以做什么的上限。
### 启动驱动程序(此仓库)
| 功能 | `kaicalls`(托管) | `dograh`(本地) | `twilio_openai`(自带密钥) |
| --- | --- | --- | --- |
| `make_call` / `end_call`(挂断) | 是 - 通过Vapi `controlUrl` 挂断,视为呼叫范围状态 | `make_call` 是;**无**外部挂断端点(`supports_hangup: false`) | 是,原生Twilio呼叫控制 |
| `search_numbers` / `buy_number` / `configure_number` | 是 | **无**购买流程 - 自带运营商账户(`supports_number_purchase: false`) | 是,原生Twilio号码API |
| `send_sms` | 根据底层Vapi类后端的能力门控;如果存在真正的独立发送路径,则不声称 | **无**短信能力 | 是,原生Twilio短信 |
| `get_recording` | 是,一旦连接 | 取决于本地堆栈的能力 | 是,原生Twilio录音 |
| `get_transcript` / 实时流媒体 | 是 | 是,基线(Dograh的 `GET /{workflow_id}/runs/{run_id}` 返回 `transcript_url` - 唯一完全源验证的转录路径) | 从实时会话事件中自行组装;仅在该组装真正实时时声称 `supports_realtime_transcription` |
### 已知跨更广泛的后端环境的能力差距(驱动程序作者的背景)
| 工具/功能 | 规范编写时已知的空白 |
| --- | --- |
| `buy_number` | 在Synthflow(仅UI,无API)、ElevenLabs(仅自带号码)、Dograh(自带运营商)、Phonely(不能独立驱动)上缺失 |
| `end_call` | 在Retell和Synthflow(无挂断端点)上缺失;Dograh没有外部挂断端点;Vapi仅通过每个调用的临时 `controlUrl` 支持它,而不是稳定的REST端点 |
| `send_sms` | 本合约中最退化的工具。只有Telnyx、Bland、Autocalls和Thoughtly公开真正的独立短信。Vapi/Retell/Synthflow仅限于代理中介(不是稳定的API表面,从不声称 `supports_sms: true`)。Millis、Vogent和Dograh根本没有短信能力。AgentLine自己的公开材料相互矛盾(`SKILL.md` 禁止短信,而其API规范定义 `POST /v1/messages`)- 引用为未解决的上游问题,而不是在AgentLine的名义下解决 |
| `get_recording` | 在AgentLine上完全缺失;基于LiveKit的后端需要单独建立一个Egress服务,然后才能实现 |
| `get_transcript`(实时) | LiveKit/Pipecat本地堆栈需要DIY事件捕获;Bolna的转录端点未经确认;Telnyx的确切转录路由未经验证 |
驱动程序声称其无法通过一致性套件证明的能力,该驱动程序将失败CI(参见 `SPEC.md` §6.2)- 此表格是快照,而不是关于CallMCP无法控制的后端承诺,任何驱动程序作者的后端实际能力与此快照不同,则更新其自己的清单,而不是此README。
---
## 仓库形状
```
callmcp/callmcp
├── SPEC.md 规范工具合约(从这里开始)
├── packages/
│ ├── server/ @callmcp/server - MCP核心:传输,驱动程序
│ │ 注册,配置解析,审批状态
│ │ 机器,诱导 + 后备URL流程,
│ │ 动态工具/列表
│ ├── driver-interface/ @callmcp/driver-interface - TS接口,
│ │ 能力清单类型,一致性测试工具
│ ├── driver-kaicalls/ 托管默认驱动程序
│ ├── driver-dograh/ 本地/自我托管驱动程序
│ └── driver-byok/ 自带密钥 - 传输 + 自带LLM
├── examples/ Claude Desktop / Claude Code 配置块,每个腿
├── server.json 官方MCP注册表清单 - 发布为
│ ai.callmcp/server (registry.modelcontextprotocol.io)
├── smithery.yaml Smithery容器部署配置
└── Dockerfile 自托管 / Smithery容器构建
```
## 软件包
| 软件包 | npm | 它是什么 |
| --- | --- | --- |
| [`@callmcp/server`](./packages/server) | [npm](https://www.npmjs.com/package/@callmcp/server) | MCP服务器核心 - 如果您正在运行CallMCP,请从这里开始。 |
| [`@callmcp/driver-interface`](./packages/driver-interface) | [npm](https://www.npmjs.com/package/@callmcp/driver-interface) | `Driver`合约,能力清单类型,一致性测试工具。 如果您正在编写新的驱动程序,请从这里开始。 |
| [`@callmcp/driver-kaicalls`](./packages/driver-kaicalls) | [npm](https://www.npmjs.com/package/@callmcp/driver-kaicalls) | 托管默认 - [KaiCalls](https://kaicalls.com) 的生产电信后端。 |
| [`@callmcp/driver-dograh`](./packages/driver-dograh) | [npm](https://www.npmjs.com/package/@callmcp/driver-dograh) | 完全本地 - 封装自托管的 [Dograh](https://github.com/dograh-hq/dograh) 实例。 |
| [`@callmcp/driver-byok`](./packages/driver-byok) | [npm](https://www.npmjs.com/package/@callmcp/driver-byok) | 自带密钥 - Twilio传输 + OpenAI实时(或线兼容)大脑。 |
## 贡献驱动程序
实现 `@callmcp/driver-interface` 中的接口,发布 `callmcp.manifest.json`,参见 [`SPEC.md` §6.1](./SPEC.md#61-machine-readable-capability-manifest),并运行一致性套件。能力您的清单中未声明为 `true` 的能力只会导致该工具从 `tools/list` 中缺失 - 这就是整个机制,而不是变通方法。
## 许可证
[MIT](./LICENSE) 用于此仓库的代码。 `SPEC.md` 在其自己的头部下以Apache-2.0发布,特别允许任何人实现一致的驱动程序而无需请求许可。
<!--
GitHub topics:
mcp, mcp-server, telephony, ai-agents, voice-ai, phone-api, sms-api, claude,
claude-code, cursor, openai-realtime, twilio, dograh, x402, skill-file,
model-context-protocol
-->