使用说明
电话MCP服务器
使用Claude桌面的演示
基于语音识别的代理电话会话
在对话中使用短信
短信查询(发送和接收)
使用GitHub Copilot的演示
引言
此目录包含用于电话操作的MCP(模型上下文协议)服务器工具,例如使用Vonage API进行语音呼叫和发送SMS消息。这些工具旨在与大型语言模型(LLM)应用程序集成,使LLM能够执行简单文本生成之外的实际操作。
LLM和工具集成
LLM(大型语言模型)是高级令牌生成器——它们可以根据输入提示生成文本、图像甚至视频。然而,他们的核心能力仅限于生成内容;他们无法自己访问外部数据或在现实世界中执行操作。
为了扩展其功能,LLM可以连接到外部工具。例如,当用户问“今天天气怎么样?”时,LLM可以调用后端API工具,如 get_weather(city) 通过系统提示,解析响应,并将结果返回给用户。此工具调用机制将基本LLM转换为强大的LLM应用程序。
使用MCP和LangChain进行工具调用
- LangChain 是一个流行的框架,用于开发由LLM驱动的应用程序。它提供了一组预构建的工具(称为Toolkit),LLM可以使用这些工具与外部系统进行交互。
- 主控程序 (模型上下文协议)遵循相同的概念:它提供了一组预构建的工具和一个用于编写新工具和处理函数调用的框架。
- 这两个框架都允许LLM调用工具,解析其输出,并将结果集成到其响应中。
这是如何工作的
- 工具定义:在这个项目中,工具如
voice_call和send_sms使用MCP框架定义。每个工具都是LLM应用程序可以调用的函数。 - LLM申请当与LLM(如OpenAI的GPT、Anthropic的Claude等)集成时,LLM可以根据用户提示决定调用这些工具。
- 执行流程:
- LLM收到一个提示(例如,“打电话给爱丽丝打招呼”)。
- LLM确定需要工具调用,并调用适当的MCP工具(例如。,
voice_call). - 该工具执行(例如,通过Vonage发起电话呼叫)并返回结果。
- LLM解析响应并将其呈现给用户。
运行MCP工具
先决条件
- Python 3.13+
- MCP-CLI(
mcp[cli])、FastAPI、httpx、pyjwt、python dotenv、uvicorn、pydantic(参见pyproject.toml详情) - Vonage API凭据(API密钥、机密、应用程序ID、私钥)
- 回调服务器的公共URL(用于生产)
设置
-
安装依赖项:
pip install -r requirements.txt或者,如果使用诗歌:
poetry install -
配置环境变量:
-
创建一个
.env使用您的Vonage凭据进行归档:VONAGE_API_KEY=your_api_key VONAGE_API_SECRET=your_api_secret VONAGE_APPLICATION_ID=your_app_id VONAGE_PRIVATE_KEY_PATH=path/to/private.key VONAGE_LVN=your_virtual_number VONAGE_API_URL=https://api.nexmo.com/v1/calls VONAGE_SMS_URL=https://rest.nexmo.com/sms/json CALLBACK_SERVER_URL=https://your-public-url # URL for Vonage event callbacks对于
CALLBACK_SERVER_URL:- 开发中:您可以使用
http://localhost:8080(如果未指定,则默认) - 在生产环境中:使用公共URL(如ngrok URL或部署的服务器)
- 开发中:您可以使用
-
-
运行MCP服务器:
python telephony_server.py服务器将启动并公开为LLM应用程序定义的工具。
使用Docker运行
您还可以使用Docker运行电话MCP服务器:
-
构建并启动Docker容器:
docker compose up --build或者在后台运行:
docker compose up --build -d -
停止Docker容器:
docker compose down -
查看Docker容器中的日志:
docker compose logs -f
与LLM应用程序一起使用
- 直接积分法:将LLM应用程序(例如,通过Adapter或自定义MCP客户端使用LangChain)连接到正在运行的MCP服务器。LLM现在可以根据需要调用电话工具。
- 示例:当LLM收到诸如“拨打此号码+123并阅读今天的最新新闻”之类的提示时,它将呼叫
voice_call工具,传递所需的参数。 - 示例:当LLM收到“用英国口音拨打这个号码”这样的提示时,它会拨打
voice_call具有特定语言和样式参数的工具。 - 示例:当LLM收到“改发短信给新闻”这样的提示时,它将调用
send_sms工具,传递所需的参数。
与Claude Desktop或其他MCP客户端一起使用
要配置MCP客户端(如Claude Desktop)以使用您的电话MCP服务器:
-
更新您的MCP客户端配置文件 (例如。,
claude_desktop_config.json):{ "mcpServers": { "telephony": { "command": "docker", "args": ["run", "-i", "--rm", "--init", "-e", "DOCKER_CONTAINER=true", "telephony-mcp-server"] } } } -
构建Docker镜像 (如果不使用docker compose):
docker build -t telephony-mcp-server . -
重新启动MCP客户端以应用更改。
关键概念
- LLM是内容生成器:它们生成文本、图像或视频,但需要外部工具进行网络搜索、电话或数据库访问等操作。
- 工具调用:LLM可以调用后端API(工具)来获取数据或执行操作,然后解析和呈现结果。
- 框架LangChain和MCP都提供了一个结构,用于定义、注册和调用LLM中的工具。
- 主控程序:帮助您编写新工具和管理函数调用,使扩展具有自定义功能的LLM应用程序变得容易。
Vonage事件的回调服务器
电话MCP服务器还包括一个在端口8080上监听的Vonage回叫服务器。此服务器用于从Vonage Voice API接收事件通知,这些通知是在语音呼叫启动、完成或遇到错误时发送的。
特性
- 接收并存储Vonage事件回调
- 提供端点以查看和管理存储的事件
- 在同一应用程序中作为单独的服务运行
端点
GET /-健康检查端点POST /event-接收Vonage回调的主要端点GET /events-列出所有存储的事件(带分页)GET /events/{event_id}-按ID获取特定事件DELETE /events-清除所有存储的事件
配置
要使用带有VonageVoice API的回调服务器,您需要设置 CALLBACK_SERVER_URL 环境变量到服务器的公共URL。此URL将用作 event_url Vonage API调用中的参数。
export CALLBACK_SERVER_URL="https://your-public-url"
对于本地开发,您可以使用像ngrok这样的服务将本地服务器暴露给互联网:
ngrok http 8080
然后设置 CALLBACK_SERVER_URL 转到ngrok URL。