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,131 @@
1
+ import { z } from "zod";
2
+ import { FabClientError } from "../fab/client.js";
3
+ import { normalizeListing } from "../fab/normalize.js";
4
+ const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
5
+ export const GetAssetInputSchema = z.object({
6
+ listingIdOrUrl: z.string().trim().min(1).max(500),
7
+ currency: z
8
+ .string()
9
+ .trim()
10
+ .regex(/^[A-Za-z]{3}$/)
11
+ .transform((value) => value.toUpperCase())
12
+ .default("USD"),
13
+ });
14
+ const MoneySchema = z.object({
15
+ amount: z.number(),
16
+ currency: z.string().max(10),
17
+ });
18
+ const NamedValueSchema = z.object({
19
+ name: z.string().max(200),
20
+ slug: z.string().max(200).optional(),
21
+ });
22
+ export const AssetOutputSchema = z.object({
23
+ id: z.string().max(100),
24
+ title: z.string().max(500),
25
+ url: z.url(),
26
+ thumbnailUrl: z.url().max(2_048).optional(),
27
+ publisher: z
28
+ .object({
29
+ id: z.string().max(200).optional(),
30
+ name: z.string().max(200),
31
+ })
32
+ .optional(),
33
+ description: z.string().max(12_000).optional(),
34
+ descriptionTruncated: z.boolean(),
35
+ category: NamedValueSchema.optional(),
36
+ breadcrumb: z.array(NamedValueSchema).max(20),
37
+ tags: z.array(NamedValueSchema).max(100),
38
+ media: z.array(z.object({
39
+ type: z.string().max(50),
40
+ url: z.url().max(2_048),
41
+ thumbnailUrl: z.url().max(2_048).optional(),
42
+ })).max(50),
43
+ formats: z.array(z.string().max(200)).max(50),
44
+ files: z
45
+ .array(z.object({
46
+ name: z.string().max(300).optional(),
47
+ url: z.url().max(2_048).optional(),
48
+ sizeBytes: z.number().nonnegative().optional(),
49
+ format: z.string().max(100).optional(),
50
+ }))
51
+ .max(100),
52
+ compatibility: z
53
+ .array(z.object({
54
+ name: z.string().max(200),
55
+ version: z.string().max(100).optional(),
56
+ platform: z.string().max(100).optional(),
57
+ }))
58
+ .max(50),
59
+ licenses: z.array(z.object({
60
+ slug: z.string().max(200),
61
+ name: z.string().max(200),
62
+ offerId: z.string().max(200).optional(),
63
+ basePrice: MoneySchema.optional(),
64
+ effectivePrice: MoneySchema.optional(),
65
+ isFree: z.boolean(),
66
+ })),
67
+ freeLicenseSlugs: z.array(z.string().max(200)).max(30),
68
+ publishedAt: z.string().max(100).optional(),
69
+ updatedAt: z.string().max(100).optional(),
70
+ hasChangelog: z.boolean().optional(),
71
+ isMature: z.boolean().optional(),
72
+ isAiGenerated: z.boolean().optional(),
73
+ allowsAiUse: z.boolean().optional(),
74
+ transport: z.enum(["direct", "browser"]),
75
+ warnings: z.array(z.string().max(500)).max(20),
76
+ rawContractVersion: z.string().max(100),
77
+ });
78
+ export function parseListingId(value) {
79
+ if (UUID_PATTERN.test(value))
80
+ return value.toLowerCase();
81
+ let url;
82
+ try {
83
+ url = new URL(value);
84
+ }
85
+ catch {
86
+ throw new FabClientError("FAB_INVALID_INPUT", "Use a Fab listing UUID or canonical Fab listing URL.");
87
+ }
88
+ if (url.protocol !== "https:" ||
89
+ url.hostname !== "www.fab.com" ||
90
+ url.search.length > 0 ||
91
+ url.hash.length > 0) {
92
+ throw new FabClientError("FAB_INVALID_INPUT", "Only canonical https://www.fab.com/listings/{uuid} URLs are accepted.");
93
+ }
94
+ const match = /^\/listings\/([^/]+)\/?$/.exec(url.pathname);
95
+ if (!match?.[1] || !UUID_PATTERN.test(match[1])) {
96
+ throw new FabClientError("FAB_INVALID_INPUT", "The Fab listing URL does not contain a valid UUID.");
97
+ }
98
+ return match[1].toLowerCase();
99
+ }
100
+ export function createGetAssetHandler(client) {
101
+ return async (rawInput) => {
102
+ try {
103
+ const input = GetAssetInputSchema.parse(rawInput);
104
+ const id = parseListingId(input.listingIdOrUrl);
105
+ const result = await client.getListing(id, input.currency);
106
+ const output = AssetOutputSchema.parse(normalizeListing(result.payload, input.currency, result.transport));
107
+ return {
108
+ content: [{ type: "text", text: JSON.stringify(output) }],
109
+ structuredContent: output,
110
+ };
111
+ }
112
+ catch (error) {
113
+ const safe = error instanceof FabClientError
114
+ ? {
115
+ code: error.code,
116
+ message: error.message,
117
+ retryable: error.retryable,
118
+ }
119
+ : {
120
+ code: "FAB_INTERNAL",
121
+ message: "The Fab provider could not complete the request.",
122
+ retryable: false,
123
+ };
124
+ return {
125
+ isError: true,
126
+ content: [{ type: "text", text: JSON.stringify(safe) }],
127
+ };
128
+ }
129
+ };
130
+ }
131
+ //# sourceMappingURL=get-asset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-asset.js","sourceRoot":"","sources":["../../src/tools/get-asset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ import { z } from "zod";
2
+ import { ItchAssetClient } from "../itch/client.js";
3
+ export declare const PackIdSchema: z.ZodEnum<{
4
+ "brackeys-vfx-bundle": "brackeys-vfx-bundle";
5
+ "kaykit-platformer": "kaykit-platformer";
6
+ "quaternius-universal-animation-library-1": "quaternius-universal-animation-library-1";
7
+ "quaternius-universal-animation-library-2": "quaternius-universal-animation-library-2";
8
+ "tallbeard-music-loop-bundle": "tallbeard-music-loop-bundle";
9
+ }>;
10
+ export declare const ItchListDownloadsInputSchema: z.ZodObject<{
11
+ packId: z.ZodEnum<{
12
+ "brackeys-vfx-bundle": "brackeys-vfx-bundle";
13
+ "kaykit-platformer": "kaykit-platformer";
14
+ "quaternius-universal-animation-library-1": "quaternius-universal-animation-library-1";
15
+ "quaternius-universal-animation-library-2": "quaternius-universal-animation-library-2";
16
+ "tallbeard-music-loop-bundle": "tallbeard-music-loop-bundle";
17
+ }>;
18
+ }, z.core.$strip>;
19
+ export declare const ItchListDownloadsOutputSchema: z.ZodObject<{
20
+ packId: z.ZodEnum<{
21
+ "brackeys-vfx-bundle": "brackeys-vfx-bundle";
22
+ "kaykit-platformer": "kaykit-platformer";
23
+ "quaternius-universal-animation-library-1": "quaternius-universal-animation-library-1";
24
+ "quaternius-universal-animation-library-2": "quaternius-universal-animation-library-2";
25
+ "tallbeard-music-loop-bundle": "tallbeard-music-loop-bundle";
26
+ }>;
27
+ name: z.ZodString;
28
+ sourcePageUrl: z.ZodURL;
29
+ license: z.ZodLiteral<"CC0">;
30
+ attributionRequired: z.ZodLiteral<false>;
31
+ caution: z.ZodOptional<z.ZodString>;
32
+ downloads: z.ZodArray<z.ZodObject<{
33
+ uploadId: z.ZodString;
34
+ name: z.ZodString;
35
+ sizeLabel: z.ZodOptional<z.ZodString>;
36
+ suggestedFileName: z.ZodString;
37
+ }, z.core.$strip>>;
38
+ }, z.core.$strip>;
39
+ export declare function createItchListDownloadsHandler(client: ItchAssetClient): (raw: z.input<typeof ItchListDownloadsInputSchema>) => Promise<{
40
+ content: {
41
+ type: "text";
42
+ text: string;
43
+ }[];
44
+ structuredContent: {
45
+ packId: "brackeys-vfx-bundle" | "kaykit-platformer" | "quaternius-universal-animation-library-1" | "quaternius-universal-animation-library-2" | "tallbeard-music-loop-bundle";
46
+ name: string;
47
+ sourcePageUrl: string;
48
+ license: "CC0";
49
+ attributionRequired: false;
50
+ caution?: string | undefined;
51
+ downloads: {
52
+ uploadId: string;
53
+ name: string;
54
+ sizeLabel?: string | undefined;
55
+ suggestedFileName: string;
56
+ }[];
57
+ };
58
+ } | {
59
+ isError: true;
60
+ content: {
61
+ type: "text";
62
+ text: string;
63
+ }[];
64
+ }>;
65
+ export declare const ItchDownloadInputSchema: z.ZodObject<{
66
+ packId: z.ZodEnum<{
67
+ "brackeys-vfx-bundle": "brackeys-vfx-bundle";
68
+ "kaykit-platformer": "kaykit-platformer";
69
+ "quaternius-universal-animation-library-1": "quaternius-universal-animation-library-1";
70
+ "quaternius-universal-animation-library-2": "quaternius-universal-animation-library-2";
71
+ "tallbeard-music-loop-bundle": "tallbeard-music-loop-bundle";
72
+ }>;
73
+ uploadId: z.ZodString;
74
+ acceptLicense: z.ZodLiteral<true>;
75
+ }, z.core.$strip>;
76
+ export declare const ItchDownloadOutputSchema: z.ZodObject<{
77
+ packId: z.ZodEnum<{
78
+ "brackeys-vfx-bundle": "brackeys-vfx-bundle";
79
+ "kaykit-platformer": "kaykit-platformer";
80
+ "quaternius-universal-animation-library-1": "quaternius-universal-animation-library-1";
81
+ "quaternius-universal-animation-library-2": "quaternius-universal-animation-library-2";
82
+ "tallbeard-music-loop-bundle": "tallbeard-music-loop-bundle";
83
+ }>;
84
+ uploadId: z.ZodString;
85
+ name: z.ZodString;
86
+ fileName: z.ZodString;
87
+ path: z.ZodString;
88
+ sizeBytes: z.ZodNumber;
89
+ sha256: z.ZodString;
90
+ alreadyExisted: z.ZodBoolean;
91
+ sourcePageUrl: z.ZodURL;
92
+ license: z.ZodLiteral<"CC0">;
93
+ attributionRequired: z.ZodLiteral<false>;
94
+ }, z.core.$strip>;
95
+ export declare function createItchDownloadHandler(client: ItchAssetClient): (raw: z.input<typeof ItchDownloadInputSchema>) => Promise<{
96
+ content: {
97
+ type: "text";
98
+ text: string;
99
+ }[];
100
+ structuredContent: {
101
+ packId: "brackeys-vfx-bundle" | "kaykit-platformer" | "quaternius-universal-animation-library-1" | "quaternius-universal-animation-library-2" | "tallbeard-music-loop-bundle";
102
+ uploadId: string;
103
+ name: string;
104
+ fileName: string;
105
+ path: string;
106
+ sizeBytes: number;
107
+ sha256: string;
108
+ alreadyExisted: boolean;
109
+ sourcePageUrl: string;
110
+ license: "CC0";
111
+ attributionRequired: false;
112
+ };
113
+ } | {
114
+ isError: true;
115
+ content: {
116
+ type: "text";
117
+ text: string;
118
+ }[];
119
+ }>;
120
+ //# sourceMappingURL=itch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"itch.d.ts","sourceRoot":"","sources":["../../src/tools/itch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAkB,MAAM,mBAAmB,CAAC;AAEpE,eAAO,MAAM,YAAY;;;;;;EAMvB,CAAC;AAyCH,eAAO,MAAM,4BAA4B;;;;;;;;iBAEvC,CAAC;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;iBAQxC,CAAC;AAEH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,eAAe,SACjD,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC;;cA5C3C,MAAM;;;;;;;;;;;;;;;;;;;;cA0BN,MAAM;;;GAqC3B;AAED,eAAO,MAAM,uBAAuB;;;;;;;;;;iBAMlC,CAAC;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;iBAYnC,CAAC;AAEH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe,SAC5C,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC;;cAvFtC,MAAM;;;;;;;;;;;;;;;;;;;cA0BN,MAAM;;;GAuF3B"}
@@ -0,0 +1,120 @@
1
+ import { z } from "zod";
2
+ import { DirectAssetDownloadError } from "../download/direct-asset-downloader.js";
3
+ import { ItchAssetClient, ItchAssetError } from "../itch/client.js";
4
+ export const PackIdSchema = z.enum([
5
+ "tallbeard-music-loop-bundle",
6
+ "quaternius-universal-animation-library-1",
7
+ "quaternius-universal-animation-library-2",
8
+ "brackeys-vfx-bundle",
9
+ "kaykit-platformer",
10
+ ]);
11
+ const DownloadEntrySchema = z.object({
12
+ uploadId: z.string().regex(/^\d+$/).max(30),
13
+ name: z.string().max(300),
14
+ sizeLabel: z.string().max(50).optional(),
15
+ suggestedFileName: z.string().max(220),
16
+ });
17
+ function success(output) {
18
+ return {
19
+ content: [{ type: "text", text: JSON.stringify(output) }],
20
+ structuredContent: output,
21
+ };
22
+ }
23
+ function errorResult(error) {
24
+ const safe = error instanceof ItchAssetError || error instanceof DirectAssetDownloadError
25
+ ? {
26
+ code: error.code,
27
+ message: error.message,
28
+ retryable: error.retryable,
29
+ }
30
+ : error instanceof z.ZodError
31
+ ? {
32
+ code: "ITCH_INVALID_INPUT",
33
+ message: "The itch.io asset input is invalid.",
34
+ retryable: false,
35
+ }
36
+ : {
37
+ code: "ITCH_INTERNAL",
38
+ message: "The asset MCP could not complete the itch.io request.",
39
+ retryable: false,
40
+ };
41
+ return {
42
+ isError: true,
43
+ content: [{ type: "text", text: JSON.stringify(safe) }],
44
+ };
45
+ }
46
+ export const ItchListDownloadsInputSchema = z.object({
47
+ packId: PackIdSchema,
48
+ });
49
+ export const ItchListDownloadsOutputSchema = z.object({
50
+ packId: PackIdSchema,
51
+ name: z.string().max(300),
52
+ sourcePageUrl: z.url().max(2_048),
53
+ license: z.literal("CC0"),
54
+ attributionRequired: z.literal(false),
55
+ caution: z.string().max(1_000).optional(),
56
+ downloads: z.array(DownloadEntrySchema).max(100),
57
+ });
58
+ export function createItchListDownloadsHandler(client) {
59
+ return async (raw) => {
60
+ try {
61
+ const input = ItchListDownloadsInputSchema.parse(raw);
62
+ const { pack, downloads } = await client.listDownloads(input.packId);
63
+ return success(ItchListDownloadsOutputSchema.parse({
64
+ packId: pack.id,
65
+ name: pack.name,
66
+ sourcePageUrl: pack.pageUrl,
67
+ license: pack.license,
68
+ attributionRequired: pack.attributionRequired,
69
+ ...(pack.caution ? { caution: pack.caution } : {}),
70
+ downloads,
71
+ }));
72
+ }
73
+ catch (error) {
74
+ return errorResult(error);
75
+ }
76
+ };
77
+ }
78
+ export const ItchDownloadInputSchema = z.object({
79
+ packId: PackIdSchema,
80
+ uploadId: z.string().regex(/^\d+$/).max(30),
81
+ acceptLicense: z.literal(true).describe("Required acknowledgement that the caller accepts the CC0 terms and any pack-specific cautions returned by itch_list_downloads."),
82
+ });
83
+ export const ItchDownloadOutputSchema = z.object({
84
+ packId: PackIdSchema,
85
+ uploadId: z.string().regex(/^\d+$/).max(30),
86
+ name: z.string().max(300),
87
+ fileName: z.string().max(220),
88
+ path: z.string().max(4_096),
89
+ sizeBytes: z.number().int().nonnegative(),
90
+ sha256: z.string().regex(/^[0-9a-f]{64}$/),
91
+ alreadyExisted: z.boolean(),
92
+ sourcePageUrl: z.url().max(2_048),
93
+ license: z.literal("CC0"),
94
+ attributionRequired: z.literal(false),
95
+ });
96
+ export function createItchDownloadHandler(client) {
97
+ return async (raw) => {
98
+ try {
99
+ const input = ItchDownloadInputSchema.parse(raw);
100
+ const { pack, upload, result } = await client.download(input.packId, input.uploadId);
101
+ return success(ItchDownloadOutputSchema.parse({
102
+ packId: pack.id,
103
+ uploadId: upload.uploadId,
104
+ name: upload.name,
105
+ fileName: result.fileName,
106
+ path: result.path,
107
+ sizeBytes: result.sizeBytes,
108
+ sha256: result.sha256,
109
+ alreadyExisted: result.alreadyExisted,
110
+ sourcePageUrl: pack.pageUrl,
111
+ license: pack.license,
112
+ attributionRequired: pack.attributionRequired,
113
+ }));
114
+ }
115
+ catch (error) {
116
+ return errorResult(error);
117
+ }
118
+ };
119
+ }
120
+ //# sourceMappingURL=itch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"itch.js","sourceRoot":"","sources":["../../src/tools/itch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ import { z } from "zod";
2
+ export declare const FilterKindSchema: z.ZodEnum<{
3
+ categories: "categories";
4
+ channels: "channels";
5
+ formats: "formats";
6
+ licenses: "licenses";
7
+ listing_types: "listing_types";
8
+ }>;
9
+ export type FilterKind = z.output<typeof FilterKindSchema>;
10
+ export declare const FilterValueSchema: z.ZodObject<{
11
+ label: z.ZodString;
12
+ slug: z.ZodString;
13
+ }, z.core.$strip>;
14
+ export declare const FilterGroupsSchema: z.ZodObject<{
15
+ channels: z.ZodArray<z.ZodObject<{
16
+ label: z.ZodString;
17
+ slug: z.ZodString;
18
+ }, z.core.$strip>>;
19
+ listing_types: z.ZodArray<z.ZodObject<{
20
+ label: z.ZodString;
21
+ slug: z.ZodString;
22
+ }, z.core.$strip>>;
23
+ formats: z.ZodArray<z.ZodObject<{
24
+ label: z.ZodString;
25
+ slug: z.ZodString;
26
+ }, z.core.$strip>>;
27
+ categories: z.ZodArray<z.ZodObject<{
28
+ label: z.ZodString;
29
+ slug: z.ZodString;
30
+ }, z.core.$strip>>;
31
+ licenses: z.ZodArray<z.ZodObject<{
32
+ label: z.ZodString;
33
+ slug: z.ZodString;
34
+ }, z.core.$strip>>;
35
+ }, z.core.$strip>;
36
+ export declare const ListFiltersInputSchema: z.ZodObject<{
37
+ kinds: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodEnum<{
38
+ categories: "categories";
39
+ channels: "channels";
40
+ formats: "formats";
41
+ licenses: "licenses";
42
+ listing_types: "listing_types";
43
+ }>>, z.ZodTransform<("categories" | "channels" | "formats" | "licenses" | "listing_types")[], ("categories" | "channels" | "formats" | "licenses" | "listing_types")[]>>>;
44
+ refresh: z.ZodDefault<z.ZodBoolean>;
45
+ }, z.core.$strip>;
46
+ export declare const ListFiltersOutputSchema: z.ZodObject<{
47
+ filters: z.ZodObject<{
48
+ channels: z.ZodOptional<z.ZodArray<z.ZodObject<{
49
+ label: z.ZodString;
50
+ slug: z.ZodString;
51
+ }, z.core.$strip>>>;
52
+ listing_types: z.ZodOptional<z.ZodArray<z.ZodObject<{
53
+ label: z.ZodString;
54
+ slug: z.ZodString;
55
+ }, z.core.$strip>>>;
56
+ formats: z.ZodOptional<z.ZodArray<z.ZodObject<{
57
+ label: z.ZodString;
58
+ slug: z.ZodString;
59
+ }, z.core.$strip>>>;
60
+ categories: z.ZodOptional<z.ZodArray<z.ZodObject<{
61
+ label: z.ZodString;
62
+ slug: z.ZodString;
63
+ }, z.core.$strip>>>;
64
+ licenses: z.ZodOptional<z.ZodArray<z.ZodObject<{
65
+ label: z.ZodString;
66
+ slug: z.ZodString;
67
+ }, z.core.$strip>>>;
68
+ }, z.core.$strip>;
69
+ source: z.ZodEnum<{
70
+ cache: "cache";
71
+ fallback: "fallback";
72
+ live: "live";
73
+ "stale-cache": "stale-cache";
74
+ }>;
75
+ capturedAt: z.ZodString;
76
+ contractVersion: z.ZodString;
77
+ warnings: z.ZodArray<z.ZodString>;
78
+ }, z.core.$strip>;
79
+ export type FilterGroups = z.output<typeof FilterGroupsSchema>;
80
+ export type ListFiltersInput = z.output<typeof ListFiltersInputSchema>;
81
+ export type ListFiltersOutput = z.output<typeof ListFiltersOutputSchema>;
82
+ export interface FilterDiscoveryClient {
83
+ listFilters(input: ListFiltersInput): Promise<ListFiltersOutput>;
84
+ }
85
+ export declare function createListFiltersHandler(client: FilterDiscoveryClient): (rawInput: z.input<typeof ListFiltersInputSchema>) => Promise<{
86
+ content: {
87
+ type: "text";
88
+ text: string;
89
+ }[];
90
+ structuredContent: {
91
+ filters: {
92
+ channels?: {
93
+ label: string;
94
+ slug: string;
95
+ }[] | undefined;
96
+ listing_types?: {
97
+ label: string;
98
+ slug: string;
99
+ }[] | undefined;
100
+ formats?: {
101
+ label: string;
102
+ slug: string;
103
+ }[] | undefined;
104
+ categories?: {
105
+ label: string;
106
+ slug: string;
107
+ }[] | undefined;
108
+ licenses?: {
109
+ label: string;
110
+ slug: string;
111
+ }[] | undefined;
112
+ };
113
+ source: "cache" | "fallback" | "live" | "stale-cache";
114
+ capturedAt: string;
115
+ contractVersion: string;
116
+ warnings: string[];
117
+ };
118
+ isError?: never;
119
+ } | {
120
+ structuredContent?: never;
121
+ isError: true;
122
+ content: {
123
+ type: "text";
124
+ text: string;
125
+ }[];
126
+ }>;
127
+ //# sourceMappingURL=list-filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-filters.d.ts","sourceRoot":"","sources":["../../src/tools/list-filters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,gBAAgB;;;;;;EAM3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE3D,eAAO,MAAM,iBAAiB;;;iBAG5B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;iBAM7B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;iBAOjC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMlC,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC/D,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAEzE,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAClE;AAgBD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,qBAAqB,cAC5C,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC;;cAOtC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAON,MAAM;;;GAI/B"}
@@ -0,0 +1,68 @@
1
+ import { z } from "zod";
2
+ import { FabClientError } from "../fab/client.js";
3
+ export const FilterKindSchema = z.enum([
4
+ "channels",
5
+ "listing_types",
6
+ "formats",
7
+ "categories",
8
+ "licenses",
9
+ ]);
10
+ export const FilterValueSchema = z.object({
11
+ label: z.string().min(1).max(200),
12
+ slug: z.string().min(1).max(200),
13
+ });
14
+ export const FilterGroupsSchema = z.object({
15
+ channels: z.array(FilterValueSchema),
16
+ listing_types: z.array(FilterValueSchema),
17
+ formats: z.array(FilterValueSchema),
18
+ categories: z.array(FilterValueSchema),
19
+ licenses: z.array(FilterValueSchema),
20
+ });
21
+ export const ListFiltersInputSchema = z.object({
22
+ kinds: z
23
+ .array(FilterKindSchema)
24
+ .max(5)
25
+ .transform((values) => [...new Set(values)])
26
+ .optional(),
27
+ refresh: z.boolean().default(false),
28
+ });
29
+ export const ListFiltersOutputSchema = z.object({
30
+ filters: FilterGroupsSchema.partial(),
31
+ source: z.enum(["live", "cache", "fallback", "stale-cache"]),
32
+ capturedAt: z.string(),
33
+ contractVersion: z.string(),
34
+ warnings: z.array(z.string()),
35
+ });
36
+ function safeToolError(error) {
37
+ return error instanceof FabClientError
38
+ ? {
39
+ code: error.code,
40
+ message: error.message,
41
+ retryable: error.retryable,
42
+ }
43
+ : {
44
+ code: "FAB_INTERNAL",
45
+ message: "The Fab provider could not complete the request.",
46
+ retryable: false,
47
+ };
48
+ }
49
+ export function createListFiltersHandler(client) {
50
+ return async (rawInput) => {
51
+ try {
52
+ const input = ListFiltersInputSchema.parse(rawInput);
53
+ const output = ListFiltersOutputSchema.parse(await client.listFilters(input));
54
+ return {
55
+ content: [{ type: "text", text: JSON.stringify(output) }],
56
+ structuredContent: output,
57
+ };
58
+ }
59
+ catch (error) {
60
+ const safe = safeToolError(error);
61
+ return {
62
+ isError: true,
63
+ content: [{ type: "text", text: JSON.stringify(safe) }],
64
+ };
65
+ }
66
+ };
67
+ }
68
+ //# sourceMappingURL=list-filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-filters.js","sourceRoot":"","sources":["../../src/tools/list-filters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { z } from "zod";
2
+ export declare const ListLimitedTimeFreeInputSchema: z.ZodObject<{
3
+ limit: z.ZodDefault<z.ZodNumber>;
4
+ }, z.core.$strip>;
5
+ export declare const LimitedTimeFreeItemSchema: z.ZodObject<{
6
+ id: z.ZodString;
7
+ title: z.ZodString;
8
+ url: z.ZodURL;
9
+ thumbnailUrl: z.ZodOptional<z.ZodURL>;
10
+ promotionEndsAt: z.ZodOptional<z.ZodString>;
11
+ }, z.core.$strip>;
12
+ export declare const ListLimitedTimeFreeOutputSchema: z.ZodObject<{
13
+ items: z.ZodArray<z.ZodObject<{
14
+ id: z.ZodString;
15
+ title: z.ZodString;
16
+ url: z.ZodURL;
17
+ thumbnailUrl: z.ZodOptional<z.ZodURL>;
18
+ promotionEndsAt: z.ZodOptional<z.ZodString>;
19
+ }, z.core.$strip>>;
20
+ source: z.ZodEnum<{
21
+ "browser-curated": "browser-curated";
22
+ "configured-curated": "configured-curated";
23
+ "live-curated": "live-curated";
24
+ }>;
25
+ warnings: z.ZodArray<z.ZodString>;
26
+ }, z.core.$strip>;
27
+ export type ListLimitedTimeFreeInput = z.output<typeof ListLimitedTimeFreeInputSchema>;
28
+ export type ListLimitedTimeFreeOutput = z.output<typeof ListLimitedTimeFreeOutputSchema>;
29
+ export interface LimitedTimeFreeClient {
30
+ listLimitedTimeFree(input: ListLimitedTimeFreeInput): Promise<ListLimitedTimeFreeOutput>;
31
+ }
32
+ export declare function createListLimitedTimeFreeHandler(client: LimitedTimeFreeClient): (rawInput: z.input<typeof ListLimitedTimeFreeInputSchema>) => Promise<{
33
+ content: {
34
+ type: "text";
35
+ text: string;
36
+ }[];
37
+ structuredContent: {
38
+ items: {
39
+ id: string;
40
+ title: string;
41
+ url: string;
42
+ thumbnailUrl?: string | undefined;
43
+ promotionEndsAt?: string | undefined;
44
+ }[];
45
+ source: "browser-curated" | "configured-curated" | "live-curated";
46
+ warnings: string[];
47
+ };
48
+ isError?: never;
49
+ } | {
50
+ structuredContent?: never;
51
+ isError: true;
52
+ content: {
53
+ type: "text";
54
+ text: string;
55
+ }[];
56
+ }>;
57
+ //# sourceMappingURL=list-limited-time-free.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-limited-time-free.d.ts","sourceRoot":"","sources":["../../src/tools/list-limited-time-free.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,8BAA8B;;iBAEzC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;iBAMpC,CAAC;AAEH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;iBAI1C,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAC7C,OAAO,8BAA8B,CACtC,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAC9C,OAAO,+BAA+B,CACvC,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,mBAAmB,CACjB,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACvC;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,qBAAqB,cAEL,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC;;cAO9C,MAAM;;;;;;;;;;;;;;;;;;;cAkBN,MAAM;;;GAI/B"}