iit-mcp-autotask 0.38.4 → 0.38.5
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/README.md +3 -3
- package/dist/tools/dispatch.js +6 -0
- package/dist/tools/scope-guard.d.ts +2 -1
- package/dist/tools/scope-guard.js +3 -1
- package/dist/tools/server-version.d.ts +1 -1
- package/dist/tools/server-version.js +1 -1
- package/dist/tools/server.d.ts +1 -1
- package/package.json +2 -2
- package/server.json +2 -2
package/README.md
CHANGED
|
@@ -9,9 +9,9 @@ packaged playbooks, strong security boundaries, and predictable per-tenant in-pr
|
|
|
9
9
|
client + SDK-owned TTL caches).
|
|
10
10
|
|
|
11
11
|
> **Package status (2026-10-29):** the runtime dependency `node-autotask` is published to public npm
|
|
12
|
-
> at `0.39.
|
|
12
|
+
> at `0.39.4`; the committed `pnpm-lock.yaml` pins that
|
|
13
13
|
> release with its integrity hash, so installs resolve deterministically. The dependency is always npm
|
|
14
|
-
> (node-autotask pinned exactly at `0.39.
|
|
14
|
+
> (node-autotask pinned exactly at `0.39.4`) — never a `file:`, `git:`, `link:` or workspace reference
|
|
15
15
|
> to a local checkout.
|
|
16
16
|
|
|
17
17
|
> **0.6.0 is a breaking release** (unreleased): tool names, result shapes and configuration all
|
|
@@ -780,7 +780,7 @@ independent review with its resolutions, [`docs/reviews/0.6.0.md`](docs/reviews/
|
|
|
780
780
|
|
|
781
781
|
## SDK dependency
|
|
782
782
|
|
|
783
|
-
`iit-mcp-autotask` depends on **`node-autotask` from npm at exactly `0.39.
|
|
783
|
+
`iit-mcp-autotask` depends on **`node-autotask` from npm at exactly `0.39.4`** (an exact pin —
|
|
784
784
|
no range operator; subpaths `.` / `/capabilities` / `/operations` / `/resources` / `/types` /
|
|
785
785
|
`/pool`) — the only **vendor** dependency; the other two runtime dependencies are
|
|
786
786
|
`@modelcontextprotocol/server` (the MCP framework) and `zod` (schema validation). It never
|
package/dist/tools/dispatch.js
CHANGED
|
@@ -319,6 +319,12 @@ export async function readOneItem(ctx, operation, args, signal, opts) {
|
|
|
319
319
|
if (verdict.aborted)
|
|
320
320
|
return { aborted: true, result: undefined };
|
|
321
321
|
guardNote = verdict.note;
|
|
322
|
+
// #245: a no-filter walk answers the first rows of the tenant table; say so, so the page is not read as the full answer
|
|
323
|
+
const f = sent.filter;
|
|
324
|
+
if ((f === undefined || (Array.isArray(f) && f.length === 0)) && sent.latest === undefined && typeof sent.limit === 'number') {
|
|
325
|
+
const noFilter = `no filter: the first ${sent.limit} rows in id order, not a scoped or complete answer.`;
|
|
326
|
+
guardNote = guardNote === undefined ? noFilter : `${guardNote} ${noFilter}`;
|
|
327
|
+
}
|
|
322
328
|
}
|
|
323
329
|
if (operation === 'contracts.profitability') {
|
|
324
330
|
const rawBag = cleanArgs[1];
|
|
@@ -22,7 +22,8 @@ export declare const ACK_KEY = "acknowledgeUnscoped";
|
|
|
22
22
|
/** Typed refusal of an unscoped walk: an error envelope (reason SCOPE_REQUIRED, next supply_input) or a typed slot error. */
|
|
23
23
|
export declare class ScopeRequiredError extends Error {
|
|
24
24
|
readonly code: "SCOPE_REQUIRED";
|
|
25
|
-
|
|
25
|
+
/** The reason pointer in the caller's arg shape: `args[0].filter` on autotask_read, `filter` on autotask_query (#245). */
|
|
26
|
+
readonly field: string;
|
|
26
27
|
readonly count: number;
|
|
27
28
|
readonly threshold: number;
|
|
28
29
|
readonly operation: string;
|
|
@@ -7,7 +7,8 @@ export const ACK_KEY = 'acknowledgeUnscoped';
|
|
|
7
7
|
/** Typed refusal of an unscoped walk: an error envelope (reason SCOPE_REQUIRED, next supply_input) or a typed slot error. */
|
|
8
8
|
export class ScopeRequiredError extends Error {
|
|
9
9
|
code = 'SCOPE_REQUIRED';
|
|
10
|
-
|
|
10
|
+
/** The reason pointer in the caller's arg shape: `args[0].filter` on autotask_read, `filter` on autotask_query (#245). */
|
|
11
|
+
field;
|
|
11
12
|
count;
|
|
12
13
|
threshold;
|
|
13
14
|
operation;
|
|
@@ -17,6 +18,7 @@ export class ScopeRequiredError extends Error {
|
|
|
17
18
|
const suggestedAction = `Filter on resolved ids (companyID, contractID, ticketID, resourceID with op eq or in), or autotask_query group_by, sum or count for totals, or pass ${ackName}: true to walk it anyway.`;
|
|
18
19
|
// within the 200-char message bound (MAX_ERROR_MESSAGE_CHARS) whatever the resource name: data.operation names the op
|
|
19
20
|
super(`${count} rows match with no id filter (over ${UNSCOPED_WALK_THRESHOLD}). Filter on companyID, contractID, ticketID or resourceID (eq or in; time entries: ticket.companyID) and call again, or pass ${ackName}: true.`);
|
|
21
|
+
this.field = ackName === ACK_KEY ? 'args[0].filter' : 'filter';
|
|
20
22
|
this.operation = operation;
|
|
21
23
|
this.count = count;
|
|
22
24
|
this.threshold = UNSCOPED_WALK_THRESHOLD;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/** The wire identity of this server: a leaf module (no imports) so any tool can read it without an import cycle. */
|
|
2
2
|
export const SERVER_NAME = 'iit-mcp-autotask';
|
|
3
|
-
export const SERVER_VERSION = '0.38.
|
|
3
|
+
export const SERVER_VERSION = '0.38.5';
|
|
4
4
|
//# sourceMappingURL=server-version.js.map
|
package/dist/tools/server.d.ts
CHANGED
|
@@ -60,7 +60,7 @@ export declare function serverInstructions(config: Pick<Config, 'AUTOTASK_PROFIL
|
|
|
60
60
|
/** The full identity stamp (the `/metadata` build block — the era pair, FR-2). */
|
|
61
61
|
export declare const SERVER_IDENTITY: {
|
|
62
62
|
readonly name: "iit-mcp-autotask";
|
|
63
|
-
readonly version: "0.38.
|
|
63
|
+
readonly version: "0.38.5";
|
|
64
64
|
readonly mcpProtocolBaseline: "2026-07-28";
|
|
65
65
|
readonly legacyProtocolFallback: "2025-11-25";
|
|
66
66
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iit-mcp-autotask",
|
|
3
|
-
"version": "0.38.
|
|
3
|
+
"version": "0.38.5",
|
|
4
4
|
"description": "MCP server for the Autotask (Datto) PSA domain, built on the node-autotask SDK",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Max Soukhomlinov",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"@modelcontextprotocol/server": "^2.2.0",
|
|
56
|
-
"node-autotask": "0.39.
|
|
56
|
+
"node-autotask": "0.39.4",
|
|
57
57
|
"zod": "^4.6.7"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
package/server.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iit-mcp-autotask",
|
|
3
|
-
"version": "0.38.
|
|
3
|
+
"version": "0.38.5",
|
|
4
4
|
"description": "MCP server for the Autotask (Datto) PSA API, powered by the node-autotask SDK",
|
|
5
5
|
"mcpProtocolBaseline": "2026-07-28",
|
|
6
6
|
"legacyProtocolFallback": "2025-11-25",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"capabilitiesManifest": "capabilities.json",
|
|
62
62
|
"sdk": {
|
|
63
63
|
"package": "node-autotask",
|
|
64
|
-
"versionRange": "0.39.
|
|
64
|
+
"versionRange": "0.39.4"
|
|
65
65
|
},
|
|
66
66
|
"vendorExtensions": false,
|
|
67
67
|
"credentialModelNote": "per-request; server-held under stdio or, on HTTP, only behind AUTOTASK_HTTP_AUTH=tokens; operator plans and the ledger are keyed by principal and tenant id, never by credential, and an apply uses the credential on the apply request"
|