@payloadcms/plugin-mcp 4.0.0-internal.a0ef1b8 → 4.0.0-internal.add4c47
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/LICENSE.md +1 -1
- package/bin.js +7 -0
- package/dist/defaultAccess.d.ts +3 -0
- package/dist/defaultAccess.d.ts.map +1 -0
- package/dist/defaultAccess.js +3 -0
- package/dist/defaultAccess.js.map +1 -0
- package/dist/defineTool.d.ts +8 -8
- package/dist/defineTool.d.ts.map +1 -1
- package/dist/endpoint/access.d.ts +12 -5
- package/dist/endpoint/access.d.ts.map +1 -1
- package/dist/endpoint/access.js +75 -88
- package/dist/endpoint/access.js.map +1 -1
- package/dist/endpoint/index.d.ts +1 -1
- package/dist/endpoint/index.d.ts.map +1 -1
- package/dist/endpoint/index.js +68 -17
- package/dist/endpoint/index.js.map +1 -1
- package/dist/exports/client.d.ts +1 -1
- package/dist/exports/client.d.ts.map +1 -1
- package/dist/exports/client.js +1 -1
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/internal.d.ts +2 -0
- package/dist/exports/internal.d.ts.map +1 -0
- package/dist/exports/internal.js +3 -0
- package/dist/exports/internal.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -20
- package/dist/index.js.map +1 -1
- package/dist/mcp/buildMcpServer.d.ts +4 -4
- package/dist/mcp/buildMcpServer.d.ts.map +1 -1
- package/dist/mcp/buildMcpServer.js +133 -80
- package/dist/mcp/buildMcpServer.js.map +1 -1
- package/dist/mcp/builtin/collections/authTools.d.ts.map +1 -1
- package/dist/mcp/builtin/collections/authTools.js +44 -6
- package/dist/mcp/builtin/collections/authTools.js.map +1 -1
- package/dist/mcp/builtin/collections/countTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/countTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/countTool.js +68 -0
- package/dist/mcp/builtin/collections/countTool.js.map +1 -0
- package/dist/mcp/builtin/collections/countVersionsTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/countVersionsTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/countVersionsTool.js +64 -0
- package/dist/mcp/builtin/collections/countVersionsTool.js.map +1 -0
- package/dist/mcp/builtin/collections/createTool.d.ts +1 -1
- package/dist/mcp/builtin/collections/createTool.d.ts.map +1 -1
- package/dist/mcp/builtin/collections/createTool.js +50 -45
- package/dist/mcp/builtin/collections/createTool.js.map +1 -1
- package/dist/mcp/builtin/collections/deleteTool.d.ts +1 -1
- package/dist/mcp/builtin/collections/deleteTool.d.ts.map +1 -1
- package/dist/mcp/builtin/collections/deleteTool.js +15 -22
- package/dist/mcp/builtin/collections/deleteTool.js.map +1 -1
- package/dist/mcp/builtin/collections/duplicateTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/duplicateTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/duplicateTool.js +96 -0
- package/dist/mcp/builtin/collections/duplicateTool.js.map +1 -0
- package/dist/mcp/builtin/collections/fileInput.d.ts +28 -0
- package/dist/mcp/builtin/collections/fileInput.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/fileInput.js +117 -0
- package/dist/mcp/builtin/collections/fileInput.js.map +1 -0
- package/dist/mcp/builtin/collections/fileInput.spec.js +86 -0
- package/dist/mcp/builtin/collections/fileInput.spec.js.map +1 -0
- package/dist/mcp/builtin/collections/findDistinctTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/findDistinctTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/findDistinctTool.js +92 -0
- package/dist/mcp/builtin/collections/findDistinctTool.js.map +1 -0
- package/dist/mcp/builtin/collections/findTool.d.ts +1 -1
- package/dist/mcp/builtin/collections/findTool.d.ts.map +1 -1
- package/dist/mcp/builtin/collections/findTool.js +52 -47
- package/dist/mcp/builtin/collections/findTool.js.map +1 -1
- package/dist/mcp/builtin/collections/findVersionByIDTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/findVersionByIDTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/findVersionByIDTool.js +83 -0
- package/dist/mcp/builtin/collections/findVersionByIDTool.js.map +1 -0
- package/dist/mcp/builtin/collections/findVersionsTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/findVersionsTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/findVersionsTool.js +98 -0
- package/dist/mcp/builtin/collections/findVersionsTool.js.map +1 -0
- package/dist/mcp/builtin/collections/formatCollectionError.d.ts +9 -0
- package/dist/mcp/builtin/collections/formatCollectionError.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/formatCollectionError.js +60 -0
- package/dist/mcp/builtin/collections/formatCollectionError.js.map +1 -0
- package/dist/mcp/builtin/collections/getCollectionSchemaTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/getCollectionSchemaTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/getCollectionSchemaTool.js +87 -0
- package/dist/mcp/builtin/collections/getCollectionSchemaTool.js.map +1 -0
- package/dist/mcp/builtin/collections/restoreVersionTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/restoreVersionTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/restoreVersionTool.js +81 -0
- package/dist/mcp/builtin/collections/restoreVersionTool.js.map +1 -0
- package/dist/mcp/builtin/collections/updateTool.d.ts +1 -1
- package/dist/mcp/builtin/collections/updateTool.d.ts.map +1 -1
- package/dist/mcp/builtin/collections/updateTool.js +106 -93
- package/dist/mcp/builtin/collections/updateTool.js.map +1 -1
- package/dist/mcp/builtin/collections/uploadInstructionsTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/uploadInstructionsTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/uploadInstructionsTool.js +55 -0
- package/dist/mcp/builtin/collections/uploadInstructionsTool.js.map +1 -0
- package/dist/mcp/builtin/getConfigInfoTool.d.ts +2 -0
- package/dist/mcp/builtin/getConfigInfoTool.d.ts.map +1 -0
- package/dist/mcp/builtin/getConfigInfoTool.js +68 -0
- package/dist/mcp/builtin/getConfigInfoTool.js.map +1 -0
- package/dist/mcp/builtin/globals/countVersionsTool.d.ts +2 -0
- package/dist/mcp/builtin/globals/countVersionsTool.d.ts.map +1 -0
- package/dist/mcp/builtin/globals/countVersionsTool.js +64 -0
- package/dist/mcp/builtin/globals/countVersionsTool.js.map +1 -0
- package/dist/mcp/builtin/globals/findTool.d.ts.map +1 -1
- package/dist/mcp/builtin/globals/findTool.js +20 -23
- package/dist/mcp/builtin/globals/findTool.js.map +1 -1
- package/dist/mcp/builtin/globals/findVersionByIDTool.d.ts +2 -0
- package/dist/mcp/builtin/globals/findVersionByIDTool.d.ts.map +1 -0
- package/dist/mcp/builtin/globals/findVersionByIDTool.js +79 -0
- package/dist/mcp/builtin/globals/findVersionByIDTool.js.map +1 -0
- package/dist/mcp/builtin/globals/findVersionsTool.d.ts +2 -0
- package/dist/mcp/builtin/globals/findVersionsTool.d.ts.map +1 -0
- package/dist/mcp/builtin/globals/findVersionsTool.js +94 -0
- package/dist/mcp/builtin/globals/findVersionsTool.js.map +1 -0
- package/dist/mcp/builtin/globals/getGlobalSchemaTool.d.ts +2 -0
- package/dist/mcp/builtin/globals/getGlobalSchemaTool.d.ts.map +1 -0
- package/dist/mcp/builtin/globals/getGlobalSchemaTool.js +65 -0
- package/dist/mcp/builtin/globals/getGlobalSchemaTool.js.map +1 -0
- package/dist/mcp/builtin/globals/restoreVersionTool.d.ts +2 -0
- package/dist/mcp/builtin/globals/restoreVersionTool.d.ts.map +1 -0
- package/dist/mcp/builtin/globals/restoreVersionTool.js +77 -0
- package/dist/mcp/builtin/globals/restoreVersionTool.js.map +1 -0
- package/dist/mcp/builtin/globals/updateTool.d.ts.map +1 -1
- package/dist/mcp/builtin/globals/updateTool.js +33 -42
- package/dist/mcp/builtin/globals/updateTool.js.map +1 -1
- package/dist/mcp/builtin/validateEntityData.d.ts +14 -0
- package/dist/mcp/builtin/validateEntityData.d.ts.map +1 -0
- package/dist/mcp/builtin/validateEntityData.js +82 -0
- package/dist/mcp/builtin/validateEntityData.js.map +1 -0
- package/dist/mcp/builtinTools.d.ts +150 -19
- package/dist/mcp/builtinTools.d.ts.map +1 -1
- package/dist/mcp/builtinTools.js +125 -20
- package/dist/mcp/builtinTools.js.map +1 -1
- package/dist/mcp/sanitizeMCPConfig.d.ts +0 -1
- package/dist/mcp/sanitizeMCPConfig.d.ts.map +1 -1
- package/dist/mcp/sanitizeMCPConfig.js +124 -58
- package/dist/mcp/sanitizeMCPConfig.js.map +1 -1
- package/dist/stdio.d.ts +3 -3
- package/dist/stdio.d.ts.map +1 -1
- package/dist/stdio.js +84 -46
- package/dist/stdio.js.map +1 -1
- package/dist/types.d.ts +112 -110
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -4
- package/dist/types.js.map +1 -1
- package/dist/utils/camelCase.d.ts.map +1 -1
- package/dist/utils/getPluginConfig.d.ts +1 -1
- package/dist/utils/getPluginConfig.js +1 -1
- package/dist/utils/getPluginConfig.js.map +1 -1
- package/dist/utils/resolveProjectRoot.d.ts.map +1 -1
- package/dist/utils/schemaConversion/filterFieldsByAccess.d.ts +28 -0
- package/dist/utils/schemaConversion/filterFieldsByAccess.d.ts.map +1 -0
- package/dist/utils/schemaConversion/filterFieldsByAccess.js +71 -0
- package/dist/utils/schemaConversion/filterFieldsByAccess.js.map +1 -0
- package/dist/utils/schemaConversion/getEntityInputSchema.d.ts +13 -0
- package/dist/utils/schemaConversion/getEntityInputSchema.d.ts.map +1 -0
- package/dist/utils/schemaConversion/getEntityInputSchema.js +66 -0
- package/dist/utils/schemaConversion/getEntityInputSchema.js.map +1 -0
- package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts +5 -10
- package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts.map +1 -1
- package/dist/utils/schemaConversion/sanitizeEntitySchema.js +15 -95
- package/dist/utils/schemaConversion/sanitizeEntitySchema.js.map +1 -1
- package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js +15 -40
- package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js.map +1 -1
- package/dist/utils/toStandardSchema.d.ts.map +1 -1
- package/dist/utils/whereSchema.d.ts +9 -0
- package/dist/utils/whereSchema.d.ts.map +1 -0
- package/dist/utils/whereSchema.js +13 -0
- package/dist/utils/whereSchema.js.map +1 -0
- package/package.json +10 -15
- package/src/defaultAccess.ts +3 -0
- package/src/endpoint/access.ts +81 -101
- package/src/endpoint/index.ts +58 -16
- package/src/exports/client.ts +2 -1
- package/src/exports/internal.ts +1 -0
- package/src/index.ts +12 -20
- package/src/mcp/buildMcpServer.ts +170 -115
- package/src/mcp/builtin/collections/authTools.ts +45 -9
- package/src/mcp/builtin/collections/countTool.ts +73 -0
- package/src/mcp/builtin/collections/countVersionsTool.ts +69 -0
- package/src/mcp/builtin/collections/createTool.ts +67 -62
- package/src/mcp/builtin/collections/deleteTool.ts +20 -18
- package/src/mcp/builtin/collections/duplicateTool.ts +134 -0
- package/src/mcp/builtin/collections/fileInput.spec.ts +93 -0
- package/src/mcp/builtin/collections/fileInput.ts +154 -0
- package/src/mcp/builtin/collections/findDistinctTool.ts +119 -0
- package/src/mcp/builtin/collections/findTool.ts +66 -37
- package/src/mcp/builtin/collections/findVersionByIDTool.ts +109 -0
- package/src/mcp/builtin/collections/findVersionsTool.ts +154 -0
- package/src/mcp/builtin/collections/formatCollectionError.ts +84 -0
- package/src/mcp/builtin/collections/getCollectionSchemaTool.ts +80 -0
- package/src/mcp/builtin/collections/restoreVersionTool.ts +107 -0
- package/src/mcp/builtin/collections/updateTool.ts +132 -115
- package/src/mcp/builtin/collections/uploadInstructionsTool.ts +64 -0
- package/src/mcp/builtin/getConfigInfoTool.ts +67 -0
- package/src/mcp/builtin/globals/countVersionsTool.ts +68 -0
- package/src/mcp/builtin/globals/findTool.ts +28 -19
- package/src/mcp/builtin/globals/findVersionByIDTool.ts +103 -0
- package/src/mcp/builtin/globals/findVersionsTool.ts +147 -0
- package/src/mcp/builtin/globals/getGlobalSchemaTool.ts +63 -0
- package/src/mcp/builtin/globals/restoreVersionTool.ts +99 -0
- package/src/mcp/builtin/globals/updateTool.ts +52 -57
- package/src/mcp/builtin/validateEntityData.ts +132 -0
- package/src/mcp/builtinTools.ts +118 -41
- package/src/mcp/sanitizeMCPConfig.ts +120 -78
- package/src/stdio.ts +79 -46
- package/src/types.ts +128 -115
- package/src/utils/getPluginConfig.ts +1 -1
- package/src/utils/schemaConversion/filterFieldsByAccess.ts +123 -0
- package/src/utils/schemaConversion/getEntityInputSchema.ts +96 -0
- package/src/utils/schemaConversion/sanitizeEntitySchema.spec.ts +12 -19
- package/src/utils/schemaConversion/sanitizeEntitySchema.ts +17 -114
- package/src/utils/whereSchema.ts +24 -0
- package/dist/@types/assets.d.js +0 -2
- package/dist/@types/assets.d.js.map +0 -1
- package/dist/collection/getAccessField.d.ts +0 -12
- package/dist/collection/getAccessField.d.ts.map +0 -1
- package/dist/collection/getAccessField.js +0 -57
- package/dist/collection/getAccessField.js.map +0 -1
- package/dist/collection/index.d.ts +0 -6
- package/dist/collection/index.d.ts.map +0 -1
- package/dist/collection/index.js +0 -60
- package/dist/collection/index.js.map +0 -1
- package/dist/components/AccessField/index.client.d.ts +0 -10
- package/dist/components/AccessField/index.client.d.ts.map +0 -1
- package/dist/components/AccessField/index.client.js +0 -305
- package/dist/components/AccessField/index.client.js.map +0 -1
- package/dist/components/AccessField/index.css +0 -93
- package/dist/utils/localAPIDefaults.d.ts +0 -20
- package/dist/utils/localAPIDefaults.d.ts.map +0 -1
- package/dist/utils/localAPIDefaults.js +0 -19
- package/dist/utils/localAPIDefaults.js.map +0 -1
- package/dist/utils/schemaConversion/buildToolInput.d.ts +0 -29
- package/dist/utils/schemaConversion/buildToolInput.d.ts.map +0 -1
- package/dist/utils/schemaConversion/buildToolInput.js +0 -51
- package/dist/utils/schemaConversion/buildToolInput.js.map +0 -1
- package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts +0 -7
- package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts.map +0 -1
- package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.js +0 -20
- package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.js.map +0 -1
- package/src/@types/assets.d.ts +0 -3
- package/src/collection/getAccessField.ts +0 -64
- package/src/collection/index.ts +0 -64
- package/src/components/AccessField/index.client.tsx +0 -344
- package/src/components/AccessField/index.css +0 -93
- package/src/utils/localAPIDefaults.ts +0 -22
- package/src/utils/schemaConversion/buildToolInput.ts +0 -68
- package/src/utils/schemaConversion/removeVirtualFieldsFromSchema.ts +0 -27
package/src/mcp/builtinTools.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CollectionTool, GlobalTool } from '../types.js'
|
|
1
|
+
import type { CollectionTool, GlobalTool, Tool } from '../types.js'
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
authCollectionTool,
|
|
@@ -8,62 +8,135 @@ import {
|
|
|
8
8
|
unlockCollectionTool,
|
|
9
9
|
verifyCollectionTool,
|
|
10
10
|
} from './builtin/collections/authTools.js'
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
11
|
+
import { countDocumentsTool } from './builtin/collections/countTool.js'
|
|
12
|
+
import { countVersionsTool } from './builtin/collections/countVersionsTool.js'
|
|
13
|
+
import { createDocumentTool } from './builtin/collections/createTool.js'
|
|
14
|
+
import { deleteDocumentsTool } from './builtin/collections/deleteTool.js'
|
|
15
|
+
import { duplicateDocumentTool } from './builtin/collections/duplicateTool.js'
|
|
16
|
+
import { findDistinctTool } from './builtin/collections/findDistinctTool.js'
|
|
17
|
+
import { findDocumentsTool } from './builtin/collections/findTool.js'
|
|
18
|
+
import { findVersionByIDTool } from './builtin/collections/findVersionByIDTool.js'
|
|
19
|
+
import { findVersionsTool } from './builtin/collections/findVersionsTool.js'
|
|
20
|
+
import { getCollectionSchemaTool } from './builtin/collections/getCollectionSchemaTool.js'
|
|
21
|
+
import { restoreVersionTool } from './builtin/collections/restoreVersionTool.js'
|
|
22
|
+
import { updateDocumentTool } from './builtin/collections/updateTool.js'
|
|
23
|
+
import { getUploadInstructionsTool } from './builtin/collections/uploadInstructionsTool.js'
|
|
24
|
+
import { getConfigInfoTool } from './builtin/getConfigInfoTool.js'
|
|
25
|
+
import { countGlobalVersionsTool } from './builtin/globals/countVersionsTool.js'
|
|
15
26
|
import { findGlobalTool } from './builtin/globals/findTool.js'
|
|
27
|
+
import { findGlobalVersionByIDTool } from './builtin/globals/findVersionByIDTool.js'
|
|
28
|
+
import { findGlobalVersionsTool } from './builtin/globals/findVersionsTool.js'
|
|
29
|
+
import { getGlobalSchemaTool } from './builtin/globals/getGlobalSchemaTool.js'
|
|
30
|
+
import { restoreGlobalVersionTool } from './builtin/globals/restoreVersionTool.js'
|
|
16
31
|
import { updateGlobalTool } from './builtin/globals/updateTool.js'
|
|
17
32
|
|
|
33
|
+
type CollectionBuiltin = {
|
|
34
|
+
mcpName: string
|
|
35
|
+
requiresDuplicateEnabled?: boolean
|
|
36
|
+
requiresUpload?: boolean
|
|
37
|
+
requiresVersions?: boolean
|
|
38
|
+
tool: CollectionTool
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
type GlobalBuiltin = {
|
|
42
|
+
mcpName: string
|
|
43
|
+
requiresVersions?: boolean
|
|
44
|
+
tool: GlobalTool
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export const TOOL_BUILTINS = {
|
|
48
|
+
getConfigInfo: { mcpName: 'getConfigInfo', tool: getConfigInfoTool },
|
|
49
|
+
} satisfies Record<string, { mcpName: string; tool: Tool }>
|
|
50
|
+
|
|
18
51
|
/**
|
|
19
52
|
* The static built-in collection CRUD tools. Keys here are the source of truth
|
|
20
53
|
* for `MCPCollectionBuiltinName` — adding/removing an entry updates the type
|
|
21
54
|
* automatically.
|
|
22
55
|
*/
|
|
23
|
-
export const COLLECTION_BUILTINS
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
56
|
+
export const COLLECTION_BUILTINS = {
|
|
57
|
+
count: { mcpName: 'countDocuments', tool: countDocumentsTool },
|
|
58
|
+
countVersions: { mcpName: 'countVersions', requiresVersions: true, tool: countVersionsTool },
|
|
59
|
+
create: { mcpName: 'createDocument', tool: createDocumentTool },
|
|
60
|
+
delete: { mcpName: 'deleteDocuments', tool: deleteDocumentsTool },
|
|
61
|
+
duplicate: {
|
|
62
|
+
mcpName: 'duplicateDocument',
|
|
63
|
+
requiresDuplicateEnabled: true,
|
|
64
|
+
tool: duplicateDocumentTool,
|
|
65
|
+
},
|
|
66
|
+
find: { mcpName: 'findDocuments', tool: findDocumentsTool },
|
|
67
|
+
findDistinct: { mcpName: 'findDistinct', tool: findDistinctTool },
|
|
68
|
+
findVersionByID: {
|
|
69
|
+
mcpName: 'findVersionByID',
|
|
70
|
+
requiresVersions: true,
|
|
71
|
+
tool: findVersionByIDTool,
|
|
72
|
+
},
|
|
73
|
+
findVersions: { mcpName: 'findVersions', requiresVersions: true, tool: findVersionsTool },
|
|
74
|
+
getCollectionSchema: { mcpName: 'getCollectionSchema', tool: getCollectionSchemaTool },
|
|
75
|
+
getUploadInstructions: {
|
|
76
|
+
mcpName: 'getUploadInstructions',
|
|
77
|
+
requiresUpload: true,
|
|
78
|
+
tool: getUploadInstructionsTool,
|
|
79
|
+
},
|
|
80
|
+
restoreVersion: { mcpName: 'restoreVersion', requiresVersions: true, tool: restoreVersionTool },
|
|
81
|
+
update: { mcpName: 'updateDocument', tool: updateDocumentTool },
|
|
82
|
+
} satisfies Record<string, CollectionBuiltin>
|
|
29
83
|
|
|
30
84
|
/**
|
|
31
|
-
* The static auth tools surfaced under auth-enabled collections.
|
|
32
|
-
*
|
|
33
|
-
* for `MCPCollectionAuthToolName`.
|
|
85
|
+
* The static auth tools surfaced under auth-enabled collections. Keys are the
|
|
86
|
+
* source of truth for `MCPCollectionAuthToolName`.
|
|
34
87
|
*/
|
|
35
|
-
export const COLLECTION_AUTH_BUILTINS
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
login: {
|
|
42
|
-
resetPassword: {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
88
|
+
export const COLLECTION_AUTH_BUILTINS = {
|
|
89
|
+
auth: { mcpName: 'auth', tool: authCollectionTool },
|
|
90
|
+
forgotPassword: {
|
|
91
|
+
mcpName: 'forgotPassword',
|
|
92
|
+
tool: forgotPasswordCollectionTool,
|
|
93
|
+
},
|
|
94
|
+
login: { mcpName: 'login', tool: loginCollectionTool },
|
|
95
|
+
resetPassword: {
|
|
96
|
+
mcpName: 'resetPassword',
|
|
97
|
+
tool: resetPasswordCollectionTool,
|
|
98
|
+
},
|
|
99
|
+
unlock: { mcpName: 'unlock', tool: unlockCollectionTool },
|
|
100
|
+
verify: { mcpName: 'verify', tool: verifyCollectionTool },
|
|
101
|
+
} satisfies Record<string, { mcpName: string; tool: CollectionTool }>
|
|
46
102
|
|
|
47
103
|
/**
|
|
48
104
|
* The static built-in global tools. Keys are the source of truth for
|
|
49
105
|
* `MCPGlobalBuiltinName`.
|
|
50
106
|
*/
|
|
51
|
-
export const GLOBAL_BUILTINS
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
107
|
+
export const GLOBAL_BUILTINS = {
|
|
108
|
+
countGlobalVersions: {
|
|
109
|
+
mcpName: 'countGlobalVersions',
|
|
110
|
+
requiresVersions: true,
|
|
111
|
+
tool: countGlobalVersionsTool,
|
|
112
|
+
},
|
|
113
|
+
find: { mcpName: 'findGlobal', tool: findGlobalTool },
|
|
114
|
+
findGlobalVersionByID: {
|
|
115
|
+
mcpName: 'findGlobalVersionByID',
|
|
116
|
+
requiresVersions: true,
|
|
117
|
+
tool: findGlobalVersionByIDTool,
|
|
118
|
+
},
|
|
119
|
+
findGlobalVersions: {
|
|
120
|
+
mcpName: 'findGlobalVersions',
|
|
121
|
+
requiresVersions: true,
|
|
122
|
+
tool: findGlobalVersionsTool,
|
|
123
|
+
},
|
|
124
|
+
getGlobalSchema: { mcpName: 'getGlobalSchema', tool: getGlobalSchemaTool },
|
|
125
|
+
restoreGlobalVersion: {
|
|
126
|
+
mcpName: 'restoreGlobalVersion',
|
|
127
|
+
requiresVersions: true,
|
|
128
|
+
tool: restoreGlobalVersionTool,
|
|
129
|
+
},
|
|
130
|
+
update: { mcpName: 'updateGlobal', tool: updateGlobalTool },
|
|
131
|
+
} satisfies Record<string, GlobalBuiltin>
|
|
132
|
+
|
|
133
|
+
export type MCPCollectionBuiltinName = keyof typeof COLLECTION_BUILTINS
|
|
55
134
|
|
|
56
|
-
export type
|
|
135
|
+
export type MCPCollectionAuthToolName = keyof typeof COLLECTION_AUTH_BUILTINS
|
|
57
136
|
|
|
58
|
-
export type
|
|
59
|
-
| 'auth'
|
|
60
|
-
| 'forgotPassword'
|
|
61
|
-
| 'login'
|
|
62
|
-
| 'resetPassword'
|
|
63
|
-
| 'unlock'
|
|
64
|
-
| 'verify'
|
|
137
|
+
export type MCPGlobalBuiltinName = keyof typeof GLOBAL_BUILTINS
|
|
65
138
|
|
|
66
|
-
export type
|
|
139
|
+
export type MCPTopLevelBuiltinName = keyof typeof TOOL_BUILTINS
|
|
67
140
|
|
|
68
141
|
/**
|
|
69
142
|
* Pre-typed `Object.entries` for each registry. The cast from `string` to the
|
|
@@ -71,14 +144,18 @@ export type MCPGlobalBuiltinName = 'find' | 'update'
|
|
|
71
144
|
* cast — TypeScript's `Object.entries` always widens keys to `string`, which
|
|
72
145
|
* defeats the narrow type lookups on `MCPCollectionToolsMap`.
|
|
73
146
|
*/
|
|
147
|
+
export const TOOL_BUILTIN_ENTRIES = Object.entries(TOOL_BUILTINS) as Array<
|
|
148
|
+
[MCPTopLevelBuiltinName, (typeof TOOL_BUILTINS)[MCPTopLevelBuiltinName]]
|
|
149
|
+
>
|
|
150
|
+
|
|
74
151
|
export const COLLECTION_BUILTIN_ENTRIES = Object.entries(COLLECTION_BUILTINS) as Array<
|
|
75
|
-
[MCPCollectionBuiltinName,
|
|
152
|
+
[MCPCollectionBuiltinName, CollectionBuiltin]
|
|
76
153
|
>
|
|
77
154
|
|
|
78
155
|
export const COLLECTION_AUTH_BUILTIN_ENTRIES = Object.entries(COLLECTION_AUTH_BUILTINS) as Array<
|
|
79
|
-
[MCPCollectionAuthToolName,
|
|
156
|
+
[MCPCollectionAuthToolName, (typeof COLLECTION_AUTH_BUILTINS)[MCPCollectionAuthToolName]]
|
|
80
157
|
>
|
|
81
158
|
|
|
82
159
|
export const GLOBAL_BUILTIN_ENTRIES = Object.entries(GLOBAL_BUILTINS) as Array<
|
|
83
|
-
[MCPGlobalBuiltinName,
|
|
160
|
+
[MCPGlobalBuiltinName, GlobalBuiltin]
|
|
84
161
|
>
|
|
@@ -8,16 +8,16 @@ import type {
|
|
|
8
8
|
} from 'payload'
|
|
9
9
|
|
|
10
10
|
import type {
|
|
11
|
+
CollectionMCPItem,
|
|
11
12
|
CollectionTool,
|
|
13
|
+
GlobalMCPItem,
|
|
12
14
|
GlobalTool,
|
|
13
|
-
MCPBuiltInToolOverride,
|
|
14
15
|
MCPItem,
|
|
15
|
-
MCPPluginCollectionConfig,
|
|
16
16
|
MCPPluginConfig,
|
|
17
|
-
MCPPluginGlobalConfig,
|
|
18
17
|
SanitizedMCPPluginConfig,
|
|
19
18
|
} from '../types.js'
|
|
20
19
|
|
|
20
|
+
import { defaultAccess } from '../defaultAccess.js'
|
|
21
21
|
import {
|
|
22
22
|
COLLECTION_AUTH_BUILTIN_ENTRIES,
|
|
23
23
|
COLLECTION_AUTH_BUILTINS,
|
|
@@ -25,6 +25,8 @@ import {
|
|
|
25
25
|
COLLECTION_BUILTINS,
|
|
26
26
|
GLOBAL_BUILTIN_ENTRIES,
|
|
27
27
|
GLOBAL_BUILTINS,
|
|
28
|
+
TOOL_BUILTIN_ENTRIES,
|
|
29
|
+
TOOL_BUILTINS,
|
|
28
30
|
} from './builtinTools.js'
|
|
29
31
|
|
|
30
32
|
/**
|
|
@@ -32,7 +34,6 @@ import {
|
|
|
32
34
|
* - Flattens `tools` / `prompts` / `resources` / per-collection / per-global
|
|
33
35
|
* tool maps into a single `items` array.
|
|
34
36
|
* - Applies built-in tools for collections and globals, respecting opt-out user overrides.
|
|
35
|
-
* - Applies the `userCollection` default
|
|
36
37
|
*
|
|
37
38
|
* Called once during plugin init. After that, `plugins['@payloadcms/plugin-mcp']
|
|
38
39
|
* ?.options` holds the sanitized result
|
|
@@ -54,44 +55,55 @@ export const sanitizeMCPConfig = ({
|
|
|
54
55
|
items.push(...sanitizeGlobalConfig({ global, pluginConfig }))
|
|
55
56
|
}
|
|
56
57
|
|
|
57
|
-
for (const [
|
|
58
|
+
for (const [configKey, { mcpName, tool }] of TOOL_BUILTIN_ENTRIES) {
|
|
58
59
|
items.push({
|
|
59
60
|
type: 'tool',
|
|
60
|
-
|
|
61
|
-
label:
|
|
62
|
-
|
|
61
|
+
configKey,
|
|
62
|
+
label: tool.annotations?.title ?? configKey,
|
|
63
|
+
mcpName,
|
|
64
|
+
tool: { ...tool, access: tool.access ?? defaultAccess },
|
|
63
65
|
})
|
|
64
66
|
}
|
|
65
67
|
|
|
66
|
-
for (const [
|
|
68
|
+
for (const [configKey, tool] of Object.entries(pluginConfig.tools ?? {})) {
|
|
69
|
+
if (configKey in TOOL_BUILTINS) {
|
|
70
|
+
continue
|
|
71
|
+
}
|
|
72
|
+
items.push({
|
|
73
|
+
type: 'tool',
|
|
74
|
+
configKey,
|
|
75
|
+
label: tool.annotations?.title ?? configKey,
|
|
76
|
+
mcpName: configKey,
|
|
77
|
+
tool: { ...tool, access: tool.access ?? defaultAccess },
|
|
78
|
+
})
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
for (const [configKey, prompt] of Object.entries(pluginConfig.prompts ?? {})) {
|
|
67
82
|
items.push({
|
|
68
83
|
type: 'prompt',
|
|
69
|
-
|
|
70
|
-
label: prompt.title ??
|
|
71
|
-
|
|
84
|
+
configKey,
|
|
85
|
+
label: prompt.title ?? configKey,
|
|
86
|
+
mcpName: configKey,
|
|
87
|
+
prompt: { ...prompt, access: prompt.access ?? defaultAccess },
|
|
72
88
|
})
|
|
73
89
|
}
|
|
74
90
|
|
|
75
|
-
for (const [
|
|
91
|
+
for (const [configKey, resource] of Object.entries(pluginConfig.resources ?? {})) {
|
|
76
92
|
items.push({
|
|
77
93
|
type: 'resource',
|
|
78
|
-
|
|
79
|
-
label: resource.title ??
|
|
80
|
-
|
|
94
|
+
configKey,
|
|
95
|
+
label: resource.title ?? configKey,
|
|
96
|
+
mcpName: configKey,
|
|
97
|
+
resource: { ...resource, access: resource.access ?? defaultAccess },
|
|
81
98
|
})
|
|
82
99
|
}
|
|
83
100
|
|
|
84
|
-
// Mirror Payload's own admin.user detection (sanitize.ts) since plugins run first.
|
|
85
|
-
const firstCollectionWithAuth = config.collections!.find(({ auth }) => Boolean(auth))
|
|
86
|
-
|
|
87
101
|
return {
|
|
88
102
|
disabled: pluginConfig.disabled,
|
|
103
|
+
hooks: pluginConfig.hooks,
|
|
89
104
|
items,
|
|
90
105
|
mcp: pluginConfig.mcp,
|
|
91
|
-
|
|
92
|
-
overrideAuth: pluginConfig.overrideAuth,
|
|
93
|
-
userCollection:
|
|
94
|
-
pluginConfig.userCollection ?? config.admin?.user ?? firstCollectionWithAuth?.slug ?? 'users',
|
|
106
|
+
overrideGetAuthorizedMCP: pluginConfig.overrideGetAuthorizedMCP,
|
|
95
107
|
}
|
|
96
108
|
}
|
|
97
109
|
|
|
@@ -101,42 +113,81 @@ const sanitizeCollectionConfig = ({
|
|
|
101
113
|
}: {
|
|
102
114
|
collection: CollectionConfig | SanitizedCollectionConfig
|
|
103
115
|
pluginConfig: MCPPluginConfig
|
|
104
|
-
}):
|
|
105
|
-
if (collection.slug === 'payload-mcp-api-keys') {
|
|
106
|
-
return []
|
|
107
|
-
}
|
|
116
|
+
}): CollectionMCPItem[] => {
|
|
108
117
|
const slug = collection.slug
|
|
109
118
|
const collectionPluginConfig = pluginConfig.collections?.[slug]
|
|
110
|
-
const items:
|
|
119
|
+
const items: CollectionMCPItem[] = []
|
|
120
|
+
/**
|
|
121
|
+
* Payload disables duplicate for auth collections by default unless the
|
|
122
|
+
* collection explicitly opts back in with `disableDuplicate: false`.
|
|
123
|
+
*/
|
|
124
|
+
const isDuplicateDisabled =
|
|
125
|
+
collection.disableDuplicate === true ||
|
|
126
|
+
(Boolean(collection.auth) && collection.disableDuplicate !== false)
|
|
111
127
|
|
|
112
|
-
for (const [
|
|
128
|
+
for (const [
|
|
129
|
+
toolKey,
|
|
130
|
+
{ mcpName, requiresDuplicateEnabled, requiresUpload, requiresVersions, tool },
|
|
131
|
+
] of COLLECTION_BUILTIN_ENTRIES) {
|
|
132
|
+
if (requiresVersions && !collection.versions) {
|
|
133
|
+
continue
|
|
134
|
+
}
|
|
135
|
+
if (requiresDuplicateEnabled && isDuplicateDisabled) {
|
|
136
|
+
continue
|
|
137
|
+
}
|
|
138
|
+
if (requiresUpload && !collection.upload) {
|
|
139
|
+
continue
|
|
140
|
+
}
|
|
113
141
|
const matchedConfigEntry = collectionPluginConfig?.tools?.[toolKey]
|
|
114
142
|
if (matchedConfigEntry === false) {
|
|
115
143
|
continue
|
|
116
144
|
}
|
|
145
|
+
const override = typeof matchedConfigEntry === 'object' ? matchedConfigEntry : undefined
|
|
146
|
+
const annotations = { ...tool.annotations, ...override?.annotations }
|
|
117
147
|
items.push({
|
|
118
148
|
type: 'collectionTool',
|
|
119
149
|
collectionSlug: slug,
|
|
120
|
-
|
|
121
|
-
label:
|
|
122
|
-
|
|
150
|
+
configKey: toolKey,
|
|
151
|
+
label: annotations.title ?? toolKey,
|
|
152
|
+
mcpName,
|
|
153
|
+
tool: {
|
|
154
|
+
...tool,
|
|
155
|
+
access: override?.access ?? tool.access ?? defaultAccess,
|
|
156
|
+
annotations,
|
|
157
|
+
description: override?.description ?? tool.description,
|
|
158
|
+
overrideResponse:
|
|
159
|
+
override?.overrideResponse ??
|
|
160
|
+
collectionPluginConfig?.overrideResponse ??
|
|
161
|
+
tool.overrideResponse,
|
|
162
|
+
},
|
|
123
163
|
})
|
|
124
164
|
}
|
|
125
165
|
|
|
126
166
|
if (collection.auth) {
|
|
127
|
-
for (const [authToolKey, {
|
|
167
|
+
for (const [authToolKey, { mcpName, tool }] of COLLECTION_AUTH_BUILTIN_ENTRIES) {
|
|
128
168
|
const matchedConfigEntry = collectionPluginConfig?.tools?.[authToolKey]
|
|
129
169
|
if (!matchedConfigEntry) {
|
|
130
170
|
continue
|
|
131
171
|
}
|
|
132
172
|
// `true` means "enable, no override"; only the object form carries fields.
|
|
133
173
|
const override = typeof matchedConfigEntry === 'object' ? matchedConfigEntry : undefined
|
|
174
|
+
const annotations = { ...tool.annotations, ...override?.annotations }
|
|
134
175
|
items.push({
|
|
135
176
|
type: 'collectionTool',
|
|
136
177
|
collectionSlug: slug,
|
|
137
|
-
|
|
138
|
-
label,
|
|
139
|
-
|
|
178
|
+
configKey: authToolKey,
|
|
179
|
+
label: annotations.title ?? authToolKey,
|
|
180
|
+
mcpName,
|
|
181
|
+
tool: {
|
|
182
|
+
...tool,
|
|
183
|
+
access: override?.access ?? tool.access ?? defaultAccess,
|
|
184
|
+
annotations,
|
|
185
|
+
description: override?.description ?? tool.description,
|
|
186
|
+
overrideResponse:
|
|
187
|
+
override?.overrideResponse ??
|
|
188
|
+
collectionPluginConfig?.overrideResponse ??
|
|
189
|
+
tool.overrideResponse,
|
|
190
|
+
},
|
|
140
191
|
})
|
|
141
192
|
}
|
|
142
193
|
}
|
|
@@ -146,8 +197,8 @@ const sanitizeCollectionConfig = ({
|
|
|
146
197
|
const customEntries = Object.entries(collectionPluginConfig?.tools ?? {}) as Array<
|
|
147
198
|
[string, CollectionTool | undefined]
|
|
148
199
|
>
|
|
149
|
-
for (const [
|
|
150
|
-
if (
|
|
200
|
+
for (const [configKey, customTool] of customEntries) {
|
|
201
|
+
if (configKey in COLLECTION_BUILTINS || configKey in COLLECTION_AUTH_BUILTINS) {
|
|
151
202
|
continue
|
|
152
203
|
}
|
|
153
204
|
if (!customTool) {
|
|
@@ -156,9 +207,10 @@ const sanitizeCollectionConfig = ({
|
|
|
156
207
|
items.push({
|
|
157
208
|
type: 'collectionTool',
|
|
158
209
|
collectionSlug: slug,
|
|
159
|
-
|
|
160
|
-
label:
|
|
161
|
-
|
|
210
|
+
configKey,
|
|
211
|
+
label: customTool.annotations?.title ?? configKey,
|
|
212
|
+
mcpName: configKey,
|
|
213
|
+
tool: { ...customTool, access: customTool.access ?? defaultAccess },
|
|
162
214
|
})
|
|
163
215
|
}
|
|
164
216
|
|
|
@@ -171,30 +223,45 @@ const sanitizeGlobalConfig = ({
|
|
|
171
223
|
}: {
|
|
172
224
|
global: GlobalConfig | SanitizedGlobalConfig
|
|
173
225
|
pluginConfig: MCPPluginConfig
|
|
174
|
-
}):
|
|
226
|
+
}): GlobalMCPItem[] => {
|
|
175
227
|
const slug = global.slug
|
|
176
228
|
const globalPluginConfig = pluginConfig.globals?.[slug]
|
|
177
|
-
const items:
|
|
229
|
+
const items: GlobalMCPItem[] = []
|
|
178
230
|
|
|
179
|
-
for (const [toolKey,
|
|
231
|
+
for (const [toolKey, { mcpName, requiresVersions, tool }] of GLOBAL_BUILTIN_ENTRIES) {
|
|
232
|
+
if (requiresVersions && !global.versions) {
|
|
233
|
+
continue
|
|
234
|
+
}
|
|
180
235
|
const matchedConfigEntry = globalPluginConfig?.tools?.[toolKey]
|
|
181
236
|
if (matchedConfigEntry === false) {
|
|
182
237
|
continue
|
|
183
238
|
}
|
|
239
|
+
const override = typeof matchedConfigEntry === 'object' ? matchedConfigEntry : undefined
|
|
240
|
+
const annotations = { ...tool.annotations, ...override?.annotations }
|
|
184
241
|
items.push({
|
|
185
242
|
type: 'globalTool',
|
|
243
|
+
configKey: toolKey,
|
|
186
244
|
globalSlug: slug,
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
tool:
|
|
245
|
+
label: annotations.title ?? toolKey,
|
|
246
|
+
mcpName,
|
|
247
|
+
tool: {
|
|
248
|
+
...tool,
|
|
249
|
+
access: override?.access ?? tool.access ?? defaultAccess,
|
|
250
|
+
annotations,
|
|
251
|
+
description: override?.description ?? tool.description,
|
|
252
|
+
overrideResponse:
|
|
253
|
+
override?.overrideResponse ??
|
|
254
|
+
globalPluginConfig?.overrideResponse ??
|
|
255
|
+
tool.overrideResponse,
|
|
256
|
+
},
|
|
190
257
|
})
|
|
191
258
|
}
|
|
192
259
|
|
|
193
260
|
const customEntries = Object.entries(globalPluginConfig?.tools ?? {}) as Array<
|
|
194
261
|
[string, GlobalTool | undefined]
|
|
195
262
|
>
|
|
196
|
-
for (const [
|
|
197
|
-
if (
|
|
263
|
+
for (const [configKey, customTool] of customEntries) {
|
|
264
|
+
if (configKey in GLOBAL_BUILTINS) {
|
|
198
265
|
continue
|
|
199
266
|
}
|
|
200
267
|
if (!customTool) {
|
|
@@ -202,38 +269,13 @@ const sanitizeGlobalConfig = ({
|
|
|
202
269
|
}
|
|
203
270
|
items.push({
|
|
204
271
|
type: 'globalTool',
|
|
272
|
+
configKey,
|
|
205
273
|
globalSlug: slug,
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
tool: customTool,
|
|
274
|
+
label: customTool.annotations?.title ?? configKey,
|
|
275
|
+
mcpName: configKey,
|
|
276
|
+
tool: { ...customTool, access: customTool.access ?? defaultAccess },
|
|
209
277
|
})
|
|
210
278
|
}
|
|
211
279
|
|
|
212
280
|
return items
|
|
213
281
|
}
|
|
214
|
-
|
|
215
|
-
const capitalize = (s: string): string => s.charAt(0).toUpperCase() + s.slice(1)
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* Spread the static built-in tool and apply consumer-side overrides.
|
|
219
|
-
* Precedence: per-tool override > scope-level (collection/global) override >
|
|
220
|
-
* the static tool's defaults. `toolEntry` is whatever the user put under
|
|
221
|
-
* `tools: { find: ... }` — could be `true`, `false`, or an override object —
|
|
222
|
-
* so it's narrowed internally.
|
|
223
|
-
*/
|
|
224
|
-
const overrideBuiltinTool = <TTool extends CollectionTool | GlobalTool>(
|
|
225
|
-
tool: TTool,
|
|
226
|
-
toolOverride?: MCPBuiltInToolOverride,
|
|
227
|
-
entityPluginConfig?: TTool extends CollectionTool
|
|
228
|
-
? MCPPluginCollectionConfig<any>
|
|
229
|
-
: MCPPluginGlobalConfig,
|
|
230
|
-
): TTool => {
|
|
231
|
-
return {
|
|
232
|
-
...tool,
|
|
233
|
-
description: toolOverride?.description ?? entityPluginConfig?.description ?? tool.description,
|
|
234
|
-
overrideResponse:
|
|
235
|
-
toolOverride?.overrideResponse ??
|
|
236
|
-
entityPluginConfig?.overrideResponse ??
|
|
237
|
-
tool.overrideResponse,
|
|
238
|
-
}
|
|
239
|
-
}
|