@tmhs/homelab-mcp 0.7.0 → 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 (163) hide show
  1. package/README.md +10 -1
  2. package/dist/index.js +15 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/tools/adguardFilters.d.ts.map +1 -1
  5. package/dist/tools/adguardFilters.js +3 -2
  6. package/dist/tools/adguardFilters.js.map +1 -1
  7. package/dist/tools/adguardQueryLog.d.ts.map +1 -1
  8. package/dist/tools/adguardQueryLog.js +3 -1
  9. package/dist/tools/adguardQueryLog.js.map +1 -1
  10. package/dist/tools/adguardStats.d.ts.map +1 -1
  11. package/dist/tools/adguardStats.js +3 -2
  12. package/dist/tools/adguardStats.js.map +1 -1
  13. package/dist/tools/alertList.d.ts.map +1 -1
  14. package/dist/tools/alertList.js +3 -1
  15. package/dist/tools/alertList.js.map +1 -1
  16. package/dist/tools/aptHistory.d.ts.map +1 -1
  17. package/dist/tools/aptHistory.js +3 -1
  18. package/dist/tools/aptHistory.js.map +1 -1
  19. package/dist/tools/aptUpdate.d.ts.map +1 -1
  20. package/dist/tools/aptUpdate.js +3 -1
  21. package/dist/tools/aptUpdate.js.map +1 -1
  22. package/dist/tools/aptUpgradable.d.ts.map +1 -1
  23. package/dist/tools/aptUpgradable.js +4 -3
  24. package/dist/tools/aptUpgradable.js.map +1 -1
  25. package/dist/tools/backupDiff.d.ts.map +1 -1
  26. package/dist/tools/backupDiff.js +3 -1
  27. package/dist/tools/backupDiff.js.map +1 -1
  28. package/dist/tools/backupList.d.ts.map +1 -1
  29. package/dist/tools/backupList.js +3 -1
  30. package/dist/tools/backupList.js.map +1 -1
  31. package/dist/tools/backupRestore.d.ts.map +1 -1
  32. package/dist/tools/backupRestore.js +3 -1
  33. package/dist/tools/backupRestore.js.map +1 -1
  34. package/dist/tools/backupRun.d.ts.map +1 -1
  35. package/dist/tools/backupRun.js +3 -1
  36. package/dist/tools/backupRun.js.map +1 -1
  37. package/dist/tools/backupStatus.d.ts.map +1 -1
  38. package/dist/tools/backupStatus.js +3 -1
  39. package/dist/tools/backupStatus.js.map +1 -1
  40. package/dist/tools/certCheck.d.ts +3 -0
  41. package/dist/tools/certCheck.d.ts.map +1 -0
  42. package/dist/tools/certCheck.js +31 -0
  43. package/dist/tools/certCheck.js.map +1 -0
  44. package/dist/tools/certList.d.ts +3 -0
  45. package/dist/tools/certList.d.ts.map +1 -0
  46. package/dist/tools/certList.js +40 -0
  47. package/dist/tools/certList.js.map +1 -0
  48. package/dist/tools/certRenew.d.ts +3 -0
  49. package/dist/tools/certRenew.d.ts.map +1 -0
  50. package/dist/tools/certRenew.js +47 -0
  51. package/dist/tools/certRenew.js.map +1 -0
  52. package/dist/tools/composeDown.d.ts.map +1 -1
  53. package/dist/tools/composeDown.js +3 -1
  54. package/dist/tools/composeDown.js.map +1 -1
  55. package/dist/tools/composePs.d.ts.map +1 -1
  56. package/dist/tools/composePs.js +3 -2
  57. package/dist/tools/composePs.js.map +1 -1
  58. package/dist/tools/composePull.d.ts.map +1 -1
  59. package/dist/tools/composePull.js +3 -1
  60. package/dist/tools/composePull.js.map +1 -1
  61. package/dist/tools/composeUp.d.ts.map +1 -1
  62. package/dist/tools/composeUp.js +3 -1
  63. package/dist/tools/composeUp.js.map +1 -1
  64. package/dist/tools/containerScan.d.ts.map +1 -1
  65. package/dist/tools/containerScan.js +4 -2
  66. package/dist/tools/containerScan.js.map +1 -1
  67. package/dist/tools/diskUsage.d.ts.map +1 -1
  68. package/dist/tools/diskUsage.js +3 -1
  69. package/dist/tools/diskUsage.js.map +1 -1
  70. package/dist/tools/fail2banStatus.d.ts.map +1 -1
  71. package/dist/tools/fail2banStatus.js +3 -1
  72. package/dist/tools/fail2banStatus.js.map +1 -1
  73. package/dist/tools/grafanaSnapshot.d.ts.map +1 -1
  74. package/dist/tools/grafanaSnapshot.js +3 -1
  75. package/dist/tools/grafanaSnapshot.js.map +1 -1
  76. package/dist/tools/inventorySync.d.ts +3 -0
  77. package/dist/tools/inventorySync.d.ts.map +1 -0
  78. package/dist/tools/inventorySync.js +36 -0
  79. package/dist/tools/inventorySync.js.map +1 -0
  80. package/dist/tools/journalLogs.d.ts.map +1 -1
  81. package/dist/tools/journalLogs.js +3 -1
  82. package/dist/tools/journalLogs.js.map +1 -1
  83. package/dist/tools/kernelInfo.d.ts.map +1 -1
  84. package/dist/tools/kernelInfo.js +4 -3
  85. package/dist/tools/kernelInfo.js.map +1 -1
  86. package/dist/tools/logSearch.d.ts.map +1 -1
  87. package/dist/tools/logSearch.js +3 -1
  88. package/dist/tools/logSearch.js.map +1 -1
  89. package/dist/tools/networkInfo.d.ts.map +1 -1
  90. package/dist/tools/networkInfo.js +3 -2
  91. package/dist/tools/networkInfo.js.map +1 -1
  92. package/dist/tools/nodeExec.d.ts +3 -0
  93. package/dist/tools/nodeExec.d.ts.map +1 -0
  94. package/dist/tools/nodeExec.js +34 -0
  95. package/dist/tools/nodeExec.js.map +1 -0
  96. package/dist/tools/nodeList.d.ts +3 -0
  97. package/dist/tools/nodeList.d.ts.map +1 -0
  98. package/dist/tools/nodeList.js +24 -0
  99. package/dist/tools/nodeList.js.map +1 -0
  100. package/dist/tools/nodeStatus.d.ts +3 -0
  101. package/dist/tools/nodeStatus.d.ts.map +1 -0
  102. package/dist/tools/nodeStatus.js +30 -0
  103. package/dist/tools/nodeStatus.js.map +1 -0
  104. package/dist/tools/npmCerts.d.ts.map +1 -1
  105. package/dist/tools/npmCerts.js +6 -5
  106. package/dist/tools/npmCerts.js.map +1 -1
  107. package/dist/tools/npmProxyHosts.d.ts.map +1 -1
  108. package/dist/tools/npmProxyHosts.js +6 -5
  109. package/dist/tools/npmProxyHosts.js.map +1 -1
  110. package/dist/tools/ntfySend.d.ts.map +1 -1
  111. package/dist/tools/ntfySend.js +3 -1
  112. package/dist/tools/ntfySend.js.map +1 -1
  113. package/dist/tools/ntfyTopics.d.ts.map +1 -1
  114. package/dist/tools/ntfyTopics.js +3 -1
  115. package/dist/tools/ntfyTopics.js.map +1 -1
  116. package/dist/tools/openPorts.d.ts.map +1 -1
  117. package/dist/tools/openPorts.js +3 -2
  118. package/dist/tools/openPorts.js.map +1 -1
  119. package/dist/tools/piReboot.d.ts.map +1 -1
  120. package/dist/tools/piReboot.js +5 -3
  121. package/dist/tools/piReboot.js.map +1 -1
  122. package/dist/tools/piStatus.d.ts.map +1 -1
  123. package/dist/tools/piStatus.js +3 -2
  124. package/dist/tools/piStatus.js.map +1 -1
  125. package/dist/tools/prometheusQuery.d.ts.map +1 -1
  126. package/dist/tools/prometheusQuery.js +3 -1
  127. package/dist/tools/prometheusQuery.js.map +1 -1
  128. package/dist/tools/serviceHealth.d.ts.map +1 -1
  129. package/dist/tools/serviceHealth.js +4 -2
  130. package/dist/tools/serviceHealth.js.map +1 -1
  131. package/dist/tools/serviceLogs.d.ts.map +1 -1
  132. package/dist/tools/serviceLogs.js +3 -1
  133. package/dist/tools/serviceLogs.js.map +1 -1
  134. package/dist/tools/serviceRestart.d.ts.map +1 -1
  135. package/dist/tools/serviceRestart.js +4 -2
  136. package/dist/tools/serviceRestart.js.map +1 -1
  137. package/dist/tools/speedtestResults.d.ts.map +1 -1
  138. package/dist/tools/speedtestResults.js +3 -1
  139. package/dist/tools/speedtestResults.js.map +1 -1
  140. package/dist/tools/sshTest.d.ts.map +1 -1
  141. package/dist/tools/sshTest.js +3 -2
  142. package/dist/tools/sshTest.js.map +1 -1
  143. package/dist/tools/systemdServices.d.ts.map +1 -1
  144. package/dist/tools/systemdServices.js +3 -1
  145. package/dist/tools/systemdServices.js.map +1 -1
  146. package/dist/tools/ufwStatus.d.ts.map +1 -1
  147. package/dist/tools/ufwStatus.js +3 -2
  148. package/dist/tools/ufwStatus.js.map +1 -1
  149. package/dist/tools/uptimeKumaStatus.d.ts.map +1 -1
  150. package/dist/tools/uptimeKumaStatus.js +3 -2
  151. package/dist/tools/uptimeKumaStatus.js.map +1 -1
  152. package/dist/tools/volumeBackup.d.ts.map +1 -1
  153. package/dist/tools/volumeBackup.js +3 -1
  154. package/dist/tools/volumeBackup.js.map +1 -1
  155. package/dist/utils/node-param.d.ts +5 -0
  156. package/dist/utils/node-param.d.ts.map +1 -0
  157. package/dist/utils/node-param.js +8 -0
  158. package/dist/utils/node-param.js.map +1 -0
  159. package/dist/utils/ssh-api.d.ts +12 -1
  160. package/dist/utils/ssh-api.d.ts.map +1 -1
  161. package/dist/utils/ssh-api.js +50 -7
  162. package/dist/utils/ssh-api.js.map +1 -1
  163. package/package.json +2 -2
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Home Lab MCP Server
2
2
 
3
- MCP (Model Context Protocol) server for home lab operations. Connects to a Raspberry Pi via SSH and provides 41 tools for system management, Docker Compose stacks, service monitoring, networking, backups, disaster recovery, security auditing, log analysis, notifications, and OS management.
3
+ MCP (Model Context Protocol) server for home lab operations. Connects to a Raspberry Pi (or multiple nodes) via SSH and provides 48 tools for system management, Docker Compose stacks, service monitoring, networking, backups, disaster recovery, security auditing, log analysis, notifications, OS management, certificate lifecycle, and multi-node management. All tools accept an optional `node` parameter to target specific nodes.
4
4
 
5
5
  ## Tools
6
6
 
@@ -46,6 +46,13 @@ MCP (Model Context Protocol) server for home lab operations. Connects to a Raspb
46
46
  | OS | `homelab_aptHistory` | Show recent apt install/upgrade/remove history |
47
47
  | OS | `homelab_kernelInfo` | Kernel version, boot parameters, loaded modules |
48
48
  | OS | `homelab_systemdServices` | List systemd units or get status of a specific unit |
49
+ | Certificates | `homelab_certCheck` | Check SSL certificate expiry, issuer, and fingerprint |
50
+ | Certificates | `homelab_certRenew` | Trigger Let's Encrypt certificate renewal |
51
+ | Certificates | `homelab_certList` | List all managed certificates from certbot and NPM |
52
+ | Multi-Node | `homelab_nodeList` | List all managed nodes and connection status |
53
+ | Multi-Node | `homelab_nodeExec` | Execute a command on a specific node |
54
+ | Multi-Node | `homelab_nodeStatus` | Get system status for a specific node |
55
+ | Multi-Node | `homelab_inventorySync` | Discover nodes from Ansible inventory or Tailscale |
49
56
  | SSH | `homelab_sshTest` | Test SSH connectivity |
50
57
 
51
58
  ## Setup
@@ -82,6 +89,8 @@ Set environment variables:
82
89
  | `HOMELAB_NPM_PASSWORD` | `changeme` | NPM admin password |
83
90
  | `HOMELAB_NPM_PORT` | `81` | NPM admin API port override |
84
91
  | `HOMELAB_NTFY_PORT` | `8080` | Ntfy server port override |
92
+ | `HOMELAB_NODES` | (empty) | JSON object mapping node names to SSH config for multi-node support |
93
+ | `HOMELAB_ANSIBLE_INVENTORY` | `/etc/ansible/hosts` | Ansible inventory file path for node discovery |
85
94
 
86
95
  ## Usage with Cursor
87
96
 
package/dist/index.js CHANGED
@@ -42,9 +42,16 @@ import { register as registerAptUpgradable } from "./tools/aptUpgradable.js";
42
42
  import { register as registerAptHistory } from "./tools/aptHistory.js";
43
43
  import { register as registerKernelInfo } from "./tools/kernelInfo.js";
44
44
  import { register as registerSystemdServices } from "./tools/systemdServices.js";
45
+ import { register as registerCertCheck } from "./tools/certCheck.js";
46
+ import { register as registerCertRenew } from "./tools/certRenew.js";
47
+ import { register as registerCertList } from "./tools/certList.js";
48
+ import { register as registerNodeList } from "./tools/nodeList.js";
49
+ import { register as registerNodeExec } from "./tools/nodeExec.js";
50
+ import { register as registerNodeStatus } from "./tools/nodeStatus.js";
51
+ import { register as registerInventorySync } from "./tools/inventorySync.js";
45
52
  const server = new McpServer({
46
53
  name: "homelab-mcp",
47
- version: "0.7.0",
54
+ version: "0.9.0",
48
55
  });
49
56
  registerPiStatus(server);
50
57
  registerPiReboot(server);
@@ -87,6 +94,13 @@ registerAptUpgradable(server);
87
94
  registerAptHistory(server);
88
95
  registerKernelInfo(server);
89
96
  registerSystemdServices(server);
97
+ registerCertCheck(server);
98
+ registerCertRenew(server);
99
+ registerCertList(server);
100
+ registerNodeList(server);
101
+ registerNodeExec(server);
102
+ registerNodeStatus(server);
103
+ registerInventorySync(server);
90
104
  async function main() {
91
105
  const transport = new StdioServerTransport();
92
106
  await server.connect(transport);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,QAAQ,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,QAAQ,IAAI,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAE7E,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACzB,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACzB,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC/B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,eAAe,CAAC,MAAM,CAAC,CAAC;AACxB,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAChC,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAChC,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACjC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACjC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC/B,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAChC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9B,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACzB,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3B,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9B,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3B,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC/B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACzB,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3B,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9B,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3B,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3B,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAChC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACzB,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACzB,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACzB,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3B,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAE9B,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"adguardFilters.d.ts","sourceRoot":"","sources":["../../src/tools/adguardFilters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkBzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqChD"}
1
+ {"version":3,"file":"adguardFilters.d.ts","sourceRoot":"","sources":["../../src/tools/adguardFilters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmBzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsChD"}
@@ -1,5 +1,6 @@
1
1
  import { execSSH, errorResponse } from "../utils/ssh-api.js";
2
2
  import { CommandFailedError } from "../utils/errors.js";
3
+ import { nodeParam } from "../utils/node-param.js";
3
4
  const DEFAULT_PORT = 3000;
4
5
  const SERVICE_NAME = "AdGuard Home";
5
6
  function getPort() {
@@ -12,11 +13,11 @@ function buildAuth() {
12
13
  return `-u '${user}:${password}'`;
13
14
  }
14
15
  export function register(server) {
15
- server.tool("homelab_adguardFilters", "List AdGuard Home filter lists with name, URL, enabled status, and rule count", {}, async () => {
16
+ server.tool("homelab_adguardFilters", "List AdGuard Home filter lists with name, URL, enabled status, and rule count", { ...nodeParam }, async (args) => {
16
17
  const port = getPort();
17
18
  try {
18
19
  const auth = buildAuth();
19
- const output = await execSSH(`curl -sf ${auth} 'http://localhost:${port}/control/filtering/status'`);
20
+ const output = await execSSH(`curl -sf ${auth} 'http://localhost:${port}/control/filtering/status'`, args.node);
20
21
  return { content: [{ type: "text", text: output }] };
21
22
  }
22
23
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"adguardFilters.js","sourceRoot":"","sources":["../../src/tools/adguardFilters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,YAAY,GAAG,cAAc,CAAC;AAEpC,SAAS,OAAO;IACd,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAClD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAC1D,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC;IACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,OAAO,CAAC;IACjE,OAAO,OAAO,IAAI,IAAI,QAAQ,GAAG,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,+EAA+E,EAC/E,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,YAAY,IAAI,sBAAsB,IAAI,4BAA4B,CACvE,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;gBACxC,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,aAAa,CAClB,IAAI,KAAK,CACP,wBAAwB,YAAY,YAAY,IAAI,mBAAmB;wBACrE,uDAAuD,CAC1D,CACF,CAAC;gBACJ,CAAC;gBACD,IAAI,KAAK,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;oBAC1B,OAAO,aAAa,CAClB,IAAI,KAAK,CACP,GAAG,YAAY,mDAAmD;wBAChE,wDAAwD,CAC3D,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"adguardFilters.js","sourceRoot":"","sources":["../../src/tools/adguardFilters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,YAAY,GAAG,cAAc,CAAC;AAEpC,SAAS,OAAO;IACd,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAClD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAC1D,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC;IACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,OAAO,CAAC;IACjE,OAAO,OAAO,IAAI,IAAI,QAAQ,GAAG,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,+EAA+E,EAC/E,EAAE,GAAG,SAAS,EAAE,EAChB,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,YAAY,IAAI,sBAAsB,IAAI,4BAA4B,EACtE,IAAI,CAAC,IAAI,CACV,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;gBACxC,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,aAAa,CAClB,IAAI,KAAK,CACP,wBAAwB,YAAY,YAAY,IAAI,mBAAmB;wBACrE,uDAAuD,CAC1D,CACF,CAAC;gBACJ,CAAC;gBACD,IAAI,KAAK,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;oBAC1B,OAAO,aAAa,CAClB,IAAI,KAAK,CACP,GAAG,YAAY,mDAAmD;wBAChE,wDAAwD,CAC3D,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"adguardQueryLog.d.ts","sourceRoot":"","sources":["../../src/tools/adguardQueryLog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgCzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0ChD"}
1
+ {"version":3,"file":"adguardQueryLog.d.ts","sourceRoot":"","sources":["../../src/tools/adguardQueryLog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkCzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2ChD"}
@@ -1,9 +1,11 @@
1
1
  import { z } from "zod";
2
2
  import { execSSH, errorResponse } from "../utils/ssh-api.js";
3
3
  import { CommandFailedError } from "../utils/errors.js";
4
+ import { nodeParam } from "../utils/node-param.js";
4
5
  const DEFAULT_PORT = 3000;
5
6
  const SERVICE_NAME = "AdGuard Home";
6
7
  const inputSchema = {
8
+ ...nodeParam,
7
9
  search: z
8
10
  .string()
9
11
  .optional()
@@ -35,7 +37,7 @@ export function register(server) {
35
37
  params.push(`search=${encodeURIComponent(args.search)}`);
36
38
  }
37
39
  const query = params.join("&");
38
- const output = await execSSH(`curl -sf ${auth} 'http://localhost:${port}/control/querylog?${query}'`);
40
+ const output = await execSSH(`curl -sf ${auth} 'http://localhost:${port}/control/querylog?${query}'`, args.node);
39
41
  return { content: [{ type: "text", text: output }] };
40
42
  }
41
43
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"adguardQueryLog.js","sourceRoot":"","sources":["../../src/tools/adguardQueryLog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,YAAY,GAAG,cAAc,CAAC;AAEpC,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uCAAuC,CAAC;IACpD,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,oCAAoC,CAAC;CAClD,CAAC;AAEF,SAAS,OAAO;IACd,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAClD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAC1D,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC;IACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,OAAO,CAAC;IACjE,OAAO,OAAO,IAAI,IAAI,QAAQ,GAAG,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,uCAAuC,EACvC,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;YACzB,MAAM,MAAM,GAAa,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACjD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,UAAU,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,YAAY,IAAI,sBAAsB,IAAI,qBAAqB,KAAK,GAAG,CACxE,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;gBACxC,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,aAAa,CAClB,IAAI,KAAK,CACP,wBAAwB,YAAY,YAAY,IAAI,mBAAmB;wBACrE,uDAAuD,CAC1D,CACF,CAAC;gBACJ,CAAC;gBACD,IAAI,KAAK,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;oBAC1B,OAAO,aAAa,CAClB,IAAI,KAAK,CACP,GAAG,YAAY,mDAAmD;wBAChE,wDAAwD,CAC3D,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"adguardQueryLog.js","sourceRoot":"","sources":["../../src/tools/adguardQueryLog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,YAAY,GAAG,cAAc,CAAC;AAEpC,MAAM,WAAW,GAAG;IAClB,GAAG,SAAS;IACZ,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uCAAuC,CAAC;IACpD,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,oCAAoC,CAAC;CAClD,CAAC;AAEF,SAAS,OAAO;IACd,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAClD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAC1D,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC;IACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,OAAO,CAAC;IACjE,OAAO,OAAO,IAAI,IAAI,QAAQ,GAAG,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,uCAAuC,EACvC,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;YACzB,MAAM,MAAM,GAAa,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACjD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,UAAU,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,YAAY,IAAI,sBAAsB,IAAI,qBAAqB,KAAK,GAAG,EACvE,IAAI,CAAC,IAAI,CACV,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;gBACxC,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,aAAa,CAClB,IAAI,KAAK,CACP,wBAAwB,YAAY,YAAY,IAAI,mBAAmB;wBACrE,uDAAuD,CAC1D,CACF,CAAC;gBACJ,CAAC;gBACD,IAAI,KAAK,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;oBAC1B,OAAO,aAAa,CAClB,IAAI,KAAK,CACP,GAAG,YAAY,mDAAmD;wBAChE,wDAAwD,CAC3D,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"adguardStats.d.ts","sourceRoot":"","sources":["../../src/tools/adguardStats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkBzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqChD"}
1
+ {"version":3,"file":"adguardStats.d.ts","sourceRoot":"","sources":["../../src/tools/adguardStats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmBzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsChD"}
@@ -1,5 +1,6 @@
1
1
  import { execSSH, errorResponse } from "../utils/ssh-api.js";
2
2
  import { CommandFailedError } from "../utils/errors.js";
3
+ import { nodeParam } from "../utils/node-param.js";
3
4
  const DEFAULT_PORT = 3000;
4
5
  const SERVICE_NAME = "AdGuard Home";
5
6
  function getPort() {
@@ -12,11 +13,11 @@ function buildAuth() {
12
13
  return `-u '${user}:${password}'`;
13
14
  }
14
15
  export function register(server) {
15
- server.tool("homelab_adguardStats", "Get AdGuard Home DNS statistics including query counts, blocked domains, and top clients", {}, async () => {
16
+ server.tool("homelab_adguardStats", "Get AdGuard Home DNS statistics including query counts, blocked domains, and top clients", { ...nodeParam }, async (args) => {
16
17
  const port = getPort();
17
18
  try {
18
19
  const auth = buildAuth();
19
- const output = await execSSH(`curl -sf ${auth} 'http://localhost:${port}/control/stats'`);
20
+ const output = await execSSH(`curl -sf ${auth} 'http://localhost:${port}/control/stats'`, args.node);
20
21
  return { content: [{ type: "text", text: output }] };
21
22
  }
22
23
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"adguardStats.js","sourceRoot":"","sources":["../../src/tools/adguardStats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,YAAY,GAAG,cAAc,CAAC;AAEpC,SAAS,OAAO;IACd,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAClD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAC1D,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC;IACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,OAAO,CAAC;IACjE,OAAO,OAAO,IAAI,IAAI,QAAQ,GAAG,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,0FAA0F,EAC1F,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,YAAY,IAAI,sBAAsB,IAAI,iBAAiB,CAC5D,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;gBACxC,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,aAAa,CAClB,IAAI,KAAK,CACP,wBAAwB,YAAY,YAAY,IAAI,mBAAmB;wBACrE,uDAAuD,CAC1D,CACF,CAAC;gBACJ,CAAC;gBACD,IAAI,KAAK,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;oBAC1B,OAAO,aAAa,CAClB,IAAI,KAAK,CACP,GAAG,YAAY,mDAAmD;wBAChE,wDAAwD,CAC3D,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"adguardStats.js","sourceRoot":"","sources":["../../src/tools/adguardStats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,YAAY,GAAG,cAAc,CAAC;AAEpC,SAAS,OAAO;IACd,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAClD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAC1D,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC;IACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,OAAO,CAAC;IACjE,OAAO,OAAO,IAAI,IAAI,QAAQ,GAAG,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,0FAA0F,EAC1F,EAAE,GAAG,SAAS,EAAE,EAChB,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,YAAY,IAAI,sBAAsB,IAAI,iBAAiB,EAC3D,IAAI,CAAC,IAAI,CACV,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;gBACxC,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,aAAa,CAClB,IAAI,KAAK,CACP,wBAAwB,YAAY,YAAY,IAAI,mBAAmB;wBACrE,uDAAuD,CAC1D,CACF,CAAC;gBACJ,CAAC;gBACD,IAAI,KAAK,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;oBAC1B,OAAO,aAAa,CAClB,IAAI,KAAK,CACP,GAAG,YAAY,mDAAmD;wBAChE,wDAAwD,CAC3D,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"alertList.d.ts","sourceRoot":"","sources":["../../src/tools/alertList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmBzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6BhD"}
1
+ {"version":3,"file":"alertList.d.ts","sourceRoot":"","sources":["../../src/tools/alertList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqBzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8BhD"}
@@ -1,9 +1,11 @@
1
1
  import { z } from "zod";
2
2
  import { execSSH, errorResponse } from "../utils/ssh-api.js";
3
3
  import { CommandFailedError } from "../utils/errors.js";
4
+ import { nodeParam } from "../utils/node-param.js";
4
5
  const DEFAULT_PORT = 9093;
5
6
  const SERVICE_NAME = "Alertmanager";
6
7
  const inputSchema = {
8
+ ...nodeParam,
7
9
  state: z
8
10
  .enum(["active", "suppressed", "unprocessed"])
9
11
  .optional()
@@ -18,7 +20,7 @@ export function register(server) {
18
20
  const port = getPort();
19
21
  try {
20
22
  const stateParam = args.state ? `?state=${args.state}` : "";
21
- const output = await execSSH(`curl -sf 'http://localhost:${port}/api/v2/alerts${stateParam}'`);
23
+ const output = await execSSH(`curl -sf 'http://localhost:${port}/api/v2/alerts${stateParam}'`, args.node);
22
24
  return { content: [{ type: "text", text: output }] };
23
25
  }
24
26
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"alertList.js","sourceRoot":"","sources":["../../src/tools/alertList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,YAAY,GAAG,cAAc,CAAC;AAEpC,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;SAC7C,QAAQ,EAAE;SACV,QAAQ,CAAC,uDAAuD,CAAC;CACrE,CAAC;AAEF,SAAS,OAAO;IACd,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACvD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,6DAA6D,EAC7D,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,8BAA8B,IAAI,iBAAiB,UAAU,GAAG,CACjE,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;gBACxC,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,aAAa,CAClB,IAAI,KAAK,CACP,wBAAwB,YAAY,YAAY,IAAI,mBAAmB;wBACrE,4DAA4D,CAC/D,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"alertList.js","sourceRoot":"","sources":["../../src/tools/alertList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,YAAY,GAAG,cAAc,CAAC;AAEpC,MAAM,WAAW,GAAG;IAClB,GAAG,SAAS;IACZ,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;SAC7C,QAAQ,EAAE;SACV,QAAQ,CAAC,uDAAuD,CAAC;CACrE,CAAC;AAEF,SAAS,OAAO;IACd,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACvD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,6DAA6D,EAC7D,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,8BAA8B,IAAI,iBAAiB,UAAU,GAAG,EAChE,IAAI,CAAC,IAAI,CACV,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;gBACxC,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,aAAa,CAClB,IAAI,KAAK,CACP,wBAAwB,YAAY,YAAY,IAAI,mBAAmB;wBACrE,4DAA4D,CAC/D,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"aptHistory.d.ts","sourceRoot":"","sources":["../../src/tools/aptHistory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuBhD"}
1
+ {"version":3,"file":"aptHistory.d.ts","sourceRoot":"","sources":["../../src/tools/aptHistory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuBhD"}
@@ -1,6 +1,8 @@
1
1
  import { z } from "zod";
2
2
  import { execSSH, errorResponse } from "../utils/ssh-api.js";
3
+ import { nodeParam } from "../utils/node-param.js";
3
4
  const inputSchema = {
5
+ ...nodeParam,
4
6
  lines: z
5
7
  .number()
6
8
  .int()
@@ -15,7 +17,7 @@ export function register(server) {
15
17
  const cmd = `(grep -E '(Install|Upgrade|Remove|Commandline)' /var/log/apt/history.log 2>/dev/null; ` +
16
18
  `zgrep -E '(Install|Upgrade|Remove|Commandline)' /var/log/apt/history.log.*.gz 2>/dev/null) ` +
17
19
  `| tail -${args.lines}`;
18
- const output = await execSSH(cmd);
20
+ const output = await execSSH(cmd, args.node);
19
21
  return {
20
22
  content: [{
21
23
  type: "text",
@@ -1 +1 @@
1
- {"version":3,"file":"aptHistory.js","sourceRoot":"","sources":["../../src/tools/aptHistory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,4CAA4C,CAAC;CAC1D,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,sDAAsD,EACtD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,GAAG,GACP,wFAAwF;gBACxF,6FAA6F;gBAC7F,WAAW,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;YAClC,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,MAAM,IAAI,+BAA+B;qBAChD,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"aptHistory.js","sourceRoot":"","sources":["../../src/tools/aptHistory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,WAAW,GAAG;IAClB,GAAG,SAAS;IACZ,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,4CAA4C,CAAC;CAC1D,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,sDAAsD,EACtD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,GAAG,GACP,wFAAwF;gBACxF,6FAA6F;gBAC7F,WAAW,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,MAAM,IAAI,+BAA+B;qBAChD,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"aptUpdate.d.ts","sourceRoot":"","sources":["../../src/tools/aptUpdate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoBhD"}
1
+ {"version":3,"file":"aptUpdate.d.ts","sourceRoot":"","sources":["../../src/tools/aptUpdate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoBhD"}
@@ -1,6 +1,8 @@
1
1
  import { z } from "zod";
2
2
  import { execSSH, errorResponse } from "../utils/ssh-api.js";
3
+ import { nodeParam } from "../utils/node-param.js";
3
4
  const inputSchema = {
5
+ ...nodeParam,
4
6
  upgrade: z
5
7
  .boolean()
6
8
  .optional()
@@ -14,7 +16,7 @@ export function register(server) {
14
16
  if (args.upgrade) {
15
17
  cmd += " && sudo apt-get upgrade -y 2>&1";
16
18
  }
17
- const output = await execSSH(cmd);
19
+ const output = await execSSH(cmd, args.node);
18
20
  return { content: [{ type: "text", text: output }] };
19
21
  }
20
22
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"aptUpdate.js","sourceRoot":"","sources":["../../src/tools/aptUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,2EAA2E,CAAC;CACzF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,uDAAuD,EACvD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,IAAI,GAAG,GAAG,mEAAmE,CAAC;YAC9E,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,GAAG,IAAI,kCAAkC,CAAC;YAC5C,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;YAElC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"aptUpdate.js","sourceRoot":"","sources":["../../src/tools/aptUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,WAAW,GAAG;IAClB,GAAG,SAAS;IACZ,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,2EAA2E,CAAC;CACzF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,uDAAuD,EACvD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,IAAI,GAAG,GAAG,mEAAmE,CAAC;YAC9E,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,GAAG,IAAI,kCAAkC,CAAC;YAC5C,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"aptUpgradable.d.ts","sourceRoot":"","sources":["../../src/tools/aptUpgradable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqBhD"}
1
+ {"version":3,"file":"aptUpgradable.d.ts","sourceRoot":"","sources":["../../src/tools/aptUpgradable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBhD"}
@@ -1,9 +1,10 @@
1
1
  import { execSSH, errorResponse } from "../utils/ssh-api.js";
2
- const inputSchema = {};
2
+ import { nodeParam } from "../utils/node-param.js";
3
+ const inputSchema = { ...nodeParam };
3
4
  export function register(server) {
4
- server.tool("homelab_aptUpgradable", "List upgradable packages with current and candidate versions", inputSchema, async () => {
5
+ server.tool("homelab_aptUpgradable", "List upgradable packages with current and candidate versions", inputSchema, async (args) => {
5
6
  try {
6
- const output = await execSSH("apt list --upgradable 2>/dev/null | grep -v '^Listing'");
7
+ const output = await execSSH("apt list --upgradable 2>/dev/null | grep -v '^Listing'", args.node);
7
8
  return {
8
9
  content: [{
9
10
  type: "text",
@@ -1 +1 @@
1
- {"version":3,"file":"aptUpgradable.js","sourceRoot":"","sources":["../../src/tools/aptUpgradable.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,8DAA8D,EAC9D,WAAW,EACX,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,wDAAwD,CACzD,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,MAAM,IAAI,8BAA8B;qBAC/C,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"aptUpgradable.js","sourceRoot":"","sources":["../../src/tools/aptUpgradable.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,WAAW,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;AAErC,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,8DAA8D,EAC9D,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,wDAAwD,EACxD,IAAI,CAAC,IAAI,CACV,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,MAAM,IAAI,8BAA8B;qBAC/C,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"backupDiff.d.ts","sourceRoot":"","sources":["../../src/tools/backupDiff.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkBhD"}
1
+ {"version":3,"file":"backupDiff.d.ts","sourceRoot":"","sources":["../../src/tools/backupDiff.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmBhD"}
@@ -1,6 +1,8 @@
1
1
  import { z } from "zod";
2
2
  import { execSSH, errorResponse } from "../utils/ssh-api.js";
3
+ import { nodeParam } from "../utils/node-param.js";
3
4
  const inputSchema = {
5
+ ...nodeParam,
4
6
  snapshotA: z.string().min(1).describe("First snapshot ID (older)"),
5
7
  snapshotB: z.string().min(1).describe("Second snapshot ID (newer)"),
6
8
  };
@@ -8,7 +10,7 @@ export function register(server) {
8
10
  server.tool("homelab_backupDiff", "Show the difference between two restic backup snapshots", inputSchema, async (args) => {
9
11
  try {
10
12
  const repo = process.env.HOMELAB_BACKUP_REPO || "/mnt/backup/restic";
11
- const output = await execSSH(`sudo restic -r ${repo} diff '${args.snapshotA}' '${args.snapshotB}' 2>&1`);
13
+ const output = await execSSH(`sudo restic -r ${repo} diff '${args.snapshotA}' '${args.snapshotB}' 2>&1`, args.node);
12
14
  return { content: [{ type: "text", text: output }] };
13
15
  }
14
16
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"backupDiff.js","sourceRoot":"","sources":["../../src/tools/backupDiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,GAAG;IAClB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAClE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;CACpE,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,yDAAyD,EACzD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,oBAAoB,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,kBAAkB,IAAI,UAAU,IAAI,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,QAAQ,CAC3E,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"backupDiff.js","sourceRoot":"","sources":["../../src/tools/backupDiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,WAAW,GAAG;IAClB,GAAG,SAAS;IACZ,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAClE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;CACpE,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,yDAAyD,EACzD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,oBAAoB,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,kBAAkB,IAAI,UAAU,IAAI,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,QAAQ,EAC1E,IAAI,CAAC,IAAI,CACV,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"backupList.d.ts","sourceRoot":"","sources":["../../src/tools/backupList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuBhD"}
1
+ {"version":3,"file":"backupList.d.ts","sourceRoot":"","sources":["../../src/tools/backupList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwBhD"}
@@ -1,6 +1,8 @@
1
1
  import { z } from "zod";
2
2
  import { execSSH, errorResponse } from "../utils/ssh-api.js";
3
+ import { nodeParam } from "../utils/node-param.js";
3
4
  const inputSchema = {
5
+ ...nodeParam,
4
6
  path: z.string().optional().describe("Filter snapshots containing this path"),
5
7
  tag: z.string().optional().describe("Filter snapshots by tag"),
6
8
  host: z.string().optional().describe("Filter snapshots by hostname"),
@@ -17,7 +19,7 @@ export function register(server) {
17
19
  if (args.host)
18
20
  flags.push(`--host '${args.host}'`);
19
21
  const extra = flags.length > 0 ? " " + flags.join(" ") : "";
20
- const output = await execSSH(`sudo restic -r ${repo} snapshots${extra} --json 2>/dev/null || echo "No backup repo found at ${repo} or restic not configured"`);
22
+ const output = await execSSH(`sudo restic -r ${repo} snapshots${extra} --json 2>/dev/null || echo "No backup repo found at ${repo} or restic not configured"`, args.node);
21
23
  return { content: [{ type: "text", text: output }] };
22
24
  }
23
25
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"backupList.js","sourceRoot":"","sources":["../../src/tools/backupList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC7E,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC9D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CACrE,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,gFAAgF,EAChF,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,oBAAoB,CAAC;YACrE,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACnD,IAAI,IAAI,CAAC,GAAG;gBAAE,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,kBAAkB,IAAI,aAAa,KAAK,wDAAwD,IAAI,4BAA4B,CACjI,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"backupList.js","sourceRoot":"","sources":["../../src/tools/backupList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,WAAW,GAAG;IAClB,GAAG,SAAS;IACZ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC7E,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC9D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CACrE,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,gFAAgF,EAChF,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,oBAAoB,CAAC;YACrE,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACnD,IAAI,IAAI,CAAC,GAAG;gBAAE,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,kBAAkB,IAAI,aAAa,KAAK,wDAAwD,IAAI,4BAA4B,EAChI,IAAI,CAAC,IAAI,CACV,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"backupRestore.d.ts","sourceRoot":"","sources":["../../src/tools/backupRestore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqBzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4BhD"}
1
+ {"version":3,"file":"backupRestore.d.ts","sourceRoot":"","sources":["../../src/tools/backupRestore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuBzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6BhD"}
@@ -1,6 +1,8 @@
1
1
  import { z } from "zod";
2
2
  import { execSSH, errorResponse } from "../utils/ssh-api.js";
3
+ import { nodeParam } from "../utils/node-param.js";
3
4
  const inputSchema = {
5
+ ...nodeParam,
4
6
  snapshot: z
5
7
  .string()
6
8
  .min(1)
@@ -30,7 +32,7 @@ export function register(server) {
30
32
  }
31
33
  const repo = process.env.HOMELAB_BACKUP_REPO || "/mnt/backup/restic";
32
34
  const includeFlag = args.include ? ` --include '${args.include}'` : "";
33
- const output = await execSSH(`sudo restic -r ${repo} restore '${args.snapshot}' --target '${args.target}'${includeFlag} 2>&1`);
35
+ const output = await execSSH(`sudo restic -r ${repo} restore '${args.snapshot}' --target '${args.target}'${includeFlag} 2>&1`, args.node);
34
36
  return { content: [{ type: "text", text: output }] };
35
37
  }
36
38
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"backupRestore.js","sourceRoot":"","sources":["../../src/tools/backupRestore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,GAAG;IAClB,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,sEAAsE,CAAC;IACnF,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,CAAC,qDAAqD,CAAC;CACnE,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,wEAAwE,EACxE,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,iDAAiD;yBACxD,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,oBAAoB,CAAC;YACrE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,kBAAkB,IAAI,aAAa,IAAI,CAAC,QAAQ,eAAe,IAAI,CAAC,MAAM,IAAI,WAAW,OAAO,CACjG,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"backupRestore.js","sourceRoot":"","sources":["../../src/tools/backupRestore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,WAAW,GAAG;IAClB,GAAG,SAAS;IACZ,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,sEAAsE,CAAC;IACnF,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,CAAC,qDAAqD,CAAC;CACnE,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,wEAAwE,EACxE,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,iDAAiD;yBACxD,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,oBAAoB,CAAC;YACrE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,kBAAkB,IAAI,aAAa,IAAI,CAAC,QAAQ,eAAe,IAAI,CAAC,MAAM,IAAI,WAAW,OAAO,EAChG,IAAI,CAAC,IAAI,CACV,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"backupRun.d.ts","sourceRoot":"","sources":["../../src/tools/backupRun.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0BhD"}
1
+ {"version":3,"file":"backupRun.d.ts","sourceRoot":"","sources":["../../src/tools/backupRun.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2BhD"}
@@ -1,6 +1,8 @@
1
1
  import { z } from "zod";
2
2
  import { execSSH, errorResponse } from "../utils/ssh-api.js";
3
+ import { nodeParam } from "../utils/node-param.js";
3
4
  const inputSchema = {
5
+ ...nodeParam,
4
6
  confirm: z
5
7
  .boolean()
6
8
  .describe("Must be true to trigger a backup. Safety check."),
@@ -16,7 +18,7 @@ export function register(server) {
16
18
  }],
17
19
  };
18
20
  }
19
- const output = await execSSH("sudo /opt/backup/backup.sh 2>&1 || echo 'Backup script not found at /opt/backup/backup.sh'");
21
+ const output = await execSSH("sudo /opt/backup/backup.sh 2>&1 || echo 'Backup script not found at /opt/backup/backup.sh'", args.node);
20
22
  return { content: [{ type: "text", text: output }] };
21
23
  }
22
24
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"backupRun.js","sourceRoot":"","sources":["../../src/tools/backupRun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,CAAC,iDAAiD,CAAC;CAC/D,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,mCAAmC,EACnC,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,gDAAgD;yBACvD,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,4FAA4F,CAC7F,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"backupRun.js","sourceRoot":"","sources":["../../src/tools/backupRun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,WAAW,GAAG;IAClB,GAAG,SAAS;IACZ,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,CAAC,iDAAiD,CAAC;CAC/D,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,mCAAmC,EACnC,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,gDAAgD;yBACvD,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,4FAA4F,EAC5F,IAAI,CAAC,IAAI,CACV,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"backupStatus.d.ts","sourceRoot":"","sources":["../../src/tools/backupStatus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkBhD"}
1
+ {"version":3,"file":"backupStatus.d.ts","sourceRoot":"","sources":["../../src/tools/backupStatus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmBhD"}
@@ -1,6 +1,8 @@
1
1
  import { z } from "zod";
2
2
  import { execSSH, errorResponse } from "../utils/ssh-api.js";
3
+ import { nodeParam } from "../utils/node-param.js";
3
4
  const inputSchema = {
5
+ ...nodeParam,
4
6
  count: z
5
7
  .number()
6
8
  .int()
@@ -13,7 +15,7 @@ export function register(server) {
13
15
  server.tool("homelab_backupStatus", "Check the latest restic backup snapshots on the Pi", inputSchema, async (args) => {
14
16
  try {
15
17
  const repo = process.env.HOMELAB_BACKUP_REPO || "/mnt/backup/restic";
16
- const output = await execSSH(`sudo restic -r ${repo} snapshots --latest ${args.count} 2>/dev/null || echo "No backup repo found at ${repo} or restic not configured"`);
18
+ const output = await execSSH(`sudo restic -r ${repo} snapshots --latest ${args.count} 2>/dev/null || echo "No backup repo found at ${repo} or restic not configured"`, args.node);
17
19
  return { content: [{ type: "text", text: output }] };
18
20
  }
19
21
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"backupStatus.js","sourceRoot":"","sources":["../../src/tools/backupStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC,oCAAoC,CAAC;CAClD,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,oDAAoD,EACpD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,oBAAoB,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,kBAAkB,IAAI,uBAAuB,IAAI,CAAC,KAAK,iDAAiD,IAAI,4BAA4B,CACzI,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"backupStatus.js","sourceRoot":"","sources":["../../src/tools/backupStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,WAAW,GAAG;IAClB,GAAG,SAAS;IACZ,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC,oCAAoC,CAAC;CAClD,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,oDAAoD,EACpD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,oBAAoB,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,kBAAkB,IAAI,uBAAuB,IAAI,CAAC,KAAK,iDAAiD,IAAI,4BAA4B,EACxI,IAAI,CAAC,IAAI,CACV,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=certCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certCheck.d.ts","sourceRoot":"","sources":["../../src/tools/certCheck.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwBhD"}
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ import { execSSH, errorResponse } from "../utils/ssh-api.js";
3
+ import { nodeParam } from "../utils/node-param.js";
4
+ const inputSchema = {
5
+ ...nodeParam,
6
+ domain: z
7
+ .string()
8
+ .min(1)
9
+ .describe("Domain or host:port to check SSL certificate for (e.g. 'example.com' or 'example.com:8443')"),
10
+ };
11
+ export function register(server) {
12
+ server.tool("homelab_certCheck", "Check SSL certificate expiry, issuer, and fingerprint for a domain", inputSchema, async (args) => {
13
+ try {
14
+ const target = args.domain.includes(":") ? args.domain : `${args.domain}:443`;
15
+ const serverName = args.domain.split(":")[0];
16
+ const cmd = `echo | openssl s_client -servername '${serverName}' -connect '${target}' 2>/dev/null ` +
17
+ `| openssl x509 -noout -subject -issuer -dates -fingerprint 2>&1`;
18
+ const output = await execSSH(cmd, args.node);
19
+ return {
20
+ content: [{
21
+ type: "text",
22
+ text: output || `Could not retrieve certificate for ${args.domain}. Verify the host is reachable and serving TLS.`,
23
+ }],
24
+ };
25
+ }
26
+ catch (error) {
27
+ return errorResponse(error);
28
+ }
29
+ });
30
+ }
31
+ //# sourceMappingURL=certCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certCheck.js","sourceRoot":"","sources":["../../src/tools/certCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,WAAW,GAAG;IAClB,GAAG,SAAS;IACZ,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,6FAA6F,CAAC;CAC3G,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,oEAAoE,EACpE,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,MAAM,CAAC;YAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,GAAG,GACP,wCAAwC,UAAU,eAAe,MAAM,gBAAgB;gBACvF,iEAAiE,CAAC;YACpE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,MAAM,IAAI,sCAAsC,IAAI,CAAC,MAAM,iDAAiD;qBACnH,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=certList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certList.d.ts","sourceRoot":"","sources":["../../src/tools/certList.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoDhD"}
@@ -0,0 +1,40 @@
1
+ import { execSSH } from "../utils/ssh-api.js";
2
+ import { nodeParam } from "../utils/node-param.js";
3
+ const inputSchema = { ...nodeParam };
4
+ export function register(server) {
5
+ server.tool("homelab_certList", "List all managed SSL certificates from certbot and Nginx Proxy Manager", inputSchema, async (args) => {
6
+ const sections = [];
7
+ try {
8
+ const certbotCheck = await execSSH("command -v certbot >/dev/null 2>&1 && echo 'installed' || echo 'missing'", args.node);
9
+ if (certbotCheck.trim() === "installed") {
10
+ const certbotOutput = await execSSH("sudo certbot certificates 2>&1", args.node);
11
+ sections.push("=== Certbot Certificates ===\n" + certbotOutput);
12
+ }
13
+ else {
14
+ sections.push("=== Certbot ===\nNot installed. Skipping.");
15
+ }
16
+ }
17
+ catch (error) {
18
+ sections.push("=== Certbot ===\nFailed to query certbot certificates.");
19
+ }
20
+ try {
21
+ const npmPort = process.env.HOMELAB_NPM_PORT
22
+ ? parseInt(process.env.HOMELAB_NPM_PORT, 10)
23
+ : 81;
24
+ const email = process.env.HOMELAB_NPM_EMAIL || "admin@example.com";
25
+ const password = process.env.HOMELAB_NPM_PASSWORD || "changeme";
26
+ const payload = JSON.stringify({ identity: email, secret: password });
27
+ const tokenOutput = await execSSH(`curl -sf -X POST -H 'Content-Type: application/json' ` +
28
+ `-d '${payload}' 'http://localhost:${npmPort}/api/tokens'`, args.node);
29
+ const token = JSON.parse(tokenOutput).token;
30
+ const certsOutput = await execSSH(`curl -sf -H 'Authorization: Bearer ${token}' ` +
31
+ `'http://localhost:${npmPort}/api/nginx/certificates'`, args.node);
32
+ sections.push("\n=== Nginx Proxy Manager Certificates ===\n" + certsOutput);
33
+ }
34
+ catch {
35
+ sections.push("\n=== Nginx Proxy Manager ===\nCould not query NPM certificates. Check connectivity and credentials.");
36
+ }
37
+ return { content: [{ type: "text", text: sections.join("\n") }] };
38
+ });
39
+ }
40
+ //# sourceMappingURL=certList.js.map