threenative-asset-mcp 0.4.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.
Files changed (150) hide show
  1. package/README.md +441 -0
  2. package/dist/ambientcg/client.d.ts +61 -0
  3. package/dist/ambientcg/client.d.ts.map +1 -0
  4. package/dist/ambientcg/client.js +234 -0
  5. package/dist/ambientcg/client.js.map +1 -0
  6. package/dist/audio/catalog.d.ts +36 -0
  7. package/dist/audio/catalog.d.ts.map +1 -0
  8. package/dist/audio/catalog.js +169 -0
  9. package/dist/audio/catalog.js.map +1 -0
  10. package/dist/audio/client.d.ts +46 -0
  11. package/dist/audio/client.d.ts.map +1 -0
  12. package/dist/audio/client.js +196 -0
  13. package/dist/audio/client.js.map +1 -0
  14. package/dist/bundle/client.d.ts +89 -0
  15. package/dist/bundle/client.d.ts.map +1 -0
  16. package/dist/bundle/client.js +324 -0
  17. package/dist/bundle/client.js.map +1 -0
  18. package/dist/config.d.ts +20 -0
  19. package/dist/config.d.ts.map +1 -0
  20. package/dist/config.js +130 -0
  21. package/dist/config.js.map +1 -0
  22. package/dist/download/direct-asset-downloader.d.ts +41 -0
  23. package/dist/download/direct-asset-downloader.d.ts.map +1 -0
  24. package/dist/download/direct-asset-downloader.js +232 -0
  25. package/dist/download/direct-asset-downloader.js.map +1 -0
  26. package/dist/fab/api-download.d.ts +30 -0
  27. package/dist/fab/api-download.d.ts.map +1 -0
  28. package/dist/fab/api-download.js +200 -0
  29. package/dist/fab/api-download.js.map +1 -0
  30. package/dist/fab/browser-transport.d.ts +79 -0
  31. package/dist/fab/browser-transport.d.ts.map +1 -0
  32. package/dist/fab/browser-transport.js +492 -0
  33. package/dist/fab/browser-transport.js.map +1 -0
  34. package/dist/fab/cache.d.ts +22 -0
  35. package/dist/fab/cache.d.ts.map +1 -0
  36. package/dist/fab/cache.js +55 -0
  37. package/dist/fab/cache.js.map +1 -0
  38. package/dist/fab/client.d.ts +61 -0
  39. package/dist/fab/client.d.ts.map +1 -0
  40. package/dist/fab/client.js +868 -0
  41. package/dist/fab/client.js.map +1 -0
  42. package/dist/fab/direct-transport.d.ts +68 -0
  43. package/dist/fab/direct-transport.d.ts.map +1 -0
  44. package/dist/fab/direct-transport.js +184 -0
  45. package/dist/fab/direct-transport.js.map +1 -0
  46. package/dist/fab/download-store.d.ts +21 -0
  47. package/dist/fab/download-store.d.ts.map +1 -0
  48. package/dist/fab/download-store.js +93 -0
  49. package/dist/fab/download-store.js.map +1 -0
  50. package/dist/fab/errors.d.ts +20 -0
  51. package/dist/fab/errors.d.ts.map +1 -0
  52. package/dist/fab/errors.js +65 -0
  53. package/dist/fab/errors.js.map +1 -0
  54. package/dist/fab/impersonate-fetch.d.ts +48 -0
  55. package/dist/fab/impersonate-fetch.d.ts.map +1 -0
  56. package/dist/fab/impersonate-fetch.js +228 -0
  57. package/dist/fab/impersonate-fetch.js.map +1 -0
  58. package/dist/fab/normalize.d.ts +3 -0
  59. package/dist/fab/normalize.d.ts.map +1 -0
  60. package/dist/fab/normalize.js +285 -0
  61. package/dist/fab/normalize.js.map +1 -0
  62. package/dist/fab/schemas.d.ts +10 -0
  63. package/dist/fab/schemas.d.ts.map +1 -0
  64. package/dist/fab/schemas.js +105 -0
  65. package/dist/fab/schemas.js.map +1 -0
  66. package/dist/index.d.ts +3 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +58 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/itch/catalog.d.ts +13 -0
  71. package/dist/itch/catalog.d.ts.map +1 -0
  72. package/dist/itch/catalog.js +50 -0
  73. package/dist/itch/catalog.js.map +1 -0
  74. package/dist/itch/client.d.ts +46 -0
  75. package/dist/itch/client.d.ts.map +1 -0
  76. package/dist/itch/client.js +175 -0
  77. package/dist/itch/client.js.map +1 -0
  78. package/dist/polyhaven/client.d.ts +55 -0
  79. package/dist/polyhaven/client.d.ts.map +1 -0
  80. package/dist/polyhaven/client.js +210 -0
  81. package/dist/polyhaven/client.js.map +1 -0
  82. package/dist/server.d.ts +25 -0
  83. package/dist/server.d.ts.map +1 -0
  84. package/dist/server.js +448 -0
  85. package/dist/server.js.map +1 -0
  86. package/dist/sketchfab/client.d.ts +70 -0
  87. package/dist/sketchfab/client.d.ts.map +1 -0
  88. package/dist/sketchfab/client.js +255 -0
  89. package/dist/sketchfab/client.js.map +1 -0
  90. package/dist/smithsonian/client.d.ts +32 -0
  91. package/dist/smithsonian/client.d.ts.map +1 -0
  92. package/dist/smithsonian/client.js +142 -0
  93. package/dist/smithsonian/client.js.map +1 -0
  94. package/dist/tools/ambientcg.d.ts +296 -0
  95. package/dist/tools/ambientcg.d.ts.map +1 -0
  96. package/dist/tools/ambientcg.js +183 -0
  97. package/dist/tools/ambientcg.js.map +1 -0
  98. package/dist/tools/audio.d.ts +211 -0
  99. package/dist/tools/audio.d.ts.map +1 -0
  100. package/dist/tools/audio.js +156 -0
  101. package/dist/tools/audio.js.map +1 -0
  102. package/dist/tools/bundle.d.ts +237 -0
  103. package/dist/tools/bundle.d.ts.map +1 -0
  104. package/dist/tools/bundle.js +206 -0
  105. package/dist/tools/bundle.js.map +1 -0
  106. package/dist/tools/direct-download.d.ts +53 -0
  107. package/dist/tools/direct-download.d.ts.map +1 -0
  108. package/dist/tools/direct-download.js +68 -0
  109. package/dist/tools/direct-download.js.map +1 -0
  110. package/dist/tools/download-free-asset.d.ts +66 -0
  111. package/dist/tools/download-free-asset.d.ts.map +1 -0
  112. package/dist/tools/download-free-asset.js +60 -0
  113. package/dist/tools/download-free-asset.js.map +1 -0
  114. package/dist/tools/get-asset.d.ts +161 -0
  115. package/dist/tools/get-asset.d.ts.map +1 -0
  116. package/dist/tools/get-asset.js +131 -0
  117. package/dist/tools/get-asset.js.map +1 -0
  118. package/dist/tools/itch.d.ts +120 -0
  119. package/dist/tools/itch.d.ts.map +1 -0
  120. package/dist/tools/itch.js +120 -0
  121. package/dist/tools/itch.js.map +1 -0
  122. package/dist/tools/list-filters.d.ts +127 -0
  123. package/dist/tools/list-filters.d.ts.map +1 -0
  124. package/dist/tools/list-filters.js +68 -0
  125. package/dist/tools/list-filters.js.map +1 -0
  126. package/dist/tools/list-limited-time-free.d.ts +57 -0
  127. package/dist/tools/list-limited-time-free.d.ts.map +1 -0
  128. package/dist/tools/list-limited-time-free.js +47 -0
  129. package/dist/tools/list-limited-time-free.js.map +1 -0
  130. package/dist/tools/polyhaven.d.ts +266 -0
  131. package/dist/tools/polyhaven.d.ts.map +1 -0
  132. package/dist/tools/polyhaven.js +233 -0
  133. package/dist/tools/polyhaven.js.map +1 -0
  134. package/dist/tools/search-assets.d.ts +176 -0
  135. package/dist/tools/search-assets.d.ts.map +1 -0
  136. package/dist/tools/search-assets.js +172 -0
  137. package/dist/tools/search-assets.js.map +1 -0
  138. package/dist/tools/sketchfab.d.ts +325 -0
  139. package/dist/tools/sketchfab.d.ts.map +1 -0
  140. package/dist/tools/sketchfab.js +203 -0
  141. package/dist/tools/sketchfab.js.map +1 -0
  142. package/dist/tools/smithsonian.d.ts +189 -0
  143. package/dist/tools/smithsonian.d.ts.map +1 -0
  144. package/dist/tools/smithsonian.js +189 -0
  145. package/dist/tools/smithsonian.js.map +1 -0
  146. package/dist/tools/source-directory.d.ts +226 -0
  147. package/dist/tools/source-directory.d.ts.map +1 -0
  148. package/dist/tools/source-directory.js +583 -0
  149. package/dist/tools/source-directory.js.map +1 -0
  150. package/package.json +69 -0
@@ -0,0 +1,206 @@
1
+ import { z } from "zod";
2
+ import { BundleAssetClient, BundleAssetError } from "../bundle/client.js";
3
+ import { ItchAssetError } from "../itch/client.js";
4
+ import { PackIdSchema } from "./itch.js";
5
+ const UploadIdSchema = z.string().regex(/^\d+$/).max(30);
6
+ const EntryPathSchema = z.string().min(1).max(2_048);
7
+ function success(output) {
8
+ return {
9
+ content: [{ type: "text", text: JSON.stringify(output) }],
10
+ structuredContent: output,
11
+ };
12
+ }
13
+ function errorResult(error) {
14
+ const safe = error instanceof BundleAssetError || error instanceof ItchAssetError
15
+ ? {
16
+ code: error.code,
17
+ message: error.message,
18
+ retryable: error.retryable,
19
+ }
20
+ : error instanceof z.ZodError
21
+ ? {
22
+ code: "BUNDLE_INVALID_INPUT",
23
+ message: "The selective bundle request is invalid.",
24
+ retryable: false,
25
+ }
26
+ : {
27
+ code: "BUNDLE_INTERNAL",
28
+ message: "The asset MCP could not complete the selective bundle request.",
29
+ retryable: false,
30
+ };
31
+ return {
32
+ isError: true,
33
+ content: [{ type: "text", text: JSON.stringify(safe) }],
34
+ };
35
+ }
36
+ const LicenseOutputSchema = z.object({
37
+ license: z.literal("CC0"),
38
+ attributionRequired: z.literal(false),
39
+ });
40
+ export const BundleListEntriesInputSchema = z.object({
41
+ packId: PackIdSchema,
42
+ uploadId: UploadIdSchema,
43
+ });
44
+ export const BundleListEntriesOutputSchema = z
45
+ .object({
46
+ packId: PackIdSchema,
47
+ uploadId: UploadIdSchema,
48
+ name: z.string().max(300),
49
+ sourcePageUrl: z.url().max(2_048),
50
+ rangeBytesTransferred: z.number().int().nonnegative(),
51
+ entries: z
52
+ .array(z.object({
53
+ path: EntryPathSchema,
54
+ compressedBytes: z.number().int().nonnegative(),
55
+ uncompressedBytes: z.number().int().nonnegative(),
56
+ directory: z.boolean(),
57
+ }))
58
+ .max(20_000),
59
+ })
60
+ .extend(LicenseOutputSchema.shape);
61
+ export function createBundleListEntriesHandler(client) {
62
+ return async (raw) => {
63
+ try {
64
+ const input = BundleListEntriesInputSchema.parse(raw);
65
+ const result = await client.listEntries(input.packId, input.uploadId);
66
+ return success(BundleListEntriesOutputSchema.parse({
67
+ packId: result.pack.id,
68
+ uploadId: result.upload.uploadId,
69
+ name: result.upload.name,
70
+ sourcePageUrl: result.pack.pageUrl,
71
+ license: result.pack.license,
72
+ attributionRequired: result.pack.attributionRequired,
73
+ rangeBytesTransferred: result.rangeBytesTransferred,
74
+ entries: result.entries,
75
+ }));
76
+ }
77
+ catch (error) {
78
+ return errorResult(error);
79
+ }
80
+ };
81
+ }
82
+ export const BundleDownloadEntryInputSchema = z.object({
83
+ packId: PackIdSchema,
84
+ uploadId: UploadIdSchema,
85
+ entryPath: EntryPathSchema,
86
+ acceptLicense: z.literal(true).describe("Required acknowledgement of the pack license returned by itch_list_downloads or asset_list_bundle_entries."),
87
+ });
88
+ export const BundleDownloadEntryOutputSchema = z
89
+ .object({
90
+ packId: PackIdSchema,
91
+ uploadId: UploadIdSchema,
92
+ entryPath: EntryPathSchema,
93
+ path: z.string().max(4_096),
94
+ sizeBytes: z.number().int().nonnegative(),
95
+ sha256: z.string().regex(/^[0-9a-f]{64}$/),
96
+ alreadyCached: z.boolean(),
97
+ rangeBytesTransferred: z.number().int().nonnegative(),
98
+ })
99
+ .extend(LicenseOutputSchema.shape);
100
+ export function createBundleDownloadEntryHandler(client) {
101
+ return async (raw) => {
102
+ try {
103
+ const input = BundleDownloadEntryInputSchema.parse(raw);
104
+ const result = await client.downloadEntry(input);
105
+ return success(BundleDownloadEntryOutputSchema.parse({
106
+ packId: input.packId,
107
+ uploadId: input.uploadId,
108
+ license: "CC0",
109
+ attributionRequired: false,
110
+ ...result,
111
+ }));
112
+ }
113
+ catch (error) {
114
+ return errorResult(error);
115
+ }
116
+ };
117
+ }
118
+ export const BundleListAnimationsInputSchema = z.object({
119
+ packId: PackIdSchema,
120
+ uploadId: UploadIdSchema,
121
+ entryPath: EntryPathSchema.optional().describe("Optional aggregate GLB path. Omit to select the standard non-root-motion GLB automatically."),
122
+ });
123
+ export const BundleListAnimationsOutputSchema = z
124
+ .object({
125
+ packId: PackIdSchema,
126
+ uploadId: UploadIdSchema,
127
+ entryPath: EntryPathSchema,
128
+ aggregateEntryBytes: z.number().int().nonnegative(),
129
+ alreadyCached: z.boolean(),
130
+ rangeBytesTransferred: z.number().int().nonnegative(),
131
+ animations: z.array(z.object({
132
+ index: z.number().int().nonnegative(),
133
+ name: z.string().max(300),
134
+ channels: z.number().int().nonnegative(),
135
+ samplers: z.number().int().nonnegative(),
136
+ })),
137
+ })
138
+ .extend(LicenseOutputSchema.shape);
139
+ export function createBundleListAnimationsHandler(client) {
140
+ return async (raw) => {
141
+ try {
142
+ const input = BundleListAnimationsInputSchema.parse(raw);
143
+ const result = await client.listAnimations({
144
+ packId: input.packId,
145
+ uploadId: input.uploadId,
146
+ ...(input.entryPath ? { entryPath: input.entryPath } : {}),
147
+ });
148
+ return success(BundleListAnimationsOutputSchema.parse({
149
+ packId: input.packId,
150
+ uploadId: input.uploadId,
151
+ license: "CC0",
152
+ attributionRequired: false,
153
+ ...result,
154
+ }));
155
+ }
156
+ catch (error) {
157
+ return errorResult(error);
158
+ }
159
+ };
160
+ }
161
+ export const BundleDownloadAnimationInputSchema = z.object({
162
+ packId: PackIdSchema,
163
+ uploadId: UploadIdSchema,
164
+ entryPath: EntryPathSchema.optional(),
165
+ animationName: z.string().min(1).max(300),
166
+ acceptLicense: z.literal(true),
167
+ });
168
+ export const BundleDownloadAnimationOutputSchema = z
169
+ .object({
170
+ packId: PackIdSchema,
171
+ uploadId: UploadIdSchema,
172
+ entryPath: EntryPathSchema,
173
+ animationName: z.string().max(300),
174
+ path: z.string().max(4_096),
175
+ sizeBytes: z.number().int().nonnegative(),
176
+ aggregateEntryBytes: z.number().int().nonnegative(),
177
+ sha256: z.string().regex(/^[0-9a-f]{64}$/),
178
+ alreadyExisted: z.boolean(),
179
+ aggregateAlreadyCached: z.boolean(),
180
+ rangeBytesTransferred: z.number().int().nonnegative(),
181
+ })
182
+ .extend(LicenseOutputSchema.shape);
183
+ export function createBundleDownloadAnimationHandler(client) {
184
+ return async (raw) => {
185
+ try {
186
+ const input = BundleDownloadAnimationInputSchema.parse(raw);
187
+ const result = await client.downloadAnimation({
188
+ packId: input.packId,
189
+ uploadId: input.uploadId,
190
+ animationName: input.animationName,
191
+ ...(input.entryPath ? { entryPath: input.entryPath } : {}),
192
+ });
193
+ return success(BundleDownloadAnimationOutputSchema.parse({
194
+ packId: input.packId,
195
+ uploadId: input.uploadId,
196
+ license: "CC0",
197
+ attributionRequired: false,
198
+ ...result,
199
+ }));
200
+ }
201
+ catch (error) {
202
+ return errorResult(error);
203
+ }
204
+ };
205
+ }
206
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/tools/bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { z } from "zod";
2
+ import { DirectAssetDownloader } from "../download/direct-asset-downloader.js";
3
+ export declare const DirectAssetDownloadInputSchema: z.ZodObject<{
4
+ provider: z.ZodEnum<{
5
+ ambientcg: "ambientcg";
6
+ "game-icons": "game-icons";
7
+ kenney: "kenney";
8
+ polyhaven: "polyhaven";
9
+ smithsonian: "smithsonian";
10
+ }>;
11
+ url: z.ZodURL;
12
+ fileName: z.ZodString;
13
+ acceptLicense: z.ZodLiteral<true>;
14
+ }, z.core.$strip>;
15
+ export declare const DirectAssetDownloadOutputSchema: z.ZodObject<{
16
+ provider: z.ZodEnum<{
17
+ ambientcg: "ambientcg";
18
+ "game-icons": "game-icons";
19
+ kenney: "kenney";
20
+ polyhaven: "polyhaven";
21
+ smithsonian: "smithsonian";
22
+ }>;
23
+ fileName: z.ZodString;
24
+ path: z.ZodString;
25
+ sizeBytes: z.ZodNumber;
26
+ sha256: z.ZodString;
27
+ alreadyExisted: z.ZodBoolean;
28
+ sourceUrl: z.ZodURL;
29
+ licenseAcknowledged: z.ZodLiteral<true>;
30
+ }, z.core.$strip>;
31
+ export declare function createDirectAssetDownloadHandler(downloader: DirectAssetDownloader): (rawInput: z.input<typeof DirectAssetDownloadInputSchema>) => Promise<{
32
+ isError: true;
33
+ content: {
34
+ type: "text";
35
+ text: string;
36
+ }[];
37
+ } | {
38
+ content: {
39
+ type: "text";
40
+ text: string;
41
+ }[];
42
+ structuredContent: {
43
+ provider: "ambientcg" | "game-icons" | "kenney" | "polyhaven" | "smithsonian";
44
+ fileName: string;
45
+ path: string;
46
+ sizeBytes: number;
47
+ sha256: string;
48
+ alreadyExisted: boolean;
49
+ sourceUrl: string;
50
+ licenseAcknowledged: true;
51
+ };
52
+ }>;
53
+ //# sourceMappingURL=direct-download.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-download.d.ts","sourceRoot":"","sources":["../../src/tools/direct-download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,qBAAqB,EAEtB,MAAM,wCAAwC,CAAC;AAUhD,eAAO,MAAM,8BAA8B;;;;;;;;;;;iBAOzC,CAAC;AAEH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;iBAS1C,CAAC;AA2BH,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,qBAAqB,cAET,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC;;;cAPlD,MAAM;;;;;cAkBF,MAAM;;;;;;;;;;;;;GAO/B"}
@@ -0,0 +1,68 @@
1
+ import { z } from "zod";
2
+ import { DirectAssetDownloader, DirectAssetDownloadError, } from "../download/direct-asset-downloader.js";
3
+ const ProviderSchema = z.enum([
4
+ "polyhaven",
5
+ "ambientcg",
6
+ "smithsonian",
7
+ "game-icons",
8
+ "kenney",
9
+ ]);
10
+ export const DirectAssetDownloadInputSchema = z.object({
11
+ provider: ProviderSchema,
12
+ url: z.url().max(4_096),
13
+ fileName: z.string().trim().min(1).max(220),
14
+ acceptLicense: z.literal(true).describe("Required acknowledgement that the caller reviewed and accepts the license metadata returned by the provider's search/detail/file tools."),
15
+ });
16
+ export const DirectAssetDownloadOutputSchema = z.object({
17
+ provider: ProviderSchema,
18
+ fileName: z.string().max(220),
19
+ path: z.string().max(4_096),
20
+ sizeBytes: z.number().int().nonnegative(),
21
+ sha256: z.string().regex(/^[0-9a-f]{64}$/),
22
+ alreadyExisted: z.boolean(),
23
+ sourceUrl: z.url().max(4_096),
24
+ licenseAcknowledged: z.literal(true),
25
+ });
26
+ function errorResult(error) {
27
+ const safe = error instanceof DirectAssetDownloadError
28
+ ? {
29
+ code: error.code,
30
+ message: error.message,
31
+ retryable: error.retryable,
32
+ }
33
+ : error instanceof z.ZodError
34
+ ? {
35
+ code: "ASSET_DOWNLOAD_INVALID_INPUT",
36
+ message: "The direct asset download input is invalid.",
37
+ retryable: false,
38
+ }
39
+ : {
40
+ code: "ASSET_DOWNLOAD_INTERNAL",
41
+ message: "The asset MCP could not complete the direct download.",
42
+ retryable: false,
43
+ };
44
+ return {
45
+ isError: true,
46
+ content: [{ type: "text", text: JSON.stringify(safe) }],
47
+ };
48
+ }
49
+ export function createDirectAssetDownloadHandler(downloader) {
50
+ return async (rawInput) => {
51
+ try {
52
+ const input = DirectAssetDownloadInputSchema.parse(rawInput);
53
+ const output = DirectAssetDownloadOutputSchema.parse(await downloader.download({
54
+ provider: input.provider,
55
+ url: input.url,
56
+ fileName: input.fileName,
57
+ }));
58
+ return {
59
+ content: [{ type: "text", text: JSON.stringify(output) }],
60
+ structuredContent: output,
61
+ };
62
+ }
63
+ catch (error) {
64
+ return errorResult(error);
65
+ }
66
+ };
67
+ }
68
+ //# sourceMappingURL=direct-download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-download.js","sourceRoot":"","sources":["../../src/tools/direct-download.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { z } from "zod";
2
+ import { type FabDownloadFormat, type FabDownloadResult } from "../fab/direct-transport.js";
3
+ export declare const DownloadFreeAssetInputSchema: z.ZodObject<{
4
+ listingIdOrUrl: z.ZodString;
5
+ format: z.ZodEnum<{
6
+ blender: "blender";
7
+ fbx: "fbx";
8
+ glb: "glb";
9
+ gltf: "gltf";
10
+ maya: "maya";
11
+ obj: "obj";
12
+ unity: "unity";
13
+ }>;
14
+ acceptFabEula: z.ZodLiteral<true>;
15
+ }, z.core.$strip>;
16
+ export declare const DownloadFreeAssetOutputSchema: z.ZodObject<{
17
+ listingId: z.ZodString;
18
+ format: z.ZodEnum<{
19
+ blender: "blender";
20
+ fbx: "fbx";
21
+ glb: "glb";
22
+ gltf: "gltf";
23
+ maya: "maya";
24
+ obj: "obj";
25
+ unity: "unity";
26
+ }>;
27
+ fileName: z.ZodString;
28
+ path: z.ZodString;
29
+ sizeBytes: z.ZodNumber;
30
+ sha256: z.ZodString;
31
+ alreadyExisted: z.ZodBoolean;
32
+ authentication: z.ZodLiteral<"not-required">;
33
+ }, z.core.$strip>;
34
+ export type DownloadFreeAssetInput = z.output<typeof DownloadFreeAssetInputSchema>;
35
+ export type DownloadFreeAssetOutput = z.output<typeof DownloadFreeAssetOutputSchema>;
36
+ export interface FreeAssetDownloadClient {
37
+ downloadFreeAsset(request: {
38
+ listingId: string;
39
+ format: FabDownloadFormat;
40
+ }): Promise<FabDownloadResult>;
41
+ }
42
+ export declare function createDownloadFreeAssetHandler(client: FreeAssetDownloadClient): (rawInput: z.input<typeof DownloadFreeAssetInputSchema>) => Promise<{
43
+ isError?: never;
44
+ content: {
45
+ type: "text";
46
+ text: string;
47
+ }[];
48
+ structuredContent: {
49
+ listingId: string;
50
+ format: "blender" | "fbx" | "glb" | "gltf" | "maya" | "obj" | "unity";
51
+ fileName: string;
52
+ path: string;
53
+ sizeBytes: number;
54
+ sha256: string;
55
+ alreadyExisted: boolean;
56
+ authentication: "not-required";
57
+ };
58
+ } | {
59
+ structuredContent?: never;
60
+ isError: true;
61
+ content: {
62
+ type: "text";
63
+ text: string;
64
+ }[];
65
+ }>;
66
+ //# sourceMappingURL=download-free-asset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download-free-asset.d.ts","sourceRoot":"","sources":["../../src/tools/download-free-asset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AAGpC,eAAO,MAAM,4BAA4B;;;;;;;;;;;;iBAcvC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;iBASxC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAC3C,OAAO,4BAA4B,CACpC,CAAC;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAC5C,OAAO,6BAA6B,CACrC,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,CAAC,OAAO,EAAE;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,iBAAiB,CAAC;KAC3B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAChC;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,uBAAuB,cAGnB,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC;;;cAYhC,MAAM;;;;;;;;;;;;;;;;;cAkBN,MAAM;;;GAI/B"}
@@ -0,0 +1,60 @@
1
+ import { z } from "zod";
2
+ import { FabClientError, } from "../fab/direct-transport.js";
3
+ import { parseListingId } from "./get-asset.js";
4
+ export const DownloadFreeAssetInputSchema = z.object({
5
+ listingIdOrUrl: z.string().trim().min(1).max(500),
6
+ format: z.enum([
7
+ "blender",
8
+ "fbx",
9
+ "glb",
10
+ "gltf",
11
+ "maya",
12
+ "obj",
13
+ "unity",
14
+ ]),
15
+ acceptFabEula: z.literal(true).describe("Required acknowledgement that the user accepts the Fab EULA linked by the listing."),
16
+ });
17
+ export const DownloadFreeAssetOutputSchema = z.object({
18
+ listingId: z.string().max(100),
19
+ format: DownloadFreeAssetInputSchema.shape.format,
20
+ fileName: z.string().max(180),
21
+ path: z.string().max(4_096),
22
+ sizeBytes: z.number().int().nonnegative(),
23
+ sha256: z.string().regex(/^[0-9a-f]{64}$/),
24
+ alreadyExisted: z.boolean(),
25
+ authentication: z.literal("not-required"),
26
+ });
27
+ export function createDownloadFreeAssetHandler(client) {
28
+ return async (rawInput) => {
29
+ try {
30
+ const input = DownloadFreeAssetInputSchema.parse(rawInput);
31
+ const listingId = parseListingId(input.listingIdOrUrl);
32
+ const output = DownloadFreeAssetOutputSchema.parse(await client.downloadFreeAsset({
33
+ listingId,
34
+ format: input.format,
35
+ }));
36
+ return {
37
+ content: [{ type: "text", text: JSON.stringify(output) }],
38
+ structuredContent: output,
39
+ };
40
+ }
41
+ catch (error) {
42
+ const safe = error instanceof FabClientError
43
+ ? {
44
+ code: error.code,
45
+ message: error.message,
46
+ retryable: error.retryable,
47
+ }
48
+ : {
49
+ code: "FAB_INTERNAL",
50
+ message: "The Fab provider could not complete the download.",
51
+ retryable: false,
52
+ };
53
+ return {
54
+ isError: true,
55
+ content: [{ type: "text", text: JSON.stringify(safe) }],
56
+ };
57
+ }
58
+ };
59
+ }
60
+ //# sourceMappingURL=download-free-asset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download-free-asset.js","sourceRoot":"","sources":["../../src/tools/download-free-asset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,cAAc,GAGf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACjD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;QACb,SAAS;QACT,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,KAAK;QACL,OAAO;KACR,CAAC;IACF,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CACrC,oFAAoF,CACrF;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;IAC9B,MAAM,EAAE,4BAA4B,CAAC,KAAK,CAAC,MAAM;IACjD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACzC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC;IAC1C,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE;IAC3B,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;CAC1C,CAAC,CAAC;AAgBH,MAAM,UAAU,8BAA8B,CAC5C,MAA+B;IAE/B,OAAO,KAAK,EACV,QAAsD,EACtD,EAAE;QACF,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,4BAA4B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,6BAA6B,CAAC,KAAK,CAChD,MAAM,MAAM,CAAC,iBAAiB,CAAC;gBAC7B,SAAS;gBACT,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CACH,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClE,iBAAiB,EAAE,MAAM;aAC1B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,GACR,KAAK,YAAY,cAAc;gBAC7B,CAAC,CAAC;oBACE,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B;gBACH,CAAC,CAAC;oBACE,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,mDAAmD;oBAC5D,SAAS,EAAE,KAAK;iBACjB,CAAC;YACR,OAAO;gBACL,OAAO,EAAE,IAAa;gBACtB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;aACjE,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,161 @@
1
+ import { z } from "zod";
2
+ export declare const GetAssetInputSchema: z.ZodObject<{
3
+ listingIdOrUrl: z.ZodString;
4
+ currency: z.ZodDefault<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
5
+ }, z.core.$strip>;
6
+ export declare const AssetOutputSchema: z.ZodObject<{
7
+ id: z.ZodString;
8
+ title: z.ZodString;
9
+ url: z.ZodURL;
10
+ thumbnailUrl: z.ZodOptional<z.ZodURL>;
11
+ publisher: z.ZodOptional<z.ZodObject<{
12
+ id: z.ZodOptional<z.ZodString>;
13
+ name: z.ZodString;
14
+ }, z.core.$strip>>;
15
+ description: z.ZodOptional<z.ZodString>;
16
+ descriptionTruncated: z.ZodBoolean;
17
+ category: z.ZodOptional<z.ZodObject<{
18
+ name: z.ZodString;
19
+ slug: z.ZodOptional<z.ZodString>;
20
+ }, z.core.$strip>>;
21
+ breadcrumb: z.ZodArray<z.ZodObject<{
22
+ name: z.ZodString;
23
+ slug: z.ZodOptional<z.ZodString>;
24
+ }, z.core.$strip>>;
25
+ tags: z.ZodArray<z.ZodObject<{
26
+ name: z.ZodString;
27
+ slug: z.ZodOptional<z.ZodString>;
28
+ }, z.core.$strip>>;
29
+ media: z.ZodArray<z.ZodObject<{
30
+ type: z.ZodString;
31
+ url: z.ZodURL;
32
+ thumbnailUrl: z.ZodOptional<z.ZodURL>;
33
+ }, z.core.$strip>>;
34
+ formats: z.ZodArray<z.ZodString>;
35
+ files: z.ZodArray<z.ZodObject<{
36
+ name: z.ZodOptional<z.ZodString>;
37
+ url: z.ZodOptional<z.ZodURL>;
38
+ sizeBytes: z.ZodOptional<z.ZodNumber>;
39
+ format: z.ZodOptional<z.ZodString>;
40
+ }, z.core.$strip>>;
41
+ compatibility: z.ZodArray<z.ZodObject<{
42
+ name: z.ZodString;
43
+ version: z.ZodOptional<z.ZodString>;
44
+ platform: z.ZodOptional<z.ZodString>;
45
+ }, z.core.$strip>>;
46
+ licenses: z.ZodArray<z.ZodObject<{
47
+ slug: z.ZodString;
48
+ name: z.ZodString;
49
+ offerId: z.ZodOptional<z.ZodString>;
50
+ basePrice: z.ZodOptional<z.ZodObject<{
51
+ amount: z.ZodNumber;
52
+ currency: z.ZodString;
53
+ }, z.core.$strip>>;
54
+ effectivePrice: z.ZodOptional<z.ZodObject<{
55
+ amount: z.ZodNumber;
56
+ currency: z.ZodString;
57
+ }, z.core.$strip>>;
58
+ isFree: z.ZodBoolean;
59
+ }, z.core.$strip>>;
60
+ freeLicenseSlugs: z.ZodArray<z.ZodString>;
61
+ publishedAt: z.ZodOptional<z.ZodString>;
62
+ updatedAt: z.ZodOptional<z.ZodString>;
63
+ hasChangelog: z.ZodOptional<z.ZodBoolean>;
64
+ isMature: z.ZodOptional<z.ZodBoolean>;
65
+ isAiGenerated: z.ZodOptional<z.ZodBoolean>;
66
+ allowsAiUse: z.ZodOptional<z.ZodBoolean>;
67
+ transport: z.ZodEnum<{
68
+ browser: "browser";
69
+ direct: "direct";
70
+ }>;
71
+ warnings: z.ZodArray<z.ZodString>;
72
+ rawContractVersion: z.ZodString;
73
+ }, z.core.$strip>;
74
+ export type AssetOutput = z.output<typeof AssetOutputSchema>;
75
+ export interface AssetLookupClient {
76
+ getListing(id: string, currency: string): Promise<{
77
+ payload: unknown;
78
+ transport: "direct" | "browser";
79
+ }>;
80
+ }
81
+ export declare function parseListingId(value: string): string;
82
+ export declare function createGetAssetHandler(client: AssetLookupClient): (rawInput: z.input<typeof GetAssetInputSchema>) => Promise<{
83
+ content: {
84
+ type: "text";
85
+ text: string;
86
+ }[];
87
+ structuredContent: {
88
+ id: string;
89
+ title: string;
90
+ url: string;
91
+ thumbnailUrl?: string | undefined;
92
+ publisher?: {
93
+ id?: string | undefined;
94
+ name: string;
95
+ } | undefined;
96
+ description?: string | undefined;
97
+ descriptionTruncated: boolean;
98
+ category?: {
99
+ name: string;
100
+ slug?: string | undefined;
101
+ } | undefined;
102
+ breadcrumb: {
103
+ name: string;
104
+ slug?: string | undefined;
105
+ }[];
106
+ tags: {
107
+ name: string;
108
+ slug?: string | undefined;
109
+ }[];
110
+ media: {
111
+ type: string;
112
+ url: string;
113
+ thumbnailUrl?: string | undefined;
114
+ }[];
115
+ formats: string[];
116
+ files: {
117
+ name?: string | undefined;
118
+ url?: string | undefined;
119
+ sizeBytes?: number | undefined;
120
+ format?: string | undefined;
121
+ }[];
122
+ compatibility: {
123
+ name: string;
124
+ version?: string | undefined;
125
+ platform?: string | undefined;
126
+ }[];
127
+ licenses: {
128
+ slug: string;
129
+ name: string;
130
+ offerId?: string | undefined;
131
+ basePrice?: {
132
+ amount: number;
133
+ currency: string;
134
+ } | undefined;
135
+ effectivePrice?: {
136
+ amount: number;
137
+ currency: string;
138
+ } | undefined;
139
+ isFree: boolean;
140
+ }[];
141
+ freeLicenseSlugs: string[];
142
+ publishedAt?: string | undefined;
143
+ updatedAt?: string | undefined;
144
+ hasChangelog?: boolean | undefined;
145
+ isMature?: boolean | undefined;
146
+ isAiGenerated?: boolean | undefined;
147
+ allowsAiUse?: boolean | undefined;
148
+ transport: "browser" | "direct";
149
+ warnings: string[];
150
+ rawContractVersion: string;
151
+ };
152
+ isError?: never;
153
+ } | {
154
+ structuredContent?: never;
155
+ isError: true;
156
+ content: {
157
+ type: "text";
158
+ text: string;
159
+ }[];
160
+ }>;
161
+ //# sourceMappingURL=get-asset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-asset.d.ts","sourceRoot":"","sources":["../../src/tools/get-asset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,mBAAmB;;;iBAQ9B,CAAC;AAYH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+D5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,UAAU,CACR,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;CACnE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA8BpD;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,cACrC,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC;;cASnC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAkBN,MAAM;;;GAI/B"}