@tday-com/mcp 0.0.0-stage → 0.2.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 (41) hide show
  1. package/LICENSE +36 -0
  2. package/README.md +105 -2
  3. package/dist/api-client.d.ts +23 -0
  4. package/dist/api-client.js +187 -0
  5. package/dist/cli.d.ts +2 -0
  6. package/dist/cli.js +78 -0
  7. package/dist/config.d.ts +7 -0
  8. package/dist/config.js +66 -0
  9. package/dist/demo-import.d.ts +6 -0
  10. package/dist/demo-import.js +101 -0
  11. package/dist/download-safety.d.ts +7 -0
  12. package/dist/download-safety.js +76 -0
  13. package/dist/installer-agents.d.ts +17 -0
  14. package/dist/installer-agents.js +283 -0
  15. package/dist/installer-callback.d.ts +13 -0
  16. package/dist/installer-callback.js +91 -0
  17. package/dist/installer-slash-command.d.ts +12 -0
  18. package/dist/installer-slash-command.js +262 -0
  19. package/dist/installer.d.ts +2 -0
  20. package/dist/installer.js +127 -0
  21. package/dist/observability.d.ts +1 -0
  22. package/dist/observability.js +77 -0
  23. package/dist/package-info.d.ts +11 -0
  24. package/dist/package-info.js +17 -0
  25. package/dist/result-format.d.ts +4 -0
  26. package/dist/result-format.js +154 -0
  27. package/dist/server.d.ts +1 -0
  28. package/dist/server.js +37 -0
  29. package/dist/tool-schemas.d.ts +460 -0
  30. package/dist/tool-schemas.js +189 -0
  31. package/dist/tools-account.d.ts +6 -0
  32. package/dist/tools-account.js +34 -0
  33. package/dist/tools-demo.d.ts +11 -0
  34. package/dist/tools-demo.js +57 -0
  35. package/dist/tools-knowledge.d.ts +4 -0
  36. package/dist/tools-knowledge.js +111 -0
  37. package/dist/tools-launch.d.ts +4 -0
  38. package/dist/tools-launch.js +365 -0
  39. package/dist/tools.d.ts +15 -0
  40. package/dist/tools.js +296 -0
  41. package/package.json +58 -4
@@ -0,0 +1 @@
1
+ export declare function runServer(): Promise<void>;
package/dist/server.js ADDED
@@ -0,0 +1,37 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { loadConfig } from "./config.js";
4
+ import { listedTools, formatToolResultText, responseFormatFromArgs, toStructuredContent, } from "./tools.js";
5
+ export async function runServer() {
6
+ const config = await loadConfig();
7
+ const server = new McpServer({ name: "tday-mcp-server", version: "0.0.1" });
8
+ const registerTool = server.registerTool.bind(server);
9
+ for (const tool of await listedTools(config)) {
10
+ registerTool(tool.name, {
11
+ title: tool.title,
12
+ description: tool.description,
13
+ inputSchema: tool.inputSchema,
14
+ outputSchema: tool.outputSchema,
15
+ annotations: {
16
+ readOnlyHint: tool.annotations.readOnlyHint,
17
+ destructiveHint: tool.annotations.destructiveHint,
18
+ idempotentHint: tool.annotations.idempotentHint,
19
+ openWorldHint: tool.annotations.openWorldHint,
20
+ },
21
+ }, async (args) => {
22
+ const rawArgs = args ?? {};
23
+ const result = await tool.handler(rawArgs, config);
24
+ return {
25
+ content: [
26
+ {
27
+ type: "text",
28
+ text: formatToolResultText(tool.name, result, responseFormatFromArgs(rawArgs)),
29
+ },
30
+ ],
31
+ structuredContent: toStructuredContent(result),
32
+ };
33
+ });
34
+ }
35
+ const transport = new StdioServerTransport();
36
+ await server.connect(transport);
37
+ }
@@ -0,0 +1,460 @@
1
+ import { z } from "zod";
2
+ import type { TdayConfig } from "./config.js";
3
+ export type ResponseFormat = "json" | "markdown";
4
+ export type ToolAnnotations = {
5
+ title?: string;
6
+ readOnlyHint?: boolean;
7
+ destructiveHint?: boolean;
8
+ idempotentHint?: boolean;
9
+ openWorldHint?: boolean;
10
+ };
11
+ export interface Tool {
12
+ name: string;
13
+ title: string;
14
+ description: string;
15
+ inputSchema: z.AnyZodObject;
16
+ outputSchema: z.AnyZodObject;
17
+ annotations: ToolAnnotations;
18
+ handler: (args: Record<string, unknown>, config: TdayConfig) => Promise<unknown>;
19
+ }
20
+ export declare const SAFE_ID: RegExp;
21
+ export declare const safeIdSchema: z.ZodString;
22
+ export declare function argsObject<T extends z.ZodRawShape>(shape: T): z.ZodObject<T & {
23
+ response_format: z.ZodDefault<z.ZodEnum<["json", "markdown"]>>;
24
+ }, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<T & {
25
+ response_format: z.ZodDefault<z.ZodEnum<["json", "markdown"]>>;
26
+ }>, any> extends infer T_1 ? { [k in keyof T_1]: T_1[k]; } : never, z.baseObjectInputType<T & {
27
+ response_format: z.ZodDefault<z.ZodEnum<["json", "markdown"]>>;
28
+ }> extends infer T_2 ? { [k_1 in keyof T_2]: T_2[k_1]; } : never>;
29
+ export declare const emptyArgsSchema: z.ZodObject<{
30
+ response_format: z.ZodDefault<z.ZodEnum<["json", "markdown"]>>;
31
+ }, "strict", z.ZodTypeAny, {
32
+ response_format: "json" | "markdown";
33
+ }, {
34
+ response_format?: "json" | "markdown" | undefined;
35
+ }>;
36
+ export declare const listArgsSchema: z.ZodObject<{
37
+ limit: z.ZodDefault<z.ZodNumber>;
38
+ offset: z.ZodDefault<z.ZodNumber>;
39
+ } & {
40
+ response_format: z.ZodDefault<z.ZodEnum<["json", "markdown"]>>;
41
+ }, "strict", z.ZodTypeAny, {
42
+ response_format: "json" | "markdown";
43
+ limit: number;
44
+ offset: number;
45
+ }, {
46
+ response_format?: "json" | "markdown" | undefined;
47
+ limit?: number | undefined;
48
+ offset?: number | undefined;
49
+ }>;
50
+ export declare function safePath(template: string, params: Record<string, unknown>): string;
51
+ export declare function stripPresentationArgs(args: Record<string, unknown>): Record<string, unknown>;
52
+ export declare function responseFormatFromArgs(args: Record<string, unknown>): ResponseFormat;
53
+ export declare const outputSchemas: {
54
+ whoami: z.ZodObject<{
55
+ account: z.ZodOptional<z.ZodUnknown>;
56
+ staffExempt: z.ZodOptional<z.ZodBoolean>;
57
+ organizations: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
58
+ defaultOrganizationId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
59
+ features: z.ZodOptional<z.ZodUnknown>;
60
+ links: z.ZodOptional<z.ZodUnknown>;
61
+ notes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
62
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
63
+ account: z.ZodOptional<z.ZodUnknown>;
64
+ staffExempt: z.ZodOptional<z.ZodBoolean>;
65
+ organizations: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
66
+ defaultOrganizationId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
67
+ features: z.ZodOptional<z.ZodUnknown>;
68
+ links: z.ZodOptional<z.ZodUnknown>;
69
+ notes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
70
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
71
+ account: z.ZodOptional<z.ZodUnknown>;
72
+ staffExempt: z.ZodOptional<z.ZodBoolean>;
73
+ organizations: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
74
+ defaultOrganizationId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
75
+ features: z.ZodOptional<z.ZodUnknown>;
76
+ links: z.ZodOptional<z.ZodUnknown>;
77
+ notes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
78
+ }, z.ZodTypeAny, "passthrough">>;
79
+ creditPrices: z.ZodObject<{
80
+ priceVersion: z.ZodOptional<z.ZodNumber>;
81
+ actions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
82
+ launchVideos: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
83
+ launchVideoRevisions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
84
+ monthlyCredits: z.ZodOptional<z.ZodUnknown>;
85
+ notes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
86
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
87
+ priceVersion: z.ZodOptional<z.ZodNumber>;
88
+ actions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
89
+ launchVideos: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
90
+ launchVideoRevisions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
91
+ monthlyCredits: z.ZodOptional<z.ZodUnknown>;
92
+ notes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
93
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
94
+ priceVersion: z.ZodOptional<z.ZodNumber>;
95
+ actions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
96
+ launchVideos: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
97
+ launchVideoRevisions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
98
+ monthlyCredits: z.ZodOptional<z.ZodUnknown>;
99
+ notes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
100
+ }, z.ZodTypeAny, "passthrough">>;
101
+ usage: z.ZodObject<{
102
+ organization: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
103
+ balance: z.ZodOptional<z.ZodUnknown>;
104
+ usage: z.ZodOptional<z.ZodUnknown>;
105
+ links: z.ZodOptional<z.ZodUnknown>;
106
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
107
+ organization: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
108
+ balance: z.ZodOptional<z.ZodUnknown>;
109
+ usage: z.ZodOptional<z.ZodUnknown>;
110
+ links: z.ZodOptional<z.ZodUnknown>;
111
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
112
+ organization: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
113
+ balance: z.ZodOptional<z.ZodUnknown>;
114
+ usage: z.ZodOptional<z.ZodUnknown>;
115
+ links: z.ZodOptional<z.ZodUnknown>;
116
+ }, z.ZodTypeAny, "passthrough">>;
117
+ listBrands: z.ZodObject<{
118
+ brands: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
119
+ pagination: z.ZodOptional<z.ZodObject<{
120
+ total_count: z.ZodOptional<z.ZodNumber>;
121
+ total: z.ZodOptional<z.ZodNumber>;
122
+ count: z.ZodNumber;
123
+ offset: z.ZodNumber;
124
+ limit: z.ZodNumber;
125
+ has_more: z.ZodOptional<z.ZodBoolean>;
126
+ hasMore: z.ZodOptional<z.ZodBoolean>;
127
+ next_offset: z.ZodOptional<z.ZodNumber>;
128
+ nextOffset: z.ZodOptional<z.ZodNumber>;
129
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
130
+ total_count: z.ZodOptional<z.ZodNumber>;
131
+ total: z.ZodOptional<z.ZodNumber>;
132
+ count: z.ZodNumber;
133
+ offset: z.ZodNumber;
134
+ limit: z.ZodNumber;
135
+ has_more: z.ZodOptional<z.ZodBoolean>;
136
+ hasMore: z.ZodOptional<z.ZodBoolean>;
137
+ next_offset: z.ZodOptional<z.ZodNumber>;
138
+ nextOffset: z.ZodOptional<z.ZodNumber>;
139
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
140
+ total_count: z.ZodOptional<z.ZodNumber>;
141
+ total: z.ZodOptional<z.ZodNumber>;
142
+ count: z.ZodNumber;
143
+ offset: z.ZodNumber;
144
+ limit: z.ZodNumber;
145
+ has_more: z.ZodOptional<z.ZodBoolean>;
146
+ hasMore: z.ZodOptional<z.ZodBoolean>;
147
+ next_offset: z.ZodOptional<z.ZodNumber>;
148
+ nextOffset: z.ZodOptional<z.ZodNumber>;
149
+ }, z.ZodTypeAny, "passthrough">>>;
150
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
151
+ brands: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
152
+ pagination: z.ZodOptional<z.ZodObject<{
153
+ total_count: z.ZodOptional<z.ZodNumber>;
154
+ total: z.ZodOptional<z.ZodNumber>;
155
+ count: z.ZodNumber;
156
+ offset: z.ZodNumber;
157
+ limit: z.ZodNumber;
158
+ has_more: z.ZodOptional<z.ZodBoolean>;
159
+ hasMore: z.ZodOptional<z.ZodBoolean>;
160
+ next_offset: z.ZodOptional<z.ZodNumber>;
161
+ nextOffset: z.ZodOptional<z.ZodNumber>;
162
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
163
+ total_count: z.ZodOptional<z.ZodNumber>;
164
+ total: z.ZodOptional<z.ZodNumber>;
165
+ count: z.ZodNumber;
166
+ offset: z.ZodNumber;
167
+ limit: z.ZodNumber;
168
+ has_more: z.ZodOptional<z.ZodBoolean>;
169
+ hasMore: z.ZodOptional<z.ZodBoolean>;
170
+ next_offset: z.ZodOptional<z.ZodNumber>;
171
+ nextOffset: z.ZodOptional<z.ZodNumber>;
172
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
173
+ total_count: z.ZodOptional<z.ZodNumber>;
174
+ total: z.ZodOptional<z.ZodNumber>;
175
+ count: z.ZodNumber;
176
+ offset: z.ZodNumber;
177
+ limit: z.ZodNumber;
178
+ has_more: z.ZodOptional<z.ZodBoolean>;
179
+ hasMore: z.ZodOptional<z.ZodBoolean>;
180
+ next_offset: z.ZodOptional<z.ZodNumber>;
181
+ nextOffset: z.ZodOptional<z.ZodNumber>;
182
+ }, z.ZodTypeAny, "passthrough">>>;
183
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
184
+ brands: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
185
+ pagination: z.ZodOptional<z.ZodObject<{
186
+ total_count: z.ZodOptional<z.ZodNumber>;
187
+ total: z.ZodOptional<z.ZodNumber>;
188
+ count: z.ZodNumber;
189
+ offset: z.ZodNumber;
190
+ limit: z.ZodNumber;
191
+ has_more: z.ZodOptional<z.ZodBoolean>;
192
+ hasMore: z.ZodOptional<z.ZodBoolean>;
193
+ next_offset: z.ZodOptional<z.ZodNumber>;
194
+ nextOffset: z.ZodOptional<z.ZodNumber>;
195
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
196
+ total_count: z.ZodOptional<z.ZodNumber>;
197
+ total: z.ZodOptional<z.ZodNumber>;
198
+ count: z.ZodNumber;
199
+ offset: z.ZodNumber;
200
+ limit: z.ZodNumber;
201
+ has_more: z.ZodOptional<z.ZodBoolean>;
202
+ hasMore: z.ZodOptional<z.ZodBoolean>;
203
+ next_offset: z.ZodOptional<z.ZodNumber>;
204
+ nextOffset: z.ZodOptional<z.ZodNumber>;
205
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
206
+ total_count: z.ZodOptional<z.ZodNumber>;
207
+ total: z.ZodOptional<z.ZodNumber>;
208
+ count: z.ZodNumber;
209
+ offset: z.ZodNumber;
210
+ limit: z.ZodNumber;
211
+ has_more: z.ZodOptional<z.ZodBoolean>;
212
+ hasMore: z.ZodOptional<z.ZodBoolean>;
213
+ next_offset: z.ZodOptional<z.ZodNumber>;
214
+ nextOffset: z.ZodOptional<z.ZodNumber>;
215
+ }, z.ZodTypeAny, "passthrough">>>;
216
+ }, z.ZodTypeAny, "passthrough">>;
217
+ getBrand: z.ZodObject<{
218
+ brand: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
219
+ role: z.ZodOptional<z.ZodString>;
220
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
221
+ brand: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
222
+ role: z.ZodOptional<z.ZodString>;
223
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
224
+ brand: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
225
+ role: z.ZodOptional<z.ZodString>;
226
+ }, z.ZodTypeAny, "passthrough">>;
227
+ listDesigns: z.ZodObject<{
228
+ designs: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
229
+ archivedCount: z.ZodOptional<z.ZodNumber>;
230
+ pagination: z.ZodOptional<z.ZodObject<{
231
+ total_count: z.ZodOptional<z.ZodNumber>;
232
+ total: z.ZodOptional<z.ZodNumber>;
233
+ count: z.ZodNumber;
234
+ offset: z.ZodNumber;
235
+ limit: z.ZodNumber;
236
+ has_more: z.ZodOptional<z.ZodBoolean>;
237
+ hasMore: z.ZodOptional<z.ZodBoolean>;
238
+ next_offset: z.ZodOptional<z.ZodNumber>;
239
+ nextOffset: z.ZodOptional<z.ZodNumber>;
240
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
241
+ total_count: z.ZodOptional<z.ZodNumber>;
242
+ total: z.ZodOptional<z.ZodNumber>;
243
+ count: z.ZodNumber;
244
+ offset: z.ZodNumber;
245
+ limit: z.ZodNumber;
246
+ has_more: z.ZodOptional<z.ZodBoolean>;
247
+ hasMore: z.ZodOptional<z.ZodBoolean>;
248
+ next_offset: z.ZodOptional<z.ZodNumber>;
249
+ nextOffset: z.ZodOptional<z.ZodNumber>;
250
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
251
+ total_count: z.ZodOptional<z.ZodNumber>;
252
+ total: z.ZodOptional<z.ZodNumber>;
253
+ count: z.ZodNumber;
254
+ offset: z.ZodNumber;
255
+ limit: z.ZodNumber;
256
+ has_more: z.ZodOptional<z.ZodBoolean>;
257
+ hasMore: z.ZodOptional<z.ZodBoolean>;
258
+ next_offset: z.ZodOptional<z.ZodNumber>;
259
+ nextOffset: z.ZodOptional<z.ZodNumber>;
260
+ }, z.ZodTypeAny, "passthrough">>>;
261
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
262
+ designs: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
263
+ archivedCount: z.ZodOptional<z.ZodNumber>;
264
+ pagination: z.ZodOptional<z.ZodObject<{
265
+ total_count: z.ZodOptional<z.ZodNumber>;
266
+ total: z.ZodOptional<z.ZodNumber>;
267
+ count: z.ZodNumber;
268
+ offset: z.ZodNumber;
269
+ limit: z.ZodNumber;
270
+ has_more: z.ZodOptional<z.ZodBoolean>;
271
+ hasMore: z.ZodOptional<z.ZodBoolean>;
272
+ next_offset: z.ZodOptional<z.ZodNumber>;
273
+ nextOffset: z.ZodOptional<z.ZodNumber>;
274
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
275
+ total_count: z.ZodOptional<z.ZodNumber>;
276
+ total: z.ZodOptional<z.ZodNumber>;
277
+ count: z.ZodNumber;
278
+ offset: z.ZodNumber;
279
+ limit: z.ZodNumber;
280
+ has_more: z.ZodOptional<z.ZodBoolean>;
281
+ hasMore: z.ZodOptional<z.ZodBoolean>;
282
+ next_offset: z.ZodOptional<z.ZodNumber>;
283
+ nextOffset: z.ZodOptional<z.ZodNumber>;
284
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
285
+ total_count: z.ZodOptional<z.ZodNumber>;
286
+ total: z.ZodOptional<z.ZodNumber>;
287
+ count: z.ZodNumber;
288
+ offset: z.ZodNumber;
289
+ limit: z.ZodNumber;
290
+ has_more: z.ZodOptional<z.ZodBoolean>;
291
+ hasMore: z.ZodOptional<z.ZodBoolean>;
292
+ next_offset: z.ZodOptional<z.ZodNumber>;
293
+ nextOffset: z.ZodOptional<z.ZodNumber>;
294
+ }, z.ZodTypeAny, "passthrough">>>;
295
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
296
+ designs: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
297
+ archivedCount: z.ZodOptional<z.ZodNumber>;
298
+ pagination: z.ZodOptional<z.ZodObject<{
299
+ total_count: z.ZodOptional<z.ZodNumber>;
300
+ total: z.ZodOptional<z.ZodNumber>;
301
+ count: z.ZodNumber;
302
+ offset: z.ZodNumber;
303
+ limit: z.ZodNumber;
304
+ has_more: z.ZodOptional<z.ZodBoolean>;
305
+ hasMore: z.ZodOptional<z.ZodBoolean>;
306
+ next_offset: z.ZodOptional<z.ZodNumber>;
307
+ nextOffset: z.ZodOptional<z.ZodNumber>;
308
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
309
+ total_count: z.ZodOptional<z.ZodNumber>;
310
+ total: z.ZodOptional<z.ZodNumber>;
311
+ count: z.ZodNumber;
312
+ offset: z.ZodNumber;
313
+ limit: z.ZodNumber;
314
+ has_more: z.ZodOptional<z.ZodBoolean>;
315
+ hasMore: z.ZodOptional<z.ZodBoolean>;
316
+ next_offset: z.ZodOptional<z.ZodNumber>;
317
+ nextOffset: z.ZodOptional<z.ZodNumber>;
318
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
319
+ total_count: z.ZodOptional<z.ZodNumber>;
320
+ total: z.ZodOptional<z.ZodNumber>;
321
+ count: z.ZodNumber;
322
+ offset: z.ZodNumber;
323
+ limit: z.ZodNumber;
324
+ has_more: z.ZodOptional<z.ZodBoolean>;
325
+ hasMore: z.ZodOptional<z.ZodBoolean>;
326
+ next_offset: z.ZodOptional<z.ZodNumber>;
327
+ nextOffset: z.ZodOptional<z.ZodNumber>;
328
+ }, z.ZodTypeAny, "passthrough">>>;
329
+ }, z.ZodTypeAny, "passthrough">>;
330
+ getDesign: z.ZodObject<{
331
+ design: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
332
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
333
+ design: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
334
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
335
+ design: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
336
+ }, z.ZodTypeAny, "passthrough">>;
337
+ createBrand: z.ZodObject<{
338
+ brand: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
339
+ reviewStatus: z.ZodOptional<z.ZodString>;
340
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
341
+ brand: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
342
+ reviewStatus: z.ZodOptional<z.ZodString>;
343
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
344
+ brand: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
345
+ reviewStatus: z.ZodOptional<z.ZodString>;
346
+ }, z.ZodTypeAny, "passthrough">>;
347
+ generate: z.ZodObject<{
348
+ designId: z.ZodString;
349
+ generationId: z.ZodString;
350
+ status: z.ZodString;
351
+ editorUrl: z.ZodString;
352
+ statusUrl: z.ZodString;
353
+ format: z.ZodOptional<z.ZodString>;
354
+ formatNote: z.ZodOptional<z.ZodString>;
355
+ credits: z.ZodOptional<z.ZodUnknown>;
356
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
357
+ designId: z.ZodString;
358
+ generationId: z.ZodString;
359
+ status: z.ZodString;
360
+ editorUrl: z.ZodString;
361
+ statusUrl: z.ZodString;
362
+ format: z.ZodOptional<z.ZodString>;
363
+ formatNote: z.ZodOptional<z.ZodString>;
364
+ credits: z.ZodOptional<z.ZodUnknown>;
365
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
366
+ designId: z.ZodString;
367
+ generationId: z.ZodString;
368
+ status: z.ZodString;
369
+ editorUrl: z.ZodString;
370
+ statusUrl: z.ZodString;
371
+ format: z.ZodOptional<z.ZodString>;
372
+ formatNote: z.ZodOptional<z.ZodString>;
373
+ credits: z.ZodOptional<z.ZodUnknown>;
374
+ }, z.ZodTypeAny, "passthrough">>;
375
+ poll: z.ZodObject<{
376
+ designId: z.ZodString;
377
+ generationId: z.ZodString;
378
+ status: z.ZodString;
379
+ editorUrl: z.ZodString;
380
+ imageUrl: z.ZodOptional<z.ZodString>;
381
+ completedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
382
+ platformBadge: z.ZodOptional<z.ZodBoolean>;
383
+ badgeNote: z.ZodOptional<z.ZodString>;
384
+ failureMessage: z.ZodOptional<z.ZodString>;
385
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
386
+ designId: z.ZodString;
387
+ generationId: z.ZodString;
388
+ status: z.ZodString;
389
+ editorUrl: z.ZodString;
390
+ imageUrl: z.ZodOptional<z.ZodString>;
391
+ completedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
392
+ platformBadge: z.ZodOptional<z.ZodBoolean>;
393
+ badgeNote: z.ZodOptional<z.ZodString>;
394
+ failureMessage: z.ZodOptional<z.ZodString>;
395
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
396
+ designId: z.ZodString;
397
+ generationId: z.ZodString;
398
+ status: z.ZodString;
399
+ editorUrl: z.ZodString;
400
+ imageUrl: z.ZodOptional<z.ZodString>;
401
+ completedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
402
+ platformBadge: z.ZodOptional<z.ZodBoolean>;
403
+ badgeNote: z.ZodOptional<z.ZodString>;
404
+ failureMessage: z.ZodOptional<z.ZodString>;
405
+ }, z.ZodTypeAny, "passthrough">>;
406
+ download: z.ZodObject<{
407
+ saved: z.ZodBoolean;
408
+ path: z.ZodString;
409
+ size: z.ZodNumber;
410
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
411
+ saved: z.ZodBoolean;
412
+ path: z.ZodString;
413
+ size: z.ZodNumber;
414
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
415
+ saved: z.ZodBoolean;
416
+ path: z.ZodString;
417
+ size: z.ZodNumber;
418
+ }, z.ZodTypeAny, "passthrough">>;
419
+ searchKnowledgeEntries: z.ZodObject<{
420
+ entries: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
421
+ count: z.ZodOptional<z.ZodNumber>;
422
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
423
+ entries: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
424
+ count: z.ZodOptional<z.ZodNumber>;
425
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
426
+ entries: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
427
+ count: z.ZodOptional<z.ZodNumber>;
428
+ }, z.ZodTypeAny, "passthrough">>;
429
+ createKnowledgeEntry: z.ZodObject<{
430
+ slug: z.ZodString;
431
+ created: z.ZodBoolean;
432
+ node: z.ZodString;
433
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
434
+ slug: z.ZodString;
435
+ created: z.ZodBoolean;
436
+ node: z.ZodString;
437
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
438
+ slug: z.ZodString;
439
+ created: z.ZodBoolean;
440
+ node: z.ZodString;
441
+ }, z.ZodTypeAny, "passthrough">>;
442
+ };
443
+ export declare const readOnly: {
444
+ readOnlyHint: boolean;
445
+ destructiveHint: boolean;
446
+ idempotentHint: boolean;
447
+ openWorldHint: boolean;
448
+ };
449
+ export declare const writeRemote: {
450
+ readOnlyHint: boolean;
451
+ destructiveHint: boolean;
452
+ idempotentHint: boolean;
453
+ openWorldHint: boolean;
454
+ };
455
+ export declare const writeLocal: {
456
+ readOnlyHint: boolean;
457
+ destructiveHint: boolean;
458
+ idempotentHint: boolean;
459
+ openWorldHint: boolean;
460
+ };
@@ -0,0 +1,189 @@
1
+ import { z } from "zod";
2
+ export const SAFE_ID = /^[a-zA-Z0-9_-]+$/;
3
+ const responseFormatSchema = z
4
+ .enum(["json", "markdown"])
5
+ .default("json")
6
+ .describe("Text response format. Defaults to json for backward compatibility; structuredContent is always returned when the MCP client supports it.");
7
+ export const safeIdSchema = z
8
+ .string()
9
+ .trim()
10
+ .min(1)
11
+ .regex(SAFE_ID, "must contain only letters, numbers, underscores, and hyphens");
12
+ export function argsObject(shape) {
13
+ return z
14
+ .object({
15
+ ...shape,
16
+ response_format: responseFormatSchema,
17
+ })
18
+ .strict();
19
+ }
20
+ export const emptyArgsSchema = argsObject({});
21
+ export const listArgsSchema = argsObject({
22
+ limit: z
23
+ .number()
24
+ .int()
25
+ .min(1)
26
+ .max(100)
27
+ .default(50)
28
+ .describe("Maximum items to return. Defaults to 50."),
29
+ offset: z
30
+ .number()
31
+ .int()
32
+ .min(0)
33
+ .default(0)
34
+ .describe("Number of items to skip for pagination. Defaults to 0."),
35
+ });
36
+ export function safePath(template, params) {
37
+ return template.replace(/:(\w+)/g, (_, key) => {
38
+ const val = String(params[key] ?? "");
39
+ if (!SAFE_ID.test(val)) {
40
+ throw new Error(`Invalid ${key}: must contain only letters, numbers, underscores, and hyphens (got "${val}")`);
41
+ }
42
+ return encodeURIComponent(val);
43
+ });
44
+ }
45
+ export function stripPresentationArgs(args) {
46
+ const { response_format: _responseFormat, ...rest } = args;
47
+ return rest;
48
+ }
49
+ export function responseFormatFromArgs(args) {
50
+ return args.response_format === "markdown" ? "markdown" : "json";
51
+ }
52
+ const anyRecord = z.record(z.unknown());
53
+ const paginationSchema = z
54
+ .object({
55
+ total_count: z.number().optional(),
56
+ total: z.number().optional(),
57
+ count: z.number(),
58
+ offset: z.number(),
59
+ limit: z.number(),
60
+ has_more: z.boolean().optional(),
61
+ hasMore: z.boolean().optional(),
62
+ next_offset: z.number().optional(),
63
+ nextOffset: z.number().optional(),
64
+ })
65
+ .passthrough();
66
+ export const outputSchemas = {
67
+ whoami: z
68
+ .object({
69
+ account: z.unknown().optional(),
70
+ staffExempt: z.boolean().optional(),
71
+ organizations: z.array(anyRecord).optional(),
72
+ defaultOrganizationId: z.string().nullable().optional(),
73
+ features: z.unknown().optional(),
74
+ links: z.unknown().optional(),
75
+ notes: z.array(z.string()).optional(),
76
+ })
77
+ .passthrough(),
78
+ creditPrices: z
79
+ .object({
80
+ priceVersion: z.number().optional(),
81
+ actions: z.array(anyRecord).optional(),
82
+ launchVideos: z.array(anyRecord).optional(),
83
+ launchVideoRevisions: z.array(anyRecord).optional(),
84
+ monthlyCredits: z.unknown().optional(),
85
+ notes: z.array(z.string()).optional(),
86
+ })
87
+ .passthrough(),
88
+ usage: z
89
+ .object({
90
+ organization: anyRecord.optional(),
91
+ balance: z.unknown().optional(),
92
+ usage: z.unknown().optional(),
93
+ links: z.unknown().optional(),
94
+ })
95
+ .passthrough(),
96
+ listBrands: z
97
+ .object({
98
+ brands: z.array(anyRecord),
99
+ pagination: paginationSchema.optional(),
100
+ })
101
+ .passthrough(),
102
+ getBrand: z
103
+ .object({
104
+ brand: anyRecord.optional(),
105
+ role: z.string().optional(),
106
+ })
107
+ .passthrough(),
108
+ listDesigns: z
109
+ .object({
110
+ designs: z.array(anyRecord),
111
+ archivedCount: z.number().optional(),
112
+ pagination: paginationSchema.optional(),
113
+ })
114
+ .passthrough(),
115
+ getDesign: z
116
+ .object({
117
+ design: anyRecord.optional(),
118
+ })
119
+ .passthrough(),
120
+ createBrand: z
121
+ .object({
122
+ brand: anyRecord.optional(),
123
+ reviewStatus: z.string().optional(),
124
+ })
125
+ .passthrough(),
126
+ generate: z
127
+ .object({
128
+ designId: z.string(),
129
+ generationId: z.string(),
130
+ status: z.string(),
131
+ editorUrl: z.string(),
132
+ statusUrl: z.string(),
133
+ format: z.string().optional(),
134
+ formatNote: z.string().optional(),
135
+ credits: z.unknown().optional(),
136
+ })
137
+ .passthrough(),
138
+ poll: z
139
+ .object({
140
+ designId: z.string(),
141
+ generationId: z.string(),
142
+ status: z.string(),
143
+ editorUrl: z.string(),
144
+ imageUrl: z.string().optional(),
145
+ completedAt: z.string().nullable().optional(),
146
+ platformBadge: z.boolean().optional(),
147
+ badgeNote: z.string().optional(),
148
+ failureMessage: z.string().optional(),
149
+ })
150
+ .passthrough(),
151
+ download: z
152
+ .object({
153
+ saved: z.boolean(),
154
+ path: z.string(),
155
+ size: z.number(),
156
+ })
157
+ .passthrough(),
158
+ searchKnowledgeEntries: z
159
+ .object({
160
+ entries: z.array(anyRecord),
161
+ count: z.number().optional(),
162
+ })
163
+ .passthrough(),
164
+ createKnowledgeEntry: z
165
+ .object({
166
+ slug: z.string(),
167
+ created: z.boolean(),
168
+ node: z.string(),
169
+ })
170
+ .passthrough(),
171
+ };
172
+ export const readOnly = {
173
+ readOnlyHint: true,
174
+ destructiveHint: false,
175
+ idempotentHint: true,
176
+ openWorldHint: true,
177
+ };
178
+ export const writeRemote = {
179
+ readOnlyHint: false,
180
+ destructiveHint: false,
181
+ idempotentHint: false,
182
+ openWorldHint: true,
183
+ };
184
+ export const writeLocal = {
185
+ readOnlyHint: false,
186
+ destructiveHint: true,
187
+ idempotentHint: false,
188
+ openWorldHint: true,
189
+ };