v0.6.5
Per-tenant tool isolation for multi-tenant (gateway) deployments, plus a reusable live-regression
harness. Live-verified across all five auth modes against two real Creatio instances; 583 tests,
94.7% line coverage.
Added
- Per-tenant dynamic-tool isolation (
gatewaymode) — a single MCP deployment serving many
Creatio instances now keeps each tenant's tool surface separate, keyed by the effective base URL
(X-Creatio-Base-Url, elseCREATIO_BASE_URL). Optional capabilities are probed per tenant and
the tools they expose — DataForge, Global Search, and the dynamically discovered per-instance
published tools — register only for the tenant they were found on. A newTenantToolRegistry
(src/server/mcp/tenant-tool-registry.ts) holds the per-tenant capability verdicts, dynamic tools,
and live session servers, with idle-TTL + LRU eviction that never drops a tenant with a live
session. Single-tenant modes (everything exceptgatewaywith an override) map to one bucket, so
their behavior is unchanged. - Reusable live-regression harness (
scripts/live-regression.mjs) — config-driven end-to-end
smoke against a real Creatio over MCP: drives stdio + every HTTP auth mode (incl. broker DCR + PKCE
with a local callback catcher), asserts the per-instance tool surface, and runs an opt-in full CRUD
lifecycle (create → read-back → update → delete → verify-gone). Local credentials live in a
gitignoredscripts/live-regression.local.json;*.example.jsonis the committed schema. Not part
ofnpm test.
Fixed
- Cross-tenant capability bleed — previously the optional-capability probe (DataForge / Global
Search / published tools) ran once per process from the first caller and applied that verdict to
every tenant, so on a heterogeneousgatewaydeployment one instance's tools ordescribe-entity
routing could surface for another. The probe and tool registration are now per-tenant.
Changed
Server.createSessionServer/ensureCapabilitiesProbedtake the request's base-URL override and
bind the session + probe to that tenant;_describeEntityresolves DataForge readiness per tenant.