@cognigy/plugin-engine 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +245 -0
  3. package/dist/api/client.d.ts +21 -0
  4. package/dist/api/client.d.ts.map +1 -0
  5. package/dist/api/client.js +123 -0
  6. package/dist/api/client.js.map +1 -0
  7. package/dist/config.d.ts +19 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +141 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +93 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/instructions.d.ts +2 -0
  16. package/dist/instructions.d.ts.map +1 -0
  17. package/dist/instructions.js +36 -0
  18. package/dist/instructions.js.map +1 -0
  19. package/dist/schemas/tools.d.ts +1846 -0
  20. package/dist/schemas/tools.d.ts.map +1 -0
  21. package/dist/schemas/tools.js +581 -0
  22. package/dist/schemas/tools.js.map +1 -0
  23. package/dist/tools/definitions.d.ts +12 -0
  24. package/dist/tools/definitions.d.ts.map +1 -0
  25. package/dist/tools/definitions.js +1522 -0
  26. package/dist/tools/definitions.js.map +1 -0
  27. package/dist/tools/filters.d.ts +13 -0
  28. package/dist/tools/filters.d.ts.map +1 -0
  29. package/dist/tools/filters.js +107 -0
  30. package/dist/tools/filters.js.map +1 -0
  31. package/dist/tools/handlers.d.ts +71 -0
  32. package/dist/tools/handlers.d.ts.map +1 -0
  33. package/dist/tools/handlers.js +3603 -0
  34. package/dist/tools/handlers.js.map +1 -0
  35. package/dist/tools/nodeRegistry.d.ts +37 -0
  36. package/dist/tools/nodeRegistry.d.ts.map +1 -0
  37. package/dist/tools/nodeRegistry.js +175 -0
  38. package/dist/tools/nodeRegistry.js.map +1 -0
  39. package/dist/tools/packageManagement.d.ts +140 -0
  40. package/dist/tools/packageManagement.d.ts.map +1 -0
  41. package/dist/tools/packageManagement.js +455 -0
  42. package/dist/tools/packageManagement.js.map +1 -0
  43. package/dist/tools/voiceChecklist.d.ts +80 -0
  44. package/dist/tools/voiceChecklist.d.ts.map +1 -0
  45. package/dist/tools/voiceChecklist.js +635 -0
  46. package/dist/tools/voiceChecklist.js.map +1 -0
  47. package/dist/tools/webchatSettings.d.ts +14 -0
  48. package/dist/tools/webchatSettings.d.ts.map +1 -0
  49. package/dist/tools/webchatSettings.js +462 -0
  50. package/dist/tools/webchatSettings.js.map +1 -0
  51. package/dist/utils/logger.d.ts +19 -0
  52. package/dist/utils/logger.d.ts.map +1 -0
  53. package/dist/utils/logger.js +52 -0
  54. package/dist/utils/logger.js.map +1 -0
  55. package/dist/utils/rateLimiter.d.ts +33 -0
  56. package/dist/utils/rateLimiter.d.ts.map +1 -0
  57. package/dist/utils/rateLimiter.js +68 -0
  58. package/dist/utils/rateLimiter.js.map +1 -0
  59. package/package.json +64 -0
package/dist/index.js ADDED
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
5
+ import { loadConfig } from "./config.js";
6
+ import { CognigyApiClient } from "./api/client.js";
7
+ import { ToolHandlers } from "./tools/handlers.js";
8
+ import { tools } from "./tools/definitions.js";
9
+ import { SERVER_INSTRUCTIONS } from "./instructions.js";
10
+ import { logger } from "./utils/logger.js";
11
+ import { RateLimiter } from "./utils/rateLimiter.js";
12
+ async function main() {
13
+ try {
14
+ const config = loadConfig();
15
+ logger.setLevel(config.logLevel);
16
+ logger.info("Starting NiCE Cognigy MCP Connector", {
17
+ name: config.serverName,
18
+ version: config.serverVersion,
19
+ });
20
+ const apiClient = new CognigyApiClient({
21
+ baseUrl: config.apiBaseUrl,
22
+ apiKey: config.apiKey,
23
+ });
24
+ const toolHandlers = new ToolHandlers(apiClient, config.endpointBaseUrl, config.webchatBaseUrl, config.staticFilesBaseUrl);
25
+ const rateLimiter = new RateLimiter(config.rateLimit);
26
+ const server = new Server({ name: config.serverName, version: config.serverVersion }, {
27
+ capabilities: { tools: {} },
28
+ instructions: SERVER_INSTRUCTIONS,
29
+ });
30
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools }));
31
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
32
+ const { name, arguments: args } = request.params;
33
+ logger.info(`Tool call received: ${name}`);
34
+ const rateLimitKey = config.apiKey.substring(0, 10);
35
+ if (!rateLimiter.check(rateLimitKey)) {
36
+ return {
37
+ content: [
38
+ {
39
+ type: "text",
40
+ text: JSON.stringify({ error: "Rate limit exceeded" }),
41
+ },
42
+ ],
43
+ };
44
+ }
45
+ try {
46
+ const result = await toolHandlers.handleToolCall(name, args || {});
47
+ return {
48
+ content: [{ type: "text", text: JSON.stringify(result) }],
49
+ };
50
+ }
51
+ catch (error) {
52
+ logger.error("Tool execution error", {
53
+ tool: name,
54
+ error: error.message,
55
+ });
56
+ return {
57
+ content: [
58
+ {
59
+ type: "text",
60
+ text: JSON.stringify({
61
+ error: error.message,
62
+ status: error.status,
63
+ code: error.code,
64
+ traceId: error.traceId,
65
+ }),
66
+ },
67
+ ],
68
+ isError: true,
69
+ };
70
+ }
71
+ });
72
+ const transport = new StdioServerTransport();
73
+ await server.connect(transport);
74
+ logger.info("NiCE Cognigy MCP Connector started successfully");
75
+ const shutdown = async () => {
76
+ logger.info("Shutting down NiCE Cognigy MCP Connector");
77
+ rateLimiter.destroy();
78
+ await server.close();
79
+ process.exit(0);
80
+ };
81
+ process.on("SIGINT", shutdown);
82
+ process.on("SIGTERM", shutdown);
83
+ }
84
+ catch (error) {
85
+ logger.error("Failed to start MCP Server", {
86
+ error: error.message,
87
+ stack: error.stack,
88
+ });
89
+ process.exit(1);
90
+ }
91
+ }
92
+ main();
93
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const SERVER_INSTRUCTIONS = "Cognigy.AI MCP Server \u2014 builds and iteratively improves LLM-powered AI Agents.\n\nIn clients that support plugin skills (e.g. Claude Code), detailed step-by-step workflow guidance auto-loads when your intent matches. The overview and hard rules below always apply.\n\nWORKFLOWS:\n- Build a new AI Agent: list projects \u2192 ENSURE an LLM exists (reuse via packages before setup_llm) \u2192 create_ai_agent \u2192 talk_to_agent \u2192 update_ai_agent. NEVER call talk_to_agent until a working LLM is confirmed in the project.\n- Add knowledge / RAG: embedding model vs project-level Knowledge Search model, set_knowledge_ai BEFORE creating the store, attach knowledge as a tool (not the persona) by default.\n- Reuse an LLM across projects: export each largeLanguageModel WITH its connection resource \u2192 upload_and_inspect \u2192 import \u2192 verify. An LLM without its connection is useless. Prefer this over setup_llm.\n- Add custom logic: create a tool first (create_tool), then add nodes INSIDE the tool branch with manage_flow_nodes (parentNodeId = toolNodeId, mode = \"appendChild\"). NEVER add nodes before the AI Agent Job node.\n- Deploy to Webchat: manage_webchat to create/update the endpoint. ALWAYS show the returned demoWebchatUrl as a clickable link.\n- Voice setup & go-live: create the Voice Gateway endpoint, then audit_voice_agent (dry-run, then apply).\n\nTOOL TYPE SELECTION (create_tool):\n- Default to toolType \"tool\" for general requests (e.g., \"unlock account\", \"check balance\", \"validate user\"). This is the most common and versatile type.\n- Use toolType \"http\" only when the user specifies a concrete HTTP/REST API endpoint to call.\n- Use toolType \"mcp\" ONLY when the user explicitly asks to connect to an external MCP (Model Context Protocol) server and provides a server URL. NEVER use \"mcp\" for general-purpose tool requests \u2014 it is a specialized integration type, not a default.\n- Use toolType \"knowledge\" when the user wants to search a Knowledge Store.\n- Use toolType \"send_email\" when the user wants to send emails.\n\nRULES:\n- create_ai_agent auto-provisions flow + AI Agent Job Node + REST endpoint. Do NOT create these separately.\n- An LLM resource MUST exist AND be successfully connected in the project before calling talk_to_agent. Do NOT attempt to test an agent without a confirmed working LLM \u2014 it will fail silently or return empty responses. If LLM setup failed or was not completed, skip testing and inform the user.\n- If another project already has a reusable LLM with connectionId, DO NOT call setup_llm first. Transfer the LLM + connection via manage_packages and only fall back to setup_llm if reuse is unavailable or failed.\n- NEVER hallucinate or guess API keys, connection URLs, or credentials. If an LLM needs to be created and no API key was provided by the user, ASK for it. Do NOT invent values.\n- Cognigy Connections are PROJECT-SCOPED. A connectionId from project A cannot be used in project B \u2014 it will fail with \"Connection does not exist\". The ONLY way to share a connection across projects is via package export/import. Do NOT attempt to pass a cross-project connectionId to setup_llm.\n- NEVER use dangerouslySkipConnectionTest to bypass a missing or cross-project connection. Fix the connection by importing the package or by creating a real same-project connection.\n- talk_to_agent hits a DIFFERENT base URL (endpoint-*.cognigy.ai) \u2014 not the API base URL.\n- delete_resource is the ONLY way to delete anything.\n- create_tool handles tool creation \u2014 it auto-provisions flow nodes internally. Do NOT create flow nodes for tools manually.\n- Never create two tools with the same `toolId`. Duplicate tool IDs can lead to failed tool execution or empty agent responses, and this is often a flow issue rather than an LLM or connection issue.\n- manage_flow_nodes is ONLY for building logic INSIDE tool branches. ALWAYS create a tool first (create_tool { toolType: \"tool\" }) then add nodes inside it using manage_flow_nodes with parentNodeId = toolNodeId and mode = \"appendChild\".\n- NEVER create standalone nodes before the AI Agent Job node. This is an anti-pattern that causes conversation loops and broken flows. ALL behavior \u2014 including authentication, data collection, greetings, and conditional logic \u2014 must be implemented as agent tools that the LLM decides when to invoke.\n- manage_flow_nodes only supports a curated set of node types: say, question, ifThenElse, lookup, setSessionContext, code, goTo, sleep, httpRequest.\n- manage_webchat creates a new endpoint when endpointId is omitted, and updates an existing endpoint only when endpointId is explicitly provided. To update an existing webchat, first use list_resources { resourceType: \"endpoint\", projectId } to find the endpointId.\n- manage_webchat ALWAYS returns demoWebchatUrl \u2014 present it to the user every time as a clickable link. Do NOT tell the user to find the URL in the Cognigy UI.";
2
+ //# sourceMappingURL=instructions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,k5JAkCgI,CAAC"}
@@ -0,0 +1,36 @@
1
+ export const SERVER_INSTRUCTIONS = `Cognigy.AI MCP Server — builds and iteratively improves LLM-powered AI Agents.
2
+
3
+ In clients that support plugin skills (e.g. Claude Code), detailed step-by-step workflow guidance auto-loads when your intent matches. The overview and hard rules below always apply.
4
+
5
+ WORKFLOWS:
6
+ - Build a new AI Agent: list projects → ENSURE an LLM exists (reuse via packages before setup_llm) → create_ai_agent → talk_to_agent → update_ai_agent. NEVER call talk_to_agent until a working LLM is confirmed in the project.
7
+ - Add knowledge / RAG: embedding model vs project-level Knowledge Search model, set_knowledge_ai BEFORE creating the store, attach knowledge as a tool (not the persona) by default.
8
+ - Reuse an LLM across projects: export each largeLanguageModel WITH its connection resource → upload_and_inspect → import → verify. An LLM without its connection is useless. Prefer this over setup_llm.
9
+ - Add custom logic: create a tool first (create_tool), then add nodes INSIDE the tool branch with manage_flow_nodes (parentNodeId = toolNodeId, mode = "appendChild"). NEVER add nodes before the AI Agent Job node.
10
+ - Deploy to Webchat: manage_webchat to create/update the endpoint. ALWAYS show the returned demoWebchatUrl as a clickable link.
11
+ - Voice setup & go-live: create the Voice Gateway endpoint, then audit_voice_agent (dry-run, then apply).
12
+
13
+ TOOL TYPE SELECTION (create_tool):
14
+ - Default to toolType "tool" for general requests (e.g., "unlock account", "check balance", "validate user"). This is the most common and versatile type.
15
+ - Use toolType "http" only when the user specifies a concrete HTTP/REST API endpoint to call.
16
+ - Use toolType "mcp" ONLY when the user explicitly asks to connect to an external MCP (Model Context Protocol) server and provides a server URL. NEVER use "mcp" for general-purpose tool requests — it is a specialized integration type, not a default.
17
+ - Use toolType "knowledge" when the user wants to search a Knowledge Store.
18
+ - Use toolType "send_email" when the user wants to send emails.
19
+
20
+ RULES:
21
+ - create_ai_agent auto-provisions flow + AI Agent Job Node + REST endpoint. Do NOT create these separately.
22
+ - An LLM resource MUST exist AND be successfully connected in the project before calling talk_to_agent. Do NOT attempt to test an agent without a confirmed working LLM — it will fail silently or return empty responses. If LLM setup failed or was not completed, skip testing and inform the user.
23
+ - If another project already has a reusable LLM with connectionId, DO NOT call setup_llm first. Transfer the LLM + connection via manage_packages and only fall back to setup_llm if reuse is unavailable or failed.
24
+ - NEVER hallucinate or guess API keys, connection URLs, or credentials. If an LLM needs to be created and no API key was provided by the user, ASK for it. Do NOT invent values.
25
+ - Cognigy Connections are PROJECT-SCOPED. A connectionId from project A cannot be used in project B — it will fail with "Connection does not exist". The ONLY way to share a connection across projects is via package export/import. Do NOT attempt to pass a cross-project connectionId to setup_llm.
26
+ - NEVER use dangerouslySkipConnectionTest to bypass a missing or cross-project connection. Fix the connection by importing the package or by creating a real same-project connection.
27
+ - talk_to_agent hits a DIFFERENT base URL (endpoint-*.cognigy.ai) — not the API base URL.
28
+ - delete_resource is the ONLY way to delete anything.
29
+ - create_tool handles tool creation — it auto-provisions flow nodes internally. Do NOT create flow nodes for tools manually.
30
+ - Never create two tools with the same \`toolId\`. Duplicate tool IDs can lead to failed tool execution or empty agent responses, and this is often a flow issue rather than an LLM or connection issue.
31
+ - manage_flow_nodes is ONLY for building logic INSIDE tool branches. ALWAYS create a tool first (create_tool { toolType: "tool" }) then add nodes inside it using manage_flow_nodes with parentNodeId = toolNodeId and mode = "appendChild".
32
+ - NEVER create standalone nodes before the AI Agent Job node. This is an anti-pattern that causes conversation loops and broken flows. ALL behavior — including authentication, data collection, greetings, and conditional logic — must be implemented as agent tools that the LLM decides when to invoke.
33
+ - manage_flow_nodes only supports a curated set of node types: say, question, ifThenElse, lookup, setSessionContext, code, goTo, sleep, httpRequest.
34
+ - manage_webchat creates a new endpoint when endpointId is omitted, and updates an existing endpoint only when endpointId is explicitly provided. To update an existing webchat, first use list_resources { resourceType: "endpoint", projectId } to find the endpointId.
35
+ - manage_webchat ALWAYS returns demoWebchatUrl — present it to the user every time as a clickable link. Do NOT tell the user to find the URL in the Cognigy UI.`;
36
+ //# sourceMappingURL=instructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gKAkC6H,CAAC"}