@zegazone_mcp/mcp 2.0.2 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/ops.js +3 -0
- package/dist/tool-metadata.js +8 -2
- package/dist/tool-schemas.js +412 -11
- package/package.json +37 -37
package/README.md
CHANGED
|
@@ -33,19 +33,26 @@ Set `ZEGA_API_BASE=https://api.zegaphone.com` in env if needed (defaults apply f
|
|
|
33
33
|
- Keeps API as source of truth.
|
|
34
34
|
- Applies safety defaults for destructive operations (`dry_run` when neither `confirm` nor `dry_run` is provided).
|
|
35
35
|
- Adds `idempotency_key` automatically to mutating operations when absent.
|
|
36
|
+
- **2.0.4+:** every MCP tool exposes a typed Zod input schema (field names, types, and descriptions) so weak models can call tools without guessing `args`.
|
|
36
37
|
|
|
37
38
|
## Tool mapping
|
|
38
39
|
|
|
39
40
|
Examples:
|
|
40
41
|
|
|
41
42
|
- `operations_list` -> `operations.list`
|
|
43
|
+
- `collections_get` -> `collections.get`
|
|
44
|
+
- `collections_get_by_slug` -> `collections.get_by_slug`
|
|
42
45
|
- `collections_delete` -> `collections.delete`
|
|
46
|
+
- `media_get` -> `media.get`
|
|
47
|
+
- `media_search` -> `media.search` (requires `query`)
|
|
43
48
|
- `media_delete` -> `media.delete`
|
|
44
49
|
- `media_move` -> `media.move`
|
|
45
50
|
- `media_reorder` -> `media.reorder`
|
|
46
51
|
|
|
47
52
|
Also includes generic `thirdparty_call` for forward compatibility.
|
|
48
53
|
|
|
54
|
+
**Lookup tip:** use `media_get` / `collections_get` when you know the id; use `media_search` when you only have a keyword.
|
|
55
|
+
|
|
49
56
|
## Configuration
|
|
50
57
|
|
|
51
58
|
Copy `.env.example` to `.env.local`. You need `ZEGA_API_BASE` plus **either** a one-time OAuth pairing **or** a static access token.
|
package/dist/ops.js
CHANGED
|
@@ -6,6 +6,8 @@ export const OP_TOOL_MAP = {
|
|
|
6
6
|
ui_state_get: "ui.state.get",
|
|
7
7
|
ui_state_set: "ui.state.set",
|
|
8
8
|
collections_list: "collections.list",
|
|
9
|
+
collections_get: "collections.get",
|
|
10
|
+
collections_get_by_slug: "collections.get_by_slug",
|
|
9
11
|
collections_batch_get: "collections.batch.get",
|
|
10
12
|
collections_export: "collections.export",
|
|
11
13
|
collections_create: "collections.create",
|
|
@@ -38,6 +40,7 @@ export const OP_TOOL_MAP = {
|
|
|
38
40
|
collaborators_invite_accept: "collaborators.invite.accept",
|
|
39
41
|
collaborators_invite_decline: "collaborators.invite.decline",
|
|
40
42
|
media_list: "media.list",
|
|
43
|
+
media_get: "media.get",
|
|
41
44
|
media_search: "media.search",
|
|
42
45
|
media_batch_list: "media.batch.list",
|
|
43
46
|
media_download: "media.download",
|
package/dist/tool-metadata.js
CHANGED
|
@@ -6,6 +6,8 @@ export const TOOL_CATEGORIES = {
|
|
|
6
6
|
ui_state_get: "UI",
|
|
7
7
|
ui_state_set: "UI",
|
|
8
8
|
collections_list: "Collections",
|
|
9
|
+
collections_get: "Collections",
|
|
10
|
+
collections_get_by_slug: "Collections",
|
|
9
11
|
collections_batch_get: "Collections",
|
|
10
12
|
collections_export: "Collections",
|
|
11
13
|
collections_create: "Collections",
|
|
@@ -38,6 +40,7 @@ export const TOOL_CATEGORIES = {
|
|
|
38
40
|
collaborators_invite_accept: "Collaboration",
|
|
39
41
|
collaborators_invite_decline: "Collaboration",
|
|
40
42
|
media_list: "Media",
|
|
43
|
+
media_get: "Media",
|
|
41
44
|
media_search: "Media",
|
|
42
45
|
media_batch_list: "Media",
|
|
43
46
|
media_download: "Media",
|
|
@@ -66,6 +69,8 @@ export const TOOL_DESCRIPTIONS = {
|
|
|
66
69
|
ui_state_get: "Use when you need to know which collection and media item are currently open in the user's Zegazone UI — keeps agent actions aligned with what they see.",
|
|
67
70
|
ui_state_set: "Use when the agent should drive the app: open a collection, select a media item, or sync the UI to match your workflow.",
|
|
68
71
|
collections_list: "Use when you need to see what collections the user owns — names, tags, sharing level, thumbnails — before uploading media, publishing, or inviting collaborators.",
|
|
72
|
+
collections_get: "Look up a specific collection by its ID. Use this when you know the collection ID and need its name, description, sharing status, or other details.",
|
|
73
|
+
collections_get_by_slug: "Resolve a collection from a public share URL handle and slug (e.g. charliefairbairn/boating). Use when the agent has a link and needs the collection id or metadata.",
|
|
69
74
|
collections_batch_get: "Use when you already have a list of collection ids and need full metadata for several at once without listing everything.",
|
|
70
75
|
collections_export: "Use when the user wants a portable dump of a collection (metadata and media references) for backup or migration.",
|
|
71
76
|
collections_create: "Use when starting a new collection from scratch. Set name, tags, NSFW flag, and optional parent for sub-collections.",
|
|
@@ -97,8 +102,9 @@ export const TOOL_DESCRIPTIONS = {
|
|
|
97
102
|
collaborators_invites_received: "Use when the user asks what collections they were invited to.",
|
|
98
103
|
collaborators_invite_accept: "Use after the user confirms they want access to a shared collection.",
|
|
99
104
|
collaborators_invite_decline: "Use when refusing a collaboration invite.",
|
|
100
|
-
media_list: "Use to list media inside
|
|
101
|
-
|
|
105
|
+
media_list: "Use to list media inside accessible collections — filter by collection_id, viewer type, tags, or other metadata before adding more.",
|
|
106
|
+
media_get: "Look up a specific media item by its ID. Use this when you know the media ID and need its description, tags, thumbnail, or other details.",
|
|
107
|
+
media_search: "Search for media items by name, description, or tags. Use this to find a specific item when you don't know its ID.",
|
|
102
108
|
media_batch_list: "Use when you have many media ids and need rows for all of them in one call.",
|
|
103
109
|
media_download: "Use when you need a time-limited download URL for a media item's main file.",
|
|
104
110
|
media_create: "Use when adding new content to a collection from a URL (image, video, website, etc.). Requires viewer type.",
|
package/dist/tool-schemas.js
CHANGED
|
@@ -14,11 +14,22 @@ const viewerEnum = z.enum([
|
|
|
14
14
|
"html",
|
|
15
15
|
]);
|
|
16
16
|
const shareAccessLevelEnum = z.enum(["private", "restricted", "registered", "public"]);
|
|
17
|
+
const displayModeEnum = z.enum(["plain", "markdown", "code"]);
|
|
18
|
+
const collectionsBrowseFilterEnum = z.enum(["own", "shared", "public", "following", "liked"]);
|
|
19
|
+
const mediaIdSchema = z.number().int().positive().describe("Integer ID of the media item.");
|
|
20
|
+
const collectionIdSchema = z.number().int().positive().describe("Integer ID of the collection.");
|
|
21
|
+
const limitSchema = z.number().int().positive().optional();
|
|
22
|
+
const offsetSchema = z.number().int().min(0).optional();
|
|
17
23
|
const tagsSchema = z
|
|
18
24
|
.array(z.string().min(1))
|
|
19
25
|
.max(10)
|
|
20
26
|
.optional()
|
|
21
27
|
.describe("Highly encouraged for discovery and organization (max 10).");
|
|
28
|
+
const emptyToolSchema = z
|
|
29
|
+
.object({
|
|
30
|
+
args: z.record(z.unknown()).optional(),
|
|
31
|
+
})
|
|
32
|
+
.catchall(z.unknown());
|
|
22
33
|
export const collectionsCreateSchema = z
|
|
23
34
|
.object({
|
|
24
35
|
args: z.record(z.unknown()).optional(),
|
|
@@ -43,7 +54,7 @@ export const collectionsCreateSchema = z
|
|
|
43
54
|
.optional()
|
|
44
55
|
.describe("Profile alias UUID; sets created_with_username publish handle."),
|
|
45
56
|
playback_prefs: z.record(z.unknown()).optional().describe("JSON playback preferences."),
|
|
46
|
-
parent_collection_id:
|
|
57
|
+
parent_collection_id: collectionIdSchema.optional(),
|
|
47
58
|
link_position: z.number().int().min(0).optional(),
|
|
48
59
|
link_description: z.string().max(4000).optional(),
|
|
49
60
|
})
|
|
@@ -51,7 +62,7 @@ export const collectionsCreateSchema = z
|
|
|
51
62
|
export const collectionsUpdateSchema = z
|
|
52
63
|
.object({
|
|
53
64
|
args: z.record(z.unknown()).optional(),
|
|
54
|
-
collection_id:
|
|
65
|
+
collection_id: collectionIdSchema,
|
|
55
66
|
name: z.string().min(1).optional(),
|
|
56
67
|
description: z.string().max(4000).nullable().optional(),
|
|
57
68
|
tags: tagsSchema,
|
|
@@ -69,10 +80,125 @@ export const collectionsUpdateSchema = z
|
|
|
69
80
|
playback_prefs: z.record(z.unknown()).nullable().optional(),
|
|
70
81
|
})
|
|
71
82
|
.catchall(z.unknown());
|
|
83
|
+
export const collectionsListSchema = z
|
|
84
|
+
.object({
|
|
85
|
+
args: z.record(z.unknown()).optional(),
|
|
86
|
+
parent_collection_id: collectionIdSchema.optional(),
|
|
87
|
+
include_archived: z.boolean().optional(),
|
|
88
|
+
limit: limitSchema,
|
|
89
|
+
offset: offsetSchema,
|
|
90
|
+
})
|
|
91
|
+
.catchall(z.unknown());
|
|
92
|
+
export const collectionsBatchGetSchema = z
|
|
93
|
+
.object({
|
|
94
|
+
args: z.record(z.unknown()).optional(),
|
|
95
|
+
collection_ids: z.array(collectionIdSchema).min(1),
|
|
96
|
+
})
|
|
97
|
+
.catchall(z.unknown());
|
|
98
|
+
export const collectionsExportSchema = z
|
|
99
|
+
.object({
|
|
100
|
+
args: z.record(z.unknown()).optional(),
|
|
101
|
+
collection_id: collectionIdSchema,
|
|
102
|
+
})
|
|
103
|
+
.catchall(z.unknown());
|
|
104
|
+
export const collectionsStatsGetSchema = z
|
|
105
|
+
.object({
|
|
106
|
+
args: z.record(z.unknown()).optional(),
|
|
107
|
+
collection_id: collectionIdSchema,
|
|
108
|
+
})
|
|
109
|
+
.catchall(z.unknown());
|
|
110
|
+
export const collectionsShareUrlSchema = z
|
|
111
|
+
.object({
|
|
112
|
+
args: z.record(z.unknown()).optional(),
|
|
113
|
+
collection_id: collectionIdSchema,
|
|
114
|
+
})
|
|
115
|
+
.catchall(z.unknown());
|
|
116
|
+
export const collectionsDeleteSchema = z
|
|
117
|
+
.object({
|
|
118
|
+
args: z.record(z.unknown()).optional(),
|
|
119
|
+
collection_id: collectionIdSchema,
|
|
120
|
+
dry_run: z.boolean().optional(),
|
|
121
|
+
confirm: z.boolean().optional(),
|
|
122
|
+
})
|
|
123
|
+
.catchall(z.unknown());
|
|
124
|
+
export const collectionsRestoreSchema = z
|
|
125
|
+
.object({
|
|
126
|
+
args: z.record(z.unknown()).optional(),
|
|
127
|
+
collection_id: collectionIdSchema,
|
|
128
|
+
})
|
|
129
|
+
.catchall(z.unknown());
|
|
130
|
+
export const collectionsArchiveSchema = z
|
|
131
|
+
.object({
|
|
132
|
+
args: z.record(z.unknown()).optional(),
|
|
133
|
+
collection_id: collectionIdSchema,
|
|
134
|
+
})
|
|
135
|
+
.catchall(z.unknown());
|
|
136
|
+
export const collectionsUnarchiveSchema = z
|
|
137
|
+
.object({
|
|
138
|
+
args: z.record(z.unknown()).optional(),
|
|
139
|
+
collection_id: collectionIdSchema,
|
|
140
|
+
})
|
|
141
|
+
.catchall(z.unknown());
|
|
142
|
+
export const collectionsReorderSchema = z
|
|
143
|
+
.object({
|
|
144
|
+
args: z.record(z.unknown()).optional(),
|
|
145
|
+
collection_id: collectionIdSchema,
|
|
146
|
+
ordered_ids: z.array(z.number().int().positive()).min(1),
|
|
147
|
+
})
|
|
148
|
+
.catchall(z.unknown());
|
|
149
|
+
export const collectionsPublishSchema = z
|
|
150
|
+
.object({
|
|
151
|
+
args: z.record(z.unknown()).optional(),
|
|
152
|
+
collection_id: collectionIdSchema,
|
|
153
|
+
slug: z.string().min(1),
|
|
154
|
+
handle: z.string().min(1).optional(),
|
|
155
|
+
})
|
|
156
|
+
.catchall(z.unknown());
|
|
157
|
+
export const collectionsUnpublishSchema = z
|
|
158
|
+
.object({
|
|
159
|
+
args: z.record(z.unknown()).optional(),
|
|
160
|
+
collection_id: collectionIdSchema,
|
|
161
|
+
})
|
|
162
|
+
.catchall(z.unknown());
|
|
163
|
+
export const collectionsLikeSchema = z
|
|
164
|
+
.object({
|
|
165
|
+
args: z.record(z.unknown()).optional(),
|
|
166
|
+
collection_id: collectionIdSchema,
|
|
167
|
+
})
|
|
168
|
+
.catchall(z.unknown());
|
|
169
|
+
export const collectionsUnlikeSchema = z
|
|
170
|
+
.object({
|
|
171
|
+
args: z.record(z.unknown()).optional(),
|
|
172
|
+
collection_id: collectionIdSchema,
|
|
173
|
+
})
|
|
174
|
+
.catchall(z.unknown());
|
|
175
|
+
export const collectionsLikedListSchema = z
|
|
176
|
+
.object({
|
|
177
|
+
args: z.record(z.unknown()).optional(),
|
|
178
|
+
limit: limitSchema,
|
|
179
|
+
offset: offsetSchema,
|
|
180
|
+
})
|
|
181
|
+
.catchall(z.unknown());
|
|
182
|
+
export const collectionsSearchSchema = z
|
|
183
|
+
.object({
|
|
184
|
+
args: z.record(z.unknown()).optional(),
|
|
185
|
+
query: z.string().min(3),
|
|
186
|
+
limit: limitSchema,
|
|
187
|
+
offset: offsetSchema,
|
|
188
|
+
})
|
|
189
|
+
.catchall(z.unknown());
|
|
190
|
+
export const collectionsBrowseSchema = z
|
|
191
|
+
.object({
|
|
192
|
+
args: z.record(z.unknown()).optional(),
|
|
193
|
+
filter: collectionsBrowseFilterEnum,
|
|
194
|
+
limit: limitSchema,
|
|
195
|
+
offset: offsetSchema,
|
|
196
|
+
})
|
|
197
|
+
.catchall(z.unknown());
|
|
72
198
|
export const mediaCreateSchema = z
|
|
73
199
|
.object({
|
|
74
200
|
args: z.record(z.unknown()).optional(),
|
|
75
|
-
collection_id:
|
|
201
|
+
collection_id: collectionIdSchema,
|
|
76
202
|
source_url: z.string().url(),
|
|
77
203
|
viewer: viewerEnum.describe("Hint for which viewer to use (required)."),
|
|
78
204
|
name: z.string().max(180).optional(),
|
|
@@ -89,13 +215,13 @@ export const mediaCreateSchema = z
|
|
|
89
215
|
screenshot_url: z.string().url().optional(),
|
|
90
216
|
background_image_url: z.string().url().optional(),
|
|
91
217
|
locked_for_collaborators: z.boolean().optional(),
|
|
92
|
-
subcollection_collection_id:
|
|
218
|
+
subcollection_collection_id: collectionIdSchema.nullable().optional(),
|
|
93
219
|
})
|
|
94
220
|
.catchall(z.unknown());
|
|
95
221
|
export const mediaUpdateSchema = z
|
|
96
222
|
.object({
|
|
97
223
|
args: z.record(z.unknown()).optional(),
|
|
98
|
-
media_id:
|
|
224
|
+
media_id: mediaIdSchema,
|
|
99
225
|
name: z.string().max(180).optional(),
|
|
100
226
|
description: z.string().max(4000).nullable().optional(),
|
|
101
227
|
position: z.number().int().min(0).optional(),
|
|
@@ -110,18 +236,18 @@ export const mediaUpdateSchema = z
|
|
|
110
236
|
type: z.string().optional(),
|
|
111
237
|
tags: tagsSchema,
|
|
112
238
|
text_note: z.string().max(524288).optional(),
|
|
113
|
-
display_mode:
|
|
239
|
+
display_mode: displayModeEnum.optional(),
|
|
114
240
|
screenshot_url: z.string().url().nullable().optional(),
|
|
115
241
|
background_image_url: z.string().url().nullable().optional(),
|
|
116
242
|
locked_for_collaborators: z.boolean().optional(),
|
|
117
|
-
subcollection_collection_id:
|
|
243
|
+
subcollection_collection_id: collectionIdSchema.nullable().optional(),
|
|
118
244
|
})
|
|
119
245
|
.catchall(z.unknown());
|
|
120
246
|
export const uiStateSetSchema = z
|
|
121
247
|
.object({
|
|
122
248
|
args: z.record(z.unknown()).optional(),
|
|
123
|
-
collection_id:
|
|
124
|
-
media_id:
|
|
249
|
+
collection_id: collectionIdSchema.nullable().optional(),
|
|
250
|
+
media_id: mediaIdSchema.nullable().optional(),
|
|
125
251
|
source: z.enum(["agent", "user"]).optional(),
|
|
126
252
|
agent_id: z.string().nullable().optional(),
|
|
127
253
|
view_mode: z.enum(["carousel", "grid"]).nullable().optional(),
|
|
@@ -133,14 +259,289 @@ export const uiStateSetSchema = z
|
|
|
133
259
|
export const mediaDescribeSchema = z
|
|
134
260
|
.object({
|
|
135
261
|
args: z.record(z.unknown()).optional(),
|
|
136
|
-
media_id:
|
|
262
|
+
media_id: mediaIdSchema,
|
|
263
|
+
})
|
|
264
|
+
.catchall(z.unknown());
|
|
265
|
+
export const mediaGetSchema = z
|
|
266
|
+
.object({
|
|
267
|
+
args: z.record(z.unknown()).optional(),
|
|
268
|
+
media_id: mediaIdSchema,
|
|
269
|
+
})
|
|
270
|
+
.catchall(z.unknown());
|
|
271
|
+
export const collectionsGetSchema = z
|
|
272
|
+
.object({
|
|
273
|
+
args: z.record(z.unknown()).optional(),
|
|
274
|
+
collection_id: collectionIdSchema,
|
|
275
|
+
})
|
|
276
|
+
.catchall(z.unknown());
|
|
277
|
+
export const collectionsGetBySlugSchema = z
|
|
278
|
+
.object({
|
|
279
|
+
args: z.record(z.unknown()).optional(),
|
|
280
|
+
handle: z.string().min(1).describe("Publish handle from the share URL, without @."),
|
|
281
|
+
slug: z.string().min(1).describe("Collection slug from the share URL."),
|
|
282
|
+
})
|
|
283
|
+
.catchall(z.unknown());
|
|
284
|
+
export const mediaSearchSchema = z
|
|
285
|
+
.object({
|
|
286
|
+
args: z.record(z.unknown()).optional(),
|
|
287
|
+
query: z.string().min(1).describe("Search text matched against name, description, and tags."),
|
|
288
|
+
collection_id: collectionIdSchema.optional(),
|
|
289
|
+
include_archived: z.boolean().optional(),
|
|
290
|
+
limit: limitSchema,
|
|
291
|
+
offset: offsetSchema,
|
|
292
|
+
})
|
|
293
|
+
.catchall(z.unknown());
|
|
294
|
+
export const mediaListSchema = z
|
|
295
|
+
.object({
|
|
296
|
+
args: z.record(z.unknown()).optional(),
|
|
297
|
+
collection_id: collectionIdSchema.optional(),
|
|
298
|
+
tag: z.string().optional(),
|
|
299
|
+
tags: tagsSchema,
|
|
300
|
+
name_contains: z.string().optional(),
|
|
301
|
+
description_contains: z.string().optional(),
|
|
302
|
+
type: z.string().optional(),
|
|
303
|
+
viewer: viewerEnum.optional(),
|
|
304
|
+
created_after: z.string().optional(),
|
|
305
|
+
created_before: z.string().optional(),
|
|
306
|
+
is_nsfw: z.boolean().optional(),
|
|
307
|
+
include_archived: z.boolean().optional(),
|
|
308
|
+
limit: limitSchema,
|
|
309
|
+
offset: offsetSchema,
|
|
310
|
+
})
|
|
311
|
+
.catchall(z.unknown());
|
|
312
|
+
export const mediaBatchListSchema = z
|
|
313
|
+
.object({
|
|
314
|
+
args: z.record(z.unknown()).optional(),
|
|
315
|
+
media_ids: z.array(mediaIdSchema).min(1),
|
|
316
|
+
})
|
|
317
|
+
.catchall(z.unknown());
|
|
318
|
+
export const mediaDownloadSchema = z
|
|
319
|
+
.object({
|
|
320
|
+
args: z.record(z.unknown()).optional(),
|
|
321
|
+
media_id: mediaIdSchema,
|
|
322
|
+
})
|
|
323
|
+
.catchall(z.unknown());
|
|
324
|
+
export const mediaReplaceSchema = z
|
|
325
|
+
.object({
|
|
326
|
+
args: z.record(z.unknown()).optional(),
|
|
327
|
+
media_id: mediaIdSchema,
|
|
328
|
+
source_url: z.string().url(),
|
|
329
|
+
viewer: viewerEnum.optional(),
|
|
330
|
+
type: z.string().optional(),
|
|
331
|
+
})
|
|
332
|
+
.catchall(z.unknown());
|
|
333
|
+
export const mediaDeleteSchema = z
|
|
334
|
+
.object({
|
|
335
|
+
args: z.record(z.unknown()).optional(),
|
|
336
|
+
media_id: mediaIdSchema,
|
|
337
|
+
dry_run: z.boolean().optional(),
|
|
338
|
+
confirm: z.boolean().optional(),
|
|
339
|
+
})
|
|
340
|
+
.catchall(z.unknown());
|
|
341
|
+
export const mediaRestoreSchema = z
|
|
342
|
+
.object({
|
|
343
|
+
args: z.record(z.unknown()).optional(),
|
|
344
|
+
media_id: mediaIdSchema,
|
|
345
|
+
})
|
|
346
|
+
.catchall(z.unknown());
|
|
347
|
+
export const mediaMoveSchema = z
|
|
348
|
+
.object({
|
|
349
|
+
args: z.record(z.unknown()).optional(),
|
|
350
|
+
media_id: mediaIdSchema,
|
|
351
|
+
collection_id: collectionIdSchema,
|
|
352
|
+
position: z.number().int().min(0).optional(),
|
|
353
|
+
})
|
|
354
|
+
.catchall(z.unknown());
|
|
355
|
+
export const mediaCopySchema = z
|
|
356
|
+
.object({
|
|
357
|
+
args: z.record(z.unknown()).optional(),
|
|
358
|
+
media_id: mediaIdSchema,
|
|
359
|
+
collection_id: collectionIdSchema,
|
|
360
|
+
position: z.number().int().min(0).optional(),
|
|
361
|
+
})
|
|
362
|
+
.catchall(z.unknown());
|
|
363
|
+
export const mediaReorderSchema = z
|
|
364
|
+
.object({
|
|
365
|
+
args: z.record(z.unknown()).optional(),
|
|
366
|
+
collection_id: collectionIdSchema,
|
|
367
|
+
ordered_ids: z.array(mediaIdSchema).min(1),
|
|
368
|
+
})
|
|
369
|
+
.catchall(z.unknown());
|
|
370
|
+
export const mediaArchiveSchema = z
|
|
371
|
+
.object({
|
|
372
|
+
args: z.record(z.unknown()).optional(),
|
|
373
|
+
media_id: mediaIdSchema,
|
|
374
|
+
})
|
|
375
|
+
.catchall(z.unknown());
|
|
376
|
+
export const mediaUnarchiveSchema = z
|
|
377
|
+
.object({
|
|
378
|
+
args: z.record(z.unknown()).optional(),
|
|
379
|
+
media_id: mediaIdSchema,
|
|
380
|
+
})
|
|
381
|
+
.catchall(z.unknown());
|
|
382
|
+
export const mediaTextNoteAddSchema = z
|
|
383
|
+
.object({
|
|
384
|
+
args: z.record(z.unknown()).optional(),
|
|
385
|
+
collection_id: collectionIdSchema,
|
|
386
|
+
name: z.string().min(1),
|
|
387
|
+
body: z.string(),
|
|
388
|
+
display_mode: displayModeEnum.optional(),
|
|
389
|
+
position: z.number().int().min(0).optional(),
|
|
390
|
+
})
|
|
391
|
+
.catchall(z.unknown());
|
|
392
|
+
export const mediaTextNoteGetSchema = z
|
|
393
|
+
.object({
|
|
394
|
+
args: z.record(z.unknown()).optional(),
|
|
395
|
+
media_id: mediaIdSchema,
|
|
396
|
+
})
|
|
397
|
+
.catchall(z.unknown());
|
|
398
|
+
export const mediaTextNoteUpdateSchema = z
|
|
399
|
+
.object({
|
|
400
|
+
args: z.record(z.unknown()).optional(),
|
|
401
|
+
media_id: mediaIdSchema,
|
|
402
|
+
body: z.string().optional(),
|
|
403
|
+
name: z.string().min(1).optional(),
|
|
404
|
+
display_mode: displayModeEnum.optional(),
|
|
405
|
+
thumbnail_url: z.string().url().optional(),
|
|
406
|
+
})
|
|
407
|
+
.catchall(z.unknown());
|
|
408
|
+
export const mediaTextNoteDeleteSchema = z
|
|
409
|
+
.object({
|
|
410
|
+
args: z.record(z.unknown()).optional(),
|
|
411
|
+
media_id: mediaIdSchema,
|
|
412
|
+
dry_run: z.boolean().optional(),
|
|
413
|
+
confirm: z.boolean().optional(),
|
|
414
|
+
})
|
|
415
|
+
.catchall(z.unknown());
|
|
416
|
+
export const profileUpdateSchema = z
|
|
417
|
+
.object({
|
|
418
|
+
args: z.record(z.unknown()).optional(),
|
|
419
|
+
display_name: z.string().optional(),
|
|
420
|
+
bio: z.string().optional(),
|
|
421
|
+
})
|
|
422
|
+
.catchall(z.unknown());
|
|
423
|
+
export const aliasesFollowSchema = z
|
|
424
|
+
.object({
|
|
425
|
+
args: z.record(z.unknown()).optional(),
|
|
426
|
+
handle: z.string().min(1),
|
|
427
|
+
})
|
|
428
|
+
.catchall(z.unknown());
|
|
429
|
+
export const aliasesUnfollowSchema = z
|
|
430
|
+
.object({
|
|
431
|
+
args: z.record(z.unknown()).optional(),
|
|
432
|
+
handle: z.string().min(1),
|
|
433
|
+
})
|
|
434
|
+
.catchall(z.unknown());
|
|
435
|
+
export const aliasesFollowingListSchema = z
|
|
436
|
+
.object({
|
|
437
|
+
args: z.record(z.unknown()).optional(),
|
|
438
|
+
limit: limitSchema,
|
|
439
|
+
offset: offsetSchema,
|
|
440
|
+
})
|
|
441
|
+
.catchall(z.unknown());
|
|
442
|
+
export const collaboratorsListSchema = z
|
|
443
|
+
.object({
|
|
444
|
+
args: z.record(z.unknown()).optional(),
|
|
445
|
+
collection_id: collectionIdSchema,
|
|
446
|
+
})
|
|
447
|
+
.catchall(z.unknown());
|
|
448
|
+
export const collaboratorsInviteSchema = z
|
|
449
|
+
.object({
|
|
450
|
+
args: z.record(z.unknown()).optional(),
|
|
451
|
+
collection_id: collectionIdSchema,
|
|
452
|
+
username: z.string().min(1),
|
|
453
|
+
})
|
|
454
|
+
.catchall(z.unknown());
|
|
455
|
+
export const collaboratorsRevokeSchema = z
|
|
456
|
+
.object({
|
|
457
|
+
args: z.record(z.unknown()).optional(),
|
|
458
|
+
collection_id: collectionIdSchema,
|
|
459
|
+
username: z.string().min(1),
|
|
460
|
+
})
|
|
461
|
+
.catchall(z.unknown());
|
|
462
|
+
export const collaboratorsInvitesListSchema = z
|
|
463
|
+
.object({
|
|
464
|
+
args: z.record(z.unknown()).optional(),
|
|
465
|
+
collection_id: collectionIdSchema,
|
|
466
|
+
})
|
|
467
|
+
.catchall(z.unknown());
|
|
468
|
+
export const collaboratorsInviteAcceptSchema = z
|
|
469
|
+
.object({
|
|
470
|
+
args: z.record(z.unknown()).optional(),
|
|
471
|
+
invite_id: z.string().min(1),
|
|
472
|
+
})
|
|
473
|
+
.catchall(z.unknown());
|
|
474
|
+
export const collaboratorsInviteDeclineSchema = z
|
|
475
|
+
.object({
|
|
476
|
+
args: z.record(z.unknown()).optional(),
|
|
477
|
+
invite_id: z.string().min(1),
|
|
478
|
+
})
|
|
479
|
+
.catchall(z.unknown());
|
|
480
|
+
export const operationDescribeSchema = z
|
|
481
|
+
.object({
|
|
482
|
+
args: z.record(z.unknown()).optional(),
|
|
483
|
+
name: z.string().min(1).describe("Operation name from operations_list, e.g. collections.list."),
|
|
137
484
|
})
|
|
138
485
|
.catchall(z.unknown());
|
|
139
486
|
export const TYPED_TOOL_SCHEMAS = {
|
|
487
|
+
ping: emptyToolSchema,
|
|
488
|
+
schema_get: emptyToolSchema,
|
|
489
|
+
operations_list: emptyToolSchema,
|
|
490
|
+
operation_describe: operationDescribeSchema,
|
|
491
|
+
ui_state_get: emptyToolSchema,
|
|
492
|
+
ui_state_set: uiStateSetSchema,
|
|
493
|
+
collections_list: collectionsListSchema,
|
|
494
|
+
collections_get: collectionsGetSchema,
|
|
495
|
+
collections_get_by_slug: collectionsGetBySlugSchema,
|
|
496
|
+
collections_batch_get: collectionsBatchGetSchema,
|
|
497
|
+
collections_export: collectionsExportSchema,
|
|
140
498
|
collections_create: collectionsCreateSchema,
|
|
141
499
|
collections_update: collectionsUpdateSchema,
|
|
500
|
+
collections_delete: collectionsDeleteSchema,
|
|
501
|
+
collections_restore: collectionsRestoreSchema,
|
|
502
|
+
collections_reorder: collectionsReorderSchema,
|
|
503
|
+
collections_archive: collectionsArchiveSchema,
|
|
504
|
+
collections_unarchive: collectionsUnarchiveSchema,
|
|
505
|
+
collections_like: collectionsLikeSchema,
|
|
506
|
+
collections_unlike: collectionsUnlikeSchema,
|
|
507
|
+
collections_liked_list: collectionsLikedListSchema,
|
|
508
|
+
collections_search: collectionsSearchSchema,
|
|
509
|
+
collections_browse: collectionsBrowseSchema,
|
|
510
|
+
collections_stats_get: collectionsStatsGetSchema,
|
|
511
|
+
collections_share_url: collectionsShareUrlSchema,
|
|
512
|
+
collections_publish: collectionsPublishSchema,
|
|
513
|
+
collections_unpublish: collectionsUnpublishSchema,
|
|
514
|
+
aliases_list: emptyToolSchema,
|
|
515
|
+
aliases_follow: aliasesFollowSchema,
|
|
516
|
+
aliases_unfollow: aliasesUnfollowSchema,
|
|
517
|
+
aliases_following_list: aliasesFollowingListSchema,
|
|
518
|
+
profile_get: emptyToolSchema,
|
|
519
|
+
profile_update: profileUpdateSchema,
|
|
520
|
+
collaborators_list: collaboratorsListSchema,
|
|
521
|
+
collaborators_invite: collaboratorsInviteSchema,
|
|
522
|
+
collaborators_revoke: collaboratorsRevokeSchema,
|
|
523
|
+
collaborators_invites_list: collaboratorsInvitesListSchema,
|
|
524
|
+
collaborators_invites_received: emptyToolSchema,
|
|
525
|
+
collaborators_invite_accept: collaboratorsInviteAcceptSchema,
|
|
526
|
+
collaborators_invite_decline: collaboratorsInviteDeclineSchema,
|
|
527
|
+
media_list: mediaListSchema,
|
|
528
|
+
media_get: mediaGetSchema,
|
|
529
|
+
media_search: mediaSearchSchema,
|
|
530
|
+
media_batch_list: mediaBatchListSchema,
|
|
531
|
+
media_download: mediaDownloadSchema,
|
|
142
532
|
media_create: mediaCreateSchema,
|
|
143
533
|
media_update: mediaUpdateSchema,
|
|
144
|
-
ui_state_set: uiStateSetSchema,
|
|
145
534
|
media_describe: mediaDescribeSchema,
|
|
535
|
+
media_replace: mediaReplaceSchema,
|
|
536
|
+
media_delete: mediaDeleteSchema,
|
|
537
|
+
media_restore: mediaRestoreSchema,
|
|
538
|
+
media_move: mediaMoveSchema,
|
|
539
|
+
media_copy: mediaCopySchema,
|
|
540
|
+
media_reorder: mediaReorderSchema,
|
|
541
|
+
media_archive: mediaArchiveSchema,
|
|
542
|
+
media_unarchive: mediaUnarchiveSchema,
|
|
543
|
+
media_text_note_add: mediaTextNoteAddSchema,
|
|
544
|
+
media_text_note_get: mediaTextNoteGetSchema,
|
|
545
|
+
media_text_note_update: mediaTextNoteUpdateSchema,
|
|
546
|
+
media_text_note_delete: mediaTextNoteDeleteSchema,
|
|
146
547
|
};
|
package/package.json
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@zegazone_mcp/mcp",
|
|
3
|
-
"version": "2.0.
|
|
4
|
-
"type": "module",
|
|
5
|
-
"description": "MCP server wrapper for Zegazone thirdparty-v1 API",
|
|
6
|
-
"publishConfig": {
|
|
7
|
-
"access": "public"
|
|
8
|
-
},
|
|
9
|
-
"bin": {
|
|
10
|
-
"zegazone-mcp": "dist/index.js"
|
|
11
|
-
},
|
|
12
|
-
"files": [
|
|
13
|
-
"dist/",
|
|
14
|
-
"README.md",
|
|
15
|
-
"scripts/oauth-pair.mjs"
|
|
16
|
-
],
|
|
17
|
-
"scripts": {
|
|
18
|
-
"build": "tsc -p tsconfig.json && node scripts/add-shebang.mjs",
|
|
19
|
-
"start": "node dist/index.js",
|
|
20
|
-
"dev": "tsx src/index.ts",
|
|
21
|
-
"oauth-pair": "node scripts/oauth-pair.mjs",
|
|
22
|
-
"smoke": "node tests/smoke.mjs",
|
|
23
|
-
"smoke:full": "node tests/smoke-thirdparty-v1.mjs",
|
|
24
|
-
"test:error-format": "npm run build && node tests/error-format.mjs",
|
|
25
|
-
"test:token-provider": "npm run build && node tests/token-provider-file-priority.mjs",
|
|
26
|
-
"test": "npm run build && node tests/error-format.mjs && node tests/token-provider-file-priority.mjs"
|
|
27
|
-
},
|
|
28
|
-
"dependencies": {
|
|
29
|
-
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
30
|
-
"zod": "^3.24.1"
|
|
31
|
-
},
|
|
32
|
-
"devDependencies": {
|
|
33
|
-
"@types/node": "^22.10.2",
|
|
34
|
-
"tsx": "^4.19.2",
|
|
35
|
-
"typescript": "^5.8.3"
|
|
36
|
-
}
|
|
37
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@zegazone_mcp/mcp",
|
|
3
|
+
"version": "2.0.4",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "MCP server wrapper for Zegazone thirdparty-v1 API",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"bin": {
|
|
10
|
+
"zegazone-mcp": "dist/index.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist/",
|
|
14
|
+
"README.md",
|
|
15
|
+
"scripts/oauth-pair.mjs"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc -p tsconfig.json && node scripts/add-shebang.mjs",
|
|
19
|
+
"start": "node dist/index.js",
|
|
20
|
+
"dev": "tsx src/index.ts",
|
|
21
|
+
"oauth-pair": "node scripts/oauth-pair.mjs",
|
|
22
|
+
"smoke": "node tests/smoke.mjs",
|
|
23
|
+
"smoke:full": "node tests/smoke-thirdparty-v1.mjs",
|
|
24
|
+
"test:error-format": "npm run build && node tests/error-format.mjs",
|
|
25
|
+
"test:token-provider": "npm run build && node tests/token-provider-file-priority.mjs",
|
|
26
|
+
"test": "npm run build && node tests/error-format.mjs && node tests/token-provider-file-priority.mjs"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
30
|
+
"zod": "^3.24.1"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@types/node": "^22.10.2",
|
|
34
|
+
"tsx": "^4.19.2",
|
|
35
|
+
"typescript": "^5.8.3"
|
|
36
|
+
}
|
|
37
|
+
}
|