@mybe/contensa-mcp 1.0.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.
package/dist/tools.js ADDED
@@ -0,0 +1,626 @@
1
+ // MCP Tools definitions for Contensa CMS
2
+ import { z } from "zod";
3
+ // Schema definitions for tool inputs
4
+ export const schemas = {
5
+ // Project tools
6
+ listProjects: z.object({}),
7
+ getProject: z.object({
8
+ projectId: z.string().describe("The project ID"),
9
+ }),
10
+ setActiveProject: z.object({
11
+ projectId: z.string().describe("The project ID to set as active"),
12
+ }),
13
+ setActiveEnvironment: z.object({
14
+ environmentId: z.string().describe("The environment ID or slug to set as active (e.g., 'master', 'dev', or UUID)"),
15
+ }),
16
+ // Content Type tools
17
+ listContentTypes: z.object({
18
+ projectId: z.string().optional().describe("Project ID (uses active project if not provided)"),
19
+ }),
20
+ getContentType: z.object({
21
+ contentTypeId: z.string().describe("The content type ID"),
22
+ }),
23
+ createContentType: z.object({
24
+ name: z.string().describe("Name of the content type (e.g., 'Blog Post', 'Product')"),
25
+ description: z.string().optional().describe("Description of the content type"),
26
+ projectId: z.string().optional().describe("Project ID (uses active project if not provided)"),
27
+ }),
28
+ updateContentType: z.object({
29
+ contentTypeId: z.string().describe("The content type ID to update"),
30
+ name: z.string().optional().describe("New name for the content type"),
31
+ description: z.string().optional().describe("New description"),
32
+ }),
33
+ deleteContentType: z.object({
34
+ contentTypeId: z.string().describe("The content type ID to delete"),
35
+ }),
36
+ // Field tools
37
+ listFields: z.object({
38
+ contentTypeId: z.string().describe("The content type ID"),
39
+ }),
40
+ createField: z.object({
41
+ contentTypeId: z.string().describe("The content type ID to add the field to"),
42
+ name: z.string().describe("Field name (will be converted to API name)"),
43
+ kind: z.enum([
44
+ "short-text",
45
+ "long-text",
46
+ "number",
47
+ "date",
48
+ "boolean",
49
+ "media",
50
+ "list",
51
+ "reference",
52
+ "references-many",
53
+ ]).describe("Field type"),
54
+ required: z.boolean().optional().describe("Whether the field is required"),
55
+ targetContentTypeId: z.string().optional().describe("Target content type ID for reference fields"),
56
+ }),
57
+ updateField: z.object({
58
+ fieldId: z.string().describe("The field ID to update"),
59
+ name: z.string().optional().describe("New field name"),
60
+ kind: z.enum([
61
+ "short-text",
62
+ "long-text",
63
+ "number",
64
+ "date",
65
+ "boolean",
66
+ "media",
67
+ "list",
68
+ "reference",
69
+ "references-many",
70
+ ]).optional().describe("New field type"),
71
+ required: z.boolean().optional().describe("Whether the field is required"),
72
+ }),
73
+ deleteField: z.object({
74
+ fieldId: z.string().describe("The field ID to delete"),
75
+ }),
76
+ // Content Entry tools
77
+ listContentEntries: z.object({
78
+ contentTypeId: z.string().describe("The content type ID"),
79
+ status: z.enum(["draft", "published", "archived"]).optional().describe("Filter by status"),
80
+ limit: z.number().optional().describe("Maximum number of entries to return"),
81
+ }),
82
+ getContentEntry: z.object({
83
+ entryId: z.string().describe("The content entry ID"),
84
+ }),
85
+ createContentEntry: z.object({
86
+ contentTypeId: z.string().describe("The content type ID"),
87
+ projectId: z.string().optional().describe("Project ID (uses active project if not provided)"),
88
+ data: z.record(z.unknown()).describe("Field values as key-value pairs. Keys must be field API names (e.g., 'title', 'description'), NOT field IDs or display names. IMPORTANT: For optional fields (especially media fields), OMIT the field entirely rather than passing empty objects {}. Empty objects cause frontend errors. Only include fields that have actual values."),
89
+ status: z.enum(["draft", "published"]).optional().describe("Entry status (default: draft)"),
90
+ userId: z.string().optional().describe("User ID for the operation (uses config userId if not provided)"),
91
+ locale: z.string().optional().describe("Locale code for the entry (default: en-US)"),
92
+ }),
93
+ updateContentEntry: z.object({
94
+ entryId: z.string().describe("The content entry ID to update"),
95
+ data: z.record(z.unknown()).optional().describe("Updated field values"),
96
+ status: z.enum(["draft", "published", "archived"]).optional().describe("New status"),
97
+ }),
98
+ deleteContentEntry: z.object({
99
+ entryId: z.string().describe("The content entry ID to delete"),
100
+ }),
101
+ publishContentEntry: z.object({
102
+ entryId: z.string().describe("The content entry ID to publish"),
103
+ }),
104
+ unpublishContentEntry: z.object({
105
+ entryId: z.string().describe("The content entry ID to unpublish"),
106
+ }),
107
+ // Media tools
108
+ listMediaAssets: z.object({
109
+ projectId: z.string().optional().describe("Project ID (uses active project if not provided)"),
110
+ }),
111
+ getMediaAsset: z.object({
112
+ assetId: z.string().describe("The media asset ID"),
113
+ }),
114
+ deleteMediaAsset: z.object({
115
+ assetId: z.string().describe("The media asset ID to delete"),
116
+ }),
117
+ // AI tools
118
+ suggestFields: z.object({
119
+ contentTypeName: z.string().describe("Name of the content type to suggest fields for"),
120
+ existingFields: z.array(z.object({
121
+ apiName: z.string(),
122
+ kind: z.string(),
123
+ })).optional().describe("Existing fields to consider"),
124
+ }),
125
+ generateSchema: z.object({
126
+ description: z.string().describe("Description of the content type to generate schema for"),
127
+ }),
128
+ // Environment tools
129
+ listEnvironments: z.object({
130
+ projectId: z.string().optional().describe("Project ID (uses active project if not provided)"),
131
+ }),
132
+ getEnvironment: z.object({
133
+ environmentId: z.string().describe("The environment ID"),
134
+ }),
135
+ createEnvironment: z.object({
136
+ name: z.string().describe("Name of the environment (e.g., 'Staging', 'Development')"),
137
+ slug: z.string().describe("URL-friendly slug (e.g., 'staging', 'dev')"),
138
+ description: z.string().optional().describe("Description of the environment"),
139
+ sourceEnvironmentId: z.string().optional().describe("Source environment ID to clone from (optional)"),
140
+ projectId: z.string().optional().describe("Project ID (uses active project if not provided)"),
141
+ }),
142
+ updateEnvironment: z.object({
143
+ environmentId: z.string().describe("The environment ID to update"),
144
+ name: z.string().optional().describe("New name for the environment"),
145
+ description: z.string().optional().describe("New description"),
146
+ status: z.enum(["active", "inactive"]).optional().describe("Environment status"),
147
+ }),
148
+ deleteEnvironment: z.object({
149
+ environmentId: z.string().describe("The environment ID to delete"),
150
+ }),
151
+ mergeEnvironment: z.object({
152
+ targetEnvironmentId: z.string().describe("The target environment ID to merge into"),
153
+ sourceEnvironmentId: z.string().describe("The source environment ID to merge from"),
154
+ dryRun: z.boolean().optional().describe("If true, preview conflicts without making changes (default: false)"),
155
+ defaultStrategy: z.enum(["replace", "skip", "merge", "create-new"]).optional().describe("Default strategy for handling conflicts (default: skip)"),
156
+ contentTypeResolutions: z.array(z.object({
157
+ contentTypeId: z.string(),
158
+ strategy: z.enum(["replace", "skip", "merge", "create-new"]),
159
+ })).optional().describe("Specific resolution strategies for content types"),
160
+ entryResolutions: z.array(z.object({
161
+ entryId: z.string(),
162
+ fieldName: z.string(),
163
+ strategy: z.enum(["replace", "skip", "merge", "create-new"]),
164
+ })).optional().describe("Specific resolution strategies for entry fields"),
165
+ requireMasterApproval: z.boolean().optional().describe("Require explicit approval when merging into master (default: true)"),
166
+ }),
167
+ syncEnvironment: z.object({
168
+ targetEnvironmentId: z.string().describe("The target environment ID to sync to"),
169
+ sourceEnvironmentId: z.string().describe("The source environment ID to sync from"),
170
+ }),
171
+ // Locale tools
172
+ getSupportedLocales: z.object({}),
173
+ listLocaleVariants: z.object({
174
+ entryId: z.string().describe("The content entry ID to get locale variants for"),
175
+ }),
176
+ createLocaleVariant: z.object({
177
+ entryId: z.string().describe("The content entry ID to create a locale variant for"),
178
+ locale: z.string().describe("Target locale code (e.g., 'fr-FR', 'es-ES', 'ja-JP'). Use contensa_get_supported_locales to see all available locales."),
179
+ translateContent: z.boolean().describe("REQUIRED: You MUST ask the user explicitly: 'Do you want to translate the content using AI?' If true, uses AI to translate text fields to the target language. If false, copies content as-is without translation."),
180
+ translateReferences: z.boolean().describe("REQUIRED: You MUST ask the user explicitly: 'Do you want to also create locale variants for all referenced entries?' If true, recursively creates locale variants for all referenced entries (can create many entries). If false, only creates a variant for the main entry."),
181
+ }),
182
+ };
183
+ // Tool definitions for MCP
184
+ export const toolDefinitions = [
185
+ // Project tools
186
+ {
187
+ name: "contensa_list_projects",
188
+ description: "List all projects the user has access to",
189
+ inputSchema: schemas.listProjects,
190
+ },
191
+ {
192
+ name: "contensa_get_project",
193
+ description: "Get details of a specific project",
194
+ inputSchema: schemas.getProject,
195
+ },
196
+ {
197
+ name: "contensa_set_active_project",
198
+ description: "Set the active project for subsequent operations",
199
+ inputSchema: schemas.setActiveProject,
200
+ },
201
+ {
202
+ name: "contensa_set_active_environment",
203
+ description: "Set the active environment for subsequent content operations (defaults to master if not set)",
204
+ inputSchema: schemas.setActiveEnvironment,
205
+ },
206
+ // Content Type tools
207
+ {
208
+ name: "contensa_list_content_types",
209
+ description: "List all content types (schemas) in a project",
210
+ inputSchema: schemas.listContentTypes,
211
+ },
212
+ {
213
+ name: "contensa_get_content_type",
214
+ description: "Get details of a specific content type including its fields",
215
+ inputSchema: schemas.getContentType,
216
+ },
217
+ {
218
+ name: "contensa_create_content_type",
219
+ description: "Create a new content type (schema) in the project",
220
+ inputSchema: schemas.createContentType,
221
+ },
222
+ {
223
+ name: "contensa_update_content_type",
224
+ description: "Update an existing content type",
225
+ inputSchema: schemas.updateContentType,
226
+ },
227
+ {
228
+ name: "contensa_delete_content_type",
229
+ description: "Delete a content type and all its entries",
230
+ inputSchema: schemas.deleteContentType,
231
+ },
232
+ // Field tools
233
+ {
234
+ name: "contensa_list_fields",
235
+ description: "List all fields of a content type",
236
+ inputSchema: schemas.listFields,
237
+ },
238
+ {
239
+ name: "contensa_create_field",
240
+ description: "Add a new field to a content type",
241
+ inputSchema: schemas.createField,
242
+ },
243
+ {
244
+ name: "contensa_update_field",
245
+ description: "Update an existing field",
246
+ inputSchema: schemas.updateField,
247
+ },
248
+ {
249
+ name: "contensa_delete_field",
250
+ description: "Delete a field from a content type",
251
+ inputSchema: schemas.deleteField,
252
+ },
253
+ // Content Entry tools
254
+ {
255
+ name: "contensa_list_content_entries",
256
+ description: "List content entries of a specific content type",
257
+ inputSchema: schemas.listContentEntries,
258
+ },
259
+ {
260
+ name: "contensa_get_content_entry",
261
+ description: "Get a specific content entry with all its data",
262
+ inputSchema: schemas.getContentEntry,
263
+ },
264
+ {
265
+ name: "contensa_create_content_entry",
266
+ description: "Create a new content entry",
267
+ inputSchema: schemas.createContentEntry,
268
+ },
269
+ {
270
+ name: "contensa_update_content_entry",
271
+ description: "Update an existing content entry",
272
+ inputSchema: schemas.updateContentEntry,
273
+ },
274
+ {
275
+ name: "contensa_delete_content_entry",
276
+ description: "Delete a content entry",
277
+ inputSchema: schemas.deleteContentEntry,
278
+ },
279
+ {
280
+ name: "contensa_publish_content_entry",
281
+ description: "Publish a content entry (change status to published)",
282
+ inputSchema: schemas.publishContentEntry,
283
+ },
284
+ {
285
+ name: "contensa_unpublish_content_entry",
286
+ description: "Unpublish a content entry (change status to draft)",
287
+ inputSchema: schemas.unpublishContentEntry,
288
+ },
289
+ // Media tools
290
+ {
291
+ name: "contensa_list_media_assets",
292
+ description: "List all media assets in a project",
293
+ inputSchema: schemas.listMediaAssets,
294
+ },
295
+ {
296
+ name: "contensa_get_media_asset",
297
+ description: "Get details of a specific media asset",
298
+ inputSchema: schemas.getMediaAsset,
299
+ },
300
+ {
301
+ name: "contensa_delete_media_asset",
302
+ description: "Delete a media asset",
303
+ inputSchema: schemas.deleteMediaAsset,
304
+ },
305
+ // AI tools
306
+ {
307
+ name: "contensa_suggest_fields",
308
+ description: "Use AI to suggest fields for a content type based on its name",
309
+ inputSchema: schemas.suggestFields,
310
+ },
311
+ {
312
+ name: "contensa_generate_schema",
313
+ description: "Use AI to generate a complete schema from a description",
314
+ inputSchema: schemas.generateSchema,
315
+ },
316
+ // Environment tools
317
+ {
318
+ name: "contensa_list_environments",
319
+ description: "List all environments for a project (e.g., master, staging, development)",
320
+ inputSchema: schemas.listEnvironments,
321
+ },
322
+ {
323
+ name: "contensa_get_environment",
324
+ description: "Get details of a specific environment",
325
+ inputSchema: schemas.getEnvironment,
326
+ },
327
+ {
328
+ name: "contensa_create_environment",
329
+ description: "Create a new environment (empty or cloned from another environment)",
330
+ inputSchema: schemas.createEnvironment,
331
+ },
332
+ {
333
+ name: "contensa_update_environment",
334
+ description: "Update an existing environment",
335
+ inputSchema: schemas.updateEnvironment,
336
+ },
337
+ {
338
+ name: "contensa_delete_environment",
339
+ description: "Delete an environment (master environment cannot be deleted)",
340
+ inputSchema: schemas.deleteEnvironment,
341
+ },
342
+ {
343
+ name: "contensa_merge_environment",
344
+ description: "Merge content from one environment to another. Supports dry-run mode to preview conflicts before merging. Use this to promote changes from dev/staging to master or between any environments.",
345
+ inputSchema: schemas.mergeEnvironment,
346
+ },
347
+ {
348
+ name: "contensa_sync_environment",
349
+ description: "Sync content from one environment to another (three-way merge - currently in development)",
350
+ inputSchema: schemas.syncEnvironment,
351
+ },
352
+ // Locale tools
353
+ {
354
+ name: "contensa_get_supported_locales",
355
+ description: "Get a list of all supported locales in the CMS. Returns locale codes, names, flags, and which is the default locale.",
356
+ inputSchema: schemas.getSupportedLocales,
357
+ },
358
+ {
359
+ name: "contensa_list_locale_variants",
360
+ description: "List all locale variants of a content entry. Each entry can have multiple locale variants (e.g., English, French, Spanish versions of the same content).",
361
+ inputSchema: schemas.listLocaleVariants,
362
+ },
363
+ {
364
+ name: "contensa_create_locale_variant",
365
+ description: "Create a new locale variant of a content entry. IMPORTANT: Before calling this tool, ask the user two questions: 1) Do you want to translate the content using AI? 2) Do you want to also create locale variants for referenced entries? This ensures the user understands the implications of each option.",
366
+ inputSchema: schemas.createLocaleVariant,
367
+ },
368
+ ];
369
+ // Tool handlers
370
+ export const toolHandlers = {
371
+ // Project tools
372
+ contensa_list_projects: async (client) => {
373
+ const projects = await client.getProjects();
374
+ return { projects, count: projects.length };
375
+ },
376
+ contensa_get_project: async (client, args) => {
377
+ const project = await client.getProject(args.projectId);
378
+ return project;
379
+ },
380
+ contensa_set_active_project: async (client, args) => {
381
+ client.setProjectId(args.projectId);
382
+ return { success: true, activeProjectId: args.projectId };
383
+ },
384
+ contensa_set_active_environment: async (client, args) => {
385
+ client.setEnvironmentId(args.environmentId);
386
+ return { success: true, activeEnvironmentId: args.environmentId };
387
+ },
388
+ // Content Type tools
389
+ contensa_list_content_types: async (client, args) => {
390
+ const contentTypes = await client.getContentTypes(args.projectId);
391
+ return { contentTypes, count: contentTypes.length };
392
+ },
393
+ contensa_get_content_type: async (client, args) => {
394
+ const contentType = await client.getContentType(args.contentTypeId);
395
+ const fields = await client.getFields(args.contentTypeId);
396
+ return { ...contentType, fields };
397
+ },
398
+ contensa_create_content_type: async (client, args) => {
399
+ const contentType = await client.createContentType({
400
+ name: args.name,
401
+ description: args.description,
402
+ }, args.projectId);
403
+ return contentType;
404
+ },
405
+ contensa_update_content_type: async (client, args) => {
406
+ const contentType = await client.updateContentType(args.contentTypeId, {
407
+ name: args.name,
408
+ description: args.description,
409
+ });
410
+ return contentType;
411
+ },
412
+ contensa_delete_content_type: async (client, args) => {
413
+ await client.deleteContentType(args.contentTypeId);
414
+ return { success: true, deletedId: args.contentTypeId };
415
+ },
416
+ // Field tools
417
+ contensa_list_fields: async (client, args) => {
418
+ const fields = await client.getFields(args.contentTypeId);
419
+ return { fields, count: fields.length };
420
+ },
421
+ contensa_create_field: async (client, args) => {
422
+ const settings = {};
423
+ if (args.targetContentTypeId) {
424
+ settings.targetContentTypeId = args.targetContentTypeId;
425
+ }
426
+ const field = await client.createField({
427
+ contentTypeId: args.contentTypeId,
428
+ apiName: args.name,
429
+ kind: args.kind,
430
+ isRequired: args.required,
431
+ settings,
432
+ });
433
+ return field;
434
+ },
435
+ contensa_update_field: async (client, args) => {
436
+ const field = await client.updateField(args.fieldId, {
437
+ apiName: args.name,
438
+ kind: args.kind,
439
+ isRequired: args.required,
440
+ });
441
+ return field;
442
+ },
443
+ contensa_delete_field: async (client, args) => {
444
+ await client.deleteField(args.fieldId);
445
+ return { success: true, deletedId: args.fieldId };
446
+ },
447
+ // Content Entry tools
448
+ contensa_list_content_entries: async (client, args) => {
449
+ const result = await client.getContentEntries(args.contentTypeId, {
450
+ status: args.status,
451
+ limit: args.limit,
452
+ });
453
+ return result;
454
+ },
455
+ contensa_get_content_entry: async (client, args) => {
456
+ const entry = await client.getContentEntry(args.entryId);
457
+ return entry;
458
+ },
459
+ contensa_create_content_entry: async (client, args) => {
460
+ try {
461
+ const entry = await client.createContentEntry({
462
+ contentTypeId: args.contentTypeId,
463
+ projectId: args.projectId,
464
+ data: args.data,
465
+ status: args.status,
466
+ userId: args.userId,
467
+ locale: args.locale,
468
+ });
469
+ return entry;
470
+ }
471
+ catch (error) {
472
+ // Enhanced error handling for missing required fields
473
+ if (error.message?.includes("Missing required fields")) {
474
+ const errorData = error.data;
475
+ const missingFields = errorData?.missingFields || [];
476
+ throw new Error(`Missing required fields: ${missingFields.join(", ")}. ` +
477
+ `Please ensure all required fields are provided in the 'data' object using their API names. ` +
478
+ `Use contensa_list_fields to see all fields and their API names for this content type. ` +
479
+ `NOTE: For optional fields you don't have values for, OMIT them entirely from the data object - do NOT pass empty objects {}.`);
480
+ }
481
+ // Enhanced error for missing projectId or userId
482
+ if (error.message?.includes("Project ID is required")) {
483
+ throw new Error(`Project ID is required. Either set an active project using contensa_set_active_project, ` +
484
+ `or provide projectId in the input.`);
485
+ }
486
+ if (error.message?.includes("User ID is required")) {
487
+ throw new Error(`User ID is required. Ensure CONTENSA_USER_ID is set in your MCP configuration, ` +
488
+ `or provide userId in the input.`);
489
+ }
490
+ // Re-throw other errors
491
+ throw error;
492
+ }
493
+ },
494
+ contensa_update_content_entry: async (client, args) => {
495
+ const entry = await client.updateContentEntry(args.entryId, {
496
+ data: args.data,
497
+ status: args.status,
498
+ });
499
+ return entry;
500
+ },
501
+ contensa_delete_content_entry: async (client, args) => {
502
+ await client.deleteContentEntry(args.entryId);
503
+ return { success: true, deletedId: args.entryId };
504
+ },
505
+ contensa_publish_content_entry: async (client, args) => {
506
+ const entry = await client.publishContentEntry(args.entryId);
507
+ return entry;
508
+ },
509
+ contensa_unpublish_content_entry: async (client, args) => {
510
+ const entry = await client.unpublishContentEntry(args.entryId);
511
+ return entry;
512
+ },
513
+ // Media tools
514
+ contensa_list_media_assets: async (client, args) => {
515
+ const assets = await client.getMediaAssets(args.projectId);
516
+ return { assets, count: assets.length };
517
+ },
518
+ contensa_get_media_asset: async (client, args) => {
519
+ const asset = await client.getMediaAsset(args.assetId);
520
+ return asset;
521
+ },
522
+ contensa_delete_media_asset: async (client, args) => {
523
+ await client.deleteMediaAsset(args.assetId);
524
+ return { success: true, deletedId: args.assetId };
525
+ },
526
+ // AI tools
527
+ contensa_suggest_fields: async (client, args) => {
528
+ const suggestions = await client.generateFieldSuggestions(args.contentTypeName, args.existingFields);
529
+ return { suggestions };
530
+ },
531
+ contensa_generate_schema: async (client, args) => {
532
+ const fields = await client.generateSchema(args.description);
533
+ return { fields };
534
+ },
535
+ // Environment tools
536
+ contensa_list_environments: async (client, args) => {
537
+ const environments = await client.getEnvironments(args.projectId);
538
+ return { environments, count: environments.length };
539
+ },
540
+ contensa_get_environment: async (client, args) => {
541
+ const environment = await client.getEnvironment(args.environmentId);
542
+ return environment;
543
+ },
544
+ contensa_create_environment: async (client, args) => {
545
+ const environment = await client.createEnvironment({
546
+ name: args.name,
547
+ slug: args.slug,
548
+ description: args.description,
549
+ sourceEnvironmentId: args.sourceEnvironmentId,
550
+ projectId: args.projectId,
551
+ });
552
+ return environment;
553
+ },
554
+ contensa_update_environment: async (client, args) => {
555
+ const environment = await client.updateEnvironment(args.environmentId, {
556
+ name: args.name,
557
+ description: args.description,
558
+ status: args.status,
559
+ });
560
+ return environment;
561
+ },
562
+ contensa_delete_environment: async (client, args) => {
563
+ await client.deleteEnvironment(args.environmentId);
564
+ return { success: true, deletedId: args.environmentId };
565
+ },
566
+ contensa_merge_environment: async (client, args) => {
567
+ // Convert string booleans to actual booleans (MCP protocol may pass as strings)
568
+ const dryRun = args.dryRun !== undefined
569
+ ? (typeof args.dryRun === 'string' ? args.dryRun === 'true' : Boolean(args.dryRun))
570
+ : undefined;
571
+ const requireMasterApproval = args.requireMasterApproval !== undefined
572
+ ? (typeof args.requireMasterApproval === 'string' ? args.requireMasterApproval === 'true' : Boolean(args.requireMasterApproval))
573
+ : undefined;
574
+ const result = await client.mergeEnvironment({
575
+ targetEnvironmentId: args.targetEnvironmentId,
576
+ sourceEnvironmentId: args.sourceEnvironmentId,
577
+ dryRun,
578
+ defaultStrategy: args.defaultStrategy,
579
+ contentTypeResolutions: args.contentTypeResolutions,
580
+ entryResolutions: args.entryResolutions,
581
+ requireMasterApproval,
582
+ });
583
+ return result;
584
+ },
585
+ contensa_sync_environment: async (client, args) => {
586
+ const result = await client.syncEnvironment({
587
+ targetEnvironmentId: args.targetEnvironmentId,
588
+ sourceEnvironmentId: args.sourceEnvironmentId,
589
+ });
590
+ return result;
591
+ },
592
+ // Locale tools
593
+ contensa_get_supported_locales: async (client) => {
594
+ const locales = client.getSupportedLocales();
595
+ return {
596
+ locales,
597
+ count: locales.length,
598
+ defaultLocale: locales.find(l => l.isDefault)?.code || "en-US"
599
+ };
600
+ },
601
+ contensa_list_locale_variants: async (client, args) => {
602
+ const variants = await client.listLocaleVariants(args.entryId);
603
+ return {
604
+ variants,
605
+ count: variants.length,
606
+ locales: variants.map(v => v.locale || "en-US")
607
+ };
608
+ },
609
+ contensa_create_locale_variant: async (client, args) => {
610
+ const result = await client.createLocaleVariant({
611
+ entryId: args.entryId,
612
+ locale: args.locale,
613
+ translateContent: args.translateContent,
614
+ translateReferences: args.translateReferences,
615
+ });
616
+ return {
617
+ variant: result.data,
618
+ createdEntries: result.createdEntries || [],
619
+ totalCreated: (result.createdEntries?.length || 0) + 1, // +1 for the main variant
620
+ message: result.message,
621
+ translationUsed: args.translateContent,
622
+ referencesTranslated: args.translateReferences,
623
+ };
624
+ },
625
+ };
626
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}