@wilnertech/halopsa-mcp-server 1.0.1 → 1.1.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/README.md +54 -7
- package/dist/api/client.d.ts +7 -2
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +35 -8
- package/dist/api/client.js.map +1 -1
- package/dist/cache/memory-cache.d.ts +7 -0
- package/dist/cache/memory-cache.d.ts.map +1 -1
- package/dist/cache/memory-cache.js +7 -0
- package/dist/cache/memory-cache.js.map +1 -1
- package/dist/cache/prewarm.d.ts +3 -1
- package/dist/cache/prewarm.d.ts.map +1 -1
- package/dist/cache/prewarm.js +17 -1
- package/dist/cache/prewarm.js.map +1 -1
- package/dist/schemas/common.d.ts +30 -99
- package/dist/schemas/common.d.ts.map +1 -1
- package/dist/schemas/common.js +2 -2
- package/dist/schemas/common.js.map +1 -1
- package/dist/tools/assets.d.ts +73 -298
- package/dist/tools/assets.d.ts.map +1 -1
- package/dist/tools/assets.js +15 -7
- package/dist/tools/assets.js.map +1 -1
- package/dist/tools/batch-operations.d.ts +49 -81
- package/dist/tools/batch-operations.d.ts.map +1 -1
- package/dist/tools/batch-operations.js +62 -0
- package/dist/tools/batch-operations.js.map +1 -1
- package/dist/tools/clients.d.ts +24 -92
- package/dist/tools/clients.d.ts.map +1 -1
- package/dist/tools/reference-data.d.ts +44 -72
- package/dist/tools/reference-data.d.ts.map +1 -1
- package/dist/tools/reference-data.js +37 -4
- package/dist/tools/reference-data.js.map +1 -1
- package/dist/tools/registrations.d.ts +7 -1
- package/dist/tools/registrations.d.ts.map +1 -1
- package/dist/tools/registrations.js +43 -7
- package/dist/tools/registrations.js.map +1 -1
- package/dist/tools/registry.d.ts +12 -5
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +26 -2
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/sites.d.ts +19 -111
- package/dist/tools/sites.d.ts.map +1 -1
- package/dist/tools/sites.js +3 -3
- package/dist/tools/sites.js.map +1 -1
- package/dist/tools/ticket-actions.d.ts +41 -0
- package/dist/tools/ticket-actions.d.ts.map +1 -0
- package/dist/tools/ticket-actions.js +222 -0
- package/dist/tools/ticket-actions.js.map +1 -0
- package/dist/tools/ticket-custom-fields.d.ts +33 -0
- package/dist/tools/ticket-custom-fields.d.ts.map +1 -0
- package/dist/tools/ticket-custom-fields.js +155 -0
- package/dist/tools/ticket-custom-fields.js.map +1 -0
- package/dist/tools/ticket-reference-data.d.ts +88 -0
- package/dist/tools/ticket-reference-data.d.ts.map +1 -0
- package/dist/tools/ticket-reference-data.js +185 -0
- package/dist/tools/ticket-reference-data.js.map +1 -0
- package/dist/tools/tickets.d.ts +168 -0
- package/dist/tools/tickets.d.ts.map +1 -0
- package/dist/tools/tickets.js +572 -0
- package/dist/tools/tickets.js.map +1 -0
- package/dist/tools/users.d.ts +43 -190
- package/dist/tools/users.d.ts.map +1 -1
- package/dist/tools/users.js +25 -7
- package/dist/tools/users.js.map +1 -1
- package/dist/types/tickets.d.ts +193 -0
- package/dist/types/tickets.d.ts.map +1 -0
- package/dist/types/tickets.js +14 -0
- package/dist/types/tickets.js.map +1 -0
- package/dist/utils/formatter.d.ts +15 -1
- package/dist/utils/formatter.d.ts.map +1 -1
- package/dist/utils/formatter.js +52 -6
- package/dist/utils/formatter.js.map +1 -1
- package/package.json +10 -3
- package/dist/utils/zod-to-schema.d.ts +0 -29
- package/dist/utils/zod-to-schema.d.ts.map +0 -1
- package/dist/utils/zod-to-schema.js +0 -182
- package/dist/utils/zod-to-schema.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../src/types/tickets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript type definitions for HaloPSA ticket-domain objects.
|
|
3
|
+
*
|
|
4
|
+
* Shapes here are derived from the Phase 0 probe results captured during
|
|
5
|
+
* the Tier 1 ticket-tools rollout. Optional fields are explicitly marked
|
|
6
|
+
* because Halo omits them from list responses and only populates them on
|
|
7
|
+
* /Tickets/{id}?includedetails=true.
|
|
8
|
+
*
|
|
9
|
+
* `source` is intentionally typed as `number` (not a string-literal union)
|
|
10
|
+
* because Halo's "API" enum value is a tenant-configurable integer that
|
|
11
|
+
* differs across installs — pinning it would make the type tenant-specific.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=tickets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tickets.js","sourceRoot":"","sources":["../../src/types/tickets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -8,7 +8,21 @@ export interface FormatOptions {
|
|
|
8
8
|
omit_empty?: boolean;
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Recursively walk `payload` (objects + arrays) and replace the VALUE of any
|
|
12
|
+
* key matching CREDENTIAL_KEY_RE with the string '[REDACTED]'.
|
|
13
|
+
*
|
|
14
|
+
* The function is IMMUTABLE — it deep-clones before mutating so the original
|
|
15
|
+
* object passed by the caller is never modified.
|
|
16
|
+
*/
|
|
17
|
+
export declare function scrubCredentials(payload: unknown): unknown;
|
|
18
|
+
/**
|
|
19
|
+
* Format a response object based on options.
|
|
20
|
+
*
|
|
21
|
+
* Credential scrubbing: `scrubCredentials()` is applied to `data` BEFORE
|
|
22
|
+
* serialization so that fields like `new_password`, `api_key`, `secret`,
|
|
23
|
+
* `token`, and `client_secret` are replaced with '[REDACTED]' in every tool
|
|
24
|
+
* response automatically. The response signature is unchanged (string).
|
|
25
|
+
*
|
|
12
26
|
* @param data - The data to format (single object or array)
|
|
13
27
|
* @param options - Formatting options
|
|
14
28
|
* @param meta - Optional metadata (pagination, counts)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAeD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAoB1D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EACb,OAAO,GAAE,aAAkB,EAC3B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CA6CR"}
|
package/dist/utils/formatter.js
CHANGED
|
@@ -3,7 +3,51 @@
|
|
|
3
3
|
* Provides compact, standard, and detailed output modes for HaloPSA responses
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Regex that matches credential-bearing key names (case-insensitive).
|
|
7
|
+
*
|
|
8
|
+
* Covered patterns:
|
|
9
|
+
* password, new_password
|
|
10
|
+
* api_key, apikey, api-key
|
|
11
|
+
* secret
|
|
12
|
+
* token, access_token
|
|
13
|
+
* client_secret
|
|
14
|
+
*/
|
|
15
|
+
const CREDENTIAL_KEY_RE = /^(new_)?password$|api[_-]?key$|secret$|(access_)?token$|client_secret$/i;
|
|
16
|
+
/**
|
|
17
|
+
* Recursively walk `payload` (objects + arrays) and replace the VALUE of any
|
|
18
|
+
* key matching CREDENTIAL_KEY_RE with the string '[REDACTED]'.
|
|
19
|
+
*
|
|
20
|
+
* The function is IMMUTABLE — it deep-clones before mutating so the original
|
|
21
|
+
* object passed by the caller is never modified.
|
|
22
|
+
*/
|
|
23
|
+
export function scrubCredentials(payload) {
|
|
24
|
+
if (Array.isArray(payload)) {
|
|
25
|
+
return payload.map((item) => scrubCredentials(item));
|
|
26
|
+
}
|
|
27
|
+
if (payload !== null && typeof payload === 'object') {
|
|
28
|
+
const source = payload;
|
|
29
|
+
const result = {};
|
|
30
|
+
for (const key of Object.keys(source)) {
|
|
31
|
+
if (CREDENTIAL_KEY_RE.test(key)) {
|
|
32
|
+
result[key] = '[REDACTED]';
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
result[key] = scrubCredentials(source[key]);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
// Primitives (string, number, boolean, null, undefined) — return as-is
|
|
41
|
+
return payload;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Format a response object based on options.
|
|
45
|
+
*
|
|
46
|
+
* Credential scrubbing: `scrubCredentials()` is applied to `data` BEFORE
|
|
47
|
+
* serialization so that fields like `new_password`, `api_key`, `secret`,
|
|
48
|
+
* `token`, and `client_secret` are replaced with '[REDACTED]' in every tool
|
|
49
|
+
* response automatically. The response signature is unchanged (string).
|
|
50
|
+
*
|
|
7
51
|
* @param data - The data to format (single object or array)
|
|
8
52
|
* @param options - Formatting options
|
|
9
53
|
* @param meta - Optional metadata (pagination, counts)
|
|
@@ -11,20 +55,22 @@
|
|
|
11
55
|
*/
|
|
12
56
|
export function formatResponse(data, options = {}, meta) {
|
|
13
57
|
const { format = 'standard', fields, omit_empty = false, } = options;
|
|
58
|
+
// Scrub credential fields before any further processing
|
|
59
|
+
const safeData = scrubCredentials(data);
|
|
14
60
|
// Process data
|
|
15
61
|
let processedData;
|
|
16
|
-
if (Array.isArray(
|
|
17
|
-
processedData =
|
|
62
|
+
if (Array.isArray(safeData)) {
|
|
63
|
+
processedData = safeData.map((item) => processItem(item, fields, omit_empty, format));
|
|
18
64
|
}
|
|
19
65
|
else {
|
|
20
|
-
processedData = processItem(
|
|
66
|
+
processedData = processItem(safeData, fields, omit_empty, format);
|
|
21
67
|
}
|
|
22
68
|
// Build result object
|
|
23
|
-
const result = Array.isArray(
|
|
69
|
+
const result = Array.isArray(safeData)
|
|
24
70
|
? { data: processedData }
|
|
25
71
|
: processedData;
|
|
26
72
|
// Add metadata if provided and data is array
|
|
27
|
-
if (meta && Array.isArray(
|
|
73
|
+
if (meta && Array.isArray(safeData)) {
|
|
28
74
|
result.meta = meta;
|
|
29
75
|
}
|
|
30
76
|
// Return with appropriate formatting
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAa,EACb,UAAyB,EAAE,EAC3B,IAA8B;IAE9B,MAAM,EACJ,MAAM,GAAG,UAAU,EACnB,MAAM,EACN,UAAU,GAAG,KAAK,GACnB,GAAG,OAAO,CAAC;IAEZ,eAAe;IACf,IAAI,aAAsB,CAAC;IAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wilnertech/halopsa-mcp-server",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Model Context Protocol server for HaloPSA API integration with asset, user, and site management",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -17,22 +17,29 @@
|
|
|
17
17
|
"build": "tsc",
|
|
18
18
|
"dev": "tsc --watch",
|
|
19
19
|
"start": "node dist/index.js",
|
|
20
|
+
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
|
|
20
21
|
"test:smoke": "node tests/smoke-crud.mjs",
|
|
21
|
-
"
|
|
22
|
+
"test:smoke:local": "node --env-file=.env tests/smoke-crud.mjs",
|
|
23
|
+
"start:local": "node --env-file=.env dist/index.js",
|
|
24
|
+
"typecheck": "tsc --noEmit",
|
|
25
|
+
"lint": "eslint src",
|
|
22
26
|
"format": "prettier --write \"src/**/*.ts\"",
|
|
23
27
|
"prepublishOnly": "npm run build"
|
|
24
28
|
},
|
|
25
29
|
"dependencies": {
|
|
26
30
|
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
27
31
|
"axios": "^1.7.9",
|
|
28
|
-
"zod": "^3.
|
|
32
|
+
"zod": "^4.3.0"
|
|
29
33
|
},
|
|
30
34
|
"devDependencies": {
|
|
35
|
+
"@types/jest": "^30.0.0",
|
|
31
36
|
"@types/node": "^22.10.5",
|
|
32
37
|
"@typescript-eslint/eslint-plugin": "^8.20.0",
|
|
33
38
|
"@typescript-eslint/parser": "^8.20.0",
|
|
34
39
|
"eslint": "^9.18.0",
|
|
40
|
+
"jest": "^30.3.0",
|
|
35
41
|
"prettier": "^3.4.2",
|
|
42
|
+
"ts-jest": "^29.2.5",
|
|
36
43
|
"typescript": "^5.7.3"
|
|
37
44
|
},
|
|
38
45
|
"engines": {
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Converts Zod schemas to MCP-compatible JSON Schema objects.
|
|
3
|
-
*
|
|
4
|
-
* The MCP SDK expects inputSchema as:
|
|
5
|
-
* { type: 'object', properties: Record<string, unknown>, required?: string[] }
|
|
6
|
-
*
|
|
7
|
-
* This utility traverses Zod's internal _def structure to produce that shape,
|
|
8
|
-
* handling the types used across ITGlue MCP tool schemas: string, number,
|
|
9
|
-
* boolean, array, object, enum, literal, optional, default, and effects
|
|
10
|
-
* (z.coerce). Descriptions and numeric min/max checks are preserved.
|
|
11
|
-
*/
|
|
12
|
-
import { z } from 'zod';
|
|
13
|
-
/**
|
|
14
|
-
* MCP-compatible JSON Schema for a tool's inputSchema.
|
|
15
|
-
*/
|
|
16
|
-
interface McpInputSchema {
|
|
17
|
-
type: 'object';
|
|
18
|
-
properties: Record<string, unknown>;
|
|
19
|
-
required?: string[];
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Convert a top-level Zod object schema to an MCP-compatible inputSchema.
|
|
23
|
-
*
|
|
24
|
-
* The input is expected to be a z.ZodObject (possibly wrapped in optional/effects).
|
|
25
|
-
* Returns { type: 'object', properties: {...}, required?: [...] }.
|
|
26
|
-
*/
|
|
27
|
-
export declare function zodToJsonSchema(schema: z.ZodType): McpInputSchema;
|
|
28
|
-
export {};
|
|
29
|
-
//# sourceMappingURL=zod-to-schema.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"zod-to-schema.d.ts","sourceRoot":"","sources":["../../src/utils/zod-to-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,UAAU,cAAc;IACtB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAkLD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,GAAG,cAAc,CASjE"}
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Converts Zod schemas to MCP-compatible JSON Schema objects.
|
|
3
|
-
*
|
|
4
|
-
* The MCP SDK expects inputSchema as:
|
|
5
|
-
* { type: 'object', properties: Record<string, unknown>, required?: string[] }
|
|
6
|
-
*
|
|
7
|
-
* This utility traverses Zod's internal _def structure to produce that shape,
|
|
8
|
-
* handling the types used across ITGlue MCP tool schemas: string, number,
|
|
9
|
-
* boolean, array, object, enum, literal, optional, default, and effects
|
|
10
|
-
* (z.coerce). Descriptions and numeric min/max checks are preserved.
|
|
11
|
-
*/
|
|
12
|
-
/**
|
|
13
|
-
* Convert a single Zod type to a JSON Schema property descriptor.
|
|
14
|
-
* Handles wrapper types (optional, default, effects/coerce, nullable)
|
|
15
|
-
* by recursing into their inner types.
|
|
16
|
-
*/
|
|
17
|
-
function zodTypeToJsonSchema(schema) {
|
|
18
|
-
const def = schema._def;
|
|
19
|
-
const typeName = def.typeName;
|
|
20
|
-
const result = {};
|
|
21
|
-
// Preserve .describe() text
|
|
22
|
-
if (typeof def.description === 'string') {
|
|
23
|
-
result.description = def.description;
|
|
24
|
-
}
|
|
25
|
-
switch (typeName) {
|
|
26
|
-
case 'ZodString': {
|
|
27
|
-
result.type = 'string';
|
|
28
|
-
break;
|
|
29
|
-
}
|
|
30
|
-
case 'ZodNumber': {
|
|
31
|
-
result.type = 'number';
|
|
32
|
-
// Propagate min/max constraints from .min()/.max() checks
|
|
33
|
-
const checks = def.checks;
|
|
34
|
-
if (checks) {
|
|
35
|
-
for (const check of checks) {
|
|
36
|
-
if (check.kind === 'min') {
|
|
37
|
-
result.minimum = check.value;
|
|
38
|
-
}
|
|
39
|
-
else if (check.kind === 'max') {
|
|
40
|
-
result.maximum = check.value;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
|
-
case 'ZodBoolean': {
|
|
47
|
-
result.type = 'boolean';
|
|
48
|
-
break;
|
|
49
|
-
}
|
|
50
|
-
case 'ZodEnum': {
|
|
51
|
-
result.type = 'string';
|
|
52
|
-
result.enum = def.values;
|
|
53
|
-
break;
|
|
54
|
-
}
|
|
55
|
-
case 'ZodLiteral': {
|
|
56
|
-
const value = def.value;
|
|
57
|
-
if (typeof value === 'string') {
|
|
58
|
-
result.type = 'string';
|
|
59
|
-
}
|
|
60
|
-
else if (typeof value === 'number') {
|
|
61
|
-
result.type = 'number';
|
|
62
|
-
}
|
|
63
|
-
else if (typeof value === 'boolean') {
|
|
64
|
-
result.type = 'boolean';
|
|
65
|
-
}
|
|
66
|
-
result.const = value;
|
|
67
|
-
break;
|
|
68
|
-
}
|
|
69
|
-
case 'ZodArray': {
|
|
70
|
-
result.type = 'array';
|
|
71
|
-
const itemSchema = def.type;
|
|
72
|
-
result.items = zodTypeToJsonSchema(itemSchema);
|
|
73
|
-
break;
|
|
74
|
-
}
|
|
75
|
-
case 'ZodObject': {
|
|
76
|
-
result.type = 'object';
|
|
77
|
-
const shape = schema._def.shape();
|
|
78
|
-
const properties = {};
|
|
79
|
-
const required = [];
|
|
80
|
-
for (const [key, fieldSchema] of Object.entries(shape)) {
|
|
81
|
-
properties[key] = zodTypeToJsonSchema(fieldSchema);
|
|
82
|
-
if (!isOptionalType(fieldSchema)) {
|
|
83
|
-
required.push(key);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
result.properties = properties;
|
|
87
|
-
if (required.length > 0) {
|
|
88
|
-
result.required = required;
|
|
89
|
-
}
|
|
90
|
-
break;
|
|
91
|
-
}
|
|
92
|
-
// Wrapper types: unwrap and recurse
|
|
93
|
-
case 'ZodOptional': {
|
|
94
|
-
const innerOptional = def.innerType;
|
|
95
|
-
const inner = zodTypeToJsonSchema(innerOptional);
|
|
96
|
-
// Merge description from the optional wrapper if present, inner takes precedence
|
|
97
|
-
if (result.description && !inner.description) {
|
|
98
|
-
inner.description = result.description;
|
|
99
|
-
}
|
|
100
|
-
return inner;
|
|
101
|
-
}
|
|
102
|
-
case 'ZodDefault': {
|
|
103
|
-
const innerDefault = def.innerType;
|
|
104
|
-
const inner = zodTypeToJsonSchema(innerDefault);
|
|
105
|
-
if (result.description && !inner.description) {
|
|
106
|
-
inner.description = result.description;
|
|
107
|
-
}
|
|
108
|
-
return inner;
|
|
109
|
-
}
|
|
110
|
-
case 'ZodNullable': {
|
|
111
|
-
const innerNullable = def.innerType;
|
|
112
|
-
const inner = zodTypeToJsonSchema(innerNullable);
|
|
113
|
-
if (result.description && !inner.description) {
|
|
114
|
-
inner.description = result.description;
|
|
115
|
-
}
|
|
116
|
-
return inner;
|
|
117
|
-
}
|
|
118
|
-
case 'ZodEffects': {
|
|
119
|
-
// z.coerce.number(), z.coerce.string(), z.preprocess(), z.transform()
|
|
120
|
-
const innerEffects = def.schema;
|
|
121
|
-
const inner = zodTypeToJsonSchema(innerEffects);
|
|
122
|
-
if (result.description && !inner.description) {
|
|
123
|
-
inner.description = result.description;
|
|
124
|
-
}
|
|
125
|
-
return inner;
|
|
126
|
-
}
|
|
127
|
-
case 'ZodAny': {
|
|
128
|
-
// z.any() — no type constraint, description carries the semantics
|
|
129
|
-
break;
|
|
130
|
-
}
|
|
131
|
-
case 'ZodRecord': {
|
|
132
|
-
// z.record() — open-ended object
|
|
133
|
-
result.type = 'object';
|
|
134
|
-
break;
|
|
135
|
-
}
|
|
136
|
-
default: {
|
|
137
|
-
// Fallback for unknown types - warn and treat as opaque object
|
|
138
|
-
console.warn(`zod-to-schema: unhandled Zod type "${typeName}" — falling back to { type: "object" }`);
|
|
139
|
-
result.type = 'object';
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
return result;
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Check whether a Zod type represents an optional field.
|
|
147
|
-
* Optional, default, and nullable wrappers all make a field non-required.
|
|
148
|
-
*/
|
|
149
|
-
function isOptionalType(schema) {
|
|
150
|
-
const def = schema._def;
|
|
151
|
-
const typeName = def.typeName;
|
|
152
|
-
if (typeName === 'ZodOptional' || typeName === 'ZodDefault') {
|
|
153
|
-
return true;
|
|
154
|
-
}
|
|
155
|
-
// ZodNullable wrapping an optional
|
|
156
|
-
if (typeName === 'ZodNullable') {
|
|
157
|
-
const inner = def.innerType;
|
|
158
|
-
return isOptionalType(inner);
|
|
159
|
-
}
|
|
160
|
-
// ZodEffects wrapping an optional (e.g., z.coerce.number().optional() piped through transform)
|
|
161
|
-
if (typeName === 'ZodEffects') {
|
|
162
|
-
const inner = def.schema;
|
|
163
|
-
return isOptionalType(inner);
|
|
164
|
-
}
|
|
165
|
-
return false;
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Convert a top-level Zod object schema to an MCP-compatible inputSchema.
|
|
169
|
-
*
|
|
170
|
-
* The input is expected to be a z.ZodObject (possibly wrapped in optional/effects).
|
|
171
|
-
* Returns { type: 'object', properties: {...}, required?: [...] }.
|
|
172
|
-
*/
|
|
173
|
-
export function zodToJsonSchema(schema) {
|
|
174
|
-
const converted = zodTypeToJsonSchema(schema);
|
|
175
|
-
// The top-level must always be type: 'object'
|
|
176
|
-
return {
|
|
177
|
-
type: 'object',
|
|
178
|
-
properties: converted.properties || {},
|
|
179
|
-
...(converted.required ? { required: converted.required } : {}),
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
//# sourceMappingURL=zod-to-schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"zod-to-schema.js","sourceRoot":"","sources":["../../src/utils/zod-to-schema.ts"],"names":[],"mappings":"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"}
|