@antonytm/mcp-sitecore-server 0.15.1 → 0.17.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 (24) hide show
  1. package/README.md +8 -1
  2. package/dist/bundle.js +218 -6
  3. package/dist/register.js +14 -0
  4. package/dist/register.js.map +1 -1
  5. package/dist/tools/powershell/composite/logging/get-logs.d.ts +3 -0
  6. package/dist/tools/powershell/composite/logging/get-logs.js +59 -0
  7. package/dist/tools/powershell/composite/logging/get-logs.js.map +1 -0
  8. package/dist/tools/powershell/composite/logging/utils.d.ts +13 -0
  9. package/dist/tools/powershell/composite/logging/utils.js +63 -0
  10. package/dist/tools/powershell/composite/logging/utils.js.map +1 -0
  11. package/dist/tools/powershell/composite/presentation/set-layout-by-id.d.ts +3 -0
  12. package/dist/tools/powershell/composite/presentation/set-layout-by-id.js +24 -0
  13. package/dist/tools/powershell/composite/presentation/set-layout-by-id.js.map +1 -0
  14. package/dist/tools/powershell/composite/presentation/set-layout-by-path.d.ts +3 -0
  15. package/dist/tools/powershell/composite/presentation/set-layout-by-path.js +23 -0
  16. package/dist/tools/powershell/composite/presentation/set-layout-by-path.js.map +1 -0
  17. package/dist/tools/powershell/simple/indexing/get-search-index.js +3 -3
  18. package/dist/tools/powershell/simple/presentation/get-layout-by-id.d.ts +3 -0
  19. package/dist/tools/powershell/simple/presentation/get-layout-by-id.js +28 -0
  20. package/dist/tools/powershell/simple/presentation/get-layout-by-id.js.map +1 -0
  21. package/dist/tools/powershell/simple/presentation/get-layout-by-path.d.ts +3 -0
  22. package/dist/tools/powershell/simple/presentation/get-layout-by-path.js +27 -0
  23. package/dist/tools/powershell/simple/presentation/get-layout-by-path.js.map +1 -0
  24. package/package.json +1 -1
package/README.md CHANGED
@@ -72,7 +72,12 @@
72
72
  - [x] `provider-get-item-by-id`: returns an item by ID
73
73
  - [x] `provider-get-item-by-path`: returns an item by path
74
74
  - [x] `provider-get-item-by-query`: returns an item by query
75
- - [x] `provider-get-item-by-path`: returns an item by path
75
+ - [x] `provider-get-item-by-path`: returns an item by path
76
+ - [x] Presentation
77
+ - [x] `presentation-get-layout-by-id`: returns item presentation layout by ID
78
+ - [x] `presentation-get-layout-by-path`: returns item presentation layout by path
79
+ - [x] `presentation-set-layout-by-id`: sets item presentation layout by ID
80
+ - [x] `presentation-set-layout-by-path`: sets item presentation layout by path
76
81
  - [x] Indexing
77
82
  - [x] `indexing-initialize-search-index`: initializes one or more search indexes
78
83
  - [x] `indexing-get-search-index`: returns a search index
@@ -94,6 +99,8 @@
94
99
  - [x] `common-get-item-reference-by-path`: returns item references (where it is used) for a Sitecore item by path
95
100
  - [x] `common-get-item-referrer-by-id`: returns items referring to a Sitecore item by ID (which items reference it)
96
101
  - [x] `common-get-item-referrer-by-path`: returns items referring to a Sitecore item by path (which items reference it)
102
+ - [x] Logging
103
+ - [x] `logging-get-logs`: retrieves Sitecore logs from the log directory with filtering options
97
104
 
98
105
  - [ ] Sitecore CLI
99
106
 
package/dist/bundle.js CHANGED
@@ -22805,7 +22805,7 @@ function readDocType(xmlData, i){
22805
22805
  const {index} = readNotationExp(xmlData,i+1);
22806
22806
  i = index;
22807
22807
  }else if( hasSeq(xmlData, "!--",i) ) comment = true;
22808
- else throw new Error("Invalid DOCTYPE");
22808
+ else throw new Error(`Invalid DOCTYPE`);
22809
22809
 
22810
22810
  angleBracketsCount++;
22811
22811
  exp = "";
@@ -22978,8 +22978,8 @@ function readElementExp(xmlData, i) {
22978
22978
  i = skipWhitespace(xmlData, i);
22979
22979
  let contentModel = "";
22980
22980
  // Expect '(' to start content model
22981
- if(xmlData[i] === "E" && hasSeq(xmlData, "MPTY",i)) i+=6;
22982
- else if(xmlData[i] === "A" && hasSeq(xmlData, "NY",i)) i+=4;
22981
+ if(xmlData[i] === "E" && hasSeq(xmlData, "MPTY",i)) i+=4;
22982
+ else if(xmlData[i] === "A" && hasSeq(xmlData, "NY",i)) i+=2;
22983
22983
  else if (xmlData[i] === "(") {
22984
22984
  i++; // Move past '('
22985
22985
 
@@ -25116,9 +25116,9 @@ function initializeSearchIndexPowerShellTool(server, config) {
25116
25116
  function getSearchIndexPowerShellTool(server, config) {
25117
25117
  server.tool("indexing-get-search-index", "Get information about Sitecore search indexes. Can filter by name, database, running status, or corrupted status.", {
25118
25118
  name: stringType().optional().describe("The name of the index to retrieve information for. Supports wildcards."),
25119
- database: stringType().optional().describe("Filter indices by database name."),
25120
- running: booleanType().optional().describe("Filter to show only running indices."),
25121
- corrupted: booleanType().optional().describe("Filter to show only corrupted indices."),
25119
+ database: stringType().optional().describe("Filter indexes by database name."),
25120
+ running: booleanType().optional().describe("Filter to show only running indexes."),
25121
+ corrupted: booleanType().optional().describe("Filter to show only corrupted indexes."),
25122
25122
  }, async (params) => {
25123
25123
  const command = `Get-SearchIndex`;
25124
25124
  const options = {};
@@ -25784,6 +25784,209 @@ function getItemReferrerByPathPowerShellTool(server, config) {
25784
25784
  });
25785
25785
  }
25786
25786
 
25787
+ function getLayoutByIdPowershellTool(server, config) {
25788
+ server.tool("presentation-get-layout-by-id", "Gets item layout by Id.", {
25789
+ id: stringType().describe("The ID of the item to retrieve layout for."),
25790
+ finalLayout: booleanType()
25791
+ .optional()
25792
+ .describe("Specifies layout to be retrieved. If 'true', the final layout is retrieved, otherwise - shared layout."),
25793
+ language: stringType()
25794
+ .optional()
25795
+ .describe("Specifies the item language to retrieve layout."),
25796
+ }, async (params) => {
25797
+ const command = `Get-Layout`;
25798
+ const options = {};
25799
+ options["Id"] = params.id;
25800
+ if (params.finalLayout === true) {
25801
+ options["FinalLayout"] = "";
25802
+ }
25803
+ if (params.language) {
25804
+ options["Language"] = params.language;
25805
+ }
25806
+ return safeMcpResponse(runGenericPowershellCommand(config, command, options));
25807
+ });
25808
+ }
25809
+
25810
+ function getLayoutByPathPowershellTool(server, config) {
25811
+ server.tool("presentation-get-layout-by-path", "Gets item layout by path.", {
25812
+ path: stringType().describe("The path of the item to retrieve layout for.").default("master:"),
25813
+ finalLayout: booleanType()
25814
+ .optional()
25815
+ .describe("Specifies layout to be retrieved. If 'true', the final layout is retrieved, otherwise - shared layout."),
25816
+ language: stringType()
25817
+ .optional()
25818
+ .describe("Specifies the item language to retrieve layout."),
25819
+ }, async (params) => {
25820
+ const command = `Get-Layout`;
25821
+ const options = {};
25822
+ options["Path"] = params.path;
25823
+ if (params.finalLayout === true) {
25824
+ options["FinalLayout"] = "";
25825
+ }
25826
+ if (params.language) {
25827
+ options["Language"] = params.language;
25828
+ }
25829
+ return safeMcpResponse(runGenericPowershellCommand(config, command, options));
25830
+ });
25831
+ }
25832
+
25833
+ function setLayoutIdPowershellTool(server, config) {
25834
+ server.tool("presentation-set-layout-by-id", "Sets layout for an item specified by Id.", {
25835
+ itemId: stringType().describe("The Id of the item to set the layout for."),
25836
+ layoutPath: stringType().describe("The path of the layout.").default("master:"),
25837
+ layoutId: stringType().describe("The ID of the layout to set for the item."),
25838
+ language: stringType().describe("The language of the item to set layout for.").optional(),
25839
+ finalLayout: booleanType()
25840
+ .describe("Specifies layout to be updated. If 'true', the final layout is set, otherwise - shared layout.")
25841
+ .optional(),
25842
+ }, async (params) => {
25843
+ const command = `
25844
+ $layout = Get-Item -Path ${params.layoutPath} -Id ${params.layoutId};
25845
+ $device = Get-LayoutDevice -Default;
25846
+ Set-Layout -Id ${params.itemId} -Layout $layout -Device $device ${params.language ? `-Language ${params.language}` : ""}
25847
+ ${params.finalLayout ? "-FinalLayout" : ""};
25848
+ `.replaceAll(/[\n]+/g, "");
25849
+ return safeMcpResponse(runGenericPowershellCommand(config, command, {}));
25850
+ });
25851
+ }
25852
+
25853
+ function setLayoutByPathPowershellTool(server, config) {
25854
+ server.tool("presentation-set-layout-by-path", "Sets layout for an item specified by path.", {
25855
+ itemId: stringType().describe("The Id of the item to set the layout for."),
25856
+ layoutPath: stringType().describe("The path of the layout.").default("master:"),
25857
+ language: stringType().describe("The language of the item to set layout for.").optional(),
25858
+ finalLayout: booleanType()
25859
+ .describe("Specifies layout to be updated. If 'true', the final layout is set, otherwise - shared layout.")
25860
+ .optional(),
25861
+ }, async (params) => {
25862
+ const command = `
25863
+ $layout = Get-Item -Path '${params.layoutPath}';
25864
+ $device = Get-LayoutDevice -Default;
25865
+ Set-Layout -Id ${params.itemId} -Layout $layout -Device $device ${params.language ? `-Language ${params.language}` : ""}
25866
+ ${params.finalLayout ? "-FinalLayout" : ""};
25867
+ `.replaceAll(/[\n]+/g, "");
25868
+ return safeMcpResponse(runGenericPowershellCommand(config, command, {}));
25869
+ });
25870
+ }
25871
+
25872
+ var LogLevel;
25873
+ (function (LogLevel) {
25874
+ LogLevel["DEBUG"] = "DEBUG";
25875
+ LogLevel["INFO"] = "INFO";
25876
+ LogLevel["WARN"] = "WARN";
25877
+ LogLevel["ERROR"] = "ERROR";
25878
+ LogLevel["FATAL"] = "FATAL";
25879
+ })(LogLevel || (LogLevel = {}));
25880
+ function filterByLogLevel(logs, level) {
25881
+ const logsArray = (logs.Obj || []).map((log) => {
25882
+ return log.undefined;
25883
+ });
25884
+ const filteredLogs = logsArray.reduce((acc, log) => {
25885
+ // Skip empty lines
25886
+ if (log === undefined || log.trim() === "") {
25887
+ return acc;
25888
+ }
25889
+ const match1 = log.match(/^(ManagedPoolThread #\d+|[0-9]+) (\d{2} \w{3} \d{4} \d{2}:\d{2}:\d{2}) (\w+) (.*)$/);
25890
+ const match2 = log.match(/^(\d+|[0-9]+) (\d{2} \w{3} \d{4} \d{2}:\d{2}:\d{2}) (\w+) (.*)$/);
25891
+ if (!match1 && !match2) {
25892
+ // It is the line that continues the previous log entry
25893
+ if (acc.length > 0) {
25894
+ acc[acc.length - 1].message += ` \r\n${log.trim()}`;
25895
+ }
25896
+ }
25897
+ else {
25898
+ if (match1) {
25899
+ const [_, __, timestamp, level, message] = match1;
25900
+ acc.push({ timestamp, level: level, message });
25901
+ }
25902
+ else if (match2) {
25903
+ const [_, __, timestamp, level, message] = match2;
25904
+ acc.push({ timestamp, level: level, message });
25905
+ }
25906
+ }
25907
+ return acc;
25908
+ }, []);
25909
+ return filteredLogs.filter((log) => {
25910
+ switch (level) {
25911
+ case LogLevel.DEBUG:
25912
+ return log.level === LogLevel.DEBUG
25913
+ || log.level === LogLevel.INFO
25914
+ || log.level === LogLevel.WARN
25915
+ || log.level === LogLevel.ERROR
25916
+ || log.level === LogLevel.FATAL;
25917
+ case LogLevel.INFO:
25918
+ return log.level === LogLevel.INFO
25919
+ || log.level === LogLevel.WARN
25920
+ || log.level === LogLevel.ERROR
25921
+ || log.level === LogLevel.FATAL;
25922
+ case LogLevel.WARN:
25923
+ return log.level === LogLevel.WARN
25924
+ || log.level === LogLevel.ERROR
25925
+ || log.level === LogLevel.FATAL;
25926
+ case LogLevel.ERROR:
25927
+ return log.level === LogLevel.ERROR
25928
+ || log.level === LogLevel.FATAL;
25929
+ case LogLevel.FATAL:
25930
+ return log.level === LogLevel.FATAL;
25931
+ }
25932
+ });
25933
+ }
25934
+
25935
+ const logFilePrefixes = [
25936
+ "log",
25937
+ "Crawiling.log",
25938
+ "Search.log",
25939
+ "SPE.log",
25940
+ "Client.log",
25941
+ "OWin.log",
25942
+ "Publising.log",
25943
+ ];
25944
+ function formatDate(date) {
25945
+ const d = date ? new Date(date) : new Date();
25946
+ let month = '' + (d.getMonth() + 1), day = '' + d.getDate(), year = d.getFullYear();
25947
+ if (month.length < 2) {
25948
+ month = '0' + month;
25949
+ }
25950
+ if (day.length < 2) {
25951
+ day = '0' + day;
25952
+ }
25953
+ return [year, month, day].join("");
25954
+ }
25955
+ function getLogsPowerShellTool(server, config) {
25956
+ server.tool(`logging-get-logs`, `Retrieves Sitecore logs from the log directory.`, {
25957
+ name: stringType()
25958
+ .default("log")
25959
+ .optional()
25960
+ .describe(`The name of the log file to retrieve. If not provided, defaults to log.*. Possible options: ${logFilePrefixes.join(", ")}.`),
25961
+ level: enumType(Object.values(LogLevel))
25962
+ .default(LogLevel.DEBUG)
25963
+ .optional(),
25964
+ date: stringType()
25965
+ .optional()
25966
+ .describe(`The date of the log file to retrieve. If not provided, defaults to today. Date format should be in ISO 8601 format (e.g., '2023-10-01T00:00:00Z'`),
25967
+ tail: numberType()
25968
+ .default(500)
25969
+ .optional()
25970
+ .describe("The number of lines to retrieve from the end of the log file. Defaults to 500."),
25971
+ }, async (params) => {
25972
+ const stringDate = formatDate(params.date);
25973
+ const command = `Get-ChildItem -Path $SitecoreDataFolder/logs/${params.name}*${stringDate}*.* | Sort LastWriteTime | Get-Content -Tail ${params.tail} `;
25974
+ return safeMcpResponse((async () => {
25975
+ const json = await runGenericPowershellCommand(config, command, {});
25976
+ const filteredLogs = filterByLogLevel(JSON.parse(json.content[0].text), LogLevel[params.level] || LogLevel.DEBUG);
25977
+ return {
25978
+ content: [
25979
+ {
25980
+ type: "text",
25981
+ text: JSON.stringify(filteredLogs, null, 2),
25982
+ },
25983
+ ],
25984
+ isError: false,
25985
+ };
25986
+ })());
25987
+ });
25988
+ }
25989
+
25787
25990
  async function register(array, server, config) {
25788
25991
  for (const register of array) {
25789
25992
  await register(server, config);
@@ -25855,6 +26058,15 @@ async function registerAll(server, config) {
25855
26058
  getItemReferenceByPathPowerShellTool,
25856
26059
  getItemReferrerByIdPowerShellTool,
25857
26060
  getItemReferrerByPathPowerShellTool,
26061
+ //Layout
26062
+ //Simple Layout PowerShell Tools
26063
+ getLayoutByIdPowershellTool,
26064
+ getLayoutByPathPowershellTool,
26065
+ //Composite Layout PowerShell Tools
26066
+ setLayoutIdPowershellTool,
26067
+ setLayoutByPathPowershellTool,
26068
+ //Logging
26069
+ getLogsPowerShellTool,
25858
26070
  //Provider
25859
26071
  getItemPowerShellTool,
25860
26072
  //Indexing PowerShell Tools
package/dist/register.js CHANGED
@@ -64,6 +64,11 @@ import { getItemReferenceByIdPowerShellTool } from "./tools/powershell/simple/co
64
64
  import { getItemReferenceByPathPowerShellTool } from "./tools/powershell/simple/common/get-item-reference-by-path.js";
65
65
  import { getItemReferrerByIdPowerShellTool } from "./tools/powershell/simple/common/get-item-referrer-by-id.js";
66
66
  import { getItemReferrerByPathPowerShellTool } from "./tools/powershell/simple/common/get-item-referrer-by-path.js";
67
+ import { getLayoutByIdPowershellTool } from "./tools/powershell/simple/presentation/get-layout-by-id.js";
68
+ import { getLayoutByPathPowershellTool } from "./tools/powershell/simple/presentation/get-layout-by-path.js";
69
+ import { setLayoutIdPowershellTool } from "./tools/powershell/composite/presentation/set-layout-by-id.js";
70
+ import { setLayoutByPathPowershellTool } from "./tools/powershell/composite/presentation/set-layout-by-path.js";
71
+ import { getLogsPowerShellTool } from "./tools/powershell/composite/logging/get-logs.js";
67
72
  export async function register(array, server, config) {
68
73
  for (const register of array) {
69
74
  await register(server, config);
@@ -135,6 +140,15 @@ export async function registerAll(server, config) {
135
140
  getItemReferenceByPathPowerShellTool,
136
141
  getItemReferrerByIdPowerShellTool,
137
142
  getItemReferrerByPathPowerShellTool,
143
+ //Layout
144
+ //Simple Layout PowerShell Tools
145
+ getLayoutByIdPowershellTool,
146
+ getLayoutByPathPowershellTool,
147
+ //Composite Layout PowerShell Tools
148
+ setLayoutIdPowershellTool,
149
+ setLayoutByPathPowershellTool,
150
+ //Logging
151
+ getLogsPowerShellTool,
138
152
  //Provider
139
153
  getItemPowerShellTool,
140
154
  //Indexing PowerShell Tools
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wDAAwD,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,wDAAwD,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,8DAA8D,CAAC;AACtG,OAAO,EAAE,gBAAgB,EAAE,MAAM,uDAAuD,CAAC;AACzF,OAAO,EAAE,+BAA+B,EAAE,MAAM,4DAA4D,CAAC;AAC7G,OAAO,EAAE,4BAA4B,EAAE,MAAM,wDAAwD,CAAC;AACtG,OAAO,EAAE,6BAA6B,EAAE,MAAM,0DAA0D,CAAC;AACzG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,6BAA6B,EAAE,MAAM,yDAAyD,CAAC;AACxG,OAAO,EAAE,+BAA+B,EAAE,MAAM,4DAA4D,CAAC;AAC7G,OAAO,EAAE,6BAA6B,EAAE,MAAM,0DAA0D,CAAC;AACzG,OAAO,EAAE,2BAA2B,EAAE,MAAM,uDAAuD,CAAC;AACpG,OAAO,EAAE,2BAA2B,EAAE,MAAM,uDAAuD,CAAC;AACpG,OAAO,EAAE,8BAA8B,EAAE,MAAM,0DAA0D,CAAC;AAC1G,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,+BAA+B,EAAE,MAAM,4DAA4D,CAAC;AAC7G,OAAO,EAAE,6BAA6B,EAAE,MAAM,0DAA0D,CAAC;AACzG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAC3F,OAAO,EAAE,0BAA0B,EAAE,MAAM,qDAAqD,CAAC;AACjG,OAAO,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAC9F,OAAO,EAAE,yBAAyB,EAAE,MAAM,qDAAqD,CAAC;AAChG,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAC9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,sDAAsD,CAAC;AAClG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,mCAAmC,EAAE,MAAM,+DAA+D,CAAC;AACpH,OAAO,EAAE,4BAA4B,EAAE,MAAM,wDAAwD,CAAC;AACtG,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AACzF,OAAO,EAAE,+BAA+B,EAAE,MAAM,2DAA2D,CAAC;AAC5G,OAAO,EAAE,gCAAgC,EAAE,MAAM,4DAA4D,CAAC;AAC9G,OAAO,EAAE,6BAA6B,EAAE,MAAM,yDAAyD,CAAC;AACxG,OAAO,EAAE,4BAA4B,EAAE,MAAM,6DAA6D,CAAC;AAC3G,OAAO,EAAE,8BAA8B,EAAE,MAAM,+DAA+D,CAAC;AAC/G,OAAO,EAAE,8CAA8C,EAAE,MAAM,mFAAmF,CAAC;AACnJ,OAAO,EAAE,gDAAgD,EAAE,MAAM,qFAAqF,CAAC;AACvJ,OAAO,EAAE,uCAAuC,EAAE,MAAM,yEAAyE,CAAC;AAClI,OAAO,EAAE,yCAAyC,EAAE,MAAM,2EAA2E,CAAC;AACtI,OAAO,EAAE,0BAA0B,EAAE,MAAM,uDAAuD,CAAC;AACnG,OAAO,EAAE,4BAA4B,EAAE,MAAM,yDAAyD,CAAC;AACvG,OAAO,EAAE,+BAA+B,EAAE,MAAM,4DAA4D,CAAC;AAC7G,OAAO,EAAE,iCAAiC,EAAE,MAAM,8DAA8D,CAAC;AACjH,OAAO,EAAE,6BAA6B,EAAE,MAAM,0DAA0D,CAAC;AACzG,OAAO,EAAE,2BAA2B,EAAE,MAAM,uDAAuD,CAAC;AACpG,OAAO,EAAE,yBAAyB,EAAE,MAAM,kDAAkD,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,iCAAiC,EAAE,MAAM,6DAA6D,CAAC;AAChH,OAAO,EAAE,mCAAmC,EAAE,MAAM,+DAA+D,CAAC;AACpH,OAAO,EAAE,kCAAkC,EAAE,MAAM,8DAA8D,CAAC;AAClH,OAAO,EAAE,oCAAoC,EAAE,MAAM,gEAAgE,CAAC;AACtH,OAAO,EAAE,iCAAiC,EAAE,MAAM,6DAA6D,CAAC;AAChH,OAAO,EAAE,mCAAmC,EAAE,MAAM,+DAA+D,CAAC;AAEpH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAyD,EACpF,MAAiB,EACjB,MAAc;IACd,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC3B,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAiB,EAAE,MAAc;IAC/D,MAAM,QAAQ,CAAC;QACX,eAAe;QACf,cAAc;QACd,2BAA2B;QAC3B,WAAW;QACX,mBAAmB;QACnB,iBAAiB;QACjB,cAAc;QACd,YAAY;QACZ,cAAc;QACd,eAAe;QACf,kBAAkB;QAClB,mBAAmB;QAEnB,8BAA8B;QAC9B,sBAAsB;QACtB,gBAAgB;QAEhB,kBAAkB;QAClB,UAAU;QACV,kCAAkC;QAClC,+BAA+B;QAC/B,4BAA4B;QAC5B,6BAA6B;QAC7B,qBAAqB;QACrB,wBAAwB;QACxB,yBAAyB;QACzB,wBAAwB;QACxB,wBAAwB;QACxB,qBAAqB;QACrB,6BAA6B;QAC7B,6BAA6B;QAC7B,2BAA2B;QAC3B,+BAA+B;QAC/B,6BAA6B;QAC7B,2BAA2B;QAC3B,2BAA2B;QAC3B,8BAA8B;QAC9B,0BAA0B;QAC1B,4BAA4B;QAC5B,wBAAwB;QACxB,+BAA+B;QAC/B,6BAA6B;QAC7B,+BAA+B;QAC/B,iCAAiC;QACjC,qBAAqB;QACrB,wBAAwB;QACxB,uBAAuB;QACvB,0BAA0B;QAC1B,yBAAyB;QACzB,wBAAwB;QACxB,yBAAyB;QACzB,wBAAwB;QACxB,0BAA0B;QAC1B,qCAAqC;QACrC,4BAA4B;QAC5B,8BAA8B;QAC9B,yBAAyB;QACzB,wCAAwC;QACxC,yBAAyB;QACzB,sBAAsB;QACtB,iCAAiC;QACjC,mCAAmC;QACnC,kCAAkC;QAClC,oCAAoC;QACpC,iCAAiC;QACjC,mCAAmC;QAEnC,UAAU;QACV,qBAAqB;QACrB,2BAA2B;QAC3B,mCAAmC;QACnC,4BAA4B;QAC5B,sBAAsB;QACtB,+BAA+B;QAC/B,gCAAgC;QAChC,6BAA6B;QAC7B,qCAAqC;QACrC,8CAA8C;QAC9C,gDAAgD;QAChD,uCAAuC;QACvC,yCAAyC;KAE5C,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp";
2
+ import type { Config } from "../../../../config.js";
3
+ export declare function getLogsPowerShellTool(server: McpServer, config: Config): void;
@@ -0,0 +1,59 @@
1
+ import { z } from "zod";
2
+ import { safeMcpResponse } from "../../../../helper.js";
3
+ import { runGenericPowershellCommand } from "../../simple/generic.js";
4
+ import { filterByLogLevel, LogLevel } from "./utils.js";
5
+ const logFilePrefixes = [
6
+ "log",
7
+ "Crawiling.log",
8
+ "Search.log",
9
+ "SPE.log",
10
+ "Client.log",
11
+ "OWin.log",
12
+ "Publising.log",
13
+ ];
14
+ function formatDate(date) {
15
+ const d = date ? new Date(date) : new Date();
16
+ let month = '' + (d.getMonth() + 1), day = '' + d.getDate(), year = d.getFullYear();
17
+ if (month.length < 2) {
18
+ month = '0' + month;
19
+ }
20
+ if (day.length < 2) {
21
+ day = '0' + day;
22
+ }
23
+ return [year, month, day].join("");
24
+ }
25
+ export function getLogsPowerShellTool(server, config) {
26
+ server.tool(`logging-get-logs`, `Retrieves Sitecore logs from the log directory.`, {
27
+ name: z.string()
28
+ .default("log")
29
+ .optional()
30
+ .describe(`The name of the log file to retrieve. If not provided, defaults to log.*. Possible options: ${logFilePrefixes.join(", ")}.`),
31
+ level: z.enum(Object.values(LogLevel))
32
+ .default(LogLevel.DEBUG)
33
+ .optional(),
34
+ date: z.string()
35
+ .optional()
36
+ .describe(`The date of the log file to retrieve. If not provided, defaults to today. Date format should be in ISO 8601 format (e.g., '2023-10-01T00:00:00Z'`),
37
+ tail: z.number()
38
+ .default(500)
39
+ .optional()
40
+ .describe("The number of lines to retrieve from the end of the log file. Defaults to 500."),
41
+ }, async (params) => {
42
+ const stringDate = formatDate(params.date);
43
+ const command = `Get-ChildItem -Path $SitecoreDataFolder/logs/${params.name}*${stringDate}*.* | Sort LastWriteTime | Get-Content -Tail ${params.tail} `;
44
+ return safeMcpResponse((async () => {
45
+ const json = await runGenericPowershellCommand(config, command, {});
46
+ const filteredLogs = filterByLogLevel(JSON.parse(json.content[0].text), LogLevel[params.level] || LogLevel.DEBUG);
47
+ return {
48
+ content: [
49
+ {
50
+ type: "text",
51
+ text: JSON.stringify(filteredLogs, null, 2),
52
+ },
53
+ ],
54
+ isError: false,
55
+ };
56
+ })());
57
+ });
58
+ }
59
+ //# sourceMappingURL=get-logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-logs.js","sourceRoot":"","sources":["../../../../../src/tools/powershell/composite/logging/get-logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare enum LogLevel {
2
+ DEBUG = "DEBUG",
3
+ INFO = "INFO",
4
+ WARN = "WARN",
5
+ ERROR = "ERROR",
6
+ FATAL = "FATAL"
7
+ }
8
+ export interface LogEntry {
9
+ level: LogLevel;
10
+ message: string;
11
+ timestamp: string;
12
+ }
13
+ export declare function filterByLogLevel(logs: any, level: LogLevel): LogEntry[];
@@ -0,0 +1,63 @@
1
+ export var LogLevel;
2
+ (function (LogLevel) {
3
+ LogLevel["DEBUG"] = "DEBUG";
4
+ LogLevel["INFO"] = "INFO";
5
+ LogLevel["WARN"] = "WARN";
6
+ LogLevel["ERROR"] = "ERROR";
7
+ LogLevel["FATAL"] = "FATAL";
8
+ })(LogLevel || (LogLevel = {}));
9
+ export function filterByLogLevel(logs, level) {
10
+ const logsArray = (logs.Obj || []).map((log) => {
11
+ return log.undefined;
12
+ });
13
+ const filteredLogs = logsArray.reduce((acc, log) => {
14
+ // Skip empty lines
15
+ if (log === undefined || log.trim() === "") {
16
+ return acc;
17
+ }
18
+ const match1 = log.match(/^(ManagedPoolThread #\d+|[0-9]+) (\d{2} \w{3} \d{4} \d{2}:\d{2}:\d{2}) (\w+) (.*)$/);
19
+ const match2 = log.match(/^(\d+|[0-9]+) (\d{2} \w{3} \d{4} \d{2}:\d{2}:\d{2}) (\w+) (.*)$/);
20
+ if (!match1 && !match2) {
21
+ // It is the line that continues the previous log entry
22
+ if (acc.length > 0) {
23
+ acc[acc.length - 1].message += ` \r\n${log.trim()}`;
24
+ }
25
+ }
26
+ else {
27
+ if (match1) {
28
+ const [_, __, timestamp, level, message] = match1;
29
+ acc.push({ timestamp, level: level, message });
30
+ }
31
+ else if (match2) {
32
+ const [_, __, timestamp, level, message] = match2;
33
+ acc.push({ timestamp, level: level, message });
34
+ }
35
+ }
36
+ return acc;
37
+ }, []);
38
+ return filteredLogs.filter((log) => {
39
+ switch (level) {
40
+ case LogLevel.DEBUG:
41
+ return log.level === LogLevel.DEBUG
42
+ || log.level === LogLevel.INFO
43
+ || log.level === LogLevel.WARN
44
+ || log.level === LogLevel.ERROR
45
+ || log.level === LogLevel.FATAL;
46
+ case LogLevel.INFO:
47
+ return log.level === LogLevel.INFO
48
+ || log.level === LogLevel.WARN
49
+ || log.level === LogLevel.ERROR
50
+ || log.level === LogLevel.FATAL;
51
+ case LogLevel.WARN:
52
+ return log.level === LogLevel.WARN
53
+ || log.level === LogLevel.ERROR
54
+ || log.level === LogLevel.FATAL;
55
+ case LogLevel.ERROR:
56
+ return log.level === LogLevel.ERROR
57
+ || log.level === LogLevel.FATAL;
58
+ case LogLevel.FATAL:
59
+ return log.level === LogLevel.FATAL;
60
+ }
61
+ });
62
+ }
63
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/tools/powershell/composite/logging/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp";
2
+ import type { Config } from "../../../../config.js";
3
+ export declare function setLayoutIdPowershellTool(server: McpServer, config: Config): void;
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ import { safeMcpResponse } from "../../../../helper.js";
3
+ import { runGenericPowershellCommand } from "../../simple/generic.js";
4
+ export function setLayoutIdPowershellTool(server, config) {
5
+ server.tool("presentation-set-layout-by-id", "Sets layout for an item specified by Id.", {
6
+ itemId: z.string().describe("The Id of the item to set the layout for."),
7
+ layoutPath: z.string().describe("The path of the layout.").default("master:"),
8
+ layoutId: z.string().describe("The ID of the layout to set for the item."),
9
+ language: z.string().describe("The language of the item to set layout for.").optional(),
10
+ finalLayout: z
11
+ .boolean()
12
+ .describe("Specifies layout to be updated. If 'true', the final layout is set, otherwise - shared layout.")
13
+ .optional(),
14
+ }, async (params) => {
15
+ const command = `
16
+ $layout = Get-Item -Path ${params.layoutPath} -Id ${params.layoutId};
17
+ $device = Get-LayoutDevice -Default;
18
+ Set-Layout -Id ${params.itemId} -Layout $layout -Device $device ${params.language ? `-Language ${params.language}` : ""}
19
+ ${params.finalLayout ? "-FinalLayout" : ""};
20
+ `.replaceAll(/[\n]+/g, "");
21
+ return safeMcpResponse(runGenericPowershellCommand(config, command, {}));
22
+ });
23
+ }
24
+ //# sourceMappingURL=set-layout-by-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-layout-by-id.js","sourceRoot":"","sources":["../../../../../src/tools/powershell/composite/presentation/set-layout-by-id.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAEtE,MAAM,UAAU,yBAAyB,CAAC,MAAiB,EAAE,MAAc;IACvE,MAAM,CAAC,IAAI,CACP,+BAA+B,EAC/B,0CAA0C,EAC1C;QACI,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACxE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAC7E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QAC1E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC,CAAC,QAAQ,EAAE;QACvF,WAAW,EAAE,CAAC;aACT,OAAO,EAAE;aACT,QAAQ,CAAC,gGAAgG,CAAC;aAC1G,QAAQ,EAAE;KAClB,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,MAAM,OAAO,GAAG;2CACe,MAAM,CAAC,UAAU,QAAQ,MAAM,CAAC,QAAQ;;iCAElD,MAAM,CAAC,MAAM,oCAAoC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;sBACjH,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;aACjD,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAE3B,OAAO,eAAe,CAAC,2BAA2B,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp";
2
+ import type { Config } from "../../../../config.js";
3
+ export declare function setLayoutByPathPowershellTool(server: McpServer, config: Config): void;
@@ -0,0 +1,23 @@
1
+ import { z } from "zod";
2
+ import { safeMcpResponse } from "../../../../helper.js";
3
+ import { runGenericPowershellCommand } from "../../simple/generic.js";
4
+ export function setLayoutByPathPowershellTool(server, config) {
5
+ server.tool("presentation-set-layout-by-path", "Sets layout for an item specified by path.", {
6
+ itemId: z.string().describe("The Id of the item to set the layout for."),
7
+ layoutPath: z.string().describe("The path of the layout.").default("master:"),
8
+ language: z.string().describe("The language of the item to set layout for.").optional(),
9
+ finalLayout: z
10
+ .boolean()
11
+ .describe("Specifies layout to be updated. If 'true', the final layout is set, otherwise - shared layout.")
12
+ .optional(),
13
+ }, async (params) => {
14
+ const command = `
15
+ $layout = Get-Item -Path '${params.layoutPath}';
16
+ $device = Get-LayoutDevice -Default;
17
+ Set-Layout -Id ${params.itemId} -Layout $layout -Device $device ${params.language ? `-Language ${params.language}` : ""}
18
+ ${params.finalLayout ? "-FinalLayout" : ""};
19
+ `.replaceAll(/[\n]+/g, "");
20
+ return safeMcpResponse(runGenericPowershellCommand(config, command, {}));
21
+ });
22
+ }
23
+ //# sourceMappingURL=set-layout-by-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-layout-by-path.js","sourceRoot":"","sources":["../../../../../src/tools/powershell/composite/presentation/set-layout-by-path.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAEtE,MAAM,UAAU,6BAA6B,CAAC,MAAiB,EAAE,MAAc;IAC3E,MAAM,CAAC,IAAI,CACP,iCAAiC,EACjC,4CAA4C,EAC5C;QACI,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACxE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAC7E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC,CAAC,QAAQ,EAAE;QACvF,WAAW,EAAE,CAAC;aACT,OAAO,EAAE;aACT,QAAQ,CAAC,gGAAgG,CAAC;aAC1G,QAAQ,EAAE;KAClB,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,MAAM,OAAO,GAAG;4CACgB,MAAM,CAAC,UAAU;;iCAE5B,MAAM,CAAC,MAAM,oCAAoC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;sBACjH,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;aACjD,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAE3B,OAAO,eAAe,CAAC,2BAA2B,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -4,9 +4,9 @@ import { runGenericPowershellCommand } from "../generic.js";
4
4
  export function getSearchIndexPowerShellTool(server, config) {
5
5
  server.tool("indexing-get-search-index", "Get information about Sitecore search indexes. Can filter by name, database, running status, or corrupted status.", {
6
6
  name: z.string().optional().describe("The name of the index to retrieve information for. Supports wildcards."),
7
- database: z.string().optional().describe("Filter indices by database name."),
8
- running: z.boolean().optional().describe("Filter to show only running indices."),
9
- corrupted: z.boolean().optional().describe("Filter to show only corrupted indices."),
7
+ database: z.string().optional().describe("Filter indexes by database name."),
8
+ running: z.boolean().optional().describe("Filter to show only running indexes."),
9
+ corrupted: z.boolean().optional().describe("Filter to show only corrupted indexes."),
10
10
  }, async (params) => {
11
11
  const command = `Get-SearchIndex`;
12
12
  const options = {};
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp";
2
+ import type { Config } from "../../../../config.js";
3
+ export declare function getLayoutByIdPowershellTool(server: McpServer, config: Config): void;
@@ -0,0 +1,28 @@
1
+ import { z } from "zod";
2
+ import { safeMcpResponse } from "../../../../helper.js";
3
+ import { runGenericPowershellCommand } from "../generic.js";
4
+ export function getLayoutByIdPowershellTool(server, config) {
5
+ server.tool("presentation-get-layout-by-id", "Gets item layout by Id.", {
6
+ id: z.string().describe("The ID of the item to retrieve layout for."),
7
+ finalLayout: z
8
+ .boolean()
9
+ .optional()
10
+ .describe("Specifies layout to be retrieved. If 'true', the final layout is retrieved, otherwise - shared layout."),
11
+ language: z.string()
12
+ .optional()
13
+ .describe("Specifies the item language to retrieve layout."),
14
+ }, async (params) => {
15
+ const command = `Get-Layout`;
16
+ const options = {};
17
+ options["Id"] = params.id;
18
+ if (params.finalLayout === true) {
19
+ options["FinalLayout"] = "";
20
+ }
21
+ if (params.language) {
22
+ options["Language"] = params.language;
23
+ }
24
+ return safeMcpResponse(runGenericPowershellCommand(config, command, options));
25
+ });
26
+ }
27
+ ;
28
+ //# sourceMappingURL=get-layout-by-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-layout-by-id.js","sourceRoot":"","sources":["../../../../../src/tools/powershell/simple/presentation/get-layout-by-id.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAE5D,MAAM,UAAU,2BAA2B,CAAC,MAAiB,EAAE,MAAc;IACzE,MAAM,CAAC,IAAI,CACP,+BAA+B,EAC/B,yBAAyB,EACzB;QACI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;QACrE,WAAW,EAAE,CAAC;aACT,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,wGAAwG,CAAC;QACvH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;aACf,QAAQ,EAAE;aACV,QAAQ,CAAC,iDAAiD,CAAC;KACnE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,MAAM,OAAO,GAAG,YAAY,CAAC;QAC7B,MAAM,OAAO,GAAwB,EAAE,CAAC;QAExC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;QAE1B,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAC/B,CAAC;YACG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,EACnB,CAAC;YACG,OAAO,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC1C,CAAC;QAED,OAAO,eAAe,CAAC,2BAA2B,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAClF,CAAC,CACJ,CAAC;AACN,CAAC;AAAA,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp";
2
+ import type { Config } from "../../../../config.js";
3
+ export declare function getLayoutByPathPowershellTool(server: McpServer, config: Config): void;
@@ -0,0 +1,27 @@
1
+ import { z } from "zod";
2
+ import { safeMcpResponse } from "../../../../helper.js";
3
+ import { runGenericPowershellCommand } from "../generic.js";
4
+ export function getLayoutByPathPowershellTool(server, config) {
5
+ server.tool("presentation-get-layout-by-path", "Gets item layout by path.", {
6
+ path: z.string().describe("The path of the item to retrieve layout for.").default("master:"),
7
+ finalLayout: z
8
+ .boolean()
9
+ .optional()
10
+ .describe("Specifies layout to be retrieved. If 'true', the final layout is retrieved, otherwise - shared layout."),
11
+ language: z.string()
12
+ .optional()
13
+ .describe("Specifies the item language to retrieve layout."),
14
+ }, async (params) => {
15
+ const command = `Get-Layout`;
16
+ const options = {};
17
+ options["Path"] = params.path;
18
+ if (params.finalLayout === true) {
19
+ options["FinalLayout"] = "";
20
+ }
21
+ if (params.language) {
22
+ options["Language"] = params.language;
23
+ }
24
+ return safeMcpResponse(runGenericPowershellCommand(config, command, options));
25
+ });
26
+ }
27
+ //# sourceMappingURL=get-layout-by-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-layout-by-path.js","sourceRoot":"","sources":["../../../../../src/tools/powershell/simple/presentation/get-layout-by-path.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAE5D,MAAM,UAAU,6BAA6B,CAAC,MAAiB,EAAE,MAAc;IAC3E,MAAM,CAAC,IAAI,CACP,iCAAiC,EACjC,2BAA2B,EAC3B;QACI,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAC5F,WAAW,EAAE,CAAC;aACT,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,wGAAwG,CAAC;QACvH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;aACf,QAAQ,EAAE;aACV,QAAQ,CAAC,iDAAiD,CAAC;KACnE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,MAAM,OAAO,GAAG,YAAY,CAAC;QAC7B,MAAM,OAAO,GAAwB,EAAE,CAAC;QAExC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;QAE9B,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAC/B,CAAC;YACG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,EACnB,CAAC;YACG,OAAO,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC1C,CAAC;QAED,OAAO,eAAe,CAAC,2BAA2B,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAClF,CAAC,CACJ,CAAC;AACN,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antonytm/mcp-sitecore-server",
3
- "version": "0.15.1",
3
+ "version": "0.17.0",
4
4
  "description": "A Model Context Protocol server for Sitecore",
5
5
  "files": [
6
6
  "dist",