mcp-creatio 0.6.3 → 0.6.5
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.
- package/README.md +65 -0
- package/dist/cli.js +6 -1
- package/dist/cli.js.map +1 -1
- package/dist/creatio/engines/engine-manager.d.ts +3 -0
- package/dist/creatio/engines/engine-manager.d.ts.map +1 -1
- package/dist/creatio/engines/engine-manager.js +5 -0
- package/dist/creatio/engines/engine-manager.js.map +1 -1
- package/dist/creatio/provider-context.d.ts +3 -0
- package/dist/creatio/provider-context.d.ts.map +1 -1
- package/dist/creatio/services/client-cache-hash-client.d.ts +22 -0
- package/dist/creatio/services/client-cache-hash-client.d.ts.map +1 -0
- package/dist/creatio/services/client-cache-hash-client.js +56 -0
- package/dist/creatio/services/client-cache-hash-client.js.map +1 -0
- package/dist/creatio/services/creatio-service-context.d.ts +5 -0
- package/dist/creatio/services/creatio-service-context.d.ts.map +1 -1
- package/dist/creatio/services/creatio-service-context.js +15 -1
- package/dist/creatio/services/creatio-service-context.js.map +1 -1
- package/dist/creatio/services/crud-provider-factory.d.ts +4 -0
- package/dist/creatio/services/crud-provider-factory.d.ts.map +1 -1
- package/dist/creatio/services/crud-provider-factory.js +1 -1
- package/dist/creatio/services/crud-provider-factory.js.map +1 -1
- package/dist/creatio/services/dataservice/data-service-crud-provider.d.ts +2 -0
- package/dist/creatio/services/dataservice/data-service-crud-provider.d.ts.map +1 -1
- package/dist/creatio/services/dataservice/data-service-crud-provider.js +3 -1
- package/dist/creatio/services/dataservice/data-service-crud-provider.js.map +1 -1
- package/dist/creatio/services/dataservice/data-service-schema.d.ts +3 -1
- package/dist/creatio/services/dataservice/data-service-schema.d.ts.map +1 -1
- package/dist/creatio/services/dataservice/data-service-schema.js +13 -4
- package/dist/creatio/services/dataservice/data-service-schema.js.map +1 -1
- package/dist/creatio/services/dataservice/data-service-transport.d.ts +3 -0
- package/dist/creatio/services/dataservice/data-service-transport.d.ts.map +1 -1
- package/dist/creatio/services/dataservice/data-service-transport.js +5 -0
- package/dist/creatio/services/dataservice/data-service-transport.js.map +1 -1
- package/dist/creatio/services/index.d.ts +2 -0
- package/dist/creatio/services/index.d.ts.map +1 -1
- package/dist/creatio/services/index.js +2 -0
- package/dist/creatio/services/index.js.map +1 -1
- package/dist/creatio/services/odata/metadata-store.d.ts +10 -1
- package/dist/creatio/services/odata/metadata-store.d.ts.map +1 -1
- package/dist/creatio/services/odata/metadata-store.js +35 -4
- package/dist/creatio/services/odata/metadata-store.js.map +1 -1
- package/dist/creatio/services/schema-freshness-gate.d.ts +26 -0
- package/dist/creatio/services/schema-freshness-gate.d.ts.map +1 -0
- package/dist/creatio/services/schema-freshness-gate.js +58 -0
- package/dist/creatio/services/schema-freshness-gate.js.map +1 -0
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +4 -1
- package/dist/log.js.map +1 -1
- package/dist/server/http/mcp-handlers.d.ts.map +1 -1
- package/dist/server/http/mcp-handlers.js +8 -6
- package/dist/server/http/mcp-handlers.js.map +1 -1
- package/dist/server/mcp/server.d.ts +37 -28
- package/dist/server/mcp/server.d.ts.map +1 -1
- package/dist/server/mcp/server.js +106 -75
- package/dist/server/mcp/server.js.map +1 -1
- package/dist/server/mcp/tenant-tool-registry.d.ts +66 -0
- package/dist/server/mcp/tenant-tool-registry.d.ts.map +1 -0
- package/dist/server/mcp/tenant-tool-registry.js +113 -0
- package/dist/server/mcp/tenant-tool-registry.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/redact.d.ts +25 -0
- package/dist/utils/redact.d.ts.map +1 -0
- package/dist/utils/redact.js +64 -0
- package/dist/utils/redact.js.map +1 -0
- package/package.json +1 -1
|
@@ -16,6 +16,7 @@ const filters_1 = require("./filters");
|
|
|
16
16
|
const globalsearch_client_1 = require("./globalsearch/globalsearch-client");
|
|
17
17
|
const globalsearch_tool_preparer_1 = require("./globalsearch/globalsearch-tool-preparer");
|
|
18
18
|
const prompts_data_1 = require("./prompts-data");
|
|
19
|
+
const tenant_tool_registry_1 = require("./tenant-tool-registry");
|
|
19
20
|
const tools_data_1 = require("./tools-data");
|
|
20
21
|
/** Default page size for `read` when the caller omits `top`, so we never dump an
|
|
21
22
|
* unbounded result set into the model. Explicit `top` (incl. `0` for count-only)
|
|
@@ -26,39 +27,36 @@ class Server {
|
|
|
26
27
|
// persistently-failing capability doesn't fire its network probe on every new session connect.
|
|
27
28
|
static PROBE_RETRY_COOLDOWN_MS = 30_000;
|
|
28
29
|
_engines;
|
|
30
|
+
// Static tool surface, shared across every session and tenant: these handlers are user-agnostic
|
|
31
|
+
// (they read identity from the per-request context at call time) and identical for every Creatio
|
|
32
|
+
// instance. Each new session server gets the full set; capability/dynamic tools are NOT here —
|
|
33
|
+
// they live per-tenant in `_registry` so one tenant's verdict/tools never leak to another.
|
|
29
34
|
_descriptors = new Map();
|
|
30
35
|
_handlers = new Map();
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
// against concurrent connects each kicking a probe.
|
|
41
|
-
_probeComplete = false;
|
|
42
|
-
_probeInFlight = false;
|
|
43
|
-
_readonly = false;
|
|
44
|
-
_serverName = version_1.NAME;
|
|
45
|
-
_serverVersion = version_1.VERSION;
|
|
46
|
-
// DataForge access layer + optional-capability preparers. `_capabilities`
|
|
47
|
-
// records each preparer's startup verdict so core tools (describe-entity)
|
|
48
|
-
// can route through a capability only when it is actually enabled.
|
|
36
|
+
// Per-tenant capability + dynamic-tool + live-session state, keyed by effective Creatio base URL.
|
|
37
|
+
// One McpServer per live transport/session (a single McpServer connects to only one transport,
|
|
38
|
+
// so a shared singleton would reject a 2nd concurrent connect() with "Already connected"); the
|
|
39
|
+
// registry tracks those session servers per tenant so a late-probed tool is pushed only into the
|
|
40
|
+
// sessions of the tenant it was discovered for.
|
|
41
|
+
_registry;
|
|
42
|
+
// DataForge access layer + optional-capability preparers. The probe verdict is recorded PER
|
|
43
|
+
// TENANT (in `_registry`) so core tools (describe-entity) route through a capability only when it
|
|
44
|
+
// is actually enabled for the calling tenant's instance.
|
|
49
45
|
_dataForge;
|
|
50
46
|
_dataForgePreparer;
|
|
51
47
|
_globalSearchPreparer;
|
|
52
48
|
_publishedToolsPreparer;
|
|
53
49
|
_preparers;
|
|
54
|
-
|
|
55
|
-
|
|
50
|
+
_readonly = false;
|
|
51
|
+
_serverName = version_1.NAME;
|
|
52
|
+
_serverVersion = version_1.VERSION;
|
|
56
53
|
get authProvider() {
|
|
57
54
|
return this._engines.authProvider;
|
|
58
55
|
}
|
|
59
56
|
constructor(engines, config) {
|
|
60
57
|
this._engines = engines;
|
|
61
58
|
this._readonly = config.readonlyMode ?? false;
|
|
59
|
+
this._registry = new tenant_tool_registry_1.TenantToolRegistry();
|
|
62
60
|
this._dataForge = new dataforge_client_1.DataForgeClient(engines.configuration, engines.sysSettings);
|
|
63
61
|
this._dataForgePreparer = new dataforge_tool_preparer_1.DataForgeToolPreparer(this._dataForge);
|
|
64
62
|
this._globalSearchPreparer = new globalsearch_tool_preparer_1.GlobalSearchToolPreparer(new globalsearch_client_1.GlobalSearchClient(engines.configuration, engines.sysSettings));
|
|
@@ -72,25 +70,28 @@ class Server {
|
|
|
72
70
|
];
|
|
73
71
|
this._registerClientTools();
|
|
74
72
|
}
|
|
73
|
+
/** Register the static, tenant-agnostic surface (core/mutating tools + prompts) into a session. */
|
|
75
74
|
_registerAllInto(mcp) {
|
|
76
75
|
for (const [name, handler] of this._handlers.entries()) {
|
|
77
|
-
this._registerAsTool(mcp, name, handler);
|
|
76
|
+
this._registerAsTool(mcp, name, this._descriptors.get(name), handler);
|
|
78
77
|
}
|
|
79
78
|
this._registerPrompts(mcp);
|
|
80
79
|
}
|
|
81
|
-
|
|
80
|
+
/** Record a static tool in the shared maps. Registered into each session by {@link
|
|
81
|
+
* _registerAllInto}; called only at construction, before any session exists. */
|
|
82
|
+
_registerStaticTool(name, descriptor, handler) {
|
|
82
83
|
this._handlers.set(name, handler);
|
|
83
84
|
this._descriptors.set(name, descriptor);
|
|
84
|
-
// Late registration (the capability probe runs after sessions may already be connected):
|
|
85
|
-
// push the tool into every live session server so already-connected clients see it — the
|
|
86
|
-
// SDK emits notifications/tools/list_changed. New sessions pick it up from the maps above.
|
|
87
|
-
for (const mcp of this._sessionServers) {
|
|
88
|
-
this._registerAsTool(mcp, name, handler);
|
|
89
|
-
}
|
|
90
85
|
}
|
|
91
86
|
_normalizeToToolHandler(handler) {
|
|
92
87
|
return async (args) => {
|
|
93
|
-
|
|
88
|
+
// Outward boundary to the LLM client: scrub any credential that leaked into the error
|
|
89
|
+
// message (AGENTS invariant #7) while preserving the Error type/stack, then rethrow so
|
|
90
|
+
// the MCP layer relays it (we never silently swallow — invariant #4). `.catch` keeps
|
|
91
|
+
// `result` typed exactly as the handler's return (the callback only throws).
|
|
92
|
+
const result = await handler(args).catch((err) => {
|
|
93
|
+
throw (0, utils_1.redactError)(err);
|
|
94
|
+
});
|
|
94
95
|
// Pass through only a genuine MCP envelope (`content` is an array of blocks) — e.g.
|
|
95
96
|
// the published-tools proxy returns an upstream tools/call result already shaped.
|
|
96
97
|
// Raw domain data (incl. server payloads that happen to have a scalar/object
|
|
@@ -106,21 +107,23 @@ class Server {
|
|
|
106
107
|
type: 'text',
|
|
107
108
|
// Compact (not pretty-printed): this is a machine/LLM transport, so the 2-space
|
|
108
109
|
// indentation only inflated byte/token size and serialization cost.
|
|
109
|
-
|
|
110
|
+
// Scrubbed at this outward edge so a token that slipped into a result field is
|
|
111
|
+
// never relayed to the client.
|
|
112
|
+
text: (0, utils_1.redactSecrets)(typeof result === 'string' ? result : JSON.stringify(result)),
|
|
110
113
|
},
|
|
111
114
|
],
|
|
112
115
|
};
|
|
113
116
|
};
|
|
114
117
|
}
|
|
115
|
-
_registerAsTool(mcp, name, handler) {
|
|
118
|
+
_registerAsTool(mcp, name, descriptor, handler) {
|
|
116
119
|
try {
|
|
117
|
-
const
|
|
120
|
+
const toolDescriptor = descriptor ||
|
|
118
121
|
{
|
|
119
122
|
title: name,
|
|
120
123
|
description: `Tool ${name}`,
|
|
121
124
|
inputSchema: {},
|
|
122
125
|
};
|
|
123
|
-
mcp.registerTool(name,
|
|
126
|
+
mcp.registerTool(name, toolDescriptor, async (args) => {
|
|
124
127
|
return this._normalizeToToolHandler(handler)(args);
|
|
125
128
|
});
|
|
126
129
|
log_1.default.info('mcp.tool.register', { tool: name });
|
|
@@ -144,48 +147,69 @@ class Server {
|
|
|
144
147
|
log_1.default.warn('mcp.prompts.register.failed', { error: String(err) });
|
|
145
148
|
}
|
|
146
149
|
}
|
|
147
|
-
/**
|
|
148
|
-
|
|
150
|
+
/** The tenant bucket key for a request's base-URL override: the normalized override (gateway
|
|
151
|
+
* multi-tenant) or {@link DEFAULT_TENANT_KEY} for every single-tenant mode. Mirrors how the
|
|
152
|
+
* HTTP client resolves the effective base URL, so tools and caches key on the same tenant. */
|
|
153
|
+
_tenantKey(baseUrlOverride) {
|
|
154
|
+
const trimmed = baseUrlOverride?.trim();
|
|
155
|
+
return trimmed ? trimmed.replace(/\/$/, '') : tenant_tool_registry_1.DEFAULT_TENANT_KEY;
|
|
156
|
+
}
|
|
157
|
+
/** The current request's tenant state (resolved from the per-request base-URL override). Falls
|
|
158
|
+
* back to the default tenant when there is no active request context (e.g. stdio, tests). */
|
|
159
|
+
_currentTenantState() {
|
|
160
|
+
return this._registry.getState(this._tenantKey((0, utils_1.getBaseUrlOverride)()));
|
|
161
|
+
}
|
|
162
|
+
/** Adapter exposing handler registration to {@link ToolPreparer}s — scoped to ONE tenant: a
|
|
163
|
+
* discovered tool is recorded in that tenant's state and pushed into its live sessions only. */
|
|
164
|
+
_toolRegistrar(state) {
|
|
149
165
|
return {
|
|
150
|
-
register: (name, descriptor, handler) =>
|
|
166
|
+
register: (name, descriptor, handler) => {
|
|
167
|
+
state.dynamicTools.set(name, { descriptor, handler });
|
|
168
|
+
// Late registration (the probe runs after sessions may already be connected): push
|
|
169
|
+
// the tool into the tenant's live session servers so connected clients see it — the
|
|
170
|
+
// SDK emits notifications/tools/list_changed. New sessions pick it up on connect.
|
|
171
|
+
for (const mcp of state.sessionServers) {
|
|
172
|
+
this._registerAsTool(mcp, name, descriptor, handler);
|
|
173
|
+
}
|
|
174
|
+
},
|
|
151
175
|
};
|
|
152
176
|
}
|
|
153
177
|
/**
|
|
154
|
-
* Probe each optional-capability preparer that has no verdict yet and let it
|
|
155
|
-
* when available. A preparer that returns cleanly (true/false) gets a recorded
|
|
156
|
-
* never re-probed; one that THROWS (e.g. the caller's identity isn't usable yet)
|
|
157
|
-
* so a later authenticated connect can retry it — which also makes registration
|
|
158
|
-
* already-enabled preparer is skipped, so its tools are never registered twice).
|
|
159
|
-
* {@link ensureCapabilitiesProbed} within a request context so probe calls carry the
|
|
160
|
-
* identity. Returns whether EVERY preparer now has a verdict (the probe is complete).
|
|
178
|
+
* Probe each optional-capability preparer that has no verdict yet FOR THIS TENANT and let it
|
|
179
|
+
* register its tools when available. A preparer that returns cleanly (true/false) gets a recorded
|
|
180
|
+
* verdict and is never re-probed; one that THROWS (e.g. the caller's identity isn't usable yet)
|
|
181
|
+
* records nothing so a later authenticated connect can retry it — which also makes registration
|
|
182
|
+
* idempotent (an already-enabled preparer is skipped, so its tools are never registered twice).
|
|
183
|
+
* Invoked from {@link ensureCapabilitiesProbed} within a request context so probe calls carry the
|
|
184
|
+
* caller's identity. Returns whether EVERY preparer now has a verdict (the probe is complete).
|
|
161
185
|
*/
|
|
162
|
-
async _prepareTools() {
|
|
163
|
-
const registrar = this._toolRegistrar();
|
|
186
|
+
async _prepareTools(state) {
|
|
187
|
+
const registrar = this._toolRegistrar(state);
|
|
164
188
|
const now = Date.now();
|
|
165
189
|
for (const preparer of this._preparers) {
|
|
166
|
-
if (
|
|
190
|
+
if (state.capabilities.has(preparer.name)) {
|
|
167
191
|
continue; // definitive verdict already recorded — don't re-probe or re-register
|
|
168
192
|
}
|
|
169
|
-
if (now < (
|
|
193
|
+
if (now < (state.cooldownUntil.get(preparer.name) ?? 0)) {
|
|
170
194
|
continue; // recently failed — back off rather than re-probe on every connect
|
|
171
195
|
}
|
|
172
196
|
try {
|
|
173
197
|
const enabled = await preparer.prepare(registrar);
|
|
174
|
-
|
|
198
|
+
state.capabilities.set(preparer.name, enabled);
|
|
175
199
|
log_1.default.info('mcp.prepare', { preparer: preparer.name, enabled });
|
|
176
200
|
}
|
|
177
201
|
catch (err) {
|
|
178
202
|
// No verdict — leave unrecorded so a later authenticated connect retries, but not
|
|
179
203
|
// before the cooldown elapses.
|
|
180
|
-
|
|
204
|
+
state.cooldownUntil.set(preparer.name, Date.now() + Server.PROBE_RETRY_COOLDOWN_MS);
|
|
181
205
|
log_1.default.warn('mcp.prepare.failed', { preparer: preparer.name, error: String(err) });
|
|
182
206
|
}
|
|
183
207
|
}
|
|
184
|
-
return this._preparers.every((p) =>
|
|
208
|
+
return this._preparers.every((p) => state.capabilities.has(p.name));
|
|
185
209
|
}
|
|
186
|
-
/** Whether DataForge was probed as enabled
|
|
187
|
-
_isDataForgeReady() {
|
|
188
|
-
return
|
|
210
|
+
/** Whether DataForge was probed as enabled for the given tenant (defaults to the current one). */
|
|
211
|
+
_isDataForgeReady(state = this._currentTenantState()) {
|
|
212
|
+
return state.capabilities.get(this._dataForgePreparer.name) === true;
|
|
189
213
|
}
|
|
190
214
|
/** Compile the `read` tool args into a neutral {@link ReadQuery}: structured `filters`
|
|
191
215
|
* become a {@link FilterNode}; a raw `$filter` string and `expand` are carried as
|
|
@@ -219,7 +243,7 @@ class Server {
|
|
|
219
243
|
* CRUD backend's schema on a per-call miss. The `source` discriminator is part of the
|
|
220
244
|
* public tool contract and reflects where the schema actually came from. */
|
|
221
245
|
async _describeEntity(entitySet) {
|
|
222
|
-
if (this._isDataForgeReady()) {
|
|
246
|
+
if (this._isDataForgeReady(this._currentTenantState())) {
|
|
223
247
|
const dataForge = await this._dataForge.getColumnsOrNull(entitySet);
|
|
224
248
|
if (dataForge !== null) {
|
|
225
249
|
return { source: 'dataforge', entitySet, dataForge };
|
|
@@ -373,52 +397,59 @@ class Server {
|
|
|
373
397
|
const { core, mutating } = this._clientToolDefs();
|
|
374
398
|
const defs = this._readonly ? core : [...core, ...mutating];
|
|
375
399
|
for (const def of defs) {
|
|
376
|
-
this.
|
|
400
|
+
this._registerStaticTool(def.name, def.descriptor, (0, utils_1.withValidation)(def.input, def.run));
|
|
377
401
|
}
|
|
378
402
|
}
|
|
379
403
|
/**
|
|
380
|
-
* Build a fresh {@link McpServer} for one transport/session,
|
|
381
|
-
*
|
|
382
|
-
* late-discovered tools into it. Each session MUST get its own
|
|
383
|
-
* connects to only one transport).
|
|
404
|
+
* Build a fresh {@link McpServer} for one transport/session, registering the static surface plus
|
|
405
|
+
* the calling tenant's already-discovered dynamic tools, and track it under that tenant so the
|
|
406
|
+
* capability probe can later push late-discovered tools into it. Each session MUST get its own
|
|
407
|
+
* server (a single McpServer connects to only one transport). `baseUrlOverride` (gateway
|
|
408
|
+
* `X-Creatio-Base-Url`) selects the tenant; absent ⇒ the single default tenant.
|
|
384
409
|
*/
|
|
385
|
-
createSessionServer() {
|
|
410
|
+
createSessionServer(baseUrlOverride) {
|
|
386
411
|
const mcp = new mcp_js_1.McpServer({ name: this._serverName, version: this._serverVersion });
|
|
387
412
|
this._registerAllInto(mcp);
|
|
388
|
-
this.
|
|
413
|
+
const state = this._registry.getState(this._tenantKey(baseUrlOverride));
|
|
414
|
+
for (const [name, tool] of state.dynamicTools) {
|
|
415
|
+
this._registerAsTool(mcp, name, tool.descriptor, tool.handler);
|
|
416
|
+
}
|
|
417
|
+
state.sessionServers.add(mcp);
|
|
389
418
|
log_1.default.serverStart(this._serverName, this._serverVersion, {
|
|
390
|
-
tools:
|
|
419
|
+
tools: [...this._handlers.keys(), ...state.dynamicTools.keys()],
|
|
391
420
|
prompts: prompts_data_1.ALL_PROMPTS.length,
|
|
392
421
|
});
|
|
393
422
|
return mcp;
|
|
394
423
|
}
|
|
395
424
|
/**
|
|
396
|
-
* Probe optional capabilities once per
|
|
425
|
+
* Probe optional capabilities once per tenant, WITHOUT blocking the MCP handshake. These do
|
|
397
426
|
* network I/O (DataForge/Global Search probes, and the publishing app's tools/list, which can
|
|
398
427
|
* be slow) — awaiting would delay connect past the client's init timeout. Discovered tools
|
|
399
|
-
* register into
|
|
400
|
-
* notifications/tools/list_changed) and into the
|
|
428
|
+
* register into the tenant's live session servers as they resolve (the SDK emits
|
|
429
|
+
* notifications/tools/list_changed) and into the tenant state for its future sessions.
|
|
401
430
|
*
|
|
402
431
|
* MUST be called from within the per-request context ({@link runWithContext}) so the probe's
|
|
403
432
|
* Creatio calls carry the caller's identity/token — otherwise broker mode resolves no user.
|
|
433
|
+
* `baseUrlOverride` selects the tenant; absent ⇒ the single default tenant.
|
|
404
434
|
*/
|
|
405
|
-
ensureCapabilitiesProbed() {
|
|
406
|
-
|
|
435
|
+
ensureCapabilitiesProbed(baseUrlOverride) {
|
|
436
|
+
const state = this._registry.getState(this._tenantKey(baseUrlOverride));
|
|
437
|
+
if (state.probeComplete || state.probeInFlight) {
|
|
407
438
|
return;
|
|
408
439
|
}
|
|
409
|
-
|
|
410
|
-
void this._prepareTools()
|
|
440
|
+
state.probeInFlight = true;
|
|
441
|
+
void this._prepareTools(state)
|
|
411
442
|
.then((complete) => {
|
|
412
|
-
|
|
443
|
+
state.probeComplete = complete;
|
|
413
444
|
})
|
|
414
445
|
.catch((err) => log_1.default.warn('mcp.prepare.error', { error: String(err) }))
|
|
415
446
|
.finally(() => {
|
|
416
|
-
|
|
447
|
+
state.probeInFlight = false;
|
|
417
448
|
});
|
|
418
449
|
}
|
|
419
450
|
/** Untrack and close one session's server (call when its transport closes). */
|
|
420
451
|
releaseSessionServer(mcp) {
|
|
421
|
-
this.
|
|
452
|
+
this._registry.findBySession(mcp)?.sessionServers.delete(mcp);
|
|
422
453
|
try {
|
|
423
454
|
mcp.close();
|
|
424
455
|
}
|
|
@@ -426,9 +457,9 @@ class Server {
|
|
|
426
457
|
log_1.default.warn('mcp.stop.failed', { error: String(err) });
|
|
427
458
|
}
|
|
428
459
|
}
|
|
429
|
-
/** Close every live session server (process shutdown). */
|
|
460
|
+
/** Close every live session server across all tenants (process shutdown). */
|
|
430
461
|
async stopAll() {
|
|
431
|
-
for (const mcp of this.
|
|
462
|
+
for (const mcp of this._registry.allSessionServers()) {
|
|
432
463
|
try {
|
|
433
464
|
mcp.close();
|
|
434
465
|
}
|
|
@@ -436,7 +467,7 @@ class Server {
|
|
|
436
467
|
log_1.default.warn('mcp.stop.failed', { error: String(err) });
|
|
437
468
|
}
|
|
438
469
|
}
|
|
439
|
-
this.
|
|
470
|
+
this._registry.clear();
|
|
440
471
|
log_1.default.serverStop(this._serverName, this._serverVersion);
|
|
441
472
|
}
|
|
442
473
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { ToolHandler } from './tool-preparer';
|
|
3
|
+
/**
|
|
4
|
+
* Tenant bucket for every single-tenant auth mode (legacy / client-credentials / delegated /
|
|
5
|
+
* broker) and any gateway request that does NOT override the base URL. In those modes there is
|
|
6
|
+
* exactly one Creatio instance, so one shared bucket is correct and the behaviour is identical to
|
|
7
|
+
* the pre-multitenant server. Only a gateway request carrying `X-Creatio-Base-Url` gets its own
|
|
8
|
+
* per-instance bucket — that is where cross-tenant isolation actually matters.
|
|
9
|
+
*/
|
|
10
|
+
export declare const DEFAULT_TENANT_KEY = "__default__";
|
|
11
|
+
/** A capability tool discovered for one tenant: its MCP descriptor + the handler that runs it. */
|
|
12
|
+
export interface DynamicTool {
|
|
13
|
+
descriptor: unknown;
|
|
14
|
+
handler: ToolHandler;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Per-tenant capability + dynamic-tool state — one entry per effective Creatio base URL. Each
|
|
18
|
+
* tenant carries its OWN optional-capability probe verdicts, the tools those capabilities
|
|
19
|
+
* registered, and the live session servers to push late-discovered tools into. Keeping all of this
|
|
20
|
+
* per-tenant is what stops tenant A's capability verdict (DataForge on/off) or A's published tools
|
|
21
|
+
* from leaking to tenant B on a shared multi-tenant (gateway) deployment — the previous design
|
|
22
|
+
* probed once from the first caller and applied that verdict to everyone.
|
|
23
|
+
*/
|
|
24
|
+
export declare class TenantToolState {
|
|
25
|
+
readonly capabilities: Map<string, boolean>;
|
|
26
|
+
readonly cooldownUntil: Map<string, number>;
|
|
27
|
+
readonly dynamicTools: Map<string, DynamicTool>;
|
|
28
|
+
readonly sessionServers: Set<McpServer>;
|
|
29
|
+
probeComplete: boolean;
|
|
30
|
+
probeInFlight: boolean;
|
|
31
|
+
lastAccessMs: number;
|
|
32
|
+
constructor(now: number);
|
|
33
|
+
}
|
|
34
|
+
export interface TenantToolRegistryOptions {
|
|
35
|
+
/** Max distinct tenants retained; idle, session-less tenants are evicted LRU past this. */
|
|
36
|
+
maxTenants?: number;
|
|
37
|
+
/** Idle TTL (ms): a tenant with NO live sessions is dropped after this long untouched. */
|
|
38
|
+
ttlMs?: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Holds {@link TenantToolState} per tenant with TTL + LRU eviction — the tool-surface analog of a
|
|
42
|
+
* tenant client pool. A tenant with live session servers is NEVER evicted (its dynamic tools back
|
|
43
|
+
* those live sessions); only idle, session-less tenants are pruned, so memory stays bounded as the
|
|
44
|
+
* number of distinct Creatio instances seen by a gateway deployment grows.
|
|
45
|
+
*/
|
|
46
|
+
export declare class TenantToolRegistry {
|
|
47
|
+
private readonly _maxTenants;
|
|
48
|
+
private readonly _ttlMs;
|
|
49
|
+
private readonly _tenants;
|
|
50
|
+
get size(): number;
|
|
51
|
+
constructor(options?: TenantToolRegistryOptions);
|
|
52
|
+
/** Evict idle, session-less tenants past the TTL, then enforce the LRU cap (still only over
|
|
53
|
+
* session-less tenants — an active tenant whose dynamic tools back a live session is kept). */
|
|
54
|
+
private _prune;
|
|
55
|
+
/** The state for a tenant, creating it on first use. Touches recency, then prunes stale peers —
|
|
56
|
+
* pruning AFTER the insert/touch so the cap is enforced on the resulting set (never left over
|
|
57
|
+
* by one) and the just-accessed tenant is the most-recently-used, so never the one evicted. */
|
|
58
|
+
getState(tenantKey: string, now?: number): TenantToolState;
|
|
59
|
+
/** The tenant state owning a given session server (to release it when its transport closes). */
|
|
60
|
+
findBySession(mcp: McpServer): TenantToolState | undefined;
|
|
61
|
+
/** Every live session server across all tenants (process shutdown). */
|
|
62
|
+
allSessionServers(): McpServer[];
|
|
63
|
+
/** Drop all tenant state (process shutdown). */
|
|
64
|
+
clear(): void;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=tenant-tool-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-tool-registry.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/tenant-tool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AAEhD,kGAAkG;AAClG,MAAM,WAAW,WAAW;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,qBAAa,eAAe;IAC3B,SAAgB,YAAY,uBAA8B;IAC1D,SAAgB,aAAa,sBAA6B;IAC1D,SAAgB,YAAY,2BAAkC;IAC9D,SAAgB,cAAc,iBAAwB;IAC/C,aAAa,UAAS;IACtB,aAAa,UAAS;IACtB,YAAY,EAAE,MAAM,CAAC;gBAEhB,GAAG,EAAE,MAAM;CAGvB;AAED,MAAM,WAAW,yBAAyB;IACzC,2FAA2F;IAC3F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAE/D,IAAW,IAAI,IAAI,MAAM,CAExB;gBAEW,OAAO,GAAE,yBAA8B;IAKnD;oGACgG;IAChG,OAAO,CAAC,MAAM;IAsBd;;oGAEgG;IACzF,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,eAAe;IAa7E,gGAAgG;IACzF,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,eAAe,GAAG,SAAS;IASjE,uEAAuE;IAChE,iBAAiB,IAAI,SAAS,EAAE;IAUvC,gDAAgD;IACzC,KAAK,IAAI,IAAI;CAGpB"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TenantToolRegistry = exports.TenantToolState = exports.DEFAULT_TENANT_KEY = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Tenant bucket for every single-tenant auth mode (legacy / client-credentials / delegated /
|
|
6
|
+
* broker) and any gateway request that does NOT override the base URL. In those modes there is
|
|
7
|
+
* exactly one Creatio instance, so one shared bucket is correct and the behaviour is identical to
|
|
8
|
+
* the pre-multitenant server. Only a gateway request carrying `X-Creatio-Base-Url` gets its own
|
|
9
|
+
* per-instance bucket — that is where cross-tenant isolation actually matters.
|
|
10
|
+
*/
|
|
11
|
+
exports.DEFAULT_TENANT_KEY = '__default__';
|
|
12
|
+
/**
|
|
13
|
+
* Per-tenant capability + dynamic-tool state — one entry per effective Creatio base URL. Each
|
|
14
|
+
* tenant carries its OWN optional-capability probe verdicts, the tools those capabilities
|
|
15
|
+
* registered, and the live session servers to push late-discovered tools into. Keeping all of this
|
|
16
|
+
* per-tenant is what stops tenant A's capability verdict (DataForge on/off) or A's published tools
|
|
17
|
+
* from leaking to tenant B on a shared multi-tenant (gateway) deployment — the previous design
|
|
18
|
+
* probed once from the first caller and applied that verdict to everyone.
|
|
19
|
+
*/
|
|
20
|
+
class TenantToolState {
|
|
21
|
+
capabilities = new Map();
|
|
22
|
+
cooldownUntil = new Map();
|
|
23
|
+
dynamicTools = new Map();
|
|
24
|
+
sessionServers = new Set();
|
|
25
|
+
probeComplete = false;
|
|
26
|
+
probeInFlight = false;
|
|
27
|
+
lastAccessMs;
|
|
28
|
+
constructor(now) {
|
|
29
|
+
this.lastAccessMs = now;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.TenantToolState = TenantToolState;
|
|
33
|
+
/**
|
|
34
|
+
* Holds {@link TenantToolState} per tenant with TTL + LRU eviction — the tool-surface analog of a
|
|
35
|
+
* tenant client pool. A tenant with live session servers is NEVER evicted (its dynamic tools back
|
|
36
|
+
* those live sessions); only idle, session-less tenants are pruned, so memory stays bounded as the
|
|
37
|
+
* number of distinct Creatio instances seen by a gateway deployment grows.
|
|
38
|
+
*/
|
|
39
|
+
class TenantToolRegistry {
|
|
40
|
+
_maxTenants;
|
|
41
|
+
_ttlMs;
|
|
42
|
+
_tenants = new Map();
|
|
43
|
+
get size() {
|
|
44
|
+
return this._tenants.size;
|
|
45
|
+
}
|
|
46
|
+
constructor(options = {}) {
|
|
47
|
+
this._maxTenants = options.maxTenants ?? 100;
|
|
48
|
+
this._ttlMs = options.ttlMs ?? 30 * 60_000;
|
|
49
|
+
}
|
|
50
|
+
/** Evict idle, session-less tenants past the TTL, then enforce the LRU cap (still only over
|
|
51
|
+
* session-less tenants — an active tenant whose dynamic tools back a live session is kept). */
|
|
52
|
+
_prune(now) {
|
|
53
|
+
for (const [key, state] of this._tenants) {
|
|
54
|
+
if (state.sessionServers.size === 0 && now - state.lastAccessMs > this._ttlMs) {
|
|
55
|
+
this._tenants.delete(key);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (this._tenants.size <= this._maxTenants) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const evictable = Array.from(this._tenants.entries())
|
|
62
|
+
.filter(([, state]) => state.sessionServers.size === 0)
|
|
63
|
+
.sort((a, b) => a[1].lastAccessMs - b[1].lastAccessMs);
|
|
64
|
+
let over = this._tenants.size - this._maxTenants;
|
|
65
|
+
for (const [key] of evictable) {
|
|
66
|
+
if (over <= 0) {
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
this._tenants.delete(key);
|
|
70
|
+
over--;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** The state for a tenant, creating it on first use. Touches recency, then prunes stale peers —
|
|
74
|
+
* pruning AFTER the insert/touch so the cap is enforced on the resulting set (never left over
|
|
75
|
+
* by one) and the just-accessed tenant is the most-recently-used, so never the one evicted. */
|
|
76
|
+
getState(tenantKey, now = Date.now()) {
|
|
77
|
+
const existing = this._tenants.get(tenantKey);
|
|
78
|
+
if (existing) {
|
|
79
|
+
existing.lastAccessMs = now;
|
|
80
|
+
this._prune(now);
|
|
81
|
+
return existing;
|
|
82
|
+
}
|
|
83
|
+
const state = new TenantToolState(now);
|
|
84
|
+
this._tenants.set(tenantKey, state);
|
|
85
|
+
this._prune(now);
|
|
86
|
+
return state;
|
|
87
|
+
}
|
|
88
|
+
/** The tenant state owning a given session server (to release it when its transport closes). */
|
|
89
|
+
findBySession(mcp) {
|
|
90
|
+
for (const state of this._tenants.values()) {
|
|
91
|
+
if (state.sessionServers.has(mcp)) {
|
|
92
|
+
return state;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
/** Every live session server across all tenants (process shutdown). */
|
|
98
|
+
allSessionServers() {
|
|
99
|
+
const servers = [];
|
|
100
|
+
for (const state of this._tenants.values()) {
|
|
101
|
+
for (const mcp of state.sessionServers) {
|
|
102
|
+
servers.push(mcp);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return servers;
|
|
106
|
+
}
|
|
107
|
+
/** Drop all tenant state (process shutdown). */
|
|
108
|
+
clear() {
|
|
109
|
+
this._tenants.clear();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.TenantToolRegistry = TenantToolRegistry;
|
|
113
|
+
//# sourceMappingURL=tenant-tool-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-tool-registry.js","sourceRoot":"","sources":["../../../src/server/mcp/tenant-tool-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
|
package/dist/utils/index.js
CHANGED
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,wCAAsB;AACtB,4CAA0B;AAC1B,yCAAuB;AACvB,4CAA0B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,wCAAsB;AACtB,4CAA0B;AAC1B,yCAAuB;AACvB,4CAA0B;AAC1B,2CAAyB"}
|