@zenalexa/unicli 0.207.1 → 0.208.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.
Files changed (72) hide show
  1. package/AGENTS.md +4 -4
  2. package/README.md +30 -17
  3. package/dist/browser/observe.d.ts +80 -0
  4. package/dist/browser/observe.d.ts.map +1 -0
  5. package/dist/browser/observe.js +144 -0
  6. package/dist/browser/observe.js.map +1 -0
  7. package/dist/browser/snapshot.d.ts.map +1 -1
  8. package/dist/browser/snapshot.js +29 -9
  9. package/dist/browser/snapshot.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +53 -2
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands/eval.d.ts +112 -0
  14. package/dist/commands/eval.d.ts.map +1 -0
  15. package/dist/commands/eval.js +485 -0
  16. package/dist/commands/eval.js.map +1 -0
  17. package/dist/commands/mcp.d.ts +16 -0
  18. package/dist/commands/mcp.d.ts.map +1 -0
  19. package/dist/commands/mcp.js +135 -0
  20. package/dist/commands/mcp.js.map +1 -0
  21. package/dist/commands/operate.d.ts.map +1 -1
  22. package/dist/commands/operate.js +66 -1
  23. package/dist/commands/operate.js.map +1 -1
  24. package/dist/commands/skills.d.ts +91 -0
  25. package/dist/commands/skills.d.ts.map +1 -0
  26. package/dist/commands/skills.js +266 -0
  27. package/dist/commands/skills.js.map +1 -0
  28. package/dist/commands/usage.d.ts +17 -0
  29. package/dist/commands/usage.d.ts.map +1 -0
  30. package/dist/commands/usage.js +87 -0
  31. package/dist/commands/usage.js.map +1 -0
  32. package/dist/discovery/loader.d.ts +8 -1
  33. package/dist/discovery/loader.d.ts.map +1 -1
  34. package/dist/discovery/loader.js +100 -6
  35. package/dist/discovery/loader.js.map +1 -1
  36. package/dist/engine/update-check.js +1 -1
  37. package/dist/engine/update-check.js.map +1 -1
  38. package/dist/engine/yaml-runner.d.ts.map +1 -1
  39. package/dist/engine/yaml-runner.js +35 -1
  40. package/dist/engine/yaml-runner.js.map +1 -1
  41. package/dist/main.d.ts +1 -4
  42. package/dist/main.d.ts.map +1 -1
  43. package/dist/main.js +1 -4
  44. package/dist/main.js.map +1 -1
  45. package/dist/manifest.json +117 -1
  46. package/dist/mcp/server.d.ts +19 -6
  47. package/dist/mcp/server.d.ts.map +1 -1
  48. package/dist/mcp/server.js +401 -115
  49. package/dist/mcp/server.js.map +1 -1
  50. package/dist/permissions/sensitive-paths.d.ts +92 -0
  51. package/dist/permissions/sensitive-paths.d.ts.map +1 -0
  52. package/dist/permissions/sensitive-paths.js +174 -0
  53. package/dist/permissions/sensitive-paths.js.map +1 -0
  54. package/dist/runtime/usage-ledger.d.ts +86 -0
  55. package/dist/runtime/usage-ledger.d.ts.map +1 -0
  56. package/dist/runtime/usage-ledger.js +173 -0
  57. package/dist/runtime/usage-ledger.js.map +1 -0
  58. package/package.json +8 -7
  59. package/src/adapters/autoagent/eval-run.yaml +36 -0
  60. package/src/adapters/cua/bench-list.yaml +20 -0
  61. package/src/adapters/cua/bench-run.yaml +32 -0
  62. package/src/adapters/godot/project-run.yaml +31 -0
  63. package/src/adapters/godot/scene-export.yaml +39 -0
  64. package/src/adapters/hermes/sessions-search.yaml +61 -0
  65. package/src/adapters/hermes/skills-list.yaml +30 -0
  66. package/src/adapters/hermes/skills-read.yaml +46 -0
  67. package/src/adapters/motion-studio/component-get.yaml +35 -0
  68. package/src/adapters/openharness/memory-read.yaml +51 -0
  69. package/src/adapters/openharness/skills-list.yaml +28 -0
  70. package/src/adapters/renderdoc/capture-list.yaml +42 -0
  71. package/src/adapters/renderdoc/frame-export.yaml +32 -0
  72. package/src/adapters/stagehand/wrap-observe.yaml +42 -0
@@ -1,21 +1,35 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * MCP (Model Context Protocol) stdio server for Uni-CLI.
3
+ * MCP (Model Context Protocol) server for Uni-CLI.
4
4
  *
5
- * Lazy tool registration strategy:
6
- * - At startup, only two tools are registered: list_adapters + run_command
7
- * - run_command takes site + command as params, resolves the adapter dynamically
8
- * - This avoids registering 600+ tools upfront, keeping MCP handshake fast
5
+ * Two registration modes:
6
+ * 1. **Expanded (default)** one tool per adapter command
7
+ * (`unicli_<site>_<command>`) with JSON Schema derived from `args` +
8
+ * `columns`. This is the production mode the v0.208 plan calls out:
9
+ * MCP clients see the full Uni-CLI surface area without an extra
10
+ * list_adapters → run_command roundtrip.
11
+ * 2. **Lazy (`--lazy`)** — only `list_adapters` + `run_command` are
12
+ * registered. Useful when an MCP client has a hard tool-count limit
13
+ * or wants the smallest possible handshake.
9
14
  *
10
- * Protocol: JSON-RPC 2.0 over stdio (newline-delimited JSON)
15
+ * Two transports:
16
+ * - **stdio (default)** — newline-delimited JSON over stdin/stdout
17
+ * - **http (`--transport http [--port 19826]`)** — POST /mcp accepts a
18
+ * single JSON-RPC envelope and returns a single JSON response. No
19
+ * SSE streaming yet — additive in a future release.
20
+ *
21
+ * Auth pass-through is automatic: every adapter the CLI loads (including
22
+ * cookie-based ones) is exposed by name; the runtime resolves cookies on
23
+ * each call via the same code path as the CLI.
11
24
  */
12
25
  import { createInterface } from "node:readline";
26
+ import { createServer, } from "node:http";
13
27
  import { loadAllAdapters, loadTsAdapters } from "../discovery/loader.js";
14
28
  import { getAllAdapters, listCommands, resolveCommand } from "../registry.js";
15
29
  import { runPipeline } from "../engine/yaml-runner.js";
16
30
  import { VERSION } from "../constants.js";
17
- // ── Tool Definitions ────────────────────────────────────────────────────────
18
- function buildCoreTools() {
31
+ // ── Lazy-mode core tools (preserved for `--lazy` flag) ──────────────────────
32
+ function buildLazyTools() {
19
33
  return [
20
34
  {
21
35
  name: "list_adapters",
@@ -62,6 +76,145 @@ function buildCoreTools() {
62
76
  },
63
77
  ];
64
78
  }
79
+ // ── Expanded-mode: one tool per adapter command ─────────────────────────────
80
+ /**
81
+ * Map an adapter `arg.type` to a JSON Schema primitive. Defaults to "string"
82
+ * for unknown / missing types — safer than failing the schema build.
83
+ */
84
+ function jsonTypeFor(t) {
85
+ switch (t) {
86
+ case "int":
87
+ return "integer";
88
+ case "float":
89
+ return "number";
90
+ case "bool":
91
+ return "boolean";
92
+ case "str":
93
+ default:
94
+ return "string";
95
+ }
96
+ }
97
+ /**
98
+ * Build the input JSON Schema for one adapter command from its `args`.
99
+ */
100
+ function buildInputSchema(cmd) {
101
+ const props = {
102
+ limit: {
103
+ type: "integer",
104
+ description: "Cap result count (default 20)",
105
+ default: 20,
106
+ },
107
+ };
108
+ const required = [];
109
+ for (const a of cmd.adapterArgs ?? []) {
110
+ if (a.name === "limit")
111
+ continue; // already added
112
+ const prop = {
113
+ type: jsonTypeFor(a.type),
114
+ description: a.description,
115
+ };
116
+ if (a.default !== undefined)
117
+ prop.default = a.default;
118
+ if (a.choices)
119
+ prop.enum = a.choices;
120
+ props[a.name] = prop;
121
+ if (a.required)
122
+ required.push(a.name);
123
+ }
124
+ const schema = {
125
+ type: "object",
126
+ properties: props,
127
+ additionalProperties: false,
128
+ };
129
+ if (required.length > 0)
130
+ schema.required = required;
131
+ return schema;
132
+ }
133
+ /**
134
+ * Build the output JSON Schema. We model results as `{ count, results }`
135
+ * mirroring run_command, where each item in `results` follows the
136
+ * `columns` shape (string-typed properties — Uni-CLI columns are
137
+ * format-agnostic and the runtime emits whatever the pipeline produced).
138
+ */
139
+ /**
140
+ * Build an output JSON Schema. We model results as `{count, results}` where
141
+ * `results` is an array of items. `columns` becomes the item's property set.
142
+ *
143
+ * Note: we return a simple nested schema rather than a full JSON Schema
144
+ * (which would need a deeper `items` type for `array`). Most MCP clients
145
+ * only inspect the top-level type; Anthropic's client is permissive. If a
146
+ * strict validator rejects this, it will still fall back to the lazy tool
147
+ * path via `run_command`.
148
+ */
149
+ function buildOutputSchema(cmd) {
150
+ const itemProps = {};
151
+ for (const col of cmd.columns ?? []) {
152
+ itemProps[col] = { type: "string", description: `Column: ${col}` };
153
+ }
154
+ return {
155
+ type: "object",
156
+ properties: {
157
+ count: { type: "integer", description: "Number of results returned" },
158
+ results: {
159
+ type: "array",
160
+ description: "Result rows",
161
+ items: {
162
+ type: "object",
163
+ ...(Object.keys(itemProps).length > 0
164
+ ? { properties: itemProps }
165
+ : {}),
166
+ },
167
+ },
168
+ },
169
+ };
170
+ }
171
+ /**
172
+ * MCP tool name: `unicli_<site>_<command>` with non-alphanumeric chars
173
+ * collapsed to `_`. Anthropic / Claude Desktop accept underscores; some
174
+ * older clients reject hyphens, so we normalize defensively.
175
+ *
176
+ * CRITICAL: normalization is NOT reversible (e.g. both `claude-code_version`
177
+ * and `claude_code-version` would yield the same normalized name). The
178
+ * expanded-mode dispatcher uses a name → {adapter, cmdName} lookup table
179
+ * built at the same time as the tool list, so callers never need to reverse
180
+ * the normalization. See `expandedRegistry` and `buildExpandedTools` below.
181
+ */
182
+ function buildToolName(site, command) {
183
+ return `unicli_${site}_${command}`.replace(/[^a-zA-Z0-9_]/g, "_");
184
+ }
185
+ const expandedRegistry = new Map();
186
+ function buildExpandedTools() {
187
+ const tools = [];
188
+ // Always include list_adapters for discovery + as a smoke test.
189
+ tools.push(buildLazyTools()[0]);
190
+ expandedRegistry.clear();
191
+ // Collision detection: if two (site, command) pairs normalize to the same
192
+ // tool name, the first one wins and the second is silently shadowed. We
193
+ // don't expect this in practice (most adapters use lowercase alphanumeric
194
+ // + hyphen names), but flag it on stderr so it gets noticed.
195
+ const seen = new Set();
196
+ for (const adapter of getAllAdapters()) {
197
+ for (const [cmdName, cmd] of Object.entries(adapter.commands)) {
198
+ const description = cmd.description?.trim() ||
199
+ adapter.description?.trim() ||
200
+ `${cmdName} for ${adapter.name}`;
201
+ const toolName = buildToolName(adapter.name, cmdName);
202
+ if (seen.has(toolName)) {
203
+ process.stderr.write(`unicli MCP: tool name collision: ${toolName} — shadowing ${adapter.name}/${cmdName}\n`);
204
+ continue;
205
+ }
206
+ seen.add(toolName);
207
+ expandedRegistry.set(toolName, { adapter, cmdName, cmd });
208
+ tools.push({
209
+ name: toolName,
210
+ description: `[${adapter.name}] ${description}`,
211
+ inputSchema: buildInputSchema(cmd),
212
+ outputSchema: buildOutputSchema(cmd),
213
+ });
214
+ }
215
+ }
216
+ return tools;
217
+ }
65
218
  // ── Tool Handlers ───────────────────────────────────────────────────────────
66
219
  function handleListAdapters(params) {
67
220
  let commands = listCommands();
@@ -102,47 +255,7 @@ function handleListAdapters(params) {
102
255
  ],
103
256
  };
104
257
  }
105
- async function handleRunCommand(params) {
106
- const site = params.site;
107
- const command = params.command;
108
- const args = params.args ?? {};
109
- if (!site || !command) {
110
- return {
111
- content: [
112
- {
113
- type: "text",
114
- text: JSON.stringify({ error: "site and command are required" }),
115
- },
116
- ],
117
- isError: true,
118
- };
119
- }
120
- const resolved = resolveCommand(site, command);
121
- if (!resolved) {
122
- // Provide helpful suggestion
123
- const adapters = getAllAdapters();
124
- const matchingSites = adapters
125
- .filter((a) => a.name.includes(site))
126
- .map((a) => ({
127
- site: a.name,
128
- commands: Object.keys(a.commands),
129
- }));
130
- return {
131
- content: [
132
- {
133
- type: "text",
134
- text: JSON.stringify({
135
- error: `Unknown command: ${site} ${command}`,
136
- suggestion: matchingSites.length > 0
137
- ? `Did you mean one of these? ${JSON.stringify(matchingSites)}`
138
- : "Use list_adapters to see all available commands.",
139
- }, null, 2),
140
- },
141
- ],
142
- isError: true,
143
- };
144
- }
145
- const { adapter, command: cmd } = resolved;
258
+ async function runResolvedCommand(adapter, cmd, cmdName, args) {
146
259
  // Merge default args
147
260
  const mergedArgs = { limit: 20, ...args };
148
261
  if (args.limit !== undefined) {
@@ -193,7 +306,7 @@ async function handleRunCommand(params) {
193
306
  type: "text",
194
307
  text: JSON.stringify({
195
308
  error: message,
196
- adapter_path: `src/adapters/${adapter.name}/${command}.yaml`,
309
+ adapter_path: `src/adapters/${adapter.name}/${cmdName}.yaml`,
197
310
  suggestion: "The adapter may need updating. Check the YAML file.",
198
311
  }, null, 2),
199
312
  },
@@ -202,91 +315,179 @@ async function handleRunCommand(params) {
202
315
  };
203
316
  }
204
317
  }
318
+ async function handleRunCommand(params) {
319
+ const site = params.site;
320
+ const command = params.command;
321
+ const args = params.args ?? {};
322
+ if (!site || !command) {
323
+ return {
324
+ content: [
325
+ {
326
+ type: "text",
327
+ text: JSON.stringify({ error: "site and command are required" }),
328
+ },
329
+ ],
330
+ isError: true,
331
+ };
332
+ }
333
+ const resolved = resolveCommand(site, command);
334
+ if (!resolved) {
335
+ const adapters = getAllAdapters();
336
+ const matchingSites = adapters
337
+ .filter((a) => a.name.includes(site))
338
+ .map((a) => ({
339
+ site: a.name,
340
+ commands: Object.keys(a.commands),
341
+ }));
342
+ return {
343
+ content: [
344
+ {
345
+ type: "text",
346
+ text: JSON.stringify({
347
+ error: `Unknown command: ${site} ${command}`,
348
+ suggestion: matchingSites.length > 0
349
+ ? `Did you mean one of these? ${JSON.stringify(matchingSites)}`
350
+ : "Use list_adapters to see all available commands.",
351
+ }, null, 2),
352
+ },
353
+ ],
354
+ isError: true,
355
+ };
356
+ }
357
+ return runResolvedCommand(resolved.adapter, resolved.command, command, args);
358
+ }
359
+ /**
360
+ * Expanded-tool dispatcher — parse `unicli_<site>_<command>` back to its
361
+ * components and call the resolver. Returns `undefined` when the tool name
362
+ * is not in expanded form, so the caller can fall through to lazy-tool
363
+ * handling (list_adapters / run_command).
364
+ */
365
+ async function handleExpandedTool(toolName, args) {
366
+ if (!toolName.startsWith("unicli_"))
367
+ return undefined;
368
+ // Dictionary lookup into the expansion registry built by
369
+ // `buildExpandedTools`. This is the ONLY correct way to map a normalized
370
+ // tool name back to its adapter + command because the normalization
371
+ // (`s/[^a-zA-Z0-9_]/_/g`) is not reversible — a command file named
372
+ // `capture-list.yaml` and another named `capture_list.yaml` would map
373
+ // to the same tool name. The registry resolves the ambiguity deterministically
374
+ // (first-write-wins, collisions logged to stderr in `buildExpandedTools`).
375
+ const entry = expandedRegistry.get(toolName);
376
+ if (!entry)
377
+ return undefined;
378
+ return runResolvedCommand(entry.adapter, entry.cmd, entry.cmdName, args);
379
+ }
205
380
  // ── MCP Protocol Handler ────────────────────────────────────────────────────
206
381
  const PROTOCOL_VERSION = "2024-11-05";
207
- const tools = buildCoreTools();
208
- function handleRequest(req) {
209
- const id = req.id ?? null;
210
- switch (req.method) {
211
- case "initialize":
212
- return {
213
- jsonrpc: "2.0",
214
- id,
215
- result: {
216
- protocolVersion: PROTOCOL_VERSION,
217
- capabilities: {
218
- tools: {},
219
- },
220
- serverInfo: {
221
- name: "unicli",
222
- version: VERSION,
382
+ function parseArgs(argv) {
383
+ const opts = {
384
+ lazy: false,
385
+ transport: "stdio",
386
+ port: 19826,
387
+ };
388
+ for (let i = 0; i < argv.length; i++) {
389
+ const a = argv[i];
390
+ if (a === "--lazy")
391
+ opts.lazy = true;
392
+ else if (a === "--transport") {
393
+ const v = argv[++i];
394
+ if (v === "stdio" || v === "http")
395
+ opts.transport = v;
396
+ }
397
+ else if (a === "--port") {
398
+ const v = parseInt(argv[++i], 10);
399
+ if (Number.isFinite(v))
400
+ opts.port = v;
401
+ }
402
+ }
403
+ return opts;
404
+ }
405
+ function buildHandler(tools) {
406
+ return function handleRequest(req) {
407
+ const id = req.id ?? null;
408
+ switch (req.method) {
409
+ case "initialize":
410
+ return {
411
+ jsonrpc: "2.0",
412
+ id,
413
+ result: {
414
+ protocolVersion: PROTOCOL_VERSION,
415
+ capabilities: {
416
+ tools: {},
417
+ },
418
+ serverInfo: {
419
+ name: "unicli",
420
+ version: VERSION,
421
+ },
223
422
  },
224
- },
225
- };
226
- case "notifications/initialized":
227
- // Client acknowledgement — no response needed for notifications
228
- return null;
229
- case "tools/list":
230
- return {
231
- jsonrpc: "2.0",
232
- id,
233
- result: { tools },
234
- };
235
- case "tools/call": {
236
- const params = req.params;
237
- if (!params?.name) {
423
+ };
424
+ case "notifications/initialized":
425
+ return null;
426
+ case "tools/list":
238
427
  return {
239
428
  jsonrpc: "2.0",
240
429
  id,
241
- error: { code: -32602, message: "Missing tool name" },
430
+ result: { tools },
242
431
  };
243
- }
244
- const toolArgs = params.arguments ?? {};
245
- switch (params.name) {
246
- case "list_adapters": {
247
- const result = handleListAdapters(toolArgs);
248
- return { jsonrpc: "2.0", id, result };
249
- }
250
- case "run_command":
251
- return handleRunCommand(toolArgs).then((result) => ({
432
+ case "tools/call": {
433
+ const params = req.params;
434
+ if (!params?.name) {
435
+ return {
252
436
  jsonrpc: "2.0",
253
437
  id,
254
- result,
255
- }));
256
- default:
438
+ error: { code: -32602, message: "Missing tool name" },
439
+ };
440
+ }
441
+ const toolArgs = params.arguments ?? {};
442
+ switch (params.name) {
443
+ case "list_adapters": {
444
+ const result = handleListAdapters(toolArgs);
445
+ return { jsonrpc: "2.0", id, result };
446
+ }
447
+ case "run_command":
448
+ return handleRunCommand(toolArgs).then((result) => ({
449
+ jsonrpc: "2.0",
450
+ id,
451
+ result,
452
+ }));
453
+ default:
454
+ return handleExpandedTool(params.name, toolArgs).then((result) => {
455
+ if (result)
456
+ return { jsonrpc: "2.0", id, result };
457
+ return {
458
+ jsonrpc: "2.0",
459
+ id,
460
+ error: {
461
+ code: -32601,
462
+ message: `Unknown tool: ${params.name}. Use list_adapters to see all available commands.`,
463
+ },
464
+ };
465
+ });
466
+ }
467
+ }
468
+ case "ping":
469
+ return { jsonrpc: "2.0", id, result: {} };
470
+ default:
471
+ if (id !== null && id !== undefined) {
257
472
  return {
258
473
  jsonrpc: "2.0",
259
474
  id,
260
475
  error: {
261
476
  code: -32601,
262
- message: `Unknown tool: ${params.name}. Available tools: ${tools.map((t) => t.name).join(", ")}`,
477
+ message: `Method not found: ${req.method}`,
263
478
  },
264
479
  };
265
- }
480
+ }
481
+ return null;
266
482
  }
267
- case "ping":
268
- return { jsonrpc: "2.0", id, result: {} };
269
- default:
270
- // Unknown method — return error for requests (has id), ignore notifications
271
- if (id !== null && id !== undefined) {
272
- return {
273
- jsonrpc: "2.0",
274
- id,
275
- error: { code: -32601, message: `Method not found: ${req.method}` },
276
- };
277
- }
278
- return null;
279
- }
483
+ };
280
484
  }
281
485
  // ── Stdio Transport ─────────────────────────────────────────────────────────
282
486
  function send(response) {
283
487
  const json = JSON.stringify(response);
284
488
  process.stdout.write(json + "\n");
285
489
  }
286
- async function main() {
287
- // Load adapters (same as CLI)
288
- loadAllAdapters();
289
- await loadTsAdapters();
490
+ async function startStdio(handler) {
290
491
  const rl = createInterface({
291
492
  input: process.stdin,
292
493
  terminal: false,
@@ -308,7 +509,7 @@ async function main() {
308
509
  return;
309
510
  }
310
511
  try {
311
- const response = await handleRequest(req);
512
+ const response = await handler(req);
312
513
  if (response) {
313
514
  send(response);
314
515
  }
@@ -325,10 +526,95 @@ async function main() {
325
526
  rl.on("close", () => {
326
527
  process.exit(0);
327
528
  });
328
- // Log to stderr so it doesn't interfere with JSON-RPC on stdout
529
+ }
530
+ // ── HTTP Transport ──────────────────────────────────────────────────────────
531
+ /**
532
+ * Simple JSON-RPC over HTTP. POST /mcp accepts a single JSON-RPC envelope and
533
+ * returns a single JSON response. GET /mcp returns server info — handy for
534
+ * a health check from a browser.
535
+ *
536
+ * Note: this is intentionally NOT a full MCP Streamable HTTP transport —
537
+ * no SSE event stream, no session resume. Most clients that "speak HTTP"
538
+ * to MCP only need request/response, and starting with the simpler shape
539
+ * means zero new dependencies and a tiny attack surface.
540
+ */
541
+ async function startHttp(handler, port, toolCount) {
542
+ const server = createServer((req, res) => {
543
+ if (req.method === "GET" && (req.url === "/" || req.url === "/mcp")) {
544
+ res.writeHead(200, { "Content-Type": "application/json" });
545
+ res.end(JSON.stringify({
546
+ server: "unicli",
547
+ version: VERSION,
548
+ tools: toolCount,
549
+ protocol: PROTOCOL_VERSION,
550
+ }));
551
+ return;
552
+ }
553
+ if (req.method !== "POST" || req.url !== "/mcp") {
554
+ res.writeHead(404, { "Content-Type": "application/json" });
555
+ res.end(JSON.stringify({ error: "POST /mcp" }));
556
+ return;
557
+ }
558
+ const chunks = [];
559
+ req.on("data", (chunk) => chunks.push(chunk));
560
+ req.on("end", async () => {
561
+ const body = Buffer.concat(chunks).toString("utf-8");
562
+ let parsed;
563
+ try {
564
+ parsed = JSON.parse(body);
565
+ }
566
+ catch {
567
+ res.writeHead(400, { "Content-Type": "application/json" });
568
+ res.end(JSON.stringify({
569
+ jsonrpc: "2.0",
570
+ id: null,
571
+ error: { code: -32700, message: "Parse error" },
572
+ }));
573
+ return;
574
+ }
575
+ try {
576
+ const response = await handler(parsed);
577
+ res.writeHead(200, { "Content-Type": "application/json" });
578
+ res.end(JSON.stringify(response ?? null));
579
+ }
580
+ catch (err) {
581
+ const message = err instanceof Error ? err.message : String(err);
582
+ res.writeHead(500, { "Content-Type": "application/json" });
583
+ res.end(JSON.stringify({
584
+ jsonrpc: "2.0",
585
+ id: parsed.id ?? null,
586
+ error: { code: -32603, message: `Internal error: ${message}` },
587
+ }));
588
+ }
589
+ });
590
+ });
591
+ await new Promise((resolve, reject) => {
592
+ server.once("error", reject);
593
+ server.listen(port, () => {
594
+ server.off("error", reject);
595
+ resolve();
596
+ });
597
+ });
598
+ process.stderr.write(`unicli MCP server v${VERSION} — HTTP transport on http://127.0.0.1:${port}/mcp\n`);
599
+ }
600
+ // ── main ────────────────────────────────────────────────────────────────────
601
+ async function main() {
602
+ const opts = parseArgs(process.argv.slice(2));
603
+ // Load adapters (same as CLI)
604
+ loadAllAdapters();
605
+ await loadTsAdapters();
606
+ const tools = opts.lazy ? buildLazyTools() : buildExpandedTools();
607
+ const handler = buildHandler(tools);
329
608
  const adapterCount = getAllAdapters().length;
330
609
  const commandCount = listCommands().length;
331
- process.stderr.write(`unicli MCP server v${VERSION} — ${adapterCount} sites, ${commandCount} commands (2 tools registered)\n`);
610
+ if (opts.transport === "http") {
611
+ await startHttp(handler, opts.port, tools.length);
612
+ process.stderr.write(`unicli MCP server v${VERSION} — ${adapterCount} sites, ${commandCount} commands (${tools.length} tools registered, mode=${opts.lazy ? "lazy" : "expanded"})\n`);
613
+ return;
614
+ }
615
+ // stdio (default)
616
+ await startStdio(handler);
617
+ process.stderr.write(`unicli MCP server v${VERSION} — ${adapterCount} sites, ${commandCount} commands (${tools.length} tools registered, mode=${opts.lazy ? "lazy" : "expanded"})\n`);
332
618
  }
333
619
  main().catch((err) => {
334
620
  process.stderr.write(`Fatal: ${err instanceof Error ? err.message : String(err)}\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}