genesys-cloud-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@genesys-cloud-mcpWhich queue missed its service level yesterday, and in which hours?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
genesys-cloud-mcp
Most questions a supervisor asks about a contact center are simple to say and slow to answer: which queue is losing calls this morning, who handled the most chats yesterday, what happened to a specific call. In Genesys Cloud the answer is usually spread over a few analytics views and filters. An AI assistant with access to the Platform API could answer them directly, but giving it a token that can also change routing, or read every customer's phone number, is not something most teams want.
This is a Model Context Protocol server that gives the assistant 31 tools over queues, agents, conversations, channels, IVR and bot flows, opening hours, quality evaluations, surveys, workforce management schedules, callbacks, outbound campaigns, teams, routing setup and the audit log, and nothing that writes. Every request goes through a read-only check before it is sent, and customer names, numbers and email addresses are masked by default. It includes a simulated contact center, so it can be tried in any MCP client without a Genesys Cloud account.
Four tool calls against the demo contact center, shown as tables by npm run try. The model receives the same data as JSON.
What you can ask
How are the queues doing right now? Is anyone waiting?
Which queue missed its service level yesterday, and in which hours?
Who handled the most interactions this week and what is their average handle time?
Show me the abandoned chats from the last 4 hours that waited more than two minutes.
Walk me through conversation
284d0a28-...: how long did the customer wait, was there a hold, how did it end?Is Billing doing better or worse than last Tuesday at this time?
How much of the morning were the Billing agents actually on queue, and when did they take lunch?
What was Karen doing between 10:00 and 11:00?
How many callers finished in the IVR without talking to anyone, and how many hung up in the menus?
Are we open on the 2nd of November? When do we close today?
What wrap-up codes did Retention use this week, and how often did they save the cancellation?
Who is out of adherence right now, and for how long?
Were we short of the schedule in Billing yesterday morning, or was the schedule itself too thin?
What is Emma's average quality score this month, and did she fail any critical questions?
What did the detractors say about Support this week?
How many callbacks are waiting, and how long did customers wait to be called back today?
How far along is the upgrade campaign, and what is its connect rate?
How much of today's volume came in on WhatsApp, and how is its service level compared with voice?
What do customers ask the bot that it does not understand?
Who can take Spanish calls right now?
Which team has the best quality score and NPS this week?
Did anyone change the Billing queue or the IVR in the last few days?
Related MCP server: WorkForceAI MCP Server
Tools
Queues
Tool | What it returns | API used |
| Queues and member counts |
|
| Configuration of one queue: service level target, alerting timeout, after-call work, skill evaluation, wrap-up codes, and its members with skills and current status |
|
| Waiting, longest wait, interacting, agents on queue by routing status |
|
| Offered, answered, abandoned, abandon rate, service level, ASA, handle, talk, hold and ACW averages; optional time buckets |
|
| The same metrics for two intervals and the change, by default against the same interval a week earlier |
|
Agents
Tool | What it returns | API used |
| Agents with presence and routing status, filtered by queue, status or name |
|
| One agent: queues, skills, languages, current status, and today's interactions and time by status |
|
| Handled interactions and average handle, talk, hold and ACW per agent |
|
| Minutes logged in, on queue, idle, interacting and off queue by presence (break, meal, meeting...), on-queue share and occupancy, per agent and for the team |
|
| Status changes of one agent with durations, and the interactions handled, for up to seven days |
|
Conversations
Tool | What it returns | API used |
| One line per conversation, filtered by queue, agent, media type, direction, outcome, wait or duration |
|
| Timeline of one conversation: queue time, talk, hold, after-call work, wrap-up, who disconnected |
|
| Count, share and average handle time per wrap-up code, for a queue, an agent or the center |
|
Flows and opening hours
Tool | What it returns | API used |
| Per inbound flow (IVR, bot): entered, transferred to a queue, ended in the flow, time in the flow and flow outcomes; optional time buckets |
|
| Whether each schedule group is open, closed or on a holiday now or at a given time, which schedule decides it, the next change and the holidays in the next 60 days |
|
Quality and surveys
Tool | What it returns | API used |
| Released evaluations per agent, queue or evaluator: count, average, lowest and highest score, average critical score |
|
| Evaluations newest first with agent, evaluator, form, score, critical score and whether the agent read it; optionally only critical failures |
|
| Surveys sent and answered, response rate, NPS and average score, per queue or agent |
|
| Answered surveys with the NPS answer, score and comment, filtered to detractors, passives, promoters or answers with comments. Contact details in comments are masked. | Conversation details with |
Workforce management
Tool | What it returns | API used |
| For each agent now: scheduled activity, actual activity, adherence state, impact and minutes in that state |
|
| Published shifts for a day with their activities (on queue, breaks, lunch, meetings, training) in local time |
|
| For one queue and day, per time bucket: agents scheduled on queue, agents actually on queue, offered, abandoned and service level | Schedules, user details and conversation aggregates |
Callbacks and outbound
Tool | What it returns | API used |
| Callbacks waiting now per queue with the oldest, and callbacks requested and completed in an interval with the time to call back | Queue observations and conversation aggregates for |
| Outbound campaigns: status, dialing mode, queue, contact list progress, idle agents, and attempts, connects, connect rate and wrap-up codes in an interval |
|
Channels and bots
Tool | What it returns | API used |
| Interactions per channel (voice in and out, callback, web messaging, WhatsApp, Facebook and other messaging) with share, answered, abandon rate, service level, speed of answer and handle time |
|
| Per bot flow: sessions, ended in the bot, resolved, sent to an agent, intents with how often customers asked for an agent, the not-understood rate and the messages the bot did not understand most often (masked) | Flow aggregates, |
Routing setup
Tool | What it returns | API used |
| Agents with a skill or language, optionally in one queue and above a proficiency, with their current status, available agents first |
|
| Several queues side by side: service level target, alerting timeout, after-call work, skill evaluation, members joined and on queue now, members per skill and language, and setup problems |
|
Teams
Tool | What it returns | API used |
| Teams with division, supervisor, members and members on queue now |
|
| Per team, supervisor or division: members, handled, average handle time, on-queue share, occupancy, quality score and NPS | Conversation, user, evaluation and survey aggregates by user |
Change history
Tool | What it returns | API used |
| Who changed queues, flows, schedules, users, wrap-up codes or skills in the last 14 days, newest first, with old and new values |
|
Prompts combine the tools for common tasks:
Prompt | What it asks for |
| Live status and today's hourly trend, with the queues to act on |
| A day compared with the same day a week earlier: volumes, service level, abandons, channels, the IVR and the bot, callbacks, NPS and wrap-up codes |
| Notes for a one-to-one: volume, handle time against the team, time on queue, quality scores, survey comments and wrap-up codes |
| When a queue lost calls, how long callers waited, scheduled against actual agents, callbacks, what the IVR did and recent configuration changes |
| The configuration changes of the last days and whether the queues and flows they touched behaved differently afterwards |
Queues, agents and flows can be given by name; partial names work ("chat" finds Chat Support). Intervals accept today, yesterday, this_week, last 30m, last 4h, last 7d or an ISO-8601 interval. Calendar words use GENESYS_TIMEZONE.
Results are JSON with names instead of ids, durations in seconds (or minutes where the field says so) and rates as percentages, so the model does not have to convert milliseconds or look up ids.
Try it with the demo contact center
The demo is a fictional center with six queues (voice and messaging), 25 agents in five teams and three entry flows. Calls and messages arrive on a daily curve, go through the IVR or the messaging bot, and are routed to the first free agent who is on shift and not on lunch or a break, so waits, abandons and service level come out of the load and staffing. Some callers finish in self-service or hang up in the menus, and outside opening hours they hear the closed message. In three queues, callers about to hang up can ask for a callback. The opening hours have weekday and weekend schedules, a closed slot for a team meeting and the local holidays.
Agents work published shifts with two breaks and lunch, and do not follow them exactly: some log in late, some breaks run over, and a call that runs into a break delays it. Two supervisors evaluate about one in 25 interactions, about 30% of customers get a survey and a third of them answer, some with a comment. Sales and Retention run outbound campaigns. Messages come in on web messaging, WhatsApp and Facebook, the bot recognises a handful of intents and misses some messages, and the audit log has two weeks of configuration changes. History covers the last five weeks and live status changes as the day goes on.
In Claude Desktop, add this to claude_desktop_config.json:
{
"mcpServers": {
"genesys-cloud-demo": {
"command": "npx",
"args": ["-y", "github:oebh2408/genesys-cloud-mcp", "--demo"]
}
}
}In Claude Code:
claude mcp add genesys-cloud-demo -- npx -y github:oebh2408/genesys-cloud-mcp --demoOr from a clone:
npm install
npm run try # calls three tools and prints the results as tables
npm run inspector # opens the MCP Inspector against the demoThis is what the model receives from get_queue_performance for the demo Billing queue on a bad morning:
{
"interval": "2026-10-20T05:00:00.000Z/2026-10-20T16:40:00.000Z",
"timeZone": "America/Bogota",
"serviceLevelTargetSeconds": 20,
"queues": [
{
"queue": "Billing",
"offered": 87,
"answered": 60,
"abandoned": 19,
"abandonRatePercent": 21.8,
"serviceLevelPercent": 58.9,
"avgSpeedOfAnswerSeconds": 23,
"longestWaitSeconds": 254,
"avgAbandonSeconds": 67,
"avgHandleSeconds": 309,
"avgTalkSeconds": 250,
"avgHoldSeconds": 67,
"avgAcwSeconds": 35,
"transferred": 1,
"leftForCallback": 8
}
]
}Connect to a real org
In Genesys Cloud, create a role with view permissions only. The tools need:
analytics:conversationAggregate:viewanalytics:conversationDetail:viewanalytics:queueObservation:viewanalytics:userAggregate:viewanalytics:userDetail:viewanalytics:flowAggregate:viewrouting:queue:viewrouting:wrapupCode:viewrouting:skill:viewarchitect:flow:viewarchitect:schedule:viewarchitect:scheduleGroup:viewanalytics:evaluationAggregate:view,quality:evaluation:viewanalytics:surveyAggregate:view,quality:survey:viewwfm:realtimeAdherence:view,wfm:schedule:view,wfm:agent:view,wfm:activityCode:viewoutbound:campaign:viewanalytics:botFlowReportingTurn:viewfor bot turnsdirectory:team:view,authorization:division:viewaudits:audit:viewpermission to view users, their presence and routing status
Permission names change from time to time; check them in Admin > Roles / Permissions. A 403 from a tool tells you which request was refused.
Create an OAuth client with the Client Credentials grant and assign it that role, restricted to the divisions you want the assistant to see.
Configure the server:
{
"mcpServers": {
"genesys-cloud": {
"command": "npx",
"args": ["-y", "github:oebh2408/genesys-cloud-mcp"],
"env": {
"GENESYS_CLIENT_ID": "...",
"GENESYS_CLIENT_SECRET": "...",
"GENESYS_REGION": "mypurecloud.com",
"GENESYS_TIMEZONE": "America/Bogota"
}
}
}
}Variable | Default | Description |
| OAuth client id | |
| OAuth client secret | |
| Region domain: | |
|
| IANA time zone for |
|
| Mask customer phone numbers, emails and names |
|
| Same as |
Safety
Concern | Handling |
The assistant changes something in the org | Every request goes through one check that allows |
Customer data reaches the model | Masked by default: phone numbers keep the last four digits ( |
Credentials leak | They are read from the environment and are not logged or returned in tool results. |
Rate limits | 429 and 5xx responses are retried with |
Library
The server can be embedded, for example to run it over a different transport or to point it at another implementation of the API:
import { createServer, HttpPlatformClient } from 'genesys-cloud-mcp';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const client = new HttpPlatformClient({ clientId, clientSecret, region: 'mypurecloud.com' });
const server = createServer({ client, timeZone: 'America/Bogota' });
await server.connect(new StdioServerTransport());PlatformClient is a single request(method, path, options) method. DemoPlatformClient implements it with the simulated center, which is also what the tests use.
Limits
Directory lookups (queues, users, wrap-up codes, flows) read up to 2,000 entries each and are cached for five minutes.
search_conversationsreturns at most 100 conversations per call and uses the synchronous details query, which Genesys Cloud limits to recent intervals. Large exports belong in an analytics job, not in a chat.Service level is reported as computed by Genesys Cloud for each queue; the 20 second target shown in results is the demo's setting.
Queue observations are per queue. An agent who is a member of several queues is counted in each.
get_agent_timelinereads up to 100 interactions per call and covers at most seven days.get_schedule_statusevaluates schedules itself. It understands one-off schedules and RRULEs withFREQdaily, weekly (BYDAY), monthly (BYMONTHDAY) or yearly,INTERVALandUNTIL; other rule parts are ignored. The next change is found to the minute within eight days.get_adherenceis real time only. Historical adherence in Genesys Cloud is an asynchronous report and is not covered.Schedule searches that Genesys Cloud answers asynchronously (large management units or long periods) are not supported yet; the tool says so instead of guessing.
list_survey_responsesreads the newest 100 conversations with an answered survey and then each survey for its comment, so it is meant for recent samples, not exports.The quality, survey, workforce management and outbound tools follow the Platform API documentation and are tested against the demo org, which implements the same requests. Field names in a real org can differ in details; please open an issue if one does.
get_bot_performancereads up to 5,000 bot turns per bot; for long intervals the intent counts are a sample and the result says it was truncated.get_recent_changesuses the real-time audit query, which covers the last 14 days. Older changes need the asynchronous audit query, which is not supported.get_team_performancegroups by supervisor using the manager set on each user, so it is only as good as that field.The channel, bot, routing, team and audit tools are tested against the demo org only, like the quality and workforce tools above.
endedInFlowinget_flow_performancedoes not separate self-service from callers who hung up; flow outcomes do, if the flows set them.
Design decisions
Development
npm install
npm test # tools against the demo org, the read-only check, masking, and the server over stdio
npm run try -- get_queue_status '{"queues":["Support"]}' # one tool, raw JSON
npm run demo:svg # re-renders docs/demo.svg from npm run try, with the clock pinnedLicense
MIT © Oscar Benavides
Not affiliated with or endorsed by Genesys. Genesys Cloud is a trademark of its owner.
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only phone intelligence for AI voice agents — line type, risk, DNC, signed receipts.
Hosted speech-to-text + speech emotion/tone analysis for agents. No install; trial keys built in.
- RulebaseOAuthco.rulebase
CX ops: read conversations, calls and QA evaluations from Zendesk, Freshdesk, Five9 and more.
Build and manage voice AI agents for real phone lines: assistants, calls, numbers and campaigns.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceA read-only MCP server that exposes Genesys Cloud queue lookup, analytics aggregates, and conversation search tools, enabling natural language queries for contact center metrics.1-
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to look up and update WorkForceAI platform data, including voice agents, campaigns, phone numbers, call logs, and dashboard stats, through natural language.-
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with a Five9 cloud contact center, allowing users to monitor calls, manage campaigns and agents, run reports, and build IVR flows through natural language.MIT
- AlicenseBqualityCmaintenanceProvides AI assistants with read-only access to Chatwoot analytics and operational data, including conversations, agents, inboxes, teams, CSAT, and real-time metrics.301MIT