@prenta/mcp-server 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +583 -0
- package/LICENSE +21 -0
- package/README.md +130 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +44 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +1348 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +1019 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/instructions.d.ts +13 -0
- package/dist/instructions.d.ts.map +1 -0
- package/dist/instructions.js +61 -0
- package/dist/instructions.js.map +1 -0
- package/dist/navigation.d.ts +76 -0
- package/dist/navigation.d.ts.map +1 -0
- package/dist/navigation.js +228 -0
- package/dist/navigation.js.map +1 -0
- package/dist/resources.d.ts +28 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +88 -0
- package/dist/resources.js.map +1 -0
- package/dist/server.d.ts +25 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +90 -0
- package/dist/server.js.map +1 -0
- package/dist/tools.d.ts +25 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +1920 -0
- package/dist/tools.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAsBA;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B9B,CAAA;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO;QACL;YACE,GAAG,EAAE,gBAAgB;YACrB,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EACT,wIAAwI;YAC1I,QAAQ,EAAE,eAAe;YACzB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,eAAe;SAClC;QACD;YACE,GAAG,EAAE,sBAAsB;YAC3B,IAAI,EAAE,kCAAkC;YACxC,WAAW,EACT,iJAAiJ;YACnJ,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAA;oBAC1C,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBAC3B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,QAAQ,CAAC;wBACd,KAAK,EAAE,oDAAoD;wBAC3D,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;wBACxD,IAAI,EAAE,oGAAoG;qBAC3G,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;SACF;QACD;YACE,GAAG,EAAE,wBAAwB;YAC7B,IAAI,EAAE,2BAA2B;YACjC,WAAW,EACT,iJAAiJ;YACnJ,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAA;oBAC3C,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBAC3B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,QAAQ,CAAC;wBACd,KAAK,EAAE,sDAAsD;wBAC7D,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;wBACxD,IAAI,EAAE,wFAAwF;qBAC/F,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;SACF;KACF,CAAA;AACH,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP server that exposes Prenta CMS as a set of tools an AI agent can call.
|
|
3
|
+
*
|
|
4
|
+
* The server is transport-agnostic in here — the entry points in `cli.ts`
|
|
5
|
+
* wire it to stdio or HTTP. We use the official MCP SDK so we get protocol
|
|
6
|
+
* compliance, schema validation, and content-type negotiation for free.
|
|
7
|
+
*/
|
|
8
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
9
|
+
import { PrentaClient, type PrentaClientOptions } from './client.js';
|
|
10
|
+
import { type McpResource } from './resources.js';
|
|
11
|
+
import { type McpTool } from './tools.js';
|
|
12
|
+
export interface CreateMcpServerOptions extends PrentaClientOptions {
|
|
13
|
+
/** Server name reported to the MCP client. */
|
|
14
|
+
name?: string;
|
|
15
|
+
/** Server version reported to the MCP client. */
|
|
16
|
+
version?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface PrentaMcpServer {
|
|
19
|
+
server: Server;
|
|
20
|
+
tools: McpTool[];
|
|
21
|
+
resources: McpResource[];
|
|
22
|
+
client: PrentaClient;
|
|
23
|
+
}
|
|
24
|
+
export declare function createPrentaMcpServer(opts: CreateMcpServerOptions): PrentaMcpServer;
|
|
25
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAOlE,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEpE,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAA;AAErD,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,SAAS,EAAE,WAAW,EAAE,CAAA;IACxB,MAAM,EAAE,YAAY,CAAA;CACrB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,GAAG,eAAe,CAoFnF"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP server that exposes Prenta CMS as a set of tools an AI agent can call.
|
|
3
|
+
*
|
|
4
|
+
* The server is transport-agnostic in here — the entry points in `cli.ts`
|
|
5
|
+
* wire it to stdio or HTTP. We use the official MCP SDK so we get protocol
|
|
6
|
+
* compliance, schema validation, and content-type negotiation for free.
|
|
7
|
+
*/
|
|
8
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
9
|
+
import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
10
|
+
import { PrentaClient } from './client.js';
|
|
11
|
+
import { SERVER_INSTRUCTIONS } from './instructions.js';
|
|
12
|
+
import { buildResources } from './resources.js';
|
|
13
|
+
import { buildTools } from './tools.js';
|
|
14
|
+
export function createPrentaMcpServer(opts) {
|
|
15
|
+
const client = new PrentaClient(opts);
|
|
16
|
+
const tools = buildTools(client);
|
|
17
|
+
const resources = buildResources(client);
|
|
18
|
+
const server = new Server({
|
|
19
|
+
name: opts.name ?? 'prenta-cms',
|
|
20
|
+
version: opts.version ?? '0.1.0',
|
|
21
|
+
}, {
|
|
22
|
+
// `instructions` is returned during `initialize`; most MCP clients inject
|
|
23
|
+
// it into the model's system context so the agent knows how to drive the
|
|
24
|
+
// CMS before calling anything.
|
|
25
|
+
instructions: SERVER_INSTRUCTIONS,
|
|
26
|
+
capabilities: {
|
|
27
|
+
tools: {},
|
|
28
|
+
resources: {},
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
32
|
+
tools: tools.map((t) => ({
|
|
33
|
+
name: t.name,
|
|
34
|
+
description: t.description,
|
|
35
|
+
inputSchema: t.inputSchema,
|
|
36
|
+
})),
|
|
37
|
+
}));
|
|
38
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => ({
|
|
39
|
+
resources: resources.map((r) => ({
|
|
40
|
+
uri: r.uri,
|
|
41
|
+
name: r.name,
|
|
42
|
+
description: r.description,
|
|
43
|
+
mimeType: r.mimeType,
|
|
44
|
+
})),
|
|
45
|
+
}));
|
|
46
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
47
|
+
const resource = resources.find((r) => r.uri === request.params.uri);
|
|
48
|
+
if (!resource) {
|
|
49
|
+
throw new Error(`Unknown resource: ${request.params.uri}`);
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
contents: [
|
|
53
|
+
{
|
|
54
|
+
uri: resource.uri,
|
|
55
|
+
mimeType: resource.mimeType,
|
|
56
|
+
text: await resource.read(),
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
62
|
+
const tool = tools.find((t) => t.name === request.params.name);
|
|
63
|
+
if (!tool) {
|
|
64
|
+
return {
|
|
65
|
+
isError: true,
|
|
66
|
+
content: [{ type: 'text', text: `Unknown tool: ${request.params.name}` }],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
const result = await tool.handler(request.params.arguments ?? {});
|
|
71
|
+
return {
|
|
72
|
+
content: [
|
|
73
|
+
{
|
|
74
|
+
type: 'text',
|
|
75
|
+
text: JSON.stringify(result, null, 2),
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
82
|
+
return {
|
|
83
|
+
isError: true,
|
|
84
|
+
content: [{ type: 'text', text: message }],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return { server, tools, resources, client };
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool definitions for Prenta CMS.
|
|
3
|
+
*
|
|
4
|
+
* Each tool is a thin wrapper around an PrentaClient call. We expose a small
|
|
5
|
+
* but powerful set focused on the workflows AI agents actually need:
|
|
6
|
+
* - discover collections and fields
|
|
7
|
+
* - list / get / create / update / delete documents
|
|
8
|
+
* - read / update globals (site settings)
|
|
9
|
+
* - generate pages and blocks via the AI page builder
|
|
10
|
+
* - create complete pages from a prompt in one shot
|
|
11
|
+
*
|
|
12
|
+
* We deliberately do not expose admin-only endpoints (user management,
|
|
13
|
+
* api-key CRUD, audit log) — the agent already has limited scope via its key.
|
|
14
|
+
*/
|
|
15
|
+
import { z } from 'zod';
|
|
16
|
+
import { type PrentaClient } from './client.js';
|
|
17
|
+
export interface McpTool {
|
|
18
|
+
name: string;
|
|
19
|
+
description: string;
|
|
20
|
+
inputSchema: Record<string, unknown>;
|
|
21
|
+
handler: (args: unknown) => Promise<unknown>;
|
|
22
|
+
}
|
|
23
|
+
export declare function zodToJsonSchema(schema: z.ZodObject<any>): Record<string, unknown>;
|
|
24
|
+
export declare function buildTools(client: PrentaClient): McpTool[];
|
|
25
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAalE,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC7C;AAMD,wBAAgB,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAajF;AAsGD,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,EAAE,CA8wF1D"}
|