@govcraft/payload-cms-mcp 1.0.1

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 (121) hide show
  1. package/README.md +164 -0
  2. package/dist/config/index.d.ts +27 -0
  3. package/dist/config/index.js +31 -0
  4. package/dist/config/index.js.map +1 -0
  5. package/dist/controllers/mcp.controller.d.ts +7 -0
  6. package/dist/controllers/mcp.controller.js +328 -0
  7. package/dist/controllers/mcp.controller.js.map +1 -0
  8. package/dist/controllers/payload-mcp.controller.d.ts +4 -0
  9. package/dist/controllers/payload-mcp.controller.js +185 -0
  10. package/dist/controllers/payload-mcp.controller.js.map +1 -0
  11. package/dist/generate-tools.d.ts +1 -0
  12. package/dist/generate-tools.js +1417 -0
  13. package/dist/generate-tools.js.map +1 -0
  14. package/dist/index.d.ts +2 -0
  15. package/dist/index.js +16 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/mcp/anthropic-mcp.d.ts +3 -0
  18. package/dist/mcp/anthropic-mcp.js +332 -0
  19. package/dist/mcp/anthropic-mcp.js.map +1 -0
  20. package/dist/mcp/generated/index.d.ts +44 -0
  21. package/dist/mcp/generated/index.js +45 -0
  22. package/dist/mcp/generated/index.js.map +1 -0
  23. package/dist/mcp/generated/payload-tools.d.ts +7 -0
  24. package/dist/mcp/generated/payload-tools.js +69 -0
  25. package/dist/mcp/generated/payload-tools.js.map +1 -0
  26. package/dist/mcp/generated/payload-tools.json +13024 -0
  27. package/dist/mcp/generated/tools/create.json +9138 -0
  28. package/dist/mcp/generated/tools/createAccess.json +10 -0
  29. package/dist/mcp/generated/tools/createAfterChangeHook.json +9 -0
  30. package/dist/mcp/generated/tools/createAfterDeleteHook.json +9 -0
  31. package/dist/mcp/generated/tools/createAfterErrorHook.json +9 -0
  32. package/dist/mcp/generated/tools/createAfterForgotPasswordHook.json +9 -0
  33. package/dist/mcp/generated/tools/createAfterLoginHook.json +9 -0
  34. package/dist/mcp/generated/tools/createAfterLogoutHook.json +9 -0
  35. package/dist/mcp/generated/tools/createAfterMeHook.json +9 -0
  36. package/dist/mcp/generated/tools/createAfterOperationHook.json +9 -0
  37. package/dist/mcp/generated/tools/createAfterReadHook.json +9 -0
  38. package/dist/mcp/generated/tools/createAfterRefreshHook.json +9 -0
  39. package/dist/mcp/generated/tools/createArrayField.json +90 -0
  40. package/dist/mcp/generated/tools/createBeforeChangeHook.json +9 -0
  41. package/dist/mcp/generated/tools/createBeforeDeleteHook.json +9 -0
  42. package/dist/mcp/generated/tools/createBeforeLoginHook.json +9 -0
  43. package/dist/mcp/generated/tools/createBeforeOperationHook.json +9 -0
  44. package/dist/mcp/generated/tools/createBeforeReadHook.json +9 -0
  45. package/dist/mcp/generated/tools/createBeforeValidateHook.json +9 -0
  46. package/dist/mcp/generated/tools/createBlocksField.json +79 -0
  47. package/dist/mcp/generated/tools/createCodeField.json +79 -0
  48. package/dist/mcp/generated/tools/createCollection.json +422 -0
  49. package/dist/mcp/generated/tools/createCollectionAdminOptions.json +2789 -0
  50. package/dist/mcp/generated/tools/createDateField.json +84 -0
  51. package/dist/mcp/generated/tools/createEmailField.json +87 -0
  52. package/dist/mcp/generated/tools/createField.json +31 -0
  53. package/dist/mcp/generated/tools/createGlobal.json +220 -0
  54. package/dist/mcp/generated/tools/createGroupField.json +79 -0
  55. package/dist/mcp/generated/tools/createJSONField.json +79 -0
  56. package/dist/mcp/generated/tools/createJoinField.json +79 -0
  57. package/dist/mcp/generated/tools/createMeHook.json +9 -0
  58. package/dist/mcp/generated/tools/createNumberField.json +31 -0
  59. package/dist/mcp/generated/tools/createPointField.json +79 -0
  60. package/dist/mcp/generated/tools/createPolymorphicRelationshipField.json +31 -0
  61. package/dist/mcp/generated/tools/createRadioField.json +94 -0
  62. package/dist/mcp/generated/tools/createRefreshHook.json +9 -0
  63. package/dist/mcp/generated/tools/createRelationshipField.json +31 -0
  64. package/dist/mcp/generated/tools/createRichTextField.json +79 -0
  65. package/dist/mcp/generated/tools/createSelectField.json +31 -0
  66. package/dist/mcp/generated/tools/createSingleRelationshipField.json +31 -0
  67. package/dist/mcp/generated/tools/createTextField.json +31 -0
  68. package/dist/mcp/generated/tools/createTextareaField.json +87 -0
  69. package/dist/mcp/generated/tools/createUploadField.json +31 -0
  70. package/dist/mcp/handler.d.ts +6 -0
  71. package/dist/mcp/handler.js +147 -0
  72. package/dist/mcp/handler.js.map +1 -0
  73. package/dist/mcp/index.d.ts +1 -0
  74. package/dist/mcp/index.js +28 -0
  75. package/dist/mcp/index.js.map +1 -0
  76. package/dist/mcp/io/index.d.ts +2 -0
  77. package/dist/mcp/io/index.js +31 -0
  78. package/dist/mcp/io/index.js.map +1 -0
  79. package/dist/mcp/io/stdin.d.ts +2 -0
  80. package/dist/mcp/io/stdin.js +118 -0
  81. package/dist/mcp/io/stdin.js.map +1 -0
  82. package/dist/mcp/session.d.ts +16 -0
  83. package/dist/mcp/session.js +85 -0
  84. package/dist/mcp/session.js.map +1 -0
  85. package/dist/mcp/sse.d.ts +10 -0
  86. package/dist/mcp/sse.js +86 -0
  87. package/dist/mcp/sse.js.map +1 -0
  88. package/dist/mcp/tools/calculator.d.ts +2 -0
  89. package/dist/mcp/tools/calculator.js +68 -0
  90. package/dist/mcp/tools/calculator.js.map +1 -0
  91. package/dist/mcp/tools/index.d.ts +3 -0
  92. package/dist/mcp/tools/index.js +6 -0
  93. package/dist/mcp/tools/index.js.map +1 -0
  94. package/dist/mcp/tools/list-tools.d.ts +2 -0
  95. package/dist/mcp/tools/list-tools.js +47 -0
  96. package/dist/mcp/tools/list-tools.js.map +1 -0
  97. package/dist/mcp/tools/payload-tools-loader.d.ts +2 -0
  98. package/dist/mcp/tools/payload-tools-loader.js +21 -0
  99. package/dist/mcp/tools/payload-tools-loader.js.map +1 -0
  100. package/dist/mcp/types.d.ts +69 -0
  101. package/dist/mcp/types.js +2 -0
  102. package/dist/mcp/types.js.map +1 -0
  103. package/dist/middleware/errorHandler.d.ts +14 -0
  104. package/dist/middleware/errorHandler.js +25 -0
  105. package/dist/middleware/errorHandler.js.map +1 -0
  106. package/dist/middleware/notFoundHandler.d.ts +2 -0
  107. package/dist/middleware/notFoundHandler.js +8 -0
  108. package/dist/middleware/notFoundHandler.js.map +1 -0
  109. package/dist/routes/health.d.ts +2 -0
  110. package/dist/routes/health.js +18 -0
  111. package/dist/routes/health.js.map +1 -0
  112. package/dist/routes/mcp.d.ts +2 -0
  113. package/dist/routes/mcp.js +11 -0
  114. package/dist/routes/mcp.js.map +1 -0
  115. package/dist/routes/payload-mcp.routes.d.ts +3 -0
  116. package/dist/routes/payload-mcp.routes.js +8 -0
  117. package/dist/routes/payload-mcp.routes.js.map +1 -0
  118. package/dist/utils/logger.d.ts +2 -0
  119. package/dist/utils/logger.js +35 -0
  120. package/dist/utils/logger.js.map +1 -0
  121. package/package.json +64 -0
@@ -0,0 +1,3 @@
1
+ import { listToolsTool } from './list-tools.js';
2
+ export declare const tools: import("../types.js").MCPTool[];
3
+ export { listToolsTool };
@@ -0,0 +1,6 @@
1
+ import { listToolsTool } from './list-tools.js';
2
+ export const tools = [
3
+ listToolsTool
4
+ ];
5
+ export { listToolsTool };
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKhD,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,aAAa;CACd,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { MCPTool } from '../types.js';
2
+ export declare const listToolsTool: MCPTool;
@@ -0,0 +1,47 @@
1
+ import { getAvailableTools } from '../handler.js';
2
+ import { logger } from '../../utils/logger.js';
3
+ export const listToolsTool = {
4
+ name: 'listTools',
5
+ description: 'Lists all available tools with their descriptions and parameters',
6
+ parameters: {
7
+ type: 'object',
8
+ properties: {
9
+ filter: {
10
+ type: 'string',
11
+ description: 'Optional filter to search for specific tools by name or description'
12
+ },
13
+ includeParameters: {
14
+ type: 'boolean',
15
+ description: 'Whether to include parameter details in the response'
16
+ }
17
+ }
18
+ },
19
+ handler: async (params) => {
20
+ try {
21
+ const filter = params.filter;
22
+ const includeParameters = params.includeParameters;
23
+ const tools = getAvailableTools();
24
+ const filteredTools = filter
25
+ ? tools.filter(tool => tool.name.toLowerCase().includes(filter.toLowerCase()) ||
26
+ tool.description.toLowerCase().includes(filter.toLowerCase()))
27
+ : tools;
28
+ const result = filteredTools.map(tool => {
29
+ const toolInfo = {
30
+ name: tool.name,
31
+ description: tool.description
32
+ };
33
+ if (includeParameters) {
34
+ toolInfo.inputSchema = tool.parameters;
35
+ }
36
+ return toolInfo;
37
+ });
38
+ logger.info(`Listed ${result.length} tools${filter ? ` matching filter: ${filter}` : ''}`);
39
+ return result;
40
+ }
41
+ catch (error) {
42
+ logger.error('Error listing tools', { error });
43
+ throw new Error(`Failed to list tools: ${error instanceof Error ? error.message : String(error)}`);
44
+ }
45
+ }
46
+ };
47
+ //# sourceMappingURL=list-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-tools.js","sourceRoot":"","sources":["../../../src/mcp/tools/list-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAM/C,MAAM,CAAC,MAAM,aAAa,GAAY;IACpC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,kEAAkE;IAC/E,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,qEAAqE;aACnF;YACD,iBAAiB,EAAE;gBACjB,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,sDAAsD;aACpE;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,MAA+B,EAAoB,EAAE;QACnE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,MAA4B,CAAC;YACnD,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAwC,CAAC;YAG1E,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;YAGlC,MAAM,aAAa,GAAG,MAAM;gBAC1B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAClB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;oBACtD,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAC9D;gBACH,CAAC,CAAC,KAAK,CAAC;YAGV,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,QAAQ,GAA4B;oBACxC,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B,CAAC;gBAGF,IAAI,iBAAiB,EAAE,CAAC;oBACtB,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;gBACzC,CAAC;gBAED,OAAO,QAAQ,CAAC;YAClB,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,MAAM,SAAS,MAAM,CAAC,CAAC,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3F,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrG,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { MCPTool } from '../types.js';
2
+ export declare function loadPayloadTools(): MCPTool[];
@@ -0,0 +1,21 @@
1
+ import { existsSync } from 'fs';
2
+ import path from 'path';
3
+ import { logger } from '../../utils/logger.js';
4
+ export function loadPayloadTools() {
5
+ const tools = [];
6
+ const generatedDir = path.join(process.cwd(), 'src', 'mcp', 'generated');
7
+ const toolsFile = path.join(generatedDir, 'payload-tools.ts');
8
+ if (!existsSync(toolsFile)) {
9
+ logger.warn('Payload CMS tools not found. Run "pnpm generate-tools" to generate them.');
10
+ return tools;
11
+ }
12
+ try {
13
+ logger.info('Payload CMS tools found and will be loaded during initialization');
14
+ return tools;
15
+ }
16
+ catch (error) {
17
+ logger.error('Error loading Payload CMS tools', { error });
18
+ return tools;
19
+ }
20
+ }
21
+ //# sourceMappingURL=payload-tools-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-tools-loader.js","sourceRoot":"","sources":["../../../src/mcp/tools/payload-tools-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAM/C,MAAM,UAAU,gBAAgB;IAC9B,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACzE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAE9D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QACxF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QAGH,MAAM,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QAGhF,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,69 @@
1
+ export interface MCPMessage {
2
+ id: string;
3
+ type: string;
4
+ timestamp: string;
5
+ }
6
+ export interface MCPRequest extends MCPMessage {
7
+ type: 'request';
8
+ payload: {
9
+ query: string;
10
+ context?: Record<string, unknown>;
11
+ };
12
+ }
13
+ export interface MCPResponse extends MCPMessage {
14
+ type: 'response';
15
+ payload: {
16
+ content: string;
17
+ metadata?: Record<string, unknown>;
18
+ };
19
+ }
20
+ export interface MCPError extends MCPMessage {
21
+ type: 'error';
22
+ payload: {
23
+ code: string;
24
+ message: string;
25
+ details?: Record<string, unknown>;
26
+ };
27
+ }
28
+ export interface MCPStatus extends MCPMessage {
29
+ type: 'status';
30
+ payload: {
31
+ status: 'processing' | 'completed' | 'failed';
32
+ progress?: number;
33
+ message?: string;
34
+ };
35
+ }
36
+ export interface MCPToolCall extends MCPMessage {
37
+ type: 'tool_call';
38
+ payload: {
39
+ tool: string;
40
+ parameters: Record<string, unknown>;
41
+ };
42
+ }
43
+ export interface MCPToolResult extends MCPMessage {
44
+ type: 'tool_result';
45
+ payload: {
46
+ result: unknown;
47
+ error?: string;
48
+ };
49
+ }
50
+ export type MCPMessageType = MCPRequest | MCPResponse | MCPError | MCPStatus | MCPToolCall | MCPToolResult;
51
+ export interface MCPTool {
52
+ name: string;
53
+ description: string;
54
+ parameters: Record<string, unknown>;
55
+ handler: (params: Record<string, unknown>) => Promise<unknown>;
56
+ }
57
+ export interface MCPSession {
58
+ id: string;
59
+ startTime: Date;
60
+ lastActivity: Date;
61
+ context: Record<string, unknown>;
62
+ history: MCPMessageType[];
63
+ }
64
+ export interface MCPConfig {
65
+ maxSessionDuration: number;
66
+ maxSessionInactivity: number;
67
+ maxMessageSize: number;
68
+ supportedTools: MCPTool[];
69
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+ export interface AppError extends Error {
3
+ statusCode?: number;
4
+ status?: string;
5
+ isOperational?: boolean;
6
+ }
7
+ declare global {
8
+ namespace Express {
9
+ interface Request {
10
+ user?: Record<string, any>;
11
+ }
12
+ }
13
+ }
14
+ export declare const errorHandler: (err: AppError, req: Request, res: Response, _next: NextFunction) => void;
@@ -0,0 +1,25 @@
1
+ import { logger } from '../utils/logger.js';
2
+ export const errorHandler = (err, req, res, _next) => {
3
+ err.statusCode = err.statusCode || 500;
4
+ err.status = err.status || 'error';
5
+ logger.error(`${err.statusCode} - ${err.message} - ${req.originalUrl} - ${req.method} - ${req.ip}`, {
6
+ stack: err.stack,
7
+ user: req.user || 'unauthenticated',
8
+ body: req.body,
9
+ params: req.params,
10
+ });
11
+ if (err.isOperational) {
12
+ res.status(err.statusCode).json({
13
+ status: err.status,
14
+ message: err.message,
15
+ });
16
+ }
17
+ else {
18
+ logger.error('An unexpected error occurred', { error: err });
19
+ res.status(500).json({
20
+ status: 'error',
21
+ message: 'Something went wrong',
22
+ });
23
+ }
24
+ };
25
+ //# sourceMappingURL=errorHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../src/middleware/errorHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAiB5C,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,GAAa,EACb,GAAY,EACZ,GAAa,EAEb,KAAmB,EACb,EAAE;IACR,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC;IACvC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC;IAGnC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,UAAU,MAAM,GAAG,CAAC,OAAO,MAAM,GAAG,CAAC,WAAW,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE;QAClG,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,iBAAiB;QACnC,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CAAC,CAAC;IAGH,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACtB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;YAC9B,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC;IACL,CAAC;SAEI,CAAC;QAEJ,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAG7D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,sBAAsB;SAChC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+ export declare const notFoundHandler: (req: Request, _res: Response, next: NextFunction) => void;
@@ -0,0 +1,8 @@
1
+ export const notFoundHandler = (req, _res, next) => {
2
+ const error = new Error(`Not Found - ${req.originalUrl}`);
3
+ error.statusCode = 404;
4
+ error.status = 'fail';
5
+ error.isOperational = true;
6
+ next(error);
7
+ };
8
+ //# sourceMappingURL=notFoundHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notFoundHandler.js","sourceRoot":"","sources":["../../src/middleware/notFoundHandler.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,GAAY,EACZ,IAAc,EACd,IAAkB,EACZ,EAAE;IACR,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,eAAe,GAAG,CAAC,WAAW,EAAE,CAAa,CAAC;IACtE,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;IACvB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,KAAK,CAAC,CAAC;AACd,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Router } from 'express';
2
+ export declare const healthRoutes: Router;
@@ -0,0 +1,18 @@
1
+ import express from 'express';
2
+ import os from 'os';
3
+ const router = express.Router();
4
+ router.get('/', (_req, res) => {
5
+ const healthcheck = {
6
+ status: 'ok',
7
+ uptime: process.uptime(),
8
+ timestamp: Date.now(),
9
+ hostname: os.hostname(),
10
+ memory: process.memoryUsage(),
11
+ cpu: os.cpus(),
12
+ platform: process.platform,
13
+ nodeVersion: process.version,
14
+ };
15
+ res.status(200).json(healthcheck);
16
+ });
17
+ export const healthRoutes = router;
18
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"AAAA,OAAO,OAAsC,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,MAAM,GAAW,OAAO,CAAC,MAAM,EAAE,CAAC;AAOxC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAa,EAAE,GAAa,EAAQ,EAAE;IACrD,MAAM,WAAW,GAAG;QAClB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;QACxB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;QACvB,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE;QAC7B,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE;QACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW,EAAE,OAAO,CAAC,OAAO;KAC7B,CAAC;IAEF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAW,MAAM,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Router } from 'express';
2
+ export declare const mcpRoutes: Router;
@@ -0,0 +1,11 @@
1
+ import express from 'express';
2
+ import { handleMCPRequest, handleToolCall, getTools, handleSSEConnection, handleSSERequest, handleSSEToolCall } from '../controllers/mcp.controller.js';
3
+ const router = express.Router();
4
+ router.get('/sse', handleSSEConnection);
5
+ router.post('/sse/request', handleSSERequest);
6
+ router.post('/sse/tool', handleSSEToolCall);
7
+ router.post('/request', handleMCPRequest);
8
+ router.post('/tool', handleToolCall);
9
+ router.get('/tools', getTools);
10
+ export const mcpRoutes = router;
11
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/routes/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,OAAmB,MAAM,SAAS,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,kCAAkC,CAAC;AAE1C,MAAM,MAAM,GAAW,OAAO,CAAC,MAAM,EAAE,CAAC;AAOxC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAOxC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;AAO9C,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;AAO5C,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AAO1C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAOrC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAE/B,MAAM,CAAC,MAAM,SAAS,GAAW,MAAM,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Router } from 'express';
2
+ declare const router: Router;
3
+ export default router;
@@ -0,0 +1,8 @@
1
+ import { Router } from 'express';
2
+ import { handlePayloadMCPRequest, handlePayloadMCPSSEConnection, handlePayloadMCPSSERequest } from '../controllers/payload-mcp.controller.js';
3
+ const router = Router();
4
+ router.get('/sse', handlePayloadMCPSSEConnection);
5
+ router.post('/sse/request', handlePayloadMCPSSERequest);
6
+ router.post('/', handlePayloadMCPRequest);
7
+ export default router;
8
+ //# sourceMappingURL=payload-mcp.routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-mcp.routes.js","sourceRoot":"","sources":["../../src/routes/payload-mcp.routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,0BAA0B,EAC3B,MAAM,0CAA0C,CAAC;AAElD,MAAM,MAAM,GAAW,MAAM,EAAE,CAAC;AAOhC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;AAOlD,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;AAOxD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;AAE1C,eAAe,MAAM,CAAC"}
@@ -0,0 +1,2 @@
1
+ import winston from 'winston';
2
+ export declare const logger: winston.Logger;
@@ -0,0 +1,35 @@
1
+ import winston from 'winston';
2
+ import path from 'path';
3
+ import fs from 'fs';
4
+ import { config } from '../config/index.js';
5
+ const logDir = config.log.dir;
6
+ if (!fs.existsSync(logDir)) {
7
+ fs.mkdirSync(logDir, { recursive: true });
8
+ }
9
+ const logFormat = winston.format.combine(winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), winston.format.errors({ stack: true }), winston.format.splat(), winston.format.json());
10
+ export const logger = winston.createLogger({
11
+ level: config.log.level,
12
+ format: logFormat,
13
+ defaultMeta: { service: 'mcp-server' },
14
+ transports: [
15
+ new winston.transports.File({
16
+ filename: path.join(logDir, 'error.log'),
17
+ level: 'error'
18
+ }),
19
+ new winston.transports.File({
20
+ filename: path.join(logDir, 'combined.log')
21
+ })
22
+ ],
23
+ exceptionHandlers: [
24
+ new winston.transports.File({
25
+ filename: path.join(logDir, 'exceptions.log')
26
+ }),
27
+ ],
28
+ rejectionHandlers: [
29
+ new winston.transports.File({
30
+ filename: path.join(logDir, 'rejections.log')
31
+ }),
32
+ ],
33
+ exitOnError: false,
34
+ });
35
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AAC9B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3B,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5C,CAAC;AAGD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CACtC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,EAC3D,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EACtC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EACtB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CACtB,CAAC;AAGF,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK;IACvB,MAAM,EAAE,SAAS;IACjB,WAAW,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE;IACtC,UAAU,EAAE;QAEV,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YAC1B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC;YACxC,KAAK,EAAE,OAAO;SACf,CAAC;QAEF,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YAC1B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC;SAC5C,CAAC;KACH;IACD,iBAAiB,EAAE;QACjB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YAC1B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC;SAC9C,CAAC;KACH;IACD,iBAAiB,EAAE;QACjB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YAC1B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC;SAC9C,CAAC;KACH;IACD,WAAW,EAAE,KAAK;CACnB,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "@govcraft/payload-cms-mcp",
3
+ "version": "1.0.1",
4
+ "description": "Payload MCP Server - A Model Context Protocol server for Payload CMS 3.0",
5
+ "main": "dist/index.js",
6
+ "type": "module",
7
+ "bin": {
8
+ "payload-cms-mcp": "./dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "start": "node dist/index.js --stdio-only",
15
+ "dev": "tsx watch src/index.ts",
16
+ "build": "tsc && pnpm generate-tools && pnpm run copy-tools",
17
+ "copy-tools": "mkdir -p dist/mcp/generated && cp -r src/mcp/generated/tools dist/mcp/generated/ && cp src/mcp/generated/payload-tools.js dist/mcp/generated/",
18
+ "lint": "eslint . --ext .ts",
19
+ "lint:fix": "eslint . --ext .ts --fix",
20
+ "format": "prettier --write \"src/**/*.ts\"",
21
+ "test": "echo \"Error: no test specified\" && exit 1",
22
+ "stdio": "tsx src/index.ts --stdio-only",
23
+ "generate-tools": "tsx src/generate-tools.ts",
24
+ "prepare": "pnpm add payload@latest && pnpm build",
25
+ "prepublishOnly": "pnpm build",
26
+ "postinstall": "pnpm generate-tools && pnpm run copy-tools"
27
+ },
28
+ "keywords": [
29
+ "payload",
30
+ "cms",
31
+ "mcp",
32
+ "model-context-protocol",
33
+ "llm"
34
+ ],
35
+ "author": "roland@govcraft.ai",
36
+ "license": "MIT",
37
+ "devDependencies": {
38
+ "@types/express": "^5.0.0",
39
+ "@types/node": "^22.13.10",
40
+ "@types/uuid": "^10.0.0",
41
+ "@typescript-eslint/eslint-plugin": "^8.26.1",
42
+ "@typescript-eslint/parser": "^8.26.1",
43
+ "depcheck": "^1.4.7",
44
+ "eslint": "^9.22.0",
45
+ "eslint-config-prettier": "^10.1.1",
46
+ "nodemon": "^3.1.9",
47
+ "prettier": "^3.5.3",
48
+ "ts-morph": "^25.0.1",
49
+ "ts-node": "^10.9.2",
50
+ "tsconfig-paths": "^4.2.0",
51
+ "tsx": "^4.19.3",
52
+ "typescript": "^5.8.2"
53
+ },
54
+ "dependencies": {
55
+ "@modelcontextprotocol/sdk": "^1.7.0",
56
+ "dotenv": "^16.4.7",
57
+ "express": "^4.21.2",
58
+ "payload": "^3.28.1",
59
+ "uuid": "^11.1.0",
60
+ "winston": "^3.17.0",
61
+ "zod": "^3.24.2",
62
+ "ts-morph": "^25.0.1"
63
+ }
64
+ }