five9-mcp
☎️ five9-mcp
Ваш контакт-центр Five9 — в руках вашего ИИ.
Open-source MCP сервер, который подключает Claude, ChatGPT или любого MCP-клиента к облачному контакт-центру Five9 — работает на Cloudflare Workers с нулевыми зависимостями.
Быстрый старт · Подключение Claude · Подключение ChatGPT · Инструменты · Архитектура
Спрашивайте своего ИИ, например:
«Кто сейчас на линии и насколько глубока очередь продаж?» 📊 «Создай превью-кампанию для списка возврата клиентов, привяжи навык продаж и запусти её.» 🛠️ «Останови кампанию OUTBOUND_AGED и добавь эти 3 лида в список обратных звонков.» 📞 «Заведи нового агента: создай пользователя, назначь навык биллинга уровня 2.» 🧑💼 «Номер 555-867-5309 есть в нашем DNC? Проверь, прежде чем кто-то наберёт его.» 🚫 «Вытащи отчёт Call Log за вчера и суммируй долю брошенных вызовов.» 📈 «Собери мне полный IVR: опция 1 — запись, опция 2 — биллинг, в нерабочее время — голосовая почта.» 🧩
Под капотом этот сервер говорит на SOAP Web Services Five9 — Configuration (администрирование) и Statistics (супервизор), — тех API, на которых до сих пор работает административный интерфейс Five9, и отдаёт их как чистые JSON-инструменты через MCP streamable HTTP. Конверты написаны вручную, XML-парсер примерно на 60 строк, никаких npm-пакетов. Каждый инструмент проверен на живом домене Five9.
✨ Встроенный веб-интерфейс
Разверните его — и ваш Worker будет не просто API:
Страница | Что вы получите |
| Аккуратная целевая страница: статус сервера в реальном времени, это руководство по настройке, пошаговые инструкции по подключению ИИ и полный каталог инструментов |
| Мастер настройки — введите учётные данные Five9 в браузере, получите их проверку в реальном времени и свой ключ доступа. Без терминала и команд для секретов |
| Интерактивная консоль — вставьте ключ доступа, выберите любой из 77 сгруппированных инструментов, заполните форму, сгенерированную из его схемы, и выполните его на вашем живом домене Five9 прямо из браузера |
| Сам MCP-эндпоинт (streamable HTTP, без состояния) |
| JSON-проверка работоспособности |
Консоль — самый быстрый способ проверить учётные данные, посмотреть, что возвращает каждый инструмент, или отладить кампанию — без участия ИИ.
🚀 Быстрый старт — без терминала
Вам нужен бесплатный аккаунт Cloudflare и пользователь Five9 с доступом к API — создайте отдельного API-пользователя Five9 с правами, ограниченными тем, что вы хотите поручить ИИ, и не используйте личный администраторский логин.
1 — Разверните в Cloudflare (один клик, прямо в браузере)
Войдите в Cloudflare и пройдите по шагам — сервис создаст вашу собственную копию этого Worker (плюс необходимое пространство имён KV) и даст вам URL вида https://five9-mcp.you.workers.dev.
2 — Запустите мастер настройки (в браузере)
Откройте /setup на вашем новом сервере. Введите имя пользователя Five9, пароль и регион — мастер проверит их в реальном времени через Five9 перед сохранением, а затем выдаст вам ключ доступа (показывается один раз — сохраните его в менеджере паролей).
3 — Подключите свой ИИ (инструкции ниже), а затем попросите его «проверить подключение и показать мои кампании». 🎉
git clone https://github.com/ryanshatz/five9-mcp
cd five9-mcp
npx wrangler deploy # provisions the CONFIG KV namespace on first deployЗатем либо воспользуйтесь мастером /setup, либо пропустите его и управляйте учётными данными как секретами Wrangler (секреты имеют приоритет над мастером):
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 и подходят для доменов в США:
Переменная | По умолчанию | Примечания |
|
| ЕС: |
|
| Версия WSDL конфигурационных веб-сервисов |
|
| Версия WSDL статистических веб-сервисов |
🔌 Подключите свой ИИ
Подключение Claude (веб и десктоп)
Пользовательские коннекторы доступны на тарифах Free (один коннектор), Pro, Max, Team и Enterprise.
В claude.ai или в десктоп-приложении Claude откройте Настройки → Коннекторы.
Нажмите Добавить пользовательский коннектор.
Назовите его Five9 и вставьте URL вашего сервера включая путь
/mcp:https://<your-worker>.workers.dev/mcpНажмите Добавить, затем Подключить. Claude автоматически обнаружит встроенный OAuth этого сервера и откроет его страницу авторизации.
На экране 🔐 five9-mcp вставьте ваш
MCP_AUTH_TOKENв качестве ключа доступа и нажмите Авторизовать.В любом чате откройте меню поиск и инструменты (+) и убедитесь, что коннектор Five9 включён.
Team/Enterprise: владелец сначала добавляет коннектор в разделе Настройки организации → Коннекторы; затем участники нажимают Подключить в своих настройках, чтобы авторизоваться.
Подключение ChatGPT
Пользовательские MCP-коннекторы требуют режима разработчика (Plus/Pro; на тарифах Business/Enterprise администратор должен разрешить пользовательские коннекторы).
В веб-версии ChatGPT откройте Настройки → Приложения и коннекторы (иногда этот раздел называется просто Коннекторы).
В разделе Дополнительные настройки включите режим разработчика.
Вернувшись на страницу коннекторов, нажмите Создать.
Назовите его Five9, укажите URL MCP-сервера —
https://<your-worker>.workers.dev/mcp— и выберите аутентификацию OAuth.Подтвердите запрос доверия и сохраните. ChatGPT откроет страницу авторизации этого сервера — вставьте ваш
MCP_AUTH_TOKENи нажмите Авторизовать.В новом чате откройте меню + / инструменты и включите коннектор Five9 (коннекторы режима разработчика включаются отдельно для каждого разговора). ChatGPT попросит подтверждать каждый вызов инструмента — разумно для всего, что может запустить автодозвон. 😄
Подключение Claude Code
claude mcp add --transport http five9 https://<your-worker>.workers.dev/mcp \
--header "Authorization: Bearer <your MCP_AUTH_TOKEN>"Сам ключ доступа работает напрямую как bearer-токен — без плясок с OAuth. Выполните /mcp в Claude Code, чтобы проверить.
Любой другой MCP-клиент
Подойдёт всё, что говорит на MCP streamable HTTP — пройдите OAuth-процедуру или отправьте ключ доступа как bearer-токен:
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, refresh-токены), рассчитанный на развёртывание с одним оператором:
«Логин» на экране согласия — это ключ доступа сервера (
MCP_AUTH_TOKEN).Всё не имеет состояния — ID клиентов, коды авторизации и токены представляют собой подписанные HMAC-SHA256 блобы, привязанные к
MCP_AUTH_TOKEN. Никаких KV и Durable Objects.Оба пути аутентификации работают одновременно: токены, выпущенные через OAuth, и сам ключ как bearer-учётные данные.
Отзовите всё разом, сменив секрет:
npx wrangler secret put MCP_AUTH_TOKEN.
🧰 Набор инструментов
77 инструментов. 🟢 = чтение (всегда безопасно) · ✏️ = запись (изменяет ваш домен — сервер требует, чтобы ИИ сначала подтвердил у вас)
69 SOAP-инструментов (имя пользователя/пароль) + 8 REST-инструментов OAuth New Platform (Consumer Key/Secret — см. OAuth New Platform APIs).
Главная фишка: опишите сценарий звонка в одном абзаце — и ИИ спроектирует его, покажет вам диаграмму Mermaid в чате и развернёт рабочий IVR-скрипт. Модель никогда не импровизирует с IVR-XML Five9: она заполняет ограниченную JSON-спецификацию потока (play / menu / business-hours / skill transfer / voicemail / hangup), валидатор графа проверяет каждую ветку и ссылку, а детерминированный код генерирует XML в формате дизайнера (соединение модулей, кодирование промптов и порядок полей — всё получено из реальных экспортированных скриптов).
Инструмент | Что делает | |
🟢 |
| Проверяет граф спецификации потока + убеждается, что упомянутые навыки/промпты существуют в домене |
🟢 |
| Отрисовывает спецификацию потока или существующий IVR-скрипт в виде диаграммы Mermaid |
✏️ |
| Собирает полный XML скрипта и создаёт его в домене ( |
✏️ |
| Озвучивает промпт современным ИИ-голосом и загружает его как G.711 u-law WAV, совместимый с Five9. API-ключ не нужен: работает на Workers AI (Deepgram Aura, ~40 голосов), встроенном в ваш Worker |
Рекомендуемый порядок: проверка → отрисовка (покажите человеку!) → генерация промптов → сборка → привязка к входящей кампании. generate_prompt_audio работает на Cloudflare Workers AI из коробки: ни внешнего TTS-аккаунта, ни API-ключа, доли цента за промпт списываются на аккаунт Cloudflare, на который вы уже развернули сервер. ElevenLabs/OpenAI тоже работают, если задать их ключи в секретах, а промпты {tts} (встроенный роботизированный голос Five9) не требуют вообще ничего.
Инструмент | Что делает | |
🟢 |
| Контекст оператора для ИИ — кто управляет этим сервером и основные правила |
🟢 |
| Проверяет, работают ли учётные данные Five9; возвращает число видимых навыков |
🟢 |
| Текущие счётчики использования Five9 API и лимиты |
Инструмент | Что делает | |
🟢 |
| Список кампаний (имя, тип, состояние, режим) |
🟢 |
| Состояние + привязанные списки + DNIS одним вызовом |
🟢 |
| ПОЛНАЯ конфигурация кампании (режим дозвона, соотношения, запись, wrap-up…) |
✏️ |
| Создание исходящих или входящих кампаний, BASIC или ADVANCED |
✏️ |
| Изменение любых настроек кампании — read-modify-write, передавайте только изменения |
✏️ |
| Переименование кампании |
✏️ |
| Удаление кампании |
✏️ |
| start / stop / force_stop / reset / reset_list_positions |
✏️ |
| Привязка/отвязка списков дозвона с приоритетом |
✏️ |
| Добавление/удаление навыков маршрутизации в кампании |
✏️ |
| Привязка/отвязка входящих номеров |
✏️ |
| Добавление/удаление кодов результатов (dispositions) оператора в кампании |
🟢 |
| Список профилей кампании (ANI, попытки, таймауты) |
✏️ |
| Создание / изменение / удаление профилей кампании |
✏️ |
| Чтение / изменение критериев выбора записей CRM и порядка дозвона профиля |
Инструмент | Что делает | |
🟢 |
| Список списков дозвона + количество записей |
✏️ |
| Создание или удаление списка дозвона |
✏️ |
| Добавление лида в список (асинхронный импорт) |
✏️ |
| Массовое добавление множества лидов одним асинхронным импортом (настраиваемые режимы CRM/списка) |
✏️ |
| Удаление подходящих записей из списка |
🟢 |
| Результат асинхронного импорта списка/CRM |
Инструмент | Что делает | |
🟢 |
| Поиск контактов по точным значениям полей |
✏️ |
| Обновление контакта (по умолчанию безопасно — только при единственном совпадении) |
✏️ |
| Массовое обновление контактов CRM одним асинхронным импортом (опрос с типом "crm") |
✏️ |
| Удаление контакта (только когда совпадение ровно одно) |
🟢 |
| Схема полей контактов домена |
✏️ |
| Создание / изменение / удаление пользовательских полей CRM |
Инструмент | Что делает | |
✏️ |
| Проверка / добавление / удаление номеров в списке DNC домена |
🟢 |
| Правила дозвона домена (ограничения по времени/штату) |
Инструмент | Что делает | |
🟢 |
| Список пользователей с общей информацией |
🟢 |
| Полная запись одного пользователя: роли, навыки, группы |
✏️ |
| Создание пользователя с ролями, навыками и группами |
✏️ |
| Редактирование данных пользователя — передавайте только изменения |
✏️ |
| Удаление пользователя |
🟢 |
| Шаблоны ролей/прав |
🟢 |
| Навыки — с назначенными пользователями или без |
✏️ |
| Создание / изменение / удаление навыков |
✏️ |
| Назначение навыков пользователям, установка уровней |
✏️ |
| Выдача / отзыв ролей (agent, admin, supervisor, reporting, crmManager) с вкладками разрешений |
🟢 |
| Группы операторов + участники |
✏️ |
| Создание / удаление групп, добавление/удаление операторов |
✏️ |
| Коды причин Not Ready / Logout |
Инструмент | Что делает | |
🟢 |
| Коды результатов вызовов (dispositions) и их настройки |
✏️ |
| Создание / изменение / переименование / удаление dispositions (включая таймеры повторного набора) |
🟢 |
| IVR-скрипты — метаданные или полный XML одного скрипта |
✏️ |
| Создание / изменение / удаление IVR-скриптов (отправка полного xmlDefinition) |
🟢 |
| Голосовые подсказки (промпты) домена |
✏️ |
| Создание / изменение / удаление текстово-речевых (TTS) промптов |
✏️ |
| Создание / изменение / удаление заранее записанных WAV-промптов (base64; G.711 µ-law 8kHz моно) |
🟢 |
| Настроенные входящие номера (опционально только неназначенные) |
🟢 |
| Переменные вызова и группы переменных |
✏️ |
| Создание / удаление пользовательских переменных вызова |
🟢 |
| Интеграции веб-коннекторов |
✏️ |
| Создание / удаление веб-коннекторов (URL-попы, запускаемые операторами) |
✏️ |
| Список / создание / удаление кодов быстрого набора |
🟢 |
| Настройки VCC на уровне домена |
Инструмент | Что делает | |
🟢 |
| Запуск любого отчета по папке + имени, опциональный диапазон времени |
🟢 |
| Опрос для получения CSV-вывода отчета |
🟢 |
| AgentState, ACDStatus, CampaignState, статистика кампаний (включая представления dialer-manager и autodial) |
Эти инструменты работают с современными OAuth 2.0 REST API «New Platform» от Five9, а не с SOAP API, которые используют инструменты выше. Требуется учётные данные API Access Control (Consumer Key/Secret), а не имя пользователя/пароль SOAP — см. OAuth New Platform APIs.
Инструмент | Что делает | |
🟢 |
| Проверка OAuth-учётных данных — получает bearer-токен (без данных домена) |
🟢✏️ |
| Универсальный аутентифицированный вызов любой конечной точки New Platform (метод + путь + тело) с поддержкой rate-limit/backoff и ETag |
🟢✏️ |
| Circles — список / получение / создание / удаление (нет SOAP-эквивалента) |
🟢 |
| Голосовые промпты через API prompts New Platform (с пагинацией) |
🟢 |
| Dispositions через API interactions (богаче, чем SOAP-список; только чтение) |
🟢 |
| Метаданные домена (id, name, tenant, service endpoints) |
🟢 |
| Data Tables (структурированные справочные таблицы; нет SOAP-эквивалента) — используется отдельный credential |
🟢 |
| Строки Data Table по id (с пагинацией) |
🔐 OAuth New Platform APIs
Наряду с SOAP-инструментами сервер может вызывать более новые OAuth 2.0 New Platform REST APIs от Five9 (например, Circles, interactions, prompts, domain metadata). Для них используется другой credential, чем имя пользователя/пароль SOAP:
API Access Control Consumer Key и Consumer Secret, созданные в Five9 Admin Console → API Access Control (функция Controlled-Availability). Для создания требуется разрешение
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 family + scopes — all-apis-access не предоставляет буквально все сервисы, а права записи действуют отдельно для каждого сервиса.
Несколько наборов учётных данных / семейств. Каждый набор учётных данных API Access Control принадлежит одному семейству (сопоставленному с 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 для начала работы указан endpoint токена
/v1/auth/token, но реальный endpoint —/oauth2/v1/token(именно его использует этот клиент).
🎨 Настройка контекста оператора
src/about.js содержит текст, передаваемый подключённым ИИ через поле instructions MCP и инструмент about: кто управляет сервером, зачем он существует и как ИИ должен себя вести (например, «подтверждать перед записывающими действиями»). Отредактируйте его, чтобы описать собственное развёртывание — в комплекте идёт контекст исходного оператора в качестве примера.
🏗️ Архитектура
Никакого шага сборки, никаких зависимостей — обычные JS-модули в src/:
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 открывает новый SOAP-обмен с Five9 с 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>); некоторые ответы возвращают один объект там, где вы ожидали бы массив из одного элемента.toArray()вfive9.jsэто нормализует.В критериях времени отчёта порядок
<end>перед<start>(алфавитный порядок JAXB).IVR
xmlDefinition— это сохраняемый формат визуального конструктора: модули связываются по GUID (ascendants/singleDescendant/branches), встроенный TTS-текст хранится в документахspeakElementв виде gzip+base64, а проверки рабочих часов сравнивают системные переменные__DAY__(SUN=1..SAT=7) и__TIME__(минуты с полуночи). Всё это инкапсулировано вivr.js.getPromptsне возвращает идентификаторы промптов (только имя + тип). Ссылки на файловые промпты внутри IVR XML принимаются сid 0и именем промпта и нормализуются на стороне сервера; при обратном получении отправленного скрипта к нему добавляется проставленный серверомdomainId.
🛡️ Безопасность
Учётные данные Five9 хранятся только в вашем аккаунте Cloudflare — в виде секретов Worker или (вариант с мастером) в namespace Workers KV, в зашифрованном виде при хранении. Ни один инструмент никогда их не возвращает, а секреты Wrangler всегда имеют приоритет над KV.
Мастер настройки открыт только на новом, ненастроенном сервере — запустите его сразу после развёртывания. После настройки любое изменение требует текущий ключ доступа, а серверы, управляемые через env, полностью отклоняют изменения мастера.
Всегда завершайте настройку (или задайте
MCP_AUTH_TOKEN). Ненастроенный сервер без ключа доступа работает в открытом режиме — любой, кто найдёт URL, сможет управлять вашим контакт-центром.Инструменты записи (✏️ выше) изменяют ваш домен. Ограничьте область действия роли пользователя Five9 API тем, что вы действительно хотите, чтобы делал ИИ, — разрешения Five9 являются настоящей границей безопасности.
manage_dnc removeиdelete_listтребуют особой осторожности; инструкцииaboutпредписывают ИИ подтверждать действие перед их использованием.Консоль хранит ваш ключ доступа только в localStorage браузера, а вызовы идут на ваш собственный Worker с того же источника (same-origin).
💻 Разработка
npm run dev # wrangler dev on http://localhost:8787
npm run deploy # wrangler deployПоместите локальные секреты в .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 и запускайте инструменты на вашем домене — или проведите дымовой тест из CLI с помощью приведённого выше примера curl.
🤝 Вклад в проект
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