@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/README.md +765 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +35 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +150 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +480 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +9 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +173 -0
- package/dist/server.js.map +1 -0
- package/dist/tools.d.ts +409 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +626 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +136 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +39 -0
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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"}
|