five9-mcp
☎️ five9-mcp
Ваш контакт-центр Five9 в руках вашего ИИ.
Открытый MCP сервер, который подключает Claude, ChatGPT или любой MCP-клиент к облачному контакт-центру Five9 — работает на Cloudflare Workers с нулевой зависимостью.
Быстрый старт · Подключение Claude · Подключение ChatGPT · Инструменты · Архитектура
Спросите ваш ИИ, например:
"Кто сейчас на звонке и насколько глубока очередь продаж?" 📊 "Создайте превью-кампанию для списка возврата клиентов, прикрепите навык продаж и запустите её." 🛠️ "Остановите кампанию OUTBOUND_AGED и добавьте эти 3 лида в список обратных звонков." 📞 "Заведите нового агента: создайте пользователя, назначьте навык биллинга на уровне 2." 🧑💼 "Есть ли 555-867-5309 в нашем DNC? Проверьте, прежде чем кто-то наберёт его." 🚫 "Вытащите отчёт журнала звонков за вчера и обобщите показатели брошенных вызовов." 📈 "Соберите мне полный IVR: опция 1 — расписание, опция 2 — биллинг, после рабочего времени — на голосовую почту." 🧩
Под капотом этот сервер говорит на SOAP-веб-сервисах Five9 Configuration (администрирование) и Statistics (супервизор) — API, которые до сих пор управляют административной поверхностью Five9, — и предоставляет их как чистые JSON-инструменты через MCP streamable HTTP. Собственноручно написанные конверты, XML-парсер примерно на 60 строк, никаких npm-пакетов. Каждый инструмент был проверен на живом домене Five9.
✨ Встроенный веб-интерфейс
Разверните его, и ваш Worker будет обслуживать не только API:
Страница | Что вы получаете |
| Полированная целевая страница: живой статус сервера, это руководство по настройке, пошаговые инструкции по подключению ИИ и полный каталог инструментов |
| Мастер настройки — введите учётные данные Five9 в браузере, получите их проверку в реальном времени, получите ваш ключ доступа. Без терминала, без секретных команд |
| Интерактивная консоль — вставьте ваш ключ доступа, выберите любой из 77 сгруппированных инструментов, заполните форму, сгенерированную из его схемы, и запустите его на вашем живом домене Five9 прямо из браузера |
| Сам MCP-эндпоинт (streamable HTTP, без состояния) |
| JSON-проверка здоровья |
Консоль — самый быстрый способ проверить учётные данные, изучить, что возвращает каждый инструмент, или отладить кампанию — без участия ИИ.
Related MCP server: five9-mcp
🚀 Быстрый старт — без терминала
Вам нужна бесплатная учётная запись 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 и работают для доменов США:
Var | Default | Notes |
|
| ЕС: |
|
| Версия WSDL Config Web Services |
|
| Версия WSDL Statistics Web Services |
🔌 Подключите ваш ИИ
Подключение 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).Всё не имеет состояния — идентификаторы клиентов, коды авторизации и токены — это подписанные 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-скрипт. Модель никогда не импровизирует с XML IVR Five9: она заполняет ограниченную JSON-спецификацию потока (play / menu / business-hours / skill transfer / voicemail / hangup), валидатор графа проверяет каждую ветвь и ссылку, а детерминированный код генерирует XML в форме дизайнера (соединение модулей, кодирование подсказок и порядок полей — всё получено из реальных экспортированных скриптов).
Tool | Что делает | |
🟢 |
| Проверка графа спецификации потока + проверка, что указанные навыки/подсказки существуют на домене |
🟢 |
| Отрисовка спецификации потока или существующего IVR-скрипта в виде блок-схемы Mermaid |
✏️ |
| Составление полного XML скрипта и его создание на домене ( |
✏️ |
| Озвучивание подсказки современным ИИ-голосом и загрузка как WAV G.711 u-law, готового для Five9. Ключ API не нужен: работает на Workers AI (Deepgram Aura, ~40 голосов), встроенном в ваш Worker |
Рекомендуемый поток: validate → render (покажите человеку!) → generate prompts → build → прикрепите к входящей кампании. generate_prompt_audio работает на Cloudflare Workers AI из коробки: без внешнего TTS-аккаунта, без ключа API, доли цента за подсказку списываются с учётной записи Cloudflare, на которую вы уже развернули. ElevenLabs/OpenAI тоже работают, если задать их ключевые секреты, а подсказки {tts} (встроенный роботизированный голос Five9) не требуют ничего вообще.
Tool | Что делает | |
🟢 |
| Контекст оператора для ИИ — кто управляет этим сервером и основные правила |
🟢 |
| Проверка, работают ли учётные данные Five9; возвращает количество видимых навыков |
🟢 |
| Текущие счётчики использования API Five9 по сравнению с лимитами |
Инструмент | Что делает | |
🟢 |
| Список кампаний (имя, тип, состояние, режим) |
🟢 |
| Состояние + прикреплённые списки + DNIS одним вызовом |
🟢 |
| ПОЛНАЯ конфигурация кампании (режим дозвона, коэффициенты, запись, wrap-up…) |
✏️ |
| Создание исходящих или входящих кампаний, BASIC или ADVANCED |
✏️ |
| Изменение любого параметра кампании — чтение-изменение-запись, передавайте только изменения |
✏️ |
| Переименование кампании |
✏️ |
| Удаление кампании |
✏️ |
| 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) |
🟢 |
| Голосовые промпты домена |
✏️ |
| Создание / изменение / удаление промптов text-to-speech |
✏️ |
| Создание / изменение / удаление заранее записанных WAV-промптов (base64; G.711 µ-law 8kHz моно) |
🟢 |
| Выделенные входящие номера (опционально только неназначенные) |
🟢 |
| Переменные вызова и группы переменных |
✏️ |
| Создание / удаление пользовательских переменных вызова |
🟢 |
| Интеграции веб-коннекторов |
✏️ |
| Создание / удаление веб-коннекторов (URL-попы, запускаемые операторами) |
✏️ |
| Просмотр / создание / удаление кодов быстрого набора |
🟢 |
| Настройки VCC на уровне домена |
Инструмент | Что делает | |
🟢 |
| Запуск любого отчёта по папке + имени, опциональный временной диапазон |
🟢 |
| Опрос и получение CSV-вывода отчёта |
🟢 |
| AgentState, ACDStatus, CampaignState, статистика кампаний (вкл. представления dialer-manager и autodial) |
Эти инструменты работают с современными OAuth 2.0 "New Platform" REST APIs Five9, а не с SOAP API, которые используют инструменты выше. Для них требуются учётные данные API Access Control (Consumer Key/Secret), а не имя пользователя/пароль SOAP — см. OAuth New Platform APIs.
Инструмент | Что делает | |
🟢 |
| Проверка OAuth-учётных данных — получение bearer-токена (без данных домена) |
🟢✏️ |
| Универсальный аутентифицированный вызов любого эндпоинта New Platform (метод + путь + тело) с поддержкой rate-limit/backoff и ETag |
🟢✏️ |
| Circles — список / получение / создание / удаление (аналога в SOAP нет) |
🟢 |
| Голосовые промпты через New Platform prompts API (с пагинацией) |
🟢 |
Ключ доступа (Consumer Key) и секретный ключ (Consumer Secret) API Access Control, созданные в Admin Console → API Access Control Five9 (функция контролируемой доступности). Для создания требуется разрешение
security → applications → Create applications, а учетная запись должна быть перенесена в Five9 Identity Service (пользователи с устаревшими ролями API/Agent/Supervisor исключаются из переноса до удаления этих ролей).Настройте их как переменные окружения/секреты (отдельно от учетных данных 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 Access Control принадлежат одному семейству (сопоставленному с API-продуктом Apigee), и это семейство определяет, какие сервисы может вызывать ключ. Сервер поддерживает именованные учетные данные: 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 содержит текст, который передается подключенным ИИ через поле 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".Импорт списков/CRM — асинхронный: вызов немедленно возвращает идентификатор импорта; опрашивайте
get_import_resultдля получения результата.Значения полей контакта возвращаются в обертке (
<values><data>…</data></values>); некоторые ответы возвращают один объект там, где вы ожидали бы массив из одного элемента.toArray()вfive9.jsнормализует это.В критериях отчетов порядок элементов:
<end>перед<start>(согласно алфавитному порядку JAXB).xmlDefinitionIVR — это формат визуального редактора: модули связываются по GUID (ascendants/singleDescendant/branches), встроенный текст TTS хранится как документыspeakElementв gzip+base64, а проверки рабочих часов сравнивают системные переменные__DAY__(SUN=1..SAT=7) и__TIME__(минуты с полуночи).ivr.jsинкапсулирует все это.getPromptsне возвращает идентификаторы подсказок (только имя + тип). Ссылки на файловые подсказки внутри XML IVR принимаются сid 0+ имя подсказки и нормализуются на сервере; отправленный скрипт возвращается с добавленнымdomainId, проставленным сервером.
🛡️ Безопасность
Учетные данные Five9 хранятся только в вашем аккаунте Cloudflare — как секреты Worker, или (в мастере настройки) в namespace Workers KV, зашифрованные в состоянии покоя. Ни один инструмент никогда не возвращает их, а секреты Wrangler всегда имеют приоритет над KV.
Мастер настройки открыт только на свежем, не настроенном сервере — запустите его сразу после развертывания. После настройки любое изменение требует текущий ключ доступа, а серверы, управляемые через переменные окружения, полностью отказываются от изменений через мастер.
Всегда завершайте настройку (или установите
MCP_AUTH_TOKEN). Не настроенный сервер без ключа доступа работает в открытом режиме — любой, кто найдет URL, сможет управлять вашим контакт-центром.Инструменты записи (✏️ выше) изменяют ваш домен. Ограничьте роль API-пользователя Five9 только тем, что вы действительно хотите позволить ИИ делать — разрешения 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 (файл исключен из git):
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.
🤝 Вклад
Pull request'ы приветствуются! Config API Five9 насчитывает ~180 операций, а этот сервер оборачивает 69 наиболее полезных — паттерн в five9.js + tools.js легко расширить (сначала прочтите заметки о SOAP, чтобы не воевать с WSDL). Пожалуйста, сохраняйте ограничение на отсутствие зависимостей.
📄 Лицензия
MIT · автор — Ryan Shatzkamer
Related MCP Connectors
Let AI agents query data and act across all your business apps via MCP.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Official MCP server for OmniDimension. Drive voice agents, dispatch calls, and run bulk campaigns.
Connect any AI agent to 1,000+ apps and 27,000+ actions through one remote MCP server (OAuth).
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server that connects AI assistants to Five9 contact center, allowing management of campaigns, agents, lists, and statistics via natural language commands.17MIT
- AlicenseNot gradedqualityCmaintenanceMCP server connecting AI assistants to the Five9 contact center, enabling management of campaigns, agents, IVR flows, and reports via natural language.MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that connects AI assistants to Five9 cloud contact center, enabling management of campaigns, agents, IVR flows, and reports through natural language.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that connects AI assistants to Five9 cloud contact center, exposing 77 tools for configuration, statistics, IVR building, and campaign management via Cloudflare Workers with zero dependencies.MIT