diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7a7ce7b..5fcc5e2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -85,16 +85,16 @@ jobs: draft: false prerelease: false - - name: Build .dxt file + - name: Build .mcpb file if: steps.publish.outputs.type != 'none' - run: npm run package:dxt + run: npm run package:mcpb - - name: Upload .dxt to GitHub release + - name: Upload .mcpb to GitHub release if: steps.publish.outputs.type != 'none' uses: softprops/action-gh-release@v1 with: tag_name: v${{ steps.publish.outputs.version }} files: | - genesys-cloud-mcp-server.dxt + genesys-cloud-mcp-server.mcpb env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 16d5862..5abfa96 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -40,7 +40,7 @@ jobs: - run: npm run build - run: npm run test - test-building-dxt: + test-building-mcpb: runs-on: ubuntu-latest name: Test Desktop Extension steps: @@ -49,8 +49,8 @@ jobs: with: node-version-file: ".nvmrc" - run: npm install - - run: npm run validate:dxt - - run: npm run package:dxt + - run: npm run validate:mcpb + - run: npm run package:mcpb - run: npm run test lint: diff --git a/.gitignore b/.gitignore index f312d16..f12d63b 100644 --- a/.gitignore +++ b/.gitignore @@ -135,5 +135,5 @@ dist .yarn/build-state.yml .yarn/install-state.gz .pnp.* -*.dxt -dxt-contents/ +*.mcpb +mcpb-contents/ diff --git a/README.md b/README.md index 4ec3f80..a674833 100644 --- a/README.md +++ b/README.md @@ -41,14 +41,14 @@ Add this to your `claude_desktop_config.json`: } ``` -### Desktop Extension +### MCP Bundle -This MCP Server provides a Desktop Extension (.dxt file) along with each [release](https://github.com/MakingChatbots/genesys-cloud-mcp-server/releases), +This MCP Server provides an [MCP Bundle](https://github.com/anthropics/mcpb) (.mcpb file) along with each [release](https://github.com/MakingChatbots/genesys-cloud-mcp-server/releases), which is a single-click installable package for Claude Desktop. To use it: -1. Download the `.dxt` file from the [latest release](https://github.com/MakingChatbots/genesys-cloud-mcp-server/releases) +1. Download the `.mcpb` file from the [latest release](https://github.com/MakingChatbots/genesys-cloud-mcp-server/releases) 2. In Claude Desktop navigate to Settings > Extensions. -3. Browse to, or drag in the .dxt file downloaded +3. Browse to, or drag in the .mcpb file downloaded 4. Click "Install" 5. Configure the Region and OAuth Client for the extension diff --git a/manifest.json b/manifest.json index 8967d9e..8760432 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { - "dxt_version": "0.1", + "manifest_version": "0.2", "name": "Genesys Cloud MCP Server", - "version": "0.0.15", + "version": "0.0.16", "description": "Interact with Genesys Cloud's Platform API", "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.", "author": { @@ -95,6 +95,9 @@ "conversation-analysis" ], "license": "MIT", + "privacy_policies": [ + "https://www.genesys.com/en-gb/company/legal/privacy-policy" + ], "repository": { "type": "git", "url": "git+https://github.com/MakingChatbots/genesys-cloud-mcp-server.git" diff --git a/package-lock.json b/package-lock.json index db2bfcf..f562808 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,25 +1,24 @@ { "name": "@makingchatbots/genesys-cloud-mcp-server", - "version": "0.0.15", + "version": "0.0.16", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@makingchatbots/genesys-cloud-mcp-server", - "version": "0.0.15", + "version": "0.0.16", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.16.0", + "@modelcontextprotocol/sdk": "^1.18.2", "date-fns": "^4.1.0", - "dotenv": "^17.2.1", - "purecloud-platform-client-v2": "^227.0.0", + "purecloud-platform-client-v2": "^231.0.0", "zod": "^3.23.8" }, "bin": { "genesys-cloud-mcp-server": "dist/cli.js" }, "devDependencies": { - "@anthropic-ai/dxt": "^0.2.5", + "@anthropic-ai/mcpb": "^1.1.1", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.31.0", "@google/genai": "^1.12.0", @@ -27,12 +26,13 @@ "@types/node": "^22.16.4", "@typescript-eslint/eslint-plugin": "^8.33.1", "@typescript-eslint/parser": "^8.37.0", + "dotenv": "^17.2.2", "eslint": "^9.31.0", "eslint-config-prettier": "^10.1.8", "eslint-import-resolver-typescript": "^4.4.4", "lint-staged": "^16.1.2", "prettier": "^3.6.2", - "tsx": "^4.20.3", + "tsx": "^4.20.6", "typescript": "^5.8.3", "typescript-eslint": "^8.37.0", "vitest": "^3.2.4" @@ -41,10 +41,10 @@ "node": ">=18.20.0" } }, - "node_modules/@anthropic-ai/dxt": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@anthropic-ai/dxt/-/dxt-0.2.5.tgz", - "integrity": "sha512-vFibMY6+8dlT0cqZIjN9TES7x/V+sQ3SUGKCgqxb1TkpXELW2IhYkNB975FKV4mrCOlc15M6QQoiKwkrJIHTRA==", + "node_modules/@anthropic-ai/mcpb": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@anthropic-ai/mcpb/-/mcpb-1.1.1.tgz", + "integrity": "sha512-a8R5pQcPPwUfuswR2of4tHDd/NJHv1L6mKJ97hfqE/gZq/xaqL12mDUtQVcyl3g1BV8csi9JOpyf15jLvfIXvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -58,10 +58,10 @@ "zod": "^3.25.67" }, "bin": { - "dxt": "dist/cli/cli.js" + "mcpb": "dist/cli/cli.js" } }, - "node_modules/@anthropic-ai/dxt/node_modules/commander": { + "node_modules/@anthropic-ai/mcpb/node_modules/commander": { "version": "13.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", @@ -71,7 +71,7 @@ "node": ">=18" } }, - "node_modules/@anthropic-ai/dxt/node_modules/ignore": { + "node_modules/@anthropic-ai/mcpb/node_modules/ignore": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", @@ -613,9 +613,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -673,13 +673,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz", - "integrity": "sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.1", + "@eslint/core": "^0.15.2", "levn": "^0.4.1" }, "engines": { @@ -1137,9 +1137,9 @@ "license": "MIT" }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.16.0.tgz", - "integrity": "sha512-8ofX7gkZcLj9H9rSd50mCgm3SSF8C7XoclxJuLoV0Cz3rEQ1tv9MZRYYvJtm9n1BiEQQMzSmE/w2AEkNacLYfg==", + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.18.2.tgz", + "integrity": "sha512-beedclIvFcCnPrYgHsylqiYJVJ/CI47Vyc4tY8no1/Li/O8U4BTlJfy6ZwxkYwx+Mx10nrgwSVrA7VBbhh4slg==", "license": "MIT", "dependencies": { "ajv": "^6.12.6", @@ -2541,12 +2541,13 @@ } }, "node_modules/axios": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", - "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, @@ -3169,9 +3170,10 @@ } }, "node_modules/dotenv": { - "version": "17.2.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.1.tgz", - "integrity": "sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==", + "version": "17.2.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.2.tgz", + "integrity": "sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -6328,15 +6330,15 @@ } }, "node_modules/purecloud-platform-client-v2": { - "version": "227.0.0", - "resolved": "https://registry.npmjs.org/purecloud-platform-client-v2/-/purecloud-platform-client-v2-227.0.0.tgz", - "integrity": "sha512-qxzKQTZbK4jDGA3uJJEuDo0Kh5QQfu8jpSk17cmUNrmiZJxkae8OUeYU9VV1qofV5f/EhBTVRerFzwSqUcliPA==", + "version": "231.0.0", + "resolved": "https://registry.npmjs.org/purecloud-platform-client-v2/-/purecloud-platform-client-v2-231.0.0.tgz", + "integrity": "sha512-1KSja1kZH53rzlOBsIC0CkSY0knF4PbDr+YslL447azfThkcQB+pP3H6zchaRjZM70QsjSiFozl+vmpNge/m9w==", "license": "MIT", "dependencies": { - "axios": "^1.7.4", + "axios": "^1.11.0", "configparser": "^0.3.9", - "qs": "^6.10.3", - "winston": "^3.6.0" + "qs": "^6.14.0", + "winston": "^3.17.0" } }, "node_modules/qs": { @@ -7233,14 +7235,14 @@ "dev": true }, "node_modules/tinyglobby": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">=12.0.0" @@ -7250,11 +7252,14 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", - "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -7265,9 +7270,9 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -7394,9 +7399,9 @@ "optional": true }, "node_modules/tsx": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.3.tgz", - "integrity": "sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==", + "version": "4.20.6", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", + "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", "dev": true, "license": "MIT", "dependencies": { @@ -7697,18 +7702,18 @@ } }, "node_modules/vite": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.5.tgz", - "integrity": "sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.7.tgz", + "integrity": "sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", - "fdir": "^6.4.6", - "picomatch": "^4.0.2", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", "postcss": "^8.5.6", - "rollup": "^4.40.0", - "tinyglobby": "^0.2.14" + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" }, "bin": { "vite": "bin/vite.js" @@ -7795,11 +7800,14 @@ } }, "node_modules/vite/node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, diff --git a/package.json b/package.json index 78de7b2..79f2082 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@makingchatbots/genesys-cloud-mcp-server", - "version": "0.0.15", + "version": "0.0.16", "description": "A Model Context Protocol (MCP) server exposing Genesys Cloud tools for LLMs, including sentiment analysis, conversation search, topic detection and more.", "bin": "./dist/cli.js", "type": "module", @@ -14,7 +14,8 @@ }, "homepage": "https://makingchatbots.com", "author": { - "name": "Lucas Woodward" + "name": "Lucas Woodward", + "url": "https://makingchatbots.com" }, "scripts": { "dev": "tsx watch src/index.ts", @@ -22,12 +23,12 @@ "start:inspector": "npm run build && npx @modelcontextprotocol/inspector node dist/index.js", "clean": "rm -rf dist/*", "build:esm": "tsc -p tsconfig.build.json", - "build:esm:dxt": "tsc -p tsconfig.build-dxt.json", + "build:esm:mcpb": "tsc -p tsconfig.build-mcpb.json", "build": "npm run clean && npm run build:esm && chmod +x dist/cli.js", - "validate:dxt": "dxt validate manifest.json", - "clean:dxt": "npm run clean && rm -rf dxt-contents/*", - "deps:dxt": "cp manifest.json package.json package-lock.json dxt-contents/ && cd dxt-contents && npm ci --omit=dev && rm package-lock.json", - "package:dxt": "npm run clean:dxt && npm run build:esm:dxt && npm run deps:dxt && dxt pack dxt-contents genesys-cloud-mcp-server.dxt", + "validate:mcpb": "mcpb validate manifest.json", + "clean:mcpb": "npm run clean && rm -rf mcpb-contents/*", + "deps:mcpb": "cp manifest.json package.json package-lock.json mcpb-contents/ && cd mcpb-contents && npm ci --omit=dev && rm package-lock.json", + "package:mcpb": "npm run clean:mcpb && npm run build:esm:mcpb && npm run deps:mcpb && mcpb pack mcpb-contents genesys-cloud-mcp-server.mcpb", "lint": "eslint . --ext .ts", "format": "prettier --write .", "prettier:check": "prettier --check src/**/*.ts *.md tests/**/*.ts --no-error-on-unmatched-pattern", @@ -42,14 +43,14 @@ "test:pack": "npm run build && npm pack --pack-destination ./dist" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.16.0", + "@modelcontextprotocol/sdk": "^1.18.2", "date-fns": "^4.1.0", - "purecloud-platform-client-v2": "^227.0.0", + "purecloud-platform-client-v2": "^231.0.0", "zod": "^3.23.8" }, "devDependencies": { - "dotenv": "^17.2.1", - "@anthropic-ai/dxt": "^0.2.5", + "dotenv": "^17.2.2", + "@anthropic-ai/mcpb": "^1.1.1", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.31.0", "@google/genai": "^1.12.0", @@ -62,7 +63,7 @@ "eslint-import-resolver-typescript": "^4.4.4", "lint-staged": "^16.1.2", "prettier": "^3.6.2", - "tsx": "^4.20.3", + "tsx": "^4.20.6", "typescript": "^5.8.3", "typescript-eslint": "^8.37.0", "vitest": "^3.2.4" diff --git a/src/index.ts b/src/index.ts index 26aad6d..ce533fb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,7 +19,7 @@ const withAuth = OAuthClientCredentialsWrapper( const server: McpServer = new McpServer({ name: "Genesys Cloud", - version: "0.0.15", // Same version as version in package.json + version: "0.0.16", // Same version as version in package.json }); const routingApi = new platformClient.RoutingApi(); diff --git a/src/tools/conversationSentiment/conversationSentiment.test.ts b/src/tools/conversationSentiment/conversationSentiment.test.ts index 637bde6..80fe35a 100644 --- a/src/tools/conversationSentiment/conversationSentiment.test.ts +++ b/src/tools/conversationSentiment/conversationSentiment.test.ts @@ -48,6 +48,7 @@ describe("Conversation Sentiment Tool", () => { expect(tools.tools[0]).toStrictEqual({ name: "conversation_sentiment", title: undefined, + _meta: undefined, annotations: { title: "Conversation Sentiment" }, 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.", diff --git a/src/tools/conversationTopics/conversationTopics.test.ts b/src/tools/conversationTopics/conversationTopics.test.ts index a71032e..e1638c6 100644 --- a/src/tools/conversationTopics/conversationTopics.test.ts +++ b/src/tools/conversationTopics/conversationTopics.test.ts @@ -52,6 +52,7 @@ describe("Conversation Topics Tool", () => { expect(tools.tools[0]).toStrictEqual({ name: "conversation_topics", title: undefined, + _meta: undefined, annotations: { title: "Conversation Topics" }, 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.", diff --git a/src/tools/conversationTranscription/conversationTranscription.test.ts b/src/tools/conversationTranscription/conversationTranscription.test.ts index 725abe8..19c0966 100644 --- a/src/tools/conversationTranscription/conversationTranscription.test.ts +++ b/src/tools/conversationTranscription/conversationTranscription.test.ts @@ -53,6 +53,7 @@ describe("Conversation Transcription Tool", () => { expect(tools.tools[0]).toStrictEqual({ name: "conversation_transcript", title: undefined, + _meta: undefined, annotations: { title: "Conversation Transcript" }, 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)", diff --git a/src/tools/queryQueueVolumes/queryQueueVolumes.test.ts b/src/tools/queryQueueVolumes/queryQueueVolumes.test.ts index 713d58b..b7b47c2 100644 --- a/src/tools/queryQueueVolumes/queryQueueVolumes.test.ts +++ b/src/tools/queryQueueVolumes/queryQueueVolumes.test.ts @@ -50,6 +50,7 @@ describe("Query Queue Volumes Tool", () => { expect(tools.tools[0]).toStrictEqual({ name: "query_queue_volumes", title: undefined, + _meta: undefined, annotations: { title: "Query Queue Volumes" }, description: "Returns a breakdown of how many conversations occurred in each specified queue between two dates. Useful for comparing workload across queues. MAX 300 queue IDs", diff --git a/src/tools/sampleConversationsByQueue/sampleConversationsByQueue.test.ts b/src/tools/sampleConversationsByQueue/sampleConversationsByQueue.test.ts index d92dd03..2419cfe 100644 --- a/src/tools/sampleConversationsByQueue/sampleConversationsByQueue.test.ts +++ b/src/tools/sampleConversationsByQueue/sampleConversationsByQueue.test.ts @@ -50,6 +50,7 @@ describe("Query Queue Volumes Tool", () => { expect(tools.tools[0]).toStrictEqual({ name: "sample_conversations_by_queue", title: undefined, + _meta: undefined, annotations: { title: "Sample Conversations by Queue" }, description: "Retrieves conversation analytics for a specific queue between two dates, returning a representative sample of conversation IDs. Useful for reporting, investigation, or summarisation.", diff --git a/src/tools/searchQueues.test.ts b/src/tools/searchQueues.test.ts index 825bce5..5807dc8 100644 --- a/src/tools/searchQueues.test.ts +++ b/src/tools/searchQueues.test.ts @@ -45,6 +45,7 @@ describe("Search Queues Tool", () => { expect(tools.tools[0]).toStrictEqual({ name: "search_queues", title: undefined, + _meta: undefined, annotations: { title: "Search Queues" }, 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.", diff --git a/src/tools/searchVoiceConversations.test.ts b/src/tools/searchVoiceConversations.test.ts index 3ec4650..d74e880 100644 --- a/src/tools/searchVoiceConversations.test.ts +++ b/src/tools/searchVoiceConversations.test.ts @@ -47,6 +47,7 @@ describe("Search Voice Conversations Tool", () => { expect(tools.tools[0]).toStrictEqual({ name: "search_voice_conversations", title: undefined, + _meta: undefined, annotations: { title: "Search Voice Conversations" }, description: "Searches for voice conversations within a specified time window, optionally filtering by phone number. Returns a paginated list of conversation IDs and call duration for use in further analysis or tool calls.", diff --git a/src/tools/voiceCallQuality/voiceCallQuality.test.ts b/src/tools/voiceCallQuality/voiceCallQuality.test.ts index 0fe877b..d9ec280 100644 --- a/src/tools/voiceCallQuality/voiceCallQuality.test.ts +++ b/src/tools/voiceCallQuality/voiceCallQuality.test.ts @@ -45,6 +45,7 @@ describe("Voice Call Quality Tool", () => { expect(tools.tools[0]).toStrictEqual({ name: "voice_call_quality", title: undefined, + _meta: undefined, annotations: { title: "Voice Call Quality" }, 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 as structured JSON. MOS is a measure of perceived audio quality based on factors such as jitter, latency, packet loss, and codec. Use the following legend to interpret MOS values:\n\n" + diff --git a/tsconfig.build-dxt.json b/tsconfig.build-mcpb.json similarity index 72% rename from tsconfig.build-dxt.json rename to tsconfig.build-mcpb.json index ab42327..e93ade6 100644 --- a/tsconfig.build-dxt.json +++ b/tsconfig.build-mcpb.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "outDir": "dxt-contents/dist" + "outDir": "mcpb-contents/dist" }, "exclude": ["**/*.test.ts"] }