@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/ui.d.ts CHANGED
@@ -15,13 +15,41 @@ interface ResolvedBranding {
15
15
  faviconHref: string;
16
16
  themeColor: string;
17
17
  }
18
+ export declare const DEFAULT_FAVICON_HREF = "/favicon.svg";
18
19
  export declare function resolveBranding(branding?: ConnectaBranding): ResolvedBranding;
20
+ /**
21
+ * Names of the branding URLs the operator set that failed their gate and were
22
+ * replaced by a default. Lives beside the gates so the startup warning cannot
23
+ * drift from them, and takes `unknown` fields for the same reason
24
+ * `resolveBranding` does — a warning helper must never throw.
25
+ */
26
+ export declare function droppedBrandingUrls(branding?: ConnectaBranding): string[];
19
27
  /**
20
28
  * True only for absolute `http:`/`https:` URLs. Downstream connectors control
21
29
  * their `authorizationUrl`, so a hostile/misconfigured one could hand back a
22
30
  * `javascript:` (or other) scheme; gate it before it can become an href.
23
31
  */
24
32
  export declare function isSafeHttpUrl(url: unknown): boolean;
33
+ /**
34
+ * True for values allowed in the page's `<link rel="icon" href>`: an absolute
35
+ * `http(s)` URL (an icon the operator hosts elsewhere) or a path rooted at this
36
+ * origin. The relative carve-out is deliberate rather than accidental — the
37
+ * default href is the relative `/favicon.svg`, which `isSafeHttpUrl` alone would
38
+ * reject — and it is kept narrow on both ends.
39
+ *
40
+ * Root-relative only, because `/ui` and `/oauth/callback/<id>` sit at different
41
+ * depths and a document-relative path would resolve differently on each.
42
+ *
43
+ * "Root-relative" is enforced structurally: exactly one leading `/` followed by
44
+ * a character that is neither `/` nor `\`. Both of those would make the value an
45
+ * authority (`//host`, and `/\host` because the URL parser folds `\` to `/` in
46
+ * special schemes), pointing at an origin this server does not control. The test
47
+ * runs on a copy with tab/newline/CR removed, since the parser strips those
48
+ * anywhere and `/\t/host` would otherwise slip through as single-slash. The
49
+ * origin comparison that follows is defense in depth, not the authority check —
50
+ * on its own it would accept an authority that happened to equal the probe host.
51
+ */
52
+ export declare function isSafeIconHref(href: unknown): boolean;
25
53
  export interface UiTool {
26
54
  name: string;
27
55
  address: string;
package/dist/ui.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
package/dist/ui.js CHANGED
@@ -6,27 +6,65 @@ export const CONNECTA_FAVICON_SVG = `<svg xmlns="http://www.w3.org/2000/svg" vie
6
6
  </style>
7
7
  <path class="fg" d="M27 9.4A13 13 0 1 0 27 22.6l-4.4-2.5a8 8 0 1 1 0-8.2z"/>
8
8
  </svg>`;
9
+ export const DEFAULT_FAVICON_HREF = "/favicon.svg";
10
+ /**
11
+ * Branding arrives from operator config, which is untyped at a JS call site, so
12
+ * every field is treated as `unknown`: a non-string is read as unset rather than
13
+ * throwing on `.trim()`. Rendering must degrade to defaults for a malformed
14
+ * value, never fail — `createConnecta` calls this during construction.
15
+ */
16
+ function trimmedString(value) {
17
+ return typeof value === "string" ? value.trim() || undefined : undefined;
18
+ }
9
19
  export function resolveBranding(branding) {
10
- const productName = branding?.productName?.trim() || "Connecta";
11
- const ownerName = branding?.ownerName?.trim();
20
+ const productName = trimmedString(branding?.productName) ?? "Connecta";
21
+ const ownerName = trimmedString(branding?.ownerName);
12
22
  // Operator branding URLs become masthead/callback hrefs, so a non-http(s)
13
23
  // scheme (javascript:, data:) is dropped the same as an unset URL — the
14
24
  // callers already render a <span> instead of an <a> when it is absent.
15
- const productUrl = branding?.productUrl?.trim();
16
- const ownerUrl = branding?.ownerUrl?.trim();
25
+ const productUrl = trimmedString(branding?.productUrl);
26
+ const ownerUrl = trimmedString(branding?.ownerUrl);
27
+ const faviconHref = trimmedString(branding?.favicon?.href);
17
28
  return {
18
29
  productName,
19
30
  ...(productUrl && isSafeHttpUrl(productUrl) ? { productUrl } : {}),
20
31
  ...(ownerName ? { ownerName } : {}),
21
32
  ...(ownerUrl && isSafeHttpUrl(ownerUrl) ? { ownerUrl } : {}),
22
- description: branding?.description?.trim() ||
33
+ description: trimmedString(branding?.description) ??
23
34
  `Manage the services this ${productName} instance makes available to agents.`,
24
- pageTitle: branding?.pageTitle?.trim() ||
35
+ pageTitle: trimmedString(branding?.pageTitle) ??
25
36
  (ownerName ? `${productName} — ${ownerName}` : productName),
26
- faviconHref: branding?.favicon?.href?.trim() || "/favicon.svg",
27
- themeColor: branding?.themeColor?.trim() || "#ffffff",
37
+ faviconHref: faviconHref && isSafeIconHref(faviconHref)
38
+ ? faviconHref
39
+ : DEFAULT_FAVICON_HREF,
40
+ themeColor: trimmedString(branding?.themeColor) ?? "#ffffff",
28
41
  };
29
42
  }
43
+ /**
44
+ * Names of the branding URLs the operator set that failed their gate and were
45
+ * replaced by a default. Lives beside the gates so the startup warning cannot
46
+ * drift from them, and takes `unknown` fields for the same reason
47
+ * `resolveBranding` does — a warning helper must never throw.
48
+ */
49
+ export function droppedBrandingUrls(branding) {
50
+ if (!branding)
51
+ return [];
52
+ const resolved = resolveBranding(branding);
53
+ // A non-string still counts as "set": the operator meant to supply a URL, and
54
+ // that intent is exactly what the warning reports on. A blank string does not.
55
+ const isSet = (value) => typeof value === "string"
56
+ ? trimmedString(value) !== undefined
57
+ : value !== undefined && value !== null;
58
+ const faviconHref = branding.favicon?.href;
59
+ return [
60
+ ...(isSet(branding.productUrl) && !resolved.productUrl ? ["productUrl"] : []),
61
+ ...(isSet(branding.ownerUrl) && !resolved.ownerUrl ? ["ownerUrl"] : []),
62
+ ...(isSet(faviconHref) &&
63
+ trimmedString(faviconHref) !== resolved.faviconHref
64
+ ? ["favicon.href"]
65
+ : []),
66
+ ];
67
+ }
30
68
  /**
31
69
  * A JS string literal safe to inline in a <script> block. JSON.stringify alone
32
70
  * leaves `/` untouched, so a value containing "</script>" would close the
@@ -51,6 +89,49 @@ export function isSafeHttpUrl(url) {
51
89
  return false;
52
90
  }
53
91
  }
92
+ /**
93
+ * Only the second check's base; any origin works because the check is whether
94
+ * the href stays on whatever origin it is resolved against. It is deliberately
95
+ * never the sole gate: a value whose own authority equals this host (say
96
+ * `//connecta.invalid/x`) would resolve to this exact origin and pass, so the
97
+ * structural check below runs first and is what actually rejects `//host`.
98
+ */
99
+ const SAME_ORIGIN_PROBE = "https://connecta.invalid";
100
+ /** Removed anywhere in a URL by the parser, so a gate must ignore them too. */
101
+ const URL_STRIPPED_CHARS = /[\t\n\r]/g;
102
+ /**
103
+ * True for values allowed in the page's `<link rel="icon" href>`: an absolute
104
+ * `http(s)` URL (an icon the operator hosts elsewhere) or a path rooted at this
105
+ * origin. The relative carve-out is deliberate rather than accidental — the
106
+ * default href is the relative `/favicon.svg`, which `isSafeHttpUrl` alone would
107
+ * reject — and it is kept narrow on both ends.
108
+ *
109
+ * Root-relative only, because `/ui` and `/oauth/callback/<id>` sit at different
110
+ * depths and a document-relative path would resolve differently on each.
111
+ *
112
+ * "Root-relative" is enforced structurally: exactly one leading `/` followed by
113
+ * a character that is neither `/` nor `\`. Both of those would make the value an
114
+ * authority (`//host`, and `/\host` because the URL parser folds `\` to `/` in
115
+ * special schemes), pointing at an origin this server does not control. The test
116
+ * runs on a copy with tab/newline/CR removed, since the parser strips those
117
+ * anywhere and `/\t/host` would otherwise slip through as single-slash. The
118
+ * origin comparison that follows is defense in depth, not the authority check —
119
+ * on its own it would accept an authority that happened to equal the probe host.
120
+ */
121
+ export function isSafeIconHref(href) {
122
+ if (typeof href !== "string")
123
+ return false;
124
+ if (isSafeHttpUrl(href))
125
+ return true;
126
+ if (!/^\/(?![/\\])/.test(href.replace(URL_STRIPPED_CHARS, "")))
127
+ return false;
128
+ try {
129
+ return new URL(href, SAME_ORIGIN_PROBE).origin === SAME_ORIGIN_PROBE;
130
+ }
131
+ catch {
132
+ return false;
133
+ }
134
+ }
54
135
  /**
55
136
  * Filter by connector identity/description or tool name/description. A
56
137
  * connector-level match stays visible even when it currently exposes no tools
package/dist/ui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -4,5 +4,5 @@
4
4
  * a bump that forgets this file fails the build rather than shipping a stale
5
5
  * version to `/health` and to downstream MCP handshakes.
6
6
  */
7
- export declare const CONNECTA_VERSION = "0.4.1";
7
+ export declare const CONNECTA_VERSION = "0.5.0";
8
8
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -4,5 +4,5 @@
4
4
  * a bump that forgets this file fails the build rather than shipping a stale
5
5
  * version to `/health` and to downstream MCP handshakes.
6
6
  */
7
- export const CONNECTA_VERSION = "0.4.1";
7
+ export const CONNECTA_VERSION = "0.5.0";
8
8
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zackbart/connecta",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "One MCP to rule them all — a single MCP endpoint aggregating many downstream connectors behind nine meta-tools.",
@@ -64,7 +64,7 @@
64
64
  "test:node": "vitest run --project node",
65
65
  "test:workers": "vitest run --project workers",
66
66
  "check:examples": "tsc -p tsconfig.examples.node.json && tsc -p tsconfig.examples.worker.json",
67
- "check:security": "npm audit --omit=dev --audit-level=high",
67
+ "check:security": "npm audit --omit=dev --audit-level=moderate",
68
68
  "check:package": "node scripts/check-package.mjs",
69
69
  "check": "npm run typecheck && npm run test && npm run build && npm run check:examples",
70
70
  "release:check": "npm run check && npm run check:security && npm run check:package",
@@ -76,6 +76,9 @@
76
76
  "@modelcontextprotocol/sdk": "1.29.0",
77
77
  "zod": "^4.4.3"
78
78
  },
79
+ "overrides": {
80
+ "@hono/node-server": "^2.0.12"
81
+ },
79
82
  "peerDependencies": {
80
83
  "@clerk/backend": "^3.12.0",
81
84
  "quickjs-emscripten": "^0.32.0"
package/src/activity.ts CHANGED
@@ -42,6 +42,12 @@ export interface ToolCallActivityEvent {
42
42
  serverName: string;
43
43
  serverVersion: string;
44
44
  deploymentId?: string;
45
+ /**
46
+ * Name of the toolkit this connection selected with `?toolkit=`, when it
47
+ * selected one. Calls are recorded the same way with or without it; this only
48
+ * says which scoped view the call came through.
49
+ */
50
+ toolkitId?: string;
45
51
  }
46
52
 
47
53
  export interface ActivityPage {
@@ -83,6 +89,8 @@ export interface ActivityRequestContext {
83
89
  requestId: string;
84
90
  serverInfo: { name: string; version: string };
85
91
  deploymentId?: string;
92
+ /** Toolkit this connection is scoped to, when `?toolkit=` selected one. */
93
+ toolkitId?: string;
86
94
  defer?: (promise: Promise<unknown>) => void;
87
95
  logger: Logger;
88
96
  }
@@ -128,6 +136,7 @@ export function recordToolActivity(
128
136
  ...(context.deploymentId
129
137
  ? { deploymentId: context.deploymentId }
130
138
  : {}),
139
+ ...(context.toolkitId ? { toolkitId: context.toolkitId } : {}),
131
140
  };
132
141
  try {
133
142
  const result = context.sink.record(event);
@@ -29,6 +29,19 @@ export interface ApiOptions {
29
29
  /** Human-readable display name; the connector id remains the address prefix. */
30
30
  title?: string;
31
31
  description?: string;
32
+ /**
33
+ * Max inline result size (bytes) for this connector's tools before
34
+ * call_tool/batch_call truncate and stash the full text for get_result
35
+ * paging. Overrides the deployment's `maxResultBytes`; omit to inherit it.
36
+ * Must be a whole number of bytes >= 1; anything else warns at startup and
37
+ * is ignored.
38
+ */
39
+ maxResultBytes?: number;
40
+ /**
41
+ * Optional agent-facing usage guide (markdown) served by the `skills`
42
+ * meta-tool as `connector:<id>`. See `Connector.usageGuide`.
43
+ */
44
+ usageGuide?: string;
32
45
  /** Optional operator-managed credential exposed through ctx.credential and /ui. */
33
46
  credential?: ConnectorCredentialConfig;
34
47
  /** Optional validation behind /ui's Test action. */
@@ -97,6 +110,8 @@ export function api(id: string, opts: ApiOptions): Connector {
97
110
  title: opts.title,
98
111
  kind: "api",
99
112
  description: opts.description,
113
+ maxResultBytes: opts.maxResultBytes,
114
+ usageGuide: opts.usageGuide,
100
115
  credential: opts.credential,
101
116
  testCredential: opts.testCredential,
102
117
  testCredentials: opts.testCredentials,
@@ -23,6 +23,19 @@ export interface RemoteMcpOptions {
23
23
  /** Human-readable display name; the connector id remains the address prefix. */
24
24
  title?: string;
25
25
  description?: string;
26
+ /**
27
+ * Max inline result size (bytes) for this connector's tools before
28
+ * call_tool/batch_call truncate and stash the full text for get_result
29
+ * paging. Overrides the deployment's `maxResultBytes`; omit to inherit it.
30
+ * Must be a whole number of bytes >= 1; anything else warns at startup and
31
+ * is ignored.
32
+ */
33
+ maxResultBytes?: number;
34
+ /**
35
+ * Optional agent-facing usage guide (markdown) served by the `skills`
36
+ * meta-tool as `connector:<id>`. See `Connector.usageGuide`.
37
+ */
38
+ usageGuide?: string;
26
39
  auth?: RemoteMcpAuth;
27
40
  /**
28
41
  * Refuse to connect to a non-`https://` `url` at construction (default
@@ -252,6 +265,8 @@ export function remoteMcp(id: string, opts: RemoteMcpOptions): Connector {
252
265
  title: opts.title,
253
266
  kind: "mcp",
254
267
  description: opts.description,
268
+ maxResultBytes: opts.maxResultBytes,
269
+ usageGuide: opts.usageGuide,
255
270
 
256
271
  async listTools(ctx) {
257
272
  const state = stateFor(ctx);
package/src/execute.ts CHANGED
@@ -5,7 +5,7 @@ import { recordToolActivity, type ActivityRequestContext } from "./activity.js";
5
5
  import { errorResult, jsonResult, type ToolResult } from "./meta-tools.js";
6
6
  import { classifyCallError, ConnectorCallError } from "./errors.js";
7
7
  import { unwrapMcpResult } from "./mcp-result.js";
8
- import type { Registry } from "./registry.js";
8
+ import type { RegistryView } from "./registry.js";
9
9
  import type {
10
10
  Connector,
11
11
  Executor,
@@ -98,7 +98,7 @@ export function unwrapForSandbox(
98
98
  * the raw-address escape hatch. Broken connectors are skipped, not fatal.
99
99
  */
100
100
  export async function buildSandboxProviders(
101
- registry: Registry,
101
+ registry: RegistryView,
102
102
  baseUrl: string,
103
103
  logger: Logger,
104
104
  activity?: ActivityRequestContext,
@@ -459,7 +459,7 @@ function guardResultValue(value: unknown): unknown {
459
459
 
460
460
  /** The execute_code handler. Exported for direct testing. */
461
461
  export function createExecuteTool(
462
- registry: Registry,
462
+ registry: RegistryView,
463
463
  baseUrl: string,
464
464
  executor: Executor,
465
465
  logger: Logger,
@@ -527,7 +527,7 @@ Example: async () => { const r = await crm.search({ query: "roadmap" }); return
527
527
  /** Register the execute_code meta-tool. Only called when an executor is configured. */
528
528
  export function registerExecuteTool(
529
529
  server: McpServer,
530
- registry: Registry,
530
+ registry: RegistryView,
531
531
  ctx: {
532
532
  baseUrl: string;
533
533
  executor: Executor;
package/src/index.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import { CredentialVault } from "./credentials.js";
2
2
  import { Registry } from "./registry.js";
3
3
  import { createFetchHandler } from "./server.js";
4
+ import { droppedBrandingUrls } from "./ui.js";
5
+ import { resolveToolkits, type ToolkitConfig } from "./toolkits.js";
4
6
  import { memoryStorage } from "./storage/memory.js";
5
7
  import { CONNECTA_VERSION } from "./version.js";
6
8
  import type { ActivityReadGate, ActivityStore } from "./activity.js";
@@ -15,6 +17,36 @@ import type {
15
17
 
16
18
  export interface ConnectaConfig {
17
19
  connectors: Connector[];
20
+ /**
21
+ * Named scoped views over `connectors`, selected per client connection with
22
+ * `?toolkit=<name>` on the `/mcp` URL. One deployment belongs to one org;
23
+ * a toolkit is the slice of it a group of team members sees.
24
+ *
25
+ * ```ts
26
+ * toolkits: {
27
+ * support: { connectors: ["zendesk", "notion"] },
28
+ * exec: {
29
+ * connectors: ["zendesk", "notion", "gmail"],
30
+ * excludeTools: ["gmail.send_message"],
31
+ * },
32
+ * }
33
+ * ```
34
+ *
35
+ * Inside a toolkit-scoped session every meta-tool behaves as if out-of-scope
36
+ * connectors and tools do not exist, and an out-of-scope address fails
37
+ * exactly as a nonexistent one does. No `?toolkit=` ⇒ the full registry, so
38
+ * adding toolkits changes nothing for connections that don't ask for one; an
39
+ * unknown name is an error, never a silent fallback.
40
+ *
41
+ * Toolkits scope VISIBILITY, not identity: they do not decide *which* team
42
+ * member may select which toolkit. Gate that in `auth` (per-member binding is
43
+ * a follow-up).
44
+ *
45
+ * Definitions are validated at construction: an unknown connector id, an
46
+ * empty connector selection, an empty `includeTools`, a malformed tool
47
+ * address, or an address naming no tool on an in-code connector all throw.
48
+ */
49
+ toolkits?: ToolkitConfig;
18
50
  /**
19
51
  * Privacy-minimal downstream tool activity storage. Writes are best-effort
20
52
  * and never change tool results. Implement `list` to enable the Activity UI.
@@ -58,7 +90,9 @@ export interface ConnectaConfig {
58
90
  toolCatalogStaleSeconds?: number;
59
91
  /**
60
92
  * Max inline result size (bytes) before call_tool/batch_call truncate and
61
- * stash the full text for get_result paging. Default 50_000.
93
+ * stash the full text for get_result paging. Must be a whole number of bytes
94
+ * >= 1; anything else (0, negative, fractional, NaN, Infinity) warns at
95
+ * startup and falls back to the default 50_000.
62
96
  */
63
97
  maxResultBytes?: number;
64
98
  /**
@@ -176,6 +210,31 @@ function warnInsecureConfig(
176
210
  );
177
211
  }
178
212
 
213
+ // Toolkits with no inbound auth: a toolkit is a scoped VIEW selected by the
214
+ // caller, not an authentication boundary. With nothing gating /mcp, any
215
+ // caller picks any toolkit — or omits the parameter and sees everything.
216
+ if (inboundAuth.length === 0 && config.toolkits) {
217
+ logger.warn(
218
+ "[connecta] toolkits are configured but there is no inbound " +
219
+ "authentication: a toolkit is a scoped view a client selects with " +
220
+ "?toolkit=, not an access check, so any caller can choose any toolkit " +
221
+ "or omit the parameter and see every connector. Configure `auth` " +
222
+ "(for example bearerToken(...) or Clerk).",
223
+ );
224
+ }
225
+
226
+ // Branding URLs that failed their scheme gate. Rendering silently falls back
227
+ // (a bad URL must not take the page down), so this warning is the only way an
228
+ // operator learns their value never reached the page.
229
+ const dropped = droppedBrandingUrls(config.branding);
230
+ if (dropped.length > 0) {
231
+ logger.warn(
232
+ `[connecta] branding ${dropped.join(", ")} dropped: a branding URL is ` +
233
+ "used as an href, so it must be an absolute http(s) URL (favicon.href " +
234
+ "may also be a root-relative path). The default is rendered instead.",
235
+ );
236
+ }
237
+
179
238
  // OAuth connectors whose callback performs no state/CSRF check: the public
180
239
  // /oauth/callback/<id> route would exchange any delivered code.
181
240
  for (const connector of oauthConnectors) {
@@ -211,6 +270,11 @@ export function createConnecta(config: ConnectaConfig): Connecta {
211
270
  toolCatalogStaleSeconds: config.toolCatalogStaleSeconds,
212
271
  maxResultBytes: config.maxResultBytes,
213
272
  });
273
+ // Throws on every structural mistake it can see (see resolveToolkits): a
274
+ // typo must not become a scope the operator never wrote. Note this is about
275
+ // the scope being *intended*, not about it being an access check — a toolkit
276
+ // scopes visibility, and `auth` remains the thing deciding who gets in.
277
+ const toolkits = resolveToolkits(config.toolkits, config.connectors);
214
278
  const inboundAuth = normalizeAuth(config.auth);
215
279
  warnInsecureConfig(config, inboundAuth, logger);
216
280
  const handler = createFetchHandler({
@@ -232,6 +296,7 @@ export function createConnecta(config: ConnectaConfig): Connecta {
232
296
  credentialVault,
233
297
  deploymentInfo: config.deploymentInfo,
234
298
  branding: config.branding,
299
+ ...(toolkits ? { toolkits } : {}),
235
300
  });
236
301
  return {
237
302
  fetch: (request, _env, ctx) =>
@@ -261,6 +326,9 @@ export { CONNECTA_VERSION } from "./version.js";
261
326
  // the class itself, the credential vault, and the meta-tool/sandbox factories
262
327
  // are internal factoring and are deliberately not part of the API surface.
263
328
  export type { Registry } from "./registry.js";
329
+ // Config-as-code shapes for `ConnectaConfig.toolkits`. The resolved `Toolkit`
330
+ // and the `ScopedRegistry` that enforces it are internal factoring.
331
+ export type { ToolkitConfig, ToolkitDefinition } from "./toolkits.js";
264
332
 
265
333
  export type { RemoteMcpOptions, RemoteMcpAuth } from "./connectors/remote-mcp.js";
266
334
  export type { ApiOptions, ApiTool } from "./connectors/api.js";