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
@@ -0,0 +1,17 @@
1
+ import { ToolPreparer, ToolRegistrar } from '../tool-preparer';
2
+ import { DataForgeClient } from './dataforge-client';
3
+ /** Stable capability key; also used by the Server to gate describe-entity routing. */
4
+ export declare const DATAFORGE_CAPABILITY = "dataforge";
5
+ /**
6
+ * Registers the DataForge MCP tools, but only when DataForge is enabled on the
7
+ * environment. Encapsulates everything DataForge-specific so the Server remains
8
+ * agnostic of how the capability is probed or wired.
9
+ */
10
+ export declare class DataForgeToolPreparer implements ToolPreparer {
11
+ readonly name = "dataforge";
12
+ private readonly _client;
13
+ constructor(client: DataForgeClient);
14
+ prepare(registrar: ToolRegistrar): Promise<boolean>;
15
+ private _registerTools;
16
+ }
17
+ //# sourceMappingURL=dataforge-tool-preparer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataforge-tool-preparer.d.ts","sourceRoot":"","sources":["../../../../src/server/mcp/dataforge/dataforge-tool-preparer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAc/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,sFAAsF;AACtF,eAAO,MAAM,oBAAoB,cAAc,CAAC;AAEhD;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,YAAY;IACzD,SAAgB,IAAI,eAAwB;IAE5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;gBAE9B,MAAM,EAAE,eAAe;IAItB,OAAO,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAShE,OAAO,CAAC,cAAc;CA2CtB"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataForgeToolPreparer = exports.DATAFORGE_CAPABILITY = void 0;
4
+ const utils_1 = require("../../../utils");
5
+ const tools_data_1 = require("../tools-data");
6
+ /** Stable capability key; also used by the Server to gate describe-entity routing. */
7
+ exports.DATAFORGE_CAPABILITY = 'dataforge';
8
+ /**
9
+ * Registers the DataForge MCP tools, but only when DataForge is enabled on the
10
+ * environment. Encapsulates everything DataForge-specific so the Server remains
11
+ * agnostic of how the capability is probed or wired.
12
+ */
13
+ class DataForgeToolPreparer {
14
+ name = exports.DATAFORGE_CAPABILITY;
15
+ _client;
16
+ constructor(client) {
17
+ this._client = client;
18
+ }
19
+ async prepare(registrar) {
20
+ const enabled = await this._client.isEnabled();
21
+ if (!enabled) {
22
+ return false;
23
+ }
24
+ this._registerTools(registrar);
25
+ return true;
26
+ }
27
+ _registerTools(registrar) {
28
+ registrar.register('dataforge-similar-tables', tools_data_1.dataforgeSimilarTablesDescriptor, (0, utils_1.withValidation)(tools_data_1.dataforgeSimilarTablesInput, ({ query, limit }) => this._client.getSimilarTableNames({ query, limit })));
29
+ registrar.register('dataforge-table-details', tools_data_1.dataforgeTableDetailsDescriptor, (0, utils_1.withValidation)(tools_data_1.dataforgeTableDetailsInput, ({ query, limit }) => this._client.getTableDetails({ query, limit })));
30
+ registrar.register('dataforge-table-relationships', tools_data_1.dataforgeTableRelationshipsDescriptor, (0, utils_1.withValidation)(tools_data_1.dataforgeTableRelationshipsInput, ({ sourceTable, targetTable, limit, bidirectional, skipDetails }) => this._client.getTableRelationships({
31
+ sourceTable,
32
+ targetTable,
33
+ limit,
34
+ bidirectional,
35
+ skipDetails,
36
+ })));
37
+ registrar.register('dataforge-lookup-values', tools_data_1.dataforgeLookupValuesDescriptor, (0, utils_1.withValidation)(tools_data_1.dataforgeLookupValuesInput, ({ query, schemaName, limit }) => this._client.getLookupValues({ query, schemaName, limit })));
38
+ registrar.register('dataforge-status', tools_data_1.dataforgeStatusDescriptor, (0, utils_1.withValidation)(tools_data_1.dataforgeStatusInput, () => this._client.getServiceStatus()));
39
+ }
40
+ }
41
+ exports.DataForgeToolPreparer = DataForgeToolPreparer;
42
+ //# sourceMappingURL=dataforge-tool-preparer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataforge-tool-preparer.js","sourceRoot":"","sources":["../../../../src/server/mcp/dataforge/dataforge-tool-preparer.ts"],"names":[],"mappings":";;;AAAA,0CAAgD;AAEhD,8CAWuB;AAIvB,sFAAsF;AACzE,QAAA,oBAAoB,GAAG,WAAW,CAAC;AAEhD;;;;GAIG;AACH,MAAa,qBAAqB;IACjB,IAAI,GAAG,4BAAoB,CAAC;IAE3B,OAAO,CAAkB;IAE1C,YAAY,MAAuB;QAClC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,SAAwB;QAC5C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACb,CAAC;IAEO,cAAc,CAAC,SAAwB;QAC9C,SAAS,CAAC,QAAQ,CACjB,0BAA0B,EAC1B,6CAAgC,EAChC,IAAA,sBAAc,EAAC,wCAA2B,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAChE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CACnD,CACD,CAAC;QACF,SAAS,CAAC,QAAQ,CACjB,yBAAyB,EACzB,4CAA+B,EAC/B,IAAA,sBAAc,EAAC,uCAA0B,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAC/D,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAC9C,CACD,CAAC;QACF,SAAS,CAAC,QAAQ,CACjB,+BAA+B,EAC/B,kDAAqC,EACrC,IAAA,sBAAc,EACb,6CAAgC,EAChC,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,EAAE,EAAE,CACnE,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC;YAClC,WAAW;YACX,WAAW;YACX,KAAK;YACL,aAAa;YACb,WAAW;SACX,CAAC,CACH,CACD,CAAC;QACF,SAAS,CAAC,QAAQ,CACjB,yBAAyB,EACzB,4CAA+B,EAC/B,IAAA,sBAAc,EAAC,uCAA0B,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAC3E,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAC1D,CACD,CAAC;QACF,SAAS,CAAC,QAAQ,CACjB,kBAAkB,EAClB,sCAAyB,EACzB,IAAA,sBAAc,EAAC,iCAAoB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAC3E,CAAC;IACH,CAAC;CACD;AA7DD,sDA6DC"}
@@ -1 +1 @@
1
- {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/filters.ts"],"names":[],"mappings":"AA6DA,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,GAAG,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAmCtF"}
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/filters.ts"],"names":[],"mappings":"AA8EA,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,GAAG,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAmCtF"}
@@ -24,14 +24,26 @@ function literalFor(field, value) {
24
24
  }
25
25
  if (t === 'string') {
26
26
  const v = String(value);
27
- const isNavigationProperty = field.includes('/');
28
- if (isGuid(v) && isIdish(field) && !isNavigationProperty) {
27
+ // Bare (unquoted) GUID for any Id-typed path — the scalar key `Id`, a lookup
28
+ // FK `XxxId`, or a navigation `Xxx/Id`. Other strings (incl. `Xxx/Name`) are quoted.
29
+ if (isGuid(v) && isIdish(field)) {
29
30
  return v;
30
31
  }
31
32
  return `'${escapeStr(v)}'`;
32
33
  }
33
34
  return `'${escapeStr(JSON.stringify(value))}'`;
34
35
  }
36
+ // Creatio OData cannot filter a lookup by its scalar FK column (`ContactId eq <guid>`
37
+ // 500s "Column by path ContactId not found"); it must be filtered through the
38
+ // navigation property (`Contact/Id eq <guid>`), per the official docs and verified
39
+ // live. Rewrite `<Lookup>Id` -> `<Lookup>/Id` for equality against a GUID. The
40
+ // primary key `Id` and already-navigated paths are left untouched.
41
+ function lookupNavField(field, value) {
42
+ if (isGuid(value) && field !== 'Id' && !field.includes('/') && /Id$/.test(field)) {
43
+ return `${field.slice(0, -2)}/Id`;
44
+ }
45
+ return field;
46
+ }
35
47
  function buildCondition(c) {
36
48
  if (!c || !c.field) {
37
49
  return undefined;
@@ -42,7 +54,10 @@ function buildCondition(c) {
42
54
  if (!values.length) {
43
55
  return undefined;
44
56
  }
45
- const parts = values.map((v) => `${field} eq ${literalFor(field, v)}`);
57
+ const parts = values.map((v) => {
58
+ const f = lookupNavField(field, v);
59
+ return `${f} eq ${literalFor(f, v)}`;
60
+ });
46
61
  return parts.length === 1 ? parts[0] : `(${parts.join(' or ')})`;
47
62
  }
48
63
  const op = String(c.op || 'eq');
@@ -53,7 +68,8 @@ function buildCondition(c) {
53
68
  if (value == null && (op === 'eq' || op === 'ne')) {
54
69
  return `${field} ${op} null`;
55
70
  }
56
- return `${field} ${op} ${literalFor(field, value)}`;
71
+ const f = op === 'eq' || op === 'ne' ? lookupNavField(field, value) : field;
72
+ return `${f} ${op} ${literalFor(f, value)}`;
57
73
  }
58
74
  function buildFilterFromStructured(filters) {
59
75
  if (!filters || typeof filters !== 'object') {
@@ -1 +1 @@
1
- {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../src/server/mcp/filters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../src/server/mcp/filters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { ConfigurationCaller, SysSettingReader } from '../creatio-rest';
2
+ /**
3
+ * Global Search access layer.
4
+ *
5
+ * Single responsibility: call the Creatio-hosted `GlobalSearchService` (which
6
+ * proxies Elasticsearch) and expose an availability probe. Knows nothing about
7
+ * MCP tool registration.
8
+ *
9
+ * `GlobalSearchService.Search` uses `[WebInvoke(BodyStyle = Wrapped)]` with
10
+ * several primitive parameters, so the request body is a FLAT object with one
11
+ * top-level key per parameter (unlike DataForge's single wrapped `request`).
12
+ */
13
+ export interface GlobalSearchQuery {
14
+ /** Free-text search string. */
15
+ query: string;
16
+ /** Optional comma-separated entity schema names to restrict the search to. */
17
+ type?: string | undefined;
18
+ /** Optional current section entity name (UI context). */
19
+ sectionEntityName?: string | undefined;
20
+ /** Max records to return. */
21
+ recordCount?: number | undefined;
22
+ /** Pagination offset. */
23
+ from?: number | undefined;
24
+ }
25
+ export declare class GlobalSearchClient {
26
+ private readonly _configuration;
27
+ private readonly _sysSettings;
28
+ constructor(configuration: ConfigurationCaller, sysSettings: SysSettingReader);
29
+ /**
30
+ * Whether Global Search is configured on this environment. Gated on a non-empty
31
+ * `GlobalSearchUrl`. Note: the platform additionally requires the `GlobalSearch_V2`
32
+ * feature; a configured URL is the cheap operator-facing signal used to decide
33
+ * whether to expose the tool. Probe failures degrade to "disabled".
34
+ */
35
+ isEnabled(): Promise<boolean>;
36
+ /**
37
+ * Run a global search and return a compact, UI-like result: per match the
38
+ * entity, record id, a display title, and the highlighted `matched` columns —
39
+ * plus `total`/`nextFrom` for paging. (The raw service returns every indexed
40
+ * column of every record as a stringified `SearchResult`; that is far too large
41
+ * to hand to an LLM, so we parse and project it. Use `read` with the id for the
42
+ * full record.)
43
+ */
44
+ search(q: GlobalSearchQuery): Promise<unknown>;
45
+ /** Parse the stringified `SearchResult` envelope and project it to a compact shape. */
46
+ private _project;
47
+ /** Best-effort human title from a record's column values (string or `{ displayValue }`). */
48
+ private _displayName;
49
+ }
50
+ //# sourceMappingURL=globalsearch-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globalsearch-client.d.ts","sourceRoot":"","sources":["../../../../src/server/mcp/globalsearch/globalsearch-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAsB,MAAM,iBAAiB,CAAC;AAE5F;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,iBAAiB;IACjC,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAQD,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;gBAEpC,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB;IAK7E;;;;;OAKG;IACU,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAU1C;;;;;;;OAOG;IACU,MAAM,CAAC,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB3D,uFAAuF;IACvF,OAAO,CAAC,QAAQ;IAoChB,4FAA4F;IAC5F,OAAO,CAAC,YAAY;CAmBpB"}
@@ -0,0 +1,118 @@
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.GlobalSearchClient = void 0;
7
+ const log_1 = __importDefault(require("../../../log"));
8
+ const creatio_rest_1 = require("../creatio-rest");
9
+ const SEARCH_SERVICE = 'GlobalSearchService';
10
+ // Either URL being set is the operator-facing signal that Global Search is wired;
11
+ // `GlobalSearchUrl` (the Elasticsearch endpoint) is the core requirement.
12
+ const SEARCH_URL_SETTING = 'GlobalSearchUrl';
13
+ const DEFAULT_RECORD_COUNT = 15;
14
+ class GlobalSearchClient {
15
+ _configuration;
16
+ _sysSettings;
17
+ constructor(configuration, sysSettings) {
18
+ this._configuration = configuration;
19
+ this._sysSettings = sysSettings;
20
+ }
21
+ /**
22
+ * Whether Global Search is configured on this environment. Gated on a non-empty
23
+ * `GlobalSearchUrl`. Note: the platform additionally requires the `GlobalSearch_V2`
24
+ * feature; a configured URL is the cheap operator-facing signal used to decide
25
+ * whether to expose the tool. Probe failures degrade to "disabled".
26
+ */
27
+ async isEnabled() {
28
+ try {
29
+ const response = await this._sysSettings.queryValues([SEARCH_URL_SETTING]);
30
+ return (0, creatio_rest_1.hasNonEmptySetting)(response, SEARCH_URL_SETTING);
31
+ }
32
+ catch (err) {
33
+ log_1.default.warn('globalsearch.probe.failed', { error: String(err) });
34
+ return false;
35
+ }
36
+ }
37
+ /**
38
+ * Run a global search and return a compact, UI-like result: per match the
39
+ * entity, record id, a display title, and the highlighted `matched` columns —
40
+ * plus `total`/`nextFrom` for paging. (The raw service returns every indexed
41
+ * column of every record as a stringified `SearchResult`; that is far too large
42
+ * to hand to an LLM, so we parse and project it. Use `read` with the id for the
43
+ * full record.)
44
+ */
45
+ async search(q) {
46
+ // `GlobalSearchService.Search(queryString, sectionEntityName, recordCount, type="", from=0)`
47
+ // — the first three parameters have no defaults, so the WCF Wrapped body MUST
48
+ // include them or binding fails with HTTP 400. `type` is optional; only send it
49
+ // when filtering, mirroring the UI call.
50
+ const body = {
51
+ queryString: q.query,
52
+ sectionEntityName: q.sectionEntityName ?? '',
53
+ recordCount: q.recordCount ?? DEFAULT_RECORD_COUNT,
54
+ from: q.from ?? 0,
55
+ };
56
+ if (q.type) {
57
+ body.type = q.type;
58
+ }
59
+ const response = await this._configuration.call({
60
+ service: SEARCH_SERVICE,
61
+ method: 'Search',
62
+ httpMethod: 'POST',
63
+ body,
64
+ });
65
+ return this._project(response.body);
66
+ }
67
+ /** Parse the stringified `SearchResult` envelope and project it to a compact shape. */
68
+ _project(body) {
69
+ const raw = body?.SearchResult;
70
+ let parsed = raw;
71
+ if (typeof raw === 'string') {
72
+ try {
73
+ parsed = JSON.parse(raw);
74
+ }
75
+ catch {
76
+ return body;
77
+ }
78
+ }
79
+ const p = parsed;
80
+ if (!p || !Array.isArray(p.data)) {
81
+ return parsed ?? body;
82
+ }
83
+ return {
84
+ success: p.success,
85
+ total: p.total,
86
+ nextFrom: p.nextFrom,
87
+ took: p.took,
88
+ errorInfo: p.errorInfo ?? null,
89
+ results: p.data.map((r) => ({
90
+ entityName: r.entityName,
91
+ id: r.id,
92
+ title: this._displayName(r.columnValues),
93
+ matched: r.foundColumns,
94
+ })),
95
+ };
96
+ }
97
+ /** Best-effort human title from a record's column values (string or `{ displayValue }`). */
98
+ _displayName(columnValues) {
99
+ if (!columnValues || typeof columnValues !== 'object') {
100
+ return undefined;
101
+ }
102
+ const cv = columnValues;
103
+ for (const key of ['Name', 'Title', 'LeadName', 'BpmName', 'Subject', 'Number', 'Email']) {
104
+ const v = cv[key];
105
+ const s = typeof v === 'string'
106
+ ? v
107
+ : v && typeof v === 'object'
108
+ ? v.displayValue
109
+ : undefined;
110
+ if (typeof s === 'string' && s.trim().length > 0) {
111
+ return s.trim();
112
+ }
113
+ }
114
+ return undefined;
115
+ }
116
+ }
117
+ exports.GlobalSearchClient = GlobalSearchClient;
118
+ //# sourceMappingURL=globalsearch-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globalsearch-client.js","sourceRoot":"","sources":["../../../../src/server/mcp/globalsearch/globalsearch-client.ts"],"names":[],"mappings":";;;;;;AAAA,uDAA+B;AAC/B,kDAA4F;AA2B5F,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAC7C,kFAAkF;AAClF,0EAA0E;AAC1E,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AAC7C,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC,MAAa,kBAAkB;IACb,cAAc,CAAsB;IACpC,YAAY,CAAmB;IAEhD,YAAY,aAAkC,EAAE,WAA6B;QAC5E,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC3E,OAAO,IAAA,iCAAkB,EAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,aAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9D,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,MAAM,CAAC,CAAoB;QACvC,6FAA6F;QAC7F,8EAA8E;QAC9E,gFAAgF;QAChF,yCAAyC;QACzC,MAAM,IAAI,GAA4B;YACrC,WAAW,EAAE,CAAC,CAAC,KAAK;YACpB,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,IAAI,EAAE;YAC5C,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,oBAAoB;YAClD,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;SACjB,CAAC;QACF,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QACpB,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAC/C,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,MAAM;YAClB,IAAI;SACJ,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,uFAAuF;IAC/E,QAAQ,CAAC,IAAa;QAC7B,MAAM,GAAG,GAAI,IAA0C,EAAE,YAAY,CAAC;QACtE,IAAI,MAAM,GAAY,GAAG,CAAC;QAC1B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACR,OAAO,IAAI,CAAC;YACb,CAAC;QACF,CAAC;QACD,MAAM,CAAC,GAAG,MAOF,CAAC;QACT,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,MAAM,IAAI,IAAI,CAAC;QACvB,CAAC;QACD,OAAO;YACN,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,IAAI;YAC9B,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3B,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;gBACxC,OAAO,EAAE,CAAC,CAAC,YAAY;aACvB,CAAC,CAAC;SACH,CAAC;IACH,CAAC;IAED,4FAA4F;IACpF,YAAY,CAAC,YAAqB;QACzC,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,MAAM,EAAE,GAAG,YAAuC,CAAC;QACnD,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;YAC1F,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;YAClB,MAAM,CAAC,GACN,OAAO,CAAC,KAAK,QAAQ;gBACpB,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAC3B,CAAC,CAAE,CAAgC,CAAC,YAAY;oBAChD,CAAC,CAAC,SAAS,CAAC;YACf,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClD,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YACjB,CAAC;QACF,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;CACD;AAjHD,gDAiHC"}
@@ -0,0 +1,16 @@
1
+ import { ToolPreparer, ToolRegistrar } from '../tool-preparer';
2
+ import { GlobalSearchClient } from './globalsearch-client';
3
+ /** Stable capability key. */
4
+ export declare const GLOBAL_SEARCH_CAPABILITY = "global-search";
5
+ /**
6
+ * Registers the `global-search` tool, but only when Global Search is enabled on
7
+ * the environment. Encapsulates everything Global-Search-specific so the Server
8
+ * stays agnostic (Open/Closed: adding capabilities = adding preparers).
9
+ */
10
+ export declare class GlobalSearchToolPreparer implements ToolPreparer {
11
+ readonly name = "global-search";
12
+ private readonly _client;
13
+ constructor(client: GlobalSearchClient);
14
+ prepare(registrar: ToolRegistrar): Promise<boolean>;
15
+ }
16
+ //# sourceMappingURL=globalsearch-tool-preparer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globalsearch-tool-preparer.d.ts","sourceRoot":"","sources":["../../../../src/server/mcp/globalsearch/globalsearch-tool-preparer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,6BAA6B;AAC7B,eAAO,MAAM,wBAAwB,kBAAkB,CAAC;AAExD;;;;GAIG;AACH,qBAAa,wBAAyB,YAAW,YAAY;IAC5D,SAAgB,IAAI,mBAA4B;IAEhD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;gBAEjC,MAAM,EAAE,kBAAkB;IAIzB,OAAO,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;CAmBhE"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GlobalSearchToolPreparer = exports.GLOBAL_SEARCH_CAPABILITY = void 0;
4
+ const utils_1 = require("../../../utils");
5
+ const tools_data_1 = require("../tools-data");
6
+ /** Stable capability key. */
7
+ exports.GLOBAL_SEARCH_CAPABILITY = 'global-search';
8
+ /**
9
+ * Registers the `global-search` tool, but only when Global Search is enabled on
10
+ * the environment. Encapsulates everything Global-Search-specific so the Server
11
+ * stays agnostic (Open/Closed: adding capabilities = adding preparers).
12
+ */
13
+ class GlobalSearchToolPreparer {
14
+ name = exports.GLOBAL_SEARCH_CAPABILITY;
15
+ _client;
16
+ constructor(client) {
17
+ this._client = client;
18
+ }
19
+ async prepare(registrar) {
20
+ const enabled = await this._client.isEnabled();
21
+ if (!enabled) {
22
+ return false;
23
+ }
24
+ registrar.register('global-search', tools_data_1.globalSearchDescriptor, (0, utils_1.withValidation)(tools_data_1.globalSearchInput, ({ query, entities, limit, from }) => this._client.search({
25
+ query,
26
+ type: entities && entities.length > 0 ? entities.join(',') : undefined,
27
+ recordCount: limit,
28
+ from,
29
+ })));
30
+ return true;
31
+ }
32
+ }
33
+ exports.GlobalSearchToolPreparer = GlobalSearchToolPreparer;
34
+ //# sourceMappingURL=globalsearch-tool-preparer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globalsearch-tool-preparer.js","sourceRoot":"","sources":["../../../../src/server/mcp/globalsearch/globalsearch-tool-preparer.ts"],"names":[],"mappings":";;;AAAA,0CAAgD;AAEhD,8CAA0E;AAI1E,6BAA6B;AAChB,QAAA,wBAAwB,GAAG,eAAe,CAAC;AAExD;;;;GAIG;AACH,MAAa,wBAAwB;IACpB,IAAI,GAAG,gCAAwB,CAAC;IAE/B,OAAO,CAAqB;IAE7C,YAAY,MAA0B;QACrC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,SAAwB;QAC5C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACd,CAAC;QACD,SAAS,CAAC,QAAQ,CACjB,eAAe,EACf,mCAAsB,EACtB,IAAA,sBAAc,EAAC,8BAAiB,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CACtE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACnB,KAAK;YACL,IAAI,EAAE,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;YACtE,WAAW,EAAE,KAAK;YAClB,IAAI;SACJ,CAAC,CACF,CACD,CAAC;QACF,OAAO,IAAI,CAAC;IACb,CAAC;CACD;AA5BD,4DA4BC"}
@@ -0,0 +1,3 @@
1
+ import { z } from 'zod';
2
+ export declare function jsonSchemaToZodShape(schema: unknown): Record<string, z.ZodTypeAny>;
3
+ //# sourceMappingURL=json-schema-to-zod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-to-zod.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/json-schema-to-zod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsBxB,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,CAUlF"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.jsonSchemaToZodShape = jsonSchemaToZodShape;
4
+ const zod_1 = require("zod");
5
+ function jsonSchemaToZodShape(schema) {
6
+ const node = asNode(schema);
7
+ const properties = isRecord(node.properties) ? node.properties : {};
8
+ const required = new Set(Array.isArray(node.required) ? node.required : []);
9
+ const shape = {};
10
+ for (const [key, raw] of Object.entries(properties)) {
11
+ const zodType = nodeToZod(raw);
12
+ shape[key] = required.has(key) ? zodType : zodType.optional();
13
+ }
14
+ return shape;
15
+ }
16
+ function nodeToZod(raw) {
17
+ const node = asNode(raw);
18
+ let zodType = baseType(node);
19
+ if (typeof node.description === 'string' && node.description.length > 0) {
20
+ zodType = zodType.describe(node.description);
21
+ }
22
+ return zodType;
23
+ }
24
+ function baseType(node) {
25
+ if (Array.isArray(node.enum) && node.enum.length > 0) {
26
+ const literals = node.enum.map((value) => zod_1.z.literal(value));
27
+ return literals.length === 1
28
+ ? literals[0]
29
+ : zod_1.z.union(literals);
30
+ }
31
+ switch (node.type) {
32
+ case 'string':
33
+ return zod_1.z.string();
34
+ case 'integer':
35
+ return zod_1.z.number().int();
36
+ case 'number':
37
+ return zod_1.z.number();
38
+ case 'boolean':
39
+ return zod_1.z.boolean();
40
+ case 'array':
41
+ return zod_1.z.array(node.items === undefined ? zod_1.z.any() : nodeToZod(node.items));
42
+ case 'object':
43
+ return zod_1.z.record(zod_1.z.string(), zod_1.z.any());
44
+ default:
45
+ return zod_1.z.any();
46
+ }
47
+ }
48
+ function asNode(value) {
49
+ return isRecord(value) ? value : {};
50
+ }
51
+ function isRecord(value) {
52
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
53
+ }
54
+ //# sourceMappingURL=json-schema-to-zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-to-zod.js","sourceRoot":"","sources":["../../../src/server/mcp/json-schema-to-zod.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,12 @@ export declare class Server {
11
11
  private _readonly;
12
12
  private _serverName;
13
13
  private _serverVersion;
14
+ private readonly _dataForge;
15
+ private readonly _dataForgePreparer;
16
+ private readonly _globalSearchPreparer;
17
+ private readonly _publishedToolsPreparer;
18
+ private readonly _preparers;
19
+ private readonly _capabilities;
14
20
  get authProvider(): ICreatioAuthProvider;
15
21
  constructor(engines: CreatioEngineManager, config: ServerConfig);
16
22
  private _registerData;
@@ -18,6 +24,18 @@ export declare class Server {
18
24
  private _normalizeToToolHandler;
19
25
  private _registerAsTool;
20
26
  private _registerPrompts;
27
+ private _textResult;
28
+ /** Adapter exposing handler registration to {@link ToolPreparer}s. */
29
+ private _toolRegistrar;
30
+ /**
31
+ * Run every optional-capability preparer once: probe the environment and let
32
+ * each register its tools only when available. A failing preparer is isolated
33
+ * and recorded as disabled. Invoked from {@link startMcp} after the core tools
34
+ * are in place.
35
+ */
36
+ private _prepareTools;
37
+ /** Whether DataForge was probed as enabled at startup. */
38
+ private _isDataForgeReady;
21
39
  private _registerClientTools;
22
40
  startMcp(): Promise<McpServer>;
23
41
  stopMcp(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EACN,oBAAoB,EACpB,oBAAoB,EAEpB,MAAM,eAAe,CAAC;AAgDvB,MAAM,WAAW,YAAY;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,MAAM;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0B;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAC5D,OAAO,CAAC,IAAI,CAAC,CAAY;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,cAAc,CAAW;IAEjC,IAAW,YAAY,IAAI,oBAAoB,CAE9C;gBAEW,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,YAAY;IAM/D,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,8BAA8B;IAQtC,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,oBAAoB;IAyQf,QAAQ;IAaR,OAAO;CAWpB"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EACN,oBAAoB,EACpB,oBAAoB,EAEpB,MAAM,eAAe,CAAC;AA0DvB,MAAM,WAAW,YAAY;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,MAAM;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0B;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAC5D,OAAO,CAAC,IAAI,CAAC,CAAY;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,cAAc,CAAW;IAIjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAwB;IAC3D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA2B;IACjE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA+B;IACvE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAE5D,IAAW,YAAY,IAAI,oBAAoB,CAE9C;gBAEW,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,YAAY;IAoB/D,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,8BAA8B;IAQtC,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,WAAW;IAWnB,sEAAsE;IACtE,OAAO,CAAC,cAAc;IAOtB;;;;;OAKG;YACW,aAAa;IAc3B,0DAA0D;IAC1D,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,oBAAoB;IAsQf,QAAQ;IAqBR,OAAO;CAWpB"}