node-autotask 0.25.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +61 -0
- package/MCP_TOOL_CATALOG.json +1063 -30
- package/MCP_TOOL_MANIFEST.md +82 -24
- package/N8N_MCP_MANIFEST.json +39 -8
- package/N8N_MCP_MANIFEST.md +9 -8
- package/README.md +11 -9
- package/capabilities.json +16956 -10596
- package/capabilities.schema.json +125 -0
- package/dist/capabilities.cjs +2 -2
- package/dist/capabilities.js +1 -1
- package/dist/{chunk-VUGZKP33.js → chunk-42ZUISDH.js} +997 -136
- package/dist/{chunk-WBMRACCV.cjs → chunk-5CC7LGNM.cjs} +16955 -10595
- package/dist/{chunk-Z5L7Q33V.cjs → chunk-5GGCSRT4.cjs} +947 -493
- package/dist/{chunk-EFR2XWRX.js → chunk-F7FVOXPQ.js} +16955 -10595
- package/dist/{chunk-XUB3S6AM.js → chunk-GURC52J7.js} +26 -2
- package/dist/{chunk-FKJ77K6Z.cjs → chunk-UHTZLUDE.cjs} +159 -135
- package/dist/{chunk-6PIJ6AZG.js → chunk-ZGTFVZL5.js} +478 -24
- package/dist/{chunk-2H7YI54B.cjs → chunk-ZJ4ONAQF.cjs} +1084 -223
- package/dist/{index-CZ94y401.d.ts → index-BIWy9m-a.d.ts} +414 -49
- package/dist/{index-C0OwQhon.d.cts → index-D4XYtn4s.d.cts} +414 -49
- package/dist/{index-BVtycq-6.d.cts → index-DQ9NgraW.d.cts} +322 -1
- package/dist/{index-BVtycq-6.d.ts → index-DQ9NgraW.d.ts} +322 -1
- package/dist/index.cjs +46 -24
- package/dist/index.d.cts +11 -5
- package/dist/index.d.ts +11 -5
- package/dist/index.js +28 -6
- package/dist/operations/index.cjs +147 -120
- package/dist/operations/index.d.cts +136 -7
- package/dist/operations/index.d.ts +136 -7
- package/dist/operations/index.js +33 -6
- package/dist/pool.cjs +42 -9
- package/dist/pool.d.cts +14 -3
- package/dist/pool.d.ts +14 -3
- package/dist/pool.js +38 -5
- package/dist/resources/index.cjs +21 -5
- package/dist/resources/index.d.cts +2 -2
- package/dist/resources/index.d.ts +2 -2
- package/dist/resources/index.js +20 -4
- package/dist/types/index.cjs +1 -1
- package/dist/types/index.d.cts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.js +1 -1
- package/docs/API.md +207 -9
- package/examples/mcp/schemas.ts +16 -7
- package/package.json +3 -3
- /package/dist/{chunk-FLB2X6O5.cjs → chunk-IXF7AKOJ.cjs} +0 -0
- /package/dist/{chunk-DMMMWO6A.js → chunk-RMG55JTF.js} +0 -0
- /package/dist/{chunk-IDPB4N2Q.cjs → chunk-SDYRQFGL.cjs} +0 -0
- /package/dist/{chunk-UPQIUWOS.js → chunk-WLTLB2ND.js} +0 -0
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Fully-typed TypeScript SDK for the Autotask (Datto) PSA REST API. Zero runtime
|
|
|
4
4
|
dependencies. Built for building MCP servers and integrations.
|
|
5
5
|
|
|
6
6
|
The SDK is also the **deterministic execution layer for agents** (ARCHITECTURE
|
|
7
|
-
section 19): a generated capability registry (
|
|
7
|
+
section 19): a generated capability registry (1275 operations across the 121-entity
|
|
8
8
|
MVP set), a mechanical MCP substrate (registry → manifest → overrides → core tier +
|
|
9
9
|
catalog meta-tool), and a write governor (dry-run-first, destructive
|
|
10
10
|
confirmation). The SDK boundary also redacts response field values — the
|
|
@@ -288,7 +288,9 @@ The SDK ships the mechanical substrate, not a server (no MCP imports, no zod):
|
|
|
288
288
|
destructive ones; the plan-derived `untrustedFields` read tools additionally
|
|
289
289
|
carry the untrusted-content sentence + the field list as the `x-untrusted`
|
|
290
290
|
output-schema extension (issue #1 — externally-sourced free text is
|
|
291
|
-
marker-wrapped in the projection; the SDK primitives stay raw)
|
|
291
|
+
marker-wrapped in the projection; the SDK primitives stay raw); the
|
|
292
|
+
cross-resource tools carry `["*"]` rather than the union (the per-resource
|
|
293
|
+
lists are the authority, and the served surface has a hard token budget).
|
|
292
294
|
3. **Overrides** — [`MCP_TOOL_OVERRIDES.json`](./MCP_TOOL_OVERRIDES.json): the ONLY
|
|
293
295
|
place a curation delta may live (`{ tool, field, newValue, reason }`); silent
|
|
294
296
|
divergence between projection and curation is a defect; the delta file is reviewed
|
|
@@ -344,10 +346,10 @@ The SDK ships the mechanical substrate, not a server (no MCP imports, no zod):
|
|
|
344
346
|
governor place: `src/operations/invoke.ts`).
|
|
345
347
|
|
|
346
348
|
**Harness approval policy (recommended).** Require approval on every tool
|
|
347
|
-
whose MCP annotation is `readOnlyHint !== true` — today exactly **
|
|
348
|
-
tools**: the
|
|
349
|
+
whose MCP annotation is `readOnlyHint !== true` — today exactly **267
|
|
350
|
+
tools**: the 265 dedicated write/delete tools (209 `effect=write` + 56
|
|
349
351
|
`effect=destructive`, every one of them has a dedicated tool) +
|
|
350
|
-
`autotask_write` + `autotask_delete`. The remaining **
|
|
352
|
+
`autotask_write` + `autotask_delete`. The remaining **629 tools** (the 616
|
|
351
353
|
dedicated read tools + the 10 core read tools + `autotask_read` +
|
|
352
354
|
`autotask_catalog` + `autotask_describe`) all carry `readOnlyHint: true`
|
|
353
355
|
and are safe ungated: every op they can route is `effect=read` (zero
|
|
@@ -359,7 +361,7 @@ The SDK ships the mechanical substrate, not a server (no MCP imports, no zod):
|
|
|
359
361
|
`contacts.moveToCompany`, `resources.transferOwnership`) require the same
|
|
360
362
|
confirm inside `autotask_write`. Migration: `autotask_invoke` is REPLACED
|
|
361
363
|
by `autotask_read`/`autotask_write`/`autotask_delete` — update harness
|
|
362
|
-
config (approve the
|
|
364
|
+
config (approve the 267 above) and remove any `autotask_invoke` entry. The
|
|
363
365
|
rule is derivable from the registry `effect` column (and the mode tools'
|
|
364
366
|
fixed annotations) — it never needs a hand-maintained name list.
|
|
365
367
|
|
|
@@ -413,7 +415,7 @@ The SDK ships the mechanical substrate, not a server (no MCP imports, no zod):
|
|
|
413
415
|
source.
|
|
414
416
|
|
|
415
417
|
7. **Agent QoL surface (the stage-12 issue wave, live-verified on ww29)** —
|
|
416
|
-
the zero-wire planning reads `operations.blindSurfaces` (the
|
|
418
|
+
the zero-wire planning reads `operations.blindSurfaces` (the 124-surface
|
|
417
419
|
blind/data inventory) and `operations.createGuidance` (per-child zone
|
|
418
420
|
facts with verbatim vendor evidence), the bounded live
|
|
419
421
|
`operations.probeReachability` sweep (confirm-gated, over-cap refuses),
|
|
@@ -453,7 +455,7 @@ The SDK ships the mechanical substrate, not a server (no MCP imports, no zod):
|
|
|
453
455
|
## Partial-update merge (collectionUpdate resources)
|
|
454
456
|
|
|
455
457
|
The vendor's top-level **collection PUT** validates the **FULL model**: a partial body is
|
|
456
|
-
rejected with a 500 `Missing Required Field`. This applies to the **
|
|
458
|
+
rejected with a 500 `Missing Required Field`. This applies to the **45 top-level update ops**
|
|
457
459
|
whose spec defines no item-path write (the `collectionUpdate` class — the flag is derived from
|
|
458
460
|
`api-docs.json` by the shared `scripts/lib/collection-update.mjs`, stamped into both the
|
|
459
461
|
generated resource config and the registry record's `metadata.collectionUpdate`, and pinned by
|
|
@@ -519,7 +521,7 @@ node-parity paths the vendored swagger lacks, all UNVERIFIED-live this run), and
|
|
|
519
521
|
| `npm run capabilities:check` | `scripts/check-capabilities.mjs` — the batch gate (missing/incomplete/stale records → exit 1) |
|
|
520
522
|
| `npm run public-surface` | `scripts/public-surface.mjs` — capture (`--write`) / verify the public API surface baseline; default mode fails on unannounced removals, **and** checks the BUILT surface: every tsup entry has a matching `exports` key (and vice versa), every declared target was emitted and loads (ESM+CJS), and no runtime dependency leaks into `dist` |
|
|
521
523
|
| `npm run live-smoke` | `scripts/live-smoke.mjs` — read-only live smoke: 5 vendor probes (5-6 wire calls worst case: 4 GET + 1 bounded query that may walk a 2nd, empty page) + a zero-network shape guard; `--dry` prints the plan with no calls (DRY-RUN-ONLY verdict, exit 0); live via `AUTOTASK_*` env — missing/partial credentials hard-fail exit 2 |
|
|
522
|
-
| `npm run live-coverage` | `scripts/live-coverage.mjs` — the live coverage sweep over all
|
|
524
|
+
| `npm run live-coverage` | `scripts/live-coverage.mjs` — the live coverage sweep over all 1275 registry ops (`--dry`: full call plan, no calls; live: bounded reads for real, mutations `dryRun: true` only — zero mutating requests, every governor-gated row (the 54 delete dry-runs included) routed through invoke with `confirm`; budget <= 1161 plan-honest / <= 1315 wire-honest worst case) |
|
|
523
525
|
| `npm run mcp:project` | `scripts/project-mcp-tools.mjs` — mechanical MCP projection → `MCP_TOOL_MANIFEST.md` (`:check` verifies) |
|
|
524
526
|
| `npm run n8n:project` / `n8n:project:check` | `scripts/project-n8n-mcp.mjs` — the n8n consumer projection from the SAME registry → `N8N_MCP_MANIFEST.json`/`.md` (`--check` rebuilds and diffs; the gate is wired into `verify`) |
|
|
525
527
|
| `npm run catalog:build` / `catalog:check` | `scripts/build-tool-catalog.mjs` — the catalog meta-tool row data → `MCP_TOOL_CATALOG.json` + mechanical CORE profile (`--check` verifies drift) |
|