theleadrouter-mcp 0.3.0 → 0.3.1
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 +23 -2
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -1
- package/dist/index.js.map +1 -1
- package/dist/sensitive-tools.d.ts +9 -0
- package/dist/sensitive-tools.d.ts.map +1 -0
- package/dist/sensitive-tools.js +58 -0
- package/dist/sensitive-tools.js.map +1 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -170,7 +170,7 @@ Add the following to your `.mcp.json` file. Replace `lr_your_key_here` with the
|
|
|
170
170
|
|
|
171
171
|
#### Role and scope filters
|
|
172
172
|
|
|
173
|
-
The role picks your tool set: about
|
|
173
|
+
The role picks your tool set: about 900 tools for `admin`, 93 for `buyer`, 84 for `partner` (reads and writes; [sensitive tools](#sensitive-tools) excluded). You can narrow it further to reduce context usage:
|
|
174
174
|
|
|
175
175
|
| Env var | Values | Effect |
|
|
176
176
|
|---|---|---|
|
|
@@ -178,6 +178,27 @@ The role picks your tool set: about 930 tools for `admin`, 99 for `buyer`, 88 fo
|
|
|
178
178
|
| `ISCALE_MCP_SCOPE` | `read` \| `write` \| `all` (default) | Filter by write flag |
|
|
179
179
|
| `ISCALE_MCP_DOMAINS` | comma list, e.g. `verticals,campaigns,buyers` | Restrict to specific domains |
|
|
180
180
|
| `ISCALE_MCP_INCLUDE_UI` | `true` (default `false`) | Include admin-UI navigation tools (only useful inside the in-app agent) |
|
|
181
|
+
| `ISCALE_MCP_ALLOW_SENSITIVE` | `true` (default: hidden) | Register the [sensitive tools](#sensitive-tools). Only the exact value `true` enables them. |
|
|
182
|
+
|
|
183
|
+
#### Sensitive tools
|
|
184
|
+
|
|
185
|
+
Tools that mint, reveal, rotate or redeem a credential, token or secret, or that impersonate another user, are **not registered by default**. An agent cannot call a tool it was never given, so a prompt-injected or confused agent cannot mint an API key, read a provider credential or start impersonation through this server.
|
|
186
|
+
|
|
187
|
+
Hidden by default (full list in [`src/sensitive-tools.ts`](src/sensitive-tools.ts)):
|
|
188
|
+
|
|
189
|
+
- API keys: admin, messaging, buyer and partner key create / list / get / update / revoke
|
|
190
|
+
- Posting keys and spec / setup tokens: rotate, regenerate, create, list, revoke
|
|
191
|
+
- Passwords, impersonation, sign-in codes, Stripe billing-portal sessions
|
|
192
|
+
- Provider credentials and intake credential propagation, the Zoho OAuth callback
|
|
193
|
+
- Signed recording URLs, softphone tokens, invitation bearer links
|
|
194
|
+
|
|
195
|
+
To enable them set `ISCALE_MCP_ALLOW_SENSITIVE=true`. Any other value (`1`, `yes`, `TRUE`, unset) keeps them hidden. Enable it only for a session that needs it.
|
|
196
|
+
|
|
197
|
+
Recommendations:
|
|
198
|
+
|
|
199
|
+
- **Least privilege.** Use a key whose role and scopes cover only what you need. Combine `ISCALE_MCP_SCOPE=read` with a read-only key when you only need to look things up.
|
|
200
|
+
- **https only.** Point `ISCALE_API_URL` at an `https://` URL. The server prints a warning to stderr at startup when the URL is not https and not `localhost` / `127.0.0.1` / `[::1]`. It does not refuse to start.
|
|
201
|
+
- **Treat the key as a password.** Keep it in your MCP config's `env`, never in a prompt, and revoke it at System → API Keys if it leaks.
|
|
181
202
|
|
|
182
203
|
### 3. Restart Claude Code
|
|
183
204
|
|
|
@@ -189,7 +210,7 @@ Try asking: `"Use search_leads to show me recent leads"`
|
|
|
189
210
|
|
|
190
211
|
## MCP Server Tools
|
|
191
212
|
|
|
192
|
-
Once connected with a System key, Claude Code can use about
|
|
213
|
+
Once connected with a System key, Claude Code can use about 900 tools across these categories (partner and buyer keys get the tools for their own portal):
|
|
193
214
|
|
|
194
215
|
| Category | Examples |
|
|
195
216
|
|----------|----------|
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export { SessionAuthAdapter, ApiKeyAuthAdapter, type AuthAdapter } from './auth-
|
|
|
6
6
|
export { registerUiTools } from './tools/ui.js';
|
|
7
7
|
export { registerCompositeTools } from './tools/composite.js';
|
|
8
8
|
export { buildRegistry } from './build-registry.js';
|
|
9
|
+
export { SENSITIVE_TOOL_NAMES } from './sensitive-tools.js';
|
|
9
10
|
export declare const ROLES: readonly ["admin", "buyer", "partner"];
|
|
10
11
|
export type Role = (typeof ROLES)[number];
|
|
11
12
|
export type ScopeFilter = {
|
|
@@ -14,11 +15,17 @@ export type ScopeFilter = {
|
|
|
14
15
|
includeUi?: boolean;
|
|
15
16
|
/** Which API key the server runs with. Defaults to admin (a System key). */
|
|
16
17
|
role?: Role;
|
|
18
|
+
/** Register SENSITIVE_TOOL_NAMES (credential/token/impersonation tools). Defaults to false. */
|
|
19
|
+
allowSensitive?: boolean;
|
|
17
20
|
};
|
|
18
21
|
export declare function filterTools(registry: ToolRegistry, filter?: ScopeFilter): ToolDefinition[];
|
|
19
22
|
export declare function mountRegistryOnServer(server: McpServer, registry: ToolRegistry, auth: ApiKeyAuthAdapter, filter?: ScopeFilter): number;
|
|
20
23
|
/** ISCALE_MCP_ROLE: unset → admin; anything other than the three roles is an error. */
|
|
21
24
|
export declare function parseRole(value: string | undefined): Role;
|
|
25
|
+
/** ISCALE_MCP_ALLOW_SENSITIVE: only the exact string 'true' enables; anything else keeps them hidden. */
|
|
26
|
+
export declare function parseAllowSensitive(value: string | undefined): boolean;
|
|
27
|
+
/** Warning text when ISCALE_API_URL is neither https nor a local host. Never includes the URL itself. */
|
|
28
|
+
export declare function apiUrlWarning(value: string): string | null;
|
|
22
29
|
export declare function createServer(config: {
|
|
23
30
|
baseUrl: string;
|
|
24
31
|
apiKey: string;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAGjE,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AACpF,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAE3D,eAAO,MAAM,KAAK,wCAAyC,CAAA;AAC3D,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,CAAA;AAEzC,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,+FAA+F;IAC/F,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAE,WAAgB,GAAG,cAAc,EAAE,CAiB9F;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,iBAAiB,EACvB,MAAM,GAAE,WAAgB,GACvB,MAAM,CAuCR;AAOD,uFAAuF;AACvF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAIzD;AAED,yGAAyG;AACzG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEtE;AAID,yGAAyG;AACzG,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU1D;AAQD,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,aASA;AAED,wBAAsB,WAAW,kBAmChC"}
|
package/dist/index.js
CHANGED
|
@@ -3,21 +3,26 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { ApiKeyAuthAdapter } from './auth-adapter.js';
|
|
5
5
|
import { buildRegistry } from './build-registry.js';
|
|
6
|
+
import { SENSITIVE_TOOL_NAMES } from './sensitive-tools.js';
|
|
6
7
|
export { ToolRegistry } from './registry.js';
|
|
7
8
|
export { SessionAuthAdapter, ApiKeyAuthAdapter } from './auth-adapter.js';
|
|
8
9
|
export { registerUiTools } from './tools/ui.js';
|
|
9
10
|
export { registerCompositeTools } from './tools/composite.js';
|
|
10
11
|
export { buildRegistry } from './build-registry.js';
|
|
12
|
+
export { SENSITIVE_TOOL_NAMES } from './sensitive-tools.js';
|
|
11
13
|
export const ROLES = ['admin', 'buyer', 'partner'];
|
|
12
14
|
export function filterTools(registry, filter = {}) {
|
|
13
15
|
const scope = filter.scope ?? 'all';
|
|
14
16
|
const includeUi = filter.includeUi ?? false;
|
|
15
17
|
const domains = filter.domains?.length ? new Set(filter.domains) : null;
|
|
16
18
|
const role = filter.role ?? 'admin';
|
|
19
|
+
const allowSensitive = filter.allowSensitive ?? false;
|
|
17
20
|
return registry.getAll().filter(tool => {
|
|
18
21
|
// A tool that declares no roles is admin-only, so it can never leak into a portal scope.
|
|
19
22
|
if (!(tool.metadata.allowedRoles ?? ['admin']).includes(role))
|
|
20
23
|
return false;
|
|
24
|
+
if (!allowSensitive && SENSITIVE_TOOL_NAMES.has(tool.name))
|
|
25
|
+
return false;
|
|
21
26
|
if (!includeUi && tool.metadata.domain === 'ui')
|
|
22
27
|
return false;
|
|
23
28
|
if (domains && !domains.has(tool.metadata.domain))
|
|
@@ -73,6 +78,26 @@ export function parseRole(value) {
|
|
|
73
78
|
return value;
|
|
74
79
|
throw new Error(`Invalid ISCALE_MCP_ROLE ${JSON.stringify(value)}. Valid values: ${ROLES.join(', ')}.`);
|
|
75
80
|
}
|
|
81
|
+
/** ISCALE_MCP_ALLOW_SENSITIVE: only the exact string 'true' enables; anything else keeps them hidden. */
|
|
82
|
+
export function parseAllowSensitive(value) {
|
|
83
|
+
return value === 'true';
|
|
84
|
+
}
|
|
85
|
+
const LOCAL_HOSTS = new Set(['localhost', '127.0.0.1', '[::1]']);
|
|
86
|
+
/** Warning text when ISCALE_API_URL is neither https nor a local host. Never includes the URL itself. */
|
|
87
|
+
export function apiUrlWarning(value) {
|
|
88
|
+
let url;
|
|
89
|
+
try {
|
|
90
|
+
url = new URL(value);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return 'Warning: ISCALE_API_URL is not a valid URL.';
|
|
94
|
+
}
|
|
95
|
+
if (url.protocol === 'https:')
|
|
96
|
+
return null;
|
|
97
|
+
if (url.protocol === 'http:' && LOCAL_HOSTS.has(url.hostname))
|
|
98
|
+
return null;
|
|
99
|
+
return 'Warning: ISCALE_API_URL is not https; the API key will be sent unencrypted. Use an https:// URL.';
|
|
100
|
+
}
|
|
76
101
|
function parseDomains(value) {
|
|
77
102
|
if (!value)
|
|
78
103
|
return undefined;
|
|
@@ -82,7 +107,7 @@ function parseDomains(value) {
|
|
|
82
107
|
export function createServer(config) {
|
|
83
108
|
const server = new McpServer({
|
|
84
109
|
name: 'iscale-lead-routing',
|
|
85
|
-
version: '0.3.
|
|
110
|
+
version: '0.3.1',
|
|
86
111
|
});
|
|
87
112
|
const auth = new ApiKeyAuthAdapter(config.apiKey, config.baseUrl);
|
|
88
113
|
const registry = buildRegistry();
|
|
@@ -100,6 +125,9 @@ export async function startServer() {
|
|
|
100
125
|
console.error('ISCALE_API_KEY environment variable is required');
|
|
101
126
|
process.exit(1);
|
|
102
127
|
}
|
|
128
|
+
const urlWarning = apiUrlWarning(baseUrl);
|
|
129
|
+
if (urlWarning)
|
|
130
|
+
console.error(urlWarning);
|
|
103
131
|
let role;
|
|
104
132
|
try {
|
|
105
133
|
role = parseRole(process.env.ISCALE_MCP_ROLE);
|
|
@@ -113,6 +141,7 @@ export async function startServer() {
|
|
|
113
141
|
scope: parseScope(process.env.ISCALE_MCP_SCOPE),
|
|
114
142
|
domains: parseDomains(process.env.ISCALE_MCP_DOMAINS),
|
|
115
143
|
includeUi: process.env.ISCALE_MCP_INCLUDE_UI === 'true',
|
|
144
|
+
allowSensitive: parseAllowSensitive(process.env.ISCALE_MCP_ALLOW_SENSITIVE),
|
|
116
145
|
};
|
|
117
146
|
const server = createServer({ baseUrl, apiKey, filter });
|
|
118
147
|
const transport = new StdioServerTransport();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tools that mint, reveal, rotate or redeem a credential, token or secret, or that
|
|
3
|
+
* impersonate another user. They are not registered unless ISCALE_MCP_ALLOW_SENSITIVE=true.
|
|
4
|
+
*
|
|
5
|
+
* Single source of truth. Every name must exist in tools/generated/catalog.json —
|
|
6
|
+
* sensitive-tools.test.ts fails when a regenerated catalog renames or drops one.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SENSITIVE_TOOL_NAMES: ReadonlySet<string>;
|
|
9
|
+
//# sourceMappingURL=sensitive-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitive-tools.d.ts","sourceRoot":"","sources":["../src/sensitive-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAiDnD,CAAA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tools that mint, reveal, rotate or redeem a credential, token or secret, or that
|
|
3
|
+
* impersonate another user. They are not registered unless ISCALE_MCP_ALLOW_SENSITIVE=true.
|
|
4
|
+
*
|
|
5
|
+
* Single source of truth. Every name must exist in tools/generated/catalog.json —
|
|
6
|
+
* sensitive-tools.test.ts fails when a regenerated catalog renames or drops one.
|
|
7
|
+
*/
|
|
8
|
+
export const SENSITIVE_TOOL_NAMES = new Set([
|
|
9
|
+
// Admin API keys
|
|
10
|
+
'create_api_key',
|
|
11
|
+
'update_api_key',
|
|
12
|
+
'revoke_api_key',
|
|
13
|
+
'get_api_key',
|
|
14
|
+
'list_api_keys',
|
|
15
|
+
// Messaging / buyer / partner API keys
|
|
16
|
+
'create_messaging_api_key',
|
|
17
|
+
'list_messaging_api_keys',
|
|
18
|
+
'delete_messaging_api_key',
|
|
19
|
+
'create_buyer_api_key',
|
|
20
|
+
'list_buyer_api_keys',
|
|
21
|
+
'revoke_buyer_api_key',
|
|
22
|
+
'create_partner_api_key',
|
|
23
|
+
'list_partner_api_keys',
|
|
24
|
+
'revoke_partner_api_key',
|
|
25
|
+
// Posting keys
|
|
26
|
+
'rotate_campaign_browser_posting_key',
|
|
27
|
+
'regenerate_partner_posting_key',
|
|
28
|
+
// Passwords, sessions, impersonation
|
|
29
|
+
'change_auth_password',
|
|
30
|
+
'start_impersonation',
|
|
31
|
+
'start_impersonation_redirect',
|
|
32
|
+
'exit_impersonation',
|
|
33
|
+
'public_funnel_code_verify',
|
|
34
|
+
'create_credits_billing_portal_session',
|
|
35
|
+
// Provider credentials
|
|
36
|
+
'list_provider_credentials',
|
|
37
|
+
'get_provider_credential',
|
|
38
|
+
'test_provider_credential',
|
|
39
|
+
'apply_intake_credential_propagation',
|
|
40
|
+
'preview_intake_credential_propagation',
|
|
41
|
+
'zoho_crm_oauth_callback',
|
|
42
|
+
// Signed URLs and bearer tokens
|
|
43
|
+
'get_signed_recording',
|
|
44
|
+
'mint_call_recording_signed_url',
|
|
45
|
+
'get_setup_token',
|
|
46
|
+
'create_campaign_setup_token',
|
|
47
|
+
'list_campaign_setup_tokens',
|
|
48
|
+
'revoke_campaign_setup_token',
|
|
49
|
+
'rotate_campaign_spec_token',
|
|
50
|
+
'regenerate_spec_token',
|
|
51
|
+
'create_buyer_softphone_token',
|
|
52
|
+
'refresh_buyer_softphone_token',
|
|
53
|
+
// Invitation bearer links
|
|
54
|
+
'create_invitation_link',
|
|
55
|
+
'accept_team_invitation',
|
|
56
|
+
'preview_team_invitation',
|
|
57
|
+
]);
|
|
58
|
+
//# sourceMappingURL=sensitive-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitive-tools.js","sourceRoot":"","sources":["../src/sensitive-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC;IAC/D,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,aAAa;IACb,eAAe;IACf,uCAAuC;IACvC,0BAA0B;IAC1B,yBAAyB;IACzB,0BAA0B;IAC1B,sBAAsB;IACtB,qBAAqB;IACrB,sBAAsB;IACtB,wBAAwB;IACxB,uBAAuB;IACvB,wBAAwB;IACxB,eAAe;IACf,qCAAqC;IACrC,gCAAgC;IAChC,qCAAqC;IACrC,sBAAsB;IACtB,qBAAqB;IACrB,8BAA8B;IAC9B,oBAAoB;IACpB,2BAA2B;IAC3B,uCAAuC;IACvC,uBAAuB;IACvB,2BAA2B;IAC3B,yBAAyB;IACzB,0BAA0B;IAC1B,qCAAqC;IACrC,uCAAuC;IACvC,yBAAyB;IACzB,gCAAgC;IAChC,sBAAsB;IACtB,gCAAgC;IAChC,iBAAiB;IACjB,6BAA6B;IAC7B,4BAA4B;IAC5B,6BAA6B;IAC7B,4BAA4B;IAC5B,uBAAuB;IACvB,8BAA8B;IAC9B,+BAA+B;IAC/B,0BAA0B;IAC1B,wBAAwB;IACxB,wBAAwB;IACxB,yBAAyB;CAC1B,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "theleadrouter-mcp",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "MCP server for theLeadRouter — connect Claude Code to your lead routing platform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
"node": ">=18.0.0"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
56
|
-
"js-yaml": "^4.
|
|
55
|
+
"@modelcontextprotocol/sdk": "^1.32.2",
|
|
56
|
+
"js-yaml": "^4.3.2",
|
|
57
57
|
"zod": "^3.23.0",
|
|
58
58
|
"zod-to-json-schema": "^3.25.1"
|
|
59
59
|
},
|