@tmhs/homelab-mcp 0.8.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.
- package/README.md +7 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/adguardFilters.d.ts.map +1 -1
- package/dist/tools/adguardFilters.js +3 -2
- package/dist/tools/adguardFilters.js.map +1 -1
- package/dist/tools/adguardQueryLog.d.ts.map +1 -1
- package/dist/tools/adguardQueryLog.js +3 -1
- package/dist/tools/adguardQueryLog.js.map +1 -1
- package/dist/tools/adguardStats.d.ts.map +1 -1
- package/dist/tools/adguardStats.js +3 -2
- package/dist/tools/adguardStats.js.map +1 -1
- package/dist/tools/alertList.d.ts.map +1 -1
- package/dist/tools/alertList.js +3 -1
- package/dist/tools/alertList.js.map +1 -1
- package/dist/tools/aptHistory.d.ts.map +1 -1
- package/dist/tools/aptHistory.js +3 -1
- package/dist/tools/aptHistory.js.map +1 -1
- package/dist/tools/aptUpdate.d.ts.map +1 -1
- package/dist/tools/aptUpdate.js +3 -1
- package/dist/tools/aptUpdate.js.map +1 -1
- package/dist/tools/aptUpgradable.d.ts.map +1 -1
- package/dist/tools/aptUpgradable.js +4 -3
- package/dist/tools/aptUpgradable.js.map +1 -1
- package/dist/tools/backupDiff.d.ts.map +1 -1
- package/dist/tools/backupDiff.js +3 -1
- package/dist/tools/backupDiff.js.map +1 -1
- package/dist/tools/backupList.d.ts.map +1 -1
- package/dist/tools/backupList.js +3 -1
- package/dist/tools/backupList.js.map +1 -1
- package/dist/tools/backupRestore.d.ts.map +1 -1
- package/dist/tools/backupRestore.js +3 -1
- package/dist/tools/backupRestore.js.map +1 -1
- package/dist/tools/backupRun.d.ts.map +1 -1
- package/dist/tools/backupRun.js +3 -1
- package/dist/tools/backupRun.js.map +1 -1
- package/dist/tools/backupStatus.d.ts.map +1 -1
- package/dist/tools/backupStatus.js +3 -1
- package/dist/tools/backupStatus.js.map +1 -1
- package/dist/tools/certCheck.d.ts.map +1 -1
- package/dist/tools/certCheck.js +3 -1
- package/dist/tools/certCheck.js.map +1 -1
- package/dist/tools/certList.d.ts.map +1 -1
- package/dist/tools/certList.js +7 -6
- package/dist/tools/certList.js.map +1 -1
- package/dist/tools/certRenew.d.ts.map +1 -1
- package/dist/tools/certRenew.js +4 -2
- package/dist/tools/certRenew.js.map +1 -1
- package/dist/tools/composeDown.d.ts.map +1 -1
- package/dist/tools/composeDown.js +3 -1
- package/dist/tools/composeDown.js.map +1 -1
- package/dist/tools/composePs.d.ts.map +1 -1
- package/dist/tools/composePs.js +3 -2
- package/dist/tools/composePs.js.map +1 -1
- package/dist/tools/composePull.d.ts.map +1 -1
- package/dist/tools/composePull.js +3 -1
- package/dist/tools/composePull.js.map +1 -1
- package/dist/tools/composeUp.d.ts.map +1 -1
- package/dist/tools/composeUp.js +3 -1
- package/dist/tools/composeUp.js.map +1 -1
- package/dist/tools/containerScan.d.ts.map +1 -1
- package/dist/tools/containerScan.js +4 -2
- package/dist/tools/containerScan.js.map +1 -1
- package/dist/tools/diskUsage.d.ts.map +1 -1
- package/dist/tools/diskUsage.js +3 -1
- package/dist/tools/diskUsage.js.map +1 -1
- package/dist/tools/fail2banStatus.d.ts.map +1 -1
- package/dist/tools/fail2banStatus.js +3 -1
- package/dist/tools/fail2banStatus.js.map +1 -1
- package/dist/tools/grafanaSnapshot.d.ts.map +1 -1
- package/dist/tools/grafanaSnapshot.js +3 -1
- package/dist/tools/grafanaSnapshot.js.map +1 -1
- package/dist/tools/inventorySync.d.ts +3 -0
- package/dist/tools/inventorySync.d.ts.map +1 -0
- package/dist/tools/inventorySync.js +36 -0
- package/dist/tools/inventorySync.js.map +1 -0
- package/dist/tools/journalLogs.d.ts.map +1 -1
- package/dist/tools/journalLogs.js +3 -1
- package/dist/tools/journalLogs.js.map +1 -1
- package/dist/tools/kernelInfo.d.ts.map +1 -1
- package/dist/tools/kernelInfo.js +4 -3
- package/dist/tools/kernelInfo.js.map +1 -1
- package/dist/tools/logSearch.d.ts.map +1 -1
- package/dist/tools/logSearch.js +3 -1
- package/dist/tools/logSearch.js.map +1 -1
- package/dist/tools/networkInfo.d.ts.map +1 -1
- package/dist/tools/networkInfo.js +3 -2
- package/dist/tools/networkInfo.js.map +1 -1
- package/dist/tools/nodeExec.d.ts +3 -0
- package/dist/tools/nodeExec.d.ts.map +1 -0
- package/dist/tools/nodeExec.js +34 -0
- package/dist/tools/nodeExec.js.map +1 -0
- package/dist/tools/nodeList.d.ts +3 -0
- package/dist/tools/nodeList.d.ts.map +1 -0
- package/dist/tools/nodeList.js +24 -0
- package/dist/tools/nodeList.js.map +1 -0
- package/dist/tools/nodeStatus.d.ts +3 -0
- package/dist/tools/nodeStatus.d.ts.map +1 -0
- package/dist/tools/nodeStatus.js +30 -0
- package/dist/tools/nodeStatus.js.map +1 -0
- package/dist/tools/npmCerts.d.ts.map +1 -1
- package/dist/tools/npmCerts.js +6 -5
- package/dist/tools/npmCerts.js.map +1 -1
- package/dist/tools/npmProxyHosts.d.ts.map +1 -1
- package/dist/tools/npmProxyHosts.js +6 -5
- package/dist/tools/npmProxyHosts.js.map +1 -1
- package/dist/tools/ntfySend.d.ts.map +1 -1
- package/dist/tools/ntfySend.js +3 -1
- package/dist/tools/ntfySend.js.map +1 -1
- package/dist/tools/ntfyTopics.d.ts.map +1 -1
- package/dist/tools/ntfyTopics.js +3 -1
- package/dist/tools/ntfyTopics.js.map +1 -1
- package/dist/tools/openPorts.d.ts.map +1 -1
- package/dist/tools/openPorts.js +3 -2
- package/dist/tools/openPorts.js.map +1 -1
- package/dist/tools/piReboot.d.ts.map +1 -1
- package/dist/tools/piReboot.js +5 -3
- package/dist/tools/piReboot.js.map +1 -1
- package/dist/tools/piStatus.d.ts.map +1 -1
- package/dist/tools/piStatus.js +3 -2
- package/dist/tools/piStatus.js.map +1 -1
- package/dist/tools/prometheusQuery.d.ts.map +1 -1
- package/dist/tools/prometheusQuery.js +3 -1
- package/dist/tools/prometheusQuery.js.map +1 -1
- package/dist/tools/serviceHealth.d.ts.map +1 -1
- package/dist/tools/serviceHealth.js +4 -2
- package/dist/tools/serviceHealth.js.map +1 -1
- package/dist/tools/serviceLogs.d.ts.map +1 -1
- package/dist/tools/serviceLogs.js +3 -1
- package/dist/tools/serviceLogs.js.map +1 -1
- package/dist/tools/serviceRestart.d.ts.map +1 -1
- package/dist/tools/serviceRestart.js +4 -2
- package/dist/tools/serviceRestart.js.map +1 -1
- package/dist/tools/speedtestResults.d.ts.map +1 -1
- package/dist/tools/speedtestResults.js +3 -1
- package/dist/tools/speedtestResults.js.map +1 -1
- package/dist/tools/sshTest.d.ts.map +1 -1
- package/dist/tools/sshTest.js +3 -2
- package/dist/tools/sshTest.js.map +1 -1
- package/dist/tools/systemdServices.d.ts.map +1 -1
- package/dist/tools/systemdServices.js +3 -1
- package/dist/tools/systemdServices.js.map +1 -1
- package/dist/tools/ufwStatus.d.ts.map +1 -1
- package/dist/tools/ufwStatus.js +3 -2
- package/dist/tools/ufwStatus.js.map +1 -1
- package/dist/tools/uptimeKumaStatus.d.ts.map +1 -1
- package/dist/tools/uptimeKumaStatus.js +3 -2
- package/dist/tools/uptimeKumaStatus.js.map +1 -1
- package/dist/tools/volumeBackup.d.ts.map +1 -1
- package/dist/tools/volumeBackup.js +3 -1
- package/dist/tools/volumeBackup.js.map +1 -1
- package/dist/utils/node-param.d.ts +5 -0
- package/dist/utils/node-param.d.ts.map +1 -0
- package/dist/utils/node-param.js +8 -0
- package/dist/utils/node-param.js.map +1 -0
- package/dist/utils/ssh-api.d.ts +12 -1
- package/dist/utils/ssh-api.d.ts.map +1 -1
- package/dist/utils/ssh-api.js +50 -7
- package/dist/utils/ssh-api.js.map +1 -1
- 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
|
|
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
|
|
|
@@ -49,6 +49,10 @@ MCP (Model Context Protocol) server for home lab operations. Connects to a Raspb
|
|
|
49
49
|
| Certificates | `homelab_certCheck` | Check SSL certificate expiry, issuer, and fingerprint |
|
|
50
50
|
| Certificates | `homelab_certRenew` | Trigger Let's Encrypt certificate renewal |
|
|
51
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 |
|
|
52
56
|
| SSH | `homelab_sshTest` | Test SSH connectivity |
|
|
53
57
|
|
|
54
58
|
## Setup
|
|
@@ -85,6 +89,8 @@ Set environment variables:
|
|
|
85
89
|
| `HOMELAB_NPM_PASSWORD` | `changeme` | NPM admin password |
|
|
86
90
|
| `HOMELAB_NPM_PORT` | `81` | NPM admin API port override |
|
|
87
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 |
|
|
88
94
|
|
|
89
95
|
## Usage with Cursor
|
|
90
96
|
|
package/dist/index.js
CHANGED
|
@@ -45,9 +45,13 @@ import { register as registerSystemdServices } from "./tools/systemdServices.js"
|
|
|
45
45
|
import { register as registerCertCheck } from "./tools/certCheck.js";
|
|
46
46
|
import { register as registerCertRenew } from "./tools/certRenew.js";
|
|
47
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";
|
|
48
52
|
const server = new McpServer({
|
|
49
53
|
name: "homelab-mcp",
|
|
50
|
-
version: "0.
|
|
54
|
+
version: "0.9.0",
|
|
51
55
|
});
|
|
52
56
|
registerPiStatus(server);
|
|
53
57
|
registerPiReboot(server);
|
|
@@ -93,6 +97,10 @@ registerSystemdServices(server);
|
|
|
93
97
|
registerCertCheck(server);
|
|
94
98
|
registerCertRenew(server);
|
|
95
99
|
registerCertList(server);
|
|
100
|
+
registerNodeList(server);
|
|
101
|
+
registerNodeExec(server);
|
|
102
|
+
registerNodeStatus(server);
|
|
103
|
+
registerInventorySync(server);
|
|
96
104
|
async function main() {
|
|
97
105
|
const transport = new StdioServerTransport();
|
|
98
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":"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"}
|
|
@@ -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;
|
|
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;
|
|
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;
|
|
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;
|
|
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;
|
|
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;
|
|
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;
|
|
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"}
|
package/dist/tools/alertList.js
CHANGED
|
@@ -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;
|
|
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;
|
|
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"}
|
package/dist/tools/aptHistory.js
CHANGED
|
@@ -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;
|
|
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;
|
|
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"}
|
package/dist/tools/aptUpdate.js
CHANGED
|
@@ -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;
|
|
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;
|
|
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
|
-
|
|
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;
|
|
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;
|
|
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"}
|
package/dist/tools/backupDiff.js
CHANGED
|
@@ -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;
|
|
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;
|
|
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"}
|
package/dist/tools/backupList.js
CHANGED
|
@@ -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;
|
|
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;
|
|
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;
|
|
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;
|
|
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"}
|
package/dist/tools/backupRun.js
CHANGED
|
@@ -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;
|
|
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;
|
|
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;
|
|
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"}
|
|
@@ -1 +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;
|
|
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"}
|
package/dist/tools/certCheck.js
CHANGED
|
@@ -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
|
domain: z
|
|
5
7
|
.string()
|
|
6
8
|
.min(1)
|
|
@@ -13,7 +15,7 @@ export function register(server) {
|
|
|
13
15
|
const serverName = args.domain.split(":")[0];
|
|
14
16
|
const cmd = `echo | openssl s_client -servername '${serverName}' -connect '${target}' 2>/dev/null ` +
|
|
15
17
|
`| openssl x509 -noout -subject -issuer -dates -fingerprint 2>&1`;
|
|
16
|
-
const output = await execSSH(cmd);
|
|
18
|
+
const output = await execSSH(cmd, args.node);
|
|
17
19
|
return {
|
|
18
20
|
content: [{
|
|
19
21
|
type: "text",
|
|
@@ -1 +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;
|
|
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"}
|
|
@@ -1 +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;
|
|
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"}
|
package/dist/tools/certList.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { execSSH } from "../utils/ssh-api.js";
|
|
2
|
-
|
|
2
|
+
import { nodeParam } from "../utils/node-param.js";
|
|
3
|
+
const inputSchema = { ...nodeParam };
|
|
3
4
|
export function register(server) {
|
|
4
|
-
server.tool("homelab_certList", "List all managed SSL certificates from certbot and Nginx Proxy Manager", inputSchema, async () => {
|
|
5
|
+
server.tool("homelab_certList", "List all managed SSL certificates from certbot and Nginx Proxy Manager", inputSchema, async (args) => {
|
|
5
6
|
const sections = [];
|
|
6
7
|
try {
|
|
7
|
-
const certbotCheck = await execSSH("command -v certbot >/dev/null 2>&1 && echo 'installed' || echo 'missing'");
|
|
8
|
+
const certbotCheck = await execSSH("command -v certbot >/dev/null 2>&1 && echo 'installed' || echo 'missing'", args.node);
|
|
8
9
|
if (certbotCheck.trim() === "installed") {
|
|
9
|
-
const certbotOutput = await execSSH("sudo certbot certificates 2>&1");
|
|
10
|
+
const certbotOutput = await execSSH("sudo certbot certificates 2>&1", args.node);
|
|
10
11
|
sections.push("=== Certbot Certificates ===\n" + certbotOutput);
|
|
11
12
|
}
|
|
12
13
|
else {
|
|
@@ -24,10 +25,10 @@ export function register(server) {
|
|
|
24
25
|
const password = process.env.HOMELAB_NPM_PASSWORD || "changeme";
|
|
25
26
|
const payload = JSON.stringify({ identity: email, secret: password });
|
|
26
27
|
const tokenOutput = await execSSH(`curl -sf -X POST -H 'Content-Type: application/json' ` +
|
|
27
|
-
`-d '${payload}' 'http://localhost:${npmPort}/api/tokens'
|
|
28
|
+
`-d '${payload}' 'http://localhost:${npmPort}/api/tokens'`, args.node);
|
|
28
29
|
const token = JSON.parse(tokenOutput).token;
|
|
29
30
|
const certsOutput = await execSSH(`curl -sf -H 'Authorization: Bearer ${token}' ` +
|
|
30
|
-
`'http://localhost:${npmPort}/api/nginx/certificates'
|
|
31
|
+
`'http://localhost:${npmPort}/api/nginx/certificates'`, args.node);
|
|
31
32
|
sections.push("\n=== Nginx Proxy Manager Certificates ===\n" + certsOutput);
|
|
32
33
|
}
|
|
33
34
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"certList.js","sourceRoot":"","sources":["../../src/tools/certList.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAiB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"certList.js","sourceRoot":"","sources":["../../src/tools/certList.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAiB,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,kBAAkB,EAClB,wEAAwE,EACxE,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,OAAO,CAChC,0EAA0E,EAC1E,IAAI,CAAC,IAAI,CACV,CAAC;YAEF,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,WAAW,EAAE,CAAC;gBACxC,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,gCAAgC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjF,QAAQ,CAAC,IAAI,CAAC,gCAAgC,GAAG,aAAa,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB;gBAC1C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC;gBAC5C,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,mBAAmB,CAAC;YACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,UAAU,CAAC;YAChE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEtE,MAAM,WAAW,GAAG,MAAM,OAAO,CAC/B,uDAAuD;gBACrD,OAAO,OAAO,uBAAuB,OAAO,cAAc,EAC5D,IAAI,CAAC,IAAI,CACV,CAAC;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;YAE5C,MAAM,WAAW,GAAG,MAAM,OAAO,CAC/B,sCAAsC,KAAK,IAAI;gBAC7C,qBAAqB,OAAO,0BAA0B,EACxD,IAAI,CAAC,IAAI,CACV,CAAC;YACF,QAAQ,CAAC,IAAI,CAAC,8CAA8C,GAAG,WAAW,CAAC,CAAC;QAC9E,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,IAAI,CAAC,sGAAsG,CAAC,CAAC;QACxH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7E,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"certRenew.d.ts","sourceRoot":"","sources":["../../src/tools/certRenew.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"certRenew.d.ts","sourceRoot":"","sources":["../../src/tools/certRenew.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0ChD"}
|