@cloudinary/environment-config-mcp 0.6.1 → 0.6.3
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 -2
- package/bin/mcp-server.js +45560 -43862
- package/bin/mcp-server.js.map +73 -255
- package/esm/landing-page.d.ts +2 -1
- package/esm/landing-page.d.ts.map +1 -1
- package/esm/landing-page.js +51 -28
- package/esm/landing-page.js.map +1 -1
- package/esm/lib/config.d.ts +3 -3
- package/esm/lib/config.js +3 -3
- package/esm/mcp-server/cli/serve/impl.js +51 -25
- package/esm/mcp-server/cli/serve/impl.js.map +1 -1
- package/esm/mcp-server/cli/start/impl.js +11 -8
- package/esm/mcp-server/cli/start/impl.js.map +1 -1
- package/esm/mcp-server/extensions.d.ts +3 -3
- package/esm/mcp-server/extensions.d.ts.map +1 -1
- package/esm/mcp-server/mcp-server.js +1 -1
- package/esm/mcp-server/prompts.d.ts +7 -8
- package/esm/mcp-server/prompts.d.ts.map +1 -1
- package/esm/mcp-server/prompts.js +12 -12
- package/esm/mcp-server/prompts.js.map +1 -1
- package/esm/mcp-server/resources.d.ts +6 -7
- package/esm/mcp-server/resources.d.ts.map +1 -1
- package/esm/mcp-server/resources.js +19 -3
- package/esm/mcp-server/resources.js.map +1 -1
- package/esm/mcp-server/server-info.d.ts +4 -0
- package/esm/mcp-server/server-info.d.ts.map +1 -0
- package/esm/mcp-server/server-info.js +24 -0
- package/esm/mcp-server/server-info.js.map +1 -0
- package/esm/mcp-server/server.d.ts +1 -1
- package/esm/mcp-server/server.d.ts.map +1 -1
- package/esm/mcp-server/server.js +5 -3
- package/esm/mcp-server/server.js.map +1 -1
- package/esm/mcp-server/shared.d.ts +7 -0
- package/esm/mcp-server/shared.d.ts.map +1 -1
- package/esm/mcp-server/shared.js +184 -0
- package/esm/mcp-server/shared.js.map +1 -1
- package/esm/mcp-server/tools/streamingProfilesCreateStreamingProfile.js +1 -1
- package/esm/mcp-server/tools/streamingProfilesCreateStreamingProfile.js.map +1 -1
- package/esm/mcp-server/tools/streamingProfilesDeleteStreamingProfile.js +1 -1
- package/esm/mcp-server/tools/streamingProfilesDeleteStreamingProfile.js.map +1 -1
- package/esm/mcp-server/tools/streamingProfilesGetStreamingProfile.js +1 -1
- package/esm/mcp-server/tools/streamingProfilesGetStreamingProfile.js.map +1 -1
- package/esm/mcp-server/tools/streamingProfilesGetStreamingProfiles.js +1 -1
- package/esm/mcp-server/tools/streamingProfilesGetStreamingProfiles.js.map +1 -1
- package/esm/mcp-server/tools/streamingProfilesUpdateStreamingProfile.js +1 -1
- package/esm/mcp-server/tools/streamingProfilesUpdateStreamingProfile.js.map +1 -1
- package/esm/mcp-server/tools/transformationsCreateTransformation.js +1 -1
- package/esm/mcp-server/tools/transformationsCreateTransformation.js.map +1 -1
- package/esm/mcp-server/tools/transformationsDeleteTransformation.js +1 -1
- package/esm/mcp-server/tools/transformationsDeleteTransformation.js.map +1 -1
- package/esm/mcp-server/tools/transformationsGetTransformation.js +1 -1
- package/esm/mcp-server/tools/transformationsGetTransformation.js.map +1 -1
- package/esm/mcp-server/tools/transformationsListTransformations.js +1 -1
- package/esm/mcp-server/tools/transformationsListTransformations.js.map +1 -1
- package/esm/mcp-server/tools/transformationsUpdateTransformation.js +1 -1
- package/esm/mcp-server/tools/transformationsUpdateTransformation.js.map +1 -1
- package/esm/mcp-server/tools/triggersCreateTrigger.js +1 -1
- package/esm/mcp-server/tools/triggersCreateTrigger.js.map +1 -1
- package/esm/mcp-server/tools/triggersDeleteTrigger.js +1 -1
- package/esm/mcp-server/tools/triggersDeleteTrigger.js.map +1 -1
- package/esm/mcp-server/tools/triggersListTrigger.js +1 -1
- package/esm/mcp-server/tools/triggersListTrigger.js.map +1 -1
- package/esm/mcp-server/tools/triggersTestTrigger.js +1 -1
- package/esm/mcp-server/tools/triggersTestTrigger.js.map +1 -1
- package/esm/mcp-server/tools/triggersUpdateTrigger.js +1 -1
- package/esm/mcp-server/tools/triggersUpdateTrigger.js.map +1 -1
- package/esm/mcp-server/tools/uploadMappingsCreateUploadMapping.js +1 -1
- package/esm/mcp-server/tools/uploadMappingsCreateUploadMapping.js.map +1 -1
- package/esm/mcp-server/tools/uploadMappingsDeleteUploadMapping.js +1 -1
- package/esm/mcp-server/tools/uploadMappingsDeleteUploadMapping.js.map +1 -1
- package/esm/mcp-server/tools/uploadMappingsListUploadMappings.js +1 -1
- package/esm/mcp-server/tools/uploadMappingsListUploadMappings.js.map +1 -1
- package/esm/mcp-server/tools/uploadMappingsUpdateUploadMapping.js +1 -1
- package/esm/mcp-server/tools/uploadMappingsUpdateUploadMapping.js.map +1 -1
- package/esm/mcp-server/tools/uploadPresetsCreateUploadPreset.js +1 -1
- package/esm/mcp-server/tools/uploadPresetsCreateUploadPreset.js.map +1 -1
- package/esm/mcp-server/tools/uploadPresetsDeleteUploadPreset.js +1 -1
- package/esm/mcp-server/tools/uploadPresetsDeleteUploadPreset.js.map +1 -1
- package/esm/mcp-server/tools/uploadPresetsGetUploadPreset.js +1 -1
- package/esm/mcp-server/tools/uploadPresetsGetUploadPreset.js.map +1 -1
- package/esm/mcp-server/tools/uploadPresetsListUploadPresets.js +1 -1
- package/esm/mcp-server/tools/uploadPresetsListUploadPresets.js.map +1 -1
- package/esm/mcp-server/tools/uploadPresetsUpdateUploadPreset.js +1 -1
- package/esm/mcp-server/tools/uploadPresetsUpdateUploadPreset.js.map +1 -1
- package/esm/mcp-server/tools.d.ts +11 -9
- package/esm/mcp-server/tools.d.ts.map +1 -1
- package/esm/mcp-server/tools.js +20 -19
- package/esm/mcp-server/tools.js.map +1 -1
- package/package.json +16 -6
- package/src/landing-page.ts +81 -28
- package/src/lib/config.ts +3 -3
- package/src/mcp-server/cli/serve/impl.ts +55 -25
- package/src/mcp-server/cli/start/impl.ts +16 -9
- package/src/mcp-server/extensions.ts +3 -5
- package/src/mcp-server/mcp-server.ts +1 -1
- package/src/mcp-server/prompts.ts +30 -43
- package/src/mcp-server/resources.ts +32 -17
- package/src/mcp-server/server-info.ts +31 -0
- package/src/mcp-server/server.ts +5 -3
- package/src/mcp-server/shared.ts +201 -0
- package/src/mcp-server/tools/streamingProfilesCreateStreamingProfile.ts +1 -1
- package/src/mcp-server/tools/streamingProfilesDeleteStreamingProfile.ts +1 -1
- package/src/mcp-server/tools/streamingProfilesGetStreamingProfile.ts +1 -1
- package/src/mcp-server/tools/streamingProfilesGetStreamingProfiles.ts +1 -1
- package/src/mcp-server/tools/streamingProfilesUpdateStreamingProfile.ts +1 -1
- package/src/mcp-server/tools/transformationsCreateTransformation.ts +1 -1
- package/src/mcp-server/tools/transformationsDeleteTransformation.ts +1 -1
- package/src/mcp-server/tools/transformationsGetTransformation.ts +1 -1
- package/src/mcp-server/tools/transformationsListTransformations.ts +1 -1
- package/src/mcp-server/tools/transformationsUpdateTransformation.ts +1 -1
- package/src/mcp-server/tools/triggersCreateTrigger.ts +1 -1
- package/src/mcp-server/tools/triggersDeleteTrigger.ts +1 -1
- package/src/mcp-server/tools/triggersListTrigger.ts +1 -1
- package/src/mcp-server/tools/triggersTestTrigger.ts +1 -1
- package/src/mcp-server/tools/triggersUpdateTrigger.ts +1 -1
- package/src/mcp-server/tools/uploadMappingsCreateUploadMapping.ts +1 -1
- package/src/mcp-server/tools/uploadMappingsDeleteUploadMapping.ts +1 -1
- package/src/mcp-server/tools/uploadMappingsListUploadMappings.ts +1 -1
- package/src/mcp-server/tools/uploadMappingsUpdateUploadMapping.ts +1 -1
- package/src/mcp-server/tools/uploadPresetsCreateUploadPreset.ts +1 -1
- package/src/mcp-server/tools/uploadPresetsDeleteUploadPreset.ts +1 -1
- package/src/mcp-server/tools/uploadPresetsGetUploadPreset.ts +1 -1
- package/src/mcp-server/tools/uploadPresetsListUploadPresets.ts +1 -1
- package/src/mcp-server/tools/uploadPresetsUpdateUploadPreset.ts +1 -1
- package/src/mcp-server/tools.ts +42 -45
|
@@ -3,27 +3,23 @@
|
|
|
3
3
|
* @generated-id: cb0c57ebeaea
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import type { ResourceTemplate as LegacyResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
7
|
import {
|
|
7
8
|
McpServer,
|
|
9
|
+
ReadResourceResult,
|
|
8
10
|
ResourceMetadata,
|
|
9
11
|
ResourceTemplate,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
import { Variables } from "@modelcontextprotocol/sdk/shared/uriTemplate.js";
|
|
13
|
-
import {
|
|
14
|
-
ReadResourceResult,
|
|
15
|
-
ServerNotification,
|
|
16
|
-
ServerRequest,
|
|
17
|
-
} from "@modelcontextprotocol/sdk/types.js";
|
|
12
|
+
Variables,
|
|
13
|
+
} from "@modelcontextprotocol/server";
|
|
18
14
|
import { CloudinaryEnvConfigCore } from "../core.js";
|
|
19
15
|
import { ConsoleLogger } from "./console-logger.js";
|
|
20
16
|
import { MCPScope } from "./scopes.js";
|
|
21
|
-
import { valueToBase64 } from "./shared.js";
|
|
17
|
+
import { MCPServerContext, mcpServerContext, valueToBase64 } from "./shared.js";
|
|
22
18
|
|
|
23
19
|
export type ReadResourceCallback = (
|
|
24
20
|
client: CloudinaryEnvConfigCore,
|
|
25
21
|
uri: URL,
|
|
26
|
-
extra:
|
|
22
|
+
extra: MCPServerContext,
|
|
27
23
|
) => ReadResourceResult | Promise<ReadResourceResult>;
|
|
28
24
|
|
|
29
25
|
export type ResourceDefinition = {
|
|
@@ -39,7 +35,7 @@ export type ReadResourceTemplateCallback = (
|
|
|
39
35
|
client: CloudinaryEnvConfigCore,
|
|
40
36
|
uri: URL,
|
|
41
37
|
vars: Variables,
|
|
42
|
-
extra:
|
|
38
|
+
extra: MCPServerContext,
|
|
43
39
|
) => ReadResourceResult | Promise<ReadResourceResult>;
|
|
44
40
|
|
|
45
41
|
export type ResourceTemplateDefinition = {
|
|
@@ -47,7 +43,7 @@ export type ResourceTemplateDefinition = {
|
|
|
47
43
|
description: string;
|
|
48
44
|
metadata?: ResourceMetadata;
|
|
49
45
|
scopes?: MCPScope[];
|
|
50
|
-
resource: ResourceTemplate;
|
|
46
|
+
resource: ResourceTemplate | LegacyResourceTemplate;
|
|
51
47
|
read: ReadResourceTemplateCallback;
|
|
52
48
|
};
|
|
53
49
|
|
|
@@ -95,11 +91,11 @@ export function createRegisterResource(
|
|
|
95
91
|
description: resource.description,
|
|
96
92
|
};
|
|
97
93
|
|
|
98
|
-
server.
|
|
94
|
+
server.registerResource(
|
|
99
95
|
resource.name,
|
|
100
96
|
resource.resource,
|
|
101
97
|
metadata,
|
|
102
|
-
async (uri, ctx) => resource.read(getSDK(), uri, ctx),
|
|
98
|
+
async (uri, ctx) => resource.read(getSDK(), uri, mcpServerContext(ctx)),
|
|
103
99
|
);
|
|
104
100
|
|
|
105
101
|
logger.debug("Registered resource", { name: resource.name });
|
|
@@ -130,13 +126,32 @@ export function createRegisterResourceTemplate(
|
|
|
130
126
|
description: resource.description,
|
|
131
127
|
};
|
|
132
128
|
|
|
133
|
-
server.
|
|
129
|
+
server.registerResource(
|
|
134
130
|
resource.name,
|
|
135
|
-
resource.resource,
|
|
131
|
+
normalizeResourceTemplate(resource.resource),
|
|
136
132
|
metadata,
|
|
137
|
-
async (uri, vars, ctx) =>
|
|
133
|
+
async (uri, vars, ctx) =>
|
|
134
|
+
resource.read(getSDK(), uri, vars, mcpServerContext(ctx)),
|
|
138
135
|
);
|
|
139
136
|
|
|
140
137
|
logger.debug("Registered resource template", { name: resource.name });
|
|
141
138
|
};
|
|
142
139
|
}
|
|
140
|
+
|
|
141
|
+
function normalizeResourceTemplate(
|
|
142
|
+
resource: ResourceTemplate | LegacyResourceTemplate,
|
|
143
|
+
): ResourceTemplate {
|
|
144
|
+
if (resource instanceof ResourceTemplate) return resource;
|
|
145
|
+
const complete: NonNullable<
|
|
146
|
+
ConstructorParameters<typeof ResourceTemplate>[1]["complete"]
|
|
147
|
+
> = {};
|
|
148
|
+
for (const variable of resource.uriTemplate.variableNames) {
|
|
149
|
+
const callback = resource.completeCallback(variable);
|
|
150
|
+
if (callback) complete[variable] = callback;
|
|
151
|
+
}
|
|
152
|
+
const list = resource.listCallback;
|
|
153
|
+
return new ResourceTemplate(resource.uriTemplate.toString(), {
|
|
154
|
+
list: list ? (ctx) => list(mcpServerContext(ctx)) : undefined,
|
|
155
|
+
complete,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Server metadata and instructions returned in the MCP initialize response.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { Implementation } from "@modelcontextprotocol/sdk/types.js";
|
|
6
|
+
|
|
7
|
+
const ICON_BASE =
|
|
8
|
+
"https://cloudinary-res.cloudinary.com/image/upload/docsite/brand-assets";
|
|
9
|
+
|
|
10
|
+
export const serverInfo: Omit<Implementation, "name" | "version"> = {
|
|
11
|
+
title: "Cloudinary Environment Config",
|
|
12
|
+
description:
|
|
13
|
+
"Manage Cloudinary upload presets, named transformations, upload mappings, triggers, and streaming profiles.",
|
|
14
|
+
websiteUrl: "https://cloudinary.com/documentation/cloudinary_llm_mcp",
|
|
15
|
+
icons: [32, 96, 192].map((size) => ({
|
|
16
|
+
src: `${ICON_BASE}/cloudinary_favicon_${size}x${size}.png`,
|
|
17
|
+
mimeType: "image/png",
|
|
18
|
+
sizes: [`${size}x${size}`],
|
|
19
|
+
})),
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const instructions =
|
|
23
|
+
`Cloudinary Environment Config: manage the settings that shape how assets are uploaded, transformed and delivered in a Cloudinary product environment.
|
|
24
|
+
|
|
25
|
+
- Upload presets bundle upload options (folder, tags, eager and incoming transformations, notification_url) under a name that uploads and the Upload Widget refer to. Check list-upload-presets first: creating a preset with an existing name overwrites it.
|
|
26
|
+
- Named transformations are reusable transformation strings applied in delivery URLs as t_<name>. Changing one requires unsafe_update and affects only newly generated derived assets. Chain f_auto outside it, e.g. t_square/f_auto.
|
|
27
|
+
- Upload mappings link a folder to a remote URL prefix for auto-upload. To apply a preset to a mapping, give the preset the same name as the mapped folder.
|
|
28
|
+
- Triggers send webhook notifications for one event type to one URL. update-trigger, delete-trigger and test-trigger need the id from list-triggers or create-trigger. A preset's notification_url overrides global triggers for uploads that use it.
|
|
29
|
+
- Streaming profiles define adaptive bitrate renditions. Updating one replaces its whole representations list; deleting a modified built-in profile reverts it.
|
|
30
|
+
- Works with the Asset Management server: its upload-asset takes upload_preset.
|
|
31
|
+
- Docs: https://cloudinary.com/documentation/llms.txt indexes all Cloudinary docs; append .md to a documentation URL for Markdown.`;
|
package/src/mcp-server/server.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @generated-id: 2784dd48e82a
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { McpServer } from "@modelcontextprotocol/
|
|
6
|
+
import { McpServer } from "@modelcontextprotocol/server";
|
|
7
7
|
import { CloudinaryEnvConfigCore } from "../core.js";
|
|
8
8
|
import { SDKOptions } from "../lib/config.js";
|
|
9
9
|
import type { ConsoleLogger } from "./console-logger.js";
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
createRegisterResourceTemplate,
|
|
14
14
|
} from "./resources.js";
|
|
15
15
|
import { MCPScope } from "./scopes.js";
|
|
16
|
+
import { instructions, serverInfo } from "./server-info.js";
|
|
16
17
|
import {
|
|
17
18
|
createRegisterTool,
|
|
18
19
|
MCPToolAnnotationFilter,
|
|
@@ -59,8 +60,9 @@ export function createMCPServer(deps: {
|
|
|
59
60
|
}) {
|
|
60
61
|
const server = new McpServer({
|
|
61
62
|
name: "CloudinaryEnvConfig",
|
|
62
|
-
version: "0.6.
|
|
63
|
-
|
|
63
|
+
version: "0.6.3",
|
|
64
|
+
...serverInfo,
|
|
65
|
+
}, { instructions });
|
|
64
66
|
|
|
65
67
|
const getClient = deps.getSDK || (() =>
|
|
66
68
|
new CloudinaryEnvConfigCore({
|
package/src/mcp-server/shared.ts
CHANGED
|
@@ -3,8 +3,209 @@
|
|
|
3
3
|
* @generated-id: 074e80d4be1e
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import type { RequestHandlerExtra } from "@modelcontextprotocol/sdk/shared/protocol.js";
|
|
7
|
+
import type {
|
|
8
|
+
ServerNotification,
|
|
9
|
+
ServerRequest,
|
|
10
|
+
} from "@modelcontextprotocol/sdk/types.js";
|
|
11
|
+
import { ErrorCode, McpError } from "@modelcontextprotocol/sdk/types.js";
|
|
12
|
+
import type {
|
|
13
|
+
ServerContext,
|
|
14
|
+
StandardSchemaWithJSON,
|
|
15
|
+
} from "@modelcontextprotocol/server";
|
|
6
16
|
import * as z from "zod";
|
|
7
17
|
|
|
18
|
+
export type MCPServerContext =
|
|
19
|
+
& ServerContext
|
|
20
|
+
& RequestHandlerExtra<ServerRequest, ServerNotification>;
|
|
21
|
+
|
|
22
|
+
export function mcpServerContext(ctx: ServerContext): MCPServerContext {
|
|
23
|
+
return {
|
|
24
|
+
...ctx,
|
|
25
|
+
signal: ctx.mcpReq.signal,
|
|
26
|
+
requestId: ctx.mcpReq.id,
|
|
27
|
+
...(ctx.mcpReq._meta ? { _meta: ctx.mcpReq._meta } : {}),
|
|
28
|
+
...(ctx.http?.authInfo ? { authInfo: ctx.http.authInfo } : {}),
|
|
29
|
+
...(ctx.http?.req
|
|
30
|
+
? {
|
|
31
|
+
requestInfo: {
|
|
32
|
+
headers: Object.fromEntries(ctx.http.req.headers),
|
|
33
|
+
url: new URL(ctx.http.req.url),
|
|
34
|
+
},
|
|
35
|
+
}
|
|
36
|
+
: {}),
|
|
37
|
+
...(ctx.http?.closeSSE ? { closeSSEStream: ctx.http.closeSSE } : {}),
|
|
38
|
+
...(ctx.http?.closeStandaloneSSE
|
|
39
|
+
? { closeStandaloneSSEStream: ctx.http.closeStandaloneSSE }
|
|
40
|
+
: {}),
|
|
41
|
+
sendNotification: async (notification) => {
|
|
42
|
+
if (!ctx.mcpReq.signal.aborted) await ctx.mcpReq.notify(notification);
|
|
43
|
+
},
|
|
44
|
+
sendRequest: async (request, resultSchema, options) => {
|
|
45
|
+
if (ctx.mcpReq.signal.aborted) {
|
|
46
|
+
throw new McpError(ErrorCode.ConnectionClosed, "Request was cancelled");
|
|
47
|
+
}
|
|
48
|
+
return (ctx.mcpReq.send as MCPServerContext["sendRequest"])(
|
|
49
|
+
request,
|
|
50
|
+
resultSchema,
|
|
51
|
+
options,
|
|
52
|
+
);
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function mcpInputSchema<Shape extends z.ZodRawShape>(
|
|
58
|
+
shape: Shape,
|
|
59
|
+
): StandardSchemaWithJSON<
|
|
60
|
+
z.input<z.ZodObject<Shape>>,
|
|
61
|
+
z.output<z.ZodObject<Shape>>
|
|
62
|
+
> {
|
|
63
|
+
const schema = z.object(shape);
|
|
64
|
+
const standard = schema["~standard"];
|
|
65
|
+
return {
|
|
66
|
+
"~standard": {
|
|
67
|
+
...standard,
|
|
68
|
+
jsonSchema: {
|
|
69
|
+
input: (options) => {
|
|
70
|
+
const source = jsonSchemaSource(schema);
|
|
71
|
+
return source.schema["~standard"].jsonSchema.input({
|
|
72
|
+
...options,
|
|
73
|
+
libraryOptions: {
|
|
74
|
+
...options.libraryOptions,
|
|
75
|
+
metadata: source.metadata,
|
|
76
|
+
override: source.override,
|
|
77
|
+
unrepresentable: "any",
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
},
|
|
81
|
+
output: (options) => {
|
|
82
|
+
const source = jsonSchemaSource(schema);
|
|
83
|
+
return source.schema["~standard"].jsonSchema.output({
|
|
84
|
+
...options,
|
|
85
|
+
libraryOptions: {
|
|
86
|
+
...options.libraryOptions,
|
|
87
|
+
metadata: source.metadata,
|
|
88
|
+
override: source.override,
|
|
89
|
+
unrepresentable: "any",
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Zod serializes defaults before its override runs; clone only the conversion schema to preserve runtime defaults.
|
|
99
|
+
function jsonSchemaSource(schema: z.ZodType) {
|
|
100
|
+
const registry = z.registry<z.core.GlobalMeta>();
|
|
101
|
+
const copies = new WeakMap<object, unknown>();
|
|
102
|
+
const defaults = new WeakMap<z.core.$ZodType, unknown>();
|
|
103
|
+
const jsonValue = (value: unknown, onNormalized?: () => void): unknown =>
|
|
104
|
+
value === undefined ? undefined : JSON.parse(
|
|
105
|
+
JSON.stringify(
|
|
106
|
+
value,
|
|
107
|
+
function(this: Record<string, unknown>, key, item: unknown) {
|
|
108
|
+
if (this[key] instanceof Date) onNormalized?.();
|
|
109
|
+
if (typeof item !== "bigint") return item;
|
|
110
|
+
onNormalized?.();
|
|
111
|
+
return item.toString();
|
|
112
|
+
},
|
|
113
|
+
),
|
|
114
|
+
);
|
|
115
|
+
const copy = (value: unknown): unknown => {
|
|
116
|
+
if (typeof value !== "object" || value === null) return value;
|
|
117
|
+
if (copies.has(value)) return copies.get(value);
|
|
118
|
+
if (value instanceof z.ZodType) {
|
|
119
|
+
const def = copy(value.def) as z.ZodType["def"];
|
|
120
|
+
const cloned = value.clone(def);
|
|
121
|
+
copies.set(value, cloned);
|
|
122
|
+
const metadata = value.meta();
|
|
123
|
+
if (metadata) {
|
|
124
|
+
registry.add(cloned, jsonValue(metadata) as typeof metadata);
|
|
125
|
+
}
|
|
126
|
+
if (value instanceof z.ZodDefault || value instanceof z.ZodPrefault) {
|
|
127
|
+
let hasNormalizedDefault = false;
|
|
128
|
+
const normalized = jsonValue(value.def.defaultValue, () => {
|
|
129
|
+
hasNormalizedDefault = true;
|
|
130
|
+
});
|
|
131
|
+
if (hasNormalizedDefault) {
|
|
132
|
+
defaults.set(cloned, undefined);
|
|
133
|
+
try {
|
|
134
|
+
if (z.safeParse(value.def.innerType, normalized).success) {
|
|
135
|
+
defaults.set(cloned, normalized);
|
|
136
|
+
}
|
|
137
|
+
} catch {
|
|
138
|
+
return cloned;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (value instanceof z.ZodCatch) {
|
|
143
|
+
(def as z.ZodCatch["def"]).catchValue = (ctx) => {
|
|
144
|
+
let fallback: unknown;
|
|
145
|
+
try {
|
|
146
|
+
fallback = value.def.catchValue(ctx);
|
|
147
|
+
} catch (error) {
|
|
148
|
+
if (ctx !== undefined) throw error;
|
|
149
|
+
defaults.set(cloned, undefined);
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
let hasNormalizedDefault = false;
|
|
153
|
+
const normalized = jsonValue(fallback, () => {
|
|
154
|
+
hasNormalizedDefault = true;
|
|
155
|
+
});
|
|
156
|
+
if (hasNormalizedDefault) {
|
|
157
|
+
defaults.set(cloned, undefined);
|
|
158
|
+
try {
|
|
159
|
+
if (z.safeParse(value.def.innerType, normalized).success) {
|
|
160
|
+
defaults.set(cloned, normalized);
|
|
161
|
+
}
|
|
162
|
+
} catch {
|
|
163
|
+
return normalized;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return normalized;
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
return cloned;
|
|
170
|
+
}
|
|
171
|
+
if (Array.isArray(value)) {
|
|
172
|
+
const cloned: unknown[] = [];
|
|
173
|
+
copies.set(value, cloned);
|
|
174
|
+
for (const item of value) cloned.push(copy(item));
|
|
175
|
+
return cloned;
|
|
176
|
+
}
|
|
177
|
+
if (Object.getPrototypeOf(value) !== Object.prototype) return value;
|
|
178
|
+
const cloned: Record<string, unknown> = {};
|
|
179
|
+
copies.set(value, cloned);
|
|
180
|
+
for (const key of Object.keys(value)) {
|
|
181
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key)!;
|
|
182
|
+
const read = () => {
|
|
183
|
+
const item: unknown = Reflect.get(value, key);
|
|
184
|
+
if (key === "defaultValue") return jsonValue(item);
|
|
185
|
+
if (key === "getter" && typeof item === "function") {
|
|
186
|
+
return () => copy(item());
|
|
187
|
+
}
|
|
188
|
+
return copy(item);
|
|
189
|
+
};
|
|
190
|
+
if (descriptor.get) {
|
|
191
|
+
Object.defineProperty(cloned, key, { enumerable: true, get: read });
|
|
192
|
+
} else {
|
|
193
|
+
cloned[key] = read();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return cloned;
|
|
197
|
+
};
|
|
198
|
+
const override: NonNullable<z.core.ToJSONSchemaParams["override"]> = (
|
|
199
|
+
{ zodSchema, jsonSchema },
|
|
200
|
+
) => {
|
|
201
|
+
if (!defaults.has(zodSchema)) return;
|
|
202
|
+
const value = defaults.get(zodSchema);
|
|
203
|
+
if (value === undefined) delete jsonSchema.default;
|
|
204
|
+
else jsonSchema.default = value;
|
|
205
|
+
};
|
|
206
|
+
return { schema: copy(schema) as z.ZodType, metadata: registry, override };
|
|
207
|
+
}
|
|
208
|
+
|
|
8
209
|
type BinaryData =
|
|
9
210
|
| Uint8Array
|
|
10
211
|
| ArrayBuffer
|
|
@@ -32,7 +32,7 @@ export const tool$streamingProfilesCreateStreamingProfile: ToolDefinition<
|
|
|
32
32
|
const [result] = await streamingProfilesCreateStreamingProfile(
|
|
33
33
|
client,
|
|
34
34
|
args.request,
|
|
35
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
35
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
36
36
|
).$inspect();
|
|
37
37
|
|
|
38
38
|
if (!result.ok) {
|
|
@@ -30,7 +30,7 @@ export const tool$streamingProfilesDeleteStreamingProfile: ToolDefinition<
|
|
|
30
30
|
const [result] = await streamingProfilesDeleteStreamingProfile(
|
|
31
31
|
client,
|
|
32
32
|
args.name,
|
|
33
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
33
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
34
34
|
).$inspect();
|
|
35
35
|
|
|
36
36
|
if (!result.ok) {
|
|
@@ -30,7 +30,7 @@ export const tool$streamingProfilesGetStreamingProfile: ToolDefinition<
|
|
|
30
30
|
const [result] = await streamingProfilesGetStreamingProfile(
|
|
31
31
|
client,
|
|
32
32
|
args.name,
|
|
33
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
33
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
34
34
|
).$inspect();
|
|
35
35
|
|
|
36
36
|
if (!result.ok) {
|
|
@@ -30,7 +30,7 @@ export const tool$streamingProfilesGetStreamingProfiles: ToolDefinition<
|
|
|
30
30
|
const [result] = await streamingProfilesGetStreamingProfiles(
|
|
31
31
|
client,
|
|
32
32
|
args.request,
|
|
33
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
33
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
34
34
|
).$inspect();
|
|
35
35
|
|
|
36
36
|
if (!result.ok) {
|
|
@@ -35,7 +35,7 @@ export const tool$streamingProfilesUpdateStreamingProfile: ToolDefinition<
|
|
|
35
35
|
client,
|
|
36
36
|
args.name,
|
|
37
37
|
args.streaming_profile_update,
|
|
38
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
38
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
39
39
|
).$inspect();
|
|
40
40
|
|
|
41
41
|
if (!result.ok) {
|
|
@@ -40,7 +40,7 @@ Creates a new named transformation with the given name and transformation string
|
|
|
40
40
|
client,
|
|
41
41
|
args.transformation,
|
|
42
42
|
args.create_request,
|
|
43
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
43
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
44
44
|
).$inspect();
|
|
45
45
|
|
|
46
46
|
if (!result.ok) {
|
|
@@ -38,7 +38,7 @@ Delete a named or unnamed transformation. Optionally invalidate derived resource
|
|
|
38
38
|
client,
|
|
39
39
|
args.transformation,
|
|
40
40
|
args.invalidate,
|
|
41
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
41
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
42
42
|
).$inspect();
|
|
43
43
|
|
|
44
44
|
if (!result.ok) {
|
|
@@ -34,7 +34,7 @@ Retrieves details for a named or unnamed transformation.
|
|
|
34
34
|
const [result] = await transformationsGetTransformation(
|
|
35
35
|
client,
|
|
36
36
|
args.transformation,
|
|
37
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
37
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
38
38
|
).$inspect();
|
|
39
39
|
|
|
40
40
|
if (!result.ok) {
|
|
@@ -43,7 +43,7 @@ Retrieves a list of all transformations, which can be filtered to show either on
|
|
|
43
43
|
args.named,
|
|
44
44
|
args.max_results,
|
|
45
45
|
args.next_cursor,
|
|
46
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
46
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
47
47
|
).$inspect();
|
|
48
48
|
|
|
49
49
|
if (!result.ok) {
|
|
@@ -34,7 +34,7 @@ Your product environment supports triggers up to a maximum determined by multipl
|
|
|
34
34
|
const [result] = await triggersCreateTrigger(
|
|
35
35
|
client,
|
|
36
36
|
args.request,
|
|
37
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
37
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
38
38
|
).$inspect();
|
|
39
39
|
|
|
40
40
|
if (!result.ok) {
|
|
@@ -33,7 +33,7 @@ Retrieves a list of all event triggers and notifications within your product env
|
|
|
33
33
|
const [result] = await triggersListTrigger(
|
|
34
34
|
client,
|
|
35
35
|
args.event_type,
|
|
36
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
36
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
37
37
|
).$inspect();
|
|
38
38
|
|
|
39
39
|
if (!result.ok) {
|
|
@@ -36,7 +36,7 @@ Use this endpoint to verify that a trigger's filter will match expected events.
|
|
|
36
36
|
client,
|
|
37
37
|
args.id,
|
|
38
38
|
args.test_trigger_request,
|
|
39
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
39
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
40
40
|
).$inspect();
|
|
41
41
|
|
|
42
42
|
if (!result.ok) {
|
|
@@ -33,7 +33,7 @@ Creates a new upload mapping for the specified folder`,
|
|
|
33
33
|
const [result] = await uploadMappingsCreateUploadMapping(
|
|
34
34
|
client,
|
|
35
35
|
args.request,
|
|
36
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
36
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
37
37
|
).$inspect();
|
|
38
38
|
|
|
39
39
|
if (!result.ok) {
|
|
@@ -31,7 +31,7 @@ Permanently deletes the upload mapping for the specified folder`,
|
|
|
31
31
|
const [result] = await uploadMappingsDeleteUploadMapping(
|
|
32
32
|
client,
|
|
33
33
|
args.folder,
|
|
34
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
34
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
35
35
|
).$inspect();
|
|
36
36
|
|
|
37
37
|
if (!result.ok) {
|
|
@@ -44,7 +44,7 @@ Upload mappings allow you to map an upload preset to a specific folder and URL t
|
|
|
44
44
|
args.folder,
|
|
45
45
|
args.next_cursor,
|
|
46
46
|
args.max_results,
|
|
47
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
47
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
48
48
|
).$inspect();
|
|
49
49
|
|
|
50
50
|
if (!result.ok) {
|
|
@@ -34,7 +34,7 @@ Updates the URL template for an existing folder mapping`,
|
|
|
34
34
|
const [result] = await uploadMappingsUpdateUploadMapping(
|
|
35
35
|
client,
|
|
36
36
|
args.request,
|
|
37
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
37
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
38
38
|
).$inspect();
|
|
39
39
|
|
|
40
40
|
if (!result.ok) {
|
|
@@ -31,7 +31,7 @@ export const tool$uploadPresetsCreateUploadPreset: ToolDefinition<typeof args> =
|
|
|
31
31
|
const [result] = await uploadPresetsCreateUploadPreset(
|
|
32
32
|
client,
|
|
33
33
|
args.request,
|
|
34
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
34
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
35
35
|
).$inspect();
|
|
36
36
|
|
|
37
37
|
if (!result.ok) {
|
|
@@ -28,7 +28,7 @@ export const tool$uploadPresetsDeleteUploadPreset: ToolDefinition<typeof args> =
|
|
|
28
28
|
const [result] = await uploadPresetsDeleteUploadPreset(
|
|
29
29
|
client,
|
|
30
30
|
args.name,
|
|
31
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
31
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
32
32
|
).$inspect();
|
|
33
33
|
|
|
34
34
|
if (!result.ok) {
|
|
@@ -27,7 +27,7 @@ export const tool$uploadPresetsGetUploadPreset: ToolDefinition<typeof args> = {
|
|
|
27
27
|
const [result] = await uploadPresetsGetUploadPreset(
|
|
28
28
|
client,
|
|
29
29
|
args.name,
|
|
30
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
30
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
31
31
|
).$inspect();
|
|
32
32
|
|
|
33
33
|
if (!result.ok) {
|
|
@@ -44,7 +44,7 @@ export const tool$uploadPresetsListUploadPresets: ToolDefinition<typeof args> =
|
|
|
44
44
|
args.direction,
|
|
45
45
|
args.max_results,
|
|
46
46
|
args.next_cursor,
|
|
47
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
47
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
48
48
|
).$inspect();
|
|
49
49
|
|
|
50
50
|
if (!result.ok) {
|
|
@@ -33,7 +33,7 @@ export const tool$uploadPresetsUpdateUploadPreset: ToolDefinition<typeof args> =
|
|
|
33
33
|
client,
|
|
34
34
|
args.name,
|
|
35
35
|
args.upload_preset_input,
|
|
36
|
-
{ fetchOptions: { signal: ctx.signal } },
|
|
36
|
+
{ fetchOptions: { signal: ctx.mcpReq.signal } },
|
|
37
37
|
).$inspect();
|
|
38
38
|
|
|
39
39
|
if (!result.ok) {
|