@plurnk/plurnk-mcp 1.23.0 → 1.25.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.
package/dist/config.js CHANGED
@@ -1,98 +1,12 @@
1
- import { Validator, } from "@plurnk/plurnk-contracts";
1
+ // {§mcp-configuration} Definitions and independent controls share the resource environment dialect.
2
+ import { ConfigurationError, Knob, ResourceEnvironment } from "@plurnk/plurnk-meta";
3
+ import { readDefinition } from "./definition.js";
4
+ import { readFile } from "node:fs/promises";
5
+ import { dirname, join } from "node:path";
2
6
  const PREFIX = "PLURNK_MCP_";
3
- const COMPANION_SUFFIXES = [
4
- "_bearer",
5
- "_args",
6
- "_cwd",
7
- "_env",
8
- "_headers",
9
- "_summary",
10
- "_tools",
11
- "_read",
12
- ];
13
- const CONTROL_KEYS = new Map([
14
- ["connect_timeout", `${PREFIX}CONNECT_TIMEOUT`],
15
- ["request_timeout", `${PREFIX}REQUEST_TIMEOUT`],
16
- ["retry_floor_ms", `${PREFIX}RETRY_FLOOR_MS`],
17
- ["retry_ceiling_ms", `${PREFIX}RETRY_CEILING_MS`],
18
- ["enabled", `${PREFIX}ENABLED`],
19
- ["expanded", `${PREFIX}EXPANDED`],
20
- ]);
7
+ const CONTROLS = ["CONNECT_TIMEOUT", "REQUEST_TIMEOUT", "RETRY_FLOOR_MS", "RETRY_CEILING_MS", "EXPANDED", "REGISTRY_URL", "REGISTRY_LIMIT"];
21
8
  const SERVER_NAME = /^[a-z][a-z0-9-]*$/;
22
- // {§mcp-summary-derivation} — a _SUMMARY companion may extend a server name
23
- // with one tool name (PLURNK_MCP_<server>_<tool>_SUMMARY); tool names legally
24
- // contain underscores, so summary keys admit them and bind to the declared
25
- // server in summaryOverrides.
26
- const SUMMARY_KEY_NAME = /^[a-z][a-z0-9_-]*$/;
27
9
  const ENV_REFERENCE = /\$\{([A-Za-z_][A-Za-z0-9_]*)\}/gu;
28
- const assertServerName = (name, variable) => {
29
- if (!SERVER_NAME.test(name)) {
30
- throw new Error(`${variable} derives invalid MCP server name '${name}'; names must match [a-z][a-z0-9-]*.`);
31
- }
32
- };
33
- const parseEnvironment = (environ, allowOrphanCompanions = false) => {
34
- const targets = new Map();
35
- const companions = new Map();
36
- for (const [key, value] of Object.entries(environ)) {
37
- if (value === undefined || !key.startsWith(PREFIX))
38
- continue;
39
- const suffix = key.slice(PREFIX.length);
40
- if (suffix.length === 0)
41
- continue;
42
- const folded = suffix.toLowerCase();
43
- const controlKey = CONTROL_KEYS.get(folded);
44
- if (controlKey !== undefined) {
45
- if (key !== controlKey) {
46
- throw new Error(`${key} case-folds to ${controlKey}; that name is a reserved global and must use its canonical spelling.`);
47
- }
48
- continue;
49
- }
50
- const companion = COMPANION_SUFFIXES.find((candidate) => folded.endsWith(candidate));
51
- if (companion !== undefined) {
52
- const name = folded.slice(0, -companion.length);
53
- const reservedGlobal = CONTROL_KEYS.get(name);
54
- if (reservedGlobal !== undefined) {
55
- throw new Error(`${key} uses ${reservedGlobal} as a server name; reserved globals cannot have server companions.`);
56
- }
57
- if (companion === "_summary") {
58
- if (!SUMMARY_KEY_NAME.test(name)) {
59
- throw new Error(`${key} derives invalid MCP summary name '${name}'; names must match [a-z][a-z0-9_-]*.`);
60
- }
61
- }
62
- else {
63
- assertServerName(name, key);
64
- }
65
- const bySuffix = companions.get(name) ?? new Map();
66
- const existing = bySuffix.get(companion);
67
- if (existing !== undefined) {
68
- throw new Error(`${existing.key} and ${key} are duplicate MCP server companions after case-folding.`);
69
- }
70
- bySuffix.set(companion, { key, value });
71
- companions.set(name, bySuffix);
72
- continue;
73
- }
74
- assertServerName(folded, key);
75
- const existing = targets.get(folded);
76
- if (existing !== undefined) {
77
- throw new Error(`${existing.key} and ${key} both derive MCP server name '${folded}' after case-folding.`);
78
- }
79
- targets.set(folded, { key, value });
80
- }
81
- if (!allowOrphanCompanions) {
82
- for (const [name, fields] of companions) {
83
- if (targets.has(name))
84
- continue;
85
- // A _SUMMARY companion may address one tool of a declared server:
86
- // PLURNK_MCP_<SERVER>_<TOOL>_SUMMARY ({§mcp-summary-derivation}).
87
- const toolSummaryOf = [...targets.keys()].find((target) => name.startsWith(`${target}_`));
88
- if (fields.get("_summary") !== undefined && toolSummaryOf !== undefined)
89
- continue;
90
- const variables = [...fields.values()].map(({ key }) => key).join(", ");
91
- throw new Error(`${variables} has no MCP server target ${PREFIX}${name.toUpperCase()}.`);
92
- }
93
- }
94
- return { targets, companions };
95
- };
96
10
  export const expandReferences = (value, environ, field) => value.replaceAll(ENV_REFERENCE, (_match, name) => {
97
11
  const resolved = environ[name];
98
12
  if (resolved === undefined)
@@ -100,262 +14,189 @@ export const expandReferences = (value, environ, field) => value.replaceAll(ENV_
100
14
  return resolved;
101
15
  });
102
16
  const jsonStrings = (raw, field) => {
103
- if (raw === undefined || raw.length === 0)
104
- return [];
105
17
  let parsed;
106
18
  try {
107
19
  parsed = JSON.parse(raw);
108
20
  }
109
21
  catch (cause) {
110
- throw new Error(`${field} must be a JSON array of strings.`, { cause });
22
+ throw new ConfigurationError(field, `${field} must be a JSON array of strings.`, { cause });
111
23
  }
112
24
  if (!Array.isArray(parsed) || !parsed.every((value) => typeof value === "string")) {
113
- throw new Error(`${field} must be a JSON array of strings.`);
25
+ throw new ConfigurationError(field, `${field} must be a JSON array of strings.`);
114
26
  }
115
27
  return parsed;
116
28
  };
117
- const uniqueToolNames = (values, field) => {
29
+ const uniqueNames = (values, field, what) => {
118
30
  const unique = new Set();
119
31
  for (const value of values) {
120
32
  if (value.length === 0)
121
- throw new Error(`${field} contains an empty tool name.`);
33
+ throw new ConfigurationError(field, `${field} contains an empty ${what}.`);
122
34
  if (unique.has(value))
123
- throw new Error(`${field} contains duplicate tool name '${value}'.`);
35
+ throw new ConfigurationError(field, `${field} contains duplicate ${what} '${value}'.`);
124
36
  unique.add(value);
125
37
  }
126
38
  return [...unique];
127
39
  };
128
- const toolNames = (raw, field) => uniqueToolNames(jsonStrings(raw, field), field);
129
- const jsonRecord = (raw, field) => {
130
- if (raw === undefined || raw.length === 0)
131
- return undefined;
132
- let parsed;
133
- try {
134
- parsed = JSON.parse(raw);
135
- }
136
- catch (cause) {
137
- throw new Error(`${field} must be a JSON object with string values.`, { cause });
138
- }
139
- if (typeof parsed !== "object"
140
- || parsed === null
141
- || Array.isArray(parsed)
142
- || !Object.values(parsed).every((value) => typeof value === "string")) {
143
- throw new Error(`${field} must be a JSON object with string values.`);
144
- }
145
- return parsed;
40
+ const configuration = (environ) => {
41
+ const resources = new ResourceEnvironment(PREFIX, { controls: CONTROLS, settings: ["TOOLS"] }, environ);
42
+ const tools = new Map([...resources.settings("TOOLS")].map(([alias, { key, value }]) => [
43
+ alias,
44
+ value.length === 0 ? null : uniqueNames(jsonStrings(value, key), key, "tool name"),
45
+ ]));
46
+ return { resources, tools };
146
47
  };
147
- export const serverNames = (environ = process.env) => [...parseEnvironment(environ).targets]
148
- .filter(([, { value }]) => value !== "")
149
- .map(([name]) => name)
150
- .toSorted();
151
- const definitionFromEnvironment = (name, parsed, base) => {
152
- const folded = name.toLowerCase();
153
- const target = parsed.targets.get(folded);
154
- if (target === undefined && base === undefined) {
155
- const orphaned = parsed.companions.get(folded);
156
- if (orphaned === undefined)
157
- return null;
158
- const variables = [...orphaned.values()].map(({ key }) => key).join(", ");
159
- throw new Error(`${variables} has no MCP server target ${PREFIX}${folded.toUpperCase()}.`);
160
- }
161
- if (base !== undefined && base.name !== folded) {
162
- throw new Error(`MCP base definition '${base.name}' cannot configure alias '${folded}'.`);
163
- }
164
- if (target?.value === "")
165
- return null;
166
- const lower = target === undefined ? base : undefined;
167
- const fields = parsed.companions.get(folded);
168
- const fieldName = (suffix) => fields?.get(suffix)?.key ?? `${PREFIX}${folded.toUpperCase()}${suffix.toUpperCase()}`;
169
- const configuredTools = fields?.get("_tools");
170
- const inheritedTools = lower?.tools;
171
- const tools = configuredTools === undefined
172
- ? structuredClone(inheritedTools)
173
- : toolNames(configuredTools.value, configuredTools.key);
174
- const policy = {
175
- ...(tools === undefined ? {} : { tools }),
176
- read: fields?.has("_read")
177
- ? toolNames(fields.get("_read")?.value, fieldName("_read"))
178
- : structuredClone(lower?.read ?? []),
179
- };
180
- const transport = target === undefined
181
- ? lower?.transport
182
- : /^https?:\/\//iu.test(target.value) ? "http" : "stdio";
183
- if (transport === "http") {
184
- const invalid = ["_args", "_cwd", "_env"]
185
- .flatMap((suffix) => fields?.get(suffix)?.key ?? []);
186
- if (invalid.length > 0) {
187
- throw new Error(`${invalid.join(", ")} cannot accompany HTTP MCP server target ${target?.key ?? folded}; transport-neutral _TOOLS/_READ and HTTP _HEADERS are valid.`);
48
+ // Settings are validated even before their resource exists ({§resource-environment}).
49
+ export const serverSettings = (alias, environ = process.env) => ({
50
+ tools: configuration(environ).tools.get(alias) ?? null,
51
+ });
52
+ export const serviceDefinitions = (environ = process.env) => {
53
+ const { resources } = configuration(environ);
54
+ return [...resources.definitions].map(([alias, { key, value }]) => {
55
+ let definition;
56
+ try {
57
+ definition = readDefinition(JSON.parse(value));
188
58
  }
189
- const inheritedHeaders = lower?.transport === "http"
190
- ? structuredClone(lower.headers)
191
- : undefined;
192
- const headers = fields?.has("_headers")
193
- ? jsonRecord(fields.get("_headers")?.value, fieldName("_headers"))
194
- : inheritedHeaders;
195
- const bearer = fields?.get("_bearer");
196
- const inheritedAuthorization = lower?.transport === "http"
197
- ? structuredClone(lower.authorization)
198
- : undefined;
199
- const authorization = bearer === undefined
200
- ? inheritedAuthorization
201
- : { type: "bearer", token: bearer.value };
202
- const authorizationHeader = Object.keys(headers ?? {}).find((key) => key.toLowerCase() === "authorization");
203
- if (authorization?.type === "bearer" && authorizationHeader !== undefined) {
204
- throw new Error(`${bearer?.key ?? "Bearer authorization"} conflicts with Authorization in the server's _HEADERS map.`);
59
+ catch (cause) {
60
+ throw new ConfigurationError(key, `${key} must be an MCP server definition.`, { cause });
205
61
  }
206
- const url = target?.value ?? (lower?.transport === "http" ? lower.url : undefined);
207
- if (url === undefined)
208
- throw new Error(`HTTP MCP server '${folded}' has no target.`);
209
- return Validator.assertMcpServerDefinition({
210
- name: folded,
211
- transport: "http",
212
- url,
213
- ...(headers === undefined ? {} : { headers }),
214
- ...(authorization === undefined ? {} : { authorization }),
215
- ...policy,
216
- });
217
- }
218
- const httpOnly = ["_headers", "_bearer"]
219
- .flatMap((suffix) => fields?.get(suffix)?.key ?? []);
220
- if (httpOnly.length > 0) {
221
- throw new Error(`${httpOnly.join(", ")} cannot accompany stdio MCP server target ${target?.key ?? folded}.`);
222
- }
223
- const inheritedStdio = lower?.transport === "stdio" ? lower : undefined;
224
- const cwd = fields?.has("_cwd")
225
- ? fields.get("_cwd")?.value
226
- : inheritedStdio?.cwd;
227
- const stdioEnvironment = fields?.has("_env")
228
- ? jsonRecord(fields.get("_env")?.value, fieldName("_env"))
229
- : structuredClone(inheritedStdio?.env);
230
- const args = fields?.has("_args")
231
- ? jsonStrings(fields.get("_args")?.value, fieldName("_args"))
232
- : structuredClone(inheritedStdio?.args ?? []);
233
- const command = target?.value ?? inheritedStdio?.command;
234
- if (command === undefined)
235
- throw new Error(`Stdio MCP server '${folded}' has no target.`);
236
- return Validator.assertMcpServerDefinition({
237
- name: folded,
238
- transport: "stdio",
239
- command,
240
- args,
241
- ...(cwd === undefined ? {} : { cwd }),
242
- ...(stdioEnvironment === undefined ? {} : { env: stdioEnvironment }),
243
- ...policy,
62
+ if (definition.name !== alias)
63
+ throw new ConfigurationError(key, `${key} must define name '${alias}'.`);
64
+ return { alias, definition, enabled: resources.enabled(alias), provenance: { kind: "environment", source: key } };
244
65
  });
245
66
  };
246
- export const serverDefinition = (name, environ = process.env) => definitionFromEnvironment(name, parseEnvironment(environ));
247
- export const overlayServerDefinitions = (overlay, bases = new Map()) => {
248
- const validated = Validator.assertMcpConfigurationOverlay(structuredClone(overlay));
249
- const parsed = parseEnvironment(validated, true);
250
- const declared = new Set([...parsed.targets.keys(), ...bases.keys()]);
251
- const names = new Set([
252
- ...parsed.targets.keys(),
253
- ...[...parsed.companions.keys()].map((name) => declared.has(name)
254
- ? name
255
- : [...declared].find((server) => name.startsWith(`${server}_`)) ?? name),
256
- ]);
257
- return new Map([...names]
258
- .toSorted()
259
- .flatMap((name) => {
260
- const definition = definitionFromEnvironment(name, parsed, bases.get(name));
261
- return definition === null ? [] : [[name, definition]];
262
- }));
263
- };
264
- export const serviceDefinitions = (environ = process.env) => serverNames(environ).map((name) => {
265
- const definition = serverDefinition(name, environ);
266
- if (definition === null)
267
- throw new Error(`MCP server '${name}' disappeared during configuration.`);
268
- return definition;
269
- });
270
- // {§mcp-summary-derivation} — authored orientation lines. A _SUMMARY companion
271
- // names either the whole server (PLURNK_MCP_<SERVER>_SUMMARY) or one tool
272
- // (PLURNK_MCP_<SERVER>_<TOOL>_SUMMARY). Values expand ${NAME} references like
273
- // every other companion.
274
- // {§tools-resource-materialization} — the turn-0 tools survey lists server
275
- // families; servers named here also expand their complete tool tree into the
276
- // turn-0 survey.
277
- const selectedServerNames = (environ, field) => {
278
- const configured = jsonStrings(environ[field], field);
279
- const { targets } = parseEnvironment(environ);
280
- const selected = new Set();
281
- for (const name of configured) {
282
- assertServerName(name, field);
283
- const target = targets.get(name);
284
- if (target === undefined) {
285
- throw new Error(`${field} contains unknown MCP server '${name}'.`);
67
+ const isObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
68
+ // {§mcp-file-configuration} Files supply definitions, not installations or another lifecycle.
69
+ export const configuredDefinitions = async (directories, environ = process.env, plugins) => {
70
+ const { resources } = configuration(environ);
71
+ const selected = new Map(serviceDefinitions(environ).map((entry) => [entry.alias, entry]));
72
+ const addPlugins = (scopeDirectory) => {
73
+ for (const plugin of plugins?.plugins ?? []) {
74
+ const root = plugins.roots[plugin.scope];
75
+ if ((root == null ? null : dirname(root)) !== scopeDirectory)
76
+ continue;
77
+ const file = join(plugin.root, "mcp.json");
78
+ for (const [alias, entry] of plugin.mcpServers ?? []) {
79
+ if (selected.has(alias))
80
+ continue;
81
+ const reference = `/mcpServers/${alias.replaceAll("~", "~0").replaceAll("/", "~1")}`;
82
+ if (!isServerName(alias) || entry.type === "sse") {
83
+ plugins.report({
84
+ source: "engine:configuration", kind: "plugin_configuration", level: "warn", family: "mcp",
85
+ message: `${file}#${reference}: ${entry.type === "sse" ? "legacy SSE transport is unsupported" : "server name must match [a-z][a-z0-9-]*"}; this entry was skipped.`,
86
+ });
87
+ continue;
88
+ }
89
+ const definition = readDefinition({ ...entry, name: alias });
90
+ selected.set(alias, {
91
+ alias, definition, enabled: resources.enabled(alias),
92
+ context: { root: plugin.root, data: plugin.data },
93
+ provenance: { kind: "plugin", source: file, reference },
94
+ });
95
+ }
286
96
  }
287
- if (target.value === "")
288
- continue;
289
- if (selected.has(name)) {
290
- throw new Error(`${field} contains duplicate MCP server '${name}'.`);
97
+ };
98
+ const addFile = async (directory) => {
99
+ const file = join(directory, "mcp.json");
100
+ let contents;
101
+ try {
102
+ contents = await readFile(file, "utf8");
291
103
  }
292
- selected.add(name);
293
- }
294
- return [...selected].toSorted();
295
- };
296
- export const expandedServerNames = (environ = process.env) => selectedServerNames(environ, `${PREFIX}EXPANDED`);
297
- export const summaryOverrides = (environ = process.env) => {
298
- const { targets, companions } = parseEnvironment(environ);
299
- const servers = new Map();
300
- const tools = new Map();
301
- for (const [name, fields] of companions) {
302
- const summary = fields.get("_summary");
303
- if (summary === undefined)
304
- continue;
305
- if (targets.has(name)) {
306
- if (targets.get(name)?.value !== "") {
307
- servers.set(name, expandReferences(summary.value, environ, summary.key));
308
- }
309
- continue;
104
+ catch (cause) {
105
+ if (cause.code === "ENOENT")
106
+ return;
107
+ throw new ConfigurationError(file, `${file} could not be read.`, { cause });
108
+ }
109
+ let document;
110
+ try {
111
+ document = JSON.parse(contents);
112
+ }
113
+ catch (cause) {
114
+ throw new ConfigurationError(file, `${file} must contain valid JSON.`, { cause });
115
+ }
116
+ if (!isObject(document) || !isObject(document.mcpServers)
117
+ || Object.keys(document).some((key) => key !== "mcpServers" && key !== "$schema")
118
+ || (document.$schema !== undefined && typeof document.$schema !== "string")) {
119
+ throw new ConfigurationError(file, `${file} must contain a mcpServers object and, optionally, a string $schema.`);
310
120
  }
311
- const server = [...targets.keys()].find((target) => name.startsWith(`${target}_`));
312
- if (server === undefined) {
313
- throw new Error(`${summary.key} has no MCP server target ${PREFIX}${name.toUpperCase()}.`);
121
+ for (const [alias, entry] of Object.entries(document.mcpServers)) {
122
+ if (selected.has(alias))
123
+ continue;
124
+ const reference = `/mcpServers/${alias.replaceAll("~", "~0").replaceAll("/", "~1")}`;
125
+ const key = `${file}#${reference}`;
126
+ let definition;
127
+ try {
128
+ if (!isObject(entry))
129
+ throw new TypeError("A server entry must be an object.");
130
+ if (Object.hasOwn(entry, "name"))
131
+ throw new TypeError("The map key supplies the server name; omit name from the entry.");
132
+ const type = Object.hasOwn(entry, "type") ? entry.type : (Object.hasOwn(entry, "command") ? "stdio" : "streamable-http");
133
+ definition = readDefinition({ ...entry, name: alias, type });
134
+ }
135
+ catch (cause) {
136
+ throw new ConfigurationError(key, `${key} must be a complete MCP server definition without name.`, { cause });
137
+ }
138
+ selected.set(alias, { alias, definition, enabled: resources.enabled(alias), provenance: { kind: "file", source: file, reference } });
314
139
  }
315
- if (targets.get(server)?.value === "")
316
- continue;
317
- const tool = name.slice(server.length + 1);
318
- tools.set(`${server}/${tool}`, expandReferences(summary.value, environ, summary.key));
140
+ };
141
+ for (const directory of directories) {
142
+ await addFile(directory);
143
+ addPlugins(directory);
319
144
  }
320
- return { servers, tools };
321
- };
322
- export const serviceEnabledNames = (environ = process.env) => {
323
- const field = `${PREFIX}ENABLED`;
324
- if (environ[field] === undefined)
325
- throw new Error(`${field} is missing from the assembled environment floor.`);
326
- if (environ[field] === "")
327
- throw new Error(`${field} must be a JSON array of strings; [] enables none.`);
328
- return selectedServerNames(environ, field);
145
+ addPlugins(null);
146
+ return [...selected.values()].toSorted((left, right) => left.alias.localeCompare(right.alias));
329
147
  };
330
- export const connectTimeoutMs = (environ = process.env) => {
331
- const raw = environ.PLURNK_MCP_CONNECT_TIMEOUT;
332
- const value = Number(raw);
333
- if (!Number.isInteger(value) || value < 1) {
334
- throw new Error(`PLURNK_MCP_CONNECT_TIMEOUT must be a positive integer; got ${JSON.stringify(raw)}.`);
148
+ // {§mcp-configuration} — the servers whose every tool turn zero surveys.
149
+ export const expandedServerNames = (environ = process.env) => {
150
+ const field = `${PREFIX}EXPANDED`;
151
+ const raw = environ[field];
152
+ if (raw === undefined || raw.length === 0)
153
+ return [];
154
+ const names = uniqueNames(jsonStrings(raw, field), field, "MCP server");
155
+ for (const name of names) {
156
+ if (!SERVER_NAME.test(name))
157
+ throw new ConfigurationError(field, `${field} names '${name}', which is not an MCP server alias ([a-z][a-z0-9-]*).`);
335
158
  }
336
- return value;
159
+ return names.toSorted();
337
160
  };
161
+ export const isServerName = (name) => SERVER_NAME.test(name);
162
+ export const connectTimeoutMs = (environ = process.env) => Knob.integer("PLURNK_MCP_CONNECT_TIMEOUT", 1, environ);
338
163
  export const retryPacing = (environ = process.env) => {
339
- const read = (name) => {
340
- const raw = environ[name];
341
- const value = Number(raw);
342
- if (!Number.isInteger(value) || value < 1)
343
- throw new Error(`${name} must be a positive integer; got ${JSON.stringify(raw)}.`);
344
- return value;
164
+ const pacing = {
165
+ floorMs: Knob.integer("PLURNK_MCP_RETRY_FLOOR_MS", 1, environ),
166
+ ceilingMs: Knob.integer("PLURNK_MCP_RETRY_CEILING_MS", 1, environ),
345
167
  };
346
- const pacing = { floorMs: read("PLURNK_MCP_RETRY_FLOOR_MS"), ceilingMs: read("PLURNK_MCP_RETRY_CEILING_MS") };
347
168
  if (pacing.ceilingMs < pacing.floorMs) {
348
- throw new Error(`PLURNK_MCP_RETRY_CEILING_MS (${pacing.ceilingMs}) must be at least PLURNK_MCP_RETRY_FLOOR_MS (${pacing.floorMs}).`);
169
+ throw new ConfigurationError("PLURNK_MCP_RETRY_CEILING_MS", `PLURNK_MCP_RETRY_CEILING_MS (${pacing.ceilingMs}) must be at least PLURNK_MCP_RETRY_FLOOR_MS (${pacing.floorMs}).`);
349
170
  }
350
171
  return pacing;
351
172
  };
352
173
  export const retryDelayMs = ({ floorMs, ceilingMs }, attempt) => Math.min(floorMs * (2 ** attempt), ceilingMs);
353
- export const requestTimeoutMs = (environ = process.env) => {
354
- const raw = environ.PLURNK_MCP_REQUEST_TIMEOUT;
355
- const value = Number(raw);
356
- if (!Number.isInteger(value) || value < 1) {
357
- throw new Error(`PLURNK_MCP_REQUEST_TIMEOUT must be a positive integer; got ${JSON.stringify(raw)}.`);
174
+ export const registrySettings = (environ = process.env) => {
175
+ const raw = environ.PLURNK_MCP_REGISTRY_URL;
176
+ if (raw === undefined)
177
+ throw new Error("PLURNK_MCP_REGISTRY_URL is missing from the assembled environment floor.");
178
+ if (raw.length > 0) {
179
+ const refusal = "PLURNK_MCP_REGISTRY_URL must be an HTTP or HTTPS URL.";
180
+ let url;
181
+ try {
182
+ url = new URL(raw);
183
+ }
184
+ catch (cause) {
185
+ throw new ConfigurationError("PLURNK_MCP_REGISTRY_URL", refusal, { cause });
186
+ }
187
+ if (url.protocol !== "https:" && url.protocol !== "http:")
188
+ throw new ConfigurationError("PLURNK_MCP_REGISTRY_URL", refusal);
358
189
  }
359
- return value;
190
+ const limit = Knob.integer("PLURNK_MCP_REGISTRY_LIMIT", 1, environ);
191
+ return { url: raw.length === 0 ? null : raw, limit };
192
+ };
193
+ export const requestTimeoutMs = (environ = process.env) => Knob.integer("PLURNK_MCP_REQUEST_TIMEOUT", 1, environ);
194
+ export const validateConfiguration = (environ = process.env) => {
195
+ serviceDefinitions(environ);
196
+ expandedServerNames(environ);
197
+ connectTimeoutMs(environ);
198
+ requestTimeoutMs(environ);
199
+ retryPacing(environ);
200
+ registrySettings(environ);
360
201
  };
361
202
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type McpServerDefinition } from "@plurnk/plurnk-contracts";
2
+ export declare const readDefinition: (input: unknown) => McpServerDefinition;
3
+ //# sourceMappingURL=definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/E,eAAO,MAAM,cAAc,UAAW,OAAO,KAAG,mBAW/C,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Validator } from "@plurnk/plurnk-contracts";
2
+ // {§mcp-server-definition} One admission path for configuration and live additions.
3
+ export const readDefinition = (input) => {
4
+ const definition = structuredClone(Validator.assertMcpServerDefinition(input));
5
+ if (definition.type === "stdio")
6
+ return definition;
7
+ const url = new URL(definition.url);
8
+ if (url.protocol !== "https:" && url.protocol !== "http:") {
9
+ throw new TypeError("An MCP endpoint must use HTTP or HTTPS.");
10
+ }
11
+ if (definition.authorization !== undefined && Object.keys(definition.headers ?? {}).some((name) => name.toLowerCase() === "authorization")) {
12
+ throw new TypeError("An MCP definition cannot supply both authorization and an Authorization header.");
13
+ }
14
+ return definition;
15
+ };
16
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA4B,MAAM,0BAA0B,CAAC;AAE/E,oFAAoF;AACpF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAc,EAAuB,EAAE;IAClE,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,yBAAyB,CAAC,KAA4B,CAAC,CAAC,CAAC;IACtG,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,UAAU,CAAC;IACnD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACxD,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,UAAU,CAAC,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,EAAE,CAAC;QACzI,MAAM,IAAI,SAAS,CAAC,iFAAiF,CAAC,CAAC;IAC3G,CAAC;IACD,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { default as Module } from "./Module.ts";
2
2
  export { default } from "./Module.ts";
3
3
  export { MCP_CLIENT_VERSION, MCP_CONFORMANCE_VERSION, MCP_PROTOCOL_VERSION, MCP_SPECIFICATION_COMMIT, MCP_TASKS_EXTENSION_ID, MCP_TASKS_SPECIFICATION_COMMIT, } from "./protocol.ts";
4
- export { connectTimeoutMs, expandReferences, requestTimeoutMs, serverDefinition, serverNames, serviceDefinitions, serviceEnabledNames, } from "./config.ts";
5
- export type { ToolPolicy } from "./config.ts";
4
+ export { serviceDefinitions, configuredDefinitions, connectTimeoutMs, expandReferences, requestTimeoutMs, serverSettings, validateConfiguration, } from "./config.ts";
5
+ export type { McpAuthorization, ToolPolicy } from "./config.ts";
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EACH,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACtB,8BAA8B,GACjC,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,mBAAmB,GACtB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EACH,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACtB,8BAA8B,GACjC,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,qBAAqB,GACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}