Skip to content

Commit 24b5cb4

Browse files
authored
Add DX manifest (#29)
1 parent af0763b commit 24b5cb4

File tree

10 files changed

+789
-44
lines changed

10 files changed

+789
-44
lines changed

.github/workflows/release.yml

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
name: Release on npm
2+
23
on:
34
push:
45
branches:
@@ -14,20 +15,17 @@ permissions:
1415
jobs:
1516
build_and_publish:
1617
runs-on: ubuntu-latest
17-
permissions:
18-
contents: write
19-
pull-requests: read
20-
id-token: write
18+
2119
steps:
2220
- uses: actions/checkout@v4
21+
2322
- name: Set up Node
2423
uses: actions/setup-node@v4
2524
with:
2625
node-version-file: ".nvmrc"
2726

2827
- name: Install dependencies
29-
run: |
30-
npm install
28+
run: npm install
3129

3230
- name: Build
3331
run: |
@@ -58,7 +56,6 @@ jobs:
5856
if: steps.publish.outputs.type != 'none'
5957
run: |
6058
echo '{"categories": [], "template": "## Commits:\n\n${{ '${{UNCATEGORIZED}}' }}", "pr_template": ${{ '"- ${{MERGE_SHA}} ${{TITLE}}"' }} }' > changelog_config.json
61-
cat changelog_config.json
6259
echo "last_tag=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
6360
echo "curr_commit=$(git rev-parse HEAD)" >> $GITHUB_ENV
6461
@@ -84,6 +81,20 @@ jobs:
8481
tag_name: v${{ steps.publish.outputs.version }}
8582
release_name: v${{ steps.publish.outputs.version }}
8683
commitish: ${{ github.ref }}
87-
body: ${{steps.github_release.outputs.changelog}}
84+
body: ${{ steps.github_release.outputs.changelog }}
8885
draft: false
8986
prerelease: false
87+
88+
- name: Build .dxt file
89+
if: steps.publish.outputs.type != 'none'
90+
run: npm run package:dxt
91+
92+
- name: Upload .dxt to GitHub release
93+
if: steps.publish.outputs.type != 'none'
94+
uses: softprops/action-gh-release@v1
95+
with:
96+
tag_name: v${{ steps.publish.outputs.version }}
97+
files: |
98+
genesys-cloud-mcp-server.dxt
99+
env:
100+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/test.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ jobs:
2727
GENESYSCLOUD_REGION: dummy
2828
GENESYSCLOUD_OAUTHCLIENT_ID: dummy
2929
GENESYSCLOUD_OAUTHCLIENT_SECRET: dummy
30+
3031
test-node:
3132
runs-on: ubuntu-latest
3233
name: Test
@@ -39,6 +40,19 @@ jobs:
3940
- run: npm run build
4041
- run: npm run test
4142

43+
test-building-dxt:
44+
runs-on: ubuntu-latest
45+
name: Test Desktop Extension
46+
steps:
47+
- uses: actions/checkout@v4
48+
- uses: actions/setup-node@v4
49+
with:
50+
node-version-file: ".nvmrc"
51+
- run: npm install
52+
- run: npm run validate:dxt
53+
- run: npm run package:dxt
54+
- run: npm run test
55+
4256
lint:
4357
runs-on: ubuntu-latest
4458
name: Lint

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,4 +134,6 @@ dist
134134
.yarn/unplugged
135135
.yarn/build-state.yml
136136
.yarn/install-state.gz
137-
.pnp.*
137+
.pnp.*
138+
*.dxt
139+
dxt-contents/

LICENSE

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
ISC License
1+
Copyright 2025 Lucas Woodward
22

3-
Copyright 2025-present, Lucas Woodward
3+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
44

5-
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
5+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
66

7-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
7+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

docs/tools.md

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,7 @@
44

55
**Tool name:** `search_queues`
66

7-
Searches for routing queues based on their name, allowing for wildcard searches. Returns a paginated
8-
list of matching queues, including their Name, ID, Description (if available), and Member Count
9-
(if available). Also provides pagination details like current page, page size, total results found,
10-
and total pages available. Useful for finding specific queue IDs, checking queue configurations,
11-
or listing available queues.
12-
7+
Searches for routing queues based on their name, allowing for wildcard searches. Returns a paginated list of matching queues, including their Name, ID, Description (if available), and Member Count (if available). Also provides pagination details like current page, page size, total results found, and total pages available. Useful for finding specific queue IDs, checking queue configurations, or listing available queues.
138
[Source file](/src/tools/searchQueues.ts).
149

1510
### Inputs
@@ -200,7 +195,7 @@ Platform API endpoints used:
200195

201196
**Tool name:** `conversation_transcript`
202197

203-
Retrieves a structured transcript of the conversation, including speaker labels, utterance timestamps, and sentiment annotations where available. The transcript is formatted as a time-aligned list of utterances attributed to each participant (e.g., customer or agent)
198+
Retrieves a structured transcript of the conversation, including speaker labels, utterance timestamps, and sentiment annotations where available. The transcript is formatted as a time-aligned list of utterances attributed to each participant (e.g., customer or agent).
204199

205200
[Source file](/src/tools/conversationTranscription/conversationTranscription.ts).
206201

manifest.json

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
{
2+
"dxt_version": "0.1",
3+
"name": "Genesys Cloud MCP Server",
4+
"version": "0.0.15",
5+
"description": "Interact with Genesys Cloud's Platform API",
6+
"long_description": "This extension allows Claude to connect to Genesys Cloud's Platform API via a local MCP server. It provides tools for querying queue volumes, retrieving conversation samples, analyzing sentiment and voice quality, accessing transcripts, and more.\n\nThis project is not affiliated with Genesys.",
7+
"author": {
8+
"name": "Lucas Woodward",
9+
"url": "https://github.com/SketchingDev"
10+
},
11+
"documentation": "https://github.com/MakingChatbots/genesys-cloud-mcp-server#readme",
12+
"support": "https://github.com/MakingChatbots/genesys-cloud-mcp-server/issues",
13+
"server": {
14+
"type": "node",
15+
"entry_point": "dist/index.js",
16+
"mcp_config": {
17+
"command": "node",
18+
"args": [
19+
"${__dirname}/dist/index.js"
20+
],
21+
"env": {
22+
"GENESYSCLOUD_REGION": "${user_config.genesys_cloud_region}",
23+
"GENESYSCLOUD_OAUTHCLIENT_ID": "${user_config.genesys_cloud_oauth_client_id}",
24+
"GENESYSCLOUD_OAUTHCLIENT_SECRET": "${user_config.genesys_cloud_oauth_client_secret}"
25+
}
26+
}
27+
},
28+
"tools": [
29+
{
30+
"name": "search_queues",
31+
"description": "Searches for routing queues based on their name, allowing for wildcard searches. Returns a paginated list of matching queues, including their Name, ID, Description (if available), and Member Count (if available). Also provides pagination details like current page, page size, total results found, and total pages available. Useful for finding specific queue IDs, checking queue configurations, or listing available queues."
32+
},
33+
{
34+
"name": "query_queue_volumes",
35+
"description": "Returns a breakdown of how many conversations occurred in each specified queue between two dates. Useful for comparing workload across queues."
36+
},
37+
{
38+
"name": "sample_conversations_by_queue",
39+
"description": "Retrieves conversation analytics for a specific queue between two dates, returning a representative sample of conversation IDs. Useful for reporting, investigation, or summarisation."
40+
},
41+
{
42+
"name": "voice_call_quality",
43+
"description": "Retrieves voice call quality metrics for one or more conversations by ID. This tool specifically focuses on voice interactions and returns the minimum Mean Opinion Score (MOS) observed in each conversation, helping identify degraded or poor-quality voice calls."
44+
},
45+
{
46+
"name": "conversation_sentiment",
47+
"description": "Retrieves sentiment analysis scores for one or more conversations. Sentiment is evaluated based on customer phrases, categorized as positive, neutral, or negative. The result includes both a numeric sentiment score (-100 to 100) and an interpreted sentiment label."
48+
},
49+
{
50+
"name": "conversation_topics",
51+
"description": "Retrieves Speech and Text Analytics topics detected for a specific conversation. Topics represent business-level intents (e.g. cancellation, billing enquiry) inferred from recognised phrases in the customer-agent interaction."
52+
},
53+
{
54+
"name": "search_voice_conversations",
55+
"description": "Searches for voice conversations within a specified time window, optionally filtering by phone number. Returns a paginated list of conversation metadata for use in further analysis or tool calls."
56+
},
57+
{
58+
"name": "conversation_transcript",
59+
"description": "Retrieves a structured transcript of the conversation, including speaker labels, utterance timestamps, and sentiment annotations where available. The transcript is formatted as a time-aligned list of utterances attributed to each participant (e.g., customer or agent)."
60+
}
61+
],
62+
"user_config": {
63+
"genesys_cloud_region": {
64+
"type": "string",
65+
"title": "Genesys Cloud Region",
66+
"description": "Region of your Genesys Cloud Organization",
67+
"required": true,
68+
"sensitive": false
69+
},
70+
"genesys_cloud_oauth_client_id": {
71+
"type": "string",
72+
"title": "Genesys Cloud OAuth Client ID",
73+
"description": "ID for the OAuth Client in your Genesys Cloud Organization",
74+
"required": true,
75+
"sensitive": true
76+
},
77+
"genesys_cloud_oauth_client_secret": {
78+
"type": "string",
79+
"title": "Genesys Cloud OAuth Client Secret",
80+
"description": "Secret for the OAuth Client in your Genesys Cloud Organization",
81+
"required": true,
82+
"sensitive": true
83+
}
84+
},
85+
"compatibility": {
86+
"runtimes": {
87+
"node": ">=18.0.0"
88+
}
89+
},
90+
"keywords": [
91+
"contact-center",
92+
"genesys-cloud",
93+
"speech-and-text-analytics",
94+
"sentiment-analysis",
95+
"conversation-analysis"
96+
],
97+
"license": "MIT",
98+
"repository": {
99+
"type": "git",
100+
"url": "git+https://github.com/MakingChatbots/genesys-cloud-mcp-server.git"
101+
}
102+
}

0 commit comments

Comments
 (0)