@mcsherrylabs/evolver-mcp 0.9.0 → 0.9.2

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/install.d.ts CHANGED
@@ -1,3 +1,19 @@
1
+ /** The bare command a global install's bin exposes (the package's `bin` name). */
2
+ export declare const FIXED_BIN_COMMAND = "evolver-mcp";
3
+ /** True when a global (or otherwise PATH-reachable) `evolver-mcp` EXECUTABLE already exists.
4
+ * Detects without installing: the package bin is a node script, so a same-named executable on
5
+ * PATH (or the well-known npm global prefix) counts. `probePrefix` is the `npm prefix -g` seam
6
+ * (injectable for tests). Returns false on every failure — the caller then falls back to the
7
+ * `npx` registration (always resolvable). */
8
+ export declare function hasGlobalBin(env: NodeJS.ProcessEnv, pathVar?: string, probePrefix?: () => string): boolean;
9
+ /** One-time ensure of a global `evolver-mcp` bin so the emitted registration launches a FIXED,
10
+ * PATH-resolved binary (instant, ~ms) instead of `npx -y …` (cold-resolves ~30s+ and can blow
11
+ * Claude's handshake timeout on first connect). Returns the entry command to register. Never fails
12
+ * hard: on any npm error we return the `npx` form, which always resolves. `spawn`/`probePrefix` are
13
+ * test seams. */
14
+ export declare function ensureGlobalBin(env: NodeJS.ProcessEnv, spawn?: (cmd: string, args: string[], opts: unknown) => {
15
+ status: number | null;
16
+ }, probePrefix?: () => string): string;
1
17
  /** Host-published chain-API port (matches deploy/docker-compose.yml `EVOLVER_HOST_HTTP_PORT`). */
2
18
  declare const LOCAL_HTTP_PORT: () => string;
3
19
  /** Host-published content-listener port (matches `EVOLVER_HOST_CONTENT_PORT`). */
@@ -10,14 +26,30 @@ export { LOCAL_CHAIN_URL, LOCAL_CONTENT_PORT, LOCAL_HTTP_PORT };
10
26
  * only the claim — goes to this funded devnet entry. Mirrors the compose's `DEVNET_API` default. */
11
27
  declare const FAUCET_DEFAULT_URL = "https://devnet.mcsherrylabs.com";
12
28
  export { FAUCET_DEFAULT_URL };
13
- /** Split `--mcp-home <dir>` / `--mcp-home=<dir>` out of argv, returning the value (or undefined)
14
- * and the argv with the flag + its value removed (so the forwarded bootstrap never sees it). Also
15
- * drops the `install` subcommand token and forces `--target local`, yielding bootstrap-shaped argv
16
- * (`[node, script, --target, local, …]`) the forwarded runBootstrap parses from index 2. */
17
- export declare function parseMcpHome(argv: string[]): {
18
- mcpHome: string | undefined;
19
- rest: string[];
20
- };
29
+ /** Result of parsing the install command line: the convenience flags, and the bootstrap-shaped
30
+ * argv (`[node, script, --target, local, …]`) to forward to runBootstrap. */
31
+ export interface InstallArgs {
32
+ readonly mcpHome: string | undefined;
33
+ readonly fresh: boolean;
34
+ readonly rest: string[];
35
+ }
36
+ export declare function parseInstallArgs(argv: string[]): InstallArgs;
37
+ /** List `evolver-mcp*` compose project names via `docker compose ls -a`. Runs the daemon CLI; returns
38
+ * [] on any failure (the `--new` path then falls back to a fresh N=2, still safe). */
39
+ export declare function listEvolverMcpProjects(): string[];
40
+ /** Chosen project name + host ports for this install. `project` derives N where
41
+ * http=8440+2*(N-1) and content=8450+2*(N-1); the `evolver-mcp` base is N=1 (default, no `--new`).
42
+ * `--new` scans existing `evolver-mcp*` projects and picks the next free N. */
43
+ export interface NodeAssignment {
44
+ readonly project: string;
45
+ readonly httpPort: string;
46
+ readonly contentPort: string;
47
+ }
48
+ /** Pick a free project name + port pair. With `fresh` (i.e. `--new`), scan `existing` project names
49
+ * and select `evolver-mcp<n>` where n = 1 + the highest existing numeric suffix (base name counts
50
+ * as 1), then derive host ports by the same index. Explicit env overrides (http/content port) are
51
+ * applied by the CALLER so the operator can still pin a specific N or ports. */
52
+ export declare function assignNode(fresh: boolean, existing: readonly string[], httpEnv?: string, contentEnv?: string): NodeAssignment;
21
53
  interface InstallEnv {
22
54
  /** Override the shipped compose file path (default: `../deploy/docker-compose.yml` beside dist). */
23
55
  EVOLVER_INSTALL_COMPOSE?: string;
@@ -37,6 +69,10 @@ interface InstallEnv {
37
69
  EVOLVER_FAUCET_URL?: string;
38
70
  /** Explicit bootstrap state dir (overrides `--mcp-home`'s derived default). */
39
71
  EVOLVER_MCP_STATE_DIR?: string;
72
+ /** Comma-separated existing `evolver-mcp*` project names (test seam) for `--new` auto-pick. */
73
+ EVOLVER_INSTALL_PROJECTS?: string;
74
+ /** Explicit compose project name (overrides the auto-picked name). */
75
+ COMPOSE_PROJECT_NAME?: string;
40
76
  }
41
77
  export interface InstallResult {
42
78
  readonly exitCode: number;
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AA4BA,kGAAkG;AAClG,QAAA,MAAM,eAAe,cAA6D,CAAC;AACnF,kFAAkF;AAClF,QAAA,MAAM,kBAAkB,cAAgE,CAAC;AACzF,QAAA,MAAM,eAAe,cAAyD,CAAC;AAE/E,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,eAAe,EAAE,CAAC;AAEhE;;;qGAGqG;AACrG,QAAA,MAAM,kBAAkB,oCAAoC,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAO9B;;;6FAG6F;AAC7F,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EAAE,GACb;IAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CA0BjD;AASD,UAAU,UAAU;IAClB,oGAAoG;IACpG,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,kDAAkD;IAClD,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,kGAAkG;IAClG,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,8FAA8F;IAC9F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kFAAkF;IAClF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uFAAuF;IACvF,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,qFAAqF;IACrF,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+EAA+E;IAC/E,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIvE;AAED,+FAA+F;AAC/F,wBAAgB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,6FAA6F;AAC7F,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,UAAU,GAClC,OAAO,CAAC,aAAa,CAAC,CAyExB"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
package/dist/install.js CHANGED
@@ -17,10 +17,56 @@
17
17
  // container. The MCP itself is a stdio server launched by Claude wherever Claude runs; it reaches
18
18
  // the node on the shared loopback, so `claude mcp add` works on either side identically.
19
19
  import { spawnSync } from "node:child_process";
20
- import { existsSync } from "node:fs";
20
+ import { existsSync, statSync } from "node:fs";
21
21
  import { dirname, join, resolve } from "node:path";
22
22
  import { fileURLToPath } from "node:url";
23
23
  import { runBootstrap } from "./bootstrap.js";
24
+ /** The name of the package's own bin (`bin.evolver-mcp`), and the fixed command the registration
25
+ * should launch when the globally-installed binary is preferred over `npx`. */
26
+ const PACKAGE_NAME = "@mcsherrylabs/evolver-mcp";
27
+ /** The bare command a global install's bin exposes (the package's `bin` name). */
28
+ export const FIXED_BIN_COMMAND = "evolver-mcp";
29
+ /** True when a global (or otherwise PATH-reachable) `evolver-mcp` EXECUTABLE already exists.
30
+ * Detects without installing: the package bin is a node script, so a same-named executable on
31
+ * PATH (or the well-known npm global prefix) counts. `probePrefix` is the `npm prefix -g` seam
32
+ * (injectable for tests). Returns false on every failure — the caller then falls back to the
33
+ * `npx` registration (always resolvable). */
34
+ export function hasGlobalBin(env, pathVar = env.PATH ?? "", probePrefix = () => {
35
+ const prefixProbe = spawnSync("npm", ["prefix", "-g"], { encoding: "utf8" });
36
+ return prefixProbe.status === 0 ? (prefixProbe.stdout || "").trim() : "";
37
+ }) {
38
+ const candidates = new Set();
39
+ for (const dir of pathVar.split(":")) {
40
+ if (dir === "")
41
+ continue;
42
+ candidates.add(join(dir, FIXED_BIN_COMMAND));
43
+ }
44
+ // npm's global prefix (even if absent from this process's PATH): the bin lands in <prefix>/bin.
45
+ const prefix = probePrefix();
46
+ if (prefix)
47
+ candidates.add(join(prefix, "bin", FIXED_BIN_COMMAND));
48
+ for (const p of candidates) {
49
+ try {
50
+ if (statSync(p).isFile())
51
+ return true;
52
+ }
53
+ catch { /* not present */ }
54
+ }
55
+ return false;
56
+ }
57
+ /** One-time ensure of a global `evolver-mcp` bin so the emitted registration launches a FIXED,
58
+ * PATH-resolved binary (instant, ~ms) instead of `npx -y …` (cold-resolves ~30s+ and can blow
59
+ * Claude's handshake timeout on first connect). Returns the entry command to register. Never fails
60
+ * hard: on any npm error we return the `npx` form, which always resolves. `spawn`/`probePrefix` are
61
+ * test seams. */
62
+ export function ensureGlobalBin(env, spawn = spawnSync, probePrefix) {
63
+ if (hasGlobalBin(env, env.PATH ?? "", probePrefix))
64
+ return FIXED_BIN_COMMAND;
65
+ const r = spawn("npm", ["install", "-g", PACKAGE_NAME], { encoding: "utf8", env: { ...process.env, ...env } });
66
+ if (r.status !== 0)
67
+ return `npx -y ${PACKAGE_NAME}`;
68
+ return hasGlobalBin(env, env.PATH ?? "", probePrefix) ? FIXED_BIN_COMMAND : `npx -y ${PACKAGE_NAME}`;
69
+ }
24
70
  /** The node's chain-API host the install bootstrap targets, per B1 (loopback publish). */
25
71
  const LOCAL_NODE_HOST = "127.0.0.1";
26
72
  /** Host-published chain-API port (matches deploy/docker-compose.yml `EVOLVER_HOST_HTTP_PORT`). */
@@ -40,38 +86,91 @@ export { FAUCET_DEFAULT_URL };
40
86
  * machine where `install` runs (Claude in a container with a bind-mounted `$HOME`). Unset means
41
87
  * "same machine, same `$HOME`" — the default, and the correct non-container case. */
42
88
  const MCP_HOME_FLAG = "--mcp-home";
43
- /** Split `--mcp-home <dir>` / `--mcp-home=<dir>` out of argv, returning the value (or undefined)
44
- * and the argv with the flag + its value removed (so the forwarded bootstrap never sees it). Also
45
- * drops the `install` subcommand token and forces `--target local`, yielding bootstrap-shaped argv
46
- * (`[node, script, --target, local, …]`) the forwarded runBootstrap parses from index 2. */
47
- export function parseMcpHome(argv) {
89
+ /** `--new`: instead of using/creating the default `evolver-mcp` project, AUTO-PICK a free project
90
+ * name (`evolver-mcp<n>`) and clashing-free host ports (8440→8442→8444…, 8450→8451→8453…), so a
91
+ * second (or Nth) independent node needs no manual port/project typing. Explicit env vars still win. */
92
+ const NEW_FLAG = "--new";
93
+ /** `--keep-npx`: keep the `npx -y …` registration instead of installing/preferring the global
94
+ * `evolver-mcp` binary. Install-only; stripped before forwarding to the bootstrap. */
95
+ const KEEP_NPX_FLAG = "--keep-npx";
96
+ export function parseInstallArgs(argv) {
48
97
  let mcpHome;
98
+ let fresh = false;
49
99
  const rest = [];
50
100
  for (let i = 0; i < argv.length; i++) {
51
101
  const a = argv[i];
52
102
  if (a === MCP_HOME_FLAG) {
53
103
  mcpHome = argv[++i];
54
104
  if (mcpHome === undefined)
55
- return { mcpHome: undefined, rest: argv }; // leave to install's error path
105
+ return { mcpHome: undefined, fresh, rest: argv };
56
106
  continue;
57
107
  }
58
108
  if (a.startsWith(`${MCP_HOME_FLAG}=`)) {
59
109
  mcpHome = a.slice(MCP_HOME_FLAG.length + 1);
60
110
  continue;
61
111
  }
112
+ if (a === NEW_FLAG) {
113
+ fresh = true;
114
+ continue;
115
+ }
116
+ if (a === KEEP_NPX_FLAG)
117
+ continue;
62
118
  if (a === "install")
63
119
  continue; // the subcommand token, not a bootstrap flag
64
120
  rest.push(a);
65
121
  }
66
- // Force the local target: install always bootstraps against the node it just started. Skip only
67
- // if the operator already named one (their choice wins — but a non-local target would be wrong).
68
122
  const targetIdx = rest.indexOf("--target");
69
123
  const hasTarget = targetIdx >= 0 || rest.some((x) => x.startsWith("--target="));
70
124
  if (!hasTarget) {
71
- // insert after [node, script] (indices 0,1) so parseBootstrapArgs picks it up at index 2+
72
125
  rest.splice(2, 0, "--target", "local");
73
126
  }
74
- return { mcpHome, rest };
127
+ return { mcpHome, fresh, rest };
128
+ }
129
+ /** List `evolver-mcp*` compose project names via `docker compose ls -a`. Runs the daemon CLI; returns
130
+ * [] on any failure (the `--new` path then falls back to a fresh N=2, still safe). */
131
+ export function listEvolverMcpProjects() {
132
+ const r = spawnSync("docker", ["compose", "ls", "-a"], { encoding: "utf8" });
133
+ if (r.status !== 0)
134
+ return [];
135
+ const out = r.stdout || "";
136
+ const names = [];
137
+ for (const line of out.split("\n")) {
138
+ const m = /^(evolver-mcp\d*)\s/.exec(line.trimStart());
139
+ if (m)
140
+ names.push(m[1]);
141
+ }
142
+ return names;
143
+ }
144
+ const BASE_PROJECT_NAME = "evolver-mcp";
145
+ const HTTP_PORT_BASE = 8440;
146
+ const CONTENT_PORT_BASE = 8450;
147
+ /** Pick a free project name + port pair. With `fresh` (i.e. `--new`), scan `existing` project names
148
+ * and select `evolver-mcp<n>` where n = 1 + the highest existing numeric suffix (base name counts
149
+ * as 1), then derive host ports by the same index. Explicit env overrides (http/content port) are
150
+ * applied by the CALLER so the operator can still pin a specific N or ports. */
151
+ export function assignNode(fresh, existing, httpEnv, contentEnv) {
152
+ if (httpEnv !== undefined || contentEnv !== undefined) {
153
+ // Operator pinned a port (or both): honor it verbatim; keep the project name decision below.
154
+ // A pin means they want THIS node on a specific port; still bump N if `fresh`.
155
+ }
156
+ let n = 1;
157
+ if (fresh) {
158
+ const suffixes = [1]; // the base name occupies index 1
159
+ const re = new RegExp(`^${BASE_PROJECT_NAME}(\\d*)$`);
160
+ for (const name of existing) {
161
+ const m = re.exec(name);
162
+ if (!m)
163
+ continue;
164
+ const s = m[1] === "" ? 1 : Number(m[1]);
165
+ if (Number.isFinite(s) && s > 0)
166
+ suffixes.push(s);
167
+ }
168
+ n = Math.max(...suffixes) + 1;
169
+ }
170
+ const project = n === 1 ? BASE_PROJECT_NAME : `${BASE_PROJECT_NAME}${n}`;
171
+ const httpPort = httpEnv?.trim() || String(HTTP_PORT_BASE + 2 * (n - 1));
172
+ const contentPort = contentEnv?.trim() || String(CONTENT_PORT_BASE + 2 * (n - 1));
173
+ return { project, httpPort, contentPort };
75
174
  }
76
175
  /** Translate a `--mcp-home` value into the `EVOLVER_MCP_STATE_DIR` the bootstrap should derive,
77
176
  * i.e. `<home>/.local/state/evolver-mcp/local` (mirroring stateDirFor's default). Only a
@@ -100,18 +199,32 @@ export async function runInstall(argv, env) {
100
199
  output: `install: the node compose file is missing at ${composeFile} — the published package must ship deploy/ (see package.json "files").\n`,
101
200
  };
102
201
  }
103
- // Parse `--mcp-home` (and the `install` token / forced `--target local`) up front, so a malformed
104
- // flag fails fast instead of after the node boot.
105
- const { mcpHome, rest } = parseMcpHome(argv);
202
+ // Parse `--mcp-home` / `--new` (and the `install` token / forced `--target local`) up front, so a
203
+ // malformed flag fails fast instead of after the node boot.
204
+ const { mcpHome, fresh, rest } = parseInstallArgs(argv);
106
205
  if (argv.includes(MCP_HOME_FLAG) && (mcpHome === undefined || mcpHome.trim() === "")) {
107
206
  return { exitCode: 1, toStderr: true, output: `install: ${MCP_HOME_FLAG} needs a value (Claude's $HOME, e.g. /home/rig)\n` };
108
207
  }
208
+ // Decide WHERE this node lives: default project `evolver-mcp` on 8440/8450; `--new` auto-picks the
209
+ // next project name + non-clashing host ports from what is already deployed. Explicit env vars
210
+ // (EVOLVER_HOST_HTTP_PORT / EVOLVER_HOST_CONTENT_PORT / COMPOSE_PROJECT_NAME) always override.
211
+ const existing = fresh ? (env.EVOLVER_INSTALL_PROJECTS?.split(",").map((s) => s.trim()).filter(Boolean) ?? listEvolverMcpProjects()) : [];
212
+ const assignment = assignNode(fresh, existing, env.EVOLVER_HOST_HTTP_PORT, env.EVOLVER_HOST_CONTENT_PORT);
213
+ // A pinned COMPOSE_PROJECT_NAME (operator-set) wins over the auto-picked project.
214
+ const projectName = env.COMPOSE_PROJECT_NAME?.trim() || assignment.project;
109
215
  // 1. Start the follower node (claims its own identity on devnet, then syncs from block 0).
110
216
  // `--build` builds the config-bearing image (deploy/Dockerfile) on first use; the config is
111
- // baked in, so no host bind-mount and no checkout-path dependency.
217
+ // baked in, so no host bind-mount and no checkout-path dependency. The project name + host
218
+ // ports are the SAME values the compose file consumes, so a second node is fully self-contained.
112
219
  const up = spawnSync("docker", ["compose", "-f", composeFile, "up", "-d", "--build", "node"], {
113
220
  encoding: "utf8",
114
- env: { ...process.env, ...env },
221
+ env: {
222
+ ...process.env,
223
+ ...env,
224
+ COMPOSE_PROJECT_NAME: projectName,
225
+ EVOLVER_HOST_HTTP_PORT: assignment.httpPort,
226
+ EVOLVER_HOST_CONTENT_PORT: assignment.contentPort,
227
+ },
115
228
  });
116
229
  if (up.status !== 0) {
117
230
  return {
@@ -121,13 +234,14 @@ export async function runInstall(argv, env) {
121
234
  };
122
235
  }
123
236
  // 2. Wait for the node to answer its chain API before bootstrapping against it.
124
- const healthUrl = env.EVOLVER_INSTALL_HEALTH_URL?.trim() || LOCAL_CHAIN_URL() + HEALTH_PATH;
237
+ const devHttpPort = env.EVOLVER_HOST_HTTP_PORT?.trim() || assignment.httpPort;
238
+ const healthUrl = env.EVOLVER_INSTALL_HEALTH_URL?.trim() || `http://${LOCAL_NODE_HOST}:${devHttpPort}${HEALTH_PATH}`;
125
239
  const timeoutMs = Number(env.EVOLVER_INSTALL_TIMEOUT_MS ?? "120000");
126
240
  const ok = await waitHealthy(healthUrl, timeoutMs);
127
241
  if (!ok) {
128
242
  const logs = spawnSync("docker", ["compose", "-f", composeFile, "logs", "--tail", "40", "node"], {
129
243
  encoding: "utf8",
130
- env: { ...process.env, ...env },
244
+ env: { ...process.env, ...env, COMPOSE_PROJECT_NAME: projectName },
131
245
  });
132
246
  return {
133
247
  exitCode: 1,
@@ -136,20 +250,34 @@ export async function runInstall(argv, env) {
136
250
  };
137
251
  }
138
252
  // 3. Bootstrap the SEPARATE agent identity against the local node. `--target local` +
139
- // EVOLVER_NODE=http://127.0.0.1:8440 makes the bootstrap derive
140
- // EVOLVER_CONTENT_URL=http://127.0.0.1:8450 (the local node's content listener). Both ports
141
- // honor EVOLVER_HOST_HTTP_PORT / EVOLVER_HOST_CONTENT_PORT so a second node on the same host
142
- // bootstraps against ITS OWN (non-clashing) loopback ports.
143
- //
144
- // `--mcp-home` (if given) names Claude's `$HOME` and is translated into a default
145
- // EVOLVER_MCP_STATE_DIR so the printed `claude mcp add` line carries paths Claude can read.
146
- // Unset → no translation: the bootstrap defaults to THIS process's `$HOME`, which is exactly
147
- // right when Claude runs on the same machine as `install`.
253
+ // EVOLVER_NODE=http://127.0.0.1:<httpPort> makes the bootstrap derive
254
+ // EVOLVER_CONTENT_URL=http://127.0.0.1:<contentPort> (the local node's content listener). Both
255
+ // derive from the SAME assignment the compose received, so a `--new` node bootstraps against its
256
+ // own non-clashing ports with no operator input.
257
+ const devContentPort = env.EVOLVER_HOST_CONTENT_PORT?.trim() || assignment.contentPort;
258
+ // Entry command (registration laziness): prefer a FIXED global bin (instant) over `npx -y …`,
259
+ // which cold-resolves ~30s+ and blows the Claude handshake timeout on first connect. This
260
+ // OVERRIDES the `npx` default cli.ts injected, so the printed `claude mcp add` names `evolver-mcp`
261
+ // directly. `--keep-npx` (or an explicit EVOLVER_MCP_ENTRY_COMMAND via the env) declines the global
262
+ // install and keeps the npx form verbatim.
263
+ const wantsNpx = argv.includes("--keep-npx") || env.EVOLVER_MCP_ENTRY_COMMAND?.includes("npx");
264
+ let entryCommand;
265
+ if (env.EVOLVER_MCP_ENTRY_COMMAND && env.EVOLVER_MCP_ENTRY_COMMAND !== `npx -y ${PACKAGE_NAME}`) {
266
+ // Operator already chose a non-default entry command; honor it exactly.
267
+ entryCommand = env.EVOLVER_MCP_ENTRY_COMMAND;
268
+ }
269
+ else if (wantsNpx) {
270
+ entryCommand = `npx -y ${PACKAGE_NAME}`;
271
+ }
272
+ else {
273
+ entryCommand = ensureGlobalBin(env);
274
+ }
148
275
  const nodeEnv = {
149
276
  ...process.env,
150
277
  ...env,
151
- EVOLVER_NODE: env.EVOLVER_NODE ?? LOCAL_CHAIN_URL(),
152
- EVOLVER_CONTENT_URL: env.EVOLVER_CONTENT_URL ?? `http://${LOCAL_NODE_HOST}:${LOCAL_CONTENT_PORT()}`,
278
+ EVOLVER_NODE: env.EVOLVER_NODE ?? `http://${LOCAL_NODE_HOST}:${devHttpPort}`,
279
+ EVOLVER_CONTENT_URL: env.EVOLVER_CONTENT_URL ?? `http://${LOCAL_NODE_HOST}:${devContentPort}`,
280
+ EVOLVER_MCP_ENTRY_COMMAND: entryCommand,
153
281
  // The claim is sponsored by the FUNDED faucet, never the fresh local node (which is empty and
154
282
  // would refuse `node_underfunded`). An operator's explicit EVOLVER_FAUCET_URL still wins.
155
283
  EVOLVER_FAUCET_URL: env.EVOLVER_FAUCET_URL ?? FAUCET_DEFAULT_URL,
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcsherrylabs/evolver-mcp",
3
- "version": "0.9.0",
3
+ "version": "0.9.2",
4
4
  "description": "MCP server over a configurable Evolver node — read the chain, sign a transfer, administer what you own, write to a channel, submit a signed transaction. Wraps @mcsherrylabs/evolver-client; implements no wire format of its own.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",