@antonytm/mcp-sitecore-server 0.8.4-bundle-uuid → 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.
Files changed (151) hide show
  1. package/README.md +1 -0
  2. package/dist/app.js +3 -0
  3. package/dist/app.js.map +1 -0
  4. package/dist/config.d.ts +2 -2
  5. package/dist/config.js +66 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/const.js +2 -0
  8. package/dist/const.js.map +1 -0
  9. package/dist/helper.js +19 -0
  10. package/dist/helper.js.map +1 -0
  11. package/dist/index.js +17 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/run.js +7 -0
  14. package/dist/run.js.map +1 -0
  15. package/dist/server.d.ts +1 -1
  16. package/dist/server.js +67 -0
  17. package/dist/server.js.map +1 -0
  18. package/dist/sse.d.ts +1 -1
  19. package/dist/sse.js +31 -0
  20. package/dist/sse.js.map +1 -0
  21. package/dist/stdio.js +8 -0
  22. package/dist/stdio.js.map +1 -0
  23. package/dist/streamable-http.d.ts +1 -0
  24. package/dist/streamable-http.js +69 -0
  25. package/dist/streamable-http.js.map +1 -0
  26. package/dist/tools/graphql/generic/introspection.js +34 -0
  27. package/dist/tools/graphql/generic/introspection.js.map +1 -0
  28. package/dist/tools/graphql/generic/query.js +37 -0
  29. package/dist/tools/graphql/generic/query.js.map +1 -0
  30. package/dist/tools/graphql/register-graphql.js +24 -0
  31. package/dist/tools/graphql/register-graphql.js.map +1 -0
  32. package/dist/tools/item-service/client.js +428 -0
  33. package/dist/tools/item-service/client.js.map +1 -0
  34. package/dist/tools/item-service/composite/get-item-descendants.js +30 -0
  35. package/dist/tools/item-service/composite/get-item-descendants.js.map +1 -0
  36. package/dist/tools/item-service/composite/get-languages.js +19 -0
  37. package/dist/tools/item-service/composite/get-languages.js.map +1 -0
  38. package/dist/tools/item-service/register-item-service.js +156 -0
  39. package/dist/tools/item-service/register-item-service.js.map +1 -0
  40. package/dist/tools/item-service/simple/create-item.js +17 -0
  41. package/dist/tools/item-service/simple/create-item.js.map +1 -0
  42. package/dist/tools/item-service/simple/delete-item.js +23 -0
  43. package/dist/tools/item-service/simple/delete-item.js.map +1 -0
  44. package/dist/tools/item-service/simple/edit-item.js +23 -0
  45. package/dist/tools/item-service/simple/edit-item.js.map +1 -0
  46. package/dist/tools/item-service/simple/get-item-by-path.js +17 -0
  47. package/dist/tools/item-service/simple/get-item-by-path.js.map +1 -0
  48. package/dist/tools/item-service/simple/get-item-children.js +17 -0
  49. package/dist/tools/item-service/simple/get-item-children.js.map +1 -0
  50. package/dist/tools/item-service/simple/get-item.js +18 -0
  51. package/dist/tools/item-service/simple/get-item.js.map +1 -0
  52. package/dist/tools/item-service/simple/run-stored-query.js +24 -0
  53. package/dist/tools/item-service/simple/run-stored-query.js.map +1 -0
  54. package/dist/tools/item-service/simple/run-stored-search.js +24 -0
  55. package/dist/tools/item-service/simple/run-stored-search.js.map +1 -0
  56. package/dist/tools/item-service/simple/search-items.js +17 -0
  57. package/dist/tools/item-service/simple/search-items.js.map +1 -0
  58. package/dist/tools/powershell/client.js +58 -0
  59. package/dist/tools/powershell/client.js.map +1 -0
  60. package/dist/tools/powershell/composite/register-composite-powershell.js +5 -0
  61. package/dist/tools/powershell/composite/register-composite-powershell.js.map +1 -0
  62. package/dist/tools/powershell/composite/security/register-security-powershell.js +5 -0
  63. package/dist/tools/powershell/composite/security/register-security-powershell.js.map +1 -0
  64. package/dist/tools/powershell/composite/security/register-set-item-acl.js +59 -0
  65. package/dist/tools/powershell/composite/security/register-set-item-acl.js.map +1 -0
  66. package/dist/tools/powershell/output.js +8 -0
  67. package/dist/tools/powershell/output.js.map +1 -0
  68. package/dist/tools/powershell/register-powershell.d.ts +1 -1
  69. package/dist/tools/powershell/register-powershell.js +7 -0
  70. package/dist/tools/powershell/register-powershell.js.map +1 -0
  71. package/dist/tools/powershell/simple/generic.js +27 -0
  72. package/dist/tools/powershell/simple/generic.js.map +1 -0
  73. package/dist/tools/powershell/simple/indexing/register-find-item.d.ts +3 -0
  74. package/dist/tools/powershell/simple/indexing/register-find-item.js +129 -0
  75. package/dist/tools/powershell/simple/indexing/register-find-item.js.map +1 -0
  76. package/dist/tools/powershell/simple/indexing/register-get-search-index.js +28 -0
  77. package/dist/tools/powershell/simple/indexing/register-get-search-index.js.map +1 -0
  78. package/dist/tools/powershell/simple/indexing/register-indexing-powershell.d.ts +1 -1
  79. package/dist/tools/powershell/simple/indexing/register-indexing-powershell.js +9 -0
  80. package/dist/tools/powershell/simple/indexing/register-indexing-powershell.js.map +1 -0
  81. package/dist/tools/powershell/simple/indexing/register-initialize-search-index.js +24 -0
  82. package/dist/tools/powershell/simple/indexing/register-initialize-search-index.js.map +1 -0
  83. package/dist/tools/powershell/simple/provider/register-get-item.js +118 -0
  84. package/dist/tools/powershell/simple/provider/register-get-item.js.map +1 -0
  85. package/dist/tools/powershell/simple/provider/register-provider-powershell.js +5 -0
  86. package/dist/tools/powershell/simple/provider/register-provider-powershell.js.map +1 -0
  87. package/dist/tools/powershell/simple/register-simple-powershell.d.ts +1 -1
  88. package/dist/tools/powershell/simple/register-simple-powershell.js +9 -0
  89. package/dist/tools/powershell/simple/register-simple-powershell.js.map +1 -0
  90. package/dist/tools/powershell/simple/security/access-rights.js +33 -0
  91. package/dist/tools/powershell/simple/security/access-rights.js.map +1 -0
  92. package/dist/tools/powershell/simple/security/register-add-item-acl.js +66 -0
  93. package/dist/tools/powershell/simple/security/register-add-item-acl.js.map +1 -0
  94. package/dist/tools/powershell/simple/security/register-add-role-member.js +19 -0
  95. package/dist/tools/powershell/simple/security/register-add-role-member.js.map +1 -0
  96. package/dist/tools/powershell/simple/security/register-clear-item-acl.js +46 -0
  97. package/dist/tools/powershell/simple/security/register-clear-item-acl.js.map +1 -0
  98. package/dist/tools/powershell/simple/security/register-disable-user.js +15 -0
  99. package/dist/tools/powershell/simple/security/register-disable-user.js.map +1 -0
  100. package/dist/tools/powershell/simple/security/register-enable-user.js +15 -0
  101. package/dist/tools/powershell/simple/security/register-enable-user.js.map +1 -0
  102. package/dist/tools/powershell/simple/security/register-get-domain.js +20 -0
  103. package/dist/tools/powershell/simple/security/register-get-domain.js.map +1 -0
  104. package/dist/tools/powershell/simple/security/register-get-item-acl.js +56 -0
  105. package/dist/tools/powershell/simple/security/register-get-item-acl.js.map +1 -0
  106. package/dist/tools/powershell/simple/security/register-get-role-member.js +31 -0
  107. package/dist/tools/powershell/simple/security/register-get-role-member.js.map +1 -0
  108. package/dist/tools/powershell/simple/security/register-get-role.js +24 -0
  109. package/dist/tools/powershell/simple/security/register-get-role.js.map +1 -0
  110. package/dist/tools/powershell/simple/security/register-get-user.js +31 -0
  111. package/dist/tools/powershell/simple/security/register-get-user.js.map +1 -0
  112. package/dist/tools/powershell/simple/security/register-lock-item.js +56 -0
  113. package/dist/tools/powershell/simple/security/register-lock-item.js.map +1 -0
  114. package/dist/tools/powershell/simple/security/register-new-domain.js +15 -0
  115. package/dist/tools/powershell/simple/security/register-new-domain.js.map +1 -0
  116. package/dist/tools/powershell/simple/security/register-new-role.js +16 -0
  117. package/dist/tools/powershell/simple/security/register-new-role.js.map +1 -0
  118. package/dist/tools/powershell/simple/security/register-new-user.js +43 -0
  119. package/dist/tools/powershell/simple/security/register-new-user.js.map +1 -0
  120. package/dist/tools/powershell/simple/security/register-protect-item.js +46 -0
  121. package/dist/tools/powershell/simple/security/register-protect-item.js.map +1 -0
  122. package/dist/tools/powershell/simple/security/register-remove-domain.js +16 -0
  123. package/dist/tools/powershell/simple/security/register-remove-domain.js.map +1 -0
  124. package/dist/tools/powershell/simple/security/register-remove-role.js +16 -0
  125. package/dist/tools/powershell/simple/security/register-remove-role.js.map +1 -0
  126. package/dist/tools/powershell/simple/security/register-remove-rolemember.js +19 -0
  127. package/dist/tools/powershell/simple/security/register-remove-rolemember.js.map +1 -0
  128. package/dist/tools/powershell/simple/security/register-remove-user.js +15 -0
  129. package/dist/tools/powershell/simple/security/register-remove-user.js.map +1 -0
  130. package/dist/tools/powershell/simple/security/register-security-powershell.js +55 -0
  131. package/dist/tools/powershell/simple/security/register-security-powershell.js.map +1 -0
  132. package/dist/tools/powershell/simple/security/register-set-user-password.js +29 -0
  133. package/dist/tools/powershell/simple/security/register-set-user-password.js.map +1 -0
  134. package/dist/tools/powershell/simple/security/register-set-user.js +66 -0
  135. package/dist/tools/powershell/simple/security/register-set-user.js.map +1 -0
  136. package/dist/tools/powershell/simple/security/register-test-account.js +21 -0
  137. package/dist/tools/powershell/simple/security/register-test-account.js.map +1 -0
  138. package/dist/tools/powershell/simple/security/register-test-item-acl.js +59 -0
  139. package/dist/tools/powershell/simple/security/register-test-item-acl.js.map +1 -0
  140. package/dist/tools/powershell/simple/security/register-unlock-item.js +52 -0
  141. package/dist/tools/powershell/simple/security/register-unlock-item.js.map +1 -0
  142. package/dist/tools/powershell/simple/security/register-unlock-user.js +16 -0
  143. package/dist/tools/powershell/simple/security/register-unlock-user.js.map +1 -0
  144. package/dist/tools/powershell/simple/security/register-unprotect-item.js +46 -0
  145. package/dist/tools/powershell/simple/security/register-unprotect-item.js.map +1 -0
  146. package/dist/tools/powershell/utils.d.ts +0 -1
  147. package/dist/tools/powershell/utils.js +18 -0
  148. package/dist/tools/powershell/utils.js.map +1 -0
  149. package/package.json +18 -13
  150. package/dist/bundle.js +0 -52312
  151. package/dist/bundle.js.map +0 -1
package/README.md CHANGED
@@ -76,6 +76,7 @@
76
76
  - [x] Indexing
77
77
  - [x] `indexing-initialize-search-index`: initializes one or more search indexes
78
78
  - [x] `indexing-get-search-index`: returns a search index
79
+ - [x] `indexing-find-item`: finds an item in a search index
79
80
 
80
81
  - [ ] Sitecore CLI
81
82
 
package/dist/app.js ADDED
@@ -0,0 +1,3 @@
1
+ import { startSSE } from "./sse.js";
2
+ startSSE();
3
+ //# sourceMappingURL=app.js.map
@@ -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":"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"}
package/dist/const.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=const.js.map
@@ -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
@@ -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":"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"}
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
@@ -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"}