zelari-code 2.20.0 → 2.22.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.
@@ -1,38 +1,83 @@
1
1
  /**
2
- * mcpClient — minimal Model Context Protocol client over stdio (v0.7.5).
2
+ * mcpClient — minimal Model Context Protocol client (stdio + Streamable HTTP).
3
3
  *
4
4
  * Implements exactly the slice of MCP the CLI needs to consume external
5
- * tool servers: `initialize` handshake, `tools/list` discovery, and
6
- * `tools/call` execution, speaking newline-delimited JSON-RPC 2.0 over a
7
- * child process's stdin/stdout (the MCP stdio transport).
5
+ * tool servers: `initialize` handshake, `tools/list` discovery (with
6
+ * cursor pagination), and `tools/call` execution.
8
7
  *
9
- * No SDK dependency on purpose: the protocol slice is ~150 lines and the
8
+ * Two transports behind one JSON-RPC pump:
9
+ * - stdio (default): newline-delimited JSON-RPC 2.0 over a child process
10
+ * - http (config `type: "http"` / `url`): Streamable HTTP — used by
11
+ * editor-embedded servers such as the Unreal Engine 5.8+ editor server
12
+ * (loopback, `Mcp-Session-Id`, JSON or SSE responses, 404 → re-handshake)
13
+ *
14
+ * No SDK dependency on purpose: the protocol slice stays ~250 lines and the
10
15
  * official SDK would be the CLI's heaviest dependency by far.
11
16
  *
12
- * @see https://modelcontextprotocol.io/specification (stdio transport)
17
+ * @see https://modelcontextprotocol.io/specification
13
18
  */
14
19
  import { spawn } from "node:child_process";
15
20
  import { buildCmdLine } from "../utils/cmdline.js";
16
21
  import { getCurrentVersion } from "../updater.js";
22
+ import { McpHttpTransport } from "./httpTransport.js";
17
23
  const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;
18
24
  const INIT_TIMEOUT_MS = 15_000;
25
+ /** Guard against a broken server paginating forever. */
26
+ const MAX_LIST_PAGES = 50;
19
27
  export const MCP_PROTOCOL_VERSION = "2025-03-26";
20
28
  export class McpClient {
21
29
  serverName;
22
30
  config;
23
31
  child = null;
32
+ transport = null;
24
33
  nextId = 1;
25
34
  pending = new Map();
26
35
  stdoutBuffer = "";
27
36
  closed = false;
37
+ /** Tail of the serial queue (config.serial); requests run one at a time. */
38
+ queueTail = Promise.resolve();
39
+ /** True while the 404-recovery handshake runs: bypasses the serial queue
40
+ * (the queued request that triggered the 404 is waiting on this handshake). */
41
+ recovering = false;
42
+ serial;
43
+ defaultTimeoutMs;
28
44
  constructor(serverName, config) {
29
45
  this.serverName = serverName;
30
46
  this.config = config;
47
+ this.defaultTimeoutMs = config.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
48
+ this.serial = config.serial ?? this.transportKind() === "http";
49
+ }
50
+ transportKind() {
51
+ if (this.config.type)
52
+ return this.config.type;
53
+ return this.config.url && !this.config.command ? "http" : "stdio";
31
54
  }
32
- /** Spawn the server process and run the MCP initialize handshake. */
55
+ /** Connect (spawn / HTTP session) and run the MCP initialize handshake. */
33
56
  async start() {
34
- if (this.child)
57
+ if (this.child || this.transport)
58
+ return;
59
+ if (this.transportKind() === "http") {
60
+ const url = this.config.url;
61
+ if (!url) {
62
+ throw new Error(`[mcp:${this.serverName}] http server requires a url`);
63
+ }
64
+ this.transport = new McpHttpTransport({
65
+ serverName: this.serverName,
66
+ url,
67
+ // env may carry an explicit Authorization header for remote servers.
68
+ headers: this.config.env?.AUTHORIZATION
69
+ ? { Authorization: this.config.env.AUTHORIZATION }
70
+ : undefined,
71
+ onMessage: (msg) => this.handleMessage(msg),
72
+ onSessionLost: () => this.handshake(),
73
+ });
74
+ await this.handshake();
35
75
  return;
76
+ }
77
+ const command = this.config.command;
78
+ if (!command) {
79
+ throw new Error(`[mcp:${this.serverName}] stdio server requires a command`);
80
+ }
36
81
  const spawnOpts = {
37
82
  stdio: ["pipe", "pipe", "pipe"],
38
83
  env: { ...process.env, ...(this.config.env ?? {}) },
@@ -43,11 +88,11 @@ export class McpClient {
43
88
  // with shell:true is deprecated (DEP0190: args concatenated unescaped).
44
89
  // Build the command line ourselves with explicit quoting instead.
45
90
  const child = (process.platform === "win32"
46
- ? spawn(buildCmdLine(this.config.command, this.config.args ?? []), {
91
+ ? spawn(buildCmdLine(command, this.config.args ?? []), {
47
92
  ...spawnOpts,
48
93
  shell: true,
49
94
  })
50
- : spawn(this.config.command, this.config.args ?? [], spawnOpts));
95
+ : spawn(command, this.config.args ?? [], spawnOpts));
51
96
  this.child = child;
52
97
  child.stdout.setEncoding("utf8");
53
98
  child.stdout.on("data", (chunk) => this.onStdout(chunk));
@@ -57,30 +102,53 @@ export class McpClient {
57
102
  this.failAll(new Error(`[mcp:${this.serverName}] server exited (code ${code ?? "null"})`));
58
103
  }
59
104
  });
60
- await this.request("initialize", {
61
- protocolVersion: MCP_PROTOCOL_VERSION,
62
- capabilities: {},
63
- clientInfo: { name: "zelari-code", version: getCurrentVersion() },
64
- }, INIT_TIMEOUT_MS);
65
- this.notify("notifications/initialized", {});
105
+ await this.handshake();
66
106
  }
67
- /** Discover the server's tools. */
107
+ async handshake() {
108
+ const prev = this.recovering;
109
+ this.recovering = true;
110
+ try {
111
+ await this.request("initialize", {
112
+ protocolVersion: MCP_PROTOCOL_VERSION,
113
+ capabilities: {},
114
+ clientInfo: { name: "zelari-code", version: getCurrentVersion() },
115
+ }, INIT_TIMEOUT_MS);
116
+ this.notify("notifications/initialized", {});
117
+ }
118
+ finally {
119
+ this.recovering = prev;
120
+ }
121
+ }
122
+ /**
123
+ * Discover the server's tools. Follows `nextCursor` pagination so
124
+ * large servers (hundreds of tools) are listed completely.
125
+ */
68
126
  async listTools() {
69
- const res = (await this.request("tools/list", {}));
70
- return (res.tools ?? [])
71
- .filter((t) => !!t.name)
72
- .map((t) => ({
73
- name: t.name,
74
- description: t.description ?? "",
75
- inputSchema: t.inputSchema ?? { type: "object", properties: {} },
76
- }));
127
+ const tools = [];
128
+ let cursor;
129
+ for (let page = 0; page < MAX_LIST_PAGES; page++) {
130
+ const res = (await this.request("tools/list", cursor ? { cursor } : {}));
131
+ for (const t of res.tools ?? []) {
132
+ if (!t.name)
133
+ continue;
134
+ tools.push({
135
+ name: t.name,
136
+ description: t.description ?? "",
137
+ inputSchema: t.inputSchema ?? { type: "object", properties: {} },
138
+ });
139
+ }
140
+ cursor = typeof res.nextCursor === "string" ? res.nextCursor : undefined;
141
+ if (!cursor)
142
+ break;
143
+ }
144
+ return tools;
77
145
  }
78
146
  /**
79
147
  * Call a tool. Returns the concatenated text content; non-text content
80
148
  * items are summarized by type. Throws when the server flags isError.
81
149
  */
82
- async callTool(name, args, timeoutMs = DEFAULT_REQUEST_TIMEOUT_MS) {
83
- const res = (await this.request("tools/call", { name, arguments: args }, timeoutMs));
150
+ async callTool(name, args, timeoutMs) {
151
+ const res = (await this.request("tools/call", { name, arguments: args }, timeoutMs ?? this.defaultTimeoutMs));
84
152
  const text = (res.content ?? [])
85
153
  .map((c) => c.type === "text" && typeof c.text === "string"
86
154
  ? c.text
@@ -90,36 +158,64 @@ export class McpClient {
90
158
  throw new Error(text || `tool "${name}" reported an error`);
91
159
  return text;
92
160
  }
93
- /** Terminate the server process and reject all in-flight requests. */
161
+ /** Terminate the server / session and reject all in-flight requests. */
94
162
  close() {
95
163
  this.closed = true;
96
164
  this.failAll(new Error(`[mcp:${this.serverName}] client closed`));
165
+ if (this.transport) {
166
+ this.transport.close();
167
+ this.transport = null;
168
+ return;
169
+ }
97
170
  this.child?.kill();
98
171
  this.child = null;
99
172
  }
100
- // ── JSON-RPC plumbing ────────────────────────────────────────────────
101
- request(method, params, timeoutMs = DEFAULT_REQUEST_TIMEOUT_MS) {
173
+ // ── JSON-RPC plumbing (shared by both transports) ────────────────────
174
+ request(method, params, timeoutMs) {
175
+ const effective = timeoutMs ?? this.defaultTimeoutMs;
176
+ // Recovery handshakes bypass the queue: the queued request that hit the
177
+ // 404 is parked waiting for this handshake to finish.
178
+ if (!this.serial || this.recovering)
179
+ return this.dispatch(method, params, effective);
180
+ // Serial mode (http default): one request in flight per server. The
181
+ // tail swallows rejections so a failure never blocks the queue.
182
+ const run = this.queueTail.then(() => this.dispatch(method, params, effective), () => this.dispatch(method, params, effective));
183
+ this.queueTail = run.then(() => undefined, () => undefined);
184
+ return run;
185
+ }
186
+ dispatch(method, params, timeoutMs) {
187
+ const transport = this.transport;
102
188
  const child = this.child;
103
- if (!child)
189
+ if (!transport && !child)
104
190
  return Promise.reject(new Error(`[mcp:${this.serverName}] not started`));
105
191
  const id = this.nextId++;
106
- const payload = JSON.stringify({ jsonrpc: "2.0", id, method, params });
107
192
  return new Promise((resolve, reject) => {
108
193
  const timer = setTimeout(() => {
109
194
  this.pending.delete(id);
110
195
  reject(new Error(`[mcp:${this.serverName}] ${method} timed out after ${timeoutMs}ms`));
111
196
  }, timeoutMs);
112
197
  this.pending.set(id, { resolve, reject, timer });
113
- child.stdin.write(payload + "\n", (err) => {
114
- if (err) {
115
- clearTimeout(timer);
116
- this.pending.delete(id);
117
- reject(err);
118
- }
119
- });
198
+ if (transport) {
199
+ // Transport-level failures come back as JSON-RPC error messages.
200
+ void transport.send({ id, method, params }, timeoutMs);
201
+ }
202
+ else {
203
+ const payload = JSON.stringify({ jsonrpc: "2.0", id, method, params });
204
+ child.stdin.write(payload + "\n", (err) => {
205
+ if (err) {
206
+ clearTimeout(timer);
207
+ this.pending.delete(id);
208
+ reject(err);
209
+ }
210
+ });
211
+ }
120
212
  });
121
213
  }
122
214
  notify(method, params) {
215
+ if (this.transport) {
216
+ void this.transport.send({ method, params }, this.defaultTimeoutMs);
217
+ return;
218
+ }
123
219
  this.child?.stdin.write(JSON.stringify({ jsonrpc: "2.0", method, params }) + "\n");
124
220
  }
125
221
  onStdout(chunk) {
@@ -130,26 +226,29 @@ export class McpClient {
130
226
  this.stdoutBuffer = this.stdoutBuffer.slice(nl + 1);
131
227
  if (!line)
132
228
  continue;
133
- let msg;
134
229
  try {
135
- msg = JSON.parse(line);
230
+ this.handleMessage(JSON.parse(line));
136
231
  }
137
232
  catch {
138
233
  continue; // servers sometimes log garbage to stdout — ignore non-JSON
139
234
  }
140
- if (typeof msg.id !== "number")
141
- continue; // notification from server — none handled yet
142
- const pending = this.pending.get(msg.id);
143
- if (!pending)
144
- continue;
145
- this.pending.delete(msg.id);
146
- clearTimeout(pending.timer);
147
- if (msg.error) {
148
- pending.reject(new Error(`[mcp:${this.serverName}] ${msg.error.message ?? "JSON-RPC error"} (code ${msg.error.code ?? "?"})`));
149
- }
150
- else {
151
- pending.resolve(msg.result);
152
- }
235
+ }
236
+ }
237
+ /** Route one parsed JSON-RPC message to its pending request (both transports). */
238
+ handleMessage(msg) {
239
+ const m = msg;
240
+ if (typeof m.id !== "number")
241
+ return; // server notification — none handled
242
+ const pending = this.pending.get(m.id);
243
+ if (!pending)
244
+ return; // already timed out / closed — ignore
245
+ this.pending.delete(m.id);
246
+ clearTimeout(pending.timer);
247
+ if (m.error) {
248
+ pending.reject(new Error(`[mcp:${this.serverName}] ${m.error.message ?? "JSON-RPC error"} (code ${m.error.code ?? "?"})`));
249
+ }
250
+ else {
251
+ pending.resolve(m.result);
153
252
  }
154
253
  }
155
254
  failAll(err) {
@@ -1 +1 @@
1
- {"version":3,"file":"mcpClient.js","sourceRoot":"","sources":["../../../src/cli/mcp/mcpClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcpClient.js","sourceRoot":"","sources":["../../../src/cli/mcp/mcpClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,EAAuC,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAwCtD,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAC1C,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,wDAAwD;AACxD,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEjD,MAAM,OAAO,SAAS;IAgBF;IACC;IAhBX,KAAK,GAA0C,IAAI,CAAC;IACpD,SAAS,GAA4B,IAAI,CAAC;IAC1C,MAAM,GAAG,CAAC,CAAC;IACF,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC9C,YAAY,GAAG,EAAE,CAAC;IAClB,MAAM,GAAG,KAAK,CAAC;IACvB,4EAA4E;IACpE,SAAS,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IACxD;oFACgF;IACxE,UAAU,GAAG,KAAK,CAAC;IACV,MAAM,CAAU;IAChB,gBAAgB,CAAS;IAE1C,YACkB,UAAkB,EACjB,MAAuB;QADxB,eAAU,GAAV,UAAU,CAAQ;QACjB,WAAM,GAAN,MAAM,CAAiB;QAExC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,SAAS,IAAI,0BAA0B,CAAC;QACvE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,MAAM,CAAC;IACjE,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACpE,CAAC;IAED,2EAA2E;IAC3E,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QACzC,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,MAAM,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,UAAU,8BAA8B,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,CAAC;gBACpC,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,GAAG;gBACH,qEAAqE;gBACrE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa;oBACrC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE;oBAClD,CAAC,CAAC,SAAS;gBACb,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;gBAC3C,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE;aACtC,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,UAAU,mCAAmC,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,SAAS,GAAG;YAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAA6B;YAC3D,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;YACnD,WAAW,EAAE,IAAI;SAClB,CAAC;QACF,wEAAwE;QACxE,uEAAuE;QACvE,wEAAwE;QACxE,kEAAkE;QAClE,MAAM,KAAK,GAAG,CACZ,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC1B,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;gBACnD,GAAG,SAAS;gBACZ,KAAK,EAAE,IAAI;aACZ,CAAC;YACJ,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,SAAS,CAAC,CACpB,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CACxB,IAAI,CAAC,OAAO,CACV,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,UAAU,mBAAmB,GAAG,CAAC,OAAO,EAAE,CAAC,CACnE,CACF,CAAC;QACF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CACV,IAAI,KAAK,CACP,QAAQ,IAAI,CAAC,UAAU,yBAAyB,IAAI,IAAI,MAAM,GAAG,CAClE,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAChB,YAAY,EACZ;gBACE,eAAe,EAAE,oBAAoB;gBACrC,YAAY,EAAE,EAAE;gBAChB,UAAU,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE;aAClE,EACD,eAAe,CAChB,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,KAAK,GAAkB,EAAE,CAAC;QAChC,IAAI,MAA0B,CAAC;QAC/B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC;YACjD,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAC7B,YAAY,EACZ,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CACzB,CAOA,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;gBAChC,IAAI,CAAC,CAAC,CAAC,IAAI;oBAAE,SAAS;gBACtB,KAAK,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;oBAChC,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;iBACjE,CAAC,CAAC;YACL,CAAC;YACD,MAAM,GAAG,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;YACzE,IAAI,CAAC,MAAM;gBAAE,MAAM;QACrB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ,CACZ,IAAY,EACZ,IAA6B,EAC7B,SAAkB;QAElB,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAC7B,YAAY,EACZ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EACzB,SAAS,IAAI,IAAI,CAAC,gBAAgB,CACnC,CAGA,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;YAC7C,CAAC,CAAC,CAAC,CAAC,IAAI;YACR,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,SAAS,WAAW,CACvC;aACA,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,IAAI,GAAG,CAAC,OAAO;YACb,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,SAAS,IAAI,qBAAqB,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wEAAwE;IACxE,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,UAAU,iBAAiB,CAAC,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,wEAAwE;IAEhE,OAAO,CACb,MAAc,EACd,MAAe,EACf,SAAkB;QAElB,MAAM,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC;QACrD,wEAAwE;QACxE,sDAAsD;QACtD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU;YACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAClD,oEAAoE;QACpE,gEAAgE;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAC7B,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAC9C,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAC/C,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,CACvB,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,QAAQ,CACd,MAAc,EACd,MAAe,EACf,SAAiB;QAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK;YACtB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,UAAU,eAAe,CAAC,CAAC,CAAC;QAC3E,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACxB,MAAM,CACJ,IAAI,KAAK,CACP,QAAQ,IAAI,CAAC,UAAU,KAAK,MAAM,oBAAoB,SAAS,IAAI,CACpE,CACF,CAAC;YACJ,CAAC,EAAE,SAAS,CAAC,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACjD,IAAI,SAAS,EAAE,CAAC;gBACd,iEAAiE;gBACjE,KAAK,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACvE,KAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;oBACzC,IAAI,GAAG,EAAE,CAAC;wBACR,YAAY,CAAC,KAAK,CAAC,CAAC;wBACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBACxB,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,MAAc,EAAE,MAAe;QAC5C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CACrB,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAC1D,CAAC;IACJ,CAAC;IAEO,QAAQ,CAAC,KAAa;QAC5B,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC;QAC3B,IAAI,EAAU,CAAC;QACf,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACnD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,CAAC;gBACH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS,CAAC,4DAA4D;YACxE,CAAC;QACH,CAAC;IACH,CAAC;IAED,kFAAkF;IAC1E,aAAa,CAAC,GAAY;QAChC,MAAM,CAAC,GAAG,GAIT,CAAC;QACF,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ;YAAE,OAAO,CAAC,qCAAqC;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,sCAAsC;QAC5D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1B,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,CAAC,MAAM,CACZ,IAAI,KAAK,CACP,QAAQ,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,gBAAgB,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,CAChG,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,GAAU;QACxB,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
@@ -19,14 +19,26 @@ function readFile(path) {
19
19
  const parsed = JSON.parse(readFileSync(path, 'utf8'));
20
20
  const out = {};
21
21
  for (const [name, cfg] of Object.entries(parsed.mcpServers ?? {})) {
22
- if (!cfg || typeof cfg.command !== 'string' || !cfg.command.trim())
22
+ const hasCommand = !!cfg && typeof cfg.command === 'string' && !!cfg.command.trim();
23
+ const hasUrl = !!cfg && typeof cfg.url === 'string' && /^https?:\/\//i.test(cfg.url);
24
+ if (!cfg || (!hasCommand && !hasUrl))
23
25
  continue;
24
26
  out[name] = {
25
- command: cfg.command.trim(),
27
+ command: hasCommand ? cfg.command.trim() : undefined,
26
28
  args: Array.isArray(cfg.args) ? cfg.args.map(String) : undefined,
27
29
  env: cfg.env && typeof cfg.env === 'object'
28
30
  ? cfg.env
29
31
  : undefined,
32
+ type: hasUrl && !hasCommand
33
+ ? 'http'
34
+ : cfg.type === 'http'
35
+ ? 'http'
36
+ : 'stdio',
37
+ url: hasUrl ? cfg.url.trim() : undefined,
38
+ timeoutMs: typeof cfg.timeoutMs === 'number' && cfg.timeoutMs > 0
39
+ ? cfg.timeoutMs
40
+ : undefined,
41
+ serial: typeof cfg.serial === 'boolean' ? cfg.serial : undefined,
30
42
  enabled: cfg.enabled !== false,
31
43
  };
32
44
  }
@@ -71,8 +83,13 @@ export function upsertMcpServer(opts) {
71
83
  error: 'Invalid server name (use letters, digits, _ -)',
72
84
  };
73
85
  }
74
- if (!opts.config.command?.trim()) {
75
- return { ok: false, error: 'command is required' };
86
+ const hasCommand = !!opts.config.command?.trim();
87
+ const hasUrl = typeof opts.config.url === 'string' && /^https?:\/\//i.test(opts.config.url);
88
+ if (!hasCommand && !hasUrl) {
89
+ return {
90
+ ok: false,
91
+ error: 'either command (stdio) or url (http) is required',
92
+ };
76
93
  }
77
94
  let path;
78
95
  if (opts.scope === 'user') {
@@ -90,9 +107,13 @@ export function upsertMcpServer(opts) {
90
107
  }
91
108
  const current = readFile(path);
92
109
  current[name] = {
93
- command: opts.config.command.trim(),
110
+ command: hasCommand ? opts.config.command.trim() : undefined,
94
111
  args: opts.config.args,
95
112
  env: opts.config.env,
113
+ type: hasUrl ? 'http' : opts.config.type === 'http' ? 'http' : 'stdio',
114
+ url: hasUrl ? opts.config.url.trim() : undefined,
115
+ timeoutMs: opts.config.timeoutMs,
116
+ serial: opts.config.serial,
96
117
  enabled: opts.config.enabled !== false,
97
118
  };
98
119
  writeFile(path, current);
@@ -1 +1 @@
1
- {"version":3,"file":"mcpConfigIo.js","sourceRoot":"","sources":["../../../src/cli/mcp/mcpConfigIo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcpConfigIo.js","sourceRoot":"","sources":["../../../src/cli/mcp/mcpConfigIo.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@ import { McpClient } from './mcpClient.js';
26
26
  import { isCuaAllowedForCouncil, isCuaDisabled, isCuaMcpServerName, } from './mcpPresets.js';
27
27
  import { isFolderTrusted } from '../safety/folderTrust.js';
28
28
  /** Module-level session cache. */
29
- const state = { loaded: false, tools: [], warnings: [], clients: [] };
29
+ const state = { loaded: false, tools: [], warnings: [], clients: [], pendingHttp: [] };
30
30
  /**
31
31
  * Read + merge MCP config files (project entries win on name conflict).
32
32
  *
@@ -54,7 +54,9 @@ export function readMcpConfig(projectRoot = process.cwd(), opts) {
54
54
  try {
55
55
  const parsed = JSON.parse(readFileSync(p, 'utf8'));
56
56
  for (const [name, cfg] of Object.entries(parsed.mcpServers ?? {})) {
57
- if (!cfg || typeof cfg.command !== 'string' || cfg.command.length === 0)
57
+ const hasCommand = !!cfg && typeof cfg.command === 'string' && cfg.command.length > 0;
58
+ const hasUrl = !!cfg && typeof cfg.url === 'string' && /^https?:\/\//i.test(cfg.url);
59
+ if (!cfg || (!hasCommand && !hasUrl))
58
60
  continue;
59
61
  merged[name] = cfg;
60
62
  }
@@ -102,9 +104,53 @@ async function ensureLoaded(projectRoot) {
102
104
  }
103
105
  catch (err) {
104
106
  client.close();
105
- state.warnings.push(`[mcp:${name}] disabled: ${err instanceof Error ? err.message : String(err)}`);
107
+ const msg = err instanceof Error ? err.message : String(err);
108
+ if (isHttpConfig(cfg)) {
109
+ // HTTP servers (e.g. the UE 5.8+ editor) often start AFTER the CLI:
110
+ // keep them pending instead of disabling — discovery is retried on
111
+ // every subsequent turn until the editor answers.
112
+ state.pendingHttp.push({ name, cfg });
113
+ state.warnings.push(`[mcp:${name}] not reachable yet (${msg}) — will retry each turn`);
114
+ }
115
+ else {
116
+ state.warnings.push(`[mcp:${name}] disabled: ${msg}`);
117
+ }
118
+ }
119
+ }
120
+ }
121
+ function isHttpConfig(cfg) {
122
+ return cfg.type === 'http' || (!!cfg.url && !cfg.command);
123
+ }
124
+ /**
125
+ * Retry HTTP servers that were unreachable at first discovery — the editor
126
+ * (UE 5.8+) may have started since. Silent on failure: the warning was
127
+ * already surfaced once at initial discovery.
128
+ */
129
+ async function retryPendingHttp() {
130
+ if (state.pendingHttp.length === 0)
131
+ return;
132
+ const remaining = [];
133
+ for (const p of state.pendingHttp) {
134
+ const client = new McpClient(p.name, p.cfg);
135
+ try {
136
+ await client.start();
137
+ const tools = await client.listTools();
138
+ state.clients.push(client);
139
+ for (const info of tools) {
140
+ state.tools.push({
141
+ registryName: sanitizeToolName(`mcp_${p.name}_${info.name}`),
142
+ serverName: p.name,
143
+ info,
144
+ client,
145
+ });
146
+ }
147
+ }
148
+ catch {
149
+ client.close();
150
+ remaining.push(p);
106
151
  }
107
152
  }
153
+ state.pendingHttp = remaining;
108
154
  }
109
155
  /** OpenAI tool names must match ^[a-zA-Z0-9_-]{1,64}$. */
110
156
  function sanitizeToolName(raw) {
@@ -121,6 +167,7 @@ export async function registerMcpTools(registry, projectRoot = process.cwd(), op
121
167
  if (process.env['ZELARI_MCP'] === '0')
122
168
  return { registered: [], warnings: [] };
123
169
  await ensureLoaded(projectRoot);
170
+ await retryPendingHttp();
124
171
  const skipCuaForCouncil = opts?.councilMode === true && !isCuaAllowedForCouncil();
125
172
  const registered = [];
126
173
  for (const t of state.tools) {
@@ -163,6 +210,7 @@ export function closeMcpClients() {
163
210
  state.tools = [];
164
211
  state.loaded = false;
165
212
  state.warnings = [];
213
+ state.pendingHttp = [];
166
214
  }
167
215
  /** Test hook: reset the module cache. */
168
216
  export function _resetMcpForTests() {
@@ -1 +1 @@
1
- {"version":3,"file":"mcpManager.js","sourceRoot":"","sources":["../../../src/cli/mcp/mcpManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAoB,MAAM,sCAAsC,CAAC;AAC3F,OAAO,EAAE,SAAS,EAA0C,MAAM,gBAAgB,CAAC;AACnF,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAc3D,kCAAkC;AAClC,MAAM,KAAK,GAKP,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAE5D;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,cAAsB,OAAO,CAAC,GAAG,EAAE,EACnC,IAAmC;IAEnC,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,yEAAyE;IACzE,yEAAyE;IACzE,sDAAsD;IACtD,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,GAAG,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,4BAA4B;IACpF,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,SAAS;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAkB,CAAC;YACpE,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;gBAClE,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBAClF,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;YACrB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oEAAoE;QACtE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,4EAA4E;AAC5E,KAAK,UAAU,YAAY,CAAC,WAAmB;IAC7C,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO;IACzB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,4DAA4D;IAEjF,mEAAmE;IACnE,sDAAsD;IACtD,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;QACrE,KAAK,CAAC,QAAQ,CAAC,IAAI,CACjB,8DAA8D;YAC5D,6DAA6D,CAChE,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK;YAAE,SAAS;QACpC,6EAA6E;QAC7E,IAAI,aAAa,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,KAAK,CAAC,QAAQ,CAAC,IAAI,CACjB,QAAQ,IAAI,iEAAiE,CAC9E,CAAC;YACF,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;YACvC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;oBACf,YAAY,EAAE,gBAAgB,CAAC,OAAO,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC1D,UAAU,EAAE,IAAI;oBAChB,IAAI;oBACJ,MAAM;iBACP,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,IAAI,eAAe,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrG,CAAC;IACH,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,SAAS,gBAAgB,CAAC,GAAW;IACnC,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAsB,EACtB,cAAsB,OAAO,CAAC,GAAG,EAAE,EACnC,IAMC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,GAAG;QAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC/E,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;IAEhC,MAAM,iBAAiB,GACrB,IAAI,EAAE,WAAW,KAAK,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAE1D,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,iBAAiB,IAAI,kBAAkB,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,SAAS;QACX,CAAC;QACD,QAAQ,CAAC,QAAQ,CAAC;YAChB,IAAI,EAAE,CAAC,CAAC,YAAY;YACpB,WAAW,EAAE,QAAQ,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;YACzE,sEAAsE;YACtE,mEAAmE;YACnE,sDAAsD;YACtD,WAAW,EAAE,CAAC,SAAS,CAAC;YACxB,WAAW,EAAE,CAAC,CAAC,GAAG,EAAE;YACpB,6DAA6D;YAC7D,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,EAAE,KAAc,EAAgC,EAAE;gBAC9D,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC;oBACtD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACxD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC7F,CAAC;YACH,CAAC;SACO,CAAC,CAAC;QACZ,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IACD,uEAAuE;IACvE,uDAAuD;IACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,eAAe;IAC7B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO;QAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACzC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;IACnB,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;IACjB,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;IACrB,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;AACtB,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,iBAAiB;IAC/B,eAAe,EAAE,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"mcpManager.js","sourceRoot":"","sources":["../../../src/cli/mcp/mcpManager.ts"],"names":[],"mappings":"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"}
@@ -98,15 +98,56 @@ export function buildQwenMmPreset() {
98
98
  ],
99
99
  };
100
100
  }
101
+ /**
102
+ * Unreal Engine 5.8+ editor MCP preset. The editor embeds an MCP server
103
+ * (Streamable HTTP on loopback, Experimental in 5.8) exposing Tool Search
104
+ * meta-tools: list_toolsets / describe_toolset / call_tool.
105
+ *
106
+ * Editor setup: enable the "Model Context Protocol" plugin, then turn on
107
+ * the MCP server under Edit → Project Settings → Plugins (default
108
+ * http://127.0.0.1:8000/mcp — port and path are configurable there).
109
+ */
110
+ export function buildUnrealPreset() {
111
+ const url = process.env.UNREAL_MCP_URL?.trim() || "http://127.0.0.1:8000/mcp";
112
+ return {
113
+ id: "unreal-mcp",
114
+ servers: {
115
+ "unreal-mcp": {
116
+ type: "http",
117
+ url,
118
+ // Editor tool calls (asset scans, builds, PIE) can be slow.
119
+ timeoutMs: 120_000,
120
+ // Epic guidance: never overlap calls on the editor's game thread.
121
+ serial: true,
122
+ enabled: true,
123
+ },
124
+ },
125
+ notes: [
126
+ "Unreal Engine 5.8+ — MCP server embedded in the editor (Experimental feature).",
127
+ "Editor: enable the 'Model Context Protocol' plugin, then Edit → Project Settings → Plugins → MCP Server.",
128
+ `Endpoint: ${url} (override with UNREAL_MCP_URL; port/path configurable in the editor).`,
129
+ "Tool Search ON by default: tools surface as list_toolsets / describe_toolset / call_tool.",
130
+ "Requests are serialized and time out after 120s (editor tools can be slow).",
131
+ "Start the editor before OR after zelari — unreachable servers are retried on each turn.",
132
+ "Kill switch: disable the unreal-mcp server in mcp.json or ZELARI_MCP=0",
133
+ ],
134
+ };
135
+ }
101
136
  const PRESETS = {
102
137
  cua: () => CUA_DRIVER_PRESET,
103
138
  "cua-driver": () => CUA_DRIVER_PRESET,
104
139
  composio: buildComposioPreset,
105
140
  "qwen-mm-plugins": buildQwenMmPreset,
106
141
  "qwen-mm": buildQwenMmPreset,
142
+ unreal: buildUnrealPreset,
143
+ "unreal-mcp": buildUnrealPreset,
144
+ unrealEditor: buildUnrealPreset,
107
145
  };
108
146
  export function listMcpPresetIds() {
109
- return Object.keys(PRESETS).filter((k) => k === "cua" || k === "composio" || k === "qwen-mm-plugins"); // canonical ids only
147
+ return Object.keys(PRESETS).filter((k) => k === "cua" ||
148
+ k === "composio" ||
149
+ k === "qwen-mm-plugins" ||
150
+ k === "unreal-mcp"); // canonical ids only
110
151
  }
111
152
  export function getMcpPreset(id) {
112
153
  const factory = PRESETS[id.trim().toLowerCase()];
@@ -1 +1 @@
1
- {"version":3,"file":"mcpPresets.js","sourceRoot":"","sources":["../../../src/cli/mcp/mcpPresets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcpPresets.js","sourceRoot":"","sources":["../../../src/cli/mcp/mcpPresets.ts"],"names":[],"mappings":"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"}