@kywi-software/mcp 0.1.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/LICENSE +661 -0
- package/README.md +77 -0
- package/dist/__tests__/auto-detect.test.d.ts +2 -0
- package/dist/__tests__/auto-detect.test.d.ts.map +1 -0
- package/dist/__tests__/auto-detect.test.js +134 -0
- package/dist/__tests__/auto-detect.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +72 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/developer-mutation.test.d.ts +2 -0
- package/dist/__tests__/developer-mutation.test.d.ts.map +1 -0
- package/dist/__tests__/developer-mutation.test.js +511 -0
- package/dist/__tests__/developer-mutation.test.js.map +1 -0
- package/dist/__tests__/developer-read-only.test.d.ts +2 -0
- package/dist/__tests__/developer-read-only.test.d.ts.map +1 -0
- package/dist/__tests__/developer-read-only.test.js +192 -0
- package/dist/__tests__/developer-read-only.test.js.map +1 -0
- package/dist/__tests__/site-content-tools.test.d.ts +2 -0
- package/dist/__tests__/site-content-tools.test.d.ts.map +1 -0
- package/dist/__tests__/site-content-tools.test.js +446 -0
- package/dist/__tests__/site-content-tools.test.js.map +1 -0
- package/dist/__tests__/site-layout-tools.test.d.ts +2 -0
- package/dist/__tests__/site-layout-tools.test.d.ts.map +1 -0
- package/dist/__tests__/site-layout-tools.test.js +316 -0
- package/dist/__tests__/site-layout-tools.test.js.map +1 -0
- package/dist/__tests__/site-other-tools.test.d.ts +2 -0
- package/dist/__tests__/site-other-tools.test.d.ts.map +1 -0
- package/dist/__tests__/site-other-tools.test.js +318 -0
- package/dist/__tests__/site-other-tools.test.js.map +1 -0
- package/dist/config.d.ts +31 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +4 -0
- package/dist/config.js.map +1 -0
- package/dist/developer/auto-detect.d.ts +17 -0
- package/dist/developer/auto-detect.d.ts.map +1 -0
- package/dist/developer/auto-detect.js +54 -0
- package/dist/developer/auto-detect.js.map +1 -0
- package/dist/developer/cli.d.ts +3 -0
- package/dist/developer/cli.d.ts.map +1 -0
- package/dist/developer/cli.js +14 -0
- package/dist/developer/cli.js.map +1 -0
- package/dist/developer/index.d.ts +4 -0
- package/dist/developer/index.d.ts.map +1 -0
- package/dist/developer/index.js +9 -0
- package/dist/developer/index.js.map +1 -0
- package/dist/developer/server.d.ts +4 -0
- package/dist/developer/server.d.ts.map +1 -0
- package/dist/developer/server.js +29 -0
- package/dist/developer/server.js.map +1 -0
- package/dist/developer/tools/api-keys.d.ts +48 -0
- package/dist/developer/tools/api-keys.d.ts.map +1 -0
- package/dist/developer/tools/api-keys.js +51 -0
- package/dist/developer/tools/api-keys.js.map +1 -0
- package/dist/developer/tools/config-mutation.d.ts +139 -0
- package/dist/developer/tools/config-mutation.d.ts.map +1 -0
- package/dist/developer/tools/config-mutation.js +277 -0
- package/dist/developer/tools/config-mutation.js.map +1 -0
- package/dist/developer/tools/content-type-tools.d.ts +32 -0
- package/dist/developer/tools/content-type-tools.d.ts.map +1 -0
- package/dist/developer/tools/content-type-tools.js +92 -0
- package/dist/developer/tools/content-type-tools.js.map +1 -0
- package/dist/developer/tools/read-only.d.ts +86 -0
- package/dist/developer/tools/read-only.d.ts.map +1 -0
- package/dist/developer/tools/read-only.js +235 -0
- package/dist/developer/tools/read-only.js.map +1 -0
- package/dist/developer/tools/scaffolding.d.ts +67 -0
- package/dist/developer/tools/scaffolding.d.ts.map +1 -0
- package/dist/developer/tools/scaffolding.js +207 -0
- package/dist/developer/tools/scaffolding.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/shared.d.ts +15 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +7 -0
- package/dist/shared.js.map +1 -0
- package/dist/site/cli.d.ts +3 -0
- package/dist/site/cli.d.ts.map +1 -0
- package/dist/site/cli.js +12 -0
- package/dist/site/cli.js.map +1 -0
- package/dist/site/index.d.ts +4 -0
- package/dist/site/index.d.ts.map +1 -0
- package/dist/site/index.js +9 -0
- package/dist/site/index.js.map +1 -0
- package/dist/site/server.d.ts +10 -0
- package/dist/site/server.d.ts.map +1 -0
- package/dist/site/server.js +73 -0
- package/dist/site/server.js.map +1 -0
- package/dist/site/tools/content.d.ts +250 -0
- package/dist/site/tools/content.d.ts.map +1 -0
- package/dist/site/tools/content.js +329 -0
- package/dist/site/tools/content.js.map +1 -0
- package/dist/site/tools/feeds.d.ts +62 -0
- package/dist/site/tools/feeds.d.ts.map +1 -0
- package/dist/site/tools/feeds.js +97 -0
- package/dist/site/tools/feeds.js.map +1 -0
- package/dist/site/tools/layout.d.ts +163 -0
- package/dist/site/tools/layout.d.ts.map +1 -0
- package/dist/site/tools/layout.js +226 -0
- package/dist/site/tools/layout.js.map +1 -0
- package/dist/site/tools/media.d.ts +38 -0
- package/dist/site/tools/media.d.ts.map +1 -0
- package/dist/site/tools/media.js +52 -0
- package/dist/site/tools/media.js.map +1 -0
- package/dist/site/tools/search.d.ts +40 -0
- package/dist/site/tools/search.d.ts.map +1 -0
- package/dist/site/tools/search.js +60 -0
- package/dist/site/tools/search.js.map +1 -0
- package/dist/site/tools/users.d.ts +60 -0
- package/dist/site/tools/users.d.ts.map +1 -0
- package/dist/site/tools/users.js +71 -0
- package/dist/site/tools/users.js.map +1 -0
- package/dist/site/tools/webhooks.d.ts +34 -0
- package/dist/site/tools/webhooks.d.ts.map +1 -0
- package/dist/site/tools/webhooks.js +44 -0
- package/dist/site/tools/webhooks.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { KywiSdkScope } from '@kywi-software/sdk';
|
|
3
|
+
export declare function handleListUsers(sdk: KywiSdkScope, args: {
|
|
4
|
+
siteId?: string | undefined;
|
|
5
|
+
role?: string | undefined;
|
|
6
|
+
limit?: number | undefined;
|
|
7
|
+
page?: number | undefined;
|
|
8
|
+
}): Promise<{
|
|
9
|
+
content: [{
|
|
10
|
+
type: "text";
|
|
11
|
+
text: string;
|
|
12
|
+
}];
|
|
13
|
+
isError?: undefined;
|
|
14
|
+
}>;
|
|
15
|
+
export declare function handleCreateUser(sdk: KywiSdkScope, args: {
|
|
16
|
+
email: string;
|
|
17
|
+
name: string;
|
|
18
|
+
role: string;
|
|
19
|
+
siteId: string;
|
|
20
|
+
password?: string | undefined;
|
|
21
|
+
}): Promise<{
|
|
22
|
+
content: [{
|
|
23
|
+
type: "text";
|
|
24
|
+
text: string;
|
|
25
|
+
}];
|
|
26
|
+
isError?: undefined;
|
|
27
|
+
}>;
|
|
28
|
+
export declare function handleGetSiteConfig(sdk: KywiSdkScope, args: {
|
|
29
|
+
siteId: string;
|
|
30
|
+
}): Promise<{
|
|
31
|
+
content: [{
|
|
32
|
+
type: "text";
|
|
33
|
+
text: string;
|
|
34
|
+
}];
|
|
35
|
+
isError?: undefined;
|
|
36
|
+
} | {
|
|
37
|
+
content: [{
|
|
38
|
+
type: "text";
|
|
39
|
+
text: string;
|
|
40
|
+
}];
|
|
41
|
+
isError: true;
|
|
42
|
+
}>;
|
|
43
|
+
export declare function handleUpdateSiteConfig(sdk: KywiSdkScope, args: {
|
|
44
|
+
siteId: string;
|
|
45
|
+
settings: Record<string, unknown>;
|
|
46
|
+
}): Promise<{
|
|
47
|
+
content: [{
|
|
48
|
+
type: "text";
|
|
49
|
+
text: string;
|
|
50
|
+
}];
|
|
51
|
+
isError?: undefined;
|
|
52
|
+
} | {
|
|
53
|
+
content: [{
|
|
54
|
+
type: "text";
|
|
55
|
+
text: string;
|
|
56
|
+
}];
|
|
57
|
+
isError: true;
|
|
58
|
+
}>;
|
|
59
|
+
export declare function registerUserTools(server: McpServer, sdk: KywiSdkScope): void;
|
|
60
|
+
//# sourceMappingURL=users.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/site/tools/users.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAKtD,wBAAsB,eAAe,CACnC,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE;;;;;;GASxH;AAED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE;;;;;;GAUnG;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;GAIzB;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE;;;;;;;;;;;;GAQ5D;AAID,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,GAAG,IAAI,CAoC5E"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { textResult, errorResult } from '../../shared.js';
|
|
3
|
+
// ─── Exported handler functions (testable without server) ───────────────────
|
|
4
|
+
export async function handleListUsers(sdk, args) {
|
|
5
|
+
const result = await sdk.user.list({
|
|
6
|
+
siteId: args.siteId,
|
|
7
|
+
role: args.role,
|
|
8
|
+
limit: args.limit,
|
|
9
|
+
page: args.page,
|
|
10
|
+
});
|
|
11
|
+
return textResult(result);
|
|
12
|
+
}
|
|
13
|
+
export async function handleCreateUser(sdk, args) {
|
|
14
|
+
const user = await sdk.user.create({
|
|
15
|
+
email: args.email,
|
|
16
|
+
password: args.password ?? crypto.randomUUID(),
|
|
17
|
+
name: args.name,
|
|
18
|
+
role: args.role,
|
|
19
|
+
siteId: args.siteId,
|
|
20
|
+
});
|
|
21
|
+
return textResult(user);
|
|
22
|
+
}
|
|
23
|
+
export async function handleGetSiteConfig(sdk, args) {
|
|
24
|
+
const config = await sdk.site.getConfig(args.siteId);
|
|
25
|
+
return config ? textResult(config) : errorResult('Site config not found');
|
|
26
|
+
}
|
|
27
|
+
export async function handleUpdateSiteConfig(sdk, args) {
|
|
28
|
+
try {
|
|
29
|
+
const settings = await sdk.site.updateSettings(args.siteId, args.settings);
|
|
30
|
+
return textResult({ updated: true, siteId: args.siteId, settings });
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
return errorResult(e instanceof Error ? e.message : 'Failed to update site config');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// ─── Registration ───────────────────────────────────────────────────────────
|
|
37
|
+
export function registerUserTools(server, sdk) {
|
|
38
|
+
server.registerTool('list_users', {
|
|
39
|
+
description: 'List users for a site (requires siteAdmin role)',
|
|
40
|
+
inputSchema: {
|
|
41
|
+
siteId: z.string().optional().describe('Filter by site ID'),
|
|
42
|
+
role: z.string().optional().describe('Filter by role'),
|
|
43
|
+
limit: z.number().optional().describe('Items per page'),
|
|
44
|
+
page: z.number().optional().describe('Page number'),
|
|
45
|
+
},
|
|
46
|
+
}, async (args) => handleListUsers(sdk, args));
|
|
47
|
+
server.registerTool('create_user', {
|
|
48
|
+
description: 'Create a user account (requires siteAdmin role)',
|
|
49
|
+
inputSchema: {
|
|
50
|
+
email: z.string().describe('User email'),
|
|
51
|
+
name: z.string().describe('User display name'),
|
|
52
|
+
role: z.string().describe('User role'),
|
|
53
|
+
siteId: z.string().describe('Site ID'),
|
|
54
|
+
password: z.string().optional().describe('Initial password (auto-generated if omitted)'),
|
|
55
|
+
},
|
|
56
|
+
}, async (args) => handleCreateUser(sdk, args));
|
|
57
|
+
server.registerTool('get_site_config', {
|
|
58
|
+
description: 'Get site configuration',
|
|
59
|
+
inputSchema: {
|
|
60
|
+
siteId: z.string().describe('Site ID'),
|
|
61
|
+
},
|
|
62
|
+
}, async (args) => handleGetSiteConfig(sdk, args));
|
|
63
|
+
server.registerTool('update_site_config', {
|
|
64
|
+
description: 'Update a site’s settings (bulk key/value upsert; requires siteAdmin role)',
|
|
65
|
+
inputSchema: {
|
|
66
|
+
siteId: z.string().describe('Site ID'),
|
|
67
|
+
settings: z.record(z.unknown()).describe('Settings to upsert (merged into existing settings)'),
|
|
68
|
+
},
|
|
69
|
+
}, async (args) => handleUpdateSiteConfig(sdk, args));
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../../src/site/tools/users.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { KywiHttpClient } from '@kywi-software/sdk';
|
|
3
|
+
export declare function handleCreateWebhook(http: KywiHttpClient, args: {
|
|
4
|
+
url: string;
|
|
5
|
+
events: string[];
|
|
6
|
+
secret?: string | undefined;
|
|
7
|
+
}): Promise<{
|
|
8
|
+
content: [{
|
|
9
|
+
type: "text";
|
|
10
|
+
text: string;
|
|
11
|
+
}];
|
|
12
|
+
isError?: undefined;
|
|
13
|
+
} | {
|
|
14
|
+
content: [{
|
|
15
|
+
type: "text";
|
|
16
|
+
text: string;
|
|
17
|
+
}];
|
|
18
|
+
isError: true;
|
|
19
|
+
}>;
|
|
20
|
+
export declare function handleListWebhooks(http: KywiHttpClient): Promise<{
|
|
21
|
+
content: [{
|
|
22
|
+
type: "text";
|
|
23
|
+
text: string;
|
|
24
|
+
}];
|
|
25
|
+
isError?: undefined;
|
|
26
|
+
} | {
|
|
27
|
+
content: [{
|
|
28
|
+
type: "text";
|
|
29
|
+
text: string;
|
|
30
|
+
}];
|
|
31
|
+
isError: true;
|
|
32
|
+
}>;
|
|
33
|
+
export declare function registerWebhookTools(server: McpServer, http: KywiHttpClient): void;
|
|
34
|
+
//# sourceMappingURL=webhooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../../src/site/tools/webhooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAKxD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE;;;;;;;;;;;;GAerE;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,cAAc;;;;;;;;;;;;GAO5D;AAID,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAclF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { textResult, errorResult } from '../../shared.js';
|
|
3
|
+
// ─── Exported handler functions (testable without server) ─────────────────
|
|
4
|
+
export async function handleCreateWebhook(http, args) {
|
|
5
|
+
try {
|
|
6
|
+
const payload = {
|
|
7
|
+
url: args.url,
|
|
8
|
+
events: args.events,
|
|
9
|
+
};
|
|
10
|
+
if (args.secret) {
|
|
11
|
+
payload.secret = args.secret;
|
|
12
|
+
}
|
|
13
|
+
const result = await http.post('/webhooks', payload);
|
|
14
|
+
return textResult(result);
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
return errorResult(`Failed to create webhook: ${err instanceof Error ? err.message : String(err)}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export async function handleListWebhooks(http) {
|
|
21
|
+
try {
|
|
22
|
+
const result = await http.get('/webhooks');
|
|
23
|
+
return textResult(result);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
return errorResult(`Failed to list webhooks: ${err instanceof Error ? err.message : String(err)}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// ─── Registration ─────────────────────────────────────────────────────────────
|
|
30
|
+
export function registerWebhookTools(server, http) {
|
|
31
|
+
server.registerTool('create_webhook', {
|
|
32
|
+
description: 'Create a webhook that fires on content events',
|
|
33
|
+
inputSchema: {
|
|
34
|
+
url: z.string().url().describe('Webhook endpoint URL'),
|
|
35
|
+
events: z.array(z.string()).describe('Events to subscribe to (e.g. content.published, content.updated)'),
|
|
36
|
+
secret: z.string().optional().describe('Optional shared secret for HMAC signature verification'),
|
|
37
|
+
},
|
|
38
|
+
}, async (args) => handleCreateWebhook(http, args));
|
|
39
|
+
server.registerTool('list_webhooks', {
|
|
40
|
+
description: 'List all configured webhooks',
|
|
41
|
+
inputSchema: {},
|
|
42
|
+
}, async () => handleListWebhooks(http));
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=webhooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../../src/site/tools/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAEzD,6EAA6E;AAE7E,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAoB,EACpB,IAAoE;IAEpE,IAAI,CAAC;QACH,MAAM,OAAO,GAA4B;YACvC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAA;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC9B,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAU,WAAW,EAAE,OAAO,CAAC,CAAA;QAC7D,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAC,6BAA6B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACrG,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAoB;IAC3D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAU,WAAW,CAAC,CAAA;QACnD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAC,4BAA4B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACpG,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,IAAoB;IAC1E,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE;QACpC,WAAW,EAAE,+CAA+C;QAC5D,WAAW,EAAE;YACX,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACtD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,kEAAkE,CAAC;YACxG,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;SACjG;KACF,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAEnD,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE;QACnC,WAAW,EAAE,8BAA8B;QAC3C,WAAW,EAAE,EAAE;KAChB,EAAE,KAAK,IAAI,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAA;AAC1C,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kywi-software/mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Model Context Protocol servers for Kywi CMS — a site server (content/nav/media over the REST API) and a developer server (kywi.config.ts scaffolding and mutation).",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "AGPL-3.0-only",
|
|
7
|
+
"homepage": "https://github.com/Kywi-Software/kywi-cms#readme",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/Kywi-Software/kywi-cms.git",
|
|
11
|
+
"directory": "packages/mcp"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"kywi",
|
|
15
|
+
"cms",
|
|
16
|
+
"mcp",
|
|
17
|
+
"model-context-protocol",
|
|
18
|
+
"ai-agent"
|
|
19
|
+
],
|
|
20
|
+
"publishConfig": {
|
|
21
|
+
"access": "public"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist",
|
|
25
|
+
"README.md",
|
|
26
|
+
"LICENSE"
|
|
27
|
+
],
|
|
28
|
+
"exports": {
|
|
29
|
+
".": {
|
|
30
|
+
"types": "./dist/index.d.ts",
|
|
31
|
+
"import": "./dist/index.js"
|
|
32
|
+
},
|
|
33
|
+
"./site": {
|
|
34
|
+
"types": "./dist/site/index.d.ts",
|
|
35
|
+
"import": "./dist/site/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./developer": {
|
|
38
|
+
"types": "./dist/developer/index.d.ts",
|
|
39
|
+
"import": "./dist/developer/index.js"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"bin": {
|
|
43
|
+
"kywi-mcp-site": "./dist/site/cli.js",
|
|
44
|
+
"kywi-mcp-dev": "./dist/developer/cli.js"
|
|
45
|
+
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
48
|
+
"zod": "^3.25.0",
|
|
49
|
+
"@kywi-software/sdk": "0.1.0"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@types/node": "^20.0.0",
|
|
53
|
+
"typescript": "^5.5.0",
|
|
54
|
+
"vitest": "^1.6.0"
|
|
55
|
+
},
|
|
56
|
+
"scripts": {
|
|
57
|
+
"build": "tsc",
|
|
58
|
+
"test": "vitest run",
|
|
59
|
+
"test:watch": "vitest"
|
|
60
|
+
}
|
|
61
|
+
}
|