@zackbart/connecta 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 (64) hide show
  1. package/CHANGELOG.md +169 -0
  2. package/README.md +40 -5
  3. package/SECURITY.md +10 -6
  4. package/dist/activity.d.ts +8 -0
  5. package/dist/activity.d.ts.map +1 -1
  6. package/dist/activity.js +1 -0
  7. package/dist/activity.js.map +1 -1
  8. package/dist/connectors/api.d.ts +13 -0
  9. package/dist/connectors/api.d.ts.map +1 -1
  10. package/dist/connectors/api.js +2 -0
  11. package/dist/connectors/api.js.map +1 -1
  12. package/dist/connectors/remote-mcp.d.ts +13 -0
  13. package/dist/connectors/remote-mcp.d.ts.map +1 -1
  14. package/dist/connectors/remote-mcp.js +2 -0
  15. package/dist/connectors/remote-mcp.js.map +1 -1
  16. package/dist/execute.d.ts +4 -4
  17. package/dist/execute.d.ts.map +1 -1
  18. package/dist/execute.js.map +1 -1
  19. package/dist/index.d.ts +35 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +27 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/meta-tools.d.ts +22 -4
  24. package/dist/meta-tools.d.ts.map +1 -1
  25. package/dist/meta-tools.js +91 -18
  26. package/dist/meta-tools.js.map +1 -1
  27. package/dist/registry.d.ts +183 -2
  28. package/dist/registry.d.ts.map +1 -1
  29. package/dist/registry.js +293 -27
  30. package/dist/registry.js.map +1 -1
  31. package/dist/server.d.ts +7 -1
  32. package/dist/server.d.ts.map +1 -1
  33. package/dist/server.js +67 -7
  34. package/dist/server.js.map +1 -1
  35. package/dist/skills.d.ts +52 -1
  36. package/dist/skills.d.ts.map +1 -1
  37. package/dist/skills.js +161 -1
  38. package/dist/skills.js.map +1 -1
  39. package/dist/toolkits.d.ts +44 -0
  40. package/dist/toolkits.d.ts.map +1 -0
  41. package/dist/toolkits.js +134 -0
  42. package/dist/toolkits.js.map +1 -0
  43. package/dist/types.d.ts +20 -1
  44. package/dist/types.d.ts.map +1 -1
  45. package/dist/ui.d.ts +28 -0
  46. package/dist/ui.d.ts.map +1 -1
  47. package/dist/ui.js +89 -8
  48. package/dist/ui.js.map +1 -1
  49. package/dist/version.d.ts +1 -1
  50. package/dist/version.js +1 -1
  51. package/package.json +5 -2
  52. package/src/activity.ts +9 -0
  53. package/src/connectors/api.ts +15 -0
  54. package/src/connectors/remote-mcp.ts +15 -0
  55. package/src/execute.ts +4 -4
  56. package/src/index.ts +69 -1
  57. package/src/meta-tools.ts +126 -25
  58. package/src/registry.ts +416 -29
  59. package/src/server.ts +98 -7
  60. package/src/skills.ts +184 -1
  61. package/src/toolkits.ts +215 -0
  62. package/src/types.ts +20 -1
  63. package/src/ui.ts +92 -8
  64. package/src/version.ts +1 -1
package/dist/registry.js CHANGED
@@ -1,7 +1,81 @@
1
+ import { splitAddress } from "./toolkits.js";
1
2
  const ID_RE = /^[a-z0-9_-]+$/;
2
3
  const DEFAULT_TTL_SECONDS = 300;
3
4
  const DEFAULT_STALE_SECONDS = 3600;
4
- const DEFAULT_MAX_RESULT_BYTES = 50_000;
5
+ export const DEFAULT_MAX_RESULT_BYTES = 50_000;
6
+ /**
7
+ * Smallest accepted inline-result cap. One byte is pathological but harmless:
8
+ * `alignEndToCharBoundary` widens a window narrower than the codepoint at the
9
+ * offset, so even a 1-byte cap still truncates sanely and still pages. Caps
10
+ * that small already ship in the test suite (4 and 5), so the floor is placed
11
+ * where it excludes only values that are *broken* rather than merely tiny.
12
+ */
13
+ export const MIN_MAX_RESULT_BYTES = 1;
14
+ /**
15
+ * The one definition of a usable `maxResultBytes`: a finite whole number of at
16
+ * least {@link MIN_MAX_RESULT_BYTES} bytes. Shared by all three intake points
17
+ * — deployment config, the per-connector override, and `get_result`'s
18
+ * `maxBytes` argument — so a value that is valid at one is valid at all.
19
+ *
20
+ * Everything else is rejected rather than coerced, because each rejected shape
21
+ * silently does something *worse* than the default: `0`/`NaN` serve an empty
22
+ * head (`slice(0, 0)`) and make paging fail to advance, negatives serve a
23
+ * LARGER head than asked for (`slice(0, -1)` counts from the end) while still
24
+ * claiming truncation, and `Infinity` disables the guard with no notice.
25
+ */
26
+ export function isValidMaxResultBytes(value) {
27
+ return Number.isInteger(value) && value >= MIN_MAX_RESULT_BYTES;
28
+ }
29
+ /**
30
+ * Resolve a configured cap against the value it inherits, dropping anything
31
+ * `isValidMaxResultBytes` rejects. Operator-facing surfaces pair this with a
32
+ * startup warning (see `Registry.checkResultCaps`) so the fallback is never
33
+ * silent; the resolution itself stays total so no call site has to cope with
34
+ * a broken cap.
35
+ */
36
+ export function resolveMaxResultBytes(value, inherited) {
37
+ return value !== undefined && isValidMaxResultBytes(value)
38
+ ? value
39
+ : inherited;
40
+ }
41
+ /**
42
+ * Recent real-call outcomes per connector, as observed by ONE view.
43
+ *
44
+ * The deployment keeps one log, and each toolkit keeps its own. That split is a
45
+ * scope boundary, not bookkeeping: `lastError` is a downstream error string
46
+ * that routinely names the tool that failed, and `list_connectors` returns the
47
+ * observation verbatim. Sharing one log would let a toolkit read back the tools
48
+ * and failures of a sibling toolkit through a connector they happen to share —
49
+ * and let a sibling's failures flip this view's reported status. A scoped view
50
+ * reads back only the calls it made itself.
51
+ */
52
+ export class HealthLog {
53
+ observations = new Map();
54
+ recordSuccess(id, latencyMs) {
55
+ const previous = this.observations.get(id);
56
+ this.observations.set(id, {
57
+ ...previous,
58
+ lastSuccessAt: new Date().toISOString(),
59
+ lastLatencyMs: latencyMs,
60
+ consecutiveFailures: 0,
61
+ lastError: undefined,
62
+ });
63
+ }
64
+ recordFailure(id, latencyMs, error) {
65
+ const previous = this.observations.get(id);
66
+ this.observations.set(id, {
67
+ ...previous,
68
+ lastFailureAt: new Date().toISOString(),
69
+ lastLatencyMs: latencyMs,
70
+ consecutiveFailures: (previous?.consecutiveFailures ?? 0) + 1,
71
+ lastError: msg(error),
72
+ });
73
+ }
74
+ get(id) {
75
+ const observation = this.observations.get(id);
76
+ return observation ? { ...observation } : undefined;
77
+ }
78
+ }
5
79
  function namespaced(storage, prefix) {
6
80
  return {
7
81
  get: (k) => storage.get(prefix + k),
@@ -22,7 +96,8 @@ export class Registry {
22
96
  connectors = new Map();
23
97
  cache = new Map();
24
98
  invalidated = new Set();
25
- health = new Map();
99
+ /** Deployment-wide observations — every call, whatever view made it. */
100
+ health = new HealthLog();
26
101
  ttlMs;
27
102
  staleMs;
28
103
  persistToolCatalog;
@@ -35,7 +110,7 @@ export class Registry {
35
110
  this.staleMs =
36
111
  (opts.toolCatalogStaleSeconds ?? DEFAULT_STALE_SECONDS) * 1000;
37
112
  this.persistToolCatalog = opts.persistToolCatalog ?? true;
38
- this.maxResultBytes = opts.maxResultBytes ?? DEFAULT_MAX_RESULT_BYTES;
113
+ this.maxResultBytes = resolveMaxResultBytes(opts.maxResultBytes, DEFAULT_MAX_RESULT_BYTES);
39
114
  for (const c of connectors) {
40
115
  if (!ID_RE.test(c.id)) {
41
116
  throw new Error(`Invalid connector id "${c.id}": must match ${ID_RE.source}`);
@@ -46,6 +121,37 @@ export class Registry {
46
121
  this.connectors.set(c.id, c);
47
122
  }
48
123
  this.checkConventions(opts.logger);
124
+ this.checkResultCaps(opts.logger, opts.maxResultBytes);
125
+ }
126
+ /**
127
+ * Warn once per unusable result cap, at construction time — the same
128
+ * "runs fine but is surely unintended" channel as the insecure-config
129
+ * warnings in `createConnecta`. A rejected cap can't be honoured, and
130
+ * honouring it *approximately* is exactly the inversion issue #32 is about,
131
+ * so the value is dropped in favour of what it inherits and the operator is
132
+ * told which one is actually in force.
133
+ */
134
+ checkResultCaps(logger, configured) {
135
+ if (configured !== undefined && !isValidMaxResultBytes(configured)) {
136
+ logger.warn(`[connecta] maxResultBytes ${configured} is not a whole number of ` +
137
+ `bytes >= ${MIN_MAX_RESULT_BYTES}: it would serve an empty, ` +
138
+ "oversized, or unguarded result instead of truncating. Using the " +
139
+ `default ${DEFAULT_MAX_RESULT_BYTES} instead.`);
140
+ }
141
+ for (const c of this.connectors.values()) {
142
+ if (c.maxResultBytes !== undefined &&
143
+ !isValidMaxResultBytes(c.maxResultBytes)) {
144
+ // The number quoted here is `this.maxResultBytes` because that is
145
+ // literally what a call falls back to: meta-tools reads the inherited
146
+ // cap off `RegistryView.maxResultBytes`, so the warned value and the
147
+ // runtime value are the same field rather than two copies of it.
148
+ logger.warn(`[connecta] connector "${c.id}" sets maxResultBytes ` +
149
+ `${c.maxResultBytes}, which is not a whole number of bytes >= ` +
150
+ `${MIN_MAX_RESULT_BYTES}. Ignoring the override — the connector ` +
151
+ `inherits the deployment-wide cap calls fall back to ` +
152
+ `(${this.maxResultBytes}).`);
153
+ }
154
+ }
49
155
  }
50
156
  /**
51
157
  * Warn once per convention violation at construction time. Static only —
@@ -100,15 +206,13 @@ export class Registry {
100
206
  }
101
207
  /** Resolve "<connectorId>.<toolName>" → connector + tool name. */
102
208
  resolveAddress(address) {
103
- const dot = address.indexOf(".");
104
- if (dot <= 0 || dot === address.length - 1)
209
+ const parts = splitAddress(address);
210
+ if (!parts)
105
211
  return null;
106
- const id = address.slice(0, dot);
107
- const toolName = address.slice(dot + 1);
108
- const connector = this.connectors.get(id);
212
+ const connector = this.connectors.get(parts.connectorId);
109
213
  if (!connector)
110
214
  return null;
111
- return { connector, toolName };
215
+ return { connector, toolName: parts.toolName };
112
216
  }
113
217
  catalogKey(id) {
114
218
  return `catalog:${id}`;
@@ -227,28 +331,24 @@ export class Registry {
227
331
  return hit && hit.staleUntil > Date.now() ? hit.tools : undefined;
228
332
  }
229
333
  recordSuccess(id, latencyMs) {
230
- const previous = this.health.get(id);
231
- this.health.set(id, {
232
- ...previous,
233
- lastSuccessAt: new Date().toISOString(),
234
- lastLatencyMs: latencyMs,
235
- consecutiveFailures: 0,
236
- lastError: undefined,
237
- });
334
+ this.health.recordSuccess(id, latencyMs);
238
335
  }
239
336
  recordFailure(id, latencyMs, error) {
240
- const previous = this.health.get(id);
241
- this.health.set(id, {
242
- ...previous,
243
- lastFailureAt: new Date().toISOString(),
244
- lastLatencyMs: latencyMs,
245
- consecutiveFailures: (previous?.consecutiveFailures ?? 0) + 1,
246
- lastError: msg(error),
247
- });
337
+ this.health.recordFailure(id, latencyMs, error);
248
338
  }
249
339
  healthFor(id) {
250
- const observation = this.health.get(id);
251
- return observation ? { ...observation } : undefined;
340
+ return this.health.get(id);
341
+ }
342
+ /**
343
+ * Whether ANY view of this deployment has seen a successful call to `id` —
344
+ * a bare boolean, never the observation. Connector liveness (reachable,
345
+ * credentials still valid) is a deployment-level fact, not a per-view one, so
346
+ * `list_connectors` may classify a connector as ok/unknown from it. The
347
+ * observation itself — `lastError` above all, which names the tool that
348
+ * failed — stays strictly per view.
349
+ */
350
+ hasObservedSuccess(id) {
351
+ return this.health.get(id)?.lastSuccessAt !== undefined;
252
352
  }
253
353
  /** Best-effort connector status for list_connectors. */
254
354
  async statusFor(id, baseUrl, requestScope = {}) {
@@ -296,4 +396,170 @@ export class Registry {
296
396
  }
297
397
  }
298
398
  }
399
+ /**
400
+ * Per-toolkit HealthLogs, keyed by registry and then by toolkit name.
401
+ *
402
+ * Module-scoped rather than a `Registry` member on purpose: `Registry`'s type
403
+ * is part of the public API surface (`Connecta.registry`), and this is internal
404
+ * factoring only `ScopedRegistry` may touch. The WeakMap keeps the logs alive
405
+ * exactly as long as their registry, and the inner map is bounded by the
406
+ * number of configured toolkits.
407
+ */
408
+ const toolkitHealthLogs = new WeakMap();
409
+ /** The long-lived log one toolkit records into; created on first use. */
410
+ function toolkitHealthLog(base, toolkitName) {
411
+ let logs = toolkitHealthLogs.get(base);
412
+ if (!logs) {
413
+ logs = new Map();
414
+ toolkitHealthLogs.set(base, logs);
415
+ }
416
+ let log = logs.get(toolkitName);
417
+ if (!log) {
418
+ log = new HealthLog();
419
+ logs.set(toolkitName, log);
420
+ }
421
+ return log;
422
+ }
423
+ /**
424
+ * THE toolkit enforcement point (issue #22).
425
+ *
426
+ * A filtered VIEW of one long-lived `Registry`: same connectors, same tool
427
+ * caches, same health — narrowed to the connectors and tool addresses one
428
+ * toolkit selects. `serveMcp` builds it once per scoped connection and hands it
429
+ * to `registerMetaTools`/`registerExecuteTool`, so `list_connectors`,
430
+ * `search_tools`, `describe_tools`, `call_tool`, `call_destructive_tool`,
431
+ * `batch_call`, `authorize_connector`, `get_result`, `skills`, and the
432
+ * `execute_code` host bridge all inherit the boundary from here instead of
433
+ * re-implementing nine checks.
434
+ *
435
+ * Two invariants make it reviewable:
436
+ *
437
+ * 1. **Indistinguishability.** Out-of-scope input fails through the SAME code
438
+ * path, with the same error class and message, as input naming something
439
+ * that does not exist at all. An out-of-scope CONNECTOR disappears from
440
+ * `resolveAddress`/`getConnector` (→ `Unknown address` / `Unknown
441
+ * connector`); an out-of-scope TOOL disappears from the catalog this view
442
+ * returns (→ `Unknown tool "<t>" on connector "<c>"`), which is exactly the
443
+ * error a misspelled tool name already produced. Scoping deliberately does
444
+ * NOT reject at `resolveAddress` for tools: that would answer with the
445
+ * connector-level message and make "hidden here" distinguishable from
446
+ * "never existed".
447
+ * 2. **It filters views, never state.** Every read delegates to the shared
448
+ * registry and filters the returned array, so the tool cache, the persisted
449
+ * catalog, and the health map stay whole and shared across scopes.
450
+ */
451
+ export class ScopedRegistry {
452
+ base;
453
+ toolkit;
454
+ /** This toolkit's own health observations — see HealthLog. */
455
+ health;
456
+ constructor(base, toolkit) {
457
+ this.base = base;
458
+ this.toolkit = toolkit;
459
+ this.health = toolkitHealthLog(base, toolkit.name);
460
+ }
461
+ get maxResultBytes() {
462
+ return this.base.maxResultBytes;
463
+ }
464
+ /** In scope AND actually registered. */
465
+ visible(id) {
466
+ return (this.toolkit.hasConnector(id) && this.base.getConnector(id) !== undefined);
467
+ }
468
+ /** Byte-identical to what the unscoped registry throws for an unknown id. */
469
+ unknownConnector(id) {
470
+ return new Error(`Unknown connector "${id}"`);
471
+ }
472
+ inScopeTools(id, tools) {
473
+ return tools.filter((tool) => this.toolkit.hasTool(id, tool.name));
474
+ }
475
+ listConnectors() {
476
+ return this.base
477
+ .listConnectors()
478
+ .filter((connector) => this.toolkit.hasConnector(connector.id));
479
+ }
480
+ getConnector(id) {
481
+ return this.visible(id) ? this.base.getConnector(id) : undefined;
482
+ }
483
+ resolveAddress(address) {
484
+ const resolved = this.base.resolveAddress(address);
485
+ if (!resolved)
486
+ return null;
487
+ // Connector-level only — see invariant 1 above.
488
+ return this.toolkit.hasConnector(resolved.connector.id) ? resolved : null;
489
+ }
490
+ async getTools(id, baseUrl, requestScope) {
491
+ if (!this.visible(id))
492
+ throw this.unknownConnector(id);
493
+ return this.inScopeTools(id, await this.base.getTools(id, baseUrl, requestScope));
494
+ }
495
+ async refreshTools(id, baseUrl, requestScope) {
496
+ if (!this.visible(id))
497
+ throw this.unknownConnector(id);
498
+ return this.inScopeTools(id, await this.base.refreshTools(id, baseUrl, requestScope));
499
+ }
500
+ peekTools(id) {
501
+ if (!this.visible(id))
502
+ return undefined;
503
+ const tools = this.base.peekTools(id);
504
+ return tools ? this.inScopeTools(id, tools) : undefined;
505
+ }
506
+ contextFor(id, baseUrl, requestScope = {}, callOptions = {}) {
507
+ // Unreachable through the meta-tools (they resolve first), so a throw here
508
+ // is a loud backstop rather than a silent grant of connector storage and
509
+ // credentials to a scope that may not see the connector.
510
+ if (!this.visible(id))
511
+ throw this.unknownConnector(id);
512
+ return this.base.contextFor(id, baseUrl, requestScope, callOptions);
513
+ }
514
+ /**
515
+ * Stashed oversized results are bound to the scope that produced them: a
516
+ * scoped session cannot page a result it could not have produced, and an id
517
+ * from another scope reads back as the ordinary "Unknown or expired result
518
+ * id". Unscoped sessions keep the historical `results:` prefix untouched.
519
+ */
520
+ resultsStorage() {
521
+ return namespaced(this.base.resultsStorage(), `toolkit:${this.toolkit.name}:`);
522
+ }
523
+ // Outcomes are recorded twice on purpose: the deployment-wide log keeps the
524
+ // operator surfaces complete, while the toolkit's own log is the ONLY one
525
+ // this view reads back — so `list_connectors` here never reports a sibling
526
+ // toolkit's failures, or the tool names their error strings carry.
527
+ recordSuccess(id, latencyMs) {
528
+ if (!this.visible(id))
529
+ return;
530
+ this.base.recordSuccess(id, latencyMs);
531
+ this.health.recordSuccess(id, latencyMs);
532
+ }
533
+ recordFailure(id, latencyMs, error) {
534
+ if (!this.visible(id))
535
+ return;
536
+ this.base.recordFailure(id, latencyMs, error);
537
+ this.health.recordFailure(id, latencyMs, error);
538
+ }
539
+ healthFor(id) {
540
+ return this.visible(id) ? this.health.get(id) : undefined;
541
+ }
542
+ /**
543
+ * Deliberately NOT per view: whether the connector has ever answered is a
544
+ * fact about the connector, not about a team's traffic, and withholding it
545
+ * would report every remote connector as "unknown" to a scoped session that
546
+ * has not called it yet. It carries no tool name, error text, or count — the
547
+ * per-view isolation of those, above, is unchanged.
548
+ */
549
+ hasObservedSuccess(id) {
550
+ return this.visible(id) ? this.base.hasObservedSuccess(id) : false;
551
+ }
552
+ async statusFor(id, baseUrl, requestScope = {}) {
553
+ // Same shape the unscoped registry returns for an unregistered id.
554
+ if (!this.visible(id)) {
555
+ return { state: "error", message: "Unknown connector" };
556
+ }
557
+ return this.base.statusFor(id, baseUrl, requestScope);
558
+ }
559
+ async invalidateStored(id) {
560
+ if (!this.visible(id))
561
+ return;
562
+ await this.base.invalidateStored(id);
563
+ }
564
+ }
299
565
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import type { ActivityReadGate, ActivityStore } from "./activity.js";
3
3
  import type { CredentialVault } from "./credentials.js";
4
- import type { Registry } from "./registry.js";
4
+ import { type Registry } from "./registry.js";
5
+ import { type Toolkit } from "./toolkits.js";
5
6
  import type { ConnectaBranding, Executor, InboundAuth, Logger } from "./types.js";
6
7
  export interface ServerOptions {
7
8
  registry: Registry;
@@ -23,6 +24,11 @@ export interface ServerOptions {
23
24
  credentialVault?: CredentialVault;
24
25
  /** Optional browser UI and OAuth result-page labels. */
25
26
  branding?: ConnectaBranding;
27
+ /**
28
+ * Validated named scopes, selected per connection with `?toolkit=<name>` on
29
+ * `/mcp`. Omit (or leave empty) and every connection sees the full registry.
30
+ */
31
+ toolkits?: ReadonlyMap<string, Toolkit>;
26
32
  }
27
33
  /** Build the Web-standard fetch handler that serves connecta. */
28
34
  export declare function createFetchHandler(opts: ServerOptions): (request: Request, runtimeContext?: RuntimeExecutionContext) => Promise<Response>;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,OAAO,KAAK,EAEV,gBAAgB,EAEhB,aAAa,EACd,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAGV,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,MAAM,EACP,MAAM,YAAY,CAAC;AAgBpB,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,UAAU,EAAE,qBAAqB,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yFAAyF;IACzF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,qFAAqF;IACrF,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,wDAAwD;IACxD,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AA2hBD,iEAAiE;AACjE,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,aAAa,GAClB,CACD,OAAO,EAAE,OAAO,EAChB,cAAc,CAAC,EAAE,uBAAuB,KACrC,OAAO,CAAC,QAAQ,CAAC,CAsNrB;AAED,UAAU,uBAAuB;IAC/B,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CAC5C"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,OAAO,KAAK,EAEV,gBAAgB,EAEhB,aAAa,EACd,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAkB,KAAK,QAAQ,EAAqB,MAAM,eAAe,CAAC;AACjF,OAAO,EAAmB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,EAGV,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,MAAM,EACP,MAAM,YAAY,CAAC;AAgBpB,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,UAAU,EAAE,qBAAqB,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yFAAyF;IACzF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,qFAAqF;IACrF,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,wDAAwD;IACxD,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAqmBD,iEAAiE;AACjE,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,aAAa,GAClB,CACD,OAAO,EAAE,OAAO,EAChB,cAAc,CAAC,EAAE,uBAAuB,KACrC,OAAO,CAAC,QAAQ,CAAC,CAiOrB;AAED,UAAU,uBAAuB;IAC/B,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CAC5C"}
package/dist/server.js CHANGED
@@ -4,6 +4,8 @@ import { registerExecuteTool } from "./execute.js";
4
4
  import { registerMetaTools } from "./meta-tools.js";
5
5
  import { CONNECTA_INSTRUCTIONS } from "./skills.js";
6
6
  import { InvalidActivityCursorError } from "./activity.js";
7
+ import { ScopedRegistry } from "./registry.js";
8
+ import { TOOLKIT_NAME_RE } from "./toolkits.js";
7
9
  import { CONNECTA_FAVICON_ICO } from "./favicon.js";
8
10
  import { buildUiData, CONNECTA_FAVICON_SVG, resolveBranding, renderUiHtml, } from "./ui.js";
9
11
  const CORS_HEADERS = {
@@ -347,7 +349,57 @@ async function handleCredentialRequest(request, connectorId, action, opts, baseU
347
349
  }
348
350
  return privateJson({ error: "method not allowed" }, { status: 405 });
349
351
  }
350
- async function serveMcp(request, opts, baseUrl, actor, runtimeContext) {
352
+ /** Length beyond which a rejected toolkit name is not echoed back. */
353
+ const MAX_ECHOED_TOOLKIT_NAME = 64;
354
+ /**
355
+ * Resolve `?toolkit=<name>` into the registry view this connection may see.
356
+ *
357
+ * - absent → the full registry, byte-identical to a deployment with no toolkits
358
+ * - known → a `ScopedRegistry` over that toolkit (the one enforcement point)
359
+ * - anything else, including `?toolkit=` with an empty value → an explicit
360
+ * error. Never a silent fallback to the full registry.
361
+ *
362
+ * The error deliberately does not enumerate the configured toolkits: the name
363
+ * selects a scope, so a wrong guess gets a flat "unknown", not a directory.
364
+ */
365
+ function resolveToolkitScope(url, registry, toolkits) {
366
+ const requested = url.searchParams.get("toolkit");
367
+ if (requested === null)
368
+ return { ok: true, scope: { registry } };
369
+ const toolkit = toolkits?.get(requested);
370
+ if (toolkit) {
371
+ return {
372
+ ok: true,
373
+ scope: {
374
+ registry: new ScopedRegistry(registry, toolkit),
375
+ toolkitId: toolkit.name,
376
+ },
377
+ };
378
+ }
379
+ const label = requested.length <= MAX_ECHOED_TOOLKIT_NAME &&
380
+ TOOLKIT_NAME_RE.test(requested)
381
+ ? `"${requested}"`
382
+ : "requested";
383
+ return {
384
+ ok: false,
385
+ response: new Response(JSON.stringify({
386
+ jsonrpc: "2.0",
387
+ id: null,
388
+ error: {
389
+ code: -32600,
390
+ message: `Unknown toolkit ${label}. Check the ?toolkit= value in this ` +
391
+ "deployment's MCP endpoint URL with the operator.",
392
+ },
393
+ }), {
394
+ status: 404,
395
+ headers: {
396
+ "Content-Type": "application/json",
397
+ "Cache-Control": "no-store",
398
+ },
399
+ }),
400
+ };
401
+ }
402
+ async function serveMcp(request, opts, baseUrl, actor, scope, runtimeContext) {
351
403
  // Fresh McpServer + transport per request (SDK ≥1.26 requirement), stateless.
352
404
  const server = new McpServer(opts.serverInfo, {
353
405
  instructions: CONNECTA_INSTRUCTIONS,
@@ -361,20 +413,24 @@ async function serveMcp(request, opts, baseUrl, actor, runtimeContext) {
361
413
  ...(opts.activityDeploymentId
362
414
  ? { deploymentId: opts.activityDeploymentId }
363
415
  : {}),
416
+ ...(scope.toolkitId ? { toolkitId: scope.toolkitId } : {}),
364
417
  ...(runtimeContext?.waitUntil
365
418
  ? { defer: runtimeContext.waitUntil.bind(runtimeContext) }
366
419
  : {}),
367
420
  logger: opts.logger,
368
421
  }
369
422
  : undefined;
370
- registerMetaTools(server, opts.registry, {
423
+ // `scope.registry` is the connection's VIEW — the full registry, or one
424
+ // toolkit's ScopedRegistry. Nothing below may reach for `opts.registry`.
425
+ const registry = scope.registry;
426
+ registerMetaTools(server, registry, {
371
427
  baseUrl,
372
428
  activity,
373
429
  defaultToolTimeoutMs: opts.defaultToolTimeoutMs,
374
430
  probeTimeoutMs: opts.probeTimeoutMs,
375
431
  });
376
432
  if (opts.executor) {
377
- registerExecuteTool(server, opts.registry, {
433
+ registerExecuteTool(server, registry, {
378
434
  baseUrl,
379
435
  executor: opts.executor,
380
436
  logger: opts.logger,
@@ -566,11 +622,15 @@ export function createFetchHandler(opts) {
566
622
  }
567
623
  }
568
624
  if (path === "/mcp") {
625
+ // Authenticate BEFORE resolving ?toolkit=: an unauthenticated caller
626
+ // must not be able to probe which toolkit names exist.
569
627
  const authz = await authorize(request, baseUrl, auth);
570
- const response = authz.ok
571
- ? await serveMcp(request, opts, baseUrl, authz.actor, runtimeContext)
572
- : authz.response;
573
- return withMcpCors(response);
628
+ if (!authz.ok)
629
+ return withMcpCors(authz.response);
630
+ const selected = resolveToolkitScope(url, registry, opts.toolkits);
631
+ if (!selected.ok)
632
+ return withMcpCors(selected.response);
633
+ return withMcpCors(await serveMcp(request, opts, baseUrl, authz.actor, selected.scope, runtimeContext));
574
634
  }
575
635
  // Connector-owned public routes, dispatched last: a connector can add a
576
636
  // route but never shadow one of connecta's own. A throw here is the