@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.
Files changed (125) hide show
  1. package/README.md +3 -2
  2. package/bin/mcp-server.js +45560 -43862
  3. package/bin/mcp-server.js.map +73 -255
  4. package/esm/landing-page.d.ts +2 -1
  5. package/esm/landing-page.d.ts.map +1 -1
  6. package/esm/landing-page.js +51 -28
  7. package/esm/landing-page.js.map +1 -1
  8. package/esm/lib/config.d.ts +3 -3
  9. package/esm/lib/config.js +3 -3
  10. package/esm/mcp-server/cli/serve/impl.js +51 -25
  11. package/esm/mcp-server/cli/serve/impl.js.map +1 -1
  12. package/esm/mcp-server/cli/start/impl.js +11 -8
  13. package/esm/mcp-server/cli/start/impl.js.map +1 -1
  14. package/esm/mcp-server/extensions.d.ts +3 -3
  15. package/esm/mcp-server/extensions.d.ts.map +1 -1
  16. package/esm/mcp-server/mcp-server.js +1 -1
  17. package/esm/mcp-server/prompts.d.ts +7 -8
  18. package/esm/mcp-server/prompts.d.ts.map +1 -1
  19. package/esm/mcp-server/prompts.js +12 -12
  20. package/esm/mcp-server/prompts.js.map +1 -1
  21. package/esm/mcp-server/resources.d.ts +6 -7
  22. package/esm/mcp-server/resources.d.ts.map +1 -1
  23. package/esm/mcp-server/resources.js +19 -3
  24. package/esm/mcp-server/resources.js.map +1 -1
  25. package/esm/mcp-server/server-info.d.ts +4 -0
  26. package/esm/mcp-server/server-info.d.ts.map +1 -0
  27. package/esm/mcp-server/server-info.js +24 -0
  28. package/esm/mcp-server/server-info.js.map +1 -0
  29. package/esm/mcp-server/server.d.ts +1 -1
  30. package/esm/mcp-server/server.d.ts.map +1 -1
  31. package/esm/mcp-server/server.js +5 -3
  32. package/esm/mcp-server/server.js.map +1 -1
  33. package/esm/mcp-server/shared.d.ts +7 -0
  34. package/esm/mcp-server/shared.d.ts.map +1 -1
  35. package/esm/mcp-server/shared.js +184 -0
  36. package/esm/mcp-server/shared.js.map +1 -1
  37. package/esm/mcp-server/tools/streamingProfilesCreateStreamingProfile.js +1 -1
  38. package/esm/mcp-server/tools/streamingProfilesCreateStreamingProfile.js.map +1 -1
  39. package/esm/mcp-server/tools/streamingProfilesDeleteStreamingProfile.js +1 -1
  40. package/esm/mcp-server/tools/streamingProfilesDeleteStreamingProfile.js.map +1 -1
  41. package/esm/mcp-server/tools/streamingProfilesGetStreamingProfile.js +1 -1
  42. package/esm/mcp-server/tools/streamingProfilesGetStreamingProfile.js.map +1 -1
  43. package/esm/mcp-server/tools/streamingProfilesGetStreamingProfiles.js +1 -1
  44. package/esm/mcp-server/tools/streamingProfilesGetStreamingProfiles.js.map +1 -1
  45. package/esm/mcp-server/tools/streamingProfilesUpdateStreamingProfile.js +1 -1
  46. package/esm/mcp-server/tools/streamingProfilesUpdateStreamingProfile.js.map +1 -1
  47. package/esm/mcp-server/tools/transformationsCreateTransformation.js +1 -1
  48. package/esm/mcp-server/tools/transformationsCreateTransformation.js.map +1 -1
  49. package/esm/mcp-server/tools/transformationsDeleteTransformation.js +1 -1
  50. package/esm/mcp-server/tools/transformationsDeleteTransformation.js.map +1 -1
  51. package/esm/mcp-server/tools/transformationsGetTransformation.js +1 -1
  52. package/esm/mcp-server/tools/transformationsGetTransformation.js.map +1 -1
  53. package/esm/mcp-server/tools/transformationsListTransformations.js +1 -1
  54. package/esm/mcp-server/tools/transformationsListTransformations.js.map +1 -1
  55. package/esm/mcp-server/tools/transformationsUpdateTransformation.js +1 -1
  56. package/esm/mcp-server/tools/transformationsUpdateTransformation.js.map +1 -1
  57. package/esm/mcp-server/tools/triggersCreateTrigger.js +1 -1
  58. package/esm/mcp-server/tools/triggersCreateTrigger.js.map +1 -1
  59. package/esm/mcp-server/tools/triggersDeleteTrigger.js +1 -1
  60. package/esm/mcp-server/tools/triggersDeleteTrigger.js.map +1 -1
  61. package/esm/mcp-server/tools/triggersListTrigger.js +1 -1
  62. package/esm/mcp-server/tools/triggersListTrigger.js.map +1 -1
  63. package/esm/mcp-server/tools/triggersTestTrigger.js +1 -1
  64. package/esm/mcp-server/tools/triggersTestTrigger.js.map +1 -1
  65. package/esm/mcp-server/tools/triggersUpdateTrigger.js +1 -1
  66. package/esm/mcp-server/tools/triggersUpdateTrigger.js.map +1 -1
  67. package/esm/mcp-server/tools/uploadMappingsCreateUploadMapping.js +1 -1
  68. package/esm/mcp-server/tools/uploadMappingsCreateUploadMapping.js.map +1 -1
  69. package/esm/mcp-server/tools/uploadMappingsDeleteUploadMapping.js +1 -1
  70. package/esm/mcp-server/tools/uploadMappingsDeleteUploadMapping.js.map +1 -1
  71. package/esm/mcp-server/tools/uploadMappingsListUploadMappings.js +1 -1
  72. package/esm/mcp-server/tools/uploadMappingsListUploadMappings.js.map +1 -1
  73. package/esm/mcp-server/tools/uploadMappingsUpdateUploadMapping.js +1 -1
  74. package/esm/mcp-server/tools/uploadMappingsUpdateUploadMapping.js.map +1 -1
  75. package/esm/mcp-server/tools/uploadPresetsCreateUploadPreset.js +1 -1
  76. package/esm/mcp-server/tools/uploadPresetsCreateUploadPreset.js.map +1 -1
  77. package/esm/mcp-server/tools/uploadPresetsDeleteUploadPreset.js +1 -1
  78. package/esm/mcp-server/tools/uploadPresetsDeleteUploadPreset.js.map +1 -1
  79. package/esm/mcp-server/tools/uploadPresetsGetUploadPreset.js +1 -1
  80. package/esm/mcp-server/tools/uploadPresetsGetUploadPreset.js.map +1 -1
  81. package/esm/mcp-server/tools/uploadPresetsListUploadPresets.js +1 -1
  82. package/esm/mcp-server/tools/uploadPresetsListUploadPresets.js.map +1 -1
  83. package/esm/mcp-server/tools/uploadPresetsUpdateUploadPreset.js +1 -1
  84. package/esm/mcp-server/tools/uploadPresetsUpdateUploadPreset.js.map +1 -1
  85. package/esm/mcp-server/tools.d.ts +11 -9
  86. package/esm/mcp-server/tools.d.ts.map +1 -1
  87. package/esm/mcp-server/tools.js +20 -19
  88. package/esm/mcp-server/tools.js.map +1 -1
  89. package/package.json +16 -6
  90. package/src/landing-page.ts +81 -28
  91. package/src/lib/config.ts +3 -3
  92. package/src/mcp-server/cli/serve/impl.ts +55 -25
  93. package/src/mcp-server/cli/start/impl.ts +16 -9
  94. package/src/mcp-server/extensions.ts +3 -5
  95. package/src/mcp-server/mcp-server.ts +1 -1
  96. package/src/mcp-server/prompts.ts +30 -43
  97. package/src/mcp-server/resources.ts +32 -17
  98. package/src/mcp-server/server-info.ts +31 -0
  99. package/src/mcp-server/server.ts +5 -3
  100. package/src/mcp-server/shared.ts +201 -0
  101. package/src/mcp-server/tools/streamingProfilesCreateStreamingProfile.ts +1 -1
  102. package/src/mcp-server/tools/streamingProfilesDeleteStreamingProfile.ts +1 -1
  103. package/src/mcp-server/tools/streamingProfilesGetStreamingProfile.ts +1 -1
  104. package/src/mcp-server/tools/streamingProfilesGetStreamingProfiles.ts +1 -1
  105. package/src/mcp-server/tools/streamingProfilesUpdateStreamingProfile.ts +1 -1
  106. package/src/mcp-server/tools/transformationsCreateTransformation.ts +1 -1
  107. package/src/mcp-server/tools/transformationsDeleteTransformation.ts +1 -1
  108. package/src/mcp-server/tools/transformationsGetTransformation.ts +1 -1
  109. package/src/mcp-server/tools/transformationsListTransformations.ts +1 -1
  110. package/src/mcp-server/tools/transformationsUpdateTransformation.ts +1 -1
  111. package/src/mcp-server/tools/triggersCreateTrigger.ts +1 -1
  112. package/src/mcp-server/tools/triggersDeleteTrigger.ts +1 -1
  113. package/src/mcp-server/tools/triggersListTrigger.ts +1 -1
  114. package/src/mcp-server/tools/triggersTestTrigger.ts +1 -1
  115. package/src/mcp-server/tools/triggersUpdateTrigger.ts +1 -1
  116. package/src/mcp-server/tools/uploadMappingsCreateUploadMapping.ts +1 -1
  117. package/src/mcp-server/tools/uploadMappingsDeleteUploadMapping.ts +1 -1
  118. package/src/mcp-server/tools/uploadMappingsListUploadMappings.ts +1 -1
  119. package/src/mcp-server/tools/uploadMappingsUpdateUploadMapping.ts +1 -1
  120. package/src/mcp-server/tools/uploadPresetsCreateUploadPreset.ts +1 -1
  121. package/src/mcp-server/tools/uploadPresetsDeleteUploadPreset.ts +1 -1
  122. package/src/mcp-server/tools/uploadPresetsGetUploadPreset.ts +1 -1
  123. package/src/mcp-server/tools/uploadPresetsListUploadPresets.ts +1 -1
  124. package/src/mcp-server/tools/uploadPresetsUpdateUploadPreset.ts +1 -1
  125. 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
- } from "@modelcontextprotocol/sdk/server/mcp.js";
11
- import { RequestHandlerExtra } from "@modelcontextprotocol/sdk/shared/protocol.js";
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: RequestHandlerExtra<ServerRequest, ServerNotification>,
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: RequestHandlerExtra<ServerRequest, ServerNotification>,
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.resource(
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.resource(
129
+ server.registerResource(
134
130
  resource.name,
135
- resource.resource,
131
+ normalizeResourceTemplate(resource.resource),
136
132
  metadata,
137
- async (uri, vars, ctx) => resource.read(getSDK(), 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.`;
@@ -3,7 +3,7 @@
3
3
  * @generated-id: 2784dd48e82a
4
4
  */
5
5
 
6
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
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.1",
63
- });
63
+ version: "0.6.3",
64
+ ...serverInfo,
65
+ }, { instructions });
64
66
 
65
67
  const getClient = deps.getSDK || (() =>
66
68
  new CloudinaryEnvConfigCore({
@@ -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) {
@@ -39,7 +39,7 @@ Updates a named or unnamed transformation.
39
39
  client,
40
40
  args.transformation,
41
41
  args.update_request,
42
- { fetchOptions: { signal: ctx.signal } },
42
+ { fetchOptions: { signal: ctx.mcpReq.signal } },
43
43
  ).$inspect();
44
44
 
45
45
  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) {
@@ -29,7 +29,7 @@ Deletes a trigger.`,
29
29
  const [result] = await triggersDeleteTrigger(
30
30
  client,
31
31
  args.id,
32
- { fetchOptions: { signal: ctx.signal } },
32
+ { fetchOptions: { signal: ctx.mcpReq.signal } },
33
33
  ).$inspect();
34
34
 
35
35
  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) {
@@ -35,7 +35,7 @@ Updates a notification URL for a trigger.`,
35
35
  client,
36
36
  args.id,
37
37
  args.update_trigger_request,
38
- { fetchOptions: { signal: ctx.signal } },
38
+ { fetchOptions: { signal: ctx.mcpReq.signal } },
39
39
  ).$inspect();
40
40
 
41
41
  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) {