@payloadcms/plugin-mcp 4.0.0-internal.38b7f1d → 4.0.0-internal.c2b57ce
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/bin.js +39 -0
- package/dist/collection/getAccessField.d.ts +12 -0
- package/dist/collection/getAccessField.d.ts.map +1 -0
- package/dist/collection/getAccessField.js +57 -0
- package/dist/collection/getAccessField.js.map +1 -0
- package/dist/collection/index.d.ts +6 -0
- package/dist/collection/index.d.ts.map +1 -0
- package/dist/collection/index.js +59 -0
- package/dist/collection/index.js.map +1 -0
- package/dist/components/AccessField/index.client.d.ts +10 -0
- package/dist/components/AccessField/index.client.d.ts.map +1 -0
- package/dist/components/AccessField/index.client.js +305 -0
- package/dist/components/AccessField/index.client.js.map +1 -0
- package/dist/components/AccessField/index.css +93 -0
- package/dist/defineTool.d.ts +26 -0
- package/dist/defineTool.d.ts.map +1 -0
- package/dist/defineTool.js +37 -0
- package/dist/defineTool.js.map +1 -0
- package/dist/endpoint/access.d.ts +10 -0
- package/dist/endpoint/access.d.ts.map +1 -0
- package/dist/endpoint/access.js +106 -0
- package/dist/endpoint/access.js.map +1 -0
- package/dist/endpoint/index.d.ts +3 -0
- package/dist/endpoint/index.d.ts.map +1 -0
- package/dist/endpoint/index.js +36 -0
- package/dist/endpoint/index.js.map +1 -0
- package/dist/exports/client.d.ts +2 -0
- package/dist/exports/client.d.ts.map +1 -0
- package/dist/exports/client.js +4 -0
- package/dist/exports/client.js.map +1 -0
- package/dist/index.d.ts +4 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -67
- package/dist/index.js.map +1 -1
- package/dist/mcp/buildMcpServer.d.ts +19 -0
- package/dist/mcp/buildMcpServer.d.ts.map +1 -0
- package/dist/mcp/buildMcpServer.js +163 -0
- package/dist/mcp/buildMcpServer.js.map +1 -0
- package/dist/mcp/builtin/collections/authTools.d.ts +7 -0
- package/dist/mcp/builtin/collections/authTools.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/authTools.js +250 -0
- package/dist/mcp/builtin/collections/authTools.js.map +1 -0
- package/dist/mcp/builtin/collections/createTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/createTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/createTool.js +87 -0
- package/dist/mcp/builtin/collections/createTool.js.map +1 -0
- package/dist/mcp/builtin/collections/deleteTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/deleteTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/deleteTool.js +117 -0
- package/dist/mcp/builtin/collections/deleteTool.js.map +1 -0
- package/dist/mcp/builtin/collections/findTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/findTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/findTool.js +159 -0
- package/dist/mcp/builtin/collections/findTool.js.map +1 -0
- package/dist/mcp/builtin/collections/updateTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/updateTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/updateTool.js +187 -0
- package/dist/mcp/builtin/collections/updateTool.js.map +1 -0
- package/dist/mcp/builtin/globals/findTool.d.ts +2 -0
- package/dist/mcp/builtin/globals/findTool.d.ts.map +1 -0
- package/dist/mcp/builtin/globals/findTool.js +76 -0
- package/dist/mcp/builtin/globals/findTool.js.map +1 -0
- package/dist/mcp/builtin/globals/updateTool.d.ts +2 -0
- package/dist/mcp/builtin/globals/updateTool.d.ts.map +1 -0
- package/dist/mcp/builtin/globals/updateTool.js +92 -0
- package/dist/mcp/builtin/globals/updateTool.js.map +1 -0
- package/dist/mcp/builtinTools.d.ts +37 -0
- package/dist/mcp/builtinTools.d.ts.map +1 -0
- package/dist/mcp/builtinTools.js +64 -0
- package/dist/mcp/builtinTools.js.map +1 -0
- package/dist/mcp/sanitizeMCPConfig.d.ts +17 -0
- package/dist/mcp/sanitizeMCPConfig.d.ts.map +1 -0
- package/dist/mcp/sanitizeMCPConfig.js +167 -0
- package/dist/mcp/sanitizeMCPConfig.js.map +1 -0
- package/dist/stdio.d.ts +8 -0
- package/dist/stdio.d.ts.map +1 -0
- package/dist/stdio.js +89 -0
- package/dist/stdio.js.map +1 -0
- package/dist/types.d.ts +262 -455
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +6 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/camelCase.d.ts.map +1 -1
- package/dist/utils/getLogger.d.ts +10 -0
- package/dist/utils/getLogger.d.ts.map +1 -0
- package/dist/utils/getLogger.js +22 -0
- package/dist/utils/getLogger.js.map +1 -0
- package/dist/utils/getPluginConfig.d.ts +12 -0
- package/dist/utils/getPluginConfig.d.ts.map +1 -0
- package/dist/utils/getPluginConfig.js +15 -0
- package/dist/utils/getPluginConfig.js.map +1 -0
- package/dist/utils/localAPIDefaults.d.ts +20 -0
- package/dist/utils/localAPIDefaults.d.ts.map +1 -0
- package/dist/utils/localAPIDefaults.js +19 -0
- package/dist/utils/localAPIDefaults.js.map +1 -0
- package/dist/utils/resolveProjectRoot.d.ts +7 -0
- package/dist/utils/resolveProjectRoot.d.ts.map +1 -0
- package/dist/utils/resolveProjectRoot.js +15 -0
- package/dist/utils/resolveProjectRoot.js.map +1 -0
- package/dist/utils/schemaConversion/prepareCollectionSchema.d.ts +7 -0
- package/dist/utils/schemaConversion/prepareCollectionSchema.d.ts.map +1 -0
- package/dist/utils/schemaConversion/prepareCollectionSchema.js +37 -0
- package/dist/utils/schemaConversion/prepareCollectionSchema.js.map +1 -0
- package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts +2 -2
- package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts.map +1 -1
- package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.js.map +1 -1
- package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts +2 -2
- package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts.map +1 -1
- package/dist/utils/schemaConversion/sanitizeJsonSchema.js.map +1 -1
- package/dist/utils/schemaConversion/simplifyRelationshipFields.d.ts +2 -2
- package/dist/utils/schemaConversion/simplifyRelationshipFields.d.ts.map +1 -1
- package/dist/utils/schemaConversion/simplifyRelationshipFields.js +7 -4
- package/dist/utils/schemaConversion/simplifyRelationshipFields.js.map +1 -1
- package/dist/utils/schemaConversion/transformPointFields.d.ts +2 -2
- package/dist/utils/schemaConversion/transformPointFields.d.ts.map +1 -1
- package/dist/utils/schemaConversion/transformPointFields.js +7 -1
- package/dist/utils/schemaConversion/transformPointFields.js.map +1 -1
- package/dist/utils/toStandardSchema.d.ts +5 -0
- package/dist/utils/toStandardSchema.d.ts.map +1 -0
- package/dist/utils/toStandardSchema.js +4 -0
- package/dist/utils/toStandardSchema.js.map +1 -0
- package/package.json +35 -10
- package/src/collection/getAccessField.ts +64 -0
- package/src/collection/index.ts +63 -0
- package/src/components/AccessField/index.client.tsx +344 -0
- package/src/components/AccessField/index.css +93 -0
- package/src/defineTool.ts +44 -0
- package/src/endpoint/access.ts +132 -0
- package/src/endpoint/index.ts +35 -0
- package/src/exports/client.ts +2 -0
- package/src/index.ts +35 -85
- package/src/mcp/buildMcpServer.ts +224 -0
- package/src/mcp/builtin/collections/authTools.ts +233 -0
- package/src/mcp/builtin/collections/createTool.ts +116 -0
- package/src/mcp/builtin/collections/deleteTool.ts +123 -0
- package/src/mcp/builtin/collections/findTool.ts +187 -0
- package/src/mcp/builtin/collections/updateTool.ts +205 -0
- package/src/mcp/builtin/globals/findTool.ts +96 -0
- package/src/mcp/builtin/globals/updateTool.ts +118 -0
- package/src/mcp/builtinTools.ts +84 -0
- package/src/mcp/sanitizeMCPConfig.ts +239 -0
- package/src/stdio.ts +98 -0
- package/src/types.ts +295 -490
- package/src/utils/getLogger.ts +22 -0
- package/src/utils/getPluginConfig.ts +24 -0
- package/src/utils/localAPIDefaults.ts +22 -0
- package/src/utils/resolveProjectRoot.ts +17 -0
- package/src/utils/schemaConversion/prepareCollectionSchema.ts +39 -0
- package/src/utils/schemaConversion/removeVirtualFieldsFromSchema.ts +3 -3
- package/src/utils/schemaConversion/sanitizeJsonSchema.ts +4 -4
- package/src/utils/schemaConversion/simplifyRelationshipFields.ts +11 -6
- package/src/utils/schemaConversion/transformPointFields.ts +6 -5
- package/src/utils/toStandardSchema.ts +9 -0
- package/dist/collections/createApiKeysCollection.d.ts +0 -7
- package/dist/collections/createApiKeysCollection.d.ts.map +0 -1
- package/dist/collections/createApiKeysCollection.js +0 -317
- package/dist/collections/createApiKeysCollection.js.map +0 -1
- package/dist/defaults.d.ts +0 -4
- package/dist/defaults.d.ts.map +0 -1
- package/dist/defaults.js +0 -5
- package/dist/defaults.js.map +0 -1
- package/dist/endpoints/mcp.d.ts +0 -4
- package/dist/endpoints/mcp.d.ts.map +0 -1
- package/dist/endpoints/mcp.js +0 -71
- package/dist/endpoints/mcp.js.map +0 -1
- package/dist/mcp/createRequest.d.ts +0 -3
- package/dist/mcp/createRequest.d.ts.map +0 -1
- package/dist/mcp/createRequest.js +0 -14
- package/dist/mcp/createRequest.js.map +0 -1
- package/dist/mcp/getMcpHandler.d.ts +0 -4
- package/dist/mcp/getMcpHandler.d.ts.map +0 -1
- package/dist/mcp/getMcpHandler.js +0 -231
- package/dist/mcp/getMcpHandler.js.map +0 -1
- package/dist/mcp/helpers/config.d.ts +0 -22
- package/dist/mcp/helpers/config.d.ts.map +0 -1
- package/dist/mcp/helpers/config.js +0 -153
- package/dist/mcp/helpers/config.js.map +0 -1
- package/dist/mcp/helpers/fields.d.ts +0 -19
- package/dist/mcp/helpers/fields.d.ts.map +0 -1
- package/dist/mcp/helpers/fields.js +0 -102
- package/dist/mcp/helpers/fields.js.map +0 -1
- package/dist/mcp/helpers/fileValidation.d.ts +0 -67
- package/dist/mcp/helpers/fileValidation.d.ts.map +0 -1
- package/dist/mcp/helpers/fileValidation.js +0 -267
- package/dist/mcp/helpers/fileValidation.js.map +0 -1
- package/dist/mcp/registerTool.d.ts +0 -6
- package/dist/mcp/registerTool.d.ts.map +0 -1
- package/dist/mcp/registerTool.js +0 -18
- package/dist/mcp/registerTool.js.map +0 -1
- package/dist/mcp/tools/auth/auth.d.ts +0 -4
- package/dist/mcp/tools/auth/auth.d.ts.map +0 -1
- package/dist/mcp/tools/auth/auth.js +0 -57
- package/dist/mcp/tools/auth/auth.js.map +0 -1
- package/dist/mcp/tools/auth/forgotPassword.d.ts +0 -4
- package/dist/mcp/tools/auth/forgotPassword.d.ts.map +0 -1
- package/dist/mcp/tools/auth/forgotPassword.js +0 -48
- package/dist/mcp/tools/auth/forgotPassword.js.map +0 -1
- package/dist/mcp/tools/auth/login.d.ts +0 -4
- package/dist/mcp/tools/auth/login.d.ts.map +0 -1
- package/dist/mcp/tools/auth/login.js +0 -51
- package/dist/mcp/tools/auth/login.js.map +0 -1
- package/dist/mcp/tools/auth/resetPassword.d.ts +0 -4
- package/dist/mcp/tools/auth/resetPassword.d.ts.map +0 -1
- package/dist/mcp/tools/auth/resetPassword.js +0 -49
- package/dist/mcp/tools/auth/resetPassword.js.map +0 -1
- package/dist/mcp/tools/auth/unlock.d.ts +0 -4
- package/dist/mcp/tools/auth/unlock.d.ts.map +0 -1
- package/dist/mcp/tools/auth/unlock.js +0 -48
- package/dist/mcp/tools/auth/unlock.js.map +0 -1
- package/dist/mcp/tools/auth/verify.d.ts +0 -4
- package/dist/mcp/tools/auth/verify.d.ts.map +0 -1
- package/dist/mcp/tools/auth/verify.js +0 -45
- package/dist/mcp/tools/auth/verify.js.map +0 -1
- package/dist/mcp/tools/collection/create.d.ts +0 -10
- package/dist/mcp/tools/collection/create.d.ts.map +0 -1
- package/dist/mcp/tools/collection/create.js +0 -139
- package/dist/mcp/tools/collection/create.js.map +0 -1
- package/dist/mcp/tools/collection/delete.d.ts +0 -10
- package/dist/mcp/tools/collection/delete.d.ts.map +0 -1
- package/dist/mcp/tools/collection/delete.js +0 -154
- package/dist/mcp/tools/collection/delete.js.map +0 -1
- package/dist/mcp/tools/collection/find.d.ts +0 -10
- package/dist/mcp/tools/collection/find.d.ts.map +0 -1
- package/dist/mcp/tools/collection/find.js +0 -165
- package/dist/mcp/tools/collection/find.js.map +0 -1
- package/dist/mcp/tools/collection/update.d.ts +0 -10
- package/dist/mcp/tools/collection/update.d.ts.map +0 -1
- package/dist/mcp/tools/collection/update.js +0 -209
- package/dist/mcp/tools/collection/update.js.map +0 -1
- package/dist/mcp/tools/config/find.d.ts +0 -10
- package/dist/mcp/tools/config/find.d.ts.map +0 -1
- package/dist/mcp/tools/config/find.js +0 -97
- package/dist/mcp/tools/config/find.js.map +0 -1
- package/dist/mcp/tools/config/update.d.ts +0 -10
- package/dist/mcp/tools/config/update.d.ts.map +0 -1
- package/dist/mcp/tools/config/update.js +0 -215
- package/dist/mcp/tools/config/update.js.map +0 -1
- package/dist/mcp/tools/global/find.d.ts +0 -5
- package/dist/mcp/tools/global/find.d.ts.map +0 -1
- package/dist/mcp/tools/global/find.js +0 -82
- package/dist/mcp/tools/global/find.js.map +0 -1
- package/dist/mcp/tools/global/update.d.ts +0 -6
- package/dist/mcp/tools/global/update.d.ts.map +0 -1
- package/dist/mcp/tools/global/update.js +0 -124
- package/dist/mcp/tools/global/update.js.map +0 -1
- package/dist/mcp/tools/job/create.d.ts +0 -10
- package/dist/mcp/tools/job/create.d.ts.map +0 -1
- package/dist/mcp/tools/job/create.js +0 -293
- package/dist/mcp/tools/job/create.js.map +0 -1
- package/dist/mcp/tools/job/run.d.ts +0 -10
- package/dist/mcp/tools/job/run.d.ts.map +0 -1
- package/dist/mcp/tools/job/run.js +0 -129
- package/dist/mcp/tools/job/run.js.map +0 -1
- package/dist/mcp/tools/job/update.d.ts +0 -11
- package/dist/mcp/tools/job/update.d.ts.map +0 -1
- package/dist/mcp/tools/job/update.js +0 -186
- package/dist/mcp/tools/job/update.js.map +0 -1
- package/dist/mcp/tools/resource/create.d.ts +0 -6
- package/dist/mcp/tools/resource/create.d.ts.map +0 -1
- package/dist/mcp/tools/resource/create.js +0 -124
- package/dist/mcp/tools/resource/create.js.map +0 -1
- package/dist/mcp/tools/resource/delete.d.ts +0 -5
- package/dist/mcp/tools/resource/delete.d.ts.map +0 -1
- package/dist/mcp/tools/resource/delete.js +0 -151
- package/dist/mcp/tools/resource/delete.js.map +0 -1
- package/dist/mcp/tools/resource/find.d.ts +0 -5
- package/dist/mcp/tools/resource/find.d.ts.map +0 -1
- package/dist/mcp/tools/resource/find.js +0 -170
- package/dist/mcp/tools/resource/find.js.map +0 -1
- package/dist/mcp/tools/resource/update.d.ts +0 -6
- package/dist/mcp/tools/resource/update.d.ts.map +0 -1
- package/dist/mcp/tools/resource/update.js +0 -256
- package/dist/mcp/tools/resource/update.js.map +0 -1
- package/dist/mcp/tools/schemas.d.ts +0 -457
- package/dist/mcp/tools/schemas.d.ts.map +0 -1
- package/dist/mcp/tools/schemas.js +0 -243
- package/dist/mcp/tools/schemas.js.map +0 -1
- package/dist/utils/adminEntitySettings.d.ts +0 -17
- package/dist/utils/adminEntitySettings.d.ts.map +0 -1
- package/dist/utils/adminEntitySettings.js +0 -41
- package/dist/utils/adminEntitySettings.js.map +0 -1
- package/dist/utils/createApiKeyFields.d.ts +0 -15
- package/dist/utils/createApiKeyFields.d.ts.map +0 -1
- package/dist/utils/createApiKeyFields.js +0 -57
- package/dist/utils/createApiKeyFields.js.map +0 -1
- package/dist/utils/getEnabledSlugs.d.ts +0 -13
- package/dist/utils/getEnabledSlugs.d.ts.map +0 -1
- package/dist/utils/getEnabledSlugs.js +0 -32
- package/dist/utils/getEnabledSlugs.js.map +0 -1
- package/dist/utils/schemaConversion/convertCollectionSchemaToZod.d.ts +0 -3
- package/dist/utils/schemaConversion/convertCollectionSchemaToZod.d.ts.map +0 -1
- package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js +0 -43
- package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js.map +0 -1
- package/src/collections/createApiKeysCollection.ts +0 -373
- package/src/defaults.ts +0 -3
- package/src/endpoints/mcp.ts +0 -91
- package/src/mcp/createRequest.ts +0 -13
- package/src/mcp/getMcpHandler.ts +0 -545
- package/src/mcp/helpers/config.ts +0 -213
- package/src/mcp/helpers/fields.ts +0 -154
- package/src/mcp/helpers/fileValidation.ts +0 -362
- package/src/mcp/registerTool.ts +0 -22
- package/src/mcp/tools/auth/auth.ts +0 -71
- package/src/mcp/tools/auth/forgotPassword.ts +0 -70
- package/src/mcp/tools/auth/login.ts +0 -72
- package/src/mcp/tools/auth/resetPassword.ts +0 -61
- package/src/mcp/tools/auth/unlock.ts +0 -64
- package/src/mcp/tools/auth/verify.ts +0 -57
- package/src/mcp/tools/collection/create.ts +0 -210
- package/src/mcp/tools/collection/delete.ts +0 -211
- package/src/mcp/tools/collection/find.ts +0 -224
- package/src/mcp/tools/collection/update.ts +0 -290
- package/src/mcp/tools/config/find.ts +0 -128
- package/src/mcp/tools/config/update.ts +0 -280
- package/src/mcp/tools/global/find.ts +0 -128
- package/src/mcp/tools/global/update.ts +0 -207
- package/src/mcp/tools/job/create.ts +0 -416
- package/src/mcp/tools/job/run.ts +0 -167
- package/src/mcp/tools/job/update.ts +0 -274
- package/src/mcp/tools/resource/create.ts +0 -211
- package/src/mcp/tools/resource/delete.ts +0 -218
- package/src/mcp/tools/resource/find.ts +0 -246
- package/src/mcp/tools/resource/update.ts +0 -383
- package/src/mcp/tools/schemas.ts +0 -520
- package/src/utils/adminEntitySettings.ts +0 -40
- package/src/utils/createApiKeyFields.ts +0 -72
- package/src/utils/getEnabledSlugs.ts +0 -42
- package/src/utils/schemaConversion/convertCollectionSchemaToZod.ts +0 -52
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Payload } from 'payload'
|
|
2
|
+
|
|
3
|
+
import { getPluginConfig } from './getPluginConfig.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Get the logger for the MCP plugin. Child of the main Payload logger, prefixed with `[plugin-mcp]`
|
|
7
|
+
* and tagged with a structured `plugin: 'mcp'` field. When `verboseLogs` is off, info/debug calls
|
|
8
|
+
* are silenced; warn/error still surface so operators don't lose error signal.
|
|
9
|
+
*/
|
|
10
|
+
export const getLogger: (args: { payload: Payload }) => Payload['logger'] = ({ payload }) => {
|
|
11
|
+
const pluginConfig = getPluginConfig({ config: payload.config })
|
|
12
|
+
|
|
13
|
+
const useVerboseLogs = pluginConfig?.mcp?.verboseLogs ?? false
|
|
14
|
+
|
|
15
|
+
const logger = payload.logger.child({ plugin: 'mcp' }, { msgPrefix: '[plugin-mcp] ' })
|
|
16
|
+
|
|
17
|
+
if (!useVerboseLogs) {
|
|
18
|
+
logger.level = 'warn'
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return logger
|
|
22
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { PluginsMap, SanitizedConfig } from 'payload'
|
|
2
|
+
|
|
3
|
+
import type { SanitizedMCPPluginConfig } from '../types.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Returns the sanitized plugin config — the form produced by
|
|
7
|
+
* `sanitizeMCPConfig` and stashed back on the plugin's `options` during init.
|
|
8
|
+
* Callers downstream of plugin init can rely on `items`, `userCollection`, etc.
|
|
9
|
+
* being fully resolved.
|
|
10
|
+
*/
|
|
11
|
+
export const getPluginConfig: (args: { config: SanitizedConfig }) => SanitizedMCPPluginConfig = ({
|
|
12
|
+
config,
|
|
13
|
+
}) => {
|
|
14
|
+
const plugin = config.plugins?.find(
|
|
15
|
+
(plugin) => plugin.slug === '@payloadcms/plugin-mcp',
|
|
16
|
+
) as PluginsMap['@payloadcms/plugin-mcp']
|
|
17
|
+
|
|
18
|
+
if (!plugin) {
|
|
19
|
+
throw new Error('MCP Plugin not found in config.plugins.')
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// @ts-expect-error
|
|
23
|
+
return plugin.sanitizedOptions
|
|
24
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AuthorizedMCP } from '../types.js'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Returns the `user` and `overrideAccess` arguments every Payload local API call
|
|
5
|
+
* should receive when initiated from an MCP request. Spread the result into the
|
|
6
|
+
* call's arg object so the two pieces of caller state can't drift apart.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* await req.payload.create({
|
|
11
|
+
* collection: 'posts',
|
|
12
|
+
* data,
|
|
13
|
+
* ...localAPIDefaults(authorizedMCP),
|
|
14
|
+
* })
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export const localAPIDefaults = (
|
|
18
|
+
authorizedMCP: AuthorizedMCP,
|
|
19
|
+
): { overrideAccess: boolean; user: AuthorizedMCP['user'] } => ({
|
|
20
|
+
overrideAccess: authorizedMCP.overrideAccess,
|
|
21
|
+
user: authorizedMCP.user,
|
|
22
|
+
})
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import path from 'path'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Returns the project root: the parent of the outermost `node_modules` segment in
|
|
5
|
+
* `fromPath`. Returns `null` when the path has no `node_modules` (e.g. running from
|
|
6
|
+
* source inside the Payload monorepo).
|
|
7
|
+
*/
|
|
8
|
+
export const resolveProjectRoot = (fromPath: string): null | string => {
|
|
9
|
+
const segments = fromPath.split(path.sep)
|
|
10
|
+
const nodeModulesIndex = segments.indexOf('node_modules')
|
|
11
|
+
|
|
12
|
+
if (nodeModulesIndex <= 0) {
|
|
13
|
+
return null
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return segments.slice(0, nodeModulesIndex).join(path.sep) || null
|
|
17
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { JsonSchemaType } from '../../types.js'
|
|
2
|
+
|
|
3
|
+
import { sanitizeJsonSchema } from './sanitizeJsonSchema.js'
|
|
4
|
+
import { simplifyRelationshipFields } from './simplifyRelationshipFields.js'
|
|
5
|
+
import { transformPointFieldsForMCP } from './transformPointFields.js'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Fields Payload manages automatically — clients should never be required to provide
|
|
9
|
+
* them. Stripped from `required` and `properties` so they don't appear in tool
|
|
10
|
+
* inputs.
|
|
11
|
+
*/
|
|
12
|
+
const PAYLOAD_MANAGED_FIELDS = new Set(['_status', 'createdAt', 'id', 'updatedAt'])
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Sanitizes Payload's auto-generated collection JSON Schema so it can be safely
|
|
16
|
+
* fed into the MCP server's `fromJsonSchema()` adapter (no zod intermediate step).
|
|
17
|
+
*/
|
|
18
|
+
export const prepareCollectionSchema = (schema: JsonSchemaType): JsonSchemaType => {
|
|
19
|
+
// Clone to avoid mutating the original schema (used elsewhere for tool listing)
|
|
20
|
+
const schemaClone = JSON.parse(JSON.stringify(schema)) as JsonSchemaType
|
|
21
|
+
|
|
22
|
+
const sanitized = sanitizeJsonSchema(schemaClone)
|
|
23
|
+
const pointTransformed = transformPointFieldsForMCP(sanitized)
|
|
24
|
+
const simplified = simplifyRelationshipFields(pointTransformed)
|
|
25
|
+
|
|
26
|
+
if (simplified.properties) {
|
|
27
|
+
for (const field of PAYLOAD_MANAGED_FIELDS) {
|
|
28
|
+
delete simplified.properties[field]
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (Array.isArray(simplified.required)) {
|
|
32
|
+
simplified.required = simplified.required.filter((name) => !PAYLOAD_MANAGED_FIELDS.has(name))
|
|
33
|
+
if (simplified.required.length === 0) {
|
|
34
|
+
delete simplified.required
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return simplified
|
|
39
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { JsonSchemaType } from '../../types.js'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Removes virtual fields from a JSON Schema by name so they don't appear
|
|
5
5
|
* in the generated MCP tool input schema.
|
|
6
6
|
*/
|
|
7
7
|
export function removeVirtualFieldsFromSchema(
|
|
8
|
-
schema:
|
|
8
|
+
schema: JsonSchemaType,
|
|
9
9
|
virtualFieldNames: string[],
|
|
10
|
-
):
|
|
10
|
+
): JsonSchemaType {
|
|
11
11
|
if (virtualFieldNames.length === 0) {
|
|
12
12
|
return schema
|
|
13
13
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { JsonSchemaType } from '../../types.js'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Removes internal Payload properties (id, createdAt, updatedAt) from a
|
|
@@ -10,7 +10,7 @@ import type { JSONSchema4 } from 'json-schema'
|
|
|
10
10
|
* emits a Zod union which the MCP SDK serialises back as `anyOf`, stripping
|
|
11
11
|
* the concrete `type` from the output and breaking schema introspection.
|
|
12
12
|
*/
|
|
13
|
-
export function sanitizeJsonSchema(schema:
|
|
13
|
+
export function sanitizeJsonSchema(schema: JsonSchemaType): JsonSchemaType {
|
|
14
14
|
delete schema?.properties?.id
|
|
15
15
|
delete schema?.properties?.createdAt
|
|
16
16
|
delete schema?.properties?.updatedAt
|
|
@@ -24,7 +24,7 @@ export function sanitizeJsonSchema(schema: JSONSchema4): JSONSchema4 {
|
|
|
24
24
|
|
|
25
25
|
if (schema.properties && typeof schema.properties === 'object') {
|
|
26
26
|
for (const key of Object.keys(schema.properties)) {
|
|
27
|
-
const prop = schema.properties[key] as
|
|
27
|
+
const prop = schema.properties[key] as JsonSchemaType
|
|
28
28
|
if (!prop || typeof prop !== 'object') {
|
|
29
29
|
continue
|
|
30
30
|
}
|
|
@@ -51,7 +51,7 @@ export function sanitizeJsonSchema(schema: JSONSchema4): JSONSchema4 {
|
|
|
51
51
|
* to emit `anyOf: [{ type: 'array', items: ... }, { type: 'null' }]`, which
|
|
52
52
|
* has no top-level `type` property and breaks schema introspection by clients.
|
|
53
53
|
*/
|
|
54
|
-
function normalizeNullableType(schema:
|
|
54
|
+
function normalizeNullableType(schema: JsonSchemaType): void {
|
|
55
55
|
if (!Array.isArray(schema.type)) {
|
|
56
56
|
return
|
|
57
57
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { JsonSchemaType } from '../../types.js'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Recursively processes JSON schema properties to simplify relationship fields
|
|
@@ -17,7 +17,7 @@ import type { JSONSchema4 } from 'json-schema'
|
|
|
17
17
|
* NOTE: This function must operate on a cloned schema to avoid mutating
|
|
18
18
|
* the original JSON schema used for tool listing.
|
|
19
19
|
*/
|
|
20
|
-
export function simplifyRelationshipFields(schema:
|
|
20
|
+
export function simplifyRelationshipFields(schema: JsonSchemaType): JsonSchemaType {
|
|
21
21
|
if (!schema || typeof schema !== 'object') {
|
|
22
22
|
return schema
|
|
23
23
|
}
|
|
@@ -29,21 +29,26 @@ export function simplifyRelationshipFields(schema: JSONSchema4): JSONSchema4 {
|
|
|
29
29
|
(option) => option && typeof option === 'object' && '$ref' in option,
|
|
30
30
|
)
|
|
31
31
|
|
|
32
|
+
const recurse = (option: boolean | JsonSchemaType): boolean | JsonSchemaType =>
|
|
33
|
+
typeof option === 'object' ? simplifyRelationshipFields(option) : option
|
|
34
|
+
|
|
32
35
|
if (hasRef) {
|
|
33
36
|
const nonRefOptions = processed.oneOf
|
|
34
37
|
.filter((option) => !(option && typeof option === 'object' && '$ref' in option))
|
|
35
|
-
.map(
|
|
38
|
+
.map(recurse)
|
|
36
39
|
|
|
37
40
|
if (nonRefOptions.length === 1) {
|
|
38
41
|
const single = nonRefOptions[0]!
|
|
39
42
|
delete processed.oneOf
|
|
40
|
-
|
|
43
|
+
if (typeof single === 'object') {
|
|
44
|
+
Object.assign(processed, single)
|
|
45
|
+
}
|
|
41
46
|
} else if (nonRefOptions.length > 1) {
|
|
42
47
|
delete processed.oneOf
|
|
43
48
|
processed.anyOf = nonRefOptions
|
|
44
49
|
}
|
|
45
50
|
} else {
|
|
46
|
-
processed.anyOf = processed.oneOf.map(
|
|
51
|
+
processed.anyOf = processed.oneOf.map(recurse)
|
|
47
52
|
delete processed.oneOf
|
|
48
53
|
}
|
|
49
54
|
}
|
|
@@ -52,7 +57,7 @@ export function simplifyRelationshipFields(schema: JSONSchema4): JSONSchema4 {
|
|
|
52
57
|
processed.properties = Object.fromEntries(
|
|
53
58
|
Object.entries(processed.properties).map(([key, value]) => [
|
|
54
59
|
key,
|
|
55
|
-
simplifyRelationshipFields(value),
|
|
60
|
+
typeof value === 'object' ? simplifyRelationshipFields(value) : value,
|
|
56
61
|
]),
|
|
57
62
|
)
|
|
58
63
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { JsonSchemaType } from '../../types.js'
|
|
2
2
|
|
|
3
|
-
export function transformPointFieldsForMCP(schema:
|
|
3
|
+
export function transformPointFieldsForMCP(schema: JsonSchemaType): JsonSchemaType {
|
|
4
4
|
if (!schema || typeof schema !== 'object') {
|
|
5
5
|
return schema
|
|
6
6
|
}
|
|
@@ -10,16 +10,17 @@ export function transformPointFieldsForMCP(schema: JSONSchema4): JSONSchema4 {
|
|
|
10
10
|
if (transformed.properties && typeof transformed.properties === 'object') {
|
|
11
11
|
transformed.properties = Object.fromEntries(
|
|
12
12
|
Object.entries(transformed.properties).map(([key, value]) => {
|
|
13
|
+
if (!value || typeof value !== 'object') {
|
|
14
|
+
return [key, value]
|
|
15
|
+
}
|
|
13
16
|
const isArrayType =
|
|
14
17
|
value.type === 'array' || (Array.isArray(value.type) && value.type.includes('array'))
|
|
15
18
|
|
|
16
19
|
if (
|
|
17
|
-
value &&
|
|
18
|
-
typeof value === 'object' &&
|
|
19
20
|
isArrayType &&
|
|
20
21
|
Array.isArray(value.items) &&
|
|
21
22
|
value.items.length === 2 &&
|
|
22
|
-
value.items.every((item
|
|
23
|
+
value.items.every((item) => item && typeof item === 'object' && item.type === 'number')
|
|
23
24
|
) {
|
|
24
25
|
// Transform to object format
|
|
25
26
|
const isNullable = Array.isArray(value.type) && value.type.includes('null')
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { fromJsonSchema, type StandardSchemaWithJSON } from '@modelcontextprotocol/server'
|
|
2
|
+
|
|
3
|
+
import type { ToolInputSchema } from '../types.js'
|
|
4
|
+
|
|
5
|
+
/** Normalize a tool/prompt input to a Standard Schema. Raw JSON Schema gets wrapped; Standard Schema instances pass through. */
|
|
6
|
+
export const toStandardSchema = (schema: ToolInputSchema): StandardSchemaWithJSON =>
|
|
7
|
+
typeof schema === 'object' && schema !== null && '~standard' in schema
|
|
8
|
+
? (schema as StandardSchemaWithJSON)
|
|
9
|
+
: fromJsonSchema(schema)
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { CollectionConfig } from 'payload';
|
|
2
|
-
import type { MCPPluginConfig } from '../types.js';
|
|
3
|
-
export declare const createAPIKeysCollection: (collections: MCPPluginConfig["collections"], globals: MCPPluginConfig["globals"], customTools: Array<{
|
|
4
|
-
description: string;
|
|
5
|
-
name: string;
|
|
6
|
-
}> | undefined, experimentalTools: NonNullable<MCPPluginConfig["experimental"]>["tools"] | undefined, pluginOptions: MCPPluginConfig) => CollectionConfig;
|
|
7
|
-
//# sourceMappingURL=createApiKeysCollection.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createApiKeysCollection.d.ts","sourceRoot":"","sources":["../../src/collections/createApiKeysCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,SAAS,CAAA;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAKlD,eAAO,MAAM,uBAAuB,gBACrB,eAAe,CAAC,aAAa,CAAC,WAClC,eAAe,CAAC,SAAS,CAAC,eACtB,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,iCACtC,WAAW,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,6BACzD,eAAe,KAC7B,gBAuWF,CAAA"}
|
|
@@ -1,317 +0,0 @@
|
|
|
1
|
-
import { toCamelCase } from '../utils/camelCase.js';
|
|
2
|
-
import { createApiKeyFields } from '../utils/createApiKeyFields.js';
|
|
3
|
-
export const createAPIKeysCollection = (collections, globals, customTools = [], experimentalTools = {}, pluginOptions)=>{
|
|
4
|
-
const customToolsFields = customTools.map((tool)=>{
|
|
5
|
-
const camelCasedName = toCamelCase(tool.name);
|
|
6
|
-
return {
|
|
7
|
-
name: camelCasedName,
|
|
8
|
-
type: 'checkbox',
|
|
9
|
-
admin: {
|
|
10
|
-
description: tool.description
|
|
11
|
-
},
|
|
12
|
-
defaultValue: true,
|
|
13
|
-
label: camelCasedName
|
|
14
|
-
};
|
|
15
|
-
});
|
|
16
|
-
const customResourceFields = pluginOptions.mcp?.resources?.map((resource)=>{
|
|
17
|
-
const camelCasedName = toCamelCase(resource.name);
|
|
18
|
-
return {
|
|
19
|
-
name: camelCasedName,
|
|
20
|
-
type: 'checkbox',
|
|
21
|
-
admin: {
|
|
22
|
-
description: resource.description
|
|
23
|
-
},
|
|
24
|
-
defaultValue: true,
|
|
25
|
-
label: camelCasedName
|
|
26
|
-
};
|
|
27
|
-
}) || [];
|
|
28
|
-
const customPromptFields = pluginOptions.mcp?.prompts?.map((prompt)=>{
|
|
29
|
-
const camelCasedName = toCamelCase(prompt.name);
|
|
30
|
-
return {
|
|
31
|
-
name: camelCasedName,
|
|
32
|
-
type: 'checkbox',
|
|
33
|
-
admin: {
|
|
34
|
-
description: prompt.description
|
|
35
|
-
},
|
|
36
|
-
defaultValue: true,
|
|
37
|
-
label: camelCasedName
|
|
38
|
-
};
|
|
39
|
-
}) || [];
|
|
40
|
-
const userCollection = pluginOptions.userCollection;
|
|
41
|
-
return {
|
|
42
|
-
slug: 'payload-mcp-api-keys',
|
|
43
|
-
admin: {
|
|
44
|
-
description: 'API keys control which collections, resources, tools, and prompts MCP clients can access',
|
|
45
|
-
group: 'MCP',
|
|
46
|
-
useAsTitle: 'label'
|
|
47
|
-
},
|
|
48
|
-
auth: {
|
|
49
|
-
disableLocalStrategy: true,
|
|
50
|
-
useAPIKey: true
|
|
51
|
-
},
|
|
52
|
-
fields: [
|
|
53
|
-
{
|
|
54
|
-
name: 'user',
|
|
55
|
-
type: 'relationship',
|
|
56
|
-
admin: {
|
|
57
|
-
description: 'The user that the API key is associated with.'
|
|
58
|
-
},
|
|
59
|
-
relationTo: userCollection,
|
|
60
|
-
required: true
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
name: 'label',
|
|
64
|
-
type: 'text',
|
|
65
|
-
admin: {
|
|
66
|
-
description: 'A useful label for the API key.'
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
name: 'description',
|
|
71
|
-
type: 'text',
|
|
72
|
-
admin: {
|
|
73
|
-
description: 'The purpose of the API key.'
|
|
74
|
-
}
|
|
75
|
-
},
|
|
76
|
-
...createApiKeyFields({
|
|
77
|
-
config: collections,
|
|
78
|
-
configType: 'collection'
|
|
79
|
-
}),
|
|
80
|
-
...createApiKeyFields({
|
|
81
|
-
config: globals,
|
|
82
|
-
configType: 'global'
|
|
83
|
-
}),
|
|
84
|
-
...customTools.length > 0 ? [
|
|
85
|
-
{
|
|
86
|
-
type: 'collapsible',
|
|
87
|
-
admin: {
|
|
88
|
-
description: 'Manage client access to tools',
|
|
89
|
-
position: 'sidebar'
|
|
90
|
-
},
|
|
91
|
-
fields: [
|
|
92
|
-
{
|
|
93
|
-
name: 'payload-mcp-tool',
|
|
94
|
-
type: 'group',
|
|
95
|
-
fields: customToolsFields,
|
|
96
|
-
label: false
|
|
97
|
-
}
|
|
98
|
-
],
|
|
99
|
-
label: 'Tools'
|
|
100
|
-
}
|
|
101
|
-
] : [],
|
|
102
|
-
...pluginOptions.mcp?.resources && pluginOptions.mcp?.resources.length > 0 ? [
|
|
103
|
-
{
|
|
104
|
-
type: 'collapsible',
|
|
105
|
-
admin: {
|
|
106
|
-
description: 'Manage client access to resources',
|
|
107
|
-
position: 'sidebar'
|
|
108
|
-
},
|
|
109
|
-
fields: [
|
|
110
|
-
{
|
|
111
|
-
name: 'payload-mcp-resource',
|
|
112
|
-
type: 'group',
|
|
113
|
-
fields: customResourceFields,
|
|
114
|
-
label: false
|
|
115
|
-
}
|
|
116
|
-
],
|
|
117
|
-
label: 'Resources'
|
|
118
|
-
}
|
|
119
|
-
] : [],
|
|
120
|
-
...pluginOptions.mcp?.prompts && pluginOptions.mcp?.prompts.length > 0 ? [
|
|
121
|
-
{
|
|
122
|
-
type: 'collapsible',
|
|
123
|
-
admin: {
|
|
124
|
-
description: 'Manage client access to prompts',
|
|
125
|
-
position: 'sidebar'
|
|
126
|
-
},
|
|
127
|
-
fields: [
|
|
128
|
-
{
|
|
129
|
-
name: 'payload-mcp-prompt',
|
|
130
|
-
type: 'group',
|
|
131
|
-
fields: customPromptFields,
|
|
132
|
-
label: false
|
|
133
|
-
}
|
|
134
|
-
],
|
|
135
|
-
label: 'Prompts'
|
|
136
|
-
}
|
|
137
|
-
] : [],
|
|
138
|
-
// Experimental Tools
|
|
139
|
-
...process.env.NODE_ENV === 'development' && (experimentalTools?.collections?.enabled || experimentalTools?.jobs?.enabled || experimentalTools?.config?.enabled || experimentalTools?.auth?.enabled) ? [
|
|
140
|
-
{
|
|
141
|
-
type: 'collapsible',
|
|
142
|
-
admin: {
|
|
143
|
-
description: 'Manage client access to experimental tools',
|
|
144
|
-
position: 'sidebar'
|
|
145
|
-
},
|
|
146
|
-
fields: [
|
|
147
|
-
...experimentalTools?.collections?.enabled ? [
|
|
148
|
-
{
|
|
149
|
-
name: 'collections',
|
|
150
|
-
type: 'group',
|
|
151
|
-
fields: [
|
|
152
|
-
{
|
|
153
|
-
name: 'find',
|
|
154
|
-
type: 'checkbox',
|
|
155
|
-
admin: {
|
|
156
|
-
description: 'Allow LLMs to find and list Payload collections with optional content and document counts.'
|
|
157
|
-
},
|
|
158
|
-
defaultValue: false
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
name: 'create',
|
|
162
|
-
type: 'checkbox',
|
|
163
|
-
admin: {
|
|
164
|
-
description: 'Allow LLMs to create new Payload collections with specified fields and configuration.'
|
|
165
|
-
},
|
|
166
|
-
defaultValue: false
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
name: 'update',
|
|
170
|
-
type: 'checkbox',
|
|
171
|
-
admin: {
|
|
172
|
-
description: 'Allow LLMs to update existing Payload collections with new fields, modifications, or configuration changes.'
|
|
173
|
-
},
|
|
174
|
-
defaultValue: false
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
name: 'delete',
|
|
178
|
-
type: 'checkbox',
|
|
179
|
-
admin: {
|
|
180
|
-
description: 'Allow LLMs to delete Payload collections and optionally update the configuration.'
|
|
181
|
-
},
|
|
182
|
-
defaultValue: false
|
|
183
|
-
}
|
|
184
|
-
]
|
|
185
|
-
}
|
|
186
|
-
] : [],
|
|
187
|
-
...experimentalTools?.jobs?.enabled ? [
|
|
188
|
-
{
|
|
189
|
-
name: 'jobs',
|
|
190
|
-
type: 'group',
|
|
191
|
-
fields: [
|
|
192
|
-
{
|
|
193
|
-
name: 'create',
|
|
194
|
-
type: 'checkbox',
|
|
195
|
-
admin: {
|
|
196
|
-
description: 'Allow LLMs to create new Payload jobs (tasks and workflows) with custom schemas and configuration.'
|
|
197
|
-
},
|
|
198
|
-
defaultValue: false
|
|
199
|
-
},
|
|
200
|
-
{
|
|
201
|
-
name: 'run',
|
|
202
|
-
type: 'checkbox',
|
|
203
|
-
admin: {
|
|
204
|
-
description: 'Allow LLMs to execute Payload jobs with custom input data and queue options.'
|
|
205
|
-
},
|
|
206
|
-
defaultValue: false
|
|
207
|
-
},
|
|
208
|
-
{
|
|
209
|
-
name: 'update',
|
|
210
|
-
type: 'checkbox',
|
|
211
|
-
admin: {
|
|
212
|
-
description: 'Allow LLMs to update existing Payload jobs with new schemas, configuration, or handler code.'
|
|
213
|
-
},
|
|
214
|
-
defaultValue: false
|
|
215
|
-
}
|
|
216
|
-
]
|
|
217
|
-
}
|
|
218
|
-
] : [],
|
|
219
|
-
...experimentalTools?.config?.enabled ? [
|
|
220
|
-
{
|
|
221
|
-
name: 'config',
|
|
222
|
-
type: 'group',
|
|
223
|
-
fields: [
|
|
224
|
-
{
|
|
225
|
-
name: 'find',
|
|
226
|
-
type: 'checkbox',
|
|
227
|
-
admin: {
|
|
228
|
-
description: 'Allow LLMs to read and display a Payload configuration file.'
|
|
229
|
-
},
|
|
230
|
-
defaultValue: false
|
|
231
|
-
},
|
|
232
|
-
{
|
|
233
|
-
name: 'update',
|
|
234
|
-
type: 'checkbox',
|
|
235
|
-
admin: {
|
|
236
|
-
description: 'Allow LLMs to update a Payload configuration file with various modifications.'
|
|
237
|
-
},
|
|
238
|
-
defaultValue: false
|
|
239
|
-
}
|
|
240
|
-
]
|
|
241
|
-
}
|
|
242
|
-
] : [],
|
|
243
|
-
...experimentalTools?.auth?.enabled ? [
|
|
244
|
-
{
|
|
245
|
-
name: 'auth',
|
|
246
|
-
type: 'group',
|
|
247
|
-
fields: [
|
|
248
|
-
{
|
|
249
|
-
name: 'auth',
|
|
250
|
-
type: 'checkbox',
|
|
251
|
-
admin: {
|
|
252
|
-
description: 'Allow LLMs to check authentication status for a user by setting custom headers. (e.g. {"Authorization": "Bearer <token>"})'
|
|
253
|
-
},
|
|
254
|
-
defaultValue: false,
|
|
255
|
-
label: 'Check Auth Status'
|
|
256
|
-
},
|
|
257
|
-
{
|
|
258
|
-
name: 'login',
|
|
259
|
-
type: 'checkbox',
|
|
260
|
-
admin: {
|
|
261
|
-
description: 'Allow LLMs to authenticate a user with email and password.'
|
|
262
|
-
},
|
|
263
|
-
defaultValue: false,
|
|
264
|
-
label: 'User Login'
|
|
265
|
-
},
|
|
266
|
-
{
|
|
267
|
-
name: 'verify',
|
|
268
|
-
type: 'checkbox',
|
|
269
|
-
admin: {
|
|
270
|
-
description: 'Allow LLMs to verify a user email with a verification token.'
|
|
271
|
-
},
|
|
272
|
-
defaultValue: false,
|
|
273
|
-
label: 'Email Verification'
|
|
274
|
-
},
|
|
275
|
-
{
|
|
276
|
-
name: 'resetPassword',
|
|
277
|
-
type: 'checkbox',
|
|
278
|
-
admin: {
|
|
279
|
-
description: 'Allow LLMs to reset a user password with a reset token.'
|
|
280
|
-
},
|
|
281
|
-
defaultValue: false,
|
|
282
|
-
label: 'Reset Password'
|
|
283
|
-
},
|
|
284
|
-
{
|
|
285
|
-
name: 'forgotPassword',
|
|
286
|
-
type: 'checkbox',
|
|
287
|
-
admin: {
|
|
288
|
-
description: 'Allow LLMs to send a password reset email to a user.'
|
|
289
|
-
},
|
|
290
|
-
defaultValue: false,
|
|
291
|
-
label: 'Forgot Password'
|
|
292
|
-
},
|
|
293
|
-
{
|
|
294
|
-
name: 'unlock',
|
|
295
|
-
type: 'checkbox',
|
|
296
|
-
admin: {
|
|
297
|
-
description: 'Allow LLMs to unlock a user account that has been locked due to failed login attempts.'
|
|
298
|
-
},
|
|
299
|
-
defaultValue: false,
|
|
300
|
-
label: 'Unlock Account'
|
|
301
|
-
}
|
|
302
|
-
]
|
|
303
|
-
}
|
|
304
|
-
] : []
|
|
305
|
-
],
|
|
306
|
-
label: 'Experimental Tools'
|
|
307
|
-
}
|
|
308
|
-
] : []
|
|
309
|
-
],
|
|
310
|
-
labels: {
|
|
311
|
-
plural: 'API Keys',
|
|
312
|
-
singular: 'API Key'
|
|
313
|
-
}
|
|
314
|
-
};
|
|
315
|
-
};
|
|
316
|
-
|
|
317
|
-
//# sourceMappingURL=createApiKeysCollection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/collections/createApiKeysCollection.ts"],"sourcesContent":["import type { CollectionConfig, CollectionSlug } from 'payload'\n\nimport type { MCPPluginConfig } from '../types.js'\n\nimport { toCamelCase } from '../utils/camelCase.js'\nimport { createApiKeyFields } from '../utils/createApiKeyFields.js'\n\nexport const createAPIKeysCollection = (\n collections: MCPPluginConfig['collections'],\n globals: MCPPluginConfig['globals'],\n customTools: Array<{ description: string; name: string }> = [],\n experimentalTools: NonNullable<MCPPluginConfig['experimental']>['tools'] = {},\n pluginOptions: MCPPluginConfig,\n): CollectionConfig => {\n const customToolsFields = customTools.map((tool) => {\n const camelCasedName = toCamelCase(tool.name)\n return {\n name: camelCasedName,\n type: 'checkbox' as const,\n admin: {\n description: tool.description,\n },\n defaultValue: true,\n label: camelCasedName,\n }\n })\n\n const customResourceFields =\n pluginOptions.mcp?.resources?.map((resource) => {\n const camelCasedName = toCamelCase(resource.name)\n return {\n name: camelCasedName,\n type: 'checkbox' as const,\n admin: {\n description: resource.description,\n },\n defaultValue: true,\n label: camelCasedName,\n }\n }) || []\n\n const customPromptFields =\n pluginOptions.mcp?.prompts?.map((prompt) => {\n const camelCasedName = toCamelCase(prompt.name)\n return {\n name: camelCasedName,\n type: 'checkbox' as const,\n admin: {\n description: prompt.description,\n },\n defaultValue: true,\n label: camelCasedName,\n }\n }) || []\n\n const userCollection = pluginOptions.userCollection\n\n return {\n slug: 'payload-mcp-api-keys',\n admin: {\n description:\n 'API keys control which collections, resources, tools, and prompts MCP clients can access',\n group: 'MCP',\n useAsTitle: 'label',\n },\n auth: {\n disableLocalStrategy: true,\n useAPIKey: true,\n },\n fields: [\n {\n name: 'user',\n type: 'relationship',\n admin: {\n description: 'The user that the API key is associated with.',\n },\n relationTo: userCollection as CollectionSlug,\n required: true,\n },\n {\n name: 'label',\n type: 'text',\n admin: {\n description: 'A useful label for the API key.',\n },\n },\n {\n name: 'description',\n type: 'text',\n admin: {\n description: 'The purpose of the API key.',\n },\n },\n\n ...createApiKeyFields({\n config: collections,\n configType: 'collection',\n }),\n\n ...createApiKeyFields({\n config: globals,\n configType: 'global',\n }),\n\n ...(customTools.length > 0\n ? [\n {\n type: 'collapsible' as const,\n admin: {\n description: 'Manage client access to tools',\n position: 'sidebar' as const,\n },\n fields: [\n {\n name: 'payload-mcp-tool',\n type: 'group' as const,\n fields: customToolsFields,\n label: false as const,\n },\n ],\n label: 'Tools',\n },\n ]\n : []),\n\n ...(pluginOptions.mcp?.resources && pluginOptions.mcp?.resources.length > 0\n ? [\n {\n type: 'collapsible' as const,\n admin: {\n description: 'Manage client access to resources',\n position: 'sidebar' as const,\n },\n fields: [\n {\n name: 'payload-mcp-resource',\n type: 'group' as const,\n fields: customResourceFields,\n label: false as const,\n },\n ],\n label: 'Resources',\n },\n ]\n : []),\n\n ...(pluginOptions.mcp?.prompts && pluginOptions.mcp?.prompts.length > 0\n ? [\n {\n type: 'collapsible' as const,\n admin: {\n description: 'Manage client access to prompts',\n position: 'sidebar' as const,\n },\n fields: [\n {\n name: 'payload-mcp-prompt',\n type: 'group' as const,\n fields: customPromptFields,\n label: false as const,\n },\n ],\n label: 'Prompts',\n },\n ]\n : []),\n\n // Experimental Tools\n ...(process.env.NODE_ENV === 'development' &&\n (experimentalTools?.collections?.enabled ||\n experimentalTools?.jobs?.enabled ||\n experimentalTools?.config?.enabled ||\n experimentalTools?.auth?.enabled)\n ? [\n {\n type: 'collapsible' as const,\n admin: {\n description: 'Manage client access to experimental tools',\n position: 'sidebar' as const,\n },\n fields: [\n ...(experimentalTools?.collections?.enabled\n ? [\n {\n name: 'collections',\n type: 'group' as const,\n fields: [\n {\n name: 'find',\n type: 'checkbox' as const,\n admin: {\n description:\n 'Allow LLMs to find and list Payload collections with optional content and document counts.',\n },\n defaultValue: false,\n },\n {\n name: 'create',\n type: 'checkbox' as const,\n admin: {\n description:\n 'Allow LLMs to create new Payload collections with specified fields and configuration.',\n },\n defaultValue: false,\n },\n {\n name: 'update',\n type: 'checkbox' as const,\n admin: {\n description:\n 'Allow LLMs to update existing Payload collections with new fields, modifications, or configuration changes.',\n },\n defaultValue: false,\n },\n {\n name: 'delete',\n type: 'checkbox' as const,\n admin: {\n description:\n 'Allow LLMs to delete Payload collections and optionally update the configuration.',\n },\n defaultValue: false,\n },\n ],\n },\n ]\n : []),\n ...(experimentalTools?.jobs?.enabled\n ? [\n {\n name: 'jobs',\n type: 'group' as const,\n fields: [\n {\n name: 'create',\n type: 'checkbox' as const,\n admin: {\n description:\n 'Allow LLMs to create new Payload jobs (tasks and workflows) with custom schemas and configuration.',\n },\n defaultValue: false,\n },\n {\n name: 'run',\n type: 'checkbox' as const,\n admin: {\n description:\n 'Allow LLMs to execute Payload jobs with custom input data and queue options.',\n },\n defaultValue: false,\n },\n {\n name: 'update',\n type: 'checkbox' as const,\n admin: {\n description:\n 'Allow LLMs to update existing Payload jobs with new schemas, configuration, or handler code.',\n },\n defaultValue: false,\n },\n ],\n },\n ]\n : []),\n ...(experimentalTools?.config?.enabled\n ? [\n {\n name: 'config',\n type: 'group' as const,\n fields: [\n {\n name: 'find',\n type: 'checkbox' as const,\n admin: {\n description:\n 'Allow LLMs to read and display a Payload configuration file.',\n },\n defaultValue: false,\n },\n {\n name: 'update',\n type: 'checkbox' as const,\n admin: {\n description:\n 'Allow LLMs to update a Payload configuration file with various modifications.',\n },\n defaultValue: false,\n },\n ],\n },\n ]\n : []),\n ...(experimentalTools?.auth?.enabled\n ? [\n {\n name: 'auth',\n type: 'group' as const,\n fields: [\n {\n name: 'auth',\n type: 'checkbox' as const,\n admin: {\n description:\n 'Allow LLMs to check authentication status for a user by setting custom headers. (e.g. {\"Authorization\": \"Bearer <token>\"})',\n },\n defaultValue: false,\n label: 'Check Auth Status',\n },\n {\n name: 'login',\n type: 'checkbox' as const,\n admin: {\n description:\n 'Allow LLMs to authenticate a user with email and password.',\n },\n defaultValue: false,\n label: 'User Login',\n },\n {\n name: 'verify',\n type: 'checkbox' as const,\n admin: {\n description:\n 'Allow LLMs to verify a user email with a verification token.',\n },\n defaultValue: false,\n label: 'Email Verification',\n },\n {\n name: 'resetPassword',\n type: 'checkbox' as const,\n admin: {\n description:\n 'Allow LLMs to reset a user password with a reset token.',\n },\n defaultValue: false,\n label: 'Reset Password',\n },\n {\n name: 'forgotPassword',\n type: 'checkbox' as const,\n admin: {\n description: 'Allow LLMs to send a password reset email to a user.',\n },\n defaultValue: false,\n label: 'Forgot Password',\n },\n {\n name: 'unlock',\n type: 'checkbox' as const,\n admin: {\n description:\n 'Allow LLMs to unlock a user account that has been locked due to failed login attempts.',\n },\n defaultValue: false,\n label: 'Unlock Account',\n },\n ],\n },\n ]\n : []),\n ],\n label: 'Experimental Tools',\n },\n ]\n : []),\n ],\n labels: {\n plural: 'API Keys',\n singular: 'API Key',\n },\n }\n}\n"],"names":["toCamelCase","createApiKeyFields","createAPIKeysCollection","collections","globals","customTools","experimentalTools","pluginOptions","customToolsFields","map","tool","camelCasedName","name","type","admin","description","defaultValue","label","customResourceFields","mcp","resources","resource","customPromptFields","prompts","prompt","userCollection","slug","group","useAsTitle","auth","disableLocalStrategy","useAPIKey","fields","relationTo","required","config","configType","length","position","process","env","NODE_ENV","enabled","jobs","labels","plural","singular"],"mappings":"AAIA,SAASA,WAAW,QAAQ,wBAAuB;AACnD,SAASC,kBAAkB,QAAQ,iCAAgC;AAEnE,OAAO,MAAMC,0BAA0B,CACrCC,aACAC,SACAC,cAA4D,EAAE,EAC9DC,oBAA2E,CAAC,CAAC,EAC7EC;IAEA,MAAMC,oBAAoBH,YAAYI,GAAG,CAAC,CAACC;QACzC,MAAMC,iBAAiBX,YAAYU,KAAKE,IAAI;QAC5C,OAAO;YACLA,MAAMD;YACNE,MAAM;YACNC,OAAO;gBACLC,aAAaL,KAAKK,WAAW;YAC/B;YACAC,cAAc;YACdC,OAAON;QACT;IACF;IAEA,MAAMO,uBACJX,cAAcY,GAAG,EAAEC,WAAWX,IAAI,CAACY;QACjC,MAAMV,iBAAiBX,YAAYqB,SAAST,IAAI;QAChD,OAAO;YACLA,MAAMD;YACNE,MAAM;YACNC,OAAO;gBACLC,aAAaM,SAASN,WAAW;YACnC;YACAC,cAAc;YACdC,OAAON;QACT;IACF,MAAM,EAAE;IAEV,MAAMW,qBACJf,cAAcY,GAAG,EAAEI,SAASd,IAAI,CAACe;QAC/B,MAAMb,iBAAiBX,YAAYwB,OAAOZ,IAAI;QAC9C,OAAO;YACLA,MAAMD;YACNE,MAAM;YACNC,OAAO;gBACLC,aAAaS,OAAOT,WAAW;YACjC;YACAC,cAAc;YACdC,OAAON;QACT;IACF,MAAM,EAAE;IAEV,MAAMc,iBAAiBlB,cAAckB,cAAc;IAEnD,OAAO;QACLC,MAAM;QACNZ,OAAO;YACLC,aACE;YACFY,OAAO;YACPC,YAAY;QACd;QACAC,MAAM;YACJC,sBAAsB;YACtBC,WAAW;QACb;QACAC,QAAQ;YACN;gBACEpB,MAAM;gBACNC,MAAM;gBACNC,OAAO;oBACLC,aAAa;gBACf;gBACAkB,YAAYR;gBACZS,UAAU;YACZ;YACA;gBACEtB,MAAM;gBACNC,MAAM;gBACNC,OAAO;oBACLC,aAAa;gBACf;YACF;YACA;gBACEH,MAAM;gBACNC,MAAM;gBACNC,OAAO;oBACLC,aAAa;gBACf;YACF;eAEGd,mBAAmB;gBACpBkC,QAAQhC;gBACRiC,YAAY;YACd;eAEGnC,mBAAmB;gBACpBkC,QAAQ/B;gBACRgC,YAAY;YACd;eAEI/B,YAAYgC,MAAM,GAAG,IACrB;gBACE;oBACExB,MAAM;oBACNC,OAAO;wBACLC,aAAa;wBACbuB,UAAU;oBACZ;oBACAN,QAAQ;wBACN;4BACEpB,MAAM;4BACNC,MAAM;4BACNmB,QAAQxB;4BACRS,OAAO;wBACT;qBACD;oBACDA,OAAO;gBACT;aACD,GACD,EAAE;eAEFV,cAAcY,GAAG,EAAEC,aAAab,cAAcY,GAAG,EAAEC,UAAUiB,SAAS,IACtE;gBACE;oBACExB,MAAM;oBACNC,OAAO;wBACLC,aAAa;wBACbuB,UAAU;oBACZ;oBACAN,QAAQ;wBACN;4BACEpB,MAAM;4BACNC,MAAM;4BACNmB,QAAQd;4BACRD,OAAO;wBACT;qBACD;oBACDA,OAAO;gBACT;aACD,GACD,EAAE;eAEFV,cAAcY,GAAG,EAAEI,WAAWhB,cAAcY,GAAG,EAAEI,QAAQc,SAAS,IAClE;gBACE;oBACExB,MAAM;oBACNC,OAAO;wBACLC,aAAa;wBACbuB,UAAU;oBACZ;oBACAN,QAAQ;wBACN;4BACEpB,MAAM;4BACNC,MAAM;4BACNmB,QAAQV;4BACRL,OAAO;wBACT;qBACD;oBACDA,OAAO;gBACT;aACD,GACD,EAAE;YAEN,qBAAqB;eACjBsB,QAAQC,GAAG,CAACC,QAAQ,KAAK,iBAC5BnC,CAAAA,mBAAmBH,aAAauC,WAC/BpC,mBAAmBqC,MAAMD,WACzBpC,mBAAmB6B,QAAQO,WAC3BpC,mBAAmBuB,MAAMa,OAAM,IAC7B;gBACE;oBACE7B,MAAM;oBACNC,OAAO;wBACLC,aAAa;wBACbuB,UAAU;oBACZ;oBACAN,QAAQ;2BACF1B,mBAAmBH,aAAauC,UAChC;4BACE;gCACE9B,MAAM;gCACNC,MAAM;gCACNmB,QAAQ;oCACN;wCACEpB,MAAM;wCACNC,MAAM;wCACNC,OAAO;4CACLC,aACE;wCACJ;wCACAC,cAAc;oCAChB;oCACA;wCACEJ,MAAM;wCACNC,MAAM;wCACNC,OAAO;4CACLC,aACE;wCACJ;wCACAC,cAAc;oCAChB;oCACA;wCACEJ,MAAM;wCACNC,MAAM;wCACNC,OAAO;4CACLC,aACE;wCACJ;wCACAC,cAAc;oCAChB;oCACA;wCACEJ,MAAM;wCACNC,MAAM;wCACNC,OAAO;4CACLC,aACE;wCACJ;wCACAC,cAAc;oCAChB;iCACD;4BACH;yBACD,GACD,EAAE;2BACFV,mBAAmBqC,MAAMD,UACzB;4BACE;gCACE9B,MAAM;gCACNC,MAAM;gCACNmB,QAAQ;oCACN;wCACEpB,MAAM;wCACNC,MAAM;wCACNC,OAAO;4CACLC,aACE;wCACJ;wCACAC,cAAc;oCAChB;oCACA;wCACEJ,MAAM;wCACNC,MAAM;wCACNC,OAAO;4CACLC,aACE;wCACJ;wCACAC,cAAc;oCAChB;oCACA;wCACEJ,MAAM;wCACNC,MAAM;wCACNC,OAAO;4CACLC,aACE;wCACJ;wCACAC,cAAc;oCAChB;iCACD;4BACH;yBACD,GACD,EAAE;2BACFV,mBAAmB6B,QAAQO,UAC3B;4BACE;gCACE9B,MAAM;gCACNC,MAAM;gCACNmB,QAAQ;oCACN;wCACEpB,MAAM;wCACNC,MAAM;wCACNC,OAAO;4CACLC,aACE;wCACJ;wCACAC,cAAc;oCAChB;oCACA;wCACEJ,MAAM;wCACNC,MAAM;wCACNC,OAAO;4CACLC,aACE;wCACJ;wCACAC,cAAc;oCAChB;iCACD;4BACH;yBACD,GACD,EAAE;2BACFV,mBAAmBuB,MAAMa,UACzB;4BACE;gCACE9B,MAAM;gCACNC,MAAM;gCACNmB,QAAQ;oCACN;wCACEpB,MAAM;wCACNC,MAAM;wCACNC,OAAO;4CACLC,aACE;wCACJ;wCACAC,cAAc;wCACdC,OAAO;oCACT;oCACA;wCACEL,MAAM;wCACNC,MAAM;wCACNC,OAAO;4CACLC,aACE;wCACJ;wCACAC,cAAc;wCACdC,OAAO;oCACT;oCACA;wCACEL,MAAM;wCACNC,MAAM;wCACNC,OAAO;4CACLC,aACE;wCACJ;wCACAC,cAAc;wCACdC,OAAO;oCACT;oCACA;wCACEL,MAAM;wCACNC,MAAM;wCACNC,OAAO;4CACLC,aACE;wCACJ;wCACAC,cAAc;wCACdC,OAAO;oCACT;oCACA;wCACEL,MAAM;wCACNC,MAAM;wCACNC,OAAO;4CACLC,aAAa;wCACf;wCACAC,cAAc;wCACdC,OAAO;oCACT;oCACA;wCACEL,MAAM;wCACNC,MAAM;wCACNC,OAAO;4CACLC,aACE;wCACJ;wCACAC,cAAc;wCACdC,OAAO;oCACT;iCACD;4BACH;yBACD,GACD,EAAE;qBACP;oBACDA,OAAO;gBACT;aACD,GACD,EAAE;SACP;QACD2B,QAAQ;YACNC,QAAQ;YACRC,UAAU;QACZ;IACF;AACF,EAAC"}
|
package/dist/defaults.d.ts
DELETED
package/dist/defaults.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;CAEpB,CAAA"}
|