mcpField
E
Exotel Mcp

Exotel Mcp

本地服务
github.com/exotel通信协作54 天前更新

关于 Exotel Mcp

Exotel Mcp 是通过 Claude 等 MCP 客户端调用 Exotel 通信 API 的 MCP 服务,涵盖消息、语音、对话分析、VoiceBot 和 AI Assist,并可按服务组配置凭据。

主要功能

  1. 01发送单条、批量和动态 SMS
  2. 02创建 Engage SMS 活动
  3. 03发送 WhatsApp 消息
  4. 04拨打电话并接入呼叫流程
  5. 05跟踪消息和通话状态
  6. 06使用音频、对话分析、VoiceBot 和 AI Assist

适用场景

  1. 01向客户发送符合规范的 SMS 或 WhatsApp 消息
  2. 02拨打电话或通过呼叫流程连接客户
  3. 03通过对话质量分析检查互动记录
  4. 04配置 VoiceBot 或 AI Assist

MCP 相关

将 Exotel 的消息、电话、音频和 AI 相关操作作为工具提供给 MCP 客户端。README 介绍了与 Claude 的直接集成,也说明可配置其他 MCP 客户端。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"ExotelMCP": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"build"
]
}
}
}
启动命令docker run -i --rm build

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocibuild

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

原文在翻译后有更新,译文可能不是最新。

ExotelMCP

一个模型上下文协议(MCP)服务,可无缝连接 Claude AI 与 Exotel 的短信和语音通话通信 API,并提供快速音频工具。

功能

  • 📱 短信服务:发送单条、批量和动态短信,并符合 DLT 规范
  • 📨 Engage 短信营销活动:通过 Engage API 创建静态短信营销活动
  • ☎️ 语音通话:发起语音通话、连接号码并集成呼叫流程
  • 📊 状态跟踪:实时跟踪送达状态并管理回调
  • 🎵 快速音频工具:一键播放和下载音频,并访问网页播放器
  • 🔍 对话智能:借助 AI 分析语音和数字渠道中 100% 的对话质量
  • 🤖 VoiceBot:创建、管理并使用 VoiceBot 发起 AI 驱动的外呼
  • 🎧 AI Assist:通过 MCP 配置实时 Agent 辅助功能(智能回复、转录、知识库)
  • 🔐 安全身份验证:通过 Authorization 标头进行基于令牌的用户身份验证
  • 🤖 Claude AI 集成:通过 MCP 协议直接集成 Claude

目录

先决条件

使用 Exotel MCP 服务前,请确保已具备:

  • Claude 桌面应用:已安装最新版本
  • Node.js 和 npm:MCP 远程连接所需
  • Exotel 账户:已启用且具有 API 凭据的账户
  • MCP Remote 软件包:如果尚未安装,请先安装
安装 MCP Remote

如果尚未安装 mcp-remote,请运行:

npm install -g mcp-remote

验证安装:

npm list -g mcp-remote
Claude 桌面端配置

若要将 ExotelMCP 与 Claude 集成,请将以下配置添加到 Claude 桌面端设置中:

位置:Claude Desktop → Settings → Developer → Edit Config

{
  "mcpServers": {
    "exotel": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://mcp.exotel.com/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "{'token':'YOUR_EXOTEL_TOKEN','from_number':'YOUR_FROM_NUMBER','dlt_temp':'YOUR_DLT_TEMPLATE','dlt_entity':'YOUR_DLT_ENTITY','caller_id':'YOUR_CALLER_ID','api_domain':'https://YOUR_SUB_DOMAIN','account_sid':'YOUR_ACCOUNT_SID','exotel_portal_url':'YOUR_EXOTEL_DASHBOARD_BASE_URL','cqa_api_key':'YOUR_CQA_API_KEY','cqa_account_id':'YOUR_CQA_ACCOUNT_ID','cqa_host':'https://cqa-console.in.exotel.com','voicebot_api_key':'YOUR_VOICEBOT_API_KEY','voicebot_api_token':'YOUR_VOICEBOT_API_TOKEN','voicebot_account_id':'YOUR_VOICEBOT_ACCOUNT_ID','calls_api_key':'YOUR_CALLS_API_KEY','calls_api_token':'YOUR_CALLS_API_TOKEN','calls_account_id':'YOUR_CALLS_ACCOUNT_ID','calls_base_url':'https://api.exotel.com'}"
      }
    }
  }
}
所需凭据

将占位值替换为你的实际 Exotel 凭据:

YOUR_EXOTEL_TOKEN:Base64 编码的 API 凭据

此令牌通过将 Exotel API Key 和 Secret 编码为 Base64 格式生成。

第 1 步:从 Exotel Dashboard 获取 API 凭据

  1. 登录 Exotel Dashboard
  2. 前往 Settings → API Settings
  3. 复制你的 API Key 和 API Secret

第 2 步:创建 Base64 令牌

格式:api_key:api_secret(以冒号分隔)

示例:如果你的 API Key 是 abc123,API Secret 是 xyz789,请将它们组合为:abc123:xyz789

第 3 步:编码为 Base64

你可以使用以下任一方法:

在线工具:

  • 访问 base64encode.org
  • 输入你的 api_key:api_secret 字符串
  • 复制编码后的结果

命令行(Mac/Linux):

echo -n "your_api_key:your_api_secret" | base64

命令行(Windows):

[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("your_api_key:your_api_secret"))
其他所需值:
  • YOUR_FROM_NUMBER:你已注册的 Exotel 电话号码(位于 Dashboard → Numbers)
  • YOUR_DLT_TEMPLATE:用于短信合规的 DLT 模板 ID(位于 Dashboard → DLT)
  • YOUR_DLT_ENTITY:用于短信合规的 DLT 实体 ID(位于 Dashboard → DLT)
  • YOUR_CALLER_ID:你已注册的主叫 ID(位于 Dashboard → Numbers)
  • YOUR_ACCOUNT_SID:你的 Exotel 账户 SID(位于 Dashboard → API Settings)
  • YOUR_SUB_DOMAIN:你的 Exotel 账户 SubDomain(位于 Dashboard → API Settings)
  • YOUR_EXOTEL_DASHBOARD_BASE_URL:你的 Exotel Dashboard 基础 URL
对话智能凭据:
  • YOUR_CQA_API_KEY:从 Conversational Intelligence 控制台生成的 API 密钥
  • YOUR_CQA_ACCOUNT_ID:你的账户 ID(可在 Conversational Intelligence 控制台中查看)
  • YOUR_CQA_HOST:主机 URL(默认值:https://cqa-console.in.exotel.com)

注意:只有计划使用质量分析工具时,才需要对话智能凭据。短信和语音工具可独立使用。

VoiceBot 凭据:
  • YOUR_VOICEBOT_API_KEY:VoiceBot 平台的 API 密钥
  • YOUR_VOICEBOT_API_TOKEN:VoiceBot 平台的 API 令牌
  • YOUR_VOICEBOT_ACCOUNT_ID:你的 VoiceBot 账户 ID(例如 ameyo5m)
  • YOUR_CALLS_API_KEY:用于发起机器人呼叫的 Exotel CPaaS API 密钥
  • YOUR_CALLS_API_TOKEN:用于发起机器人呼叫的 Exotel CPaaS API 令牌
  • YOUR_CALLS_ACCOUNT_ID:用于呼叫的 Exotel CPaaS 账户 SID(可能与 VoiceBot 账户不同)
  • calls_base_url:Exotel Calls API 基础 URL(默认值:https://api.exotel.com)

注意:只有计划使用 VoiceBot 工具时,才需要 VoiceBot 凭据。VoiceBot 管理 API(列出/创建/删除机器人)使用 voicebot_* 凭据,而实际发起呼叫使用 calls_* 凭据。

AI Assist 凭据:

所有 exotel_aiassist_* 工具都需要:

  • ai_assist_base_url:AI Assist API 主机(生产环境:https://ai-assist.in.exotel.com)
  • ai_assist_account_sid:你的 AI Assist 租户 ID(账户 SID)

身份验证:提供以下一种模式(Twilix Basic 是 CPaaS 租户的默认模式):

模式字段
Twilix Basic(推荐)ai_assist_auth_key、ai_assist_auth_secret
Auth0 M2Mai_assist_client_id、ai_assist_client_secret
手动 bearerai_assist_auth_token
会话 Cookieai_assist_session_cookie

可选:

  • ai_assist_context_path:API 上下文路径(默认值:ai-assist/api)
  • ai_assist_user_id:用于审计跟踪的用户 ID

示例(Cursor ~/.cursor/mcp.json):

{
  "mcpServers": {
    "exotel": {
      "url": "https://mcp.exotel.com/mcp",
      "headers": {
        "Authorization": "Bearer {\"ai_assist_base_url\":\"https://ai-assist.in.exotel.com\",\"ai_assist_account_sid\":\"YOUR_ACCOUNT_SID\",\"ai_assist_auth_key\":\"YOUR_API_KEY\",\"ai_assist_auth_secret\":\"YOUR_API_TOKEN\"}"
      }
    }
  }
}

注意:只有 AI Assist 工具需要 AI Assist 凭据。SMS、Voice、CQA 和 VoiceBot 工具可独立运行。

写入安全:调用工具时,创建/更新/发布/归档/删除工具都需要设置 confirm=true。

用法

配置完成后,你可以使用 Claude 通过自然语言命令与 Exotel 服务交互。只需描述你想做什么,Claude 就会通过 MCP 服务处理 API 调用。

示例命令:

  • “向 +919999999999 发送一条短信,内容为‘来自 Claude 的问候!’”
  • “呼叫 +919999999999”
  • “查看我最近一条短信的送达状态”
  • “将 +919999999999 与 +919888888888 接通”

音频命令:

对话智能 —— 设置命令:

  • “以 [email protected] 身份登录租户 my_tenant 的 CQA”
  • “创建一个名为‘Support Evaluation’的质量档案,类别为‘Communication’,子类别为‘Clarity’,并设置 KPI:‘Clear Speech’(是/否,选项:是=1/否=0)、‘Professional Tone’(是/否,选项:是=1/否=0)”
  • “创建一个名为‘my-api-key’的 CQA API 密钥”
  • “创建一条分配规则,将来源为‘support’的通话路由到质量档案 {profile_id}”

对话智能 —— 分析命令:

VoiceBot 命令:

  • “列出我的所有 VoiceBot”
  • “创建一个用于处理订单跟踪客户支持的 VoiceBot”
  • “使用我的客户支持机器人呼叫 +919999999999”
  • “获取上一次机器人通话的状态”
  • “列出我账户上可用的电话号码”

AI Assist 命令:

  • “运行 exotel_aiassist_whoami 以验证我的 AI Assist 凭据”
  • “列出我账户上的所有 AI Assist 助手”
  • “获取助手 ID 为 abc123 的助手详情”
  • “创建助手前,列出 ASR 提供商和 LLM 建议语言”
  • “为 Ameyo 6x 创建一个启用了实时转录和智能回复的 AI Assist 助手”
  • “将 https://example.com/policy.pdf 中的 KB 文件附加到助手 abc123,然后等待索引完成”
  • “发布助手 abc123”
  • “对助手 abc123 的聊天流进行冒烟测试”

API 服务

短信服务
发送单条短信

向指定电话号码发送单条符合 DLT 规范的短信。

示例:

Send an SMS to +919999999999 with message "Hello from Claude!" using DLT template 1107160086208866373 and entity 1101428740000012125
发送批量短信(相同内容)

一次向多个收件人发送相同内容的短信。

示例:

Send "Welcome to our service!" to these numbers: +919999999999, +919888888888, +919777777777
发送动态批量短信

向多个收件人发送个性化消息,每位收件人的内容各不相同。

示例:

Send personalized messages: "Hello John" to +919999999999 and "Hello Jane" to +919888888888
Engage 短信营销活动

在 Engage 上创建静态短信营销活动(exotel_engage_create_sms_campaign)。

使用与其他电话服务工具相同的 calls_api_key / calls_api_token / calls_account_id(或 CPaaS token + account_sid),无需单独的 Engage 凭据。

示例:

Create an Engage SMS campaign named "July promo" to list list_sid from EXOTEL,
transactional, template "Hello from Engage https://example.com/promo",
DLT entity 123456 and template id 789012, with URL shortening enabled

可选的计划时间和回调:

Same campaign, scheduled 2026-08-10T18:00:00+05:30 to 2026-08-10T20:00:00+05:30,
with status_callback and message_status_callback URLs
语音服务
发起语音通话

使用已注册的 Exotel 号码呼叫任意电话号码。

示例:

Call +919999999999 from my registered number
接通两个号码

在一次通话中桥接两个电话号码,将它们接通。

示例:

Connect +919999999999 with +919888888888 in a conference call
通话流程集成

将电话号码连接到预定义的 Exotel 通话流程或 IVR 系统。

示例:

Connect +919999999999 to call flow app_id 12345
状态与跟踪服务
查看短信送达状态

实时获取已发送短信的送达状态和详情。

示例:

Check the delivery status of SMS sent to +919999999999
查看语音通话状态

获取语音通话的详情、时长和状态。

示例:

Get call details for calls made to +919999999999
获取通话历史

批量获取通话详情和历史记录以供分析。

示例:

Get all call details made from +919999999999
号码信息

获取电话号码的元数据和相关信息。

示例:

Get information about phone number +919999999999
音频服务
快速音频工具

一键使用音频播放和管理工具。

快速播放音频

获取可在浏览器中播放任意音频 URL 的即时可点击链接。

示例:

Play audio from https://example.com/song.mp3
打开音频播放器

访问基于 Web 的音频播放器界面,全面掌控播放。

示例:

Open the audio player interface
快速下载

获取任意音频文件的直接下载链接。

示例:

Download audio from https://example.com/song.mp3
对话智能服务

Exotel 对话智能 使用 AI 分析语音和数字渠道中 100% 的客户对话,提供实时质量情报。该平台可在几分钟内审查数千条对话,并在客观评估中保持超过 90% 的准确率,以大规模、持续自动化的 QA 取代人工抽样。

身份验证: CQA 工具使用两种身份验证方法:

  • 设置工具(登录、质量配置文件、API 密钥、分配规则)使用通过登录工具获取的 JWT 身份验证 — 无需预配置凭据
  • 摄取和分析工具(摄取、状态、结果)使用在 MCP 身份验证标头中配置的 cqa_api_key

API 密钥:从 对话智能控制台 生成 API 密钥,或通过 exotel_cqa_create_api_key MCP 工具生成,然后在 MCP 配置中将其作为 cqa_api_key 提供。

登录

通过 CQA 进行身份验证,以获取设置操作(质量配置文件、API 密钥、分配规则)所需的 JWT 令牌。

示例:

Login to CQA as [email protected] on tenant exotel_support
创建质量配置文件

通过单次调用创建包含类别、子类别和 KPI 的完整质量配置文件。创建后将自动启用 AI 分析。

示例:

Create a quality profile called "Support Evaluation" with category "Communication", sub-category "Clarity", and KPIs: "Clear Speech" (Yes/No, options: Yes=1/No=0), "Professional Tone" (Yes/No, options: Yes=1/No=0)

支持的 KPI 类型: 是/否、选择、评分、文本

是/否、选择和评分类型必须提供选项。每个选项都需要 label(字符串)和 weightage(整数)。评分选项还需要 type: "STAR"。文本 KPI 不支持选项。

其他可选 KPI 字段: is_scoring_allowed、is_critical、is_mandatory、is_comment_mandatory、is_dispute_allowed、criticality_level。categoriesJson 中提供的所有字段都会传递给 API。

部分失败处理: 如果某个子步骤(创建类别、子类别或 KPI)失败,工具会返回部分结果,其中包含 profile_id、失败前已创建的所有类别,以及恢复提示。

创建 API 密钥

生成用于程序化摄取和分析的 API 密钥。密钥的作用范围限定为该账户。

示例:

Create a CQA API key called "support-api-key"

注意: 每个租户的有效 API 密钥数量有限制(目前为 2 个)。409 响应表示已达到限制 — 请先撤销现有密钥。

创建分配规则

创建一条基于元数据筛选条件将交互分配给质量配置文件的规则(例如,将所有 source=support 的通话分配给特定质量配置文件)。

示例:

Create an assignment rule that routes calls with source "support" to quality profile a1b2c3d4-e5f6-7890-abcd-ef1234567890 at 100% sampling

filterGroupJson 为必填项。 如果未提供筛选条件,工具将返回错误。

支持的筛选运算符: IS、IS_NOT、CONTAINS、NOT_CONTAINS、GREATER_THAN、LESS_THAN、GREATER_OR_EQUAL、LESS_OR_EQUAL

摄取单个交互

提交单条通话录音或转录文本以进行质量分析。至少提供 audioUrl、transcriptUrl 或内联 transcriptText 其中之一(最大 200KB)。

示例:

Ingest interaction call-001 (voice channel) with audio at https://s3.example.com/call-001.wav in English
质量配置文件 / 规则 / API 密钥管理

JWT 设置工具还支持对配置文件执行列出/获取/更新/删除/复制,对分配规则执行列出/更新/删除,对 API 密钥执行列出/撤销,以及元数据配置和列出分析结果。

破坏性工具(delete_*、revoke_api_key)需要 confirm=true。更新配置文件时清空 KPI 需要 confirmWipeKpis=true。如果设置了身份验证标头中的 accountId,它必须与 cqa_account_id 匹配。

批量摄取

一次提交最多 100 条交互,作为单个批处理任务处理。

示例:

Ingest a batch of 3 voice interactions for quality analysis
导入文件

提交包含多个交互的 CSV 文件,进行批量分析。

示例:

Submit https://s3.example.com/calls.csv as a CSV file for quality analysis ingestion
获取交互状态

检查已导入交互的处理状态。

示例:

Check the status of interaction call-2026-04-01-001
跟踪任务

监控批次或文件导入任务的进度。

示例:

Track ingestion job d4f5a6b7-c8d9-4e0f-a1b2-c3d4e5f6a7b8
获取分析结果

获取已完成分析的完整质量评分明细。

示例:

Get the quality analysis for analysis ID a1b2c3d4-e5f6-7890-abcd-ef1234567890
VoiceBot 服务

创建和管理由 AI 驱动的 VoiceBot,让它们自主处理完整的电话对话。

列出 VoiceBot

列出账户中的所有 VoiceBot,并支持分页和状态筛选。

示例:

List all my active VoiceBots
创建 VoiceBot

使用自然语言描述其个性和用途,创建新的 VoiceBot。

示例:

Create a VoiceBot that handles customer support for Acme Corp. It should be friendly, help with order tracking, and offer to escalate to a human agent if needed.
发起 Bot 外呼

发起由 VoiceBot 驱动的电话呼叫——Bot 将处理整个对话。

示例:

Call +919999999999 using my order-confirmation bot
获取通话详情

查看 Bot 驱动的通话状态、时长和录音 URL。

示例:

Get details of call abc123def456
列出电话号码

列出账户中可用作来电显示号码的所有电话号码(DID)。

示例:

What phone numbers are available on my account?
列出近期通话

查看近期通话记录及其状态和结果。

示例:

Show me the last 5 bot calls
AI Assist 服务

实时 Agent 辅助:为联络中心 Agent 提供转录、情感分析、智能回复、处理结果提示和基于知识库的内容参考。工具前缀为 exotel_aiassist_*。

**身份验证:**配置 ai_assist_base_url、ai_assist_account_sid,并在 Authorization 标头中选择一种身份验证模式(参见 AI Assist 凭据)。使用 exotel_aiassist_whoami 验证配置。

**读取工具:**列出/获取助手、附件、知识库上传任务、描述模板、ASR 提供商、大模型语言、Agent、交互、设置和流 URL。

**写入工具:**创建/更新/发布/归档/删除助手和自定义模板;附加/分离知识库文件;更新描述。所有写入操作都需要 confirm=true。

测试:exotel_aiassist_smoke_test_chat 对助手流执行 WebSocket 握手;exotel_aiassist_wait_for_kb_ready 轮询,直至知识库索引完成。

验证凭据

示例:

Run exotel_aiassist_whoami
列出助手

示例:

List all AI Assist assistants on my account
创建并发布助手

使用 exotel_aiassist_create_assistant 创建,通过工具参数配置 ASR/语言,然后使用 exotel_aiassist_publish_assistant 发布(confirm=true)。

示例:

Create an AI Assist assistant named "Support Copilot" for source ameyo_6x with English STT and smart reply enabled
上传知识库

从公开的 HTTPS URL 或本地路径附加文件,然后等待索引完成。

示例:

Attach https://example.com/returns-policy.pdf to assistant abc123, then wait for KB to be ready

安全性:URL 获取仅允许 https://,并会阻止访问私有/环回地址(SSRF 防护)。

身份验证

Exotel MCP Server 使用安全的基于令牌的身份验证。所有 Exotel 凭据都配置在 Claude 桌面端配置中,并用于向 Exotel API 进行身份验证。

安全功能
  • 安全的令牌处理:安全地处理 Exotel API 令牌
  • 用户隔离:每位用户的数据都单独保存并受到保护
  • DLT 合规性:内置支持印度短信所需的 DLT(分布式账本技术)要求
获取 Exotel 凭据
  1. 登录 Exotel Dashboard
  2. 前往 Settings → API Settings,获取 API Key、API Secret 和 Account SID
  3. 前往 Numbers 部分,记下已注册的电话号码和来电显示号码
  4. 访问 DLT 部分,获取 DLT 模板和实体 ID(印度短信合规所需)
  5. 使用 API Key 和 Secret 创建 Base64 令牌,详情请参阅配置部分

请按上述说明正确设置所有凭据,并将其添加到 Claude 配置中。

托管与部署

🌐 重要:公网域名要求

此应用必须部署在启用了 HTTPS 的公网域名上,原因如下:

  1. MCP 远程连接:Claude Desktop 通过公网连接到你的服务
  2. Exotel Webhook:Exotel 需要向你的服务发送回调通知
  3. 安全性:Claude 与你的服务之间需要使用 HTTPS 进行安全通信
  4. 生产就绪:确保 SMS/语音状态更新服务可靠
部署选项
Docker 设置
FROM openjdk:21-jdk-slim

WORKDIR /app
COPY target/mcp_api-0.0.1-SNAPSHOT.jar app.jar

EXPOSE 8080
CMD ["java", "-jar", "app.jar"]
# Build and run
docker build -t exotel-mcp .
docker run -p 8080:8080 -e EXOTEL_BASE_URL=https://your-domain.com exotel-mcp
使用 HTTPS 的 Docker Compose
version: '3.8'
services:
  app:
    build: .
    ports:
      - "8080:8080"
    environment:
      - EXOTEL_BASE_URL=https://your-domain.com
  
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./ssl:/etc/ssl/certs
环境配置
生产环境变量
# Server Configuration
SERVER_PORT=8080
SPRING_PROFILES_ACTIVE=production

# Application URL (CRITICAL - must match your domain)
EXOTEL_BASE_URL=https://your-domain.com

# Security
SPRING_SECURITY_REQUIRE_SSL=true

# Logging
LOGGING_LEVEL_ROOT=WARN
LOGGING_LEVEL_COM_EXAMPLE_MCP_API=INFO
更新 Claude 配置
{
  "mcpServers": {
    "exotel": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://mcp.exotel.com/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "{'token':'YOUR_EXOTEL_TOKEN','from_number':'YOUR_FROM_NUMBER','dlt_temp':'YOUR_DLT_TEMPLATE','dlt_entity':'YOUR_DLT_ENTITY','caller_id':'YOUR_CALLER_ID','api_domain':'https://YOUR_SUB_DOMAIN','account_sid':'YOUR_ACCOUNT_SID','exotel_portal_url':'YOUR_EXOTEL_DASHBOARD_BASE_URL','cqa_api_key':'YOUR_CQA_API_KEY','cqa_account_id':'YOUR_CQA_ACCOUNT_ID','cqa_host':'https://cqa-console.in.exotel.com','voicebot_api_key':'YOUR_VOICEBOT_API_KEY','voicebot_api_token':'YOUR_VOICEBOT_API_TOKEN','voicebot_account_id':'YOUR_VOICEBOT_ACCOUNT_ID','calls_api_key':'YOUR_CALLS_API_KEY','calls_api_token':'YOUR_CALLS_API_TOKEN','calls_account_id':'YOUR_CALLS_ACCOUNT_ID','calls_base_url':'https://api.exotel.com'}"
      }
    }
  }
}

注意:如果你的服务在本地开发期间运行于纯 HTTP,请在 args 数组中、"--header" 之前添加 "--allow-http"。

在本地运行(Cursor + Claude Desktop / CoWork)

在开发期间或云端 MCP 不可用时,请使用本地服务。短信活动和所有其他工具的运行方式与生产环境相同。

# From the ExotelMCP repo root
./mvnw spring-boot:run
# MCP endpoint: http://localhost:8080/mcp
# Optional: ENGAGE_BASE_URL=https://engage.exotel.com (default)

也可以使用 Docker Compose:

docker compose up --build

Cursor — 添加到 ~/.cursor/mcp.json(保存后重新加载窗口):

{
  "mcpServers": {
    "exotel-local": {
      "url": "http://localhost:8080/mcp",
      "headers": {
        "Authorization": "{'calls_api_key':'YOUR_CALLS_API_KEY','calls_api_token':'YOUR_CALLS_API_TOKEN','calls_account_id':'YOUR_ACCOUNT_SID','token':'YOUR_EXOTEL_TOKEN','account_sid':'YOUR_ACCOUNT_SID'}"
      }
    }
  }
}

Claude Desktop / CoWork — CoWork 会加载相同的 claude_desktop_config.json。使用 mcp-remote 和 --allow-http 桥接 HTTP:

{
  "mcpServers": {
    "exotel-local": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "http://localhost:8080/mcp",
        "--allow-http",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "{'calls_api_key':'YOUR_CALLS_API_KEY','calls_api_token':'YOUR_CALLS_API_TOKEN','calls_account_id':'YOUR_ACCOUNT_SID','token':'YOUR_EXOTEL_TOKEN','account_sid':'YOUR_ACCOUNT_SID'}"
      }
    }
  }
}

完全退出并重新打开 Claude Desktop,让 CoWork 加载该服务。协调操作期间,请保持本地 Java 进程运行。

生产环境检查清单
  • 域名:已注册并配置 DNS
  • HTTPS:已安装并正常工作的 SSL 证书
  • 服务:应用正在端口 8080 上运行
  • 防火墙:已开放端口 80、443 和 8080
  • 监控:已配置健康检查和日志记录
音频服务要求

快速音频工具:

  • ✅ 可在任何可访问互联网的服务上运行
  • ✅ 无需特殊硬件
  • ✅ 基于浏览器播放
  • ✅ 支持所有常见音频格式(mp3、wav、ogg 等)
测试部署
1. 测试 MCP 端点
curl https://your-domain.com/mcp
# Should return data: {"type": "connection_established"}
2. 使用 Claude 测试
  • 使用你的域名更新 Claude 配置
  • 重启 Claude Desktop
  • 发送测试消息:“使用 DltEntityId=XXXXXXX、From=EXOTEL、DltTemplateId=XXXXXXXXX 向 +919999999999 发送测试短信”
部署故障排查
连接问题
  • 检查防火墙设置
  • 验证 DNS 是否已传播:nslookup your-domain.com
  • 测试 HTTPS:curl -I https://your-domain.com
应用问题
  • 查看应用日志:tail -f logs/mcp-server.log
  • 验证环境变量
  • 测试数据库连接
回调问题
  • 确保 Webhook 可以访问你的服务
  • 检查 Exotel 回调 URL 配置
  • 确认回调使用的 HTTPS 正常工作

支持

获取帮助
  • 配置问题:仔细检查 Exotel 凭据和 Claude 配置
  • 部署问题:验证域名、HTTPS 和服务可访问性
  • API 使用:请参阅 API 服务 部分中的使用示例
  • Exotel 账户:如有账户相关问题,请联系 Exotel 支持
  • DLT 合规性:确保已正确注册 DLT 模板和实体 ID
常见问题
“连接失败”错误
  • 验证你的域名是否可访问:curl https://your-domain.com/mcp
  • 检查是否已安装 mcp-remote:npm list -g mcp-remote
  • 确保 HTTPS 配置正确
  • 验证防火墙允许通过端口 443 接收传入连接
“身份验证失败”错误
  • 验证 Exotel API 令牌是否已根据 api_key:api_secret 格式正确进行 Base64 编码
  • 再次检查 Exotel 控制面板 → 设置 → API 设置中的 API Key 和 API Secret
  • 确保在编码前,API Key 和 Secret 之间包含冒号(:)分隔符
  • 检查账户 SID 是否与 Exotel 账户匹配
  • 确保电话号码已在 Exotel 正确注册
短信未送达
  • 验证 DLT 模板和实体 ID 是否正确
  • 检查消息内容是否与已注册的 DLT 模板一致
  • 确保收件人号码有效且可接通
  • 检查回调 Webhook 是否正在接收状态更新
Webhook/回调问题
  • 验证服务器是否可从互联网访问
  • 检查 HTTPS 证书是否有效
  • 确保回调 URL 使用您的公共域名
  • 手动测试 Webhook 端点
资源

🌐 请记住:此应用在生产环境中需要使用带 HTTPS 的公共域名。该域名对于 Claude Desktop 连接和 Exotel Webhook 投递至关重要。

🚀 准备好部署了吗? 请按照上方的托管指南操作,开始通过 Claude AI 发送短信、拨打电话并使用音频工具!

评论

支持 Markdown

第一次接触 MCP?

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

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