@strapi/content-manager 5.46.1 → 5.47.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/admin/history/components/VersionInputRenderer.js +63 -25
- package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.mjs +62 -26
- package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +4 -4
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +4 -4
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/src/history/components/VersionInputRenderer.d.ts +27 -1
- package/dist/admin/translations/sk.json.js +175 -9
- package/dist/admin/translations/sk.json.js.map +1 -1
- package/dist/admin/translations/sk.json.mjs +175 -9
- package/dist/admin/translations/sk.json.mjs.map +1 -1
- package/dist/server/bootstrap.js +4 -0
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +4 -0
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/controllers/collection-types.js +9 -5
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +10 -6
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/mcp/derive-content-type-mcp-tools.js +524 -0
- package/dist/server/mcp/derive-content-type-mcp-tools.js.map +1 -0
- package/dist/server/mcp/derive-content-type-mcp-tools.mjs +518 -0
- package/dist/server/mcp/derive-content-type-mcp-tools.mjs.map +1 -0
- package/dist/server/mcp/handlers/collection-handlers.js +404 -0
- package/dist/server/mcp/handlers/collection-handlers.js.map +1 -0
- package/dist/server/mcp/handlers/collection-handlers.mjs +395 -0
- package/dist/server/mcp/handlers/collection-handlers.mjs.map +1 -0
- package/dist/server/mcp/handlers/constants.js +10 -0
- package/dist/server/mcp/handlers/constants.js.map +1 -0
- package/dist/server/mcp/handlers/constants.mjs +6 -0
- package/dist/server/mcp/handlers/constants.mjs.map +1 -0
- package/dist/server/mcp/handlers/single-type-handlers.js +344 -0
- package/dist/server/mcp/handlers/single-type-handlers.js.map +1 -0
- package/dist/server/mcp/handlers/single-type-handlers.mjs +336 -0
- package/dist/server/mcp/handlers/single-type-handlers.mjs.map +1 -0
- package/dist/server/mcp/permissions.js +138 -0
- package/dist/server/mcp/permissions.js.map +1 -0
- package/dist/server/mcp/permissions.mjs +131 -0
- package/dist/server/mcp/permissions.mjs.map +1 -0
- package/dist/server/mcp/register-content-manager-mcp-tools.js +30 -0
- package/dist/server/mcp/register-content-manager-mcp-tools.js.map +1 -0
- package/dist/server/mcp/register-content-manager-mcp-tools.mjs +28 -0
- package/dist/server/mcp/register-content-manager-mcp-tools.mjs.map +1 -0
- package/dist/server/mcp/schemas/blocks-schema.js +124 -0
- package/dist/server/mcp/schemas/blocks-schema.js.map +1 -0
- package/dist/server/mcp/schemas/blocks-schema.mjs +122 -0
- package/dist/server/mcp/schemas/blocks-schema.mjs.map +1 -0
- package/dist/server/mcp/schemas/data-schema.js +252 -0
- package/dist/server/mcp/schemas/data-schema.js.map +1 -0
- package/dist/server/mcp/schemas/data-schema.mjs +248 -0
- package/dist/server/mcp/schemas/data-schema.mjs.map +1 -0
- package/dist/server/mcp/schemas/filters-schema.js +111 -0
- package/dist/server/mcp/schemas/filters-schema.js.map +1 -0
- package/dist/server/mcp/schemas/filters-schema.mjs +107 -0
- package/dist/server/mcp/schemas/filters-schema.mjs.map +1 -0
- package/dist/server/mcp/schemas/input-schemas.js +18 -0
- package/dist/server/mcp/schemas/input-schemas.js.map +1 -0
- package/dist/server/mcp/schemas/input-schemas.mjs +13 -0
- package/dist/server/mcp/schemas/input-schemas.mjs.map +1 -0
- package/dist/server/mcp/schemas/output-schemas.js +48 -0
- package/dist/server/mcp/schemas/output-schemas.js.map +1 -0
- package/dist/server/mcp/schemas/output-schemas.mjs +44 -0
- package/dist/server/mcp/schemas/output-schemas.mjs.map +1 -0
- package/dist/server/mcp/schemas/sort-schema.js +80 -0
- package/dist/server/mcp/schemas/sort-schema.js.map +1 -0
- package/dist/server/mcp/schemas/sort-schema.mjs +76 -0
- package/dist/server/mcp/schemas/sort-schema.mjs.map +1 -0
- package/dist/server/mcp/utils.js +43 -0
- package/dist/server/mcp/utils.js.map +1 -0
- package/dist/server/mcp/utils.mjs +39 -0
- package/dist/server/mcp/utils.mjs.map +1 -0
- package/dist/server/services/index.js +1 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/permission-checker.js +4 -1
- package/dist/server/services/permission-checker.js.map +1 -1
- package/dist/server/services/permission-checker.mjs +1 -1
- package/dist/server/services/permission-checker.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +3 -3
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +3 -3
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +3 -3
- package/dist/server/src/mcp/derive-content-type-mcp-tools.d.ts +12 -0
- package/dist/server/src/mcp/derive-content-type-mcp-tools.d.ts.map +1 -0
- package/dist/server/src/mcp/handlers/collection-handlers.d.ts +69 -0
- package/dist/server/src/mcp/handlers/collection-handlers.d.ts.map +1 -0
- package/dist/server/src/mcp/handlers/constants.d.ts +4 -0
- package/dist/server/src/mcp/handlers/constants.d.ts.map +1 -0
- package/dist/server/src/mcp/handlers/index.d.ts +3 -0
- package/dist/server/src/mcp/handlers/index.d.ts.map +1 -0
- package/dist/server/src/mcp/handlers/single-type-handlers.d.ts +66 -0
- package/dist/server/src/mcp/handlers/single-type-handlers.d.ts.map +1 -0
- package/dist/server/src/mcp/permissions.d.ts +49 -0
- package/dist/server/src/mcp/permissions.d.ts.map +1 -0
- package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts +8 -0
- package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts.map +1 -0
- package/dist/server/src/mcp/schemas/blocks-schema.d.ts +8 -0
- package/dist/server/src/mcp/schemas/blocks-schema.d.ts.map +1 -0
- package/dist/server/src/mcp/schemas/data-schema.d.ts +36 -0
- package/dist/server/src/mcp/schemas/data-schema.d.ts.map +1 -0
- package/dist/server/src/mcp/schemas/filters-schema.d.ts +22 -0
- package/dist/server/src/mcp/schemas/filters-schema.d.ts.map +1 -0
- package/dist/server/src/mcp/schemas/index.d.ts +7 -0
- package/dist/server/src/mcp/schemas/index.d.ts.map +1 -0
- package/dist/server/src/mcp/schemas/input-schemas.d.ts +10 -0
- package/dist/server/src/mcp/schemas/input-schemas.d.ts.map +1 -0
- package/dist/server/src/mcp/schemas/output-schemas.d.ts +18 -0
- package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -0
- package/dist/server/src/mcp/schemas/sort-schema.d.ts +24 -0
- package/dist/server/src/mcp/schemas/sort-schema.d.ts.map +1 -0
- package/dist/server/src/mcp/types.d.ts +31 -0
- package/dist/server/src/mcp/types.d.ts.map +1 -0
- package/dist/server/src/mcp/utils.d.ts +21 -0
- package/dist/server/src/mcp/utils.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +3 -3
- package/dist/server/src/services/permission-checker.d.ts +13 -3
- package/dist/server/src/services/permission-checker.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
- package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/package.json +9 -7
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var strapiUtils = require('@strapi/utils');
|
|
4
|
+
var permissionChecker = require('../services/permission-checker.js');
|
|
5
|
+
var utils = require('./utils.js');
|
|
6
|
+
var permissions = require('./permissions.js');
|
|
7
|
+
require('./schemas/blocks-schema.js');
|
|
8
|
+
var inputSchemas = require('./schemas/input-schemas.js');
|
|
9
|
+
var dataSchema = require('./schemas/data-schema.js');
|
|
10
|
+
var sortSchema = require('./schemas/sort-schema.js');
|
|
11
|
+
var filtersSchema = require('./schemas/filters-schema.js');
|
|
12
|
+
var outputSchemas = require('./schemas/output-schemas.js');
|
|
13
|
+
var collectionHandlers = require('./handlers/collection-handlers.js');
|
|
14
|
+
var singleTypeHandlers = require('./handlers/single-type-handlers.js');
|
|
15
|
+
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Collection-type tool-definition builder
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
/**
|
|
20
|
+
* Derives the full set of `DerivedTool` definitions for a single collection-type model.
|
|
21
|
+
* Produces list/get/create/update/delete tools, plus publish/unpublish/discard_draft
|
|
22
|
+
* when draft-and-publish is enabled. Each tool's input/output schema is resolved
|
|
23
|
+
* per-request so RBAC field and locale constraints are applied at call time.
|
|
24
|
+
*/ const buildCollectionTools = (strapi, model, ctx)=>{
|
|
25
|
+
const uid = model.uid;
|
|
26
|
+
const slug = utils.slugifyUidForMcpToolName(uid);
|
|
27
|
+
const draftAndPublish = model.options?.draftAndPublish === true;
|
|
28
|
+
const { attributes } = model;
|
|
29
|
+
const runtimeLocaleSchema = permissions.buildLocaleSchema(ctx.localeCodes, ctx.defaultLocale);
|
|
30
|
+
const resolveReadFields = (context)=>permissions.getPermittedFields(strapi, context.userAbility, permissionChecker.ACTIONS.read, uid, attributes);
|
|
31
|
+
const resolveReadOutputSchema = (context)=>outputSchemas.buildDocumentOutputSchema(attributes, resolveReadFields(context));
|
|
32
|
+
const resolveListInputSchema = (context)=>{
|
|
33
|
+
const readFields = resolveReadFields(context);
|
|
34
|
+
const localeSchema = permissions.resolvePermittedLocaleSchema(strapi, context, permissionChecker.ACTIONS.read, uid, ctx.localeCodes, ctx.defaultLocale, runtimeLocaleSchema);
|
|
35
|
+
return strapiUtils.z.object({
|
|
36
|
+
locale: localeSchema,
|
|
37
|
+
status: inputSchemas.statusSchema,
|
|
38
|
+
page: inputSchemas.pageSchema,
|
|
39
|
+
pageSize: inputSchemas.pageSizeSchema,
|
|
40
|
+
sort: sortSchema.buildSortSchema(attributes, readFields),
|
|
41
|
+
filters: filtersSchema.buildFiltersSchema(attributes, readFields)
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
const resolveGetInputSchema = (context)=>{
|
|
45
|
+
const localeSchema = permissions.resolvePermittedLocaleSchema(strapi, context, permissionChecker.ACTIONS.read, uid, ctx.localeCodes, ctx.defaultLocale, runtimeLocaleSchema);
|
|
46
|
+
return strapiUtils.z.object({
|
|
47
|
+
documentId: inputSchemas.documentIdSchema,
|
|
48
|
+
locale: localeSchema,
|
|
49
|
+
status: inputSchemas.statusSchema
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
const resolveCreateInputSchema = (context)=>{
|
|
53
|
+
const writeFields = permissions.getPermittedFields(strapi, context.userAbility, permissionChecker.ACTIONS.create, uid, attributes);
|
|
54
|
+
const dataSchema$1 = dataSchema.buildDataSchema(strapi, model, attributes, writeFields);
|
|
55
|
+
const localeSchema = permissions.resolvePermittedLocaleSchema(strapi, context, permissionChecker.ACTIONS.create, uid, ctx.localeCodes, ctx.defaultLocale, runtimeLocaleSchema);
|
|
56
|
+
return strapiUtils.z.object({
|
|
57
|
+
data: dataSchema$1,
|
|
58
|
+
locale: localeSchema
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
const resolveUpdateInputSchema = (context)=>{
|
|
62
|
+
const writeFields = permissions.getPermittedFields(strapi, context.userAbility, permissionChecker.ACTIONS.update, uid, attributes);
|
|
63
|
+
const dataSchema$1 = dataSchema.buildDataSchema(strapi, model, attributes, writeFields);
|
|
64
|
+
const localeSchema = permissions.resolvePermittedLocaleSchema(strapi, context, permissionChecker.ACTIONS.update, uid, ctx.localeCodes, ctx.defaultLocale, runtimeLocaleSchema);
|
|
65
|
+
return strapiUtils.z.object({
|
|
66
|
+
documentId: inputSchemas.documentIdSchema,
|
|
67
|
+
data: dataSchema$1,
|
|
68
|
+
locale: localeSchema
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
const resolveDeleteInputSchema = (context)=>{
|
|
72
|
+
const localeSchema = permissions.resolvePermittedLocaleSchema(strapi, context, permissionChecker.ACTIONS.delete, uid, ctx.localeCodes, ctx.defaultLocale, runtimeLocaleSchema);
|
|
73
|
+
return strapiUtils.z.object({
|
|
74
|
+
documentId: inputSchemas.documentIdSchema,
|
|
75
|
+
locale: localeSchema
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
const resolvePublishInputSchema = (context)=>{
|
|
79
|
+
const localeSchema = permissions.resolvePermittedLocaleSchema(strapi, context, permissionChecker.ACTIONS.publish, uid, ctx.localeCodes, ctx.defaultLocale, runtimeLocaleSchema);
|
|
80
|
+
return strapiUtils.z.object({
|
|
81
|
+
documentId: inputSchemas.documentIdSchema,
|
|
82
|
+
locale: localeSchema
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
const resolveUnpublishInputSchema = (context)=>{
|
|
86
|
+
const localeSchema = permissions.resolvePermittedLocaleSchema(strapi, context, permissionChecker.ACTIONS.unpublish, uid, ctx.localeCodes, ctx.defaultLocale, runtimeLocaleSchema);
|
|
87
|
+
return strapiUtils.z.object({
|
|
88
|
+
documentId: inputSchemas.documentIdSchema,
|
|
89
|
+
locale: localeSchema,
|
|
90
|
+
discardDraft: strapiUtils.z.boolean().optional().describe('Also discard the draft when unpublishing.')
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
const resolveDiscardDraftInputSchema = (context)=>{
|
|
94
|
+
const localeSchema = permissions.resolvePermittedLocaleSchema(strapi, context, permissionChecker.ACTIONS.discard, uid, ctx.localeCodes, ctx.defaultLocale, runtimeLocaleSchema);
|
|
95
|
+
return strapiUtils.z.object({
|
|
96
|
+
documentId: inputSchemas.documentIdSchema,
|
|
97
|
+
locale: localeSchema
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
const tools = [
|
|
101
|
+
{
|
|
102
|
+
name: `list_${slug}`,
|
|
103
|
+
telemetry: {
|
|
104
|
+
source: 'content-manager',
|
|
105
|
+
name: 'list'
|
|
106
|
+
},
|
|
107
|
+
...utils.describeTool({
|
|
108
|
+
apiID: model.apiID,
|
|
109
|
+
uid,
|
|
110
|
+
operation: 'list'
|
|
111
|
+
}),
|
|
112
|
+
auth: {
|
|
113
|
+
policies: [
|
|
114
|
+
{
|
|
115
|
+
action: permissionChecker.ACTIONS.read,
|
|
116
|
+
subject: uid
|
|
117
|
+
}
|
|
118
|
+
]
|
|
119
|
+
},
|
|
120
|
+
resolveInputSchema: resolveListInputSchema,
|
|
121
|
+
resolveOutputSchema: (context)=>outputSchemas.buildListOutputSchema(attributes, resolveReadFields(context)),
|
|
122
|
+
createHandler: collectionHandlers.createCollectionListHandler(uid)
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: `get_${slug}`,
|
|
126
|
+
telemetry: {
|
|
127
|
+
source: 'content-manager',
|
|
128
|
+
name: 'get'
|
|
129
|
+
},
|
|
130
|
+
...utils.describeTool({
|
|
131
|
+
apiID: model.apiID,
|
|
132
|
+
uid,
|
|
133
|
+
operation: 'get'
|
|
134
|
+
}),
|
|
135
|
+
auth: {
|
|
136
|
+
policies: [
|
|
137
|
+
{
|
|
138
|
+
action: permissionChecker.ACTIONS.read,
|
|
139
|
+
subject: uid
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
},
|
|
143
|
+
resolveInputSchema: resolveGetInputSchema,
|
|
144
|
+
resolveOutputSchema: resolveReadOutputSchema,
|
|
145
|
+
createHandler: collectionHandlers.createCollectionGetHandler(uid)
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
name: `create_${slug}`,
|
|
149
|
+
telemetry: {
|
|
150
|
+
source: 'content-manager',
|
|
151
|
+
name: 'create'
|
|
152
|
+
},
|
|
153
|
+
...utils.describeTool({
|
|
154
|
+
apiID: model.apiID,
|
|
155
|
+
uid,
|
|
156
|
+
operation: 'create'
|
|
157
|
+
}),
|
|
158
|
+
auth: {
|
|
159
|
+
policies: [
|
|
160
|
+
{
|
|
161
|
+
action: permissionChecker.ACTIONS.create,
|
|
162
|
+
subject: uid
|
|
163
|
+
}
|
|
164
|
+
]
|
|
165
|
+
},
|
|
166
|
+
resolveInputSchema: resolveCreateInputSchema,
|
|
167
|
+
resolveOutputSchema: resolveReadOutputSchema,
|
|
168
|
+
createHandler: collectionHandlers.createCollectionCreateHandler(uid)
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: `update_${slug}`,
|
|
172
|
+
telemetry: {
|
|
173
|
+
source: 'content-manager',
|
|
174
|
+
name: 'update'
|
|
175
|
+
},
|
|
176
|
+
...utils.describeTool({
|
|
177
|
+
apiID: model.apiID,
|
|
178
|
+
uid,
|
|
179
|
+
operation: 'update'
|
|
180
|
+
}),
|
|
181
|
+
auth: {
|
|
182
|
+
policies: [
|
|
183
|
+
{
|
|
184
|
+
action: permissionChecker.ACTIONS.update,
|
|
185
|
+
subject: uid
|
|
186
|
+
}
|
|
187
|
+
]
|
|
188
|
+
},
|
|
189
|
+
resolveInputSchema: resolveUpdateInputSchema,
|
|
190
|
+
resolveOutputSchema: resolveReadOutputSchema,
|
|
191
|
+
createHandler: collectionHandlers.createCollectionUpdateHandler(uid)
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
name: `delete_${slug}`,
|
|
195
|
+
telemetry: {
|
|
196
|
+
source: 'content-manager',
|
|
197
|
+
name: 'delete'
|
|
198
|
+
},
|
|
199
|
+
...utils.describeTool({
|
|
200
|
+
apiID: model.apiID,
|
|
201
|
+
uid,
|
|
202
|
+
operation: 'delete'
|
|
203
|
+
}),
|
|
204
|
+
auth: {
|
|
205
|
+
policies: [
|
|
206
|
+
{
|
|
207
|
+
action: permissionChecker.ACTIONS.delete,
|
|
208
|
+
subject: uid
|
|
209
|
+
}
|
|
210
|
+
]
|
|
211
|
+
},
|
|
212
|
+
resolveInputSchema: resolveDeleteInputSchema,
|
|
213
|
+
resolveOutputSchema: (context)=>outputSchemas.buildDeleteOutputSchema(attributes, resolveReadFields(context)),
|
|
214
|
+
createHandler: collectionHandlers.createCollectionDeleteHandler(uid)
|
|
215
|
+
}
|
|
216
|
+
];
|
|
217
|
+
if (draftAndPublish === true) {
|
|
218
|
+
tools.push({
|
|
219
|
+
name: `publish_${slug}`,
|
|
220
|
+
telemetry: {
|
|
221
|
+
source: 'content-manager',
|
|
222
|
+
name: 'publish'
|
|
223
|
+
},
|
|
224
|
+
...utils.describeTool({
|
|
225
|
+
apiID: model.apiID,
|
|
226
|
+
uid,
|
|
227
|
+
operation: 'publish'
|
|
228
|
+
}),
|
|
229
|
+
auth: {
|
|
230
|
+
policies: [
|
|
231
|
+
{
|
|
232
|
+
action: permissionChecker.ACTIONS.publish,
|
|
233
|
+
subject: uid
|
|
234
|
+
}
|
|
235
|
+
]
|
|
236
|
+
},
|
|
237
|
+
resolveInputSchema: resolvePublishInputSchema,
|
|
238
|
+
resolveOutputSchema: resolveReadOutputSchema,
|
|
239
|
+
createHandler: collectionHandlers.createCollectionPublishHandler(uid)
|
|
240
|
+
}, {
|
|
241
|
+
name: `unpublish_${slug}`,
|
|
242
|
+
telemetry: {
|
|
243
|
+
source: 'content-manager',
|
|
244
|
+
name: 'unpublish'
|
|
245
|
+
},
|
|
246
|
+
...utils.describeTool({
|
|
247
|
+
apiID: model.apiID,
|
|
248
|
+
uid,
|
|
249
|
+
operation: 'unpublish'
|
|
250
|
+
}),
|
|
251
|
+
auth: {
|
|
252
|
+
policies: [
|
|
253
|
+
{
|
|
254
|
+
action: permissionChecker.ACTIONS.unpublish,
|
|
255
|
+
subject: uid
|
|
256
|
+
}
|
|
257
|
+
]
|
|
258
|
+
},
|
|
259
|
+
resolveInputSchema: resolveUnpublishInputSchema,
|
|
260
|
+
resolveOutputSchema: resolveReadOutputSchema,
|
|
261
|
+
createHandler: collectionHandlers.createCollectionUnpublishHandler(uid)
|
|
262
|
+
}, {
|
|
263
|
+
name: `discard_${slug}_draft`,
|
|
264
|
+
telemetry: {
|
|
265
|
+
source: 'content-manager',
|
|
266
|
+
name: 'discard_draft'
|
|
267
|
+
},
|
|
268
|
+
...utils.describeTool({
|
|
269
|
+
apiID: model.apiID,
|
|
270
|
+
uid,
|
|
271
|
+
operation: 'discard_draft'
|
|
272
|
+
}),
|
|
273
|
+
auth: {
|
|
274
|
+
policies: [
|
|
275
|
+
{
|
|
276
|
+
action: permissionChecker.ACTIONS.discard,
|
|
277
|
+
subject: uid
|
|
278
|
+
}
|
|
279
|
+
]
|
|
280
|
+
},
|
|
281
|
+
resolveInputSchema: resolveDiscardDraftInputSchema,
|
|
282
|
+
resolveOutputSchema: resolveReadOutputSchema,
|
|
283
|
+
createHandler: collectionHandlers.createCollectionDiscardDraftHandler(uid)
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
return tools;
|
|
287
|
+
};
|
|
288
|
+
// ---------------------------------------------------------------------------
|
|
289
|
+
// Single-type tool-definition builder
|
|
290
|
+
// ---------------------------------------------------------------------------
|
|
291
|
+
/**
|
|
292
|
+
* Derives the full set of `DerivedTool` definitions for a single single-type model.
|
|
293
|
+
* Produces get/write/delete tools, plus publish/unpublish/discard_draft when
|
|
294
|
+
* draft-and-publish is enabled. Each tool's input/output schema is resolved
|
|
295
|
+
* per-request so RBAC field and locale constraints are applied at call time.
|
|
296
|
+
*/ const buildSingleTypeTools = (strapi, model, ctx)=>{
|
|
297
|
+
const uid = model.uid;
|
|
298
|
+
const slug = utils.slugifyUidForMcpToolName(uid);
|
|
299
|
+
const draftAndPublish = model.options?.draftAndPublish === true;
|
|
300
|
+
const { attributes } = model;
|
|
301
|
+
const runtimeLocaleSchema = permissions.buildLocaleSchema(ctx.localeCodes, ctx.defaultLocale);
|
|
302
|
+
const resolveReadFields = (context)=>permissions.getPermittedFields(strapi, context.userAbility, permissionChecker.ACTIONS.read, uid, attributes);
|
|
303
|
+
const resolveReadOutputSchema = (context)=>outputSchemas.buildDocumentOutputSchema(attributes, resolveReadFields(context));
|
|
304
|
+
const resolveGetInputSchema = (context)=>{
|
|
305
|
+
const localeSchema = permissions.resolvePermittedLocaleSchema(strapi, context, permissionChecker.ACTIONS.read, uid, ctx.localeCodes, ctx.defaultLocale, runtimeLocaleSchema);
|
|
306
|
+
return strapiUtils.z.object({
|
|
307
|
+
locale: localeSchema,
|
|
308
|
+
status: inputSchemas.statusSchema
|
|
309
|
+
});
|
|
310
|
+
};
|
|
311
|
+
const resolveWriteInputSchema = (context)=>{
|
|
312
|
+
const createFields = permissions.getPermittedFields(strapi, context.userAbility, permissionChecker.ACTIONS.create, uid, attributes);
|
|
313
|
+
const updateFields = permissions.getPermittedFields(strapi, context.userAbility, permissionChecker.ACTIONS.update, uid, attributes);
|
|
314
|
+
// null means all fields permitted; union of null with anything is null (all permitted)
|
|
315
|
+
const writeFields = createFields === null || updateFields === null ? null : new Set([
|
|
316
|
+
...createFields,
|
|
317
|
+
...updateFields
|
|
318
|
+
]);
|
|
319
|
+
const dataSchema$1 = dataSchema.buildDataSchema(strapi, model, attributes, writeFields);
|
|
320
|
+
const localeSchema = permissions.resolvePermittedLocaleSchema(strapi, context, permissionChecker.ACTIONS.update, uid, ctx.localeCodes, ctx.defaultLocale, runtimeLocaleSchema);
|
|
321
|
+
return strapiUtils.z.object({
|
|
322
|
+
data: dataSchema$1,
|
|
323
|
+
locale: localeSchema
|
|
324
|
+
});
|
|
325
|
+
};
|
|
326
|
+
const resolveDeleteInputSchema = (context)=>{
|
|
327
|
+
const localeSchema = permissions.resolvePermittedLocaleSchema(strapi, context, permissionChecker.ACTIONS.delete, uid, ctx.localeCodes, ctx.defaultLocale, runtimeLocaleSchema);
|
|
328
|
+
return strapiUtils.z.object({
|
|
329
|
+
locale: localeSchema
|
|
330
|
+
});
|
|
331
|
+
};
|
|
332
|
+
const resolvePublishInputSchema = (context)=>{
|
|
333
|
+
const localeSchema = permissions.resolvePermittedLocaleSchema(strapi, context, permissionChecker.ACTIONS.publish, uid, ctx.localeCodes, ctx.defaultLocale, runtimeLocaleSchema);
|
|
334
|
+
return strapiUtils.z.object({
|
|
335
|
+
locale: localeSchema
|
|
336
|
+
});
|
|
337
|
+
};
|
|
338
|
+
const resolveUnpublishInputSchema = (context)=>{
|
|
339
|
+
const localeSchema = permissions.resolvePermittedLocaleSchema(strapi, context, permissionChecker.ACTIONS.unpublish, uid, ctx.localeCodes, ctx.defaultLocale, runtimeLocaleSchema);
|
|
340
|
+
return strapiUtils.z.object({
|
|
341
|
+
locale: localeSchema,
|
|
342
|
+
discardDraft: strapiUtils.z.boolean().optional().describe('Also discard the draft when unpublishing.')
|
|
343
|
+
});
|
|
344
|
+
};
|
|
345
|
+
const resolveDiscardDraftInputSchema = (context)=>{
|
|
346
|
+
const localeSchema = permissions.resolvePermittedLocaleSchema(strapi, context, permissionChecker.ACTIONS.discard, uid, ctx.localeCodes, ctx.defaultLocale, runtimeLocaleSchema);
|
|
347
|
+
return strapiUtils.z.object({
|
|
348
|
+
locale: localeSchema
|
|
349
|
+
});
|
|
350
|
+
};
|
|
351
|
+
const tools = [
|
|
352
|
+
{
|
|
353
|
+
name: `get_${slug}`,
|
|
354
|
+
telemetry: {
|
|
355
|
+
source: 'content-manager',
|
|
356
|
+
name: 'get'
|
|
357
|
+
},
|
|
358
|
+
...utils.describeTool({
|
|
359
|
+
apiID: model.apiID,
|
|
360
|
+
uid,
|
|
361
|
+
operation: 'get'
|
|
362
|
+
}),
|
|
363
|
+
auth: {
|
|
364
|
+
policies: [
|
|
365
|
+
{
|
|
366
|
+
action: permissionChecker.ACTIONS.read,
|
|
367
|
+
subject: uid
|
|
368
|
+
}
|
|
369
|
+
]
|
|
370
|
+
},
|
|
371
|
+
resolveInputSchema: resolveGetInputSchema,
|
|
372
|
+
resolveOutputSchema: resolveReadOutputSchema,
|
|
373
|
+
createHandler: singleTypeHandlers.createSingleGetHandler(uid)
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
name: `write_${slug}`,
|
|
377
|
+
telemetry: {
|
|
378
|
+
source: 'content-manager',
|
|
379
|
+
name: 'write'
|
|
380
|
+
},
|
|
381
|
+
...utils.describeTool({
|
|
382
|
+
apiID: model.apiID,
|
|
383
|
+
uid,
|
|
384
|
+
operation: 'write'
|
|
385
|
+
}),
|
|
386
|
+
auth: {
|
|
387
|
+
policies: [
|
|
388
|
+
{
|
|
389
|
+
action: permissionChecker.ACTIONS.create,
|
|
390
|
+
subject: uid
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
action: permissionChecker.ACTIONS.update,
|
|
394
|
+
subject: uid
|
|
395
|
+
}
|
|
396
|
+
]
|
|
397
|
+
},
|
|
398
|
+
resolveInputSchema: resolveWriteInputSchema,
|
|
399
|
+
resolveOutputSchema: resolveReadOutputSchema,
|
|
400
|
+
createHandler: singleTypeHandlers.createSingleWriteHandler(uid)
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
name: `delete_${slug}`,
|
|
404
|
+
telemetry: {
|
|
405
|
+
source: 'content-manager',
|
|
406
|
+
name: 'delete'
|
|
407
|
+
},
|
|
408
|
+
...utils.describeTool({
|
|
409
|
+
apiID: model.apiID,
|
|
410
|
+
uid,
|
|
411
|
+
operation: 'delete'
|
|
412
|
+
}),
|
|
413
|
+
auth: {
|
|
414
|
+
policies: [
|
|
415
|
+
{
|
|
416
|
+
action: permissionChecker.ACTIONS.delete,
|
|
417
|
+
subject: uid
|
|
418
|
+
}
|
|
419
|
+
]
|
|
420
|
+
},
|
|
421
|
+
resolveInputSchema: resolveDeleteInputSchema,
|
|
422
|
+
resolveOutputSchema: (context)=>outputSchemas.buildDeleteOutputSchema(attributes, resolveReadFields(context)),
|
|
423
|
+
createHandler: singleTypeHandlers.createSingleDeleteHandler(uid)
|
|
424
|
+
}
|
|
425
|
+
];
|
|
426
|
+
if (draftAndPublish === true) {
|
|
427
|
+
tools.push({
|
|
428
|
+
name: `publish_${slug}`,
|
|
429
|
+
telemetry: {
|
|
430
|
+
source: 'content-manager',
|
|
431
|
+
name: 'publish'
|
|
432
|
+
},
|
|
433
|
+
...utils.describeTool({
|
|
434
|
+
apiID: model.apiID,
|
|
435
|
+
uid,
|
|
436
|
+
operation: 'publish'
|
|
437
|
+
}),
|
|
438
|
+
auth: {
|
|
439
|
+
policies: [
|
|
440
|
+
{
|
|
441
|
+
action: permissionChecker.ACTIONS.publish,
|
|
442
|
+
subject: uid
|
|
443
|
+
}
|
|
444
|
+
]
|
|
445
|
+
},
|
|
446
|
+
resolveInputSchema: resolvePublishInputSchema,
|
|
447
|
+
resolveOutputSchema: resolveReadOutputSchema,
|
|
448
|
+
createHandler: singleTypeHandlers.createSinglePublishHandler(uid)
|
|
449
|
+
}, {
|
|
450
|
+
name: `unpublish_${slug}`,
|
|
451
|
+
telemetry: {
|
|
452
|
+
source: 'content-manager',
|
|
453
|
+
name: 'unpublish'
|
|
454
|
+
},
|
|
455
|
+
...utils.describeTool({
|
|
456
|
+
apiID: model.apiID,
|
|
457
|
+
uid,
|
|
458
|
+
operation: 'unpublish'
|
|
459
|
+
}),
|
|
460
|
+
auth: {
|
|
461
|
+
policies: [
|
|
462
|
+
{
|
|
463
|
+
action: permissionChecker.ACTIONS.unpublish,
|
|
464
|
+
subject: uid
|
|
465
|
+
}
|
|
466
|
+
]
|
|
467
|
+
},
|
|
468
|
+
resolveInputSchema: resolveUnpublishInputSchema,
|
|
469
|
+
resolveOutputSchema: resolveReadOutputSchema,
|
|
470
|
+
createHandler: singleTypeHandlers.createSingleUnpublishHandler(uid)
|
|
471
|
+
}, {
|
|
472
|
+
name: `discard_${slug}_draft`,
|
|
473
|
+
telemetry: {
|
|
474
|
+
source: 'content-manager',
|
|
475
|
+
name: 'discard_draft'
|
|
476
|
+
},
|
|
477
|
+
...utils.describeTool({
|
|
478
|
+
apiID: model.apiID,
|
|
479
|
+
uid,
|
|
480
|
+
operation: 'discard_draft'
|
|
481
|
+
}),
|
|
482
|
+
auth: {
|
|
483
|
+
policies: [
|
|
484
|
+
{
|
|
485
|
+
action: permissionChecker.ACTIONS.discard,
|
|
486
|
+
subject: uid
|
|
487
|
+
}
|
|
488
|
+
]
|
|
489
|
+
},
|
|
490
|
+
resolveInputSchema: resolveDiscardDraftInputSchema,
|
|
491
|
+
resolveOutputSchema: resolveReadOutputSchema,
|
|
492
|
+
createHandler: singleTypeHandlers.createSingleDiscardDraftHandler(uid)
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
return tools;
|
|
496
|
+
};
|
|
497
|
+
// ---------------------------------------------------------------------------
|
|
498
|
+
// Main export
|
|
499
|
+
// ---------------------------------------------------------------------------
|
|
500
|
+
/**
|
|
501
|
+
* Builds MCP tool definitions for displayed content-manager models.
|
|
502
|
+
* Visibility is enforced separately via static auth on each tool and MCP session capability sync.
|
|
503
|
+
*/ const deriveDisplayedContentTypeMcpToolDefinitions = (strapi, models, ctx = {
|
|
504
|
+
localeCodes: null,
|
|
505
|
+
defaultLocale: null
|
|
506
|
+
})=>{
|
|
507
|
+
const tools = [];
|
|
508
|
+
for (const model of models){
|
|
509
|
+
if (model.kind === 'collectionType') {
|
|
510
|
+
tools.push(...buildCollectionTools(strapi, model, ctx));
|
|
511
|
+
} else if (model.kind === 'singleType') {
|
|
512
|
+
tools.push(...buildSingleTypeTools(strapi, model, ctx));
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
return tools;
|
|
516
|
+
};
|
|
517
|
+
|
|
518
|
+
exports.slugifyUidForMcpToolName = utils.slugifyUidForMcpToolName;
|
|
519
|
+
exports.getComponentLeafPaths = permissions.getComponentLeafPaths;
|
|
520
|
+
exports.buildDataSchema = dataSchema.buildDataSchema;
|
|
521
|
+
exports.buildSortSchema = sortSchema.buildSortSchema;
|
|
522
|
+
exports.buildFiltersSchema = filtersSchema.buildFiltersSchema;
|
|
523
|
+
exports.deriveDisplayedContentTypeMcpToolDefinitions = deriveDisplayedContentTypeMcpToolDefinitions;
|
|
524
|
+
//# sourceMappingURL=derive-content-type-mcp-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive-content-type-mcp-tools.js","sources":["../../../server/src/mcp/derive-content-type-mcp-tools.ts"],"sourcesContent":["import { z } from '@strapi/utils';\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport { ACTIONS } from '../services/permission-checker';\n\nimport type { ContentManagerModelForMcp, McpToolsBuildContext, DerivedTool } from './types';\nimport { slugifyUidForMcpToolName, describeTool } from './utils';\nimport { buildLocaleSchema, resolvePermittedLocaleSchema, getPermittedFields } from './permissions';\nimport {\n statusSchema,\n documentIdSchema,\n pageSchema,\n pageSizeSchema,\n buildDataSchema,\n buildSortSchema,\n buildFiltersSchema,\n buildDocumentOutputSchema,\n buildListOutputSchema,\n buildDeleteOutputSchema,\n} from './schemas';\nimport {\n createCollectionListHandler,\n createCollectionGetHandler,\n createCollectionCreateHandler,\n createCollectionUpdateHandler,\n createCollectionDeleteHandler,\n createCollectionPublishHandler,\n createCollectionUnpublishHandler,\n createCollectionDiscardDraftHandler,\n createSingleGetHandler,\n createSingleWriteHandler,\n createSingleDeleteHandler,\n createSinglePublishHandler,\n createSingleUnpublishHandler,\n createSingleDiscardDraftHandler,\n} from './handlers';\n\n// ---------------------------------------------------------------------------\n// Public re-exports — backward compatibility with existing test imports\n// ---------------------------------------------------------------------------\nexport type { ContentManagerModelForMcp };\nexport { slugifyUidForMcpToolName } from './utils';\nexport { buildSortSchema, buildFiltersSchema, buildDataSchema } from './schemas';\nexport { getComponentLeafPaths } from './permissions';\n\n// ---------------------------------------------------------------------------\n// Collection-type tool-definition builder\n// ---------------------------------------------------------------------------\n\n/**\n * Derives the full set of `DerivedTool` definitions for a single collection-type model.\n * Produces list/get/create/update/delete tools, plus publish/unpublish/discard_draft\n * when draft-and-publish is enabled. Each tool's input/output schema is resolved\n * per-request so RBAC field and locale constraints are applied at call time.\n */\nconst buildCollectionTools = (\n strapi: Core.Strapi,\n model: ContentManagerModelForMcp,\n ctx: McpToolsBuildContext\n): DerivedTool[] => {\n const uid = model.uid as UID.CollectionType;\n const slug = slugifyUidForMcpToolName(uid);\n const draftAndPublish = model.options?.draftAndPublish === true;\n const { attributes } = model;\n const runtimeLocaleSchema = buildLocaleSchema(ctx.localeCodes, ctx.defaultLocale);\n\n const resolveReadFields = (context: Modules.MCP.McpHandlerContext) =>\n getPermittedFields(strapi, context.userAbility, ACTIONS.read, uid, attributes);\n\n const resolveReadOutputSchema = (context: Modules.MCP.McpHandlerContext) =>\n buildDocumentOutputSchema(attributes, resolveReadFields(context));\n\n const resolveListInputSchema = (context: Modules.MCP.McpHandlerContext) => {\n const readFields = resolveReadFields(context);\n const localeSchema = resolvePermittedLocaleSchema(\n strapi,\n context,\n ACTIONS.read,\n uid,\n ctx.localeCodes,\n ctx.defaultLocale,\n runtimeLocaleSchema\n );\n return z.object({\n locale: localeSchema,\n status: statusSchema,\n page: pageSchema,\n pageSize: pageSizeSchema,\n sort: buildSortSchema(attributes, readFields),\n filters: buildFiltersSchema(attributes, readFields),\n });\n };\n\n const resolveGetInputSchema = (context: Modules.MCP.McpHandlerContext) => {\n const localeSchema = resolvePermittedLocaleSchema(\n strapi,\n context,\n ACTIONS.read,\n uid,\n ctx.localeCodes,\n ctx.defaultLocale,\n runtimeLocaleSchema\n );\n return z.object({\n documentId: documentIdSchema,\n locale: localeSchema,\n status: statusSchema,\n });\n };\n\n const resolveCreateInputSchema = (context: Modules.MCP.McpHandlerContext) => {\n const writeFields = getPermittedFields(\n strapi,\n context.userAbility,\n ACTIONS.create,\n uid,\n attributes\n );\n const dataSchema = buildDataSchema(strapi, model, attributes, writeFields);\n const localeSchema = resolvePermittedLocaleSchema(\n strapi,\n context,\n ACTIONS.create,\n uid,\n ctx.localeCodes,\n ctx.defaultLocale,\n runtimeLocaleSchema\n );\n return z.object({ data: dataSchema, locale: localeSchema });\n };\n\n const resolveUpdateInputSchema = (context: Modules.MCP.McpHandlerContext) => {\n const writeFields = getPermittedFields(\n strapi,\n context.userAbility,\n ACTIONS.update,\n uid,\n attributes\n );\n const dataSchema = buildDataSchema(strapi, model, attributes, writeFields);\n const localeSchema = resolvePermittedLocaleSchema(\n strapi,\n context,\n ACTIONS.update,\n uid,\n ctx.localeCodes,\n ctx.defaultLocale,\n runtimeLocaleSchema\n );\n return z.object({\n documentId: documentIdSchema,\n data: dataSchema,\n locale: localeSchema,\n });\n };\n\n const resolveDeleteInputSchema = (context: Modules.MCP.McpHandlerContext) => {\n const localeSchema = resolvePermittedLocaleSchema(\n strapi,\n context,\n ACTIONS.delete,\n uid,\n ctx.localeCodes,\n ctx.defaultLocale,\n runtimeLocaleSchema\n );\n return z.object({\n documentId: documentIdSchema,\n locale: localeSchema,\n });\n };\n\n const resolvePublishInputSchema = (context: Modules.MCP.McpHandlerContext) => {\n const localeSchema = resolvePermittedLocaleSchema(\n strapi,\n context,\n ACTIONS.publish,\n uid,\n ctx.localeCodes,\n ctx.defaultLocale,\n runtimeLocaleSchema\n );\n return z.object({\n documentId: documentIdSchema,\n locale: localeSchema,\n });\n };\n\n const resolveUnpublishInputSchema = (context: Modules.MCP.McpHandlerContext) => {\n const localeSchema = resolvePermittedLocaleSchema(\n strapi,\n context,\n ACTIONS.unpublish,\n uid,\n ctx.localeCodes,\n ctx.defaultLocale,\n runtimeLocaleSchema\n );\n return z.object({\n documentId: documentIdSchema,\n locale: localeSchema,\n discardDraft: z.boolean().optional().describe('Also discard the draft when unpublishing.'),\n });\n };\n\n const resolveDiscardDraftInputSchema = (context: Modules.MCP.McpHandlerContext) => {\n const localeSchema = resolvePermittedLocaleSchema(\n strapi,\n context,\n ACTIONS.discard,\n uid,\n ctx.localeCodes,\n ctx.defaultLocale,\n runtimeLocaleSchema\n );\n return z.object({\n documentId: documentIdSchema,\n locale: localeSchema,\n });\n };\n\n const tools: DerivedTool[] = [\n {\n name: `list_${slug}`,\n telemetry: { source: 'content-manager', name: 'list' },\n ...describeTool({ apiID: model.apiID, uid, operation: 'list' }),\n auth: { policies: [{ action: ACTIONS.read, subject: uid }] },\n resolveInputSchema: resolveListInputSchema,\n resolveOutputSchema: (context) =>\n buildListOutputSchema(attributes, resolveReadFields(context)),\n createHandler: createCollectionListHandler(uid),\n },\n {\n name: `get_${slug}`,\n telemetry: { source: 'content-manager', name: 'get' },\n ...describeTool({ apiID: model.apiID, uid, operation: 'get' }),\n auth: { policies: [{ action: ACTIONS.read, subject: uid }] },\n resolveInputSchema: resolveGetInputSchema,\n resolveOutputSchema: resolveReadOutputSchema,\n createHandler: createCollectionGetHandler(uid),\n },\n {\n name: `create_${slug}`,\n telemetry: { source: 'content-manager', name: 'create' },\n ...describeTool({ apiID: model.apiID, uid, operation: 'create' }),\n auth: { policies: [{ action: ACTIONS.create, subject: uid }] },\n resolveInputSchema: resolveCreateInputSchema,\n resolveOutputSchema: resolveReadOutputSchema,\n createHandler: createCollectionCreateHandler(uid),\n },\n {\n name: `update_${slug}`,\n telemetry: { source: 'content-manager', name: 'update' },\n ...describeTool({ apiID: model.apiID, uid, operation: 'update' }),\n auth: { policies: [{ action: ACTIONS.update, subject: uid }] },\n resolveInputSchema: resolveUpdateInputSchema,\n resolveOutputSchema: resolveReadOutputSchema,\n createHandler: createCollectionUpdateHandler(uid),\n },\n {\n name: `delete_${slug}`,\n telemetry: { source: 'content-manager', name: 'delete' },\n ...describeTool({ apiID: model.apiID, uid, operation: 'delete' }),\n auth: { policies: [{ action: ACTIONS.delete, subject: uid }] },\n resolveInputSchema: resolveDeleteInputSchema,\n resolveOutputSchema: (context) =>\n buildDeleteOutputSchema(attributes, resolveReadFields(context)),\n createHandler: createCollectionDeleteHandler(uid),\n },\n ];\n\n if (draftAndPublish === true) {\n tools.push(\n {\n name: `publish_${slug}`,\n telemetry: { source: 'content-manager', name: 'publish' },\n ...describeTool({ apiID: model.apiID, uid, operation: 'publish' }),\n auth: { policies: [{ action: ACTIONS.publish, subject: uid }] },\n resolveInputSchema: resolvePublishInputSchema,\n resolveOutputSchema: resolveReadOutputSchema,\n createHandler: createCollectionPublishHandler(uid),\n },\n {\n name: `unpublish_${slug}`,\n telemetry: { source: 'content-manager', name: 'unpublish' },\n ...describeTool({ apiID: model.apiID, uid, operation: 'unpublish' }),\n auth: { policies: [{ action: ACTIONS.unpublish, subject: uid }] },\n resolveInputSchema: resolveUnpublishInputSchema,\n resolveOutputSchema: resolveReadOutputSchema,\n createHandler: createCollectionUnpublishHandler(uid),\n },\n {\n name: `discard_${slug}_draft`,\n telemetry: { source: 'content-manager', name: 'discard_draft' },\n ...describeTool({ apiID: model.apiID, uid, operation: 'discard_draft' }),\n auth: { policies: [{ action: ACTIONS.discard, subject: uid }] },\n resolveInputSchema: resolveDiscardDraftInputSchema,\n resolveOutputSchema: resolveReadOutputSchema,\n createHandler: createCollectionDiscardDraftHandler(uid),\n }\n );\n }\n\n return tools;\n};\n\n// ---------------------------------------------------------------------------\n// Single-type tool-definition builder\n// ---------------------------------------------------------------------------\n\n/**\n * Derives the full set of `DerivedTool` definitions for a single single-type model.\n * Produces get/write/delete tools, plus publish/unpublish/discard_draft when\n * draft-and-publish is enabled. Each tool's input/output schema is resolved\n * per-request so RBAC field and locale constraints are applied at call time.\n */\nconst buildSingleTypeTools = (\n strapi: Core.Strapi,\n model: ContentManagerModelForMcp,\n ctx: McpToolsBuildContext\n): DerivedTool[] => {\n const uid = model.uid as UID.SingleType;\n const slug = slugifyUidForMcpToolName(uid);\n const draftAndPublish = model.options?.draftAndPublish === true;\n const { attributes } = model;\n const runtimeLocaleSchema = buildLocaleSchema(ctx.localeCodes, ctx.defaultLocale);\n\n const resolveReadFields = (context: Modules.MCP.McpHandlerContext) =>\n getPermittedFields(strapi, context.userAbility, ACTIONS.read, uid, attributes);\n\n const resolveReadOutputSchema = (context: Modules.MCP.McpHandlerContext) =>\n buildDocumentOutputSchema(attributes, resolveReadFields(context));\n\n const resolveGetInputSchema = (context: Modules.MCP.McpHandlerContext) => {\n const localeSchema = resolvePermittedLocaleSchema(\n strapi,\n context,\n ACTIONS.read,\n uid,\n ctx.localeCodes,\n ctx.defaultLocale,\n runtimeLocaleSchema\n );\n return z.object({\n locale: localeSchema,\n status: statusSchema,\n });\n };\n\n const resolveWriteInputSchema = (context: Modules.MCP.McpHandlerContext) => {\n const createFields = getPermittedFields(\n strapi,\n context.userAbility,\n ACTIONS.create,\n uid,\n attributes\n );\n const updateFields = getPermittedFields(\n strapi,\n context.userAbility,\n ACTIONS.update,\n uid,\n attributes\n );\n // null means all fields permitted; union of null with anything is null (all permitted)\n const writeFields: Set<string> | null =\n createFields === null || updateFields === null\n ? null\n : new Set([...createFields, ...updateFields]);\n const dataSchema = buildDataSchema(strapi, model, attributes, writeFields);\n const localeSchema = resolvePermittedLocaleSchema(\n strapi,\n context,\n ACTIONS.update,\n uid,\n ctx.localeCodes,\n ctx.defaultLocale,\n runtimeLocaleSchema\n );\n return z.object({ data: dataSchema, locale: localeSchema });\n };\n\n const resolveDeleteInputSchema = (context: Modules.MCP.McpHandlerContext) => {\n const localeSchema = resolvePermittedLocaleSchema(\n strapi,\n context,\n ACTIONS.delete,\n uid,\n ctx.localeCodes,\n ctx.defaultLocale,\n runtimeLocaleSchema\n );\n return z.object({\n locale: localeSchema,\n });\n };\n\n const resolvePublishInputSchema = (context: Modules.MCP.McpHandlerContext) => {\n const localeSchema = resolvePermittedLocaleSchema(\n strapi,\n context,\n ACTIONS.publish,\n uid,\n ctx.localeCodes,\n ctx.defaultLocale,\n runtimeLocaleSchema\n );\n return z.object({\n locale: localeSchema,\n });\n };\n\n const resolveUnpublishInputSchema = (context: Modules.MCP.McpHandlerContext) => {\n const localeSchema = resolvePermittedLocaleSchema(\n strapi,\n context,\n ACTIONS.unpublish,\n uid,\n ctx.localeCodes,\n ctx.defaultLocale,\n runtimeLocaleSchema\n );\n return z.object({\n locale: localeSchema,\n discardDraft: z.boolean().optional().describe('Also discard the draft when unpublishing.'),\n });\n };\n\n const resolveDiscardDraftInputSchema = (context: Modules.MCP.McpHandlerContext) => {\n const localeSchema = resolvePermittedLocaleSchema(\n strapi,\n context,\n ACTIONS.discard,\n uid,\n ctx.localeCodes,\n ctx.defaultLocale,\n runtimeLocaleSchema\n );\n return z.object({\n locale: localeSchema,\n });\n };\n\n const tools: DerivedTool[] = [\n {\n name: `get_${slug}`,\n telemetry: { source: 'content-manager', name: 'get' },\n ...describeTool({ apiID: model.apiID, uid, operation: 'get' }),\n auth: { policies: [{ action: ACTIONS.read, subject: uid }] },\n resolveInputSchema: resolveGetInputSchema,\n resolveOutputSchema: resolveReadOutputSchema,\n createHandler: createSingleGetHandler(uid),\n },\n {\n name: `write_${slug}`,\n telemetry: { source: 'content-manager', name: 'write' },\n ...describeTool({ apiID: model.apiID, uid, operation: 'write' }),\n auth: {\n policies: [\n { action: ACTIONS.create, subject: uid },\n { action: ACTIONS.update, subject: uid },\n ],\n },\n resolveInputSchema: resolveWriteInputSchema,\n resolveOutputSchema: resolveReadOutputSchema,\n createHandler: createSingleWriteHandler(uid),\n },\n {\n name: `delete_${slug}`,\n telemetry: { source: 'content-manager', name: 'delete' },\n ...describeTool({ apiID: model.apiID, uid, operation: 'delete' }),\n auth: { policies: [{ action: ACTIONS.delete, subject: uid }] },\n resolveInputSchema: resolveDeleteInputSchema,\n resolveOutputSchema: (context) =>\n buildDeleteOutputSchema(attributes, resolveReadFields(context)),\n createHandler: createSingleDeleteHandler(uid),\n },\n ];\n\n if (draftAndPublish === true) {\n tools.push(\n {\n name: `publish_${slug}`,\n telemetry: { source: 'content-manager', name: 'publish' },\n ...describeTool({ apiID: model.apiID, uid, operation: 'publish' }),\n auth: { policies: [{ action: ACTIONS.publish, subject: uid }] },\n resolveInputSchema: resolvePublishInputSchema,\n resolveOutputSchema: resolveReadOutputSchema,\n createHandler: createSinglePublishHandler(uid),\n },\n {\n name: `unpublish_${slug}`,\n telemetry: { source: 'content-manager', name: 'unpublish' },\n ...describeTool({ apiID: model.apiID, uid, operation: 'unpublish' }),\n auth: { policies: [{ action: ACTIONS.unpublish, subject: uid }] },\n resolveInputSchema: resolveUnpublishInputSchema,\n resolveOutputSchema: resolveReadOutputSchema,\n createHandler: createSingleUnpublishHandler(uid),\n },\n {\n name: `discard_${slug}_draft`,\n telemetry: { source: 'content-manager', name: 'discard_draft' },\n ...describeTool({ apiID: model.apiID, uid, operation: 'discard_draft' }),\n auth: { policies: [{ action: ACTIONS.discard, subject: uid }] },\n resolveInputSchema: resolveDiscardDraftInputSchema,\n resolveOutputSchema: resolveReadOutputSchema,\n createHandler: createSingleDiscardDraftHandler(uid),\n }\n );\n }\n\n return tools;\n};\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\n/**\n * Builds MCP tool definitions for displayed content-manager models.\n * Visibility is enforced separately via static auth on each tool and MCP session capability sync.\n */\nexport const deriveDisplayedContentTypeMcpToolDefinitions = (\n strapi: Core.Strapi,\n models: ContentManagerModelForMcp[],\n ctx: McpToolsBuildContext = { localeCodes: null, defaultLocale: null }\n): DerivedTool[] => {\n const tools: DerivedTool[] = [];\n\n for (const model of models) {\n if (model.kind === 'collectionType') {\n tools.push(...buildCollectionTools(strapi, model, ctx));\n } else if (model.kind === 'singleType') {\n tools.push(...buildSingleTypeTools(strapi, model, ctx));\n }\n }\n\n return tools;\n};\n"],"names":["buildCollectionTools","strapi","model","ctx","uid","slug","slugifyUidForMcpToolName","draftAndPublish","options","attributes","runtimeLocaleSchema","buildLocaleSchema","localeCodes","defaultLocale","resolveReadFields","context","getPermittedFields","userAbility","ACTIONS","read","resolveReadOutputSchema","buildDocumentOutputSchema","resolveListInputSchema","readFields","localeSchema","resolvePermittedLocaleSchema","z","object","locale","status","statusSchema","page","pageSchema","pageSize","pageSizeSchema","sort","buildSortSchema","filters","buildFiltersSchema","resolveGetInputSchema","documentId","documentIdSchema","resolveCreateInputSchema","writeFields","create","dataSchema","buildDataSchema","data","resolveUpdateInputSchema","update","resolveDeleteInputSchema","delete","resolvePublishInputSchema","publish","resolveUnpublishInputSchema","unpublish","discardDraft","boolean","optional","describe","resolveDiscardDraftInputSchema","discard","tools","name","telemetry","source","describeTool","apiID","operation","auth","policies","action","subject","resolveInputSchema","resolveOutputSchema","buildListOutputSchema","createHandler","createCollectionListHandler","createCollectionGetHandler","createCollectionCreateHandler","createCollectionUpdateHandler","buildDeleteOutputSchema","createCollectionDeleteHandler","push","createCollectionPublishHandler","createCollectionUnpublishHandler","createCollectionDiscardDraftHandler","buildSingleTypeTools","resolveWriteInputSchema","createFields","updateFields","Set","createSingleGetHandler","createSingleWriteHandler","createSingleDeleteHandler","createSinglePublishHandler","createSingleUnpublishHandler","createSingleDiscardDraftHandler","deriveDisplayedContentTypeMcpToolDefinitions","models","kind"],"mappings":"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"}
|