@plurnk/plurnk-execs-mcp 0.1.0 → 0.2.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/README.md CHANGED
@@ -49,20 +49,20 @@ PLURNK_MCP_FIGMA_ENV='{"FIGMA_API_KEY":"…"}'
49
49
  ## Calling tools
50
50
 
51
51
  ```
52
- EXEC[<server>]:<tool_name> <json-arguments>:EXEC
52
+ <<EXEC[<server>]:<tool_name> <json-arguments>:EXEC
53
53
  ```
54
54
 
55
55
  `<json-arguments>` is a single JSON object; omit it for a no-argument tool.
56
56
 
57
57
  ```
58
- EXEC[github]:create_issue {"title":"Bug","body":"…"}:EXEC
59
- EXEC[github]:list_repos:EXEC
58
+ <<EXEC[github]:create_issue {"title":"Bug","body":"…"}:EXEC
59
+ <<EXEC[github]:list_repos:EXEC
60
60
  ```
61
61
 
62
- Run a tag with an **empty body** (or `?` / `help`) to write the server's live tool catalog — names, descriptions, input JSON schemas — to the `results` stream:
62
+ Run a tag with `?` (or `help`, or an empty body) to write the server's live tool catalog — names, descriptions, input JSON schemas — to the `results` stream:
63
63
 
64
64
  ```
65
- EXEC[github]::EXEC
65
+ <<EXEC[github]:?:EXEC
66
66
  ```
67
67
 
68
68
  ## Output & gating
package/dist/Mcp.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Mcp.d.ts","sourceRoot":"","sources":["../src/Mcp.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAiC3G,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAI9C;AAUD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,YAAY;IACzC,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAEpD;IAKc,KAAK,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAkB3C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM;IAIzC,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;CA0DhG"}
1
+ {"version":3,"file":"Mcp.d.ts","sourceRoot":"","sources":["../src/Mcp.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAiC3G,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAI9C;AAUD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,YAAY;IACzC,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAEpD;IAKc,KAAK,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAkB3C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM;IAIzC,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;CAgEhG"}
package/dist/Mcp.js CHANGED
@@ -2,7 +2,7 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
2
  import { StdioClientTransport, getDefaultEnvironment } from "@modelcontextprotocol/sdk/client/stdio.js";
3
3
  import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
4
4
  import { BaseExecutor } from "@plurnk/plurnk-execs";
5
- import { serverConfig } from "./config.js";
5
+ import { serverConfig, isInjected, installAllowed } from "./config.js";
6
6
  const CLIENT_VERSION = "0.1.0";
7
7
  // MCP connections are long-lived: open one Client per server, lazily, and reuse
8
8
  // it across runs (the wasm `wabtPromise` singleton precedent). Keyed by tag
@@ -80,6 +80,12 @@ export default class Mcp extends BaseExecutor {
80
80
  };
81
81
  if (cfg === null)
82
82
  return fail("mcp_not_configured", `MCP server '${runtime}' is not configured`);
83
+ // Defense in depth behind the consumer's route gate (#240): a runtime-injected
84
+ // server is honored only while PLURNK_MCP_INSTALL permits added tooling. An
85
+ // env-declared server is never gated (isInjected is false for it).
86
+ if (isInjected(runtime) && !installAllowed()) {
87
+ return fail("mcp_install_disabled", `MCP server '${runtime}' was added at runtime but PLURNK_MCP_INSTALL is off`, 501);
88
+ }
83
89
  let client;
84
90
  try {
85
91
  client = await connect(runtime, cfg);
package/dist/Mcp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Mcp.js","sourceRoot":"","sources":["../src/Mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Mcp.js","sourceRoot":"","sources":["../src/Mcp.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -7,6 +7,12 @@ export interface ServerConfig {
7
7
  headers?: Record<string, string>;
8
8
  }
9
9
  export declare const installAllowed: (env?: NodeJS.ProcessEnv) => boolean;
10
+ export declare const registerServer: (name: string, config: ServerConfig) => void;
11
+ export declare const isInjected: (name: string, env?: NodeJS.ProcessEnv) => boolean;
12
+ export declare const parseTarget: (target: string, { env, headers }?: {
13
+ env?: Record<string, string>;
14
+ headers?: Record<string, string>;
15
+ }) => ServerConfig;
10
16
  export declare const serverNames: (env?: NodeJS.ProcessEnv) => string[];
11
17
  export declare const serverConfig: (name: string, env?: NodeJS.ProcessEnv) => ServerConfig | null;
12
18
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AA+BA,MAAM,WAAW,YAAY;IACzB,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAmDD,eAAO,MAAM,cAAc,GAAI,MAAK,MAAM,CAAC,UAAwB,KAAG,OAGrE,CAAC;AAIF,eAAO,MAAM,WAAW,GAAI,MAAK,MAAM,CAAC,UAAwB,KAAG,MAAM,EAChC,CAAC;AAI1C,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,MAAK,MAAM,CAAC,UAAwB,KAAG,YAAY,GAAG,IAUhG,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AA+BA,MAAM,WAAW,YAAY;IACzB,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAmDD,eAAO,MAAM,cAAc,GAAI,MAAK,MAAM,CAAC,UAAwB,KAAG,OAGrE,CAAC;AAWF,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,QAAQ,YAAY,KAAG,IAInE,CAAC;AAMF,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,EAAE,MAAK,MAAM,CAAC,UAAwB,KAAG,OAG/E,CAAC;AAKF,eAAO,MAAM,WAAW,GACpB,QAAQ,MAAM,EACd,mBAAkB;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAO,KAC1F,YAIF,CAAC;AAIF,eAAO,MAAM,WAAW,GAAI,MAAK,MAAM,CAAC,UAAwB,KAAG,MAAM,EACE,CAAC;AAI5E,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,MAAK,MAAM,CAAC,UAAwB,KAAG,YAAY,GAAG,IAWhG,CAAC"}
package/dist/config.js CHANGED
@@ -82,21 +82,52 @@ export const installAllowed = (env = process.env) => {
82
82
  const gate = env.PLURNK_MCP_INSTALL;
83
83
  return !(gate === undefined || gate === "" || gate === "0");
84
84
  };
85
- // The configured server names (= the tags), case-folded and sorted. Empty when
86
- // none are set.
87
- export const serverNames = (env = process.env) => [...parse(env).targets.keys()].sort();
88
- // Resolve a server's transport config. An http(s) URL target http; anything
89
- // else a stdio command line. null when the server names no target.
85
+ // Runtime-injected servers the `/mcp` hotload route (plurnk-execs#13). The
86
+ // consumer gates registration with installAllowed() then calls registerServer();
87
+ // the injected set supplements env discovery so the executor's run()/probe()
88
+ // resolve the new tag. Env-declared servers always take precedence (the locked
89
+ // #240 rule: they're operator-vetted, never shadowed by a runtime add).
90
+ const injected = new Map();
91
+ // Register a runtime-injected server under a tag. The consumer's route MUST gate
92
+ // this behind installAllowed(); the executor re-checks at connect (isInjected).
93
+ export const registerServer = (name, config) => {
94
+ const key = name.toLowerCase();
95
+ if (CONTROL_KEYS.has(key))
96
+ throw new Error(`"${key}" is a reserved control key, not a server name`);
97
+ injected.set(key, config);
98
+ };
99
+ // Whether `name` resolves to a runtime-injected server that env does NOT also
100
+ // claim — the executor gates exactly these on installAllowed() at connect
101
+ // (defense in depth behind the consumer's route gate). An env-declared server is
102
+ // never gated, even if a name was also injected, since env always wins.
103
+ export const isInjected = (name, env = process.env) => {
104
+ const key = name.toLowerCase();
105
+ return !parse(env).targets.has(key) && injected.has(key);
106
+ };
107
+ // Parse a server target string into transport config. An http(s) URL → http;
108
+ // anything else → a stdio command line. Shared by env resolution and the hotload
109
+ // route, which turns an operator-supplied `<address>` into a ServerConfig.
110
+ export const parseTarget = (target, { env, headers } = {}) => {
111
+ if (/^https?:\/\//i.test(target))
112
+ return { transport: "http", url: target, headers };
113
+ const [command, ...args] = target.split(/\s+/);
114
+ return { transport: "stdio", command, args, env };
115
+ };
116
+ // The configured server names (= the tags), case-folded and sorted: env-declared
117
+ // unioned with runtime-injected. Empty when none are set.
118
+ export const serverNames = (env = process.env) => [...new Set([...parse(env).targets.keys(), ...injected.keys()])].sort();
119
+ // Resolve a server's transport config. Env-declared wins; a runtime-injected
120
+ // server resolves only when no env target claims the name. null when neither does.
90
121
  export const serverConfig = (name, env = process.env) => {
91
122
  const { targets, envs, headers } = parse(env);
92
123
  const key = name.toLowerCase();
93
124
  const target = targets.get(key);
94
- if (target === undefined)
95
- return null;
96
- if (/^https?:\/\//i.test(target)) {
97
- return { transport: "http", url: target, headers: jsonRecord(headers.get(key), `${PREFIX}${key.toUpperCase()}_HEADERS`) };
125
+ if (target !== undefined) {
126
+ return parseTarget(target, {
127
+ env: jsonRecord(envs.get(key), `${PREFIX}${key.toUpperCase()}_ENV`),
128
+ headers: jsonRecord(headers.get(key), `${PREFIX}${key.toUpperCase()}_HEADERS`),
129
+ });
98
130
  }
99
- const [command, ...args] = target.split(/\s+/);
100
- return { transport: "stdio", command, args, env: jsonRecord(envs.get(key), `${PREFIX}${key.toUpperCase()}_ENV`) };
131
+ return injected.get(key) ?? null;
101
132
  };
102
133
  //# 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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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  export { default as Mcp } from "./Mcp.ts";
2
2
  export { default } from "./Mcp.ts";
3
- export { runtimes } from "./runtimes.ts";
3
+ export { closeAll } from "./Mcp.ts";
4
+ export { runtimes, runtimeDecl } from "./runtimes.ts";
5
+ export { installAllowed, registerServer, isInjected, parseTarget, serverConfig, serverNames, } from "./config.ts";
6
+ export type { ServerConfig } from "./config.ts";
4
7
  //# 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,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EACH,cAAc,EACd,cAAc,EACd,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,7 @@
1
1
  export { default as Mcp } from "./Mcp.js";
2
2
  export { default } from "./Mcp.js";
3
- export { runtimes } from "./runtimes.js";
3
+ export { closeAll } from "./Mcp.js";
4
+ export { runtimes, runtimeDecl } from "./runtimes.js";
5
+ // Runtime surface for the consumer's `/mcp` hotload route + boot config:
6
+ export { installAllowed, registerServer, isInjected, parseTarget, serverConfig, serverNames, } from "./config.js";
4
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACtD,yEAAyE;AACzE,OAAO,EACH,cAAc,EACd,cAAc,EACd,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,GACd,MAAM,aAAa,CAAC"}
@@ -1,3 +1,4 @@
1
1
  import type { RuntimeDecl } from "@plurnk/plurnk-execs";
2
2
  export declare function runtimes(): RuntimeDecl[];
3
+ export declare const runtimeDecl: (name: string) => RuntimeDecl;
3
4
  //# sourceMappingURL=runtimes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtimes.d.ts","sourceRoot":"","sources":["../src/runtimes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAexD,wBAAgB,QAAQ,IAAI,WAAW,EAAE,CAOxC"}
1
+ {"version":3,"file":"runtimes.d.ts","sourceRoot":"","sources":["../src/runtimes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAexD,wBAAgB,QAAQ,IAAI,WAAW,EAAE,CAExC;AAMD,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,WAKzC,CAAC"}
package/dist/runtimes.js CHANGED
@@ -11,13 +11,18 @@ const GLYPH = "🔌";
11
11
  // discovery stays cheap and offline; reachability and the live tool catalog are
12
12
  // probe()/run()'s job at boot/call.
13
13
  export function runtimes() {
14
- return serverNames().map((name) => ({
15
- name,
16
- glyph: GLYPH,
17
- example: `EXEC[${name}]:tool_name {"arg":"value"}:EXEC`,
18
- documentation: doc(name),
19
- }));
14
+ return serverNames().map(runtimeDecl);
20
15
  }
16
+ // The decl for one server tag. Exported so the `/mcp` hotload route can mint the
17
+ // same decl for a runtime-injected server that boot discovery mints for an
18
+ // env-declared one — example is the server-agnostic `?` (lists tools, since no
19
+ // real tool name is universally correct), the full canonical `<<`-delimited op.
20
+ export const runtimeDecl = (name) => ({
21
+ name,
22
+ glyph: GLYPH,
23
+ example: `<<EXEC[${name}]:?:EXEC`,
24
+ documentation: doc(name),
25
+ });
21
26
  // Per-tag documentation served on demand. Static usage — the *live* tool
22
27
  // catalog is fetched by running the tag with an empty (or `?`) body, since
23
28
  // listing tools requires a connection we deliberately don't open at scan time.
@@ -29,24 +34,24 @@ is READ back slice-wise — never dumped inline.
29
34
  ## Calling a tool
30
35
 
31
36
  \`\`\`
32
- EXEC[${name}]:<tool_name> <json-arguments>:EXEC
37
+ <<EXEC[${name}]:<tool_name> <json-arguments>:EXEC
33
38
  \`\`\`
34
39
 
35
40
  \`<json-arguments>\` is a single JSON object (omit it for a no-argument tool):
36
41
 
37
42
  \`\`\`
38
- EXEC[${name}]:create_issue {"title":"Bug","body":"…"}:EXEC
39
- EXEC[${name}]:list_repos:EXEC
43
+ <<EXEC[${name}]:create_issue {"title":"Bug","body":"…"}:EXEC
44
+ <<EXEC[${name}]:list_repos:EXEC
40
45
  \`\`\`
41
46
 
42
47
  ## Discovering tools
43
48
 
44
- Run the tag with an empty body (or \`?\` / \`help\`) to write the server's live
49
+ Run the tag with \`?\` (or \`help\`, or an empty body) to write the server's live
45
50
  tool catalog — names, descriptions, and input JSON schemas — to the results
46
51
  stream:
47
52
 
48
53
  \`\`\`
49
- EXEC[${name}]::EXEC
54
+ <<EXEC[${name}]:?:EXEC
50
55
  \`\`\`
51
56
 
52
57
  ## Output & gating
@@ -1 +1 @@
1
- {"version":3,"file":"runtimes.js","sourceRoot":"","sources":["../src/runtimes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,KAAK,GAAG,IAAI,CAAC;AAEnB,4EAA4E;AAC5E,gFAAgF;AAChF,iFAAiF;AACjF,mDAAmD;AACnD,EAAE;AACF,iFAAiF;AACjF,gFAAgF;AAChF,0EAA0E;AAC1E,gFAAgF;AAChF,oCAAoC;AACpC,MAAM,UAAU,QAAQ;IACpB,OAAO,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI;QACJ,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,QAAQ,IAAI,kCAAkC;QACvD,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC,CAAC;AACR,CAAC;AAED,yEAAyE;AACzE,2EAA2E;AAC3E,+EAA+E;AAC/E,MAAM,GAAG,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,KAAK,IAAI;;kEAEmB,IAAI;;;;;;OAM/D,IAAI;;;;;;OAMJ,IAAI;OACJ,IAAI;;;;;;;;;;OAUJ,IAAI;;;;;;;;CAQV,CAAC"}
1
+ {"version":3,"file":"runtimes.js","sourceRoot":"","sources":["../src/runtimes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,KAAK,GAAG,IAAI,CAAC;AAEnB,4EAA4E;AAC5E,gFAAgF;AAChF,iFAAiF;AACjF,mDAAmD;AACnD,EAAE;AACF,iFAAiF;AACjF,gFAAgF;AAChF,0EAA0E;AAC1E,gFAAgF;AAChF,oCAAoC;AACpC,MAAM,UAAU,QAAQ;IACpB,OAAO,WAAW,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC1C,CAAC;AAED,iFAAiF;AACjF,2EAA2E;AAC3E,+EAA+E;AAC/E,gFAAgF;AAChF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAe,EAAE,CAAC,CAAC;IACvD,IAAI;IACJ,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,UAAU,IAAI,UAAU;IACjC,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC;CAC3B,CAAC,CAAC;AAEH,yEAAyE;AACzE,2EAA2E;AAC3E,+EAA+E;AAC/E,MAAM,GAAG,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,KAAK,IAAI;;kEAEmB,IAAI;;;;;;SAM7D,IAAI;;;;;;SAMJ,IAAI;SACJ,IAAI;;;;;;;;;;SAUJ,IAAI;;;;;;;;CAQZ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plurnk/plurnk-execs-mcp",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "MCP-bridge runtime executor for plurnk-service's exec scheme — exposes each configured MCP server as its own EXEC tag, its tools called from the body, output contained behind the server's address.",
5
5
  "keywords": [
6
6
  "plurnk",
@@ -19,7 +19,7 @@
19
19
  "url": "git+https://github.com/plurnk/plurnk-execs-mcp.git"
20
20
  },
21
21
  "engines": {
22
- "node": ">=25"
22
+ "node": ">=26"
23
23
  },
24
24
  "license": "MIT",
25
25
  "author": "@wikitopian",
@@ -55,7 +55,7 @@
55
55
  "@modelcontextprotocol/sdk": "^1.29.0"
56
56
  },
57
57
  "devDependencies": {
58
- "@types/node": "^25.8.0",
58
+ "@types/node": "^26.0.0",
59
59
  "typescript": "^6.0.3",
60
60
  "@plurnk/plurnk-execs": "^0.4.16"
61
61
  },