zapret2-mcp 0.3.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/CHANGELOG.md +50 -0
- package/LICENSE +21 -0
- package/README.md +238 -0
- package/build/executor/docker.d.ts +7 -0
- package/build/executor/docker.js +22 -0
- package/build/executor/docker.js.map +1 -0
- package/build/executor/factory.d.ts +2 -0
- package/build/executor/factory.js +27 -0
- package/build/executor/factory.js.map +1 -0
- package/build/executor/index.d.ts +6 -0
- package/build/executor/index.js +5 -0
- package/build/executor/index.js.map +1 -0
- package/build/executor/local.d.ts +5 -0
- package/build/executor/local.js +17 -0
- package/build/executor/local.js.map +1 -0
- package/build/executor/ssh.d.ts +13 -0
- package/build/executor/ssh.js +33 -0
- package/build/executor/ssh.js.map +1 -0
- package/build/executor/types.d.ts +8 -0
- package/build/executor/types.js +2 -0
- package/build/executor/types.js.map +1 -0
- package/build/executorInstance.d.ts +3 -0
- package/build/executorInstance.js +11 -0
- package/build/executorInstance.js.map +1 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +75 -0
- package/build/index.js.map +1 -0
- package/build/logStore.d.ts +12 -0
- package/build/logStore.js +76 -0
- package/build/logStore.js.map +1 -0
- package/build/prompts.d.ts +2 -0
- package/build/prompts.js +156 -0
- package/build/prompts.js.map +1 -0
- package/build/resources.d.ts +2 -0
- package/build/resources.js +41 -0
- package/build/resources.js.map +1 -0
- package/build/tools/checkPrerequisites.d.ts +19 -0
- package/build/tools/checkPrerequisites.js +116 -0
- package/build/tools/checkPrerequisites.js.map +1 -0
- package/build/tools/configureDns.d.ts +35 -0
- package/build/tools/configureDns.js +106 -0
- package/build/tools/configureDns.js.map +1 -0
- package/build/tools/createSystemdService.d.ts +27 -0
- package/build/tools/createSystemdService.js +74 -0
- package/build/tools/createSystemdService.js.map +1 -0
- package/build/tools/detectSystem.d.ts +19 -0
- package/build/tools/detectSystem.js +89 -0
- package/build/tools/detectSystem.js.map +1 -0
- package/build/tools/getConfig.d.ts +27 -0
- package/build/tools/getConfig.js +30 -0
- package/build/tools/getConfig.js.map +1 -0
- package/build/tools/getStatus.d.ts +19 -0
- package/build/tools/getStatus.js +35 -0
- package/build/tools/getStatus.js.map +1 -0
- package/build/tools/installZapret.d.ts +31 -0
- package/build/tools/installZapret.js +84 -0
- package/build/tools/installZapret.js.map +1 -0
- package/build/tools/restartService.d.ts +19 -0
- package/build/tools/restartService.js +24 -0
- package/build/tools/restartService.js.map +1 -0
- package/build/tools/runBlockcheck.d.ts +31 -0
- package/build/tools/runBlockcheck.js +44 -0
- package/build/tools/runBlockcheck.js.map +1 -0
- package/build/tools/startService.d.ts +19 -0
- package/build/tools/startService.js +24 -0
- package/build/tools/startService.js.map +1 -0
- package/build/tools/stopService.d.ts +19 -0
- package/build/tools/stopService.js +24 -0
- package/build/tools/stopService.js.map +1 -0
- package/build/tools/updateConfig.d.ts +31 -0
- package/build/tools/updateConfig.js +50 -0
- package/build/tools/updateConfig.js.map +1 -0
- package/build/tools/verifyBypass.d.ts +31 -0
- package/build/tools/verifyBypass.js +62 -0
- package/build/tools/verifyBypass.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getExecutor } from "../executorInstance.js";
|
|
3
|
+
import { saveLog } from "../logStore.js";
|
|
4
|
+
export const stopServiceTool = {
|
|
5
|
+
name: "stopService",
|
|
6
|
+
description: "Stop zapret2 service (nfqws2 daemon). Logs saved to resources. Required before runBlockcheck.",
|
|
7
|
+
schema: z.object({}),
|
|
8
|
+
handler: async () => {
|
|
9
|
+
try {
|
|
10
|
+
const { stdout, stderr } = await getExecutor().exec("/opt/zapret2/init.d/sysv/zapret2 stop");
|
|
11
|
+
const output = (stdout + stderr).trim() || "Service stopped";
|
|
12
|
+
saveLog("service", output, { action: "stop" });
|
|
13
|
+
return { content: [{ type: "text", text: output }] };
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
const e = err;
|
|
17
|
+
return {
|
|
18
|
+
content: [{ type: "text", text: `Error: ${(e.stdout || "") + (e.stderr || "") || e.error?.message || "unknown error"}` }],
|
|
19
|
+
isError: true,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=stopService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stopService.js","sourceRoot":"","sources":["../../src/tools/stopService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,+FAA+F;IAC5G,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YAC7F,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,iBAAiB,CAAC;YAC7D,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,GAA0D,CAAC;YACrE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,IAAI,eAAe,EAAE,EAAE,CAAC;gBAClI,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const updateConfigTool: {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
schema: z.ZodObject<{
|
|
6
|
+
key: z.ZodString;
|
|
7
|
+
value: z.ZodString;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
value: string;
|
|
10
|
+
key: string;
|
|
11
|
+
}, {
|
|
12
|
+
value: string;
|
|
13
|
+
key: string;
|
|
14
|
+
}>;
|
|
15
|
+
handler: (args: {
|
|
16
|
+
key: string;
|
|
17
|
+
value: string;
|
|
18
|
+
}) => Promise<{
|
|
19
|
+
content: {
|
|
20
|
+
type: "text";
|
|
21
|
+
text: string;
|
|
22
|
+
}[];
|
|
23
|
+
isError: boolean;
|
|
24
|
+
} | {
|
|
25
|
+
content: {
|
|
26
|
+
type: "text";
|
|
27
|
+
text: string;
|
|
28
|
+
}[];
|
|
29
|
+
isError?: undefined;
|
|
30
|
+
}>;
|
|
31
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getExecutor } from "../executorInstance.js";
|
|
3
|
+
import { saveLog } from "../logStore.js";
|
|
4
|
+
export const updateConfigTool = {
|
|
5
|
+
name: "updateConfig",
|
|
6
|
+
description: "Update a parameter in zapret2 config (/opt/zapret2/config). Replaces the value of an existing key. Config snapshot saved to resources before change. Restart service to apply.",
|
|
7
|
+
schema: z.object({
|
|
8
|
+
key: z.string().describe("Config key to update (e.g. NFQWS2_ENABLE, NFQWS2_OPT)"),
|
|
9
|
+
value: z.string().describe("New value for the key"),
|
|
10
|
+
}),
|
|
11
|
+
handler: async (args) => {
|
|
12
|
+
const { key, value } = args;
|
|
13
|
+
const safeKey = key.replace(/[^A-Za-z0-9_]/g, "");
|
|
14
|
+
if (safeKey !== key) {
|
|
15
|
+
return {
|
|
16
|
+
content: [{ type: "text", text: "Error: key must contain only alphanumeric characters and underscores" }],
|
|
17
|
+
isError: true,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const b64Value = Buffer.from(value).toString("base64");
|
|
21
|
+
try {
|
|
22
|
+
// Snapshot config before change
|
|
23
|
+
const { stdout: configSnapshot } = await getExecutor().exec("cat /opt/zapret2/config");
|
|
24
|
+
saveLog("config", configSnapshot, { key: safeKey, value });
|
|
25
|
+
const script = `
|
|
26
|
+
VALUE=$(printf '%s' '${b64Value}' | base64 -d)
|
|
27
|
+
export VALUE
|
|
28
|
+
if grep -qE '^${safeKey}=' /opt/zapret2/config; then
|
|
29
|
+
awk -v key="${safeKey}" 'BEGIN{val=ENVIRON["VALUE"]} $0 ~ "^" key "=" {print key "=" val; next} {print}' /opt/zapret2/config > /opt/zapret2/config.tmp && mv /opt/zapret2/config.tmp /opt/zapret2/config
|
|
30
|
+
echo "Updated ${safeKey}:"
|
|
31
|
+
grep -E '^${safeKey}=' /opt/zapret2/config
|
|
32
|
+
else
|
|
33
|
+
printf '%s=%s\\n' '${safeKey}' "$VALUE" >> /opt/zapret2/config
|
|
34
|
+
echo "Added ${safeKey}:"
|
|
35
|
+
grep -E '^${safeKey}=' /opt/zapret2/config
|
|
36
|
+
fi
|
|
37
|
+
`;
|
|
38
|
+
const { stdout } = await getExecutor().exec(script);
|
|
39
|
+
return { content: [{ type: "text", text: stdout.trim() }] };
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
const e = err;
|
|
43
|
+
return {
|
|
44
|
+
content: [{ type: "text", text: `Error: ${e.stderr || e.error?.message || "unknown error"}` }],
|
|
45
|
+
isError: true,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=updateConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateConfig.js","sourceRoot":"","sources":["../../src/tools/updateConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,gLAAgL;IAC7L,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;QACjF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KACpD,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAoC,EAAE,EAAE;QACtD,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAE5B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,sEAAsE,EAAE,CAAC;gBAClH,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEvD,IAAI,CAAC;YACH,gCAAgC;YAChC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACvF,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAE3D,MAAM,MAAM,GAAG;+BACU,QAAQ;;wBAEf,OAAO;wBACP,OAAO;0BACL,OAAO;sBACX,OAAO;;+BAEE,OAAO;wBACd,OAAO;sBACT,OAAO;;OAEtB,CAAC;YACF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;QACvE,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,GAA0D,CAAC;YACrE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,IAAI,eAAe,EAAE,EAAE,CAAC;gBACvG,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const verifyBypassTool: {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
schema: z.ZodObject<{
|
|
6
|
+
domain: z.ZodDefault<z.ZodString>;
|
|
7
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
domain: string;
|
|
10
|
+
timeout: number;
|
|
11
|
+
}, {
|
|
12
|
+
domain?: string | undefined;
|
|
13
|
+
timeout?: number | undefined;
|
|
14
|
+
}>;
|
|
15
|
+
handler: (args: {
|
|
16
|
+
domain?: string;
|
|
17
|
+
timeout?: number;
|
|
18
|
+
}) => Promise<{
|
|
19
|
+
content: {
|
|
20
|
+
type: "text";
|
|
21
|
+
text: string;
|
|
22
|
+
}[];
|
|
23
|
+
isError?: undefined;
|
|
24
|
+
} | {
|
|
25
|
+
content: {
|
|
26
|
+
type: "text";
|
|
27
|
+
text: string;
|
|
28
|
+
}[];
|
|
29
|
+
isError: boolean;
|
|
30
|
+
}>;
|
|
31
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getExecutor } from "../executorInstance.js";
|
|
3
|
+
export const verifyBypassTool = {
|
|
4
|
+
name: "verifyBypass",
|
|
5
|
+
description: "Verify network connectivity: DNS resolution, HTTP request, and nfqws2 running status for a given domain. Use after startService or restartService to confirm zapret2 is working.",
|
|
6
|
+
schema: z.object({
|
|
7
|
+
domain: z.string().default("example.com").describe("Domain to verify bypass for (default: example.com)"),
|
|
8
|
+
timeout: z.number().default(10).describe("HTTP request timeout in seconds (default: 10)"),
|
|
9
|
+
}),
|
|
10
|
+
handler: async (args) => {
|
|
11
|
+
const domain = args.domain || "example.com";
|
|
12
|
+
const timeout = args.timeout || 10;
|
|
13
|
+
const script = `
|
|
14
|
+
DNS_RESOLVED="false"
|
|
15
|
+
DNS_IP=""
|
|
16
|
+
IP=$(nslookup "${domain}" 2>/dev/null | grep -A1 "Name:" | grep "Address:" | head -1 | awk '{print $2}')
|
|
17
|
+
if [ -z "$IP" ]; then
|
|
18
|
+
IP=$(getent hosts "${domain}" 2>/dev/null | awk '{print $1}' | head -1)
|
|
19
|
+
fi
|
|
20
|
+
if [ -n "$IP" ]; then
|
|
21
|
+
DNS_RESOLVED="true"
|
|
22
|
+
DNS_IP="$IP"
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
HTTP_CODE="0"
|
|
26
|
+
CURL_EXIT="0"
|
|
27
|
+
if command -v curl >/dev/null 2>&1; then
|
|
28
|
+
HTTP_CODE=$(curl -sL -o /dev/null -w '%{http_code}' --max-time ${timeout} "https://${domain}/" 2>/dev/null || true)
|
|
29
|
+
CURL_EXIT=$?
|
|
30
|
+
if [ -z "$HTTP_CODE" ]; then HTTP_CODE="0"; fi
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
ZAPRET_RUNNING="false"
|
|
34
|
+
if pgrep -x nfqws2 >/dev/null 2>&1; then
|
|
35
|
+
ZAPRET_RUNNING="true"
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
cat <<EOJSON
|
|
39
|
+
{
|
|
40
|
+
"domain": "${domain}",
|
|
41
|
+
"dnsResolved": $DNS_RESOLVED,
|
|
42
|
+
"dnsIp": "$DNS_IP",
|
|
43
|
+
"httpCode": "$HTTP_CODE",
|
|
44
|
+
"curlExit": "$CURL_EXIT",
|
|
45
|
+
"zapretRunning": $ZAPRET_RUNNING
|
|
46
|
+
}
|
|
47
|
+
EOJSON
|
|
48
|
+
`;
|
|
49
|
+
try {
|
|
50
|
+
const { stdout } = await getExecutor().exec(script, (timeout + 5) * 1000);
|
|
51
|
+
return { content: [{ type: "text", text: stdout.trim() }] };
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
const e = err;
|
|
55
|
+
return {
|
|
56
|
+
content: [{ type: "text", text: `Error: ${e.stderr || e.error?.message || "unknown error"}` }],
|
|
57
|
+
isError: true,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=verifyBypass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifyBypass.js","sourceRoot":"","sources":["../../src/tools/verifyBypass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,kLAAkL;IAC/L,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;QACxG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,+CAA+C,CAAC;KAC1F,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAA2C,EAAE,EAAE;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAEnC,MAAM,MAAM,GAAG;;;uBAGI,MAAM;;6BAEA,MAAM;;;;;;;;;;yEAUsC,OAAO,aAAa,MAAM;;;;;;;;;;;;eAYpF,MAAM;;;;;;;;KAQhB,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC1E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;QACvE,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,GAA0D,CAAC;YACrE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,IAAI,eAAe,EAAE,EAAE,CAAC;gBACvG,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "zapret2-mcp",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "MCP server for managing zapret2 network packet processing tool on OpenWrt routers and Linux desktops via Docker, SSH, or locally",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Stanislav Zemlyakov",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/rcd27/zapret2-mcp.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/rcd27/zapret2-mcp#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/rcd27/zapret2-mcp/issues"
|
|
14
|
+
},
|
|
15
|
+
"type": "module",
|
|
16
|
+
"main": "build/index.js",
|
|
17
|
+
"bin": {
|
|
18
|
+
"zapret2-mcp": "build/index.js"
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"build",
|
|
22
|
+
"README.md",
|
|
23
|
+
"LICENSE",
|
|
24
|
+
"CHANGELOG.md"
|
|
25
|
+
],
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=18.0.0"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"mcp",
|
|
31
|
+
"mcp-server",
|
|
32
|
+
"model-context-protocol",
|
|
33
|
+
"zapret",
|
|
34
|
+
"zapret2",
|
|
35
|
+
"network-tools",
|
|
36
|
+
"packet-processing",
|
|
37
|
+
"openwrt",
|
|
38
|
+
"nfqws",
|
|
39
|
+
"nfqws2",
|
|
40
|
+
"ai-agent",
|
|
41
|
+
"llm-tools"
|
|
42
|
+
],
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "tsc && chmod 755 build/index.js",
|
|
45
|
+
"start": "node build/index.js",
|
|
46
|
+
"prestart": "npm run build",
|
|
47
|
+
"dev": "npx @modelcontextprotocol/inspector node build/index.js",
|
|
48
|
+
"test": "vitest run",
|
|
49
|
+
"test:watch": "vitest",
|
|
50
|
+
"test:integration": "npm run build && vitest run --config vitest.integration.config.ts",
|
|
51
|
+
"test:coverage": "vitest run --coverage",
|
|
52
|
+
"prepublishOnly": "npm run build && npm test"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@modelcontextprotocol/sdk": "^1.6.0",
|
|
56
|
+
"zod": "^3.24.0"
|
|
57
|
+
},
|
|
58
|
+
"devDependencies": {
|
|
59
|
+
"@types/node": "^22.0.0",
|
|
60
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
61
|
+
"typescript": "^5.7.0",
|
|
62
|
+
"vitest": "^4.0.18"
|
|
63
|
+
}
|
|
64
|
+
}
|