mandala-computer-mcp 0.1.1 → 0.4.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/README.md +139 -24
  2. package/dist/api.d.ts +19 -6
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +355 -76
  5. package/dist/api.js.map +1 -1
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +113 -8
  8. package/dist/cli.js.map +1 -1
  9. package/dist/errors.d.ts +100 -12
  10. package/dist/errors.d.ts.map +1 -1
  11. package/dist/errors.js +169 -29
  12. package/dist/errors.js.map +1 -1
  13. package/dist/events.d.ts +45 -4
  14. package/dist/events.d.ts.map +1 -1
  15. package/dist/events.js +422 -114
  16. package/dist/events.js.map +1 -1
  17. package/dist/format.d.ts +48 -0
  18. package/dist/format.d.ts.map +1 -1
  19. package/dist/format.js +111 -4
  20. package/dist/format.js.map +1 -1
  21. package/dist/http-body.d.ts +17 -0
  22. package/dist/http-body.d.ts.map +1 -0
  23. package/dist/http-body.js +48 -0
  24. package/dist/http-body.js.map +1 -0
  25. package/dist/http.d.ts.map +1 -1
  26. package/dist/http.js +177 -51
  27. package/dist/http.js.map +1 -1
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +1 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/limits.d.ts +17 -0
  33. package/dist/limits.d.ts.map +1 -0
  34. package/dist/limits.js +17 -0
  35. package/dist/limits.js.map +1 -0
  36. package/dist/paths.d.ts +30 -20
  37. package/dist/paths.d.ts.map +1 -1
  38. package/dist/paths.js +89 -25
  39. package/dist/paths.js.map +1 -1
  40. package/dist/poll.d.ts +107 -0
  41. package/dist/poll.d.ts.map +1 -0
  42. package/dist/poll.js +233 -0
  43. package/dist/poll.js.map +1 -0
  44. package/dist/server.d.ts +1 -1
  45. package/dist/server.d.ts.map +1 -1
  46. package/dist/server.js +2 -1
  47. package/dist/server.js.map +1 -1
  48. package/dist/tools/agent.d.ts.map +1 -1
  49. package/dist/tools/agent.js +72 -5
  50. package/dist/tools/agent.js.map +1 -1
  51. package/dist/tools/computers.d.ts.map +1 -1
  52. package/dist/tools/computers.js +559 -233
  53. package/dist/tools/computers.js.map +1 -1
  54. package/dist/tools/events.d.ts.map +1 -1
  55. package/dist/tools/events.js +359 -69
  56. package/dist/tools/events.js.map +1 -1
  57. package/dist/tools/guest.d.ts.map +1 -1
  58. package/dist/tools/guest.js +234 -33
  59. package/dist/tools/guest.js.map +1 -1
  60. package/dist/tools/input.d.ts.map +1 -1
  61. package/dist/tools/input.js +92 -8
  62. package/dist/tools/input.js.map +1 -1
  63. package/dist/tools/snapshots.d.ts.map +1 -1
  64. package/dist/tools/snapshots.js +501 -33
  65. package/dist/tools/snapshots.js.map +1 -1
  66. package/dist/tools/templates.d.ts.map +1 -1
  67. package/dist/tools/templates.js +61 -26
  68. package/dist/tools/templates.js.map +1 -1
  69. package/dist/tools/webhooks.d.ts.map +1 -1
  70. package/dist/tools/webhooks.js +116 -17
  71. package/dist/tools/webhooks.js.map +1 -1
  72. package/package.json +3 -2
package/README.md CHANGED
@@ -19,7 +19,24 @@ the way you would treat a password.
19
19
  Node 20.3 or newer. There is nothing else to install: `npx` fetches the server
20
20
  the first time a client starts it.
21
21
 
22
- **Claude Code**
22
+ **Claude Code** — as a plugin, which installs the server and a skill together:
23
+
24
+ ```sh
25
+ export MANDALA_API_KEY=com_… # in the shell Claude Code starts from
26
+ /plugin marketplace add mandalacomputer/mcp
27
+ /plugin install mandala-computer@mandala
28
+ ```
29
+
30
+ The skill — [`plugin/skills/mandala-computer/SKILL.md`](plugin/skills/mandala-computer/SKILL.md)
31
+ — is the part the tools cannot say for themselves: when a cloud desktop is the
32
+ right answer at all, that it costs money until it is suspended or stopped, that
33
+ `run_agent` is usually the right level and a screenshot per click is not, and
34
+ which refusals are worth a second try. It is a description of *when and how*,
35
+ not a second client; once the server is installed it stays out of the way.
36
+ `MANDALA_MODEL_KEY`, if exported alongside, is passed through and turns on
37
+ `run_agent`.
38
+
39
+ Or the server on its own, with the key inline:
23
40
 
24
41
  ```sh
25
42
  claude mcp add mandala -e MANDALA_API_KEY=com_… -- npx -y mandala-computer-mcp
@@ -122,8 +139,14 @@ already supports for when they are.
122
139
  **A running computer costs money, and a forgotten one keeps costing it.**
123
140
  `create_computer` says so in its own description, and so does everything that
124
141
  starts a machine by a side door — `restore_snapshot` boots a stopped computer,
125
- `write_clipboard` resumes a suspended one, and each of those is charged like
126
- any other start. When a stretch of work is over, `suspend_computer` (a pause:
142
+ and `write_clipboard`, `read_file` and `cursor_position` each resume a suspended
143
+ one, because each has to reach the guest agent to do its job. All of them are
144
+ charged like any other start, and on a plan at its limit can come back 402
145
+ rather than a result. The two reads are the surprising half of that list, and
146
+ are why neither is annotated `readOnlyHint`: a host that auto-approves
147
+ read-only tools would otherwise wake and bill a machine with nobody asked.
148
+ `screenshot`, `read_clipboard` and `list_windows` genuinely do not start
149
+ anything and keep the hint. When a stretch of work is over, `suspend_computer` (a pause:
127
150
  `start_computer` brings the same session back in about a second) or
128
151
  `stop_computer` (a shutdown: the disk is kept, the session is not). Idle
129
152
  suspend catches the ones a model forgets, but only after 30 minutes untouched.
@@ -134,9 +157,11 @@ time — `screenshot`, `click`, `screenshot` — puts an image in the calling
134
157
  model's context for every step. `run_agent` hands a task in plain language to
135
158
  the platform's own loop instead, which screenshots, decides and clicks inside
136
159
  the platform and answers with a sentence and the list of what it did. It is
137
- registered only when a model key is present (see [Configuration](#configuration)),
138
- bills that key for every step, and `max_steps` is the spending cap as much as
139
- the loop bound.
160
+ registered only when a model key is present (see [Configuration](#configuration))
161
+ and bills that key for the run. `max_steps` bounds the WORK rather than the
162
+ bill: a step is one action on the desktop, one model reply can ask for several
163
+ and spends a step on each, a paused turn costs tokens and no step, and not every
164
+ step takes a screenshot. It defaults to 20 and is capped at 100 here.
140
165
 
141
166
  **A screenshot is how you find out what the screen looks like.** A click that
142
167
  landed and a click that did nothing produce the same tool result, so a model
@@ -258,6 +283,44 @@ they are doing — it does not receive them and has no `verify`, because a
258
283
  server with no endpoint has nothing to verify. `list_webhook_deliveries` is
259
284
  where a delivery that ran out of retries shows up; nothing is dropped silently.
260
285
 
286
+ **A capture outlives the request that starts it.** `POST /computers/:id/snapshots`
287
+ answers `202` with a placeholder row and copies the disk afterwards, which takes
288
+ minutes and scales with how much has been written — longer than any HTTP request
289
+ survives. So `create_snapshot` polls: it holds the id the platform allocated
290
+ before the copy, watches `list_snapshots` for that row to stop reading
291
+ `capturing`, and answers with the finished snapshot. It waits for *not
292
+ capturing* rather than for `pending`, because replication can carry a small
293
+ snapshot straight on to `durable` between two polls; and it matches on the id
294
+ rather than on the newest row for the computer, because a scheduled capture
295
+ finishing in the same window makes that wrong on exactly the long captures where
296
+ it matters. `wait: false` hands back the id instead, for a caller that would
297
+ rather poll on its own schedule.
298
+
299
+ The three answers it can end on are kept apart deliberately. A capture that
300
+ lands is the snapshot. A capture that FAILS mid-copy leaves no snapshot and no
301
+ row — the `capturing` row simply disappears, and that absence is the only signal
302
+ there is, which is why an incomplete listing is never allowed to decide it. A
303
+ wait that runs out says the capture is still running and names the id to follow,
304
+ because that one asks for a look rather than for another attempt.
305
+
306
+ **A deletion outlives its request too, and reads the other way round.**
307
+ `DELETE /snapshots/:id` answers `202` and then detaches the dependent snapshots
308
+ and removes the stored objects. There is no state that means deleted, so
309
+ `delete_snapshot` polls for the row to **go** — the mirror of a capture, which
310
+ polls for a row to stay and change. A row that stays is one that STALLED, and it
311
+ sits in `deleting`, a state a bare listing hides: the poll asks with
312
+ `include=unfinished` for exactly that reason, since without it a half-deleted
313
+ snapshot is indistinguishable from a deleted one. The platform retries a stalled
314
+ deletion itself every fifteen minutes, so the give-up sentence says to watch
315
+ rather than to repeat.
316
+
317
+ Because absence is the success signal here, "Deleted" is said only off a listing
318
+ read **whole**. A row missing because a hypervisor did not answer is not a row
319
+ that is gone, and that mistake is unrecoverable in a way the others are not:
320
+ nobody goes looking for a snapshot they have been told was destroyed. A `409`
321
+ saying the snapshot is already being deleted is progress, not a fault — the
322
+ answer is to watch that deletion finish, never to go and delete something else.
323
+
261
324
  **A schedule says when, not how long.** `snapshot_schedule` sets the window a
262
325
  computer's automatic snapshot is taken in; `get_retention` is what says how many
263
326
  of them survive, and it takes no computer because the window belongs to the
@@ -304,9 +367,12 @@ nothing; `background: true` is the only thing that works. The abandoned command
304
367
  keeps running, so the call after one of these often reports the guest agent as
305
368
  busy — that is the first failure continuing, not a second one.
306
369
 
307
- The ceiling belongs to that proxy rather than to the platform, which is why
308
- `timeout_s` still accepts up to 300: a `MANDALA_BASE_URL` pointed at an origin
309
- reached without the proxy in front of it does not have one.
370
+ That roughly two-minute ceiling belongs to the hosted proxy. The server accepts
371
+ integer foreground `timeout_s` values from 1 through 600 seconds (default 30),
372
+ and the tool exposes that range for a `MANDALA_BASE_URL` reached without the
373
+ proxy. The HTTP client allows 630 seconds for response headers so the server can
374
+ report a 600-second timeout. Use `background: true` and poll the handle for
375
+ longer work.
310
376
 
311
377
  **`list_windows` sees what a screenshot cannot.** It is how you tell an
312
378
  application that failed to start from one that has not painted yet. Match on
@@ -362,11 +428,25 @@ simply has fewer rows, an unknown number missing and nothing marking the gap.
362
428
  The other two append a row marked `unreachable` for each thing they could not
363
429
  reach — but only for a key that spans the account. A WORKSPACE-SCOPED key gets
364
430
  no marked rows either, because naming the missing ids would mean reading them
365
- out of a placement cache that has no workspace column, and handing a confined
431
+ out of a host cache that has no workspace column, and handing a confined
366
432
  credential ids from the workspaces it is confined away from. For such a key all
367
433
  three listings are the `INCOMPLETE:` line and nothing else, which is why that
368
434
  line is written first and in prose.
369
435
 
436
+ **A computer has a lifecycle of its own, separate from what its guest is
437
+ doing.** `state` is the platform's record of whether the machine exists —
438
+ `live`, `deleting`, `deleted`, `lost`, or `unreachable` when a listing could not
439
+ confirm the row against its host — while `status` is the host's answer about the
440
+ guest. A row served from the record has the first and not the second, so
441
+ `list_computers` prints both when both are there: a computer can be running and
442
+ being deleted at once.
443
+
444
+ An unfiltered listing is `live`, `unreachable` and `deleting`. The two terminal
445
+ states are withheld from it, so `list_computers(state: 'deleted')` is the only
446
+ way a computer that has gone is ever shown — and an empty answer to a filtered
447
+ listing is a fact about the filter rather than about the account, which is what
448
+ it says rather than inviting you to create one.
449
+
370
450
  **Snapshots mid-deletion are billed but hidden.** A deletion that began and did
371
451
  not finish still holds objects and still counts against storage, and the default
372
452
  listing leaves it out — every ordinary caller is asking "what can I restore".
@@ -382,6 +462,10 @@ by default — the platform drops input on that socket, so it is safe to hand to
382
462
  somebody. `control: true` returns the full-control one, which is root-equivalent
383
463
  on that machine. Neither appears in any other tool's output, deliberately: a
384
464
  tool result lands in a model's context and from there in whatever captured it.
465
+ It is also why `get_desktop_url` carries no `readOnlyHint` even though its route
466
+ neither writes nor spends: hosts treat that hint as licence to call without
467
+ asking, so keeping it would let a model pass out control of a desktop with
468
+ nobody prompted.
385
469
 
386
470
  **Retiring a template cannot be undone, and takes more than it looks.**
387
471
  `retire_template` without a `version` retires **every** version of the name —
@@ -411,18 +495,47 @@ default request timeout is 60 seconds and only a progress notification can reset
411
495
  it — but the SDK resets it only for a caller that passed that option, so a client
412
496
  which merely accepts progress is still cancelled a minute into a fifteen-minute
413
497
  build. `get_build` is the answer for a client that cannot hold a request open:
414
- it reads once and returns. A build that *failed* is a normal answer from
498
+ it reads once and returns.
499
+
500
+ **The same applies to every tool here that waits.** `wait_for_computer`,
501
+ `move_computer`, `create_snapshot` and `delete_snapshot` all poll, and all report
502
+ progress on every poll — a changed line at once, an unchanged one on a ten-second
503
+ heartbeat, so the request stays open without flooding the client. A live capture
504
+ took 107 seconds and was cancelled at 60 before this existed, which turned every
505
+ carefully-worded answer about what had actually happened into a transport error.
506
+ Each of them has a way out for a client that cannot opt in: `wait: false` on the
507
+ two snapshot tools, `list_moves` after a move, a shorter `timeout_s` and a second
508
+ call on the wait. A build that *failed* is a normal answer from
415
509
  `watch_build`, not an error — it names the step that stopped it, which is the
416
510
  thing to fix. An `error` event is the *stream* failing and says nothing about the
417
511
  build, and the tool says so rather than letting a model rewrite a document that
418
512
  is fine.
419
513
 
420
- What you build is **not launchable yet**: the fleet does not advertise a family
421
- it built rather than shipped, so a create naming such a ref is still refused.
422
- `publish_template` says the same thing where it matters — publishing and being
423
- launchable are different questions, and its result no longer ends on a flat
424
- "launch it with `create_computer`" that a document declaring `spec.build` would
425
- have led straight into a refusal on.
514
+ A completed template build can launch with `create_computer` when eligible
515
+ capacity and its image are available. Publishing a template and completing its
516
+ build are separate steps; publication alone does not guarantee launch capacity.
517
+
518
+ When the API supports image preparation continuation, a `create_computer`
519
+ refusal with code `template_image_preparing` preserves `template_transfer` and
520
+ `preparation` (including `state` and `error`) in the JSON appended to the tool's
521
+ error text. `retry_after_ms`, when present, is the parsed `Retry-After` delay in
522
+ **milliseconds**, also available to embedders as `APIError.retryAfterMs`. Both
523
+ integer seconds and HTTP dates are accepted; missing or invalid delays are
524
+ omitted. Delays are capped at 2,147,483,647 milliseconds to fit a timer.
525
+
526
+ For `preparing`, `copying`, or `ready` with a usable token and delay, wait for
527
+ that delay, then repeat the original identical create arguments, including
528
+ `template`, adding the token exactly as returned. The token must be a nonblank
529
+ string, requires the original `template`, and cannot be combined with `size`.
530
+ A `failed` preparation reports its error for inspection before deciding what to
531
+ do next. Missing or unknown states and missing or invalid delays do not supply
532
+ automatic retry advice. The server never replays a create automatically, and
533
+ `isTransient` returns false for this refusal code because unchanged replay is
534
+ not the continuation protocol.
535
+
536
+ The token selects the image build; it is **not a create idempotency key**. Stop
537
+ after success. After a lost or ambiguous response, inspect `list_computers`
538
+ before deciding what to do; never automatically replay the create.
426
539
 
427
540
  ## Running it as a service
428
541
 
@@ -472,7 +585,7 @@ naming the fix.
472
585
  | `MANDALA_BASE_URL` | Defaults to `https://app.mandala.computer/api/v1`. |
473
586
  | `MANDALA_COMPUTER_ID` | Bind a computer at startup, so `use_computer` is not needed. **stdio only** — under `--http` it is ignored rather than bound into every caller's session, since it names a machine on the operator's account. |
474
587
  | `MANDALA_MODEL_KEY` | An Anthropic key. Enables `run_agent`, which runs the platform's own loop on that key. **stdio only** — under `--http` each caller sends their own as `X-Model-Key`, and this variable is ignored. |
475
- | `MANDALA_NO_LIFECYCLE` | `1` withholds `create_computer`, `clone_computer`, `clone_snapshot`, `delete_computer` and `delete_snapshot` — every tool that makes a computer or destroys one. |
588
+ | `MANDALA_NO_LIFECYCLE` | `1`, `true`, `yes` or `on` withholds `create_computer`, `clone_computer`, `clone_snapshot`, `delete_computer` and `delete_snapshot` — every tool that makes a computer or destroys one. `0`, `false`, `no`, `off` or unset leaves them registered. Any other value is **refused at startup** rather than read as off: a typo here would otherwise leave those tools in place on a server whose operator believes they are gone. The `--no-lifecycle` flag reads the same vocabulary and refuses the same way, except that it has no spelling for *unset*: `--no-lifecycle=` is refused rather than ignored, so a launcher template whose variable did not expand stops instead of quietly leaving the tools registered. |
476
589
  | `PORT`, `HOST` | For `--http`. Default `3000`, `127.0.0.1`. |
477
590
  | `MANDALA_ALLOWED_HOSTS`, `MANDALA_ALLOWED_ORIGINS` | Comma-separated. Which `Host` and `Origin` values this server answers to. On a loopback bind the host list defaults to the address it was given, so DNS-rebinding protection is on without configuration; set this when serving under a name. |
478
591
 
@@ -519,14 +632,16 @@ written down in `UNIMPLEMENTED`. A route added upstream becomes a failing test
519
632
  here rather than a feature nobody noticed.
520
633
 
521
634
  `npm run check:surface` goes further and diffs the mirror against the platform's
522
- own route table, whenever the platform repository happens to be checked out next
523
- door — or wherever `MANDALA_PLATFORM_REPO` points. Without it the script says
524
- it is skipping and exits 0, which is what it does for anyone outside the
525
- platform team; the diff is enforced from the platform's own CI, which checks
526
- this repository out beside itself and runs the same script.
635
+ published surface manifest — a file the platform generates from its own tables
636
+ and commits like a lockfile — whenever the platform repository happens to be
637
+ checked out next door, or wherever `MANDALA_PLATFORM_REPO` points. Without it
638
+ the script says it is skipping and exits 0, which is what it does for anyone
639
+ outside the platform team; a manifest it cannot read is a failure, never a
640
+ comparison of nothing. The diff is enforced from the platform's own CI, which
641
+ checks this repository out beside itself and runs the same script.
527
642
 
528
643
  ```
529
- check:surface — the mirror matches the platform (56 routes, 89 parameters, from …/mandala-computer).
644
+ check:surface — the mirror matches the platform (N routes, N parameters, from …).
530
645
  ```
531
646
 
532
647
  ## See also
package/dist/api.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Agent } from 'undici';
1
2
  export declare const DEFAULT_BASE_URL = "https://app.mandala.computer/api/v1";
2
3
  /** Anthropic's own key, forwarded for the one route that runs a model. */
3
4
  export declare const MODEL_KEY_HEADER = "X-Model-Key";
@@ -54,10 +55,10 @@ export type Bytes = {
54
55
  unrangeable: boolean;
55
56
  };
56
57
  /**
57
- * The longest guest exec waits 300 seconds before it answers. Node's bundled
58
- * fetch also gives response headers 300 seconds by default, so the client can
59
- * lose that race while the command is still finishing in the guest. Keep the
60
- * public exec limit and give the platform enough time to report its timeout.
58
+ * The longest foreground guest exec waits 600 seconds before it answers.
59
+ * Node's bundled fetch gives response headers 300 seconds by default, so the
60
+ * client can lose that race while the command is still finishing in the guest.
61
+ * Allow 30 seconds beyond the public exec limit for the timeout response.
61
62
  *
62
63
  * The body is a different clock. undici's default `bodyTimeout` is 300 seconds
63
64
  * of silence *between chunks*, and `run_agent` SSE (or a long exec that has
@@ -66,9 +67,10 @@ export type Bytes = {
66
67
  * disables it: a quiet gap is not a dead connection, and the caller's
67
68
  * AbortSignal is what ends a request nobody is waiting for.
68
69
  */
69
- export declare const PLATFORM_HEADERS_TIMEOUT_MS = 330000;
70
+ export declare const PLATFORM_HEADERS_TIMEOUT_MS = 630000;
70
71
  /** Disabled. A finite idle limit is what used to kill a quiet SSE stream. */
71
72
  export declare const PLATFORM_BODY_TIMEOUT_MS = 0;
73
+ export declare const PLATFORM_DISPATCHER: Agent;
72
74
  /**
73
75
  * The fetch a platform request actually goes through, and why it is not simply
74
76
  * `fetch`.
@@ -160,7 +162,7 @@ export declare class Api {
160
162
  * short 200 — but a caller that opts in gets the list plus `X-GC-Incomplete`,
161
163
  * and a header is only a warning if something reads it.
162
164
  *
163
- * It is the count of what the placement cache could account for, and it is
165
+ * It is the count of what the host cache could account for, and it is
164
166
  * legitimately `0`: a computer created during the outage was never cached
165
167
  * against the host now holding it. So presence is the signal and the number is
166
168
  * detail, which is why this returns `null` versus a number rather than a
@@ -181,6 +183,17 @@ export declare class Api {
181
183
  */
182
184
  sse(method: string, path: string, opts?: RequestOptions): AsyncGenerator<SSEEvent>;
183
185
  }
186
+ /**
187
+ * Every error under one, including the ones a fetch hides two levels down.
188
+ *
189
+ * A rejected fetch is a `TypeError: fetch failed` whose `cause` is what
190
+ * actually went wrong, and on a dual-stack host that cause is an
191
+ * `AggregateError` holding one attempt per address. Neither the top error nor
192
+ * its immediate cause carries the code the classifiers below read, so both
193
+ * links have to be followed. Bounded, because a cause chain is user-reachable
194
+ * data and nothing here needs to be robust to a cycle.
195
+ */
196
+ export declare function causes(err: unknown, depth?: number): Generator<Record<string, unknown>>;
184
197
  /** The filename the platform put on a download, if it put one there. */
185
198
  export declare function filenameFrom(disposition: string | null): string | undefined;
186
199
  //# sourceMappingURL=api.d.ts.map
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}