five9-mcp
☎️ five9-mcp
让您的 Five9 联络中心尽在 AI 的掌控之中。
一个开源 MCP 服务器,可将 Claude、ChatGPT 或任何 MCP 客户端连接到 Five9 云联络中心——运行在 Cloudflare Workers 上,零依赖。
快速开始 · 连接 Claude · 连接 ChatGPT · 工具 · 架构
您可以向 AI 提出这样的问题:
“现在谁正在通话中?销售队列有多深?” 📊 “为赢回名单创建一个预览活动,挂接销售技能,然后启动它。” 🛠️ “停止 OUTBOUND_AGED 活动,并将这 3 条线索添加到回呼列表。” 📞 “为新坐席办理入职:创建用户,分配二级计费技能。” 🧑💼 “555-867-5309 在我们的 DNC 名单上吗?在任何人拨打之前先查一下。” 🚫 “拉取昨天的 Call Log 报告并汇总弃呼率。” 📈 “帮我构建一个完整的 IVR:选项 1 排班、选项 2 计费、非工作时间转到语音信箱。” 🧩
在底层,该服务器对接 Five9 的 Configuration(管理)与 Statistics(主管)SOAP Web Services——也就是仍在驱动 Five9 管理界面的那套 API——并通过 MCP streamable HTTP 将它们以简洁的 JSON 工具形式暴露出来。手工编写的 SOAP 信封、一个约 60 行的 XML 解析器,没有 npm 包。每一个工具都已在真实的 Five9 域上进行过实战验证。
✨ 内置 Web UI
部署之后,您的 Worker 所提供的远不止是一个 API:
页面 | 功能说明 |
| 精美的落地页:实时服务器状态、本设置指南、手把手的 AI 连接教程,以及完整的工具目录 |
| 设置向导——在浏览器中输入 Five9 凭据,实时完成验证,然后获取您的访问密钥。无需终端,无需 secrets 命令 |
| 交互式控制台——粘贴您的访问密钥,从 77 个分组工具中任选一个,填写按工具 schema 自动生成的表单,直接在浏览器中针对您的实时 Five9 域运行 |
| MCP 端点本身(streamable HTTP,无状态) |
| JSON 健康检查 |
控制台是验证凭据、查看每个工具返回内容或调试活动的最快方式——完全不需要 AI。
🚀 快速开始——无需终端
您需要一个免费的 Cloudflare 账户,以及一个具有 API 访问权限的 Five9 用户——创建一个专用的 Five9 API 用户,将其权限限定为您希望 AI 执行的操作,切勿复用个人管理员登录账号。
1 — 部署到 Cloudflare (在浏览器中一键完成)
登录 Cloudflare,按指引一路点击即可——它会创建此 Worker 的专属副本(以及所需的 KV 命名空间),并为您提供一个类似 https://five9-mcp.you.workers.dev 的 URL。
2 — 运行设置向导 (在浏览器中)
在您的新服务器上打开 /setup。输入您的 Five9 用户名、密码和区域——向导会在保存前实时向 Five9 验证这些信息,然后把您的访问密钥交给您(仅显示一次——请存入密码管理器)。
3 — 连接您的 AI(教程见下文),然后让它*“检查连接并列出我的活动。”* 🎉
git clone https://github.com/ryanshatz/five9-mcp
cd five9-mcp
npx wrangler deploy # provisions the CONFIG KV namespace on first deploy然后,您可以继续使用 /setup 向导,也可以跳过它,改用 Wrangler secrets 来管理凭据(secrets 会覆盖向导):
npx wrangler secret put FIVE9_USERNAME # e.g. apiuser@yourdomain
npx wrangler secret put FIVE9_PASSWORD
npx wrangler secret put MCP_AUTH_TOKEN # a long random string — this is the key to your server默认值位于 wrangler.toml 中,适用于美国区域:
变量 | 默认值 | 说明 |
|
| 欧盟: |
|
| Config Web Services WSDL 版本 |
|
| Statistics Web Services WSDL 版本 |
🔌 连接您的 AI
连接 Claude(Web 与桌面)
自定义连接器在 Free(一个连接器)、Pro、Max、Team 和 Enterprise 计划中均可用。
在 claude.ai 或 Claude Desktop 应用中,打开 Settings → Connectors。
点击 Add custom connector。
将其命名为 Five9,并粘贴您的服务器 URL,务必包含
/mcp路径:https://<your-worker>.workers.dev/mcp点击 Add,然后点击 Connect。Claude 会自动发现此服务器内置的 OAuth,并打开其授权页面。
在 🔐 five9-mcp 界面中,将您的
MCP_AUTH_TOKEN作为访问密钥粘贴进去,然后点击 Authorize。在任意聊天中,打开 search & tools(+)菜单,确保 Five9 连接器已开启。
**Team/Enterprise:**Owner 先在 Organization settings → Connectors 下添加连接器;成员随后在自己的设置中点击 Connect 以完成授权。
连接 ChatGPT
自定义 MCP 连接器需要 Developer mode(Plus/Pro 计划;Business/Enterprise 计划下需要管理员允许使用自定义连接器)。
在 ChatGPT 网页版中,打开 Settings → Apps & Connectors(有时仅标记为 Connectors)。
在 Advanced settings 下,开启 Developer mode。
返回 Connectors 页面,点击 Create。
将其命名为 Five9,将 MCP server URL 设置为
https://<your-worker>.workers.dev/mcp,并选择 OAuth 认证方式。确认信任提示并保存。ChatGPT 会打开此服务器的授权页面——粘贴您的
MCP_AUTH_TOKEN,然后点击 Authorize。在新聊天中,打开 + / 工具菜单并启用 Five9 连接器(Developer mode 下的连接器按会话启用)。ChatGPT 会要求您确认每一次工具调用——对于任何可能启动拨号器的操作来说,这都很合理。😄
连接 Claude Code
claude mcp add --transport http five9 https://<your-worker>.workers.dev/mcp \
--header "Authorization: Bearer <your MCP_AUTH_TOKEN>"原始访问密钥可直接作为 bearer token 使用——无需繁琐的 OAuth 授权流程。在 Claude Code 中运行 /mcp 即可验证。
其他 MCP 客户端
任何支持 MCP streamable HTTP 的客户端均可使用——完成 OAuth 流程,或将访问密钥作为 bearer token 发送:
curl -X POST https://<your-worker>.workers.dev/mcp \
-H "Authorization: Bearer <MCP_AUTH_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"check_connection","arguments":{}}}'src/oauth.js 实现了一个极简的 OAuth 2.1 授权服务器(支持元数据发现、动态客户端注册、PKCE S256、刷新令牌),专为单运营者部署而设计:
同意屏幕上的“登录”就是服务器的访问密钥(
MCP_AUTH_TOKEN)。一切都是无状态的——客户端 ID、授权码和令牌均是以
MCP_AUTH_TOKEN为密钥的 HMAC-SHA256 签名数据块。无需 KV,也无需 Durable Objects。两条认证路径可同时工作:OAuth 签发的令牌以及作为 bearer 凭据的原始密钥。
轮换密钥即可一次性撤销所有凭据:
npx wrangler secret put MCP_AUTH_TOKEN。
🧰 工具箱
77 个工具。 🟢 = 读取(始终安全)· ✏️ = 写入(会更改您的域——服务器会提示 AI 先征得您的确认)
69 个 SOAP 工具(用户名/密码)+ 8 个 OAuth New Platform REST 工具(Consumer Key/Secret——参见 OAuth New Platform APIs)。
核心亮点:用一段话描述呼叫流程,AI 就会设计出来,在聊天中向您展示 Mermaid 流程图,并部署一个可正常运行的 IVR 脚本。模型绝不会自行发挥编造 Five9 的 IVR XML:它会填写一个受约束的 JSON 流程规范(play / menu / business-hours / skill transfer / voicemail / hangup),图形校验器会检查每一个分支和引用,确定性的代码则会生成设计器形态的 XML(模块连线、提示语编码和字段顺序均源自真实导出的脚本)。
工具 | 功能说明 | |
🟢 |
| 对流程规范进行图形校验,并验证所引用的技能/提示语在域上存在 |
🟢 |
| 将流程规范或现有 IVR 脚本渲染为 Mermaid 流程图 |
✏️ |
| 组合出完整的脚本 XML,并在域上创建它(可先使用 |
✏️ |
| 用现代 AI 语音为提示语配音,并上传为 Five9 可直接使用的 G.711 u-law WAV。无需 API 密钥:由 Worker 内置的 Workers AI(Deepgram Aura,约 40 种语音)提供支持 |
推荐流程:validate → render(先展示给用户看!)→ generate prompts → build → 挂接到呼入活动。generate_prompt_audio 开箱即用,运行在 Cloudflare Workers AI 之上:无需外部 TTS 账户,无需 API 密钥,每条提示语仅需几分之一美分,费用直接计入您完成部署所用的 Cloudflare 账户。只要设置了相应的密钥 secrets,ElevenLabs/OpenAI 同样可以工作;而 {tts} 提示语(Five9 内置的机器人语音)则完全不需要任何配置。
工具 | 功能说明 | |
🟢 |
| 供 AI 使用的运营者上下文——谁在运行此服务器,以及基本规则 |
🟢 |
| 验证 Five9 凭据是否有效;返回可见的技能数量 |
🟢 |
| 当前 Five9 API 使用量计数器与速率限制的对比 |
工具 | 功能说明 | |
🟢 |
| 列出活动(名称、类型、状态、模式) |
🟢 |
| 一次调用获取状态 + 关联列表 + DNIS |
🟢 |
| 完整活动配置(拨号模式、比率、录音、后处理…) |
✏️ |
| 创建呼出或呼入活动,BASIC 或 ADVANCED |
✏️ |
| 编辑任意活动设置 — 读-改-写,只传递更改项 |
✏️ |
| 重命名活动 |
✏️ |
| 删除活动 |
✏️ |
| 启动 / 停止 / force_stop / 重置 / 重置列表位置 |
✏️ |
| 按优先级附加/分离拨号列表 |
✏️ |
| 在活动上添加/移除路由技能 |
✏️ |
| 附加/分离呼入号码 |
✏️ |
| 在活动上添加/移除座席处理码 |
🟢 |
| 列出活动配置文件(ANI、尝试次数、超时时间) |
✏️ |
| 创建 / 修改 / 删除活动配置文件 |
✏️ |
| 读取 / 编辑配置文件的 CRM 记录选择条件和拨号顺序 |
工具 | 功能说明 | |
🟢 |
| 列出拨号列表 + 记录数 |
✏️ |
| 创建或删除拨号列表 |
✏️ |
| 将线索推入列表(异步导入) |
✏️ |
| 在一次异步导入中批量添加大量线索(可配置 CRM/列表模式) |
✏️ |
| 从列表中移除匹配的记录 |
🟢 |
| 异步列表/CRM 导入的结果 |
工具 | 功能说明 | |
🟢 |
| 按精确字段值查找联系人 |
✏️ |
| 更新联系人(默认仅匹配唯一记录时更新) |
✏️ |
| 在一次异步导入中批量更新多个 CRM 联系人(使用类型 "crm" 轮询) |
✏️ |
| 删除联系人(仅在恰好匹配一条时删除) |
🟢 |
| 域的联系人字段架构 |
✏️ |
| 创建 / 修改 / 删除自定义 CRM 字段 |
工具 | 功能说明 | |
✏️ |
| 检查 / 添加 / 移除域 DNC 列表中的号码 |
🟢 |
| 域拨号规则(时间/州限制) |
工具 | 功能说明 | |
🟢 |
| 列出用户及常规信息 |
🟢 |
| 单个用户的完整记录:角色、技能、组 |
✏️ |
| 创建用户并设置角色、技能和组 |
✏️ |
| 编辑用户信息 — 只传递更改项 |
✏️ |
| 删除用户 |
🟢 |
| 角色/权限模板 |
🟢 |
| 技能(可包含或不包含已分配用户) |
✏️ |
| 创建 / 修改 / 删除技能 |
✏️ |
| 为用户分配技能并设置级别 |
✏️ |
| 授予 / 撤销角色(agent、admin、supervisor、reporting、crmManager)及权限标签页 |
🟢 |
| 座席组 + 成员 |
✏️ |
| 创建 / 删除组,添加/移除座席 |
✏️ |
| 未就绪 / 注销原因代码 |
工具 | 功能说明 | |
🟢 |
| 通话处理码及其设置 |
✏️ |
| 创建 / 修改 / 重命名 / 删除处理码(包括重拨定时器) |
🟢 |
| IVR 脚本 — 元数据,或某个脚本的完整 XML |
✏️ |
| 创建 / 修改 / 删除 IVR 脚本(推送完整的 xmlDefinition) |
🟢 |
| 域上的语音提示 |
✏️ |
| 创建 / 修改 / 删除文本转语音提示 |
✏️ |
| 创建 / 修改 / 删除预录的 WAV 提示(base64;G.711 µ-law 8kHz 单声道) |
🟢 |
| 已配置的呼入号码(可选仅未分配) |
🟢 |
| 通话变量和变量组 |
✏️ |
| 创建 / 删除自定义通话变量 |
🟢 |
| Web 连接器集成 |
✏️ |
| 创建 / 删除 Web 连接器(座席触发时弹出 URL) |
✏️ |
| 列出 / 创建 / 删除快速拨号代码 |
🟢 |
| 域级 VCC 设置 |
工具 | 功能说明 | |
🟢 |
| 按文件夹 + 名称启动任意报表,可选时间范围 |
🟢 |
| 轮询获取报表的 CSV 输出 |
🟢 |
| AgentState、ACDStatus、CampaignState、活动统计(包括拨号器管理器与自动拨号视图) |
这些工具使用的是 Five9 现代的 OAuth 2.0 "New Platform" REST APIs,而非上述工具使用的 SOAP APIs。它们需要 API Access Control 凭据(Consumer Key/Secret),不是 SOAP 用户名/密码 — 参见 OAuth New Platform APIs。
工具 | 功能说明 | |
🟢 |
| 验证 OAuth 凭据 — 获取 bearer 令牌(不访问域数据) |
🟢✏️ |
| 对任意 New Platform 端点的通用已认证调用(方法 + 路径 + 请求体),支持速率限制/退避和 ETag |
🟢✏️ |
| Circles — 列出 / 获取 / 创建 / 删除(无 SOAP 对应) |
🟢 |
| 通过 New Platform prompts API 获取语音提示(分页) |
🟢 |
| 通过 interactions API 获取处理码(比 SOAP 列表更丰富;只读) |
🟢 |
| 域元数据(id、名称、租户、服务端点) |
🟢 |
| Data Tables(结构化查找表;无 SOAP 对应)— 使用单独的 |
🟢 |
| 按 id 获取 Data Table 的行(分页) |
🔐 OAuth New Platform APIs
除了 SOAP 工具之外,服务器还可以调用 Five9 较新的 OAuth 2.0 "New Platform" REST APIs(例如 Circles、interactions、prompts、域元数据)。这些 API 使用的凭据与 SOAP 用户名/密码不同:
一个 API Access Control 的 Consumer Key 和 Consumer Secret,在 Five9 Admin Console → API Access Control(一项受控可用性功能)中生成。生成一个需要
security → applications → Create applications权限,并且账户必须迁移到 Five9 Identity Service(具有旧版 API/Agent/Supervisor 角色的用户在这些角色被移除之前不会参与迁移)。将它们配置为 env/secret 变量(均与 SOAP 凭据分开):
FIVE9_CONSUMER_KEY=... # "All APIs access" family credential (default)
FIVE9_CONSUMER_SECRET=...
FIVE9_DOMAIN_ID=131109 # your Admin Console domain id
FIVE9_REST_REGION=US # US | US-ALPHA | CA | EU | IN | UK
# or pin the base URL directly: FIVE9_REST_BASE_URL=https://api.prod.us.five9.net
# Optional second credential for the "Data Tables access" family (its own key):
FIVE9_DT_CONSUMER_KEY=...
FIVE9_DT_CONSUMER_SECRET=...然后运行 rest_check_connection 以确认令牌流。每个凭据能访问什么由其 API 系列 + 作用域 决定——all-apis-access 并不真的授予每项服务,写入权限是按服务分别授予的。
多个凭据/系列。 每个 API 访问控制凭据都属于一个系列(映射到 Apigee API Product),该系列决定该密钥可以调用哪些服务。服务器支持命名凭据:default(来自 FIVE9_CONSUMER_KEY/SECRET)以及 data-tables(来自 FIVE9_DT_CONSUMER_KEY/SECRET)。Data Tables 工具会自动使用 data-tables 凭据;rest_call 和 rest_check_connection 接受一个 credential 参数来选择凭据。
注意: Five9 的入门文档将令牌端点列为
/v1/auth/token,但实际端点是/oauth2/v1/token(本客户端使用的是这个)。
🎨 自定义操作者上下文
src/about.js 保存着通过 MCP instructions 字段和 about 工具提供给已连接 AI 的文本:谁在操作服务器、它为什么存在,以及 AI 应如何表现(例如 “在执行写入操作前确认”)。请编辑它来描述你自己的部署——它随附了原操作者的上下文作为示例。
🏗️ 架构
无需构建步骤、无依赖——src/ 中的纯 JS 模块:
src/
├── index.js # router, CORS, MCP JSON-RPC handler, /setup endpoint
├── five9.js # SOAP client: envelope builder, ~60-line XML parser, one method per Five9 op
├── tools.js # MCP tool definitions (JSON Schema) + dispatch
├── oauth.js # stateless OAuth 2.1 server (single-operator model)
├── config.js # config resolution: Wrangler secrets > KV (setup wizard)
├── ui.js # landing page, setup wizard, interactive console
└── about.js # operator context — edit this for your deployment请求是无状态的:每次 MCP 调用都会发起一次全新的 Five9 SOAP 交换,并使用 HTTP Basic 认证。Statistics API 还需要一次 setSessionParameters 调用,get_realtime_stats 会在每次调用时执行它。
Five9 的端点由 JAXB 生成,并会根据 WSDL 序列校验子元素顺序。如果你要扩展此服务器,请拉取 WSDL(
https://api.five9.com/wsadmin/v13/AdminWebService?wsdl,HTTP Basic 认证),并精确匹配<xs:sequence>的顺序——包括像basicImportSettings这样的基础类型,其元素位于扩展类型的元素之前。addToListCsv要求提供cleanListBeforeUpdate、crmAddMode、crmUpdateMode和listAddMode,尽管 WSDL 将其中大部分标记为minOccurs="0"。List/CRM 导入是异步的:调用会立即返回一个导入标识符;请轮询
get_import_result获取结果。联系记录值返回时带有包装(
<values><data>…</data></values>);有些响应在你会期望单元素数组的地方返回单个对象。five9.js中的toArray()会将其规范化。报表时间条件的顺序是
<end>在<start>之前(JAXB 按字母顺序排列)。IVR 的
xmlDefinition是可视化设计器的持久化格式:模块通过 GUID(ascendants/singleDescendant/branches)连接,内联 TTS 文本以 gzip+base64 的speakElement文档存储,营业时间检查会比较__DAY__(SUN=1..SAT=7)和__TIME__(自午夜起的分钟数)系统变量。ivr.js封装了所有这些。getPrompts不返回提示 ID(只有名称 + 类型)。IVR XML 中的文件提示引用以id 0+ 提示名称的形式被接受,并在服务器端规范化;推送的脚本会在往返时携带服务器写入的domainId。
🛡️ 安全
Five9 凭据仅存放在你的 Cloudflare 账户中——作为 Worker secrets,或(向导方式)存放在 Workers KV 命名空间中,并静态加密。没有任何工具会返回它们,并且 Wrangler secrets 始终覆盖 KV。
设置向导仅在新部署且未配置的服务器上开放——部署后请立即运行。一旦配置完成,任何更改都需要当前的访问密钥,并且由环境变量管理的服务器会完全拒绝向导更改。
请务必完成设置(或设置
MCP_AUTH_TOKEN)。 未配置且没有访问密钥的服务器会开放运行——任何找到该 URL 的人都能操控你的联络中心。写入工具(上文 ✏️)会更改你的域。请将 Five9 API 用户的角色范围限定为你实际希望 AI 执行的操作——Five9 的权限才是真正的安全边界。
manage_dnc remove和delete_list需要格外谨慎;about指令会告诉 AI 在使用它们之前进行确认。控制台仅将你的访问密钥存储在浏览器的 localStorage 中,并且请求会以同源方式发送到你自己的 Worker。
💻 开发
npm run dev # wrangler dev on http://localhost:8787
npm run deploy # wrangler deploy将本地 secret 放入 .dev.vars(已加入 .gitignore):
FIVE9_USERNAME=apiuser@yourdomain
FIVE9_PASSWORD=...
MCP_AUTH_TOKEN=dev-local-token
# Optional — external AI voice providers for generate_prompt_audio.
# The default (Workers AI / Deepgram Aura) needs no key at all.
ELEVENLABS_API_KEY=...
OPENAI_API_KEY=...
# Optional — OAuth New Platform REST tools (separate credential; see below)
FIVE9_CONSUMER_KEY=...
FIVE9_CONSUMER_SECRET=...
FIVE9_DOMAIN_ID=131109
FIVE9_REST_REGION=US
FIVE9_DT_CONSUMER_KEY=... # optional: "Data Tables access" family
FIVE9_DT_CONSUMER_SECRET=...然后打开 http://localhost:8787/console,粘贴 dev-local-token,并针对你的域运行工具——或使用上面的 curl 片段从 CLI 进行冒烟测试。
🤝 贡献
欢迎提交 PR!Five9 Config API 有 ~180 个操作,此服务器封装了其中 69 个最常用的操作——five9.js + tools.js 中的模式很容易扩展(先阅读 SOAP 说明,省得与 WSDL 较劲)。请保持零依赖约束。
📄 许可证
MIT · 由 Ryan Shatzkamer 构建
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Manage AI assistants, history, calls, campaigns, contacts, knowledge, messaging, and automations.
Voice and chat for AI agents — Discord, Teams, Meet, Slack, Zoom, Telegram, WhatsApp, NC Talk, SIP
Give your AI agent a phone: place calls, navigate IVRs, wait on hold, get structured answers.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/shaunwestALP/five9-mcp-mvp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server