managed-deepagents 0.6.2-dev.2 → 0.6.2-dev.20

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 (106) hide show
  1. package/README.md +13 -3
  2. package/dist/agent-auth.d.ts +104 -0
  3. package/dist/agent-auth.d.ts.map +1 -0
  4. package/dist/agent-auth.js +224 -0
  5. package/dist/agent-auth.js.map +1 -0
  6. package/dist/channels/errors.d.ts +0 -1
  7. package/dist/channels/errors.d.ts.map +1 -1
  8. package/dist/channels/errors.js +0 -12
  9. package/dist/channels/errors.js.map +1 -1
  10. package/dist/channels/manifest.d.ts +2 -0
  11. package/dist/channels/manifest.d.ts.map +1 -1
  12. package/dist/channels/messaging-registry.d.ts +0 -2
  13. package/dist/channels/messaging-registry.d.ts.map +1 -1
  14. package/dist/channels/messaging-registry.js +0 -6
  15. package/dist/channels/messaging-registry.js.map +1 -1
  16. package/dist/channels/registry-types.d.ts +1 -1
  17. package/dist/channels/schedule-delivery.d.ts +3 -1
  18. package/dist/channels/schedule-delivery.d.ts.map +1 -1
  19. package/dist/channels/schedule-delivery.js +41 -5
  20. package/dist/channels/schedule-delivery.js.map +1 -1
  21. package/dist/channels/slack/http.d.ts +1 -1
  22. package/dist/channels/trigger/client.d.ts +1 -0
  23. package/dist/channels/trigger/client.d.ts.map +1 -1
  24. package/dist/channels/trigger/client.js +19 -8
  25. package/dist/channels/trigger/client.js.map +1 -1
  26. package/dist/channels/trigger/types.d.ts +1 -1
  27. package/dist/channels/trigger/types.d.ts.map +1 -1
  28. package/dist/connectors/mcp/index.d.ts +29 -89
  29. package/dist/connectors/mcp/index.d.ts.map +1 -1
  30. package/dist/connectors/mcp/index.js +240 -81
  31. package/dist/connectors/mcp/index.js.map +1 -1
  32. package/dist/connectors/mcp/schema.d.ts +12 -0
  33. package/dist/connectors/mcp/schema.d.ts.map +1 -0
  34. package/dist/connectors/mcp/schema.js +55 -0
  35. package/dist/connectors/mcp/schema.js.map +1 -0
  36. package/dist/connectors/mcp/types.d.ts +62 -0
  37. package/dist/connectors/mcp/types.d.ts.map +1 -0
  38. package/dist/connectors/mcp/types.js +2 -0
  39. package/dist/connectors/mcp/types.js.map +1 -0
  40. package/dist/connectors/tool-selection.d.ts +12 -14
  41. package/dist/connectors/tool-selection.d.ts.map +1 -1
  42. package/dist/connectors/tool-selection.js +25 -39
  43. package/dist/connectors/tool-selection.js.map +1 -1
  44. package/dist/credential-gate.d.ts +39 -0
  45. package/dist/credential-gate.d.ts.map +1 -0
  46. package/dist/credential-gate.js +209 -0
  47. package/dist/credential-gate.js.map +1 -0
  48. package/dist/credentials.d.ts +95 -0
  49. package/dist/credentials.d.ts.map +1 -0
  50. package/dist/credentials.js +288 -0
  51. package/dist/credentials.js.map +1 -0
  52. package/dist/identity/index.d.ts +1 -1
  53. package/dist/identity/index.d.ts.map +1 -1
  54. package/dist/identity/index.js.map +1 -1
  55. package/dist/identity/types.d.ts +79 -5
  56. package/dist/identity/types.d.ts.map +1 -1
  57. package/dist/index.d.ts +11 -6
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +1 -0
  60. package/dist/index.js.map +1 -1
  61. package/dist/runtime/auth.d.ts +31 -4
  62. package/dist/runtime/auth.d.ts.map +1 -1
  63. package/dist/runtime/auth.js +58 -3
  64. package/dist/runtime/auth.js.map +1 -1
  65. package/dist/runtime/channel.d.ts +1 -3
  66. package/dist/runtime/channel.d.ts.map +1 -1
  67. package/dist/runtime/channel.js +0 -4
  68. package/dist/runtime/channel.js.map +1 -1
  69. package/dist/runtime/connector.d.ts +1 -3
  70. package/dist/runtime/connector.d.ts.map +1 -1
  71. package/dist/runtime/connector.js +0 -4
  72. package/dist/runtime/connector.js.map +1 -1
  73. package/dist/runtime/cors.d.ts +8 -6
  74. package/dist/runtime/cors.d.ts.map +1 -1
  75. package/dist/runtime/cors.js +18 -19
  76. package/dist/runtime/cors.js.map +1 -1
  77. package/dist/runtime/http.d.ts +1 -1
  78. package/dist/runtime/http.d.ts.map +1 -1
  79. package/dist/runtime/http.js.map +1 -1
  80. package/dist/runtime/identity-http.d.ts.map +1 -1
  81. package/dist/runtime/identity-http.js +22 -13
  82. package/dist/runtime/identity-http.js.map +1 -1
  83. package/dist/runtime/identity-runtime.d.ts +66 -6
  84. package/dist/runtime/identity-runtime.d.ts.map +1 -1
  85. package/dist/runtime/identity-runtime.js +149 -1
  86. package/dist/runtime/identity-runtime.js.map +1 -1
  87. package/dist/runtime/index.d.ts +3 -8
  88. package/dist/runtime/index.d.ts.map +1 -1
  89. package/dist/runtime/index.js +15 -13
  90. package/dist/runtime/index.js.map +1 -1
  91. package/dist/runtime/managed-middleware.d.ts +2 -2
  92. package/dist/runtime/managed-middleware.js +6 -6
  93. package/dist/runtime/managed-tools.d.ts +19 -15
  94. package/dist/runtime/managed-tools.d.ts.map +1 -1
  95. package/dist/runtime/managed-tools.js +14 -13
  96. package/dist/runtime/managed-tools.js.map +1 -1
  97. package/dist/runtime/sandbox-manager.d.ts +1 -1
  98. package/dist/runtime/sandbox-manager.d.ts.map +1 -1
  99. package/dist/runtime/sandbox-manager.js +1 -1
  100. package/dist/runtime/sandbox-manager.js.map +1 -1
  101. package/dist/runtime/types.d.ts +2 -2
  102. package/package.json +8 -8
  103. package/dist/connectors/mcp/load.d.ts +0 -12
  104. package/dist/connectors/mcp/load.d.ts.map +0 -1
  105. package/dist/connectors/mcp/load.js +0 -122
  106. package/dist/connectors/mcp/load.js.map +0 -1
@@ -18,7 +18,7 @@
18
18
  * @example
19
19
  * ```ts
20
20
  * // connectors/mcp.ts
21
- * import { connectors } from "managed-deepagents";
21
+ * import { connectors, credentials } from "managed-deepagents";
22
22
  *
23
23
  * export const connector = connectors.mcp({
24
24
  * mcpServers: {
@@ -26,102 +26,261 @@
26
26
  * transport: "http",
27
27
  * url: "https://docs.example.com/mcp",
28
28
  * },
29
+ * notion: {
30
+ * transport: "http",
31
+ * url: "https://mcp.notion.com/mcp",
32
+ * credential: credentials.get("notion", { type: "user" }),
33
+ * },
29
34
  * },
30
35
  * });
31
36
  * ```
32
37
  */
33
- import { z } from "zod";
38
+ import { MultiServerMCPClient } from "@langchain/mcp-adapters";
34
39
  import { defineExtension } from "../../extension.js";
35
- /** Stdio servers are out of scope; the message points at the alternatives. */
36
- const STDIO_REJECTION = "uses a stdio transport, which is not supported. Managed Deep Agents " +
37
- "support remote MCP servers over HTTP/SSE only; expose the server over HTTP " +
38
- "or write a normal authored tool instead.";
39
- /** Raw MCP tool names, before the managed `{server}__` prefix is applied. */
40
- const toolNames = z
41
- .array(z
42
- .string("must be a non-empty tool name")
43
- .refine((name) => name.trim().length > 0, "must be a non-empty tool name"))
44
- .check((ctx) => {
45
- const seen = new Set();
46
- for (const name of ctx.value) {
47
- if (seen.has(name)) {
48
- ctx.issues.push({
49
- code: "custom",
50
- input: ctx.value,
51
- message: `contains duplicate tool name "${name}"`,
52
- });
53
- }
54
- seen.add(name);
40
+ import { credentials, isCredentialReference, } from "../../credentials.js";
41
+ import { mcpServersConfig } from "./schema.js";
42
+ import { selectTools } from "../tool-selection.js";
43
+ /**
44
+ * MCP tools loaded per declared connector, cached for the process lifetime.
45
+ *
46
+ * The compiled entry's graph factory runs `compileManagedAgent` on every
47
+ * invocation, but each connector's MCP connection and tool surface are stable
48
+ * for the life of the deployment — so the client is created and its tools
49
+ * loaded once per declaration, and every subsequent run reuses them. Storing
50
+ * the in-flight promise also dedupes concurrent first runs for the same
51
+ * connector. Multiple `connectors.mcp(...)` modules each get their own entry.
52
+ *
53
+ * An agent-owned credential is read into this cache once, so rotating that
54
+ * secret takes a redeploy. Servers with a user-owned credential are omitted
55
+ * entirely; the credential gate loads those per caller.
56
+ */
57
+ const cachedTools = new Map();
58
+ /**
59
+ * Load (and cache) the MCP tools for one connector declaration.
60
+ *
61
+ * A failed load is never cached, so a transient connection error on the first
62
+ * run can be retried on the next, but a misconfigured deployment surfaces the
63
+ * error rather than silently starting with no tools.
64
+ */
65
+ export function loadManagedMcpTools(connectors) {
66
+ const cached = cachedTools.get(connectors);
67
+ if (cached) {
68
+ return cached;
55
69
  }
56
- })
57
- .optional();
58
- const remoteMcpServer = z
59
- .looseObject({
60
- // Present only to reject it: a `command` is how a stdio server is spelled.
61
- command: z.never({ error: STDIO_REJECTION }).optional(),
62
- transport: z.enum(["http", "sse"], {
63
- error: (issue) => issue.input === "stdio"
64
- ? STDIO_REJECTION
65
- : 'must declare a remote transport ("http" or "sse")',
66
- }),
67
- url: z
68
- .string("must be a non-empty URL")
69
- .refine((url) => url.trim().length > 0, "must be a non-empty URL"),
70
- headers: z.record(z.string(), z.string()).optional(),
71
- defaultToolTimeout: z
72
- .number("defaultToolTimeout must be a positive number")
73
- .finite("defaultToolTimeout must be a positive number")
74
- .positive("defaultToolTimeout must be a positive number")
75
- .optional(),
76
- includeTools: toolNames,
77
- excludeTools: toolNames,
78
- })
79
- .check((ctx) => {
80
- const { includeTools, excludeTools } = ctx.value;
81
- const overlap = (includeTools ?? []).filter((name) => (excludeTools ?? []).includes(name));
82
- if (overlap.length > 0) {
83
- ctx.issues.push({
84
- code: "custom",
85
- input: ctx.value,
86
- message: "selects tool(s) in both `includeTools` and `excludeTools`: " +
87
- `${[...overlap].sort().join(", ")}`,
88
- });
70
+ const loading = createClientAndLoadTools(connectors).catch((error) => {
71
+ cachedTools.delete(connectors);
72
+ throw error;
73
+ });
74
+ cachedTools.set(connectors, loading);
75
+ return loading;
76
+ }
77
+ /** Clear the process-level MCP tool cache. Test-only. */
78
+ export function clearManagedMcpToolsCacheForTests(connectors) {
79
+ if (connectors) {
80
+ cachedTools.delete(connectors);
81
+ return;
89
82
  }
90
- });
83
+ cachedTools.clear();
84
+ }
91
85
  /**
92
- * The MCP connector's arguments.
86
+ * The credential gate's view of the declared MCP connectors.
93
87
  *
94
- * Shape, types, and tool-name lists are the schema's job; the rules that need
95
- * more than one field — a stdio server, a tool selected and deselected at once
96
- * — are checks with hand-written messages. Server configs stay loose because
97
- * `@langchain/mcp-adapters` accepts more per-transport options than MDA models.
88
+ * One consumer per declaration that names a user-owned credential; a
89
+ * declaration that needs no grant never reaches the gate.
98
90
  */
99
- const mcpServersConfig = z.object({
100
- mcpServers: z
101
- .record(z.string(), remoteMcpServer, {
102
- error: "must be an object mapping server names to remote MCP server configs",
103
- })
104
- .refine((servers) => Object.keys(servers).length > 0, "requires at least one entry"),
105
- prefixToolNameWithServerName: z.boolean().optional(),
106
- throwOnLoadError: z.boolean().optional(),
107
- useStandardContentBlocks: z.boolean().optional(),
108
- onConnectionError: z.literal("throw").optional(),
109
- });
91
+ export function mcpCredentialConsumers(connectors) {
92
+ const out = [];
93
+ for (const connector of connectors ?? []) {
94
+ if (!connector ||
95
+ typeof connector !== "object" ||
96
+ connector.kind !== "mcp_servers") {
97
+ continue;
98
+ }
99
+ const definition = connector;
100
+ const credentials = userCredentialReferences(definition);
101
+ if (credentials.length === 0) {
102
+ continue;
103
+ }
104
+ out.push({
105
+ declaration: definition,
106
+ credentials,
107
+ load: (accessTokens) => loadUserCredentialMcpTools(definition, accessTokens),
108
+ });
109
+ }
110
+ return out;
111
+ }
112
+ /** The declared references themselves: the gate checks their owner. */
113
+ function userCredentialReferences(connectors) {
114
+ const bySlug = new Map();
115
+ for (const server of Object.values(connectors.mcpServers)) {
116
+ if (usesUserCredential(server)) {
117
+ const credential = server.credential;
118
+ bySlug.set(credential.slug, credential);
119
+ }
120
+ }
121
+ return [...bySlug.values()];
122
+ }
123
+ function mcpRequirements(name, connectors) {
124
+ return {
125
+ name,
126
+ provider: "mcp",
127
+ autoReply: false,
128
+ requiredPermissions: [],
129
+ requiredEnv: [],
130
+ userCredentials: userCredentialReferences(connectors)
131
+ .map((credential) => credential.slug)
132
+ .sort(),
133
+ providerConfig: {},
134
+ };
135
+ }
136
+ async function createClientAndLoadTools(connectors) {
137
+ const { eager, userCredential } = partitionMcpServers(connectors.mcpServers);
138
+ if (userCredential.length > 0) {
139
+ warnDeferredUserCredentialServers(userCredential);
140
+ }
141
+ if (Object.keys(eager).length === 0) {
142
+ return [];
143
+ }
144
+ const { tools } = await loadToolsFromServers(connectors, await withAgentCredentials(eager));
145
+ return tools;
146
+ }
110
147
  /**
111
- * Declare the MCP servers whose tools should be loaded and added to the managed
112
- * Deep Agent at runtime.
148
+ * Load tools for user-credential servers, once the gate has confirmed the
149
+ * caller's grants.
113
150
  *
114
- * The tools hook runs at agent-graph construction time (inside the managed
115
- * runtime), so the MCP client loader is imported lazily — authoring-only
116
- * installs never pull in `@langchain/mcp-adapters`.
151
+ * Not process-cached here: the Authorization header is per caller, so the gate
152
+ * owns both the cache and closing the returned transport.
117
153
  */
154
+ export async function loadUserCredentialMcpTools(connectors, accessTokens) {
155
+ const { userCredential } = partitionMcpServers(connectors.mcpServers);
156
+ const connectable = {};
157
+ for (const name of userCredential) {
158
+ const server = connectors.mcpServers[name];
159
+ const credential = server?.credential;
160
+ if (!server || !isCredentialReference(credential)) {
161
+ continue;
162
+ }
163
+ const accessToken = accessTokens.get(credential.slug);
164
+ if (!accessToken) {
165
+ throw new Error(`MCP user credential "${credential.slug}" has no access token`);
166
+ }
167
+ connectable[name] = withBearer(server, accessToken);
168
+ }
169
+ if (Object.keys(connectable).length === 0) {
170
+ return { tools: [], close: async () => { } };
171
+ }
172
+ const { tools, client } = await loadToolsFromServers(connectors, connectable);
173
+ return { tools, close: () => client.close() };
174
+ }
175
+ /** Resolve each agent-owned credential into a static bearer header. */
176
+ async function withAgentCredentials(servers) {
177
+ const out = {};
178
+ for (const [name, server] of Object.entries(servers)) {
179
+ const credential = server.credential;
180
+ out[name] = isCredentialReference(credential)
181
+ ? withBearer(server, await credentials.resolveDeploymentSecret(credential.slug))
182
+ : server;
183
+ }
184
+ return out;
185
+ }
186
+ function withBearer(server, token) {
187
+ const headers = Object.fromEntries(Object.entries(server.headers ?? {}).filter(([name]) => name.toLowerCase() !== "authorization"));
188
+ return {
189
+ ...server,
190
+ headers: { ...headers, Authorization: `Bearer ${token}` },
191
+ };
192
+ }
193
+ function usesUserCredential(server) {
194
+ return (isCredentialReference(server.credential) &&
195
+ server.credential.owner.type === "user");
196
+ }
197
+ function partitionMcpServers(servers) {
198
+ const eager = {};
199
+ const userCredential = [];
200
+ for (const [name, server] of Object.entries(servers)) {
201
+ if (usesUserCredential(server)) {
202
+ userCredential.push(name);
203
+ }
204
+ else {
205
+ eager[name] = server;
206
+ }
207
+ }
208
+ return { eager, userCredential };
209
+ }
210
+ function warnDeferredUserCredentialServers(serverNames) {
211
+ console.warn(`[managed-deepagents] MCP server(s) ${serverNames.join(", ")} declare ` +
212
+ `a user credential; tools load after the pre-run credential gate ` +
213
+ `confirms grants for the caller.`);
214
+ }
215
+ function stripManagedToolSelection(servers) {
216
+ return Object.fromEntries(Object.entries(servers).map(([name, server]) => {
217
+ const { includeTools: _includeTools, excludeTools: _excludeTools, credential: _credential, ...clientConfig } = server;
218
+ return [name, clientConfig];
219
+ }));
220
+ }
221
+ async function loadToolsFromServers(connectors, connectable) {
222
+ const prefixToolNameWithServerName = connectors.prefixToolNameWithServerName ?? true;
223
+ const client = new MultiServerMCPClient({
224
+ mcpServers: stripManagedToolSelection(connectable),
225
+ prefixToolNameWithServerName,
226
+ throwOnLoadError: connectors.throwOnLoadError ?? true,
227
+ useStandardContentBlocks: connectors.useStandardContentBlocks ?? true,
228
+ onConnectionError: connectors.onConnectionError ?? "throw",
229
+ });
230
+ try {
231
+ const tools = await loadToolsByServer(client, connectable, prefixToolNameWithServerName);
232
+ if (!prefixToolNameWithServerName) {
233
+ assertNoToolNameCollisions(tools);
234
+ }
235
+ return { tools, client };
236
+ }
237
+ catch (error) {
238
+ await client.close().catch(() => undefined);
239
+ throw error;
240
+ }
241
+ }
242
+ async function loadToolsByServer(client, servers, prefixToolNameWithServerName) {
243
+ const tools = [];
244
+ for (const [serverName, server] of Object.entries(servers)) {
245
+ const serverTools = await client.getTools(serverName);
246
+ tools.push(...filterToolsForServer(serverName, server, serverTools, prefixToolNameWithServerName));
247
+ }
248
+ return tools;
249
+ }
250
+ function filterToolsForServer(serverName, selection, tools, prefixToolNameWithServerName) {
251
+ return selectTools(`MCP server "${serverName}"`, selection, tools, (tool) => {
252
+ const name = tool.name;
253
+ if (typeof name !== "string") {
254
+ return undefined;
255
+ }
256
+ const prefix = `${serverName}__`;
257
+ return prefixToolNameWithServerName && name.startsWith(prefix)
258
+ ? name.slice(prefix.length)
259
+ : name;
260
+ });
261
+ }
262
+ function assertNoToolNameCollisions(tools) {
263
+ const seen = new Set();
264
+ const collisions = new Set();
265
+ for (const tool of tools) {
266
+ const name = tool.name;
267
+ if (typeof name !== "string")
268
+ continue;
269
+ if (seen.has(name))
270
+ collisions.add(name);
271
+ seen.add(name);
272
+ }
273
+ if (collisions.size > 0) {
274
+ throw new Error(`MCP tool name collision: ${[...collisions].sort().join(", ")}. ` +
275
+ "Set `prefixToolNameWithServerName: true` (the default) so each tool is " +
276
+ "namespaced by its server, or rename the conflicting tools.");
277
+ }
278
+ }
118
279
  export const mcpConnector = defineExtension("connector", {
119
280
  kind: "mcp_servers",
120
281
  label: "connectors.mcp",
121
282
  args: mcpServersConfig,
122
- async tools(_ctx, self) {
123
- const { loadManagedMcpTools } = await import("./load.js");
124
- return loadManagedMcpTools(self);
125
- },
283
+ tools: (_ctx, self) => loadManagedMcpTools(self),
284
+ requirements: (name, self) => mcpRequirements(name, self),
126
285
  });
127
286
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/connectors/mcp/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/connectors/mcp/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { z } from "zod";
2
+ import type { McpServersConfig } from "./types.js";
3
+ /**
4
+ * The MCP connector's arguments.
5
+ *
6
+ * Shape, types, and tool-name lists are the schema's job; the rules that need
7
+ * more than one field — a stdio server, a tool selected and deselected at once
8
+ * — are checks with hand-written messages. Server configs stay loose because
9
+ * `@langchain/mcp-adapters` accepts more per-transport options than MDA models.
10
+ */
11
+ export declare const mcpServersConfig: z.ZodType<McpServersConfig, McpServersConfig>;
12
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/connectors/mcp/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA6CnD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,CAevE,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { z } from "zod";
2
+ import { appendToolSelectionOverlapIssue, optionalToolNameListSchema, } from "../tool-selection.js";
3
+ import { isCredentialReference, } from "../../credentials.js";
4
+ /** Stdio servers are out of scope; the message points at the alternatives. */
5
+ const STDIO_REJECTION = "uses a stdio transport, which is not supported. Managed Deep Agents " +
6
+ "support remote MCP servers over HTTP/SSE only; expose the server over HTTP " +
7
+ "or write a normal authored tool instead.";
8
+ /** Raw MCP tool names, before the managed `{server}__` prefix is applied. */
9
+ const remoteMcpServer = z
10
+ .looseObject({
11
+ /**
12
+ * Present only to reject it: a `command` is how a stdio server is defined,
13
+ * which we don't support.
14
+ */
15
+ command: z.never({ error: STDIO_REJECTION }).optional(),
16
+ transport: z.enum(["http", "sse"], {
17
+ error: (issue) => issue.input === "stdio"
18
+ ? STDIO_REJECTION
19
+ : 'must declare a remote transport ("http" or "sse")',
20
+ }),
21
+ url: z
22
+ .string("must be a non-empty URL")
23
+ .refine((url) => url.trim().length > 0, "must be a non-empty URL"),
24
+ headers: z.record(z.string(), z.string()).optional(),
25
+ defaultToolTimeout: z
26
+ .number("defaultToolTimeout must be a positive number")
27
+ .positive("defaultToolTimeout must be a positive number")
28
+ .optional(),
29
+ includeTools: optionalToolNameListSchema,
30
+ excludeTools: optionalToolNameListSchema,
31
+ credential: z
32
+ .custom(isCredentialReference, "must be a credentials.get(slug, owner) reference")
33
+ .optional(),
34
+ })
35
+ .check(appendToolSelectionOverlapIssue);
36
+ /**
37
+ * The MCP connector's arguments.
38
+ *
39
+ * Shape, types, and tool-name lists are the schema's job; the rules that need
40
+ * more than one field — a stdio server, a tool selected and deselected at once
41
+ * — are checks with hand-written messages. Server configs stay loose because
42
+ * `@langchain/mcp-adapters` accepts more per-transport options than MDA models.
43
+ */
44
+ export const mcpServersConfig = z.object({
45
+ mcpServers: z
46
+ .record(z.string(), remoteMcpServer, {
47
+ error: "must be an object mapping server names to remote MCP server configs",
48
+ })
49
+ .refine((servers) => Object.keys(servers).length > 0, "requires at least one entry"),
50
+ prefixToolNameWithServerName: z.boolean().optional(),
51
+ throwOnLoadError: z.boolean().optional(),
52
+ useStandardContentBlocks: z.boolean().optional(),
53
+ onConnectionError: z.literal("throw").optional(),
54
+ });
55
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/connectors/mcp/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,+BAA+B,EAC/B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,qBAAqB,GAEtB,MAAM,sBAAsB,CAAC;AAE9B,8EAA8E;AAC9E,MAAM,eAAe,GACnB,sEAAsE;IACtE,6EAA6E;IAC7E,0CAA0C,CAAC;AAE7C,6EAA6E;AAC7E,MAAM,eAAe,GAAG,CAAC;KACtB,WAAW,CAAC;IACX;;;OAGG;IACH,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvD,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;QACjC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,KAAK,CAAC,KAAK,KAAK,OAAO;YACrB,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,mDAAmD;KAC1D,CAAC;IACF,GAAG,EAAE,CAAC;SACH,MAAM,CAAC,yBAAyB,CAAC;SACjC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,yBAAyB,CAAC;IACpE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpD,kBAAkB,EAAE,CAAC;SAClB,MAAM,CAAC,8CAA8C,CAAC;SACtD,QAAQ,CAAC,8CAA8C,CAAC;SACxD,QAAQ,EAAE;IACb,YAAY,EAAE,0BAA0B;IACxC,YAAY,EAAE,0BAA0B;IACxC,UAAU,EAAE,CAAC;SACV,MAAM,CACL,qBAAqB,EACrB,kDAAkD,CACnD;SACA,QAAQ,EAAE;CACd,CAAC;KACD,KAAK,CAAC,+BAA+B,CAAC,CAAC;AAE1C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,CAAC,CAAC,MAAM,CAAC;IACP,UAAU,EAAE,CAAC;SACV,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE;QACnC,KAAK,EACH,qEAAqE;KACxE,CAAC;SACD,MAAM,CACL,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAC5C,6BAA6B,CAC9B;IACH,4BAA4B,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpD,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACxC,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChD,iBAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC"}
@@ -0,0 +1,62 @@
1
+ import type { ClientConfig, StreamableHTTPConnection } from "@langchain/mcp-adapters";
2
+ import type { Connector } from "../../runtime/connector.js";
3
+ import type { CredentialReference } from "../../credentials.js";
4
+ /** Per-server MCP tool selection. Names are raw, unprefixed MCP tool names. */
5
+ export interface McpToolSelectionConfig {
6
+ /**
7
+ * Raw MCP tool names to expose from this server. Names are matched before any
8
+ * managed `{server}__` prefix is applied.
9
+ */
10
+ includeTools?: string[];
11
+ /**
12
+ * Raw MCP tool names to hide from this server. Names are matched before any
13
+ * managed `{server}__` prefix is applied.
14
+ */
15
+ excludeTools?: string[];
16
+ }
17
+ /** A user-owned credential reference resolved through Agent Auth at run time. */
18
+ export type McpServerCredential = CredentialReference;
19
+ /** Adapter connection fields MDA forwards, excluding stdio/auth the runtime owns. */
20
+ type AdapterRemoteConnection = Omit<StreamableHTTPConnection, "transport" | "type" | "authProvider">;
21
+ /** Shared remote server options plus MDA-only tool selection and credential mode. */
22
+ export type RemoteMcpServerBaseConfig = AdapterRemoteConnection & McpToolSelectionConfig & {
23
+ /**
24
+ * Bearer credential for this server, declared with `credentials.get(...)`.
25
+ * An agent owner is a deployment-wide secret read once at load; a user
26
+ * owner is the caller's OAuth grant, loaded per caller after the gate.
27
+ */
28
+ credential?: McpServerCredential;
29
+ };
30
+ /** Streamable HTTP MCP server connection. */
31
+ export type HttpMcpServerConfig = RemoteMcpServerBaseConfig & {
32
+ /** Remote transport. `"http"` selects Streamable HTTP. */
33
+ transport: "http";
34
+ };
35
+ /** Legacy SSE MCP server connection. */
36
+ export type SseMcpServerConfig = RemoteMcpServerBaseConfig & {
37
+ /** Remote transport. `"sse"` selects legacy SSE. */
38
+ transport: "sse";
39
+ };
40
+ /** A remote MCP server connection. Stdio servers are intentionally excluded. */
41
+ export type RemoteMcpServerConfig = HttpMcpServerConfig | SseMcpServerConfig;
42
+ /** {@link MultiServerMCPClient} options MDA exposes on `connectors.mcp`. */
43
+ type McpClientOptions = Pick<ClientConfig, "prefixToolNameWithServerName" | "throwOnLoadError" | "useStandardContentBlocks" | "onConnectionError">;
44
+ /** Configuration accepted by `connectors.mcp`. */
45
+ export interface McpServersConfig extends McpClientOptions {
46
+ /**
47
+ * MCP servers to connect to. Each key is the logical server name MDA uses
48
+ * for validation, tracing metadata, and tool-name prefixing.
49
+ */
50
+ mcpServers: Record<string, RemoteMcpServerConfig>;
51
+ }
52
+ /**
53
+ * The connector exported from a `connectors/` module for MCP. It is a branded
54
+ * managed {@link Connector} whose `tools` hook loads the declared MCP tools at
55
+ * runtime, plus the raw config the loader reads.
56
+ */
57
+ export interface McpServersDefinition extends McpServersConfig, Connector {
58
+ /** Internal discriminator used by the MDA loader. */
59
+ readonly kind: "mcp_servers";
60
+ }
61
+ export {};
62
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/connectors/mcp/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,wBAAwB,EACzB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,+EAA+E;AAC/E,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,iFAAiF;AACjF,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEtD,qFAAqF;AACrF,KAAK,uBAAuB,GAAG,IAAI,CACjC,wBAAwB,EACxB,WAAW,GAAG,MAAM,GAAG,cAAc,CACtC,CAAC;AAEF,qFAAqF;AACrF,MAAM,MAAM,yBAAyB,GAAG,uBAAuB,GAC7D,sBAAsB,GAAG;IACvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC,CAAC;AAEJ,6CAA6C;AAC7C,MAAM,MAAM,mBAAmB,GAAG,yBAAyB,GAAG;IAC5D,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wCAAwC;AACxC,MAAM,MAAM,kBAAkB,GAAG,yBAAyB,GAAG;IAC3D,oDAAoD;IACpD,SAAS,EAAE,KAAK,CAAC;CAClB,CAAC;AAEF,gFAAgF;AAChF,MAAM,MAAM,qBAAqB,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAE7E,4EAA4E;AAC5E,KAAK,gBAAgB,GAAG,IAAI,CAC1B,YAAY,EACV,8BAA8B,GAC9B,kBAAkB,GAClB,0BAA0B,GAC1B,mBAAmB,CACtB,CAAC;AAEF,kDAAkD;AAClD,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CACnD;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB,EAAE,SAAS;IACvE,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;CAC9B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/connectors/mcp/types.ts"],"names":[],"mappings":""}
@@ -20,20 +20,18 @@ export interface ToolSelection<TTool extends string = string> {
20
20
  /** Tool names to hide. Applied after {@link ToolSelection.includeTools}. */
21
21
  excludeTools?: TTool[];
22
22
  }
23
- /**
24
- * Shared authoring options for connectors that load remote tools.
25
- */
26
- export interface ToolSelectionConnectorConfig<TTool extends string = string> extends ToolSelection<TTool> {
27
- /** Timeout for each tool call (milliseconds on the TypeScript runtime). */
28
- defaultToolTimeout?: number;
29
- }
30
- /**
31
- * Zod args schema for connectors that accept {@link ToolSelectionConnectorConfig}.
32
- *
33
- * Shared by connector factories so blank/duplicate names and include∩exclude
34
- * overlap fail the same way. `extra` adds connector-specific fields.
35
- */
36
- export declare function toolSelectionConnectorSchema<TArgs, TInput>(extra?: z.ZodRawShape): z.ZodType<TArgs, TInput>;
23
+ /** Tool names: non-empty, no duplicates within one list. */
24
+ export declare const optionalToolNameListSchema: z.ZodOptional<z.ZodArray<z.ZodString>>;
25
+ export declare function appendToolSelectionOverlapIssue(ctx: {
26
+ value: unknown;
27
+ issues: {
28
+ push: (issue: {
29
+ code: "custom";
30
+ input: unknown;
31
+ message: string;
32
+ }) => void;
33
+ };
34
+ }): void;
37
35
  /** Read the name a selection matches a loaded tool by. */
38
36
  export type ToolNameReader = (tool: unknown) => string | undefined;
39
37
  /** Read a loaded tool's own `name`. The default for connectors that don't rename. */
@@ -1 +1 @@
1
- {"version":3,"file":"tool-selection.d.ts","sourceRoot":"","sources":["../../src/connectors/tool-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AACH,MAAM,WAAW,aAAa,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM;IAC1D,6DAA6D;IAC7D,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC;IACvB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B,CAC3C,KAAK,SAAS,MAAM,GAAG,MAAM,CAC7B,SAAQ,aAAa,CAAC,KAAK,CAAC;IAC5B,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAkCD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,EACxD,KAAK,GAAE,CAAC,CAAC,WAAgB,GACxB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAqB1B;AAED,0DAA0D;AAC1D,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;AAEnE,qFAAqF;AACrF,eAAO,MAAM,QAAQ,EAAE,cAGtB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,aAAa,EACxB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,QAAQ,GAAE,cAAyB,GAClC,OAAO,EAAE,CAwBX"}
1
+ {"version":3,"file":"tool-selection.d.ts","sourceRoot":"","sources":["../../src/connectors/tool-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AACH,MAAM,WAAW,aAAa,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM;IAC1D,6DAA6D;IAC7D,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC;IACvB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC;CACxB;AAED,4DAA4D;AAC5D,eAAO,MAAM,0BAA0B,wCAsB1B,CAAC;AAmBd,wBAAgB,+BAA+B,CAAC,GAAG,EAAE;IACnD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,KAAK,EAAE;YAAE,IAAI,EAAE,QAAQ,CAAC;YAAC,KAAK,EAAE,OAAO,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAC;KAC5E,CAAC;CACH,GAAG,IAAI,CAWP;AAED,0DAA0D;AAC1D,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;AAEnE,qFAAqF;AACrF,eAAO,MAAM,QAAQ,EAAE,cAGtB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,aAAa,EACxB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,QAAQ,GAAE,cAAyB,GAClC,OAAO,EAAE,CAwBX"}