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