mcp-creatio 0.4.1 → 0.5.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 (60) hide show
  1. package/README.md +252 -212
  2. package/dist/creatio/providers/configuration-provider.d.ts +3 -2
  3. package/dist/creatio/providers/configuration-provider.d.ts.map +1 -1
  4. package/dist/creatio/providers/crud-provider.d.ts +2 -0
  5. package/dist/creatio/providers/crud-provider.d.ts.map +1 -1
  6. package/dist/creatio/services/configuration-service-provider.d.ts.map +1 -1
  7. package/dist/creatio/services/configuration-service-provider.js +11 -3
  8. package/dist/creatio/services/configuration-service-provider.js.map +1 -1
  9. package/dist/creatio/services/odata-crud-provider.d.ts +1 -1
  10. package/dist/creatio/services/odata-crud-provider.d.ts.map +1 -1
  11. package/dist/creatio/services/odata-crud-provider.js +21 -7
  12. package/dist/creatio/services/odata-crud-provider.js.map +1 -1
  13. package/dist/server/mcp/creatio-rest.d.ts +44 -0
  14. package/dist/server/mcp/creatio-rest.d.ts.map +1 -0
  15. package/dist/server/mcp/creatio-rest.js +26 -0
  16. package/dist/server/mcp/creatio-rest.js.map +1 -0
  17. package/dist/server/mcp/crtmcp/crt-mcp-client.d.ts +55 -0
  18. package/dist/server/mcp/crtmcp/crt-mcp-client.d.ts.map +1 -0
  19. package/dist/server/mcp/crtmcp/crt-mcp-client.js +67 -0
  20. package/dist/server/mcp/crtmcp/crt-mcp-client.js.map +1 -0
  21. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.d.ts +20 -0
  22. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.d.ts.map +1 -0
  23. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.js +74 -0
  24. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.js.map +1 -0
  25. package/dist/server/mcp/dataforge/dataforge-client.d.ts +64 -0
  26. package/dist/server/mcp/dataforge/dataforge-client.d.ts.map +1 -0
  27. package/dist/server/mcp/dataforge/dataforge-client.js +130 -0
  28. package/dist/server/mcp/dataforge/dataforge-client.js.map +1 -0
  29. package/dist/server/mcp/dataforge/dataforge-tool-preparer.d.ts +17 -0
  30. package/dist/server/mcp/dataforge/dataforge-tool-preparer.d.ts.map +1 -0
  31. package/dist/server/mcp/dataforge/dataforge-tool-preparer.js +42 -0
  32. package/dist/server/mcp/dataforge/dataforge-tool-preparer.js.map +1 -0
  33. package/dist/server/mcp/filters.d.ts.map +1 -1
  34. package/dist/server/mcp/filters.js +20 -4
  35. package/dist/server/mcp/filters.js.map +1 -1
  36. package/dist/server/mcp/globalsearch/globalsearch-client.d.ts +50 -0
  37. package/dist/server/mcp/globalsearch/globalsearch-client.d.ts.map +1 -0
  38. package/dist/server/mcp/globalsearch/globalsearch-client.js +118 -0
  39. package/dist/server/mcp/globalsearch/globalsearch-client.js.map +1 -0
  40. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.d.ts +16 -0
  41. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.d.ts.map +1 -0
  42. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.js +34 -0
  43. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.js.map +1 -0
  44. package/dist/server/mcp/json-schema-to-zod.d.ts +3 -0
  45. package/dist/server/mcp/json-schema-to-zod.d.ts.map +1 -0
  46. package/dist/server/mcp/json-schema-to-zod.js +54 -0
  47. package/dist/server/mcp/json-schema-to-zod.js.map +1 -0
  48. package/dist/server/mcp/server.d.ts +18 -0
  49. package/dist/server/mcp/server.d.ts.map +1 -1
  50. package/dist/server/mcp/server.js +93 -25
  51. package/dist/server/mcp/server.js.map +1 -1
  52. package/dist/server/mcp/tool-preparer.d.ts +26 -0
  53. package/dist/server/mcp/tool-preparer.d.ts.map +1 -0
  54. package/dist/server/mcp/tool-preparer.js +11 -0
  55. package/dist/server/mcp/tool-preparer.js.map +1 -0
  56. package/dist/server/mcp/tools-data.d.ts +69 -10
  57. package/dist/server/mcp/tools-data.d.ts.map +1 -1
  58. package/dist/server/mcp/tools-data.js +222 -32
  59. package/dist/server/mcp/tools-data.js.map +1 -1
  60. package/package.json +8 -8
@@ -13,7 +13,7 @@ class ODataCrudProvider {
13
13
  this._client = client;
14
14
  this._metadataStore = metadataStore;
15
15
  }
16
- _buildODataQueryParams(filter, select, top, expand, orderBy) {
16
+ _buildODataQueryParams(filter, select, top, expand, orderBy, skip, count) {
17
17
  const params = [];
18
18
  if (filter) {
19
19
  params.push(`$filter=${encodeURIComponent(filter)}`);
@@ -27,9 +27,15 @@ class ODataCrudProvider {
27
27
  if (orderBy) {
28
28
  params.push(`$orderby=${encodeURIComponent(orderBy)}`);
29
29
  }
30
- if (top) {
30
+ if (typeof top === 'number') {
31
31
  params.push(`$top=${top}`);
32
32
  }
33
+ if (typeof skip === 'number' && skip > 0) {
34
+ params.push(`$skip=${skip}`);
35
+ }
36
+ if (count) {
37
+ params.push('$count=true');
38
+ }
33
39
  return params;
34
40
  }
35
41
  _buildQueryString(params) {
@@ -81,16 +87,20 @@ class ODataCrudProvider {
81
87
  url,
82
88
  }), { entity });
83
89
  }
84
- async read({ entity, filter, select, top, expand, orderBy }) {
90
+ async read({ entity, filter, select, top, expand, orderBy, skip, count }) {
85
91
  const startTime = Date.now();
86
- const queryParams = this._buildODataQueryParams(filter, select, top, expand, orderBy);
92
+ const queryParams = this._buildODataQueryParams(filter, select, top, expand, orderBy, skip, count);
87
93
  const url = this._buildEntityUrl(entity) + this._buildQueryString(queryParams);
88
94
  const headers = await this._client.getJsonHeaders();
89
95
  try {
90
96
  const body = await this._client.fetchJson(url, async () => ({ headers }));
91
- const result = this._extractODataValue(body);
97
+ const value = this._extractODataValue(body);
92
98
  const duration = Date.now() - startTime;
93
- const resultCount = Array.isArray(result) ? result.length : result ? 1 : 0;
99
+ const resultCount = Array.isArray(value) ? value.length : value ? 1 : 0;
100
+ // `@odata.count` is the server-side total of all matching records (ignores $top/$skip).
101
+ const total = body && typeof body === 'object' && '@odata.count' in body
102
+ ? body['@odata.count']
103
+ : undefined;
94
104
  log_1.default.info('creatio.crud.read.success', {
95
105
  entity,
96
106
  filter,
@@ -98,10 +108,14 @@ class ODataCrudProvider {
98
108
  expand: expand?.join(','),
99
109
  orderBy,
100
110
  top,
111
+ skip,
112
+ count,
101
113
  resultCount,
114
+ total,
102
115
  duration,
103
116
  });
104
- return result;
117
+ // When a count was requested, surface the total alongside the rows.
118
+ return count ? { total, value } : value;
105
119
  }
106
120
  catch (error) {
107
121
  const duration = Date.now() - startTime;
@@ -1 +1 @@
1
- {"version":3,"file":"odata-crud-provider.js","sourceRoot":"","sources":["../../../src/creatio/services/odata-crud-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"odata-crud-provider.js","sourceRoot":"","sources":["../../../src/creatio/services/odata-crud-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Shared narrow contracts for talking to Creatio configuration REST services and
3
+ * reading system settings. Capability clients (DataForge, Global Search, …) depend
4
+ * on these interfaces rather than the concrete engines (Dependency Inversion).
5
+ */
6
+ export type ConfigurationHttpMethod = 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';
7
+ export interface ConfigurationCallRequest {
8
+ service?: string;
9
+ method?: string;
10
+ /** Pre-built relative path (already safely encoded) for multi-segment routes
11
+ * that service/method cannot express, e.g. `/0/rest/ToolServiceMcp/{code}/v1/mcp`. */
12
+ rawPath?: string;
13
+ httpMethod?: ConfigurationHttpMethod;
14
+ body?: unknown;
15
+ query?: Record<string, string | number | boolean>;
16
+ }
17
+ export interface ConfigurationCallResult {
18
+ status: number;
19
+ contentType?: string;
20
+ body: unknown;
21
+ }
22
+ /** Narrow capability: invoke a configuration REST service method. */
23
+ export interface ConfigurationCaller {
24
+ call(request: ConfigurationCallRequest): Promise<ConfigurationCallResult>;
25
+ }
26
+ /** Narrow capability: read system setting values. */
27
+ export interface SysSettingReader {
28
+ queryValues(codes: string[]): Promise<{
29
+ values?: Record<string, unknown>;
30
+ }>;
31
+ }
32
+ /**
33
+ * Extract a system setting's value from a QuerySysSettings response. Creatio
34
+ * returns each setting as an object `{ code, value, ... }`; a bare value is also
35
+ * tolerated. Returns `undefined` when absent.
36
+ */
37
+ export declare function getSettingValue(response: {
38
+ values?: Record<string, unknown>;
39
+ } | undefined, code: string): unknown;
40
+ /** True when the named setting holds a non-empty string value. */
41
+ export declare function hasNonEmptySetting(response: {
42
+ values?: Record<string, unknown>;
43
+ } | undefined, code: string): boolean;
44
+ //# sourceMappingURL=creatio-rest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creatio-rest.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/creatio-rest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;AAElF,MAAM,WAAW,wBAAwB;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;2FACuF;IACvF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,uBAAuB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;CACd;AAED,qEAAqE;AACrE,MAAM,WAAW,mBAAmB;IACnC,IAAI,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAC1E;AAED,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAChC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC9B,QAAQ,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,SAAS,EAC1D,IAAI,EAAE,MAAM,GACV,OAAO,CAKT;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,CACjC,QAAQ,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,SAAS,EAC1D,IAAI,EAAE,MAAM,GACV,OAAO,CAGT"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ /**
3
+ * Shared narrow contracts for talking to Creatio configuration REST services and
4
+ * reading system settings. Capability clients (DataForge, Global Search, …) depend
5
+ * on these interfaces rather than the concrete engines (Dependency Inversion).
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.getSettingValue = getSettingValue;
9
+ exports.hasNonEmptySetting = hasNonEmptySetting;
10
+ /**
11
+ * Extract a system setting's value from a QuerySysSettings response. Creatio
12
+ * returns each setting as an object `{ code, value, ... }`; a bare value is also
13
+ * tolerated. Returns `undefined` when absent.
14
+ */
15
+ function getSettingValue(response, code) {
16
+ const entry = response?.values?.[code];
17
+ return entry && typeof entry === 'object'
18
+ ? entry.value
19
+ : entry;
20
+ }
21
+ /** True when the named setting holds a non-empty string value. */
22
+ function hasNonEmptySetting(response, code) {
23
+ const value = getSettingValue(response, code);
24
+ return typeof value === 'string' && value.trim().length > 0;
25
+ }
26
+ //# sourceMappingURL=creatio-rest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creatio-rest.js","sourceRoot":"","sources":["../../../src/server/mcp/creatio-rest.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAoCH,0CAQC;AAGD,gDAMC;AAtBD;;;;GAIG;AACH,SAAgB,eAAe,CAC9B,QAA0D,EAC1D,IAAY;IAEZ,MAAM,KAAK,GAAG,QAAQ,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QACxC,CAAC,CAAE,KAA6B,CAAC,KAAK;QACtC,CAAC,CAAC,KAAK,CAAC;AACV,CAAC;AAED,kEAAkE;AAClE,SAAgB,kBAAkB,CACjC,QAA0D,EAC1D,IAAY;IAEZ,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { ConfigurationCaller } from '../creatio-rest';
2
+ /**
3
+ * Access layer for the Creatio "MCP Publishing" composable app (CrtMCPPublishingApp).
4
+ *
5
+ * That app is itself an MCP server hosted inside Creatio: admins publish `McpServer`
6
+ * records (each a set of `McpTool`s backed by business processes) and it speaks
7
+ * JSON-RPC 2.0 at `/0/rest/ToolServiceMcp/{code}/v1/mcp` (initialize / tools/list /
8
+ * tools/call / ping).
9
+ *
10
+ * This client is a thin proxy front-end: it enumerates online servers, lists their
11
+ * tools, and forwards tool calls — letting the app keep ownership of schema
12
+ * derivation, RBAC, argument validation, output shaping and execution. It knows
13
+ * nothing about MCP tool registration (that is the preparer's job).
14
+ *
15
+ * Both publication gates are honoured for free: `tools/list` only returns ENABLED
16
+ * tools of ONLINE servers, and an offline server's endpoint fails closed.
17
+ */
18
+ export interface PublishedServer {
19
+ code: string;
20
+ title: string;
21
+ }
22
+ export interface PublishedTool {
23
+ name: string;
24
+ description?: string;
25
+ inputSchema?: unknown;
26
+ outputSchema?: unknown;
27
+ annotations?: unknown;
28
+ }
29
+ /** Narrow capability needed to enumerate published servers (DIP over the CRUD engine). */
30
+ export interface EntityReader {
31
+ read(params: {
32
+ entity: string;
33
+ select?: string[];
34
+ top?: number;
35
+ }): Promise<unknown>;
36
+ }
37
+ export declare class CrtMcpPublishingClient {
38
+ private readonly _configuration;
39
+ private readonly _crud;
40
+ constructor(configuration: ConfigurationCaller, crud: EntityReader);
41
+ /** Whether the publishing app is installed on this environment (its `McpServer` entity exists). */
42
+ isInstalled(): Promise<boolean>;
43
+ /** Online published servers (the app filters offline ones out of routing anyway). */
44
+ listOnlineServers(): Promise<PublishedServer[]>;
45
+ /** Tool definitions advertised by a server's MCP `tools/list`. */
46
+ listTools(serverCode: string): Promise<PublishedTool[]>;
47
+ /**
48
+ * Execute a published tool, returning the MCP CallToolResult as-is
49
+ * (`{ content, structuredContent?, isError? }`) so the proxied output reaches the
50
+ * caller unchanged.
51
+ */
52
+ callTool(serverCode: string, name: string, args: Record<string, unknown>): Promise<unknown>;
53
+ private _rpc;
54
+ }
55
+ //# sourceMappingURL=crt-mcp-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crt-mcp-client.d.ts","sourceRoot":"","sources":["../../../../src/server/mcp/crtmcp/crt-mcp-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,0FAA0F;AAC1F,MAAM,WAAW,YAAY;IAC5B,IAAI,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpF;AAID,qBAAa,sBAAsB;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;gBAEzB,aAAa,EAAE,mBAAmB,EAAE,IAAI,EAAE,YAAY;IAKlE,mGAAmG;IACtF,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAU5C,qFAAqF;IACxE,iBAAiB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAY5D,kEAAkE;IACrD,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAMpE;;;;OAIG;IACI,QAAQ,CACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,OAAO,CAAC,OAAO,CAAC;YAIL,IAAI;CAiBlB"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CrtMcpPublishingClient = void 0;
7
+ const log_1 = __importDefault(require("../../../log"));
8
+ const SERVER_ENTITY = 'McpServer';
9
+ class CrtMcpPublishingClient {
10
+ _configuration;
11
+ _crud;
12
+ constructor(configuration, crud) {
13
+ this._configuration = configuration;
14
+ this._crud = crud;
15
+ }
16
+ /** Whether the publishing app is installed on this environment (its `McpServer` entity exists). */
17
+ async isInstalled() {
18
+ try {
19
+ await this._crud.read({ entity: SERVER_ENTITY, select: ['Id'], top: 1 });
20
+ return true;
21
+ }
22
+ catch (err) {
23
+ log_1.default.info('crtmcp.probe.not-installed', { error: String(err) });
24
+ return false;
25
+ }
26
+ }
27
+ /** Online published servers (the app filters offline ones out of routing anyway). */
28
+ async listOnlineServers() {
29
+ const rows = await this._crud.read({
30
+ entity: SERVER_ENTITY,
31
+ select: ['Id', 'Name', 'Code', 'IsOnline'],
32
+ top: 200,
33
+ });
34
+ const list = Array.isArray(rows) ? rows : [];
35
+ return list
36
+ .filter((r) => r?.IsOnline === true && typeof r.Code === 'string' && r.Code.length > 0)
37
+ .map((r) => ({ code: r.Code, title: r.Name ?? r.Code }));
38
+ }
39
+ /** Tool definitions advertised by a server's MCP `tools/list`. */
40
+ async listTools(serverCode) {
41
+ const result = await this._rpc(serverCode, 'tools/list', {});
42
+ const tools = result?.tools;
43
+ return Array.isArray(tools) ? tools : [];
44
+ }
45
+ /**
46
+ * Execute a published tool, returning the MCP CallToolResult as-is
47
+ * (`{ content, structuredContent?, isError? }`) so the proxied output reaches the
48
+ * caller unchanged.
49
+ */
50
+ callTool(serverCode, name, args) {
51
+ return this._rpc(serverCode, 'tools/call', { name, arguments: args ?? {} });
52
+ }
53
+ async _rpc(serverCode, method, params) {
54
+ const response = await this._configuration.call({
55
+ rawPath: `/0/rest/ToolServiceMcp/${encodeURIComponent(serverCode)}/v1/mcp`,
56
+ httpMethod: 'POST',
57
+ body: { jsonrpc: '2.0', id: 1, method, params },
58
+ });
59
+ const body = response.body;
60
+ if (body && body.error) {
61
+ throw new Error(`crtmcp_rpc_error:${method}:${body.error.code ?? ''} ${body.error.message ?? ''}`.trim());
62
+ }
63
+ return body?.result;
64
+ }
65
+ }
66
+ exports.CrtMcpPublishingClient = CrtMcpPublishingClient;
67
+ //# sourceMappingURL=crt-mcp-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crt-mcp-client.js","sourceRoot":"","sources":["../../../../src/server/mcp/crtmcp/crt-mcp-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { ToolPreparer, ToolRegistrar } from '../tool-preparer';
2
+ import { CrtMcpPublishingClient } from './crt-mcp-client';
3
+ /** Stable capability key. */
4
+ export declare const PUBLISHED_TOOLS_CAPABILITY = "published-tools";
5
+ /**
6
+ * Registers tools published in the Creatio "MCP Publishing" composable app, but only
7
+ * when explicitly enabled (a hidden, opt-in feature) AND the app is installed. Each
8
+ * published tool is re-exposed under a namespaced name and proxied back to the app's
9
+ * JSON-RPC endpoint, so the app keeps ownership of validation/RBAC/execution.
10
+ */
11
+ export declare class CrtMcpPublishingToolPreparer implements ToolPreparer {
12
+ readonly name = "published-tools";
13
+ private readonly _client;
14
+ private readonly _enabled;
15
+ constructor(client: CrtMcpPublishingClient, enabled: boolean);
16
+ prepare(registrar: ToolRegistrar): Promise<boolean>;
17
+ private _registerTool;
18
+ private _toolName;
19
+ }
20
+ //# sourceMappingURL=crt-mcp-tool-preparer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crt-mcp-tool-preparer.d.ts","sourceRoot":"","sources":["../../../../src/server/mcp/crtmcp/crt-mcp-tool-preparer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAE,sBAAsB,EAAiB,MAAM,kBAAkB,CAAC;AAEzE,6BAA6B;AAC7B,eAAO,MAAM,0BAA0B,oBAAoB,CAAC;AAI5D;;;;;GAKG;AACH,qBAAa,4BAA6B,YAAW,YAAY;IAChE,SAAgB,IAAI,qBAA8B;IAElD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAEvB,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO;IAK/C,OAAO,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IA8BhE,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,SAAS;CAIjB"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CrtMcpPublishingToolPreparer = exports.PUBLISHED_TOOLS_CAPABILITY = void 0;
7
+ const log_1 = __importDefault(require("../../../log"));
8
+ const json_schema_to_zod_1 = require("../json-schema-to-zod");
9
+ /** Stable capability key. */
10
+ exports.PUBLISHED_TOOLS_CAPABILITY = 'published-tools';
11
+ const NAME_PREFIX = 'pub';
12
+ /**
13
+ * Registers tools published in the Creatio "MCP Publishing" composable app, but only
14
+ * when explicitly enabled (a hidden, opt-in feature) AND the app is installed. Each
15
+ * published tool is re-exposed under a namespaced name and proxied back to the app's
16
+ * JSON-RPC endpoint, so the app keeps ownership of validation/RBAC/execution.
17
+ */
18
+ class CrtMcpPublishingToolPreparer {
19
+ name = exports.PUBLISHED_TOOLS_CAPABILITY;
20
+ _client;
21
+ _enabled;
22
+ constructor(client, enabled) {
23
+ this._client = client;
24
+ this._enabled = enabled;
25
+ }
26
+ async prepare(registrar) {
27
+ if (!this._enabled) {
28
+ return false;
29
+ }
30
+ if (!(await this._client.isInstalled())) {
31
+ log_1.default.info('crtmcp.skipped', { reason: 'app-not-installed' });
32
+ return false;
33
+ }
34
+ const servers = await this._client.listOnlineServers();
35
+ let registered = 0;
36
+ for (const server of servers) {
37
+ let tools;
38
+ try {
39
+ tools = await this._client.listTools(server.code);
40
+ }
41
+ catch (err) {
42
+ log_1.default.warn('crtmcp.list-failed', { server: server.code, error: String(err) });
43
+ continue;
44
+ }
45
+ for (const tool of tools) {
46
+ if (!tool?.name) {
47
+ continue;
48
+ }
49
+ this._registerTool(registrar, server.code, tool);
50
+ registered++;
51
+ }
52
+ }
53
+ log_1.default.info('crtmcp.prepared', { servers: servers.length, tools: registered });
54
+ return registered > 0;
55
+ }
56
+ _registerTool(registrar, serverCode, tool) {
57
+ const descriptor = {
58
+ title: tool.name,
59
+ description: tool.description ??
60
+ `Published tool "${tool.name}" from Creatio MCP server "${serverCode}".`,
61
+ inputSchema: (0, json_schema_to_zod_1.jsonSchemaToZodShape)(tool.inputSchema),
62
+ };
63
+ // Proxy the call straight through; the app validates args and shapes the result.
64
+ const handler = (args) => this._client.callTool(serverCode, tool.name, args ?? {});
65
+ registrar.register(this._toolName(serverCode, tool.name), descriptor, handler);
66
+ }
67
+ // Namespace by server + tool so names never collide across servers or with built-in tools.
68
+ _toolName(serverCode, toolName) {
69
+ const sanitize = (value) => value.replace(/[^A-Za-z0-9_-]/g, '_');
70
+ return `${NAME_PREFIX}-${sanitize(serverCode)}-${sanitize(toolName)}`;
71
+ }
72
+ }
73
+ exports.CrtMcpPublishingToolPreparer = CrtMcpPublishingToolPreparer;
74
+ //# sourceMappingURL=crt-mcp-tool-preparer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crt-mcp-tool-preparer.js","sourceRoot":"","sources":["../../../../src/server/mcp/crtmcp/crt-mcp-tool-preparer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { ConfigurationCaller, ConfigurationCallResult, SysSettingReader } from '../creatio-rest';
2
+ export type { ConfigurationCaller, ConfigurationCallRequest, ConfigurationCallResult, ConfigurationHttpMethod, SysSettingReader, } from '../creatio-rest';
3
+ /**
4
+ * DataForge access layer.
5
+ *
6
+ * Single responsibility: build correct requests against the Creatio-hosted
7
+ * DataForge REST services and expose the read/maintenance operations plus an
8
+ * availability probe. It knows nothing about MCP tool registration.
9
+ *
10
+ * The DataForge WCF services use `[WebInvoke(BodyStyle = Wrapped)]`, so each
11
+ * single-parameter method expects its DTO wrapped under a top-level `request`.
12
+ */
13
+ export interface SimilarTablesQuery {
14
+ query: string;
15
+ limit?: number | undefined;
16
+ }
17
+ export interface TableRelationshipsQuery {
18
+ sourceTable: string;
19
+ targetTable: string;
20
+ limit?: number | undefined;
21
+ bidirectional?: boolean | undefined;
22
+ skipDetails?: boolean | undefined;
23
+ }
24
+ export interface LookupValuesQuery {
25
+ query: string;
26
+ schemaName?: string | undefined;
27
+ limit?: number | undefined;
28
+ }
29
+ export declare class DataForgeClient {
30
+ private readonly _configuration;
31
+ private readonly _sysSettings;
32
+ constructor(configuration: ConfigurationCaller, sysSettings: SysSettingReader);
33
+ /**
34
+ * Whether DataForge is configured on this environment. Gated on a non-empty
35
+ * `DataForgeServiceUrl`, mirroring the server-side `IsDataForgeEnabled` check.
36
+ * Probe failures are treated as "disabled" so callers degrade gracefully.
37
+ */
38
+ isEnabled(): Promise<boolean>;
39
+ getSimilarTableNames(q: SimilarTablesQuery): Promise<ConfigurationCallResult>;
40
+ getTableDetails(q: SimilarTablesQuery): Promise<ConfigurationCallResult>;
41
+ getTableRelationships(q: TableRelationshipsQuery): Promise<ConfigurationCallResult>;
42
+ getLookupValues(q: LookupValuesQuery): Promise<ConfigurationCallResult>;
43
+ getTableColumns(tableName: string): Promise<ConfigurationCallResult>;
44
+ getServiceStatus(): Promise<ConfigurationCallResult>;
45
+ /**
46
+ * Column details for `describe-entity` routing: returns the response body when
47
+ * DataForge answers successfully, or `null` so the caller can fall back to
48
+ * OData metadata. Per-call resilience only — a single miss or error never
49
+ * disables DataForge globally (that verdict is owned by {@link isEnabled}).
50
+ */
51
+ getColumnsOrNull(tableName: string): Promise<unknown | null>;
52
+ private _read;
53
+ /**
54
+ * The configuration REST services use WCF `BodyStyle = Wrapped`, so a response
55
+ * is nested under a single `<Method>Result` key (e.g. `GetTableColumnsDetailsResult`).
56
+ * Unwrap it so failure detection and the returned payload see the actual response.
57
+ */
58
+ private _unwrapResult;
59
+ /** Creatio serializes `BaseResponse.Success` as camelCase `success`; tolerate both. */
60
+ private _isFailure;
61
+ private _errorCode;
62
+ private _omitUndefined;
63
+ }
64
+ //# sourceMappingURL=dataforge-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataforge-client.d.ts","sourceRoot":"","sources":["../../../../src/server/mcp/dataforge/dataforge-client.ts"],"names":[],"mappings":"AACA,OAAO,EACN,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAEhB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACX,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,GAChB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;GASG;AAEH,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAMD,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;gBAEpC,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB;IAK7E;;;;OAIG;IACU,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAUnC,oBAAoB,CAAC,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAI7E,eAAe,CAAC,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAIxE,qBAAqB,CAAC,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAUnF,eAAe,CAAC,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAQvE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAIpE,gBAAgB,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAS3D;;;;;OAKG;IACU,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAiBzE,OAAO,CAAC,KAAK;IAYb;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAUrB,uFAAuF;IACvF,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,cAAc;CAGtB"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DataForgeClient = void 0;
7
+ const log_1 = __importDefault(require("../../../log"));
8
+ const creatio_rest_1 = require("../creatio-rest");
9
+ const READ_SERVICE = 'DataForgeSchemaReadService';
10
+ const MAINTENANCE_SERVICE = 'DataForgeMaintenanceService';
11
+ const SERVICE_URL_SETTING = 'DataForgeServiceUrl';
12
+ class DataForgeClient {
13
+ _configuration;
14
+ _sysSettings;
15
+ constructor(configuration, sysSettings) {
16
+ this._configuration = configuration;
17
+ this._sysSettings = sysSettings;
18
+ }
19
+ /**
20
+ * Whether DataForge is configured on this environment. Gated on a non-empty
21
+ * `DataForgeServiceUrl`, mirroring the server-side `IsDataForgeEnabled` check.
22
+ * Probe failures are treated as "disabled" so callers degrade gracefully.
23
+ */
24
+ async isEnabled() {
25
+ try {
26
+ const response = await this._sysSettings.queryValues([SERVICE_URL_SETTING]);
27
+ return (0, creatio_rest_1.hasNonEmptySetting)(response, SERVICE_URL_SETTING);
28
+ }
29
+ catch (err) {
30
+ log_1.default.warn('dataforge.probe.failed', { error: String(err) });
31
+ return false;
32
+ }
33
+ }
34
+ getSimilarTableNames(q) {
35
+ return this._read('GetSimilarTableNames', { query: q.query, limit: q.limit });
36
+ }
37
+ getTableDetails(q) {
38
+ return this._read('GetTableDetails', { query: q.query, limit: q.limit });
39
+ }
40
+ getTableRelationships(q) {
41
+ return this._read('GetTableRelationships', {
42
+ sourceTable: q.sourceTable,
43
+ targetTable: q.targetTable,
44
+ limit: q.limit,
45
+ bidirectional: q.bidirectional,
46
+ skipDetails: q.skipDetails,
47
+ });
48
+ }
49
+ getLookupValues(q) {
50
+ return this._read('GetLookupValues', {
51
+ query: q.query,
52
+ schemaName: q.schemaName,
53
+ limit: q.limit,
54
+ });
55
+ }
56
+ getTableColumns(tableName) {
57
+ return this._read('GetTableColumnsDetails', { tableName });
58
+ }
59
+ getServiceStatus() {
60
+ return this._configuration.call({
61
+ service: MAINTENANCE_SERVICE,
62
+ method: 'GetServiceStatus',
63
+ httpMethod: 'POST',
64
+ body: {},
65
+ });
66
+ }
67
+ /**
68
+ * Column details for `describe-entity` routing: returns the response body when
69
+ * DataForge answers successfully, or `null` so the caller can fall back to
70
+ * OData metadata. Per-call resilience only — a single miss or error never
71
+ * disables DataForge globally (that verdict is owned by {@link isEnabled}).
72
+ */
73
+ async getColumnsOrNull(tableName) {
74
+ try {
75
+ const { body } = await this.getTableColumns(tableName);
76
+ const result = this._unwrapResult(body);
77
+ if (this._isFailure(result)) {
78
+ log_1.default.info('dataforge.describe-entity.fallback', {
79
+ reason: this._errorCode(result) ?? 'success_false',
80
+ });
81
+ return null;
82
+ }
83
+ return result ?? null;
84
+ }
85
+ catch (err) {
86
+ log_1.default.warn('dataforge.describe-entity.error', { error: String(err) });
87
+ return null;
88
+ }
89
+ }
90
+ _read(method, request) {
91
+ return this._configuration.call({
92
+ service: READ_SERVICE,
93
+ method,
94
+ httpMethod: 'POST',
95
+ body: { request: this._omitUndefined(request) },
96
+ });
97
+ }
98
+ /**
99
+ * The configuration REST services use WCF `BodyStyle = Wrapped`, so a response
100
+ * is nested under a single `<Method>Result` key (e.g. `GetTableColumnsDetailsResult`).
101
+ * Unwrap it so failure detection and the returned payload see the actual response.
102
+ */
103
+ _unwrapResult(body) {
104
+ if (body && typeof body === 'object' && !Array.isArray(body)) {
105
+ const keys = Object.keys(body);
106
+ if (keys.length === 1 && keys[0].endsWith('Result')) {
107
+ return body[keys[0]];
108
+ }
109
+ }
110
+ return body;
111
+ }
112
+ /** Creatio serializes `BaseResponse.Success` as camelCase `success`; tolerate both. */
113
+ _isFailure(result) {
114
+ if (!result || typeof result !== 'object') {
115
+ return false;
116
+ }
117
+ const r = result;
118
+ return r.success === false || r.Success === false;
119
+ }
120
+ _errorCode(result) {
121
+ const r = result;
122
+ const info = r?.errorInfo ?? r?.ErrorInfo;
123
+ return info?.errorCode ?? info?.ErrorCode;
124
+ }
125
+ _omitUndefined(obj) {
126
+ return Object.fromEntries(Object.entries(obj).filter(([, value]) => value !== undefined));
127
+ }
128
+ }
129
+ exports.DataForgeClient = DataForgeClient;
130
+ //# sourceMappingURL=dataforge-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataforge-client.js","sourceRoot":"","sources":["../../../../src/server/mcp/dataforge/dataforge-client.ts"],"names":[],"mappings":"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"}