@antonytm/mcp-sitecore-server 0.8.3-bundle → 0.9.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/README.md +1 -0
- package/dist/app.js +3 -0
- package/dist/app.js.map +1 -0
- package/dist/config.d.ts +2 -2
- package/dist/config.js +66 -0
- package/dist/config.js.map +1 -0
- package/dist/const.js +2 -0
- package/dist/const.js.map +1 -0
- package/dist/helper.js +19 -0
- package/dist/helper.js.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/run.js +7 -0
- package/dist/run.js.map +1 -0
- package/dist/server.d.ts +1 -1
- package/dist/server.js +67 -0
- package/dist/server.js.map +1 -0
- package/dist/sse.d.ts +1 -1
- package/dist/sse.js +31 -0
- package/dist/sse.js.map +1 -0
- package/dist/stdio.js +8 -0
- package/dist/stdio.js.map +1 -0
- package/dist/streamable-http.d.ts +1 -0
- package/dist/streamable-http.js +69 -0
- package/dist/streamable-http.js.map +1 -0
- package/dist/tools/graphql/generic/introspection.js +34 -0
- package/dist/tools/graphql/generic/introspection.js.map +1 -0
- package/dist/tools/graphql/generic/query.js +37 -0
- package/dist/tools/graphql/generic/query.js.map +1 -0
- package/dist/tools/graphql/register-graphql.js +24 -0
- package/dist/tools/graphql/register-graphql.js.map +1 -0
- package/dist/tools/item-service/client.js +428 -0
- package/dist/tools/item-service/client.js.map +1 -0
- package/dist/tools/item-service/composite/get-item-descendants.js +30 -0
- package/dist/tools/item-service/composite/get-item-descendants.js.map +1 -0
- package/dist/tools/item-service/composite/get-languages.js +19 -0
- package/dist/tools/item-service/composite/get-languages.js.map +1 -0
- package/dist/tools/item-service/register-item-service.js +156 -0
- package/dist/tools/item-service/register-item-service.js.map +1 -0
- package/dist/tools/item-service/simple/create-item.js +17 -0
- package/dist/tools/item-service/simple/create-item.js.map +1 -0
- package/dist/tools/item-service/simple/delete-item.js +23 -0
- package/dist/tools/item-service/simple/delete-item.js.map +1 -0
- package/dist/tools/item-service/simple/edit-item.js +23 -0
- package/dist/tools/item-service/simple/edit-item.js.map +1 -0
- package/dist/tools/item-service/simple/get-item-by-path.js +17 -0
- package/dist/tools/item-service/simple/get-item-by-path.js.map +1 -0
- package/dist/tools/item-service/simple/get-item-children.js +17 -0
- package/dist/tools/item-service/simple/get-item-children.js.map +1 -0
- package/dist/tools/item-service/simple/get-item.js +18 -0
- package/dist/tools/item-service/simple/get-item.js.map +1 -0
- package/dist/tools/item-service/simple/run-stored-query.js +24 -0
- package/dist/tools/item-service/simple/run-stored-query.js.map +1 -0
- package/dist/tools/item-service/simple/run-stored-search.js +24 -0
- package/dist/tools/item-service/simple/run-stored-search.js.map +1 -0
- package/dist/tools/item-service/simple/search-items.js +17 -0
- package/dist/tools/item-service/simple/search-items.js.map +1 -0
- package/dist/tools/powershell/client.js +58 -0
- package/dist/tools/powershell/client.js.map +1 -0
- package/dist/tools/powershell/composite/register-composite-powershell.js +5 -0
- package/dist/tools/powershell/composite/register-composite-powershell.js.map +1 -0
- package/dist/tools/powershell/composite/security/register-security-powershell.js +5 -0
- package/dist/tools/powershell/composite/security/register-security-powershell.js.map +1 -0
- package/dist/tools/powershell/composite/security/register-set-item-acl.js +59 -0
- package/dist/tools/powershell/composite/security/register-set-item-acl.js.map +1 -0
- package/dist/tools/powershell/output.js +8 -0
- package/dist/tools/powershell/output.js.map +1 -0
- package/dist/tools/powershell/register-powershell.d.ts +1 -1
- package/dist/tools/powershell/register-powershell.js +7 -0
- package/dist/tools/powershell/register-powershell.js.map +1 -0
- package/dist/tools/powershell/simple/generic.js +27 -0
- package/dist/tools/powershell/simple/generic.js.map +1 -0
- package/dist/tools/powershell/simple/indexing/register-find-item.d.ts +3 -0
- package/dist/tools/powershell/simple/indexing/register-find-item.js +129 -0
- package/dist/tools/powershell/simple/indexing/register-find-item.js.map +1 -0
- package/dist/tools/powershell/simple/indexing/register-get-search-index.js +28 -0
- package/dist/tools/powershell/simple/indexing/register-get-search-index.js.map +1 -0
- package/dist/tools/powershell/simple/indexing/register-indexing-powershell.d.ts +1 -1
- package/dist/tools/powershell/simple/indexing/register-indexing-powershell.js +9 -0
- package/dist/tools/powershell/simple/indexing/register-indexing-powershell.js.map +1 -0
- package/dist/tools/powershell/simple/indexing/register-initialize-search-index.js +24 -0
- package/dist/tools/powershell/simple/indexing/register-initialize-search-index.js.map +1 -0
- package/dist/tools/powershell/simple/provider/register-get-item.js +118 -0
- package/dist/tools/powershell/simple/provider/register-get-item.js.map +1 -0
- package/dist/tools/powershell/simple/provider/register-provider-powershell.js +5 -0
- package/dist/tools/powershell/simple/provider/register-provider-powershell.js.map +1 -0
- package/dist/tools/powershell/simple/register-simple-powershell.d.ts +1 -1
- package/dist/tools/powershell/simple/register-simple-powershell.js +9 -0
- package/dist/tools/powershell/simple/register-simple-powershell.js.map +1 -0
- package/dist/tools/powershell/simple/security/access-rights.js +33 -0
- package/dist/tools/powershell/simple/security/access-rights.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-add-item-acl.js +66 -0
- package/dist/tools/powershell/simple/security/register-add-item-acl.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-add-role-member.js +19 -0
- package/dist/tools/powershell/simple/security/register-add-role-member.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-clear-item-acl.js +46 -0
- package/dist/tools/powershell/simple/security/register-clear-item-acl.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-disable-user.js +15 -0
- package/dist/tools/powershell/simple/security/register-disable-user.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-enable-user.js +15 -0
- package/dist/tools/powershell/simple/security/register-enable-user.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-get-domain.js +20 -0
- package/dist/tools/powershell/simple/security/register-get-domain.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-get-item-acl.js +56 -0
- package/dist/tools/powershell/simple/security/register-get-item-acl.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-get-role-member.js +31 -0
- package/dist/tools/powershell/simple/security/register-get-role-member.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-get-role.js +24 -0
- package/dist/tools/powershell/simple/security/register-get-role.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-get-user.js +31 -0
- package/dist/tools/powershell/simple/security/register-get-user.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-lock-item.js +56 -0
- package/dist/tools/powershell/simple/security/register-lock-item.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-new-domain.js +15 -0
- package/dist/tools/powershell/simple/security/register-new-domain.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-new-role.js +16 -0
- package/dist/tools/powershell/simple/security/register-new-role.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-new-user.js +43 -0
- package/dist/tools/powershell/simple/security/register-new-user.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-protect-item.js +46 -0
- package/dist/tools/powershell/simple/security/register-protect-item.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-remove-domain.js +16 -0
- package/dist/tools/powershell/simple/security/register-remove-domain.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-remove-role.js +16 -0
- package/dist/tools/powershell/simple/security/register-remove-role.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-remove-rolemember.js +19 -0
- package/dist/tools/powershell/simple/security/register-remove-rolemember.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-remove-user.js +15 -0
- package/dist/tools/powershell/simple/security/register-remove-user.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-security-powershell.js +55 -0
- package/dist/tools/powershell/simple/security/register-security-powershell.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-set-user-password.js +29 -0
- package/dist/tools/powershell/simple/security/register-set-user-password.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-set-user.js +66 -0
- package/dist/tools/powershell/simple/security/register-set-user.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-test-account.js +21 -0
- package/dist/tools/powershell/simple/security/register-test-account.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-test-item-acl.js +59 -0
- package/dist/tools/powershell/simple/security/register-test-item-acl.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-unlock-item.js +52 -0
- package/dist/tools/powershell/simple/security/register-unlock-item.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-unlock-user.js +16 -0
- package/dist/tools/powershell/simple/security/register-unlock-user.js.map +1 -0
- package/dist/tools/powershell/simple/security/register-unprotect-item.js +46 -0
- package/dist/tools/powershell/simple/security/register-unprotect-item.js.map +1 -0
- package/dist/tools/powershell/utils.js +18 -0
- package/dist/tools/powershell/utils.js.map +1 -0
- package/package.json +18 -13
- package/dist/bundle.js +0 -52284
- package/dist/bundle.js.map +0 -1
package/README.md
CHANGED
package/dist/app.js
ADDED
package/dist/app.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,QAAQ,EAAE,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -131,9 +131,9 @@ export declare const envSchema: z.ZodObject<{
|
|
|
131
131
|
POWERSHELL_SERVER_URL?: string | undefined;
|
|
132
132
|
}>;
|
|
133
133
|
export declare const envStartSchema: z.ZodObject<{
|
|
134
|
-
TRANSPORT: z.ZodEffects<z.ZodOptional<z.ZodDefault<z.ZodString>>, "stdio" | "sse", string | undefined>;
|
|
134
|
+
TRANSPORT: z.ZodEffects<z.ZodOptional<z.ZodDefault<z.ZodString>>, "stdio" | "sse" | "streamable-http", string | undefined>;
|
|
135
135
|
}, "strip", z.ZodTypeAny, {
|
|
136
|
-
TRANSPORT: "stdio" | "sse";
|
|
136
|
+
TRANSPORT: "stdio" | "sse" | "streamable-http";
|
|
137
137
|
}, {
|
|
138
138
|
TRANSPORT?: string | undefined;
|
|
139
139
|
}>;
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const ConfigSchema = z.object({
|
|
3
|
+
name: z.string().default("mcp-sitecore-server"),
|
|
4
|
+
graphQL: z.object({
|
|
5
|
+
endpoint: z.string().url().min(1, "endpoint is required"),
|
|
6
|
+
schemas: z.array(z.string()),
|
|
7
|
+
apiKey: z.string(),
|
|
8
|
+
headers: z.record(z.string(), z.string()).optional(),
|
|
9
|
+
}).default({
|
|
10
|
+
endpoint: "https://xmcloudcm.localhost/sitecore/api/graph/",
|
|
11
|
+
schemas: ["edge", "master"],
|
|
12
|
+
apiKey: "{6D3F291E-66A5-4703-887A-D549AF83D859}",
|
|
13
|
+
headers: {},
|
|
14
|
+
}),
|
|
15
|
+
itemService: z.object({
|
|
16
|
+
domain: z.string(),
|
|
17
|
+
username: z.string(),
|
|
18
|
+
password: z.string(),
|
|
19
|
+
serverUrl: z.string().url(),
|
|
20
|
+
}).default({
|
|
21
|
+
domain: "sitecore",
|
|
22
|
+
username: "admin",
|
|
23
|
+
password: "b",
|
|
24
|
+
serverUrl: "https://xmcloudcm.localhost/",
|
|
25
|
+
}),
|
|
26
|
+
powershell: z.object({
|
|
27
|
+
domain: z.string(),
|
|
28
|
+
username: z.string(),
|
|
29
|
+
password: z.string(),
|
|
30
|
+
serverUrl: z.string().url(),
|
|
31
|
+
}).default({
|
|
32
|
+
domain: "sitecore",
|
|
33
|
+
username: "admin",
|
|
34
|
+
password: "b",
|
|
35
|
+
serverUrl: "https://xmcloudcm.localhost/",
|
|
36
|
+
}),
|
|
37
|
+
});
|
|
38
|
+
export const envSchema = z.object({
|
|
39
|
+
GRAPHQL_ENDPOINT: z.string().url().optional(),
|
|
40
|
+
GRAPHQL_SCHEMAS: z.string().optional(),
|
|
41
|
+
GRAPHQL_API_KEY: z.string().optional(),
|
|
42
|
+
GRAPHQL_HEADERS: z.string().optional(),
|
|
43
|
+
ITEM_SERVICE_DOMAIN: z.string().optional(),
|
|
44
|
+
ITEM_SERVICE_USERNAME: z.string().optional(),
|
|
45
|
+
ITEM_SERVICE_PASSWORD: z.string().optional(),
|
|
46
|
+
ITEM_SERVICE_SERVER_URL: z.string().url().optional(),
|
|
47
|
+
POWERSHELL_DOMAIN: z.string().optional(),
|
|
48
|
+
POWERSHELL_USERNAME: z.string().optional(),
|
|
49
|
+
POWERSHELL_PASSWORD: z.string().optional(),
|
|
50
|
+
POWERSHELL_SERVER_URL: z.string().url().optional(),
|
|
51
|
+
});
|
|
52
|
+
export const envStartSchema = z.object({
|
|
53
|
+
//* The transport to use for the server. Can be one of 'stdio' or 'sse'.
|
|
54
|
+
//* If not specified, the default is 'stdio'.
|
|
55
|
+
//* The 'stdio' transport is used for local work.
|
|
56
|
+
//* The 'streamable-http' transport is used for HTTP-based communication.
|
|
57
|
+
//* The 'sse' remains for legacy support.
|
|
58
|
+
TRANSPORT: z.string().default("stdio").optional().transform((val) => {
|
|
59
|
+
if (val?.toLowerCase() === "sse")
|
|
60
|
+
return "sse";
|
|
61
|
+
if (val?.toLowerCase() === "streamable-http")
|
|
62
|
+
return "streamable-http";
|
|
63
|
+
return "stdio";
|
|
64
|
+
})
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC;IAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC;QACzD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACvD,CAAC,CAAC,OAAO,CAAC;QACP,QAAQ,EAAE,iDAAiD;QAC3D,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC3B,MAAM,EAAE,wCAAwC;QAChD,OAAO,EAAE,EAAE;KACd,CAAC;IACF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;KAC9B,CAAC,CAAC,OAAO,CAAC;QACP,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE,GAAG;QACb,SAAS,EAAE,8BAA8B;KAC5C,CAAC;IACF,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;KAC9B,CAAC,CAAC,OAAO,CAAC;QACP,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE,GAAG;QACb,SAAS,EAAE,8BAA8B;KAC5C,CAAC;CACL,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC7C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5C,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5C,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACpD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACxC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,wEAAwE;IACxE,6CAA6C;IAC7C,iDAAiD;IACjD,yEAAyE;IACzE,yCAAyC;IACzC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;QAChE,IAAI,GAAG,EAAE,WAAW,EAAE,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QAC/C,IAAI,GAAG,EAAE,WAAW,EAAE,KAAK,iBAAiB;YAAE,OAAO,iBAAiB,CAAC;QACvE,OAAO,OAAO,CAAC;IACnB,CAAC,CAAC;CACL,CAAC,CAAC"}
|
package/dist/const.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../src/const.ts"],"names":[],"mappings":""}
|
package/dist/helper.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {} from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
export async function safeMcpResponse(exec) {
|
|
3
|
+
try {
|
|
4
|
+
return await exec;
|
|
5
|
+
}
|
|
6
|
+
catch (error) {
|
|
7
|
+
console.error('Error executing tool:', error);
|
|
8
|
+
return {
|
|
9
|
+
isError: true,
|
|
10
|
+
content: [
|
|
11
|
+
{
|
|
12
|
+
type: 'text',
|
|
13
|
+
text: `Error executing tool: ${error}`,
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,MAAM,oCAAoC,CAAC;AAEzE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAA6B;IAC/D,IAAI,CAAC;QACD,OAAO,MAAM,IAAI,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO;YACH,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,yBAAyB,KAAK,EAAE;iBACzC;aACJ;SACJ,CAAC;IACN,CAAC;AACL,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { envStartSchema } from './config.js';
|
|
3
|
+
import { startSTDIO } from './stdio.js';
|
|
4
|
+
import { startSSE } from './sse.js';
|
|
5
|
+
import { startStreamableHTTP } from './streamable-http.js';
|
|
6
|
+
const ENV = envStartSchema.parse(process.env);
|
|
7
|
+
if (ENV.TRANSPORT === "stdio") {
|
|
8
|
+
startSTDIO();
|
|
9
|
+
}
|
|
10
|
+
else if (ENV.TRANSPORT === "sse") {
|
|
11
|
+
console.warn("SSE transport is deprecated and will be removed in future versions. Please use 'streamable-http' or 'stdio' instead.");
|
|
12
|
+
startSSE();
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
startStreamableHTTP();
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAuB,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,GAAG,GAAmB,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAE9D,IAAG,GAAG,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;IAC3B,UAAU,EAAE,CAAC;AACjB,CAAC;KACI,IAAG,GAAG,CAAC,SAAS,KAAK,KAAK,EAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,sHAAsH,CAAC,CAAC;IACrI,QAAQ,EAAE,CAAC;AACf,CAAC;KACI,CAAC;IACF,mBAAmB,EAAE,CAAC;AAC1B,CAAC"}
|
package/dist/run.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/* File to test the other code */
|
|
2
|
+
import { PowershellClient } from './tools/powershell/client.js';
|
|
3
|
+
const client = new PowershellClient('https://xmcloudcm.localhost/', 'admin', 'b', 'sitecore');
|
|
4
|
+
const response = await client.executeScript('Get-Item -Path "master:/sitecore/content/Home"');
|
|
5
|
+
console.log(response);
|
|
6
|
+
console.log(response[0].text); // Assuming the response is an array of objects with a 'text' property
|
|
7
|
+
//# sourceMappingURL=run.js.map
|
package/dist/run.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,iCAAiC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAC/B,8BAA8B,EAC9B,OAAO,EACP,GAAG,EACH,UAAU,CACb,CAAC;AAEF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,aAAa,CACvC,gDAAgD,CAAE,CAAC;AAEvD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACtB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,sEAAsE"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
-
export declare function getServer(): McpServer
|
|
2
|
+
export declare function getServer(): Promise<McpServer>;
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { registerItemService } from "./tools/item-service/register-item-service.js";
|
|
3
|
+
import { envSchema } from "./config.js";
|
|
4
|
+
import { registerGraphQL } from "./tools/graphql/register-graphql.js";
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
import { registerPowerShell } from "./tools/powershell/register-powershell.js";
|
|
9
|
+
// Read package.json data
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dirname = path.dirname(__filename);
|
|
12
|
+
const packagePath = path.resolve(__dirname, '..', 'package.json');
|
|
13
|
+
const packageData = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
|
|
14
|
+
const { version, name } = packageData;
|
|
15
|
+
export async function getServer() {
|
|
16
|
+
const server = new McpServer({
|
|
17
|
+
name: `Sitecore MCP Server: ${name}`,
|
|
18
|
+
description: "Modle Context Protocol for Sitecore",
|
|
19
|
+
version: version
|
|
20
|
+
});
|
|
21
|
+
const ENV = envSchema.parse(process.env);
|
|
22
|
+
// Parse the environment variables and set default values
|
|
23
|
+
const config = {
|
|
24
|
+
name: `${name} ${version}`,
|
|
25
|
+
graphQL: {
|
|
26
|
+
endpoint: ENV.GRAPHQL_ENDPOINT || "https://xmcloudcm.localhost/sitecore/api/graph/",
|
|
27
|
+
schemas: ENV.GRAPHQL_SCHEMAS ? ENV.GRAPHQL_SCHEMAS.split(",").map(x => x.trim()) : ["edge", "master"],
|
|
28
|
+
apiKey: ENV.GRAPHQL_API_KEY || "{6D3F291E-66A5-4703-887A-D549AF83D859}",
|
|
29
|
+
headers: ENV.GRAPHQL_HEADERS ? JSON.parse(ENV.GRAPHQL_HEADERS) : {},
|
|
30
|
+
},
|
|
31
|
+
itemService: {
|
|
32
|
+
domain: ENV.ITEM_SERVICE_DOMAIN || "sitecore",
|
|
33
|
+
username: ENV.ITEM_SERVICE_USERNAME || "admin",
|
|
34
|
+
password: ENV.ITEM_SERVICE_PASSWORD || "b",
|
|
35
|
+
serverUrl: ENV.ITEM_SERVICE_SERVER_URL || "https://xmcloudcm.localhost/",
|
|
36
|
+
},
|
|
37
|
+
powershell: {
|
|
38
|
+
domain: ENV.POWERSHELL_DOMAIN || "sitecore",
|
|
39
|
+
username: ENV.POWERSHELL_USERNAME || "admin",
|
|
40
|
+
password: ENV.POWERSHELL_PASSWORD || "b",
|
|
41
|
+
serverUrl: ENV.POWERSHELL_SERVER_URL || "https://xmcloudcm.localhost/",
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
server.resource("config", "config://main", async (uri) => {
|
|
45
|
+
return {
|
|
46
|
+
contents: [{
|
|
47
|
+
uri: uri.href,
|
|
48
|
+
text: JSON.stringify(config, null, 2),
|
|
49
|
+
}]
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
server.tool("config", "Prints the configuration of the Sitecore MCP server.", {}, async (params) => {
|
|
53
|
+
return {
|
|
54
|
+
content: [
|
|
55
|
+
{
|
|
56
|
+
type: "text",
|
|
57
|
+
text: JSON.stringify(config, null, 2)
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
registerGraphQL(server, config);
|
|
63
|
+
registerItemService(server, config);
|
|
64
|
+
await registerPowerShell(server, config);
|
|
65
|
+
return server;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,SAAS,EAA+B,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E,yBAAyB;AACzB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAClE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;AACrE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,SAAS;IAC3B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QACzB,IAAI,EAAE,wBAAwB,IAAI,EAAE;QACpC,WAAW,EAAE,qCAAqC;QAClD,OAAO,EAAE,OAAO;KACnB,CAAC,CAAC;IAEH,MAAM,GAAG,GAAc,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEpD,yDAAyD;IACzD,MAAM,MAAM,GAAW;QACnB,IAAI,EAAE,GAAG,IAAI,IAAI,OAAO,EAAE;QAC1B,OAAO,EAAE;YACL,QAAQ,EAAE,GAAG,CAAC,gBAAgB,IAAI,iDAAiD;YACnF,OAAO,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC;YACrG,MAAM,EAAE,GAAG,CAAC,eAAe,IAAI,wCAAwC;YACvE,OAAO,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE;SACtE;QACD,WAAW,EAAE;YACT,MAAM,EAAE,GAAG,CAAC,mBAAmB,IAAI,UAAU;YAC7C,QAAQ,EAAE,GAAG,CAAC,qBAAqB,IAAI,OAAO;YAC9C,QAAQ,EAAE,GAAG,CAAC,qBAAqB,IAAI,GAAG;YAC1C,SAAS,EAAE,GAAG,CAAC,uBAAuB,IAAI,8BAA8B;SAC3E;QACD,UAAU,EAAE;YACR,MAAM,EAAE,GAAG,CAAC,iBAAiB,IAAI,UAAU;YAC3C,QAAQ,EAAE,GAAG,CAAC,mBAAmB,IAAI,OAAO;YAC5C,QAAQ,EAAE,GAAG,CAAC,mBAAmB,IAAI,GAAG;YACxC,SAAS,EAAE,GAAG,CAAC,qBAAqB,IAAI,8BAA8B;SACzE;KACJ,CAAC;IAEF,MAAM,CAAC,QAAQ,CACX,QAAQ,EACR,eAAe,EACf,KAAK,EAAE,GAAG,EAAE,EAAE;QACV,OAAO;YACH,QAAQ,EAAE,CAAC;oBACP,GAAG,EAAE,GAAG,CAAC,IAAI;oBACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iBACxC,CAAC;SACL,CAAA;IACL,CAAC,CACJ,CAAC;IAEF,MAAM,CAAC,IAAI,CACP,QAAQ,EACR,sDAAsD,EACtD,EAAE,EACF,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iBACxC;aACJ;SACJ,CAAC;IACN,CAAC,CACJ,CAAC;IAGF,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEpC,MAAM,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEzC,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
package/dist/sse.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function startSSE(): void
|
|
1
|
+
export declare function startSSE(): Promise<void>;
|
package/dist/sse.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
|
|
3
|
+
import express from "express";
|
|
4
|
+
import { getServer } from "./server.js";
|
|
5
|
+
export async function startSSE() {
|
|
6
|
+
const server = await getServer();
|
|
7
|
+
const app = express();
|
|
8
|
+
// to support multiple simultaneous connections we have a lookup object from
|
|
9
|
+
// sessionId to transport
|
|
10
|
+
const transports = {};
|
|
11
|
+
app.get("/sse", async (_, res) => {
|
|
12
|
+
const transport = new SSEServerTransport('/messages', res);
|
|
13
|
+
transports[transport.sessionId] = transport;
|
|
14
|
+
res.on("close", () => {
|
|
15
|
+
delete transports[transport.sessionId];
|
|
16
|
+
});
|
|
17
|
+
await server.connect(transport);
|
|
18
|
+
});
|
|
19
|
+
app.post("/messages", async (req, res) => {
|
|
20
|
+
const sessionId = req.query.sessionId;
|
|
21
|
+
const transport = transports[sessionId];
|
|
22
|
+
if (transport) {
|
|
23
|
+
await transport.handlePostMessage(req, res);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
res.status(400).send('No transport found for sessionId');
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
app.listen(3001);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=sse.js.map
|
package/dist/sse.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IAEjC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IAEtB,4EAA4E;IAC5E,yBAAyB;IACzB,MAAM,UAAU,GAAgD,EAAE,CAAC;IAEnE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAU,EAAE,GAAa,EAAE,EAAE;QAClD,MAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC3D,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;QAC5C,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,OAAO,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QAC1D,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,SAAmB,CAAC;QAChD,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACnB,CAAC"}
|
package/dist/stdio.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
2
|
+
import { getServer } from './server.js';
|
|
3
|
+
export async function startSTDIO() {
|
|
4
|
+
const server = await getServer();
|
|
5
|
+
const transport = new StdioServerTransport();
|
|
6
|
+
await server.connect(transport);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=stdio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../src/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,MAAM,CAAC,KAAK,UAAU,UAAU;IAC5B,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function startStreamableHTTP(): void;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import express from "express";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
4
|
+
import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
+
import { getServer } from "./server.js";
|
|
6
|
+
export function startStreamableHTTP() {
|
|
7
|
+
const app = express();
|
|
8
|
+
app.use(express.json());
|
|
9
|
+
// Map to store transports by session ID
|
|
10
|
+
const transports = {};
|
|
11
|
+
// Handle POST requests for client-to-server communication
|
|
12
|
+
app.post('/mcp', async (req, res) => {
|
|
13
|
+
// Check for existing session ID
|
|
14
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
15
|
+
let transport;
|
|
16
|
+
if (sessionId && transports[sessionId]) {
|
|
17
|
+
// Reuse existing transport
|
|
18
|
+
transport = transports[sessionId];
|
|
19
|
+
}
|
|
20
|
+
else if (!sessionId && isInitializeRequest(req.body)) {
|
|
21
|
+
// New initialization request
|
|
22
|
+
transport = new StreamableHTTPServerTransport({
|
|
23
|
+
sessionIdGenerator: () => randomUUID(),
|
|
24
|
+
onsessioninitialized: (sessionId) => {
|
|
25
|
+
// Store the transport by session ID
|
|
26
|
+
transports[sessionId] = transport;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
// Clean up transport when closed
|
|
30
|
+
transport.onclose = () => {
|
|
31
|
+
if (transport.sessionId) {
|
|
32
|
+
delete transports[transport.sessionId];
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const server = await getServer();
|
|
36
|
+
await server.connect(transport);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// Invalid request
|
|
40
|
+
res.status(400).json({
|
|
41
|
+
jsonrpc: '2.0',
|
|
42
|
+
error: {
|
|
43
|
+
code: -32000,
|
|
44
|
+
message: 'Bad Request: No valid session ID provided',
|
|
45
|
+
},
|
|
46
|
+
id: null,
|
|
47
|
+
});
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// Handle the request
|
|
51
|
+
await transport.handleRequest(req, res, req.body);
|
|
52
|
+
});
|
|
53
|
+
// Reusable handler for GET and DELETE requests
|
|
54
|
+
const handleSessionRequest = async (req, res) => {
|
|
55
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
56
|
+
if (!sessionId || !transports[sessionId]) {
|
|
57
|
+
res.status(400).send('Invalid or missing session ID');
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const transport = transports[sessionId];
|
|
61
|
+
await transport.handleRequest(req, res);
|
|
62
|
+
};
|
|
63
|
+
// Handle GET requests for server-to-client notifications via SSE
|
|
64
|
+
app.get('/mcp', handleSessionRequest);
|
|
65
|
+
// Handle DELETE requests for session termination
|
|
66
|
+
app.delete('/mcp', handleSessionRequest);
|
|
67
|
+
app.listen(3001);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=streamable-http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamable-http.js","sourceRoot":"","sources":["../src/streamable-http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import {} from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import { buildClientSchema, getIntrospectionQuery, printSchema } from "graphql";
|
|
3
|
+
import {} from "graphql";
|
|
4
|
+
import {} from "../../../config.js";
|
|
5
|
+
export async function introspection(conf, schemaName) {
|
|
6
|
+
const url = `${conf.graphQL.endpoint}/${schemaName}?sc_apikey=${conf.graphQL.apiKey}`;
|
|
7
|
+
const response = await fetch(url, {
|
|
8
|
+
method: 'POST',
|
|
9
|
+
headers: {
|
|
10
|
+
'Content-Type': 'application/json',
|
|
11
|
+
...conf.graphQL.headers,
|
|
12
|
+
},
|
|
13
|
+
body: JSON.stringify({
|
|
14
|
+
query: getIntrospectionQuery(),
|
|
15
|
+
}),
|
|
16
|
+
});
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
throw new Error(`GraphQL request failed: ${response.statusText}`);
|
|
19
|
+
}
|
|
20
|
+
const responseJson = await response.json();
|
|
21
|
+
// Transform to a schema object
|
|
22
|
+
const schema = buildClientSchema(responseJson.data);
|
|
23
|
+
// Print the schema SDL
|
|
24
|
+
return {
|
|
25
|
+
content: [
|
|
26
|
+
{
|
|
27
|
+
type: "text",
|
|
28
|
+
text: printSchema(schema),
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
isError: false,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=introspection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspection.js","sourceRoot":"","sources":["../../../../src/tools/graphql/generic/introspection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,EAA2B,MAAM,SAAS,CAAC;AAClD,OAAO,EAAe,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,UAAkB;IAEhE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,UAAU,cAAc,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAEtF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC9B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACL,cAAc,EAAE,kBAAkB;YAClC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;SAC1B;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACjB,KAAK,EAAE,qBAAqB,EAAE;SACjC,CAAC;KACL,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6C,CAAC;IACtF,+BAA+B;IAC/B,MAAM,MAAM,GAAG,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAEpD,uBAAuB;IACvB,OAAO;QACA,OAAO,EAAE;YACL;gBACI,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC;aAC5B;SACJ;QACD,OAAO,EAAE,KAAK;KACjB,CAAA;AACL,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import {} from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import { buildClientSchema, getIntrospectionQuery, printSchema } from "graphql";
|
|
3
|
+
import {} from "graphql";
|
|
4
|
+
import {} from "../../../config.js";
|
|
5
|
+
import { parse } from "graphql/language/index.js";
|
|
6
|
+
export async function query(conf, schemaName, query, variables) {
|
|
7
|
+
const url = `${conf.graphQL.endpoint}/${schemaName}?sc_apikey=${conf.graphQL.apiKey}`;
|
|
8
|
+
const parsedQuery = parse(query);
|
|
9
|
+
const response = await fetch(url, {
|
|
10
|
+
method: 'POST',
|
|
11
|
+
headers: {
|
|
12
|
+
'Content-Type': 'application/json',
|
|
13
|
+
...conf.graphQL.headers,
|
|
14
|
+
},
|
|
15
|
+
body: JSON.stringify({
|
|
16
|
+
query,
|
|
17
|
+
variables,
|
|
18
|
+
}),
|
|
19
|
+
});
|
|
20
|
+
if (!response.ok) {
|
|
21
|
+
throw new Error(`GraphQL request failed: ${response.statusText}`);
|
|
22
|
+
}
|
|
23
|
+
const responseJson = await response.json();
|
|
24
|
+
if (responseJson.errors && responseJson.errors.length > 0) {
|
|
25
|
+
throw new Error(`GraphQL query errors: ${JSON.stringify(responseJson.errors)}`);
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
content: [
|
|
29
|
+
{
|
|
30
|
+
type: "text",
|
|
31
|
+
text: responseJson.data ? JSON.stringify(responseJson.data, null, 2) : "No data returned",
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
isError: false,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../../src/tools/graphql/generic/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,EAA2B,MAAM,SAAS,CAAC;AAClD,OAAO,EAAe,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAY,EAAE,UAAiB,EAAE,KAAa,EAAE,SAAkB;IAC1F,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,UAAU,cAAc,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAEtF,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC9B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACL,cAAc,EAAE,kBAAkB;YAClC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;SAC1B;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACjB,KAAK;YACL,SAAS;SACZ,CAAC;KACL,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE3C,IAAI,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,OAAO;QACH,OAAO,EAAE;YACL;gBACI,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB;aAC5F;SACJ;QACD,OAAO,EAAE,KAAK;KACjB,CAAA;AACL,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { safeMcpResponse } from "../../helper.js";
|
|
2
|
+
import { introspection } from "./generic/introspection.js";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { query } from "./generic/query.js";
|
|
5
|
+
function registerIntrospectionTool(server, config, schema) {
|
|
6
|
+
server.tool(`introspection-graphql-${schema}`, `Introspection Sitecore GraphQL ${schema} schema, use this tool before doing a query to get the schema information if you do not have it available as a resource already.`, {}, () => {
|
|
7
|
+
return safeMcpResponse(introspection(config, schema));
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
function registerQueryTool(server, config, schema) {
|
|
11
|
+
server.tool(`query-graphql-${schema}`, `Query a Sitecore GraphQL ${schema} endpoint with the given query and variables.`, {
|
|
12
|
+
query: z.string(),
|
|
13
|
+
variables: z.string().optional(),
|
|
14
|
+
}, (params) => {
|
|
15
|
+
return safeMcpResponse(query(config, schema, params.query, params.variables));
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export function registerGraphQL(server, config) {
|
|
19
|
+
config.graphQL.schemas.forEach((schema) => {
|
|
20
|
+
registerIntrospectionTool(server, config, schema);
|
|
21
|
+
registerQueryTool(server, config, schema);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=register-graphql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-graphql.js","sourceRoot":"","sources":["../../../src/tools/graphql/register-graphql.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG3C,SAAS,yBAAyB,CAAC,MAAiB,EAAE,MAAc,EAAE,MAAc;IAChF,MAAM,CAAC,IAAI,CACP,yBAAyB,MAAM,EAAE,EACjC,kCAAkC,MAAM,kIAAkI,EAC1K,EAAE,EACF,GAAG,EAAE;QACD,OAAO,eAAe,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACzD,CAAC,CACJ,CAAA;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAiB,EAAE,MAAc,EAAE,MAAc;IACxE,MAAM,CAAC,IAAI,CACP,iBAAiB,MAAM,EAAE,EACzB,4BAA4B,MAAM,+CAA+C,EACjF;QACI,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACnC,EACD,CAAC,MAAM,EAAE,EAAE;QACP,OAAO,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;IACjF,CAAC,CACJ,CAAA;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,MAAc;IAC7D,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACtC,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAClD,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAA;AACN,CAAC"}
|