@zegazone_mcp/mcp 2.0.3 → 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 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.
@@ -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: z.number().int().positive().optional(),
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: z.number().int().positive(),
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: z.number().int().positive(),
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: z.number().int().positive().nullable().optional(),
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: z.number().int().positive(),
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: z.enum(["plain", "markdown", "code"]).optional(),
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: z.number().int().positive().nullable().optional(),
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: z.number().int().positive().nullable().optional(),
124
- media_id: z.number().int().positive().nullable().optional(),
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,19 +259,19 @@ export const uiStateSetSchema = z
133
259
  export const mediaDescribeSchema = z
134
260
  .object({
135
261
  args: z.record(z.unknown()).optional(),
136
- media_id: z.number().int().positive(),
262
+ media_id: mediaIdSchema,
137
263
  })
138
264
  .catchall(z.unknown());
139
265
  export const mediaGetSchema = z
140
266
  .object({
141
267
  args: z.record(z.unknown()).optional(),
142
- media_id: z.number().int().positive(),
268
+ media_id: mediaIdSchema,
143
269
  })
144
270
  .catchall(z.unknown());
145
271
  export const collectionsGetSchema = z
146
272
  .object({
147
273
  args: z.record(z.unknown()).optional(),
148
- collection_id: z.number().int().positive(),
274
+ collection_id: collectionIdSchema,
149
275
  })
150
276
  .catchall(z.unknown());
151
277
  export const collectionsGetBySlugSchema = z
@@ -159,16 +285,16 @@ export const mediaSearchSchema = z
159
285
  .object({
160
286
  args: z.record(z.unknown()).optional(),
161
287
  query: z.string().min(1).describe("Search text matched against name, description, and tags."),
162
- collection_id: z.number().int().positive().optional(),
288
+ collection_id: collectionIdSchema.optional(),
163
289
  include_archived: z.boolean().optional(),
164
- limit: z.number().int().positive().optional(),
165
- offset: z.number().int().min(0).optional(),
290
+ limit: limitSchema,
291
+ offset: offsetSchema,
166
292
  })
167
293
  .catchall(z.unknown());
168
294
  export const mediaListSchema = z
169
295
  .object({
170
296
  args: z.record(z.unknown()).optional(),
171
- collection_id: z.number().int().positive().optional(),
297
+ collection_id: collectionIdSchema.optional(),
172
298
  tag: z.string().optional(),
173
299
  tags: tagsSchema,
174
300
  name_contains: z.string().optional(),
@@ -179,20 +305,243 @@ export const mediaListSchema = z
179
305
  created_before: z.string().optional(),
180
306
  is_nsfw: z.boolean().optional(),
181
307
  include_archived: z.boolean().optional(),
182
- limit: z.number().int().positive().optional(),
183
- offset: z.number().int().min(0).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."),
184
484
  })
185
485
  .catchall(z.unknown());
186
486
  export const TYPED_TOOL_SCHEMAS = {
187
- collections_create: collectionsCreateSchema,
188
- collections_update: collectionsUpdateSchema,
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,
189
494
  collections_get: collectionsGetSchema,
190
495
  collections_get_by_slug: collectionsGetBySlugSchema,
191
- media_create: mediaCreateSchema,
192
- media_update: mediaUpdateSchema,
496
+ collections_batch_get: collectionsBatchGetSchema,
497
+ collections_export: collectionsExportSchema,
498
+ collections_create: collectionsCreateSchema,
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,
193
527
  media_list: mediaListSchema,
194
528
  media_get: mediaGetSchema,
195
529
  media_search: mediaSearchSchema,
196
- ui_state_set: uiStateSetSchema,
530
+ media_batch_list: mediaBatchListSchema,
531
+ media_download: mediaDownloadSchema,
532
+ media_create: mediaCreateSchema,
533
+ media_update: mediaUpdateSchema,
197
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,
198
547
  };
package/package.json CHANGED
@@ -1,37 +1,37 @@
1
- {
2
- "name": "@zegazone_mcp/mcp",
3
- "version": "2.0.3",
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
+ }